23 Şubat 2015 Pazartesi

Yapay Zeka İle İlgili Bir Film: Ben, Robot




          Yapay zeka bilgisayar veya bilgisayar tarafından kontrol edilen bir robotun karşılaşılan durumlarda bir insan gibi davranmasını sağlayan bir bilim dalıdır. Bu filmde de yapay zeka ile üretilen robotlar konu alınmıştır.

          Kısaca filmden bahsetmek istiyorum. Film robot yaratıcılarından bir adamın ölmesi ile başlıyor. Robotlardan şüphelenen bir polisin bunu bir robotun yapabileceğini düşünmesi üzerine de kendisine ölen bu adam tarafından verilen ipuçları ile araştırmaya koyulmasıyla da devam ediyor. İnsanlar yine insan tarafından yaratılan makinelere ya da robotlara o kadar çok güveniyor ki ama arka planda onların sadece bir bilgisayar ile kontrol edilebileceğini unutuyorlar. Filmde en ilginç bulduğum şey bir makinenin içerisinde ki çeşitli algoritmaların bir araya gelerek kontrolden çıkmasıydı. Robotlar bilgisayar kullanılarak yönetilirken sadece bir robot insani özelliklere diğerlerinden daha çok sahip olduğu için bu bilgisayar tarafından yönetilmiyor. Ve bu robot sayesinde de kontrolden çıkmış bir sistemin üretilen bu robotları ele geçirmesi engelleniyor.

          Bu filmi izledikten sonra yapay zekaya bakış açım değişti açıkçası. Teknoloji insanların ihtiyaçları doğrultusunda bu ihtiyaçları en iyi şekilde giderecek şekilde gidermesi için gelişir. Yapay zeka belki bize bir çok şeyi sağlayacak ama insani sezgilerin, duyguların hesaplamalardan daha çok gerekli olduğu düşüncesine kapıldım filmi izlerken. Zaten bu tarz bilimsel çalışmaların olduğu ile ilgili haberlere rastlamıştım. Eğer bu kadar çok gelişirse bence insanlık için harika olur. Her zaman matematiksel, algoritmiksel bir hayat yaşamıyoruz çünkü. Filmde Will Smith trafik kazası geçirip iki araba nehire düştüklerinde bir robot onu kurtarmaya geliyor ve kendisini değilde yan arabadaki kızı kurtarmasını istediğinde ise robotun yaşam olasılığı hesaplaması üzerine kızı kurtarmak yerine Will Smith' i kurtarması buna örnek olarak verilebilir.

          Kısacası günümüz teknolojisinde ben insani özelliklerin robotlara mümkün olduğu kadar çok aktarılması üzerine yapay zekanın insan hayatında bir çığır açabileceğini bu film ile anlamış bulundum. Tavsiye ederim. İyi seyirler şimdiden.





15 Temmuz 2014 Salı

Android Uygulamalarda Splash Screen


    Merhaba arkadaşlar hepinizin bildiği gibi çoğu uygulamalar direk açılmaz öncelikle bir açılış ekranı gösterilir. Ya bir yere tıklanıldığında ya da belli bir süre geçmesi halinde ana uygulamaya yönlendirilir. Bizde bugün sizlerle belli bir süre içinde ana uygulamaya yönlendirilen bir açılış ekranı yapacağız. O halde hemen programımızı açalım.
    İlk olarak projemizi oluşturuyoruz.


    Uygulama ekranı için yeni bir layout oluşturuyoruz ( layout-> New -> Layout resource file ) ve adına "splashscreen" diyoruz. Herhangi bir activity çalışırken ekranda gösterilecek olan şey layout'tur. Her activity'nin layoutu farklı olabilir.


    Şimdi uygulama ekranımızı tasarlayalım. Şimdilik Bize "HOŞGELDİNİZ !" diyip resim gösteren bir uygulama ekranımız olsun. Bunun için "Text" ve "HorizontalScrollView" kullanıyoruz. HorizontalScrollView ile ekrandan taşacak olan kontrollerin taşmaması ve belli bir düzende durması sağlanır.



    "android:background=@drawable/resimadi.png" ile uygulamanın açılış ekranına resim ekleyebiliriz.


    Şimdi İngilizce dil destekli açılış metni, buton ismi ve butona basıldığında ekranda gözükecek olacak yazıyı tanımlıyoruz. Bunun için "values" kullanacağız. "values" i kopyala yapıştır yapın ve yeni adına "values-en" diyin. Daha sonra string.xml içerinde vereceğimiz etiket adı ile daha sonradan bunlara ulaşımı sağlayacağız. Sadece "<string name="etiketadi"> Dil destekli hali </string>" ile bu işlem gerçekleştirilir. Bu etiketlerin çağrılması layout'larda bulunan text kısmında gerçekleşir.



    "android:text=@string/etiketadi" ile artık dil destekli halini gerçekleştirmiş bulunmaktasınız.


    Şimdi Splash Screen'i gerçekleştirecek activity'i oluşturuyoruz. Bunun için src -> New -> Java Class diyoruz ve "SplashActivity" adında yeni bir activity oluşturuyoruz. Unutmayın her activity AndroidManifest.xml dosyasına bildirilmeli. Uygulamayı çalıştırırken hata alıyorsanız özellikle bu dosyayı iyi kontrol edin.



    AndroidManifest.xml dosyası activity' lerin tanımlandığı yerdir. AndroidManifest.xml dosyası uygulama çalıştırılmadan önce sistem mutlaka olması gereken bir dosyadır. Uygulama hakkında önemli bilgiler sunar.


    Şimdi uygulama ekranından sonra yönlendirilecek sayfayı yani asıl uygulamızı tasarlayalım. Basit olarak bir buton koyalım ve butona basıldığında TextView' da bir şeyler yazsın. Bunun için "Design" kısmından gerekli araçları sürükleyip bırakın daha sonra "Text" kısmında gerekli değerleri ve adlandırmaları verebilirsiniz. Bir şeye "id" değeri vermek her zaman daha kullanışlıdır çünkü activity kısmında araçlara daha kolay ulaşmamızı sağlar.


    Az önce Splash Screen' e dil desteği vermiştik. Yine aynı işlemler uygulanarak ana uygulamamızı da dil destekli yapıyoruz.






    Eğer buton kullanıyorsanız mutlaka o layout'u kullanan activity içinde butonu tetikleyen metodu tanımlamalısınız. Önce layout da buton etiketi içerisine android:onClick="metodadi" yazın ve hemen o satırın solunda beliren lambaya tıklayarak "Create onClick event handler" seçeneğini ve ardından tanımlanacağı activity' yi seçerek (Butonlar bu projede MyActivity' de) butonunuzun metodunu oluşturun.



    Daha sonra metodun gerçekleştireceği işlemleri kodlayın.



    Sıra geldi SplashActivity sınıfına. Bu örnekte üç saniye "splashscreen" layout'u ekranda gösterildikten sonra ana uygulamaya yönlendirilecektir. Bunun için threadleri kullandım. Farklı yöntemleri de mevcuttur. Eğer ben bir activity içerisinde başka bir activity'yi çalıştırmak istiyorsam bunu
    "Intent degiskenadi = new Intent(getBaseContext(), çalıştırılacakacitivity.class)" ile o activity'yi orada tanımlıyoruz ve "startActivity(degiskenadi)" ile o activity'yi başlatıyoruz.


Artık cihazımı bilgisayara bağlayıp "Run"ladıktan sonra çalıştığını görebiriliz.



9 Temmuz 2014 Çarşamba

Bir Android Projesinde Bulunan Klasörler




            Merhaba arkadaşlar bu yazıda sizlere bir android projesinin içinde bulunan dizinlerin ve klasörlerinin ne anlama geldiklerini aktaracağım. Android projeler .apk uzantılı dosya olarak cihaza yüklenir ve çalışırlar.

            src/

            "src/sizin/paket/ad/ActivityName.java" olarak saklanan Activity dosyasını içerir. .Diğer tüm  kaynak kod dosyaları (.java ya da .aidl gibi ) buradadır.

           bin/

            .apk dosyasının derlenmiş şekilde bulunduğu yerdir. Kendiliğinden oluşur bizim bir şey yapmamıza gerek yoktur.

           assets/

           Android tarafından tanınan veriler R.java ile referans gösterilebilirler fakat tanınmayan dosyalar bu dizinin altında bulunur. Böylelikle kullanılabilir hale gelirler. Oyun verileri için iyi bir konumdur.

           gen/

           R.java dosyası ve AIDL tarafından oluşturuluşmuş arayüzler gibi ADT tarafından oluşturulan java dosyalarını içerir.

           R.java dosyası /res' te bulunan kaynak referansları içerir. /src içerisinde bulunan kodlar bu kaynakları kullanmak istediğinde R.java  referanslarını kullanır. Bu yüzden sistem /res' te kullanılan her kanak için kendiliğinden referans üretir.

           libs/

           Özel kütüphaneleri içerir.

           res/

           Drawable dosyaları, layout dosyaları ve string değerler gibi uygulama kaynaklarını içerir.

                       - drawable/ : Png( resim dosyaları), uygulama iconu ve uygulamada kullanılacak resimler bu klasörde yer alır.

                       - layout/ : Uygulamanın görünümünü belirleyen Xml dosyalarını içerir. main.xml varsayılan olarak verilmiştir. Uygulama açıldığında ilk görüntülenecek sayfa, main.xml sayfasıdır.

                       - string values : Burada çeşitli xml dosyaları bulunur. Bu xml dosyaları: strings.xml, colors.xml, dimens.xml' dir. Kaynaklar için kimlik-özellik görevi görür.

         
         

İntellij Kurulumu ve Andorid Projesi Oluşturma


     
    INSTELLIJ IDEA KURULUMU
     
     İndirilmesi gerekilen dosyalar:
 
   - Oracle JDK indiriniz ve bilgisayarınıza kurun.

             
  - Android SDK indiriniz ve kurmak için dosyanın içinde bulunan /tools klasöründeki "android" dosyasını çalıştırın.
             
             
    Kurmanız gereken paketler: Tools, Android 4.2.2 (API 19) ya da istediğinizi, Extras paketlerini seçerek "Install" deyiniz. Kurulumu tamamlayınız.
               
         
   - İntellij İdea indiriniz ve dosyayı açınız. Açtığınızda "idea-IC-135.909" adında bir dosya göreceksiniz. Terminalden sırasıyla aşağıdaki komutları çalıştırın.
               
                cd /idea-IC-135.909-dosyasınınbilgisayardakiyolu
              cd bin/
              ./idea.sh




    Bu işlemlerini tamamladığınızda terminali kapatmadan bekleyiniz ve artık Intellij bilgisayarınıza kurulmuştur geriye sadece projelerimizi oluşturması kalır. Unutmayın Intellij IDEA' yı her açtığınızda yukarıda ki üç komutu çalıştıracaksınız.

   ANDROİD PROJESİ OLUŞTURMA

   1. İlk olarak File -> New Project diyoruz. Daha sonra Android -> Application Module diyoruz.

 

       
    2. Proje adını yazıp Next diyoruz.


    3. Kullanmak istediğimiz Android versiyonunu seçip ( ben API 19 kullanacağım ) Finish diyoruz.


             
     4. Projemizde bulunun klasörlerin neler içerdiğine bir sonraki yazıda değineceğim. Şimdi sizlerle küçük bir uygulama yapalım. Bunun için res kalsörüne geçiyoruz. res klasörü  drawable dosylarını (png, icon ), layout dosyalarını (ekran düzenini içeren xml dosyaları ) ve string değerleri içerir.

    
      5. Örnek projemizde ekran görüntüsü cihazın dil seçeneğine göre ekrana farklı şeyler yazsın. Bunun için values klasörünü kullanacağız. values klasörünün amacı projenin kaynaklarının farklı tiplerde tutulmasıdır. Cihazın varsayılan dilini İngilizce kabul edelim. Varsayılan dil kullanılırken ekrana "hello world", Türkçe kullanıldığında ekrana "merhaba dünya" yazdıralım. İlk olarak "values-tr" adında klasör oluşturuyoruz. ( res-> New-> Directory diyerek values-tr adında bir klasör oluşturuyoruz.) Daha sonra values de bulunan string.xml' i kopyalayarak yeni oluşturduğumuz values-tr klasörüne yapıştırıyoruz. Artık kodlama evresine geçebiliriz.
   
       values- string.xml dosyasına

       <string name="app_name">projeadı</string>
       <string name="biretiketadı-layout main.xml de çağrılacak"> varsayılan dilde yazılmasını istediğiniz şey</string>

       values-tr- string xml dosyasına

       <string name="app_name">projeadı</string>
       <string name="values' te kullandığınız etiket adı"> Diğer dildeki karşılığı </string>

     
       layout- main.xml dosyasına

        <TextView
                android:layout_width="fill_parent"
                android:layout_height="wrap_sontent"
                android:text="@string/belirlediğinizetiketadı"
         />

       yazıyorsunuz. Artık Türkçe dilindeki versiyonunu eklemiş bulunmaktasınız. Cihazınızı bilgisayara bağladıktan sonra Menü den Run' a basınız ve uygulamayı cihazınızda çalıştırınız. Dilini değiştirip tekrar çalıştırın farkı göreceksiniz.
     
      Sonraki yazılarımda sizlerle Intellij idea' yı kurcalayıp öğrenmek için çeşitli örnekler yapacağız. :)
      
 

5 Temmuz 2014 Cumartesi

Ubuntu ile BusyBox Kullanımı



BusyBox Nedir?

     Adb shell ile hayatımıza giren komutlar yapmak istediğimiz işlemlerde yeterli olmamaktadır. Tam bu noktada devreye BusyBox girer. BusyBox çoğu UNIX komutunun çalıştırılmasını sağlar.

BusyBox Kurulumu Nasıl Gerçekleşir?

    İlk olarak buradan telefonunuza BusyBox uygulamasını indiriniz.


   Daha sonra uygulamayı telefonda açıp "Install" seçeneğine tıklayınız ve kurulumu bekleyiniz.



   Daha sonra terminali açınız. "adb shell" yazarak kabuğa geçiniz. Artık telefonun konsolundayız gibi düşünüyoruz.

   Şimdi BusyBox ile çalıştırılabilir hale gelen komutlarımızı inceleyelim ve birkaçını birlikte yapalım.

   BusyBox ile kullanabileceğimiz komutlar :

  • basename= Dosyadan dizin yolunu ve eklerini şeritler.
  • cat= Dosyanın içeriğini ekranda gösterir.
  • chmod= Dosyanın ya da dizinin erişim yetkilerini belirler ve değiştirir.
  • clear= Ekranı temizler.
  • cmp= Dosyaları karşılaştırır.
  • cp= Dosyayı kopyalamaya yarar.
  • dd= Dosya sisteminde boş alan ve kullanılan alanı gösterir.
  • free= Bellek kullanımını gösterir.
  • gzip= Belirtilen dosyayı sıkıştırır. "dosya.gz" haline getirir.
  • gunzip= Belirtilen .gz dosyasını dosya olarak açar.
  • tar -xvf = Belirtilen arşiv osyasını (sıkıştırılmamış) o anki dizine açar.
  • unzip= Belirilen .zip dosyasını belirtilen dizine açar.
  • head= Dosyanın ilk satırlarını gösterir. (Standart olarak il 10 satır. )
  • id= USERNAME yada geçerli kullanıcı ile ilgili bilgileri gösterir.
  • mkdir= Yeni bir dizin oluşturur.
  • mv= Dosyayı kaydırır ya da ismini değiştirir.
  • reset= Ekranı resetler.
  • rm= Dosyayı siler.
      Diğer komutlara ve ne işe yaradıklarına buradan bakabilirsiniz. Şimdi bir kaç komutu kullanalım ve çıktılarını birlikte görelim.

      "busybox mkdir dizinadi " ile yeni bir dizin oluşturalım.


      "busybox touch dosyaadi" ile yeni bir dosya oluşturalım.


       "busybox rm dosyaadi" ile bir dosya silelim.


       "busybox cp kopayalanacakdosya kopyalanmışadı" ile dosyayı kopyalayalım.


      "busybox cat dosyaadi" ile dosyanın içeriğini ekrana yazdıralım.


      "busybox gzip dosyaadi" ile dosyayı sıkıştıralım.


      "busybox unzip dosyaadi.zip" ile zipli dosyayı açalım.





3 Temmuz 2014 Perşembe

Ubuntu ile Paket Yöneticisi (pm) Kullanarak Android Telefonlarda Dosya Transferi, Dosya Kurulumu ve Kaldırılımı

          Paket Yönetim Sistemi (Using Package Manager) Nedir?
           
          Bir önceki yazımda kullandığım "adb shell" komutu telefonumda çeşitli komutları çalıştırmak için kabuk sağlar. Bu kabuk içinde iki çeşit yönetici vardır:

                              Using Activiy Manager (am) 
                              Using Package Manager (pm)

         Paket yönetim sistemi Linux işletim sisteminde yazılımların kurulup kaldırılmasını sağlar. Bunu Android ile nasıl yaparız derseniz işte bunun cevabı ADB komut satırında "pm" kullanmaktır.

         Using Activity Manager (am): Etkinlik başlatmak, durdurmak gibi çeşitli sistem eylemlerini gerçekleştirmek için "am" ile komutlar verilir. Örneğin  "kill <app adı>" ile çalışan süreci öldürürsünüz.

        Bugün sizlerle Using Package Manager (Paket Yöneticisi) ile andorid bir cihaza dosya tranferi, apk kurulumu, uygulama kaldırılması vb. nasıl gerçekleştiğini paylaşacağım.

        Paket Yönetici (pm) Kullanarak Dosya Transferi, Uygulama Kurulumu/Kaldırılması Nasıl Olur?

        İlk olarak yapacağımız işlem ADB üzerinden komut satırına erişerek sistem ve kullanıcı uygulamalarını listelemek. Bunun için:

        - Telefonumuzu bilgisayara bağlayıp USB Debugging moduna alıyoruz.
         

     - Bilgisayarımda bulunan bir dosyayı telefonuma kopyalamak istiyorsam terminali açıyorum ve sırasıyla aşağıdakileri yapıyorum.

            1. "adb devices" ile Usb olarak bağlı olan cihazları görüyoruz. Bunu yapmamızın sebebi eğer telefonumuzdan başka cihazda bağlı ise "adb shell" yazdığımız hangi cihazın terminali görevi görecek bunu öğrenmek için.
           2. "adb push 'kopyalamakistediğinizdosyanınyolu/dosya.apk' kopyalamakistediğinizyer/yenidosyaadı.apk" ile bilgisayarımızdaki dosyayı telefonumuzdaki yere kopyalamış oluyoruz. Bunu yaparken dikkat ederseniz "adb shell" kullanmadık çünkü "adb shell" telefon konsolu görevi görüyor yani telefon içinde işlem yapıyoruz bu yüzden bilgisayardaki dosyaları göremeyiz.

                       
           3. Daha sonra "adb shell" yazdıktan sonra "ls /dosyanınbulunduğuklasöryolu/" ile listelediğinizde çıktı içerisinde o dosyayı göreceksiniz. Artık bilgisayardaki dosyayı telefonunuza kopyalamış oldunuz.
                       
                       
                 
       - Telefonumdaki dosyayı bilgisayarıma kopyalamak istiyorsam terminali açıyorum ve aşağıdakileri yapıyorum.
          1. "adb devices" ile Usb olarak bağlı olan cihazları görüyoruz.  
   2. "adb pull 'telefondakidosyanınyolu/dosyaadi' /bilgisayardakidosyayolu/" ve artık telefonumuzdaki dosya bilgisayarımıza kopyalanmıştır.


       - Dosya transferlerini iyi anladığımıza göre şimdi bilgisayarımıza indirip telefonumuza kopyalamış olduğumuz apk dosyasını komut satırı üzerinden kurmayı öğrenelim. Artık yazımın başında sizlere bahsettiğim Paket Yönetimini (pm) kullanma vakti. Çünkü bilgisayar konsolundan telefona dosya kurma işlemini gerçekleştireceğiz. Burda dikkat edilmesi gerekilen şeylerden biri "adb shell" yaptığımızda cihaz konsolundayız gibi düşünün. Yani ben apk kurarken mutlaka kabuktan işlemi gerçekleştirmeliyim. Şimdi terminali açıp aşağıdakileri yapınız.
               
         1.  "adb shell" ile kabuğun sağlamış olduğu komut satırına geçiyoruz.
         2.  "pm install /kurulacakdosyanıntelefondakiyolu/dosyaadı.apk" ile dosyayı kuruyoruz.

                   

       - Şimdi telefonumuzda kurulu olan bir dosyayı kaldırmayı öğrenelim. Bunun için;
                        
         1. "adb shell" ile kabuğun sağlamış olduğu komut satırına geçiyoruz.
 2. Her cihazda bu işlem farklıdır. Normalde "pm uninstall /kaldırılacakdosyanıntelefondakiyolu/dosyaadı.apk" olması gerekli fakat bazı cihazlarda "pm uninstall com.dosyaadi.X" şeklinde gerçekleşir. Eğer "Failure" cevabını alırsanız bu işlem gerçekleştirilemiyor demektir belli ki o dosya bu şekilde kaldırılamıyordur. "Success" cevabını aldıysanız işleminiz başarıyla gerçekleştirilmiş demektir.