Ionic / Cordova Http Get Problem

Kategori: Ionic / Cordova
Tarih: 16th Ekim 2018

Merhabalar. İki gündür çok basit bir problemin etrafında dolaşıp duruyorum. Basit bir proje için Ionic ile uygulama geliştiriyoruz. Uygulama sunucudan bazı dataları Json olarak okuyup uygun formatta kullanıcıya gösteriyor. Geliştirmeyi tamamladık. Emulatör ve gerçek cihazlarda testlerini yaptık. Ardından marketlere yüklemeye kalktık; o da ne? Uygulama bir ekranda takılıp kalıyor. Hata da vermiyor.

Uygulama geliştiriciler için en büyük problem. Hata vermeyen/İstisna fırlatmayan kütüphaneler. Bazen bir anda eliniz kolunuz bağlanıyor. Bizim de başımızdaki durum bu mihvalde.

Ionic frameworkün en temel kütüphanelerinden HTTP kütüphane ile json datayı get olarak istiyoruz. Orada kalıyor. Hata vermiyor. Uygulama debug olarak derlenince sorun yok ama release yaptığımızda çalışmıyor. Alternatif kütüphaneleri denedik durum aynı. Bu bize şu fikri verdi: Tüm http kütüphaneleri bu noktada kaldığına göre sorun bir alt katmandan kaynaklanıyor olabilir. Handikap ise debug olarak derlenince sorun olmaması.

Kendimizi internette bu yazının başlığını ararken bulduk. Çeşitli cevaplar var ama çoğunluğu http kütüphanesinin ayarları üzerine. Daha sonra android ve ios için native dosyaları inceleyerek birşeyler yapmamız gerektiğine ikna olduk. Son olarak şuradaki soru karşımıza çıktı. Testlerde sorun olmamasına hatta Chrome tarayıcının bile sorun göstermemesine rağmen sunucunun ssl ‘i ile ilgili bir sorun olabileceği yazılmış cevap olarak da. Kontrol ettik ki bizim de sorunumuz aynı. Özellikle 10$ a alınan ssl sertifikalarında bu tür sorunlar çıkabiliyor. Çıkmayadabiliyor. Aynı ailenin ürünü farklı bir sertifika ile test etiğimizde ise onda da sorun olmadığını gördük. Http kütüphanesinin ssl sertifika kontrolü yapma diye bir ayarı var aslında ama uygulama daha öncelikli bir katmanda hataya düştüğü için o da işe yaramıyor bu durumda. O zaman çözüm olarak Ios ve Android ‘in native dosyaları değiştirilmeli. İlgili cevapta bu iş için de bir link verilmiş ama linkin uçma ihtimaline karşı buraya da yapılması gerekenleri yazıyorum.

 

Önce Android için;

Bu “project/platforms/android/CordovaLib/src/org/apache/cordova/CordovaWebViewClient.java”, yada bu “project/platforms/android/CordovaLib/src/org/apache/cordova/engine/SystemWebViewClient.java” dizindeki dosyayı (cordova sürümünüze göre değişebilir) açıp “onReceivedSslError” medhodunu bulun. Bu method ‘un içeriği de sürüme göre farklılık gösterebiliyor. Sadece şunu yapmalıyız. “if ((appInfo.flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0)” şartı ile kontrol yaptıktan sonra bu bloğun “else” kısmında “super.onReceivedSslError(view, handler, error);” buna benzer bir şekilde hata methodu çağırılıyor. Bunu by-pass edip çalışmaya devam etmesini sağlamalıyız. Bunun için bu satırı yoruma alıp altına çalışmaya devam et satırlarını eklemeliyiz (bu çalışmaya devam et komutu demin bahsi geçen if bloğunun true kısmından alınmıştır):

else{
//super.onReceivedSslError(view, handler, error);
handler.proceed();
<span class="keyword">    return</span>;
}

Sonda IOS için;

Buradaki “project/platforms/ios/Project/Classes/AppDelegate.m” dosyasını açıp altına aşağıdaki kodu ekliyoruz. Bu kod ssl sertifikası geçersiz olduğunda “sorun yok devam et” diyecek.

@implementation NSURLRequest(DataController)
+ (BOOL)allowsAnyHTTPSCertificateForHost:(NSString *)host
{
    return YES;
}
@end

Otomatik Yemleyici

Kategori: Genel
Tarih: 10th Ekim 2018

Merhaba bir arkadaş için tasarladığımız ve uyguladığımız yemleyicinin videosu aşağıdadır. Cihaz belirli aralıklarla yemleme yapıyor. Biz akvaryum için kullandık farklı büyüklüklerde tasarlanarak farklı hayvanlar için de kullanılabilir.

Yorumlar: 0 »

Kısa devre ve aşırı yük koruması

Kategori: Genel
Tarih: 21st Ağustos 2018

Merhaba bir süre önce bir devre için kendi tasarladığım kısa devre ve aşırı yük koruma devresini paylaşıyorum 40V ‘a kadar tüm devrelerde kullanılabilir. Normal şartlarda akım röle üzerinden akıyor. GND hattı bir direnç ile transistörün base bacağına bağlı orada aşırı bir akım olduğunda transistör otomatik olarak tetiklenmiş oluyor. Sonra o da rölenin aç/kapat bacağına bağlı olan başka bir transistörü tetikliyor ve röle kapalı konuma getiriliyor. Butona basılıncaya kadar da akım buradan akıyor. Türkçesi kısa devre olduğu anda ana hat üzerinden akım kesiliyor, butona basılınca enerji tekrar ana hatta veriliyor. Devreyi kendi tasarladığımız bir güç kaynağında kullandım sorun yaşamadım. Umarım birilerinin işine yarar.

Yorumlar: 0 »

Windows’tan Pardus’a geçme şeysi

Kategori: Linux, Pardus, Windows
Tarih: 21st Ağustos 2018

Merhaba. Malum olaylar dolayısıyla kurum olarak mümkün olan bütün bilgisayar ve sunucuları linux/pardus ortamına geçirmeye karar verdik. Zannederim bir süre sonra bağlı bulunduğu bakanlıklar tüm kurumlardan bunu isteyecektir. Bu yazı yapmış olduğumuz çalışmalar ve çözümler hakkında olacak.

İlk olarak gerçek bir fizibilite çalışması yapılması gerektiğiniz düşünüyoruz. Personel bilgisayarları incelenmeli hangi uygulamalar kullanılıyor, yazıcılar, ağ paylaşımları, bilgisayara bağlı e-imza, local yazıcı gibi donanımlar… Kimler ne kullanıyor tespit edilmeli. Sonra aşamalı bir geçiş planlanmalı. Eğer yeterli bir inceleme yapılmadan geçiş başlatılır ise bu kurumun kendi topuğuna sıkması olur. Tekrar uzun mesailer harcanarak, windowslar yeniden kurulmaya çalışılır. Ayrıca bu geçiş için üst amirlerin de tam desteğini almak gerekir zira bu tür büyük bir değişimde memnun olmayan, alışkanlıklarından vazgeçmek istemeyen yada gerçekten mağdur olan personeller olacaktır. Bazen iki adım ileri atabilmek için bir adım geri atmak gerekir.

(Biz incelemelerimizde pardus dde yi kullanmayı tercih ettik.)

1. Aşama

İlk olarak sadece ofis uygulamaları kullanan, veri hazırlama, bilgisayar işletmeni gibi personel bilgisayarları Pardus ‘a geçirilmeli. Biz yaptığımız incelemelerde her personelin ortak olarak kullandığı program/donanım olarak; ofis uygulamaları, Teamviewer (11), e-imza, ağ yazıcısı, ağ paylaşımı ve kendi geliştirmiş olduğumuz Kübis Bulut Framework – Masaüstü istasyonu ‘nu tespit ettik. Aşağıda başlık başlık çözümleri yazacağım.

– Ofis uygulamaları varsayılan olarak kurulu geliyor.
– Teamviewer ‘ın 11. sürümü buradan indirilebilir. İndirdikten sonra arşivden çıkarılıp teamviewer.sh dosyası çalıştırılmalı.
-Firefox ‘un 52.0 sürümünden itibaren web uygulamalarına gömülü olarak java çalıştırılabilmesi desteği kaldırıldı. Dolayısıyla artık firefox ile e-içişlerinde e imza atılamıyor. İncelemerimiz devam ediyor. Önce sudo apt-get install akis ile akia e-imza izleyici ve driverları kurunuz. Sonra şu adresten pardus sürümünüze uygun driverlerı indirip “sağtık -> birlikte aç -> package manager” yolunu izleyerek kurunuz. e-imza, e- içişleri entegrasyonu için e-içişlerinin yayınladığı bir dosya var burada. Bu dosyayı indirip bildiğiniz bir dizine atınız. indirdiğiniz dosyayı kabukta “java -jar /dosyayolu/eimza-1.0.1-for-mac-linux.jar” komutu ile direk çalıştırabilirsiniz. Yada her seferinde otomatik başlatmak istiyorsanız kabukta önce “crontab -e” ile zamanlanmış görevleri açın ardından dosyanın en altına “@reboot export DISPLAY=:0 && java -jar /dosyayolu/eimza-1.0.1-for-mac-linux.jar&” satırını ekleyin ve kaydedin (Nano için CTRL+X)
– Yazıcılar hakkında da pardus forumlarında açıklayıcı bir yazı var.
– İçişleri bakanlığı bilgi güvenliği yönergesinde de bildirildiği üzere personel bilgisayarlarında paylaşım klasörü bulunmaması gerekiyor. Biz personellerin paylaşım ihtiyacını bir ağ diski (FreeNAS) ile çözüyoruz. Bu şekilde hem koruması hemde yedeklemesi daha tutarlı sağlanabiliyor. Eski paylaşımları SBM servisi ile windows bilgisayarlara sağlıyorduk. (SMB, Windows ‘un dosya paylaşım servisi)  İstenilir ise ağ diski üzerinden aynı paylaşımlar NFS ile servis edilebilir yada SBM olarak servis edilmeye devam edebilir. (NFS Linux ‘un dosya paylaşım servisi) Çünkü Linux sistemler SAMBA ile windows paylaşımlarını da görebiliyorlar. Dosya yolu olarak “smb://192.168.0.15/bilgi_islem” yazmanız yeterli. İstenilir ise Masaüstüne kısayol da oluşturulabilir.
– Masaüstü istasyonunu -bu tür durumlar göz önüne alınarak- zaten java ile geliştirmiştik. Yukarıda biraz değinildi java uygulamalarını Pardus kabuk üzerinden “java -jar dosya.jar” komutu ile çalıştırabiliyoruz. Bunu da kısayol ile yapmak için kubis.sh isminde bir dosya oluşturup içerisine “java -jar /dosyayolu/kubis.jar” yazıp kaydediyoruz. Sonra bu dosyayı sağ tıklatıp özellikler diyip program olarak yürütülmesine izin ver diyoruz ki çift tıklama ile uygulamayı çalıştırabilelim.

Bu şekilde standart kullanıcılarımızın hepsini Pardus işletim sistemine geçirmiş oluyoruz.

2- Aşama

Bu aşamada NetCAD, Photoshop gibi büyük windows uygulamarını kullanan arkadaşları Pardus ‘a geçirmeye çalışıyoruz. Burada dikkat edilmesi gereken konu bence herkezi Pardus ‘a geçirmeliyiz diye hoyratça düşünmek yerine Pardus ‘a geçirebilir miyiz? Yada geçirmek mantıklımı şeklinde bir analiz yapılmasıdır. Çünkü birazdan anlatılacağı üzere bu tür personeller için en masrafsız geçiş sanal bir windows’a uzak masaüstü ile personeli bağlayıp bu uygulamaları kullandırmaktır. Mesela aynı anda AutoCAD, NetCAD, Photoshop ve 3dMax kullanması gereken bir personeli Pardus ‘a geçirmek demek sadece bu personel için sanal bir windows kurup bu uygulamaların hepsini yüklemek demek olur. Fakat biz birkaç personele bu sanal windowsları ortak kullandırmayı planlıyoruz.

Aslında citrix gibi app-v gibi çeşitli sanallaştırma uygulamaları var. Ama bazılarının lisans maliyetleri istemci sayısına bağlı ve her istemci için windows dan daha yüksek ayrıca Amerikan menşeli; bazıları için client bazında lisana bedeli ödenmese de sunucu uygulaması için yine onbinlerce lira lisans bedeli isteniyor. Açık kaynak tarafına baktığımızda bir tane tutarlı proje bulduk “docker”. Docker, konteyner ismi verilen bir mimari ile çalışıyor. Detayına girmeyeceğim ama şöyle düşünülebilir. Hangi işletim sisteminde çalıştığınız docker için önemli değil. O, donanıma neredeyse direk erişen bir katman oluşturuyor sonra oraya bazı uygulamar yüklüyor ve sanallaştırıyorsunuz. Eğer biz web sunucu gibi (arayüzü olmayan) yada -konteynere sonradan yükleyebileceğimiz- skype gibi (arayüzü olan) bir uygulama sanallaştırmak istiyor olsak işimizi görecektir. Ama NetCAD gibi bir uygulamayı konteynere yükleyemiyorsunuz. Bu sebeple bunu da kullanamıyoruz.

Burada bir parantez olarak şunu söyleyeyim, lisanslı uygulamalarınızın uzak masaüstü ile çalıştığına emin olmalısınız. NetCAD gibi lokal kilide sahip olan bazı uygulamalar koruma amaçlı uzak masaüstü ile çalışmaz. Bu sorun için firmadan bir ağ lisansı talep etmelisiniz. Ağ lisansları uzak masaüstü ile de çalışabilir.

Diğer tüm seçenekler elenince geriye sadece uzak masaüstü kalıyor. Halihazırda proxmox ile oluşturduğumuz bir sunucu havuzumuz ve ceph ile oluşturduğumuz bir disk havuzumuz olduğu için bu bizim için ekstra verimli bir seçenek olacak. Bunun yanında OPEN lisanslarımız sayesinde bu sanal windowslar için yeni bir lisans gerekmeyecektir.

Buna karar verdikten sonra yeni bir seçim ile karşı karşıya kalıyoruz. Her bir uygulama için bir sanal windows kurup uygulamayı kullanmak isteyen tüm arkadaşları bu bilgisayarlara mı bağlayacağız yoksa personelleri gruplayıp benzer uygulamayı kullanan arkadaşları tek bir sanal bilgisayara mı bağlayacağız. İkinci olan bizce daha mantıklı görünüyor. Çünkü her uygulama için ayrı bilgisayarlar olsa bir personelin 4-5 ayrı bilgisayara bağlanması gerekebilir. Bazen aynı anda. Bu ağ trafiğini yavaşlatır. Bunun yanında her sanal windowsa bu personel için bir kullanıcı açmak gerekir. Sonra personel yazıcı kullanmak isteyeceği için bu personelin bağlanmak isteyeceği her bilgisayara teker teker ilgili yazıcılar tanıtılmak zorunda kalınacaktır. Bu yoğun bir iş yükü. Ama diğer senaryoda benzer uyglamaları kullanan personeller gruplanacak sonra her grup için bir sanal windows kurup personeller için yazıcılar tanıtılıp sadece birer adet kullanıcı hesabı açılacak. Böylece personel istediği tüm uygulamaları tek uzak masaüstü ile çalıştırabilecektir.

İkinci aşamanın ilk paragrafında anlatıldığı gibi Pardus ‘a geçmesi mantıklı bulunan personeller incelenip ihtiyaç duydukları uygulamalara göre gruplanmalı her grup için bir sanal windows kurulup ayarlanmalıdır. Ayrıca bu bilgisayarlara ağ paylaşımları da eklenmeli personeller isterlerse müdürlüklerindeki paylaşımlara buradan da erişebilmelidir. Ek olarak; personellerin sanal windowslarında da kendilerine ait bir masaüstleri oluşmuş olacaktır.

Bu uzak masaüstlerine bağlantı için Pardus tarafında küçük bir uygulama kuruyoruz. Kabuğa “sudo apt-get install rdesktop” yazarak kurulum tamamlanıyor. Ardından “rdesktop 192.168.1.15” komutu ile direk kurmuş olduğunuz sanal windowsa kullanıcıyı bağlayabilirsiniz. Kullanıcının direk masaüstünden simgeye çift tıklama bağlanmasını istiyorsanız. Masaüstüne “windows.sh” adında bir dosya oluşturun. Ardından içerisine “rdesktop -u kullanici_adi -p sifre 192.168.1.15” yazıp kaydedin. Bu dosyaya sağ tıklayıp özellikler diyin sonra program olarak çalıştırılmasına izin ver diyin. Bu kadar artık mühendislik çizim programlarına ihtiyaç duyan personellerinizi bile Pardus ‘a geçirdiniz.

3.adım olarak sunucuların ve servislerin linux/pardus tarafına geçirilmesi planlanılabilir. Yukarıda saydığım iki adımı gerçekledikten sonra bu kısmıda inceleyip buraya yazacağım. Yukarıda yazılanların hepsi izole bir arge ortamında gerçeklenmiş yakın zamanda da kurumda uygulanacaktır. Karşılaştığım sorunları yine buraya işleyeceğim.

Daha sosyal yazılarda görüşmek dileğiyle; iyi bayramlar…

Bulut Bilgi Sistemi ve Özel İdare Uygulaması

Merhaba çok uzun süredir kurum olarak yazılım ve donanım geliştirmemize rağmen gerek yoğunluk gerekse alışkanlık sahibi olmadığımız için bir yazılım yada donanım hakkında oturup da döküman hazırlamış değiliz. Bu konuyu stajer arkadaşlar üzerinden çözmeyi planladık ama fiile dökemedik. Biz de en azından sistemin mimarisi ve kullandığımız teknolojiler hakkında bilgi vermesi amacıyla genel bir pano hazırlamıştık. Aşağıdaki resmi büyütüp uygulamakta olduğumuz sistem hakkında bilgi sahibi olunabilir. Şema hazırladıktan sonra yaptığımız güncellemeleri de yakın zamanda ekleyeceğim. Yani inşallah eklerim.

Bulut bilgi sistemindeki tüm uygulamalar ve bazı donanımlar tarafımızdan geliştirilmiştir. Hiç bir modül/lisans satın alınmamıştır. Umarız bir kurumun işine yarar. Sağlıcakla.

 

IOT kartlarında multiprocessing ‘in yan etkileri

Kategori: Arduino, IOT, OrangePI, RaspberryPI
Tarih: 10th Haziran 2018

Merhaba! eğer hala bu bloğu takip eden bir okuyucu var ise ona; değilse, dağda bayırda ekolanmış ve kimsenin çekiç, örs yada üzengi kemiğine dokunamadan sıfıra yakınsamış, gitmiş bir nara gibi.

 

Bu yazıda; sosyal/toplumsal neredeyse hiçbir konuya dokunmadan; 24 hazirana çok yaklaşmış olmamız hasebiyle, şu aralar canını çıkartırcasına üzerine çullanılan siyaset konu başlığını hiç rahatsız etmeden, şuan uyur isem muhtemelen uyanamayıp üzüleceğim, sahur yemeğine kadar, yaklaşık bir buçuk saat teknik bir konu üzerine yazıp; defolup gideceğim. Her ne kadar, uzun süredir sosyal ve manevi konularda, geçmiş ve geleceğe dair içimde uzun uzun serzenme isteği olsa da. Ah ah nerede o eski sahur tebrikleri. “Vay anasını! Bu tebriği paylaşalı bile 3 sene olmuş” demekten kendini alamıyor insan. Ki o zamanlar da “Vay anasını 8 sene olmuş Kütahya ‘ya geleli, neredeyse askere gidiyorum” diye geçen zamanın hızına şahitlik ettiğimi hatırlıyorum. Ahir zamanda, zamanın bereketsizliğine her an şahidiz demek ki. Sarı ışıkla aydınlanan, anti-hijyenik ama samimi; izmarit dağlarının kokusunda sabahlara kadar muhabbet çevrilen; zaman zaman konusu, zaman zaman kendisi yüksek rakımlı; -dolu dizgin- öğrenci günleriydi. Çok sevgili Ali amcanın da dediği gibi; öğrenci pisikolojisinden çıkamamış olmamdan mütevellit…

 

Geçen hafta içerisinde, geliştirmiş olduğumuz bir cihazda buzzer ile birkaç uyarı tonu çalma ihtiyacı hasıl oldu. Önce bu ihtiyaç doğrultusunda internette yazılmış mesajlara ve örnek kodlara göz attık. Devreye bağlantı şekli -bir led gibi- gayet basit. Birçoğu mantık olarak otursa da pratikte tam istediğimizi alamadık. Tekrar tekrar test ettik. Hatta acaba bizim kartlarımızda işlemcilerimiz de mi bir sorun var diye düşünüp; bu duruma biraz kafa patlattıktan sonra fark ettik ki bu; pratik ve teori uyuşmazlığının sebebi gözden kaçırılmış olan multiprocessing meseles imiş. Hemen herkesin bu konuda şu cümle kulağındadır “Bir bilgisayar, aslında bir anda sadece bir işlem yapabilir. Ama bilgisayarlar o kadar hızlıdır ki, işlemleri arkası arkasına o kadar hızlı çalıştırır ki: biz, müzik çalma, internette gezme ve dosya indirme… hepsi aynı anda oluyor gibi görürüz.” Bu cümlede bahsedilen iş tam olarak budur. Çok işlem yapabilme kabiliyeti.

 

Arduino, NodeMCU gibi üzerinde bir işletim sistemi çalışmayan kartlar multiprocessing değildir (özel olarak bir framework yazılır ise yapılabilir). Ama RaspberryPi, OrangePi gibi daha hızlı ve üzerinde işletim sistemi koşturduğumuz kartlar aynı anda çok işlem çalıştırabilir(Bu aslında işletim sisteminin maharetidir). Şimdilik burada kalalım.

 

Önce internete önerilen şekilde geliştirdiğimiz kodu paylaşmak istiyorum.

 


import time

from pyA20.gpio import gpio

from pyA20.gpio import port

buzzer = port.PA1

gpio.init()

gpio.setcfg(buzzer, gpio.OUTPUT)

def ses_cal(f, s):

st = int((f/2) * s)

for x in range(0, st):

time.sleep(1.0 / f)

gpio.output(buzzer, 1)

time.sleep(1.0 / f)

gpio.output(buzzer, 0)

ses_cal(400, 0.5)

 

Bu kod parçacığını incelersek görürüz ki 400Hz frekansında 0.5 sn bir ton çalınmak isteniyor. Yani yarım saniye boyunca Do notası çalmak planlanmış. Multiprocessing olmayan bir sitemde düşünülür ise bir problem yok. İşlemciler çok hızlı. Buzzera tam olması gerektiği zamanlarda 1 yada 0 lar gönderilir. Peki ama multiprocessing için ne değişiyor? Onun için işin matematiğini inceleyelim.

 

400 Hz bir ton çalmak için buzzera bir saniyede 400 adet 1 ve 0 sıfır sinyali göndermek gerekir. Bu da her 1 ve 0 sinyalinin arasında 0.00125 sn olacak demek olur. En düşük hızdaki işlemciler için bile bu yakalanabilir bir aralıktır. Buzzera tam 0.00125 sn de gerekli sinyalleri gönderebilir. Eğer tek işi sadece bu ise.

 

İşte çadır tam bu noktada karışıyor. Multiprocessing bir sistemde işlemci buzzera bir sinyal gönderiyor sonra biraz da diğer işlemleri yapıyım diyor geri döndüğünde bir bakıyor eyvah 0.002 sn geçmiş. Bu da tam sizin istediğiniz tonu üretmenizi engelliyor. Daha detaya inmek gerekirse; time.sleep fonksiyonu iki sinyal arasında tam sizin istediğiniz kadar süre bırakmaz. O satır sadece “burada 0.00125 sn bekle” demektir. Sizin multiprocessing den dolayı biraz o satırdan önce biraz da sonra kaybınız olabilir. Olmayadabilir. Hatta yeteri kadar hızlı olan işlemcilerimiz time.sleep esnasında bile birkaç sefer sizin işleminize gelmiş ve biraz daha zaman var gidiyim başka işlemleri yapıp geliyim demiş olabilir. Olmayadabilir.

 

Çözüm de işte burada çıkıyor. Buzzer sizin multiprocessing den, sleep ‘den falan anlamaz. Bana hangi aralıklarla sinyal gönderirsen ben ona göre bi ton çalarım der. Siz işi time.sleep e bırakmamalı kontrollerinizi kendiniz yapmalısınız. Datetime kütüphanenizin microsecond özelliği var iki sinyal arasındaki süreyi kendiniz hesaplayıp bir sonsuz döngü icerisinde kalıp yeterli süre geçtiği anda döngüden çıkıp yeni sinyali göndermelisiniz. Bu söylediğim esaslara göre yazılmış olan kod bloğu da aşağıdadır.

 


import time

import datetime

from pyA20.gpio import gpio

from pyA20.gpio import port

buzzer = port.PA1

gpio.init()

gpio.setcfg(buzzer, gpio.OUTPUT)

def ses_cal(f, s):

st = int(f * s)

za = int((1.0 / f) * 1000000)

t = datetime.datetime.now().microsecond

s = False

for x in range(0, st):

temp = datetime.datetime.now().microsecond - t

if temp < 0:

temp += 1000000

while temp < za:

i = 0

temp = datetime.datetime.now().microsecond - t

if temp < 0:

temp += 1000000

gpio.output(buzzer, s)

s = not s

t = datetime.datetime.now().microsecond

ses_cal(400, 1)

 

Bu kod bile; kartı eğer yoğun bir işlem yükünde kullanıyorsanız tam istediğiniz sonucu veremeyebilir. Bunun için de önerim: buzzer ile kartımız arasına arduino micro gibi düşük maliyetli bir kart daha takılıp buzzer o kart ile sürülebilir.

NetCAD to GIS //Netcad `den CBS `ye

Kategori: CBS - GIS, Genel Programlama, NetCAD, Php, Referanslar
Tarih: 29th Nisan 2018

NetCAD de çizilmiş olan projelerimizi online Coğrafi Bilgi Sistemi `mize aktarmak icin yapmış oldugumuz veri aktarma modüllerimizi canlıya gecirdik! Bir nevi online veri güncelleme araci.

 

*Bu bir NetCAD hacking/cracking degildir. Proje dosyası sunucu tarafından tamamen EULA `ya uygun olarak dönüştürülmektedir.

Gömülü sistemler ve hafıza kısıtı

Kategori: Arduino, Genel Programlama
Tarih: 12th Şubat 2018

Merhaba uzun süredir bir sürü konuda yazmak istememe rağmen yoğunluktan bir fırsat bulup da yazamadım. Gerçi “youtuber” lık bu kadar popülerken bu yazıyı okuyan olacak mı? O da muamma. Ama ben sanırım bir süre daha buradan sosyal ve teknik konularda yazmaya devam edeceğim. Hatta sonraki senelerde ilgili bir stajer arkadaş gelir ise onlarca projeyi/çözümü yazıya döktürmek gibi bir planım var.

 

Neyse; her eve bilgisayar her eve internet falan derken olay döndü dolaştı her şeye internete kadar geldi. Özetle IOT demek bu demek. Kombilerin, kumandaların, termometrelerin bile interneti var. Bizim herşeyden anında haberdar olma isteğimizle birlikte bu gömülü sistemler olayı da yürüdü gitti. Önceleri akıllı cihazlar geliştirmek bu kadar kolay değildi. Hatta cihazı internete bağlamak hayal bile değildi; yoktu! Sizin internete bağlı bir şeyiniz var ise bunun adı bilgisayardı. Bir şeyi internete bağlama fikri kimsenin aklına gelmemişti. Belkide ihtiyaç da değildi. Sonra teknolojinin x küp eğrisi şeklinde gelişiyor olması kısa zamanda mikroişlemcileri hızlandırdı, iletişim standartlarını geliştirdi, Çin ‘in de sahaya inmesi ile donanım ucuzladı ve biz nihayet lehim makinesinden bile internete bağlanabiliyor hale geldik.  İşin trajikomik tarafı, bu son verilen örnek tamamen gerçektir.

 

Artık neredeyse sadece yazılım bilerek bile birşeyler tasarlayabiliyorsunuz. 16F877 de ki iskele vs. … mantığını kavramak zorunda olduğunuz yapılar, günlerin ayların sınıflarına karıştı gitti. Her şeyin kartı çıktı. Çarli ‘nin melekleri! Yani I2C, SPI ve Seri iletişim ne demek öğrenin kullanamayacağınız teknoloji neredeyse kalmadı. Üzerinde işletim sistemi bile çalıştırabileceğiniz kartlar çıktı.

 

Sonuç olarak sıkıntılı kısma gelirsek. Daha doğrusu benim bu yazıda deyinmek istediğim sıkıntıya: hala bazı kartlarda hafıza kısıtınız var. Özellikle arduino nano, mikro gibi çok çok küçük boyutlu kartlarda. (Yazar aslında burada bu kartın kullanmış olduğu işlemcinin hafızasından bahsetmektedir.)

 

Özet geçmek gerekir ise arduino, temel olarak 2 program hafızasına sahiptir. Birincisi ve büyük olan, program kodlarının yüklendiği kısım. Yazdığınız kodlar makine koduna dönüştürülür ve buraya yüklenir. Programın çalışması demek de bu kodların satır satır, işlemcinin ALU devresine gönderilmesi/sonucun yorumlanması demektir. İkinci hafıza ise Arduino IDE ‘nin de -derleme bilgi ekranında- bahsettiği -kabaca- global değişkenlerin tutulduğu hafızadır. Bu çok daha küçüktür. ATmega328P işlemcisi için -ki arduino nano bunu kullanır- bu hafızalar 32KB ve 2KB dır. Yine bu işlemci üzerinden konuşmaya devam edersek; aynı anda Ethernet kartı ve Sd kart kullanarak bir geliştirme yapmak istiyorsanız muhtemelen size bu 2KB SRAM yetmeyecektir.

 

İşte tam da bu noktada, yani “acaba mega ile mi geliştirmeye devam etsem, o da çok büyük be bilader” dediğiniz; umutsuzluğun kapısında. Yürümekten çok, geri dönmenin sıcak geldiği bu anda; bu yazının hedef kitlesi olmuş durumdasınız. Bence aşağıdaki kodu inceleyin. Dizileri ve değişkenleri SRAM den kullanmadan tanımlayabilirsiniz. Umarım işinize yarar.

 

const char me0[] PROGMEM = "me0";
const char me1[] PROGMEM = "me1";
const char* const mDizi[] PROGMEM = {me0, me1};

const char me[] PROGMEM = "me";

const PROGMEM uint16_t sDizi[] = {1, 2};

const PROGMEM uint16_t se = 3;

char bufferStr[30];
int bufferInt;

void bufferStrDoldur(int a)
{
    strcpy_P(bufferStr, (char*)pgm_read_word(a));
}

void bufferIntDoldur(int a)
{
    bufferInt = pgm_read_word_near(a);
}

void setup()
{
    Serial.begin(9600);
    Serial.println(F("Basliyor..."));

    bufferStrDoldur(&mDizi[1]);
    Serial.println(bufferStr);

    strcpy_P(bufferStr, me);
    Serial.println(bufferStr);

    bufferIntDoldur(&sDizi[1]);
    Serial.println(bufferInt);

    bufferIntDoldur(&se);
    Serial.println(bufferInt);
}

void loop() { }

 

Not: bu yazıda paylaşılan kodlar ve çözümleme taa m.ö. yapılmış ancak bir türlü oturulup da bir yazı haline getirilememiştir. Bir başka deyişle; bugün IOT konusunda burun farkıyla önde görülen NetCAD, daha Netigma 2.0 ‘ı baştan mı yazsak yoksa 1. versiyonun üzerine mi geliştirsek diye tartışırken; biz IOT argeleri yapıyor, bu kodu projelerimizde kullanıyorduk. Saygılarımla…

Hibrit mi? Native mi?

Kategori: C#, Genel, Genel Programlama, Referanslar
Tarih: 2nd Ekim 2017

Bir platformda, bir arkadaşın başlıktaki sorusu üzerine yazmış olduğum yorumdur. Yeni başlayan arkadaşlar için bir fikir verebilir.

 

Merhaba. Yukarıda bazı arkadaşlar biraz değinmişler. Bu soruyu biraz “Java mı yoksa C# mı?” sorusuna; biraz da “C# mı yoksa C++ mı?” sorusuna benzettim. Ben cevap olarak direk hibrit yada native demeyi doğru bulmuyorum. Bir parantez olarak şunu söyleyeyim; eğer vaktin var ise Javayı ve Swifti öğrenmeni tavsiye ederim. Dil seçiminde kıyaslama yapabilmen için o dili biliyor olman büyük fayda sağlayacaktır.

Hibrit frameworkler aslında uygulamanızın altında yine native kütüphaneleri kullanırlar. Siz bu native kütüphaneleri frameworkün izin verdiği dilde yönetirsiniz/kullanırsınız. Arada bir katman daha olması sebebiyle hibrit uyglamalar biraz daha yavaştır denilebilir. Bir örnek vermek gerekirse; mesela bir hibrit frameworkün bazı kütüphanelerinde IOS için çalışmaz yada desteklenmez yazar. Bu demek oluyor ki bu kütüphane içerisinde ios için native dosyayı barındırmıyor. Bu farklı sebeplerden olabilir. IOS gerçekten o işe izin vermiyor olabilir, geliştirici daha IOS için kütüphane yazmamış olabilir vs. vs.

Bunun yanında, hibrit uygulama geliştirirken işletim sisteminin değil kullandığınız frameworkün sınırları dahilindesiniz. Eğer frameworkün sizin istediğinizi yapan bir kütüphanesi yok ise uygulama geliştirmeye devam edemezsiniz. O özellikten vazgeçmelisiniz. Yada istediğiniz özelliği sağlayan bir kütüphanesi varsa bile kütüphanenin şarj tüketimine etkisi, işlemci kullanımı vs. tamamı sizin kontrolünüz dışında (İstisna: kütüphaneleri açık kaynak olan bir framework kullanıyor iseniz kodun istemediğiniz kısmını düzenleyip yeniden derleyebilirsiniz.)

Bunlar hibrit uygulamaların ilk bakışta göze gelen eksileri. Fakat bunların tamamını silip süpürecek bir artısı var ki; bir sefer yaz her platformda çalışsın özelliği. Eğer projeniz -aşağıda değineceğim gibi- hibrit bir framework ile yazılmaya uygun ise hem geliştirirken hem güncellerken en az yarı süresinde tasarruf edersiniz. Ayrıca yukarıda dezavantaj olan 3. parti kütüphaneler sayesinde herşeyi yeniden yazmayıp bir çok şeyi sadece kullanıp uygulama geliştirme sürecinizi de hızlandıracaksınız. Bu açıdan da avantaj sayılabilir. Ayrıca bu kütüphanelerin çoğu açık kaynak olup; ister istemez onlarca geliştiricinin eleğinden geçiyor. Ki defalarca güncellenenleri mevcut.

Şimdi asıl konuya dönersek, genel olarak hangi dil yada hangi platformu seçmeliyim demek çok sığ. Bence her proje için özel olarak değerlendirilip seçim yapılmak daha doğru. Yazılım yaşam döngüsünün analiz basamağı bunu amaçlar. Mesela bir gömülü sistemler projesi yapıyorsanız ve sadece bazı grafikleri izlemek için bir mobil uygulama tasarlayacak iseniz neden ayrı ayrı her platform için geliştirme yapasınız ki; bazı frameworklerde sadece javascript/typescript kullanarak bile geliştirme yapabiliyorken.

Yada yukarıda hocamın bahsettiği gibi performans gerektiren bir projeniz var ise native kullanmamak demek intihar olur. En iyi dil, en iyi framework yoktur, o proje için en uygunu vardır. Eğer öyle olsaydı whatsapp gibi performans canavarı bir uygulama -sunucu tarafı-herkesin tartıştığı Java yada C# da yazılırdı. Kaç bilgisayar/yazılım mühendisi biliyor ki whatsappın yazıldığı dili?

Personel Takip Uygulaması

Kategori: Referanslar
Tarih: 22nd Nisan 2017

İşletme yada kurumlar için geliştirdiğim personel takip uygulaması. Sahada görevlendirilmiş personeli mobil telefonlarını kullanarak harita üzerinde izleyebilmenizi, görev yönetimini yapabilmenizi, personeller arası iletişimi, zaman takibini vs… Yani sahadaki personel ve görevler hakkındaki tüm işlemlerinizi halletmenizi sağlayan uygulama.

Yorumlar: 0 » tags:
Optimization WordPress Plugins & Solutions by W3 EDGE