GNU, Linux, Unix ve BSD

Sistemi tasarlama, geliştirme ve uygulamanın dışında geliştirilen sistemin yönetilmesi de bir hayli önemlidir. Bu yüzden bir sistem yöneticisinin (sysadmin) bilmesi gerekenler ile ilgili araştırmalara başladım ve Notlarım adında bir kategori oluşturdum. Bu kategori ile öğrendiklerimi arşivlerken bir yandan bilgilerimi pekiştirmeyi planlıyorum.

Sistem Yönetimi” kategorimin ilk yazısını, en temel kavramlardan olan sürekli duyduğumuz GNU, Linux, Unix ve BSD’ nin ne anlama geldiğini not etmek olarak belirledim.

Okumaya devam et GNU, Linux, Unix ve BSD

Google Custom Search API

Merhaba,

Bu yazımda Kelime Ezberle uygulamamda kullanmış olduğum Google Custom Search API ile ilgili bir örnek proje paylaşacağım. Kelime Ezberle uygulamasını incelemek isteyenler buraya tıklayarak uygulamayı inceleyebilirler.

Custom Search API‘nin tanımına çok detaylı girmeyeceğim bu API ile ilgili tanımları birçok yerden okuyarak öğrenebilirsiniz. Kısaca bahsedecek olursam. Google Custom Search, geliştiricilerin Google Arama motoruna dayalı özelleştirilmiş arama motoru oluşturmalarına izin veren Google tarafından sağlanmış bir platformdur.

Ben bu API’yi Kelime Ezberle uygulamamda Google Görsellerde bulunan resimleri elde etmek için kullandım. Kendime Google Arama motoruna dayalı özel bir arama motoru oluşturdum ve daha sonra bu API’yi kullanarak özel sorgular ile dilediğim görseli elde ettim.

Örnek projeleri hazırlarken sade ve kullanımı kolay olmasına dikkat etmeye çalışıyorum. Bu konu için ele alacak olursak amacım Google Görsellerden sorguma karşılık gelen verileri çekmek. Bu yüzden projeyi farklı yerlere çekmeye gerek yok. Verileri çektikten sonra zaten geri kalan kısımları üzerine katarak geliştirebilirsiniz ama önce en temelini halletmek.

Bu proje için bir arama motoruna ihtiyaç var. Bunun için Google’ın bize sunduğu iki sürüm var Custom Search Engine (Ücretsiz) ve Google Site Search (Ücretli). Biz ücretsiz Custom Search Engine kullanacağız. Custom Search Engine’in günlük 100 sorgu limiti bulunuyor. Fiyatlandırmaları buradan öğrenebilirsiniz.

Projeye başlamadan önce yapmanız gerekenler:

  1. Google API Konsol‘dan Custom Search API’yi etkinleştirin ve API Key’i kopyalayın. Bu işlemin nasıl gerçekleştiğini internette bulabilirsiniz.
  2. Custom Search Engine (Özel Arama Motoru) buradan oluşturun ve Görsel Arama seçeneğini aktif edin. Aramanın yapılmasını istediğiniz siteleri “Arama yapılacak siteler” bölümünden ekleyebilirsiniz. Oluşturma tamamlandıktan sonra “Kodu Al” diyerek “var cx=’SEARCH ENGINE ID’ “ tanımlamasında bulunan arama motoru ID’nizi kopyalayın.

Gerekli verileri elde ettikten sonra istekte bulunacağımız URL’den bahsetmek istiyorum. Aşağıda HTTP GET  isteğinde bulunacağımız Custom Search API’nin formatı bulunuyor.

https://www.googleapis.com/customsearch/v1?

Bu format üzerine ekleyeceğimiz sorgu parametreleri ile arama sonuçlarını elde edebiliriz. Sorgunun başarıl olması için 3 parametrenin mutlaka kullanılması gerekiyor bunlar:

1.API Key

2.Custom Search Engine ID (Belirtme için cx veya cref kullanılabilir. Kendi arama motorumuzu oluşturduğumuz için cx kullanıyoruz.)

3.Aranacak Kelime (Belirtme için q kullanacağız.)

Bunları elde ettikten sonra oluşan formatımız aşağıdaki gibi olacaktır.

GET https://www.googleapis.com/customsearch/v1?key=INSERT_YOUR_API_KEY&cx=017576662512468239146:omuauf_lfve&q=lectures

Sorgumuzu biraz daha özelleştirecek olursak:

Resim Boyutu: “&imgSize=medium” (small,medium,large,xlarge…) ekleyerek aramalarımızda resimlerin boyutlarının hangisi olması gerektiğini belirtebiliriz.

Arama Tipi: “&searchType=image” Görsellerde arama olmasını istiyorsanız arama tipi image olmalı.

Dosya Türü: “&fileType=jpg”  (pdf,png,xls,xml,doc,..) Dosya türünü belirterek aramanızı özelleştirebilirsiniz.

Yukarıda belirttiğim 3 sorgu parametresini projede özelleştirirken kullandım. Bu parametreleri URL’e eklemeniz yeterli. Diğer tüm parametrelere bu adresten ulaşabilirsiniz.

Aradığınız kelimenin görsellerine ait linklerinin bir ArrayList’te toplayan ve ilk sonucu set eden örnek projeme aşağıdaki linkten ulaşabilirsiniz.

 

   Proje Kodu

Android SQLite Özel Karakter Problemi

Merhaba, bu yazımda bir dönem veritabanı işlemlerinde bana zorluk çıkaran özel karakter probleminden bahsedeceğim.

Öncelikle problemden başlayalım. SQLite veritabanınıza kaydetmek istediğiniz bir veri ve bu verinin içerisinde tırnak gibi bir özel karakter olduğunu düşünelim. Böyle bir durumda veri içerisindeki tırnak ile sorguya ait tırnak karışacaktır. Örnek verecek olursak:

"DELETE FROM `TABLE_NAME` WHERE COLUMN_NAME='Gökhan'ın yazısı.';"

Fark ettiğiniz gibi sorgumuzda column name kısmından sonra tırnaklarda bir karışıklık oluyor. Bu durumda aşağıdaki gibi bir hata ile karşılaşırız.

android.database.sqlite.SQLiteException: near "n": syntax error (code 1): ,while compiling:
"DELETE FROM `TABLE_NAME` WHERE COLUMN_NAME='Gökhan'ın yazısı';"

Ben bu problem ile karşılaştığımda aklıma ilk gelen çözüm string replace yapmaktı. Fakat bu sorun sadece tırnak ile bitmiyor. Sadece tırnağın bile değişik türleri oluyor sorgudaki normal tırnak ve yatık tırnak gibi.

Bu probleme çözüm ararken bu tür sorunlar için bir database aracı olduğunu gördüm DatabaseUtils.sqlEscapeString. sqlEscapeString verimizin sorgu ile karışmasını önlüyor. Yukarıda verdiğimiz örnek üzerinden gidecek olursak.

"DELETE FROM `TABLE_NAME` WHERE COLUMN_NAME="+DatabaseUtils.sqlEscapeString(Gökhan'ın yazısı.)+";"

sqlEscapeString adından da anlaşılacağı gibi veriniz içerisinde bulunan özel karakterlerin sorgudan kaçmasını sağlıyor. Kullanımı gayet basit bu araç ile özel karakter problemi yaşamaktan kurtulmuş olursunuz.

Firebase Push Notification

Firebase Push Notification

Firebase Cloud Messaging API‘si ile kaydetmiş olduğunuz token’lara push notification gönderebilirsiniz. İnternette uygulama üzerinden push notification gönderebileceğim sade bir örnek bulamadım. Bunun için örnek bir proje hazırladım. PHP + Android kodları ve kullanımına dair açıklamalara buradan ulaşabilirsiniz.

 

Ekran Görüntüleri:

     

Ağ Cihazlarını Yapılandırma-1 Anahtar ve Yönlendiriciye İsim ve Parola Verme

CLI (Command Line Interface) ortamına erişmek için kullanılan en yaygın yöntemler konsol portu, telnet veya ssh’dır.

Konsol Portu

Konsol portu kullanarak ilgili ağda, ağ hizmeti yapılandırılmamış olsa dahi (örneğin ağ cihazı ilk kez yapılandırılırken) cihaza erişim sağlanabilmekte ve cihaz yapılandırılabilmektedir. İlk yapılandırma sırasında, terminal emülasyon yazılımını (hyperterminal, putty vs.) çalıştıran bir bilgisayar, özel bir kablo (console kablosu) kullanılarak cihazın konsol portuna bağlanır. Anahtar (switch) veya yönlendiricinin (router) ayarlanmasına yönelik yapılandırma komutları bağlı bilgisayardan girilebilir. Konsol portu ayrıca ağ cihazları hata verdiğinde ve Cisco IOS cihazına uzaktan erişimin sağlanamadığı durumlarda kullanılabilir.
console2
Birçok IOS cihazında, konsol erişimi varsayılan olarak şifresizdir. Fakat cihaza yetkisiz erişimi önlemek için konsol, parolalarla yapılandırılmalıdır. Bir anahtarın (Switch) konsol erişimine şu komutlarla parola verilebilir:

Switch#configure terminal        //ayrıcalıklı exec mod (privileged mode)
Switch(config)#line console 0  //global mod
Switch(config-line)#password cetin
Switch(config-line)#login

Yönlendirici (router) cihazının konsol erişimini sınırlandırmak aşağıdaki komutlarda görüldüğü gibi anahtar yapılandırmasıyla aynıdır.

Router>enable Router#configure terminal        //ayrıcalıklı exec mod (privileged mode) Router(config)#line console 0  //global mod Router(config-line)#password cetin Router(config-line)#login Switch>enable

Konsol parolasını cetin olarak vermiş olduk. Komutların bir kısmını yazıp tab tuşuna basarak tamamlayabiliyoruz.

Telnet

Telnet, terminal emülasyon programları kullanılarak sanal arayüz yoluyla ağ cihazlarına uzaktan erişmek ve yapılandırmaktır. Telnet bağlantısının yapılabilmesi için ağ cihazı, IPv4 gibi bir İnternet adresiyle yapılandırılmış en az bir etkin arayüze sahip olmalıdır. Cihazın telnet erişimini sınırlandırmak için aşağıdaki gibi parola verilebilir.

Switch(config)#line vty 0 15
Switch(config-line)#password azizoglu
Switch(config-line)#login

Burada telnet parolamız azizogludur.

Ayrıcalıklı Exec Modunu Sınırlandırma

Kullanıcı exec modu 2 farklı şekilde sınırlandırılabilir. Birinci yöntem:

Switch(config)#enable secret cisco

İkinci yöntem:

Switch(config)#enable password cisco2

Cihazlara isim verme

Ağ cihazları yapılandırılırken isimleri aşağıdaki gibi “hostname” komutu ile değiştirilebilmektedir.

Switch(config)#hostname Cetin
Cetin(config)#

Anahtar (Switch) yapılandırmasının ayrıntıları için aşağıdaki videodan faydalanabilirsiniz.

CNY70 ile Led Yakma Uygulaması

Geçen yazımda pic içerisindeki karşılaştırıcı modülünü kullanarak örnek yapacağımı söylemiştim. Karşılaştırma Modülü yazımı incelemek için tıklayınız. Yapacağım örnekte CNY70 sensörünü kullanacağım  bu sensör çizgi izleyen robotlarda da kullanılmaktadır. Uygulamada sensör üzerine beyaz kağıt getirdiğimizde led yanmasını sağlayacağım.  CNY70 sensörü üzerine beyaz kağıt getirdiğinizde ben yaklaşık olarak 2V gibi bir değer gözlemledim diğer durumda ise 5V’a yakın bir değer gözlemledim bu yüzden 2.5V referans değerini tercih ettim bir önceki yazımda da bunun için yapılacak ayarları göstermiştim. Şimdide kodları ve çalışır halini göstereceğim. CNY70 Yukarıda CNY70 ile yapacağımız bağlantıyı görmektesiniz. Aşağıdada devrenin bağlantıları mevcut. CNY70 Devre Devreyi yazdıktan kodlamaya başlayalım. İlk önce kullanacağımız PIC ve Osilatör ayarlarını yapıyoruz.

LIST P=16F628A
 INCLUDE "P16F628A.INC"
 __CONFIG _XT_OSC & _CP_OFF
 ORG 0
 CLRF PORTB

Daha sonra önceki yazımda anlattığım ayarlama ile 2.5 V referans değeri ayarlıyoruz.VRCON biti bank1 de olduğundan ayarlamasını bank1 e geçtikten sonra yapıyoruz.

MOVLW b'00100010' 
 MOVWF CMCON
 BSF STATUS,RP0 
 CLRF TRISB
 MOVLW b'10101100' 
 MOVWF VRCON
 BCF STATUS,RP0

Şimdi Kontrol ediyoruz kağıt beyaz mı ? yani referans gerilimimiz 2.5 v’nin altında mı altındaysa Ledi yak 2.5 Voltun üstündeyse Led OFF’a git ve ledi söndür. Ledin durumuna karar verdikten sonra tekrar kontrola döndürmeyide unutmuyoruz.

          BCF STATUS,RP0
Kontrol   BTFSS CMCON,6
          GOTO LEDOFF
          BSF PORTB,1 
          GOTO Kontrol
LEDOFF    BCF PORTB,1 
          GOTO Kontrol
          END

Uygulamamız burda bitiyor ASM ve Hex Dosyaları için tıklayın.

PIC16F628 Karşılatırıcı (Comparator) Modülü

Bu yazımda, PIC16F628 ile karşılaştırıcı modülünün nasıl kullanıldığını paylaşacağım. PIC16F628’in Data Sheet’inden 10. Bölümünde Comparator Module kısmından yararlanacağız. Bu yazıda 2.5 Volt referans almak için CMCON ve VRCON register’larının kullanımı göstereceğim daha sonraki yazımda CNY70 sensörünü kullanarak bir örnek yapacağım.

PIC16F628 karşılaştırıcı modülü 2 adet analog karşılaştırıcı içerir. CMCON Register’ı 8 bitliktir.

CMCON Comparators

 

  • CMCON Register’ının son 3 biti karşılaştırma modunun seçimi için kullanılır bunu seçerken data sheet içinden seçeriz.Aşağıdaki resimde de gördüğünüz gibi 8 farklı seçenek var benim için uygun olan “010” olduğu için onu seçiyorum çünkü dahili olarak bir referans değer kullanacağım.Comparator select
  • 3.Biti yani CIS biti ile bağlanacak portların seçimine karar verilir. Ben “0” seçerek RA0 ve RA1 portlarını tercih ediyorum.
  • 4.Bit (C1INV) “1” olarak tercih ettiğimiz durumda giriş değeri alacağımız referans değerinden küçük olduğu durumda “1” değeri verir bize diğer durumda “0” verir.
  • 5.Bit (C2INV) buda 4.Bitteki mantıkla aynı.
  • 6.Bit “0” yapılarak VREF’in sadece dahili olarak kullanılması sağlanır.
  • 7.Bit “1” yapılarak VREF aktif hale getirilir.

Sonuç olarak  kodumuzu yazarken CMCON bitimize “10110010” değerini atamamız gerekecek.

Şimdi VRCON registerından bahsedeyim. İlk önce beslememizin 5V olduğunu düşünerek alacağımız referans değerini nasıl hesaplayacağımızı göstereceğim.

VREF=(VR<3:0>/24) x VDD (5V)

Örneğin 2.5 Volt alacak olursak ((5/2) / 5) x 24 işlemiyle VR < 3:0 > = 12  lojik olarak “1100” karşılık gelir.

Ayarlarken VRCON Registerını da son 4 biti bulduğumuz değeri yazmak üzere diğer bitleri yukarıda verdiğim bilgilere göre yazılır. Sadece 4.bit unimplemented bit, read as 0 olarak geçtiğinden 4.biti 0 yazıyoruz. Sonuç olarak VRCON=”10101100″