Ben ve hepimiz hakkında bir bayram tebriği

Kategori: Genel
Tarih: 23rd Eylül 2015

Elbiseler şeffaf, insanlar kesif artık. Cesurca cesetlerini gösteriyor herkes. Birbirimizi ezbere biliyoruz. Lakin ruhlar tesettürde.

İçtenlik namına bütün kaygılardan kurtulunmuş, tüm tabular yıkılmış. Eğleniyormuş gibi görünmek için çekinmeler, benilmek için fikretmeler ve sınır tanımamak. Mukaddesleri bile feda ederken çekinmiyor insan; nefretten, kinden gözü dönmüş bir beğenilme, alt etme güdüsüyle. Evet o ayetler siz eski sevgilinize laf sokun diye indirildi(!)

Herkes olmak istediği gibi asosyal dünyada. Olduğu gibi olanımız yok değil az. Instagramda herkes güzel, twitterda herkes komik idealist… Ama genelde mutsuz insanlar. Kontrolsüzce yükseldi mutluluk eşiğimiz. O an nerede değilsek orası daha güzelmiş gibi geliyor artık. Canavarlaştırılmış egolarımız. Memnuniyetsizsiniz!

Ruhlarımız gasp edildi. Birbirimize yaptık bunu. Fikrimizi gösteremeyince cesedimizi gösterir olduk bizde. Uzun soluklu hiçbir sınavda başırılı olamayan boş bir kalabalığız şimdi.

Aslında bu bir kurban bayramı tebriği olacaktı, olmalıydı, olsun. Allah bayram ruhunu hissedebilmeyi hepimize nasip etsin, bayramınız mübarek olsun -kendi ruhlarımızın hasretinde-.

 

***şimdi ben bu yazıyı niye paylaştım? beğenilmek için mi? bilmiyorum. belki.

Yorumlar: 2 »

Sahurunuz Hayrolsun

Kategori: Genel
Tarih: 23rd Eylül 2015

Bakıyorsun; en sosyal gördüğün en kalabalık insanların hatta en güzel kızların bile -ki bu kızların etrafı her daim zibilton tane abaza doludur (yazar burada zibilyonu kalabalık bir ölçü birimi manasında kullanmaktadır)- profillerinde “üff sıkıldım”, “püff bunaldım” tarzı paylaşımlar. Anla ki 1500 arkadaş yahut 2500 takipçi bile yetmiyor insanın içindeki manevi boşluğu doldurmaya.  Çok sevgili -yada belkide o kadar değil şuan tam karar veremedim- Süleyman Demirel’in de dediği gibi “Binaen aleyh” huzur islamda dostlar. Hayırlı sahurlar.

Yorumlar: 0 »

11. koğuştan bir özür

Kategori: Genel
Tarih: 23rd Eylül 2015

İnciciler içi özet:

7 uyurların da dediği gibi “Ne uyudum be bilader”

 

Kendimi bildim bileli bir uyku sorunum var. Daha doğrusu bir uyku sorunum yok. Uykuya dair hiçbir sorun yaşamıyorum. Bu bir sorun mu bilmiyorum. Yere paralel durmama bile gerek kalmıyor bazen. Yastığa beş kala uyuyakalıyorum.

Bu askerlik süreci de gösterdi ki; asit denilebilecek yoğunlukta ayak ve ter kokusunda hatta yüksek desibel kahkaha sesinde bile uyuma güçlüğü çekmiyorum.

Ve bu gece. Bu bol yıldızlı ve ferah; hatta sırf güzel şeyler konuşulsun, bişeyler paylaşılsın da buralar daha yaşanabilir olsun diye planlanmış bu gecede, dayanamadım. Yine uyudum.

Not: Bu koğuş arkadaşlarımdan bir özür yazısıdır.

Yorumlar: 0 »

CodeIgniter3++

Kategori: Codeigniter, Php, Referanslar
Tarih: 16th Mart 2015

Codeigniter framework geliştiricileri 2.2. versiyondan sonra artık geliştirme yapmayacaklarını duyurmuşlardı. 2015 Ocak itibariyle bu karar değiştirilmiş. CI3 versiyonu RC sürümleriyle yayınlanmaya başladı. Şuan RC3 yayında. Bende şimdiye kadar yaptığım çekirdek geliştirmelerini ve bazı kütüphaneleri ekleyerek bir temel proje oluşturmaya karar verdim. Bu proje aşağıdaki ekleri ve geliştirmeleri içermektedir. Projeyi buradan indirebilirisiniz.

 

 

1- Serbest Kütüphane

Çeşitli işlermler için yazılmış fonksiyonlar bu kütüphaneye eklendi. Bu kütüphane CI yüklenmeden önce yüklenir ve CI’dan bağımsız olarak uygulamanın istenilen yerinde kullanılabilir. Akla hemen neden helper geliştirilmedi de böyle bağımsız bir kütüphane geliştirildi sorusu gelecektir. Bunun kütüphanedeki bir çok fonksiyon için farklı cevapları var. Bir örnek verelim. Flood kontrol fonksiyonu. Bu, sisteminizi flood saldırılarına karşı korumak için yazılmış bir fonksiyondur. Bu fonksiyon helper içinde tanımlansa idi bir saldırı bile olsa bu fonksiyonu kullanmak için CI’ ın yüklenmesi gerekecekti. Yani saldırılarda bile CI yüklenecekti. Zaman kaybını öncelemek için flood_kontrol fonksiyonu CI yüklenmesinin önüne alınmıştır.

 

2- Güvenlik Geliştirmeleri

  • İlk güvenlik geliştirmesi flood kontrolüdür. Sistem flood saldırılanı tespit ederek uygulamanızın yüklenmesini durdurur. Bu konu ile ilgili ayarı “./kutuphane.php:157” dosyası içinden yapabilirsiniz.
  • Oku fonksiyonu. Serbest kütüphane içinde bulunan bu fonksiyon istenilen modda okuma yapıp okuduğu veriyi “sql enjeksiyon”, “xss saldırısı” gibi güvenlik açıklarından temizler. Bunun yanı sıra faklı kaynaklardan istediğiniz veriyi okumanıza yardımcı olur. Ek olarak Yaz fonksiyonunuda bununlar birlikte inceleyebilirsiniz.
  • Captcha yani resimdeki karakterler koruması. CI’ın mevcut fonksiyonlarının üzerine geliştirilen bu koruma ile sayfanız içersinde herhangi bir yere “<div id=’captcha-alan’ w=’300′ h=’35’></div>” kodu ile istediğiniz boyutta bir captcha oluşturabilirsiniz. Cache kullansanız bile uygulama bu alana dinamik olarak captcha resmini yerleştirip kullanıcıya “captcha” anahtar kelimesi ile resimdeki karakterleri içeren stringi session olarak atayacaktır.
  • Form ID. Bu koruma ile uygulama tarafından form_open() fonksiyonu ile oluşturduğunz her form içine, o form için özel oluşturulmuş bir ID eklenir. Bu şekilde form kopyalanması, formların offline olarak doldurulması, farklı sitelere sizin formunuzun gömülmesi gibi işlemlerin önüne geçmiş olursunuz. Çekirdek geliştirmesi ile “$this->form_validation->run()” kodunu çalıştırırken Form ID’niz de otomatik olarak kontrol edilecektir. ID doğrulanamaz ise kullanıcıya hata sayfası gösterilecek ve log dosyasına hata yazılacak.

 

3- Çoklu ve Dinamik Dil Desteği

Bu destek sayesinde veritabanınızdan dinamik yüklediğiniz dil bilgileriyle uygulanızı istediğiniz her dilde sunabilirsiniz. Sistem dil bilgisini url ‘in ilk segmentinden tespit eder. Bu dil bilgisi iki harfli olmalıdır. “http://siteniz/tr/” yada “http://siteniz/en/” gibi. Desteklediğiniz dilleri veritabanında dil tablosuna eklemelisiniz. Ayrıca dil klasöründe “<modül ismi>_lang.php” dosyası içine dil verilerinizi eklerseniz, sistem dili tespit ettikten sonra lang dosyasını otomatik yükleyecektir. Mesela “http://siteniz/tr/panel/sinif/method” adresine gitmek istediğinizde sistem turkce klasöründeki panel_lang.php dosyasını yükleyecektir. Siz view içerisinden yeni bir yükleme işlemi yapmaya gerek olmadan istediğiniz dili kullanabilirsiniz.

 

4- Modüler Yapı

CI üzerinde modüler olarak sisteminizi geliştrimenizede izin verilmiştir. Uygulama kullanıcının geldiği url den hangi modüle gitmek istediğiniz tespit eder ve ilgili yüklemeleri ona göre yapar. Örneğin “http://siteniz/tr/panel/sinif/method” adresine gitmek istediğinizde sistem “./tema/panel/” adresindeki temayı dikkate alacak ve dil olarak da türkçe dilini yükleyecektir. Site ve Panel isminde iki adet modül olduğu varsayılmıştır.  Bu konu ile ilgili ayarı “./kutuphane.php:123” dosyası içinden yapabilirsiniz.

 

5- Tema Motoru

CI yapılan geliştirmelerle kullanıcının farklı modüller ve diller için farklı temlar kullanmasına ve her modül için birden fazla tema yükleyebilmesine izin vermektedir. Şöyle ki CI bir temanın seçilebilmesi için sistem ikiparametreyi dikkate almaktadır. İlki modül ismi. “./tema” klasöründe modül isimleriyle aynı isimde ve sayıda klasör bulunmalıdır. “./tema/panel” ve “./tema/site” gibi. Sistem gelen url’e bakarak tema klasörü içerisinde hangi klasörü dikkate alacağını otomatik seçecektir.  “http://siteniz/tr/panel/sinif/method” adresi için “./tema/panel/” i tema klasörü olarak kabul etmek gibi. İkinci parametre ise veritabanında yüklenecek tema ayarının tutulduğu kayıt. Veri tabanında ayar tablosu altında ilgili modül  için hangi temanın yükleneceği ayarı tutulur. Bu kayıda erişmek için anahtar kelime “<modül ismi>_tema” şeklindeki kayıt adıdır (panel_tema yada site_tema gibi). Karmaşık görünse de değil. Hemen bir örnekle anlatalım.

 

Tema klasörünün ağaç yapısının aşağıdaki gibi olduğunu kabul ediyorum.

/tema

—–/panel
———-/varsayilan
———-/panel_icin_yeni_tema

—–/site
———-/varsayilan
———-/site_temasi2

 

Veri tabanındaki ayar tablosunda da aşağıdaki veriler vardır.

id dil ad veri aktif
1 0 site_tema varsayilan t
2 0 panel_tema site_temasi2 t

 

“http://siteniz/tr/panel/sinif/method” adresine gitmek isteyen bir kullanıcıya “./tema/panel/varsayilan/views” klasörü view klasörü olarak gösterilecektir. Bir başka deyişle $this->load->view(‘deneme’); komutunu yazdığımız bir sayfada yukarıdaki adres için gelen kullancıya “./tema/panel/varsayilan/views/deneme.php” sayfası view olarak yüklenecektir.

 

Her bir tema klasöründe css, js, less ve view klasörleri varsayılan olarak olmalıdır. Daha fazla gerekirse resim, dosya gibi klasörler de ihtiyaca göre temayı kodlayan tasarımcı tarafından eklenebilir. Ayrıca views içindede varsayilan adında bir klasör olmalıdır. Bu klasör bir sonraki paragrafta anlatılacak olan js, css ve less dosyaları içinde php kodu yazabilmemiz için gereklidir. Saydığımız dosyalar direk statik bir dosya olarak eklenmez. Bunun yerine CI üzerinden yüklenir. Bu klasör eski bir temadan direk kopyalanabilir. Peki ama neden js dosyasında php kodu yazmak isteyelim? En basitinden dil desteği için. Js dosyasındaki string ifadeleri CI dil fonksiyonu aracılığıyla yazdırırsak sistem dili otomatik yüklediği için bizim istediğimiz dildeki js dosyasınıda otomatik olarak oluşturacaktır. Standart bir tema dosyasında olması gereken yapı aşağıdadır.

 

tema_adi
—–/css
—–/js
—–/less
—–/views
———-/varsayilan
—————/css.php
—————/degiskenler.php
—————/dosya.php
—————/javascript.php
—————/less.php
Bu yapıyı oluşturduktan sonra istediğimiz dosyamızı istediğimiz isim ile ekleyebiliriz. Herşey artık bizde. Mesela css içerisine sitil.css js icerisinede kutuphane.js, less içerisinede sitil.less dosyasını oluşturduğumuzu düşünelim. Bu dosyalarımızı view sayfamıza aşağıdaki gibi ekleme yapabiliriz.

 

<!– Tema css kütüphanesi –>
<?=css(‘sitil.css’) ?>

<!– Tema less kütüphanesi –>
<?=less_file(‘sitil.less’) ?>
<!– .less dosyalarını çalıştıracak js kütüphanesi –>
<?=less() ?>

<!– Tema js kütüphanesi –>
<?=javascript(‘kutuphane.js’) ?>

 

Son olarak bu dosyaların içerisinde php kodu kullanmayı örnekleyelim:


function facebook_giris()
{
var on = $( "#beni_hatirla:checked").length == 1 ? 'on' : '';
alert("<?=lang('hatirla_mesaj') ?>");
window.location = "<?=url('panel')?>anasayfa/facebook?beni_hatirla="+on;
}

CI less ile uyumludur.

 

6-Form elemanları

Form elemanları için yine önemli geliştirmeler yapılmıştır. Buradan bu konu hakkındaki yazıya ulaşabilirisiniz. Bunların yanı sıra çoklu dosya yükleme ve zengin metin editörüde kullanabilirsiniz. Örnek kod aşağıdadır.


<?php angular_editor('aciklama', '<b>html</b> Test') ?>

<?php coklu_dosya_yukleme('resimler', '', dosya_turu('site', 'id')) ?>

“dosya_turu(‘site’, ‘id’)” bu fonksiyon bir numara geri döndürür. coklu_dosya_yukleme(,,) fonksiyonunun 3. parametsi olarak fonksiyona gönderilir. Bu parametre ile çoklu dosya yükleme aracı dosyaları hangi dizine yükleyeceğini belirler.  Örnekteki dosyalar “./dosya/site/” klasörü altına yıl/ay/gün dizini takip olarak yüklenecektir. Dosya türleri hakkındaki ayarlamaları “./kutuphane.php:992” dosyasından yapabilirsiniz.

 

7- Kullanıcı girişi

Örnek olarak bir tema ve kullanıcı girişi tasarlanmıştır. Tasarlanan tema tüm mobil cihazlarda da tam uyumlu çalışmaktadır. Ayrıca kullanıcının yetkili olup olmadığı kontrol edilip kullanıcı girişi yapmadan panel klasörü altındaki hiç bir sayfaya giriş yapmasına izin verilmemektedir. Sadece giriş ekranına erişebilmesi için “Anasayfa” controller’ına ve js, css, less dosyalarına erişebilmesi içinde proxy klasörüne izin verilmiştir. Bu konu ile ilgili ayara “.\application\config\config.php:7” dosyasından ulaşabilirsiniz.

 

8- Raporlamalar

Ek kütüphaneler ile CI üzerinden Word, Excel ve Pdf raporlar alabilmeniz sağlanmıştır. Bunlarla ilgili birer örnek “http://siteniz/tr/panel/rapor/excel”, “http://siteniz/tr/panel/rapor/word” ve “http://siteniz/tr/panel/rapor/pdf” adresinde bulabilirsiniz.

 

9- Cache

Cache kütüphaneleri de daha kolay bir cache yönetimi için geliştirilmiştir. Bu şekilde cache yapılan dosya url dizini ile aynı şekilde cache dosyasında tutulmaktadır. Dosya adında da dil bilgisi ayrıca indexlenmiştir.

 

10- Geliştirici ayarlamaları ve Özel ayarlar

Geliştirme esnasında ve sistem kullanıma başladıktan sonra sistemi hızlandırma adına bazı ayarlar size bırakılmıştır. Bu ayarları sabit tanımlamaları ile “./kutuphane.php:32” den itibaren bulabilirsiniz. Örneğin sistem dil bilgisini her seferinde yeniden veri tabanından okumak yerine bir sefere mahsus okuyup sizin “VERI_CACHE” sabiti ile belirlediğiniz veri kaynağına yazar. Sonraki her ziyaretçi için bu kaynaktan okur. Burada buna benzer bir sürü ayar bulabilirsiniz.

 

11- Ek kütüphaneler

CI içerisine sizin kullanımızı kolaylaştıracak bir sürü ek kütüphane konulmuştur. Jquery, JquqryUI, Bootstrap, Bootstrap notify, Openlayers, Less… Bu kütüphaneler view dosyası içerisine aşağıdaki koldlarla eklenebilir.


<?=jquery() ?>

<?=bootstrap() ?>

<?=bootstrap_notify() ?>

<?=openlayers() ?>

<?=ui() ?>

<?=angular() ?>

<!-- Framework varsayılan js kütüphanesi -->
<?=javascript() ?>

<!-- Framework varsayılan css kütüphanesi -->
<?=css() ?>
<!-- Tema css kütüphanesi -->
<?=css('sitil.css') ?>

<!-- Framework varsayılan less kütüphanesi -->
<?=less_file() ?>
<!-- Tema less kütüphanesi -->
<?=less_file('sitil.less') ?>
<!-- .less dosyalarını çalıştıracak js kütüphanesi -->
<?=less() ?>

<?=google_analytics() ?>

 

12- Facebook API

CI içerisine Facebook API v4.4 de eklenmiş ve kullanıcı girişi için örnek bir kütüphane tasarlanmıştır. Paneli inceleyerek detayları görebilirsiniz.

 

Not:

  • SQL dosyası kök dizindedir. Veritabanı olarak Posgresql 9.1.15 kullanılmıştır. Kendi Veri Tabanı Yönetim Sisteminize göre sql kodlarını revize etmeniz gerekebilir. Veritabanı bağlantı ayarlarınada “./kutuphane.php:96” dosyasından erişebilirsiniz.
  • Sistem varsayıla olarak APC cache kullancak şekilde planlanmıştır. APC desteklemeyen sistemler için VERI_CACHE sabitine session değeri verilebilir. “./kutuphane.php:56”
  • APC durumunun incelenmesi için “http://siteniz/apc.php” adresini ziyaret edebilirsiniz.
Yorumlar: 2 » tags: , , , ,

Sıcaklık/Nem Kontrol ve Uyarı Sistemi – 2

Kategori: Arduino, C#, Güvenlik, Referanslar
Tarih: 13th Mart 2015

Bu yazıda artık ortamın sıcaklık ve nem değerlerini ölçüp bilgisayarımıza aktaracak olan devreyi tasarlamaya geçebiliriz. Burada devreyi bağımsız iki parça halinde ele alabiliriz. Birinci parça sıcaklık sensöründen verinin okunması. İkinci parça okunan değerin 7 segmentli göstergede gösterilmesi.

Önce sıcaklık sensörü kısmını halledelim. Biz burada DHT11 sıcaklık ve nem sensörünü kullanacağız. İsteyen buradan sensörü detaylı inceleyebilir. Sensörü devremize aşağıdaki gibi bağlıyoruz.

dht11_arduio_baglanti_semasi

 

Şimdi ikinci kısma geçelim. Bu kısım biraz daha karışık. Önce 7 segmentli göstergeden başlayalım. Aşağıda elemanın yapısı eklenmiştir.

 

ortak-katot-display-baglanti-semasi

 

İncelenince görülecektir ki 7 segmentli gösterge için 1 gönderiyim 1 yazsın 3 gönderiyim 3 yazsın gibi bir yapı yok. Birbirinden bağımsız 7 tane led var. Mesela 1 yazmak için GND bağlantılarını yaptıktan sonra, 6. ve 4. bacaktan 5V vermelisiniz. Her sayı için bu ayrı ayrı hesaplanıp yazılım tarafında bir fonksiyon ile çözülebilir. Ama bu şekilde Arduino tarafında 7 pin meşgul edecektir. İki tane digit bağlarsak 14 pin. Bu çok saçma bir kullanım olur. Ne yapalım. İlk akla gelen bir lojik devre tasarlayıp binary gelen sayıyı 7 segmentli göstergede yazdırmak. Bu şekilde 4 pin kullanarak tüm rakamları yazdırırız. (Örneğin pinlerden 0011 verildiğinde göstergede 3 yazdırmak) Bunun için bir devre tasarlamamıza gerek yok zaten bu işi yapan bir entegre var. 4511 entegresi. Bu entegre 4 pin ile binary gelen değeri 7 segmentli göstergede yazdırmak için tasarlanmış. Buradan datasheeti inceleyebilirsiniz. Bacak bağlantıları ve açıklama tablosu aşağıda.

 

4511

pin isim

bağlantıları

1 B girişi B girişi
2 girişi C C girişi
3 lamba test girişi Lojik-1
4 ripple girişi Lojik-1
5 aktif etme girişi Lojik-0
6 girişi D D girişi
7 A girişi A girişi
8 VSS 0 V güç kaynağı 0 V
9 segment e 7-segment ortak katot ekran, e
10 segment d 7-segment ortak katot ekran, d
11 segment c 7-segment ortak katot ekran, c
12 segment b 7-segment ortak katot ekran, b
13 segment a 7-segment ortak katot ekran, a
14 segmenti g 7-segment ortak katot ekran, g
15 segment f 7-segment ortak katot ekran, f
16 VDD + V güç kaynağı +9 V (aralık 5-15 V)

 

Aşağıdaki örnek bir bağlantı görülebilir.

 

4511-proteus

 

Bu şekilde sadece 4 pini kullanarak tüm rakamları gösterebiliyoruz. Hala bir sorun var. Sıcaklık değeri göstereceğimiz için iki rakama ihtiyacımız var. İki göstergeyi iki ayrı entegre ile tasarlayıp toplam 8 pin kullanarak bunu yapabiliriz. Ama bu çok hızlı olan donanımımızı çok hantalca kullanmak olur. Bunun yerine bilgisayarların mükemmel hızlı olmasını kullanarak maliyeti düşürebiliriz. Tek entegrenin çıkışılarını iki göstergeye birden versek. Sonra bu göstergelerden ilkini bir kaç mili saniye, ardından diğerini bir kaç milisaniye yakıp söndürsek. Ve yanma anlarında da entegreye ilgili rakamları göndersek aynı entegreyi kullanarak iki ayrı rakamı gösterebilmiş oluruz. Göstergeleri yakıp söndürme işlemleri içinde GND bacağını kullanırız. Bir katot göstergede GND bacağından 5V verir isek gösterge söner, toprak verirsek gönderdiğimiz rakam yanar.

 

Herşey tamam artık devreyi tasarlayıp uygulamamızı yazabiliriz. Sıcaklık sensörünü bağlamıştık. Şimdi entegreyi ve digitleri bağlayalım.

 

 

Scanned-image-0

Scanned-image-1-0

 

Devreyi resimdeki gibi oluşturalım. Karmaşık görüntüyü engellemek için 4511 entegresinden diğitlere giden kablolar çizilmemiştir; harflendirilmiştir. Artık programımızı yazıp arduino’ya yükleyebiliriz. Program kodları aşağıdaki gibidir. Bu uygulama  bir yandan, sensörden okuduğu sıcaklık değerini digitlere yazdırır. Diğer yandan da bağlı bulunduğu bilgisayarın seri portunu dinler. Eğer seri porttan “a”, “b”, yada “c” verisi gelirse yine seri porttan sırsaıyla sıcaklık, nem ve çiğ oluşturma verisini yazar. Bu konu ile ilgili ayarlamaları serialEvent() fonksiyonundan görebilirsiniz.

Bu serinin bir sonraki yazısında bir wcf servis yazacağız. Bu servis gelen isteklere göre sıcaklık nem ve çiğ oluşma noktası verisini seri port aracılığıyla arduino devremizden okuyup istemciye iletecek. Bu şekilde oda sıcaklık vs bilgilerini hem digitler ile odada gösterip hemde masaüstü uygulama, android cihaz vs. gibi farklı platformlara servis edebiliyor olacağız.

 


#include <SimpleTimer.h>
#include <dht11.h> 

dht11 SicaklikSensoru;
SimpleTimer timer;

int pinOtele = 10;
int digitEntegreIzinPin = 9;
int digitBirIzinPin = 8;
int digitSifirIzinPin = 7;
int ZamanKesmesiSuresi = 20000;

float sicaklik = 0, nem = 0, cig = 0;

void digiteYaz(int rakam)
{
 if(rakam < 0 || rakam > 9) return;

 int deger, cikis;

 for(int i = 3; i >= 0; i--)
 {
 deger = pow(2, i) + (i > 1 ? 1 : 0); 

 digitalWrite(i + pinOtele, deger > rakam ? LOW : HIGH);

 rakam -= deger > rakam ? 0 : deger;
 }

 digitalWrite(digitEntegreIzinPin, HIGH);
}

void digitSec(int d)
{
 boolean kontrol;
 if(d == 0)
 kontrol = false;
 else if(d == 1)
 kontrol = true;

 digitalWrite(digitBirIzinPin, !kontrol);
 digitalWrite(digitSifirIzinPin, kontrol);
}

void digitlereYaz(int sayi)
{
 if(sayi < 0 || sayi > 99)
 return;

 int bekleme = 5;

 digitSec(0);
 digiteYaz((sayi > 9 ? sayi % 10 : sayi));
 delay(bekleme);
 digitalWrite(digitEntegreIzinPin, LOW);
 delay(bekleme);

 digitSec(1);
 digiteYaz((sayi > 9 ? sayi/ 10 : 0));
 delay(bekleme);
 digitalWrite(digitEntegreIzinPin, LOW);
 delay(bekleme);
}

void timerInterrupt()
{
 SicaklikSensoru.read(2);

 sicaklik = (float)SicaklikSensoru.temperature;
 nem = (float)SicaklikSensoru.humidity;
 cig = (float)SicaklikSensoru.dewPoint();
}

void serialEvent()
{
 char istek = (char)Serial.read();

 if(SicaklikSensoru.read(2) != 0)
 {
 Serial.print("Hata: 1|Sensor Okunamadı");
 return;
 }

 switch(istek)
 {
 case 'a':
 sicaklik = (float)SicaklikSensoru.temperature;
 Serial.println(sicaklik, 2);
 break; 

 case 'b':
 nem = (float)SicaklikSensoru.humidity;
 Serial.println(nem, 2);
 break; 

 case 'c':
 cig = (float)SicaklikSensoru.dewPoint();
 Serial.println(cig, 2);
 break; 

 default:
 Serial.println("Hata: 2|Gecersiz Istek");
 }
}

void setup()
{
 Serial.begin(9600);

 //Pinler Aktif
 for(int i = 0; i <= 3; i++)
 pinMode(i + pinOtele, OUTPUT);

 //Digitler Aç/Kapat
 pinMode(digitEntegreIzinPin, OUTPUT);
 pinMode(digitBirIzinPin, OUTPUT);
 pinMode(digitSifirIzinPin, OUTPUT);

 timerInterrupt();
 timer.setInterval(ZamanKesmesiSuresi, timerInterrupt);
}

void loop()
{
 digitlereYaz((int)sicaklik); 

 timer.run();
}

Yorumlar: 0 »

HTTP Hatası 500.19 – Internal Server Error

Kategori: Windows
Tarih: 19th Aralık 2014

Win server 2008 R2 – IIS üzerinde bir WCF servis yayınlarken başlıktaki hatayı alıyordum. Aşağıda önce hatanın resmini sonra çözümü göstereceğim.

server.hata

 

Bu tamamen IIS’in ayarları ile alakalı bir problemdir. Kesinlikle kodlarınızda oynama yapmayınız. IIS yeni site ekleme sihirbazı Uygulama Havuzunu otomatik olarak DefaultAppPool seçer. Sirenizin ismine sağ tıklatın. Ardından “Web Sitesini Yönet” ve “Gelişmiş Ayarlar” diyin. Gelişmiş ayarlar penceresi açılacaktır. Uygulama havuzu başlığını bulun ve değiştirmek için satırın en sağındaki “…” butonunu tıklatın. Açılan pencereden “ASP.NET v4.0 Classic” seçeneğini seçin. Servisinizi yeniden başlattığınızda sorun çözülecektir.

Sıcaklık/Nem Kontrol ve Uyarı Sistemi – 1

Kategori: Arduino, C#, Güvenlik, Referanslar
Tarih: 15th Aralık 2014

Yazmaya uzun bi süre ara verdikten sonra ancak bugün birşeyler yazmaya fırsat bulabildim. Bu yazıda bir sıcaklık/nem kontrol devresi ve sıcaklığın farklı platformlara sunulabilmesi hakkında planlamalar yapcağız. İhtiyacımız sıcaklığı farklı sebeplerden dolayı sık sık yükselen server odasını kontrol altında tutmak. Öngörülemeyen bi sıcaklık artışı olduğunda da ilgili personele bilgi verilmesi.

 

Sıcaklık kontrol devresi için ilk başlarda 16F877A mikrodenetleyici ve uyumlu bir sıcaklık sensörü kullanmayı planlamıştım. Ama biraz araştırma yaptıktan sonra Arduino diye birşey gördüm. Bu mikrodenetleyici dünyası için bir framework diye düşünülebilir. Açık kaynak, İtalyan menşeli bir proje. Açık kaynak olduğundan dolayı piyasada çok farklı kombinasyonlarda hatta çin üretimi ürünler bile mevcut. Peki tam nedir bu Arduino. Bu, üzerinde bir mikrodenetleyicisi olan, özel tasarım bir kart. Bu kart sayesinde bir çok özel yazılmış fonksiyonu bu microdenetleyici üzerinde çalıştırabiliyor, kart üzerindeki portları kullanarak da microdenetleyici ile çok rahat bir şekilde iletişim kurabiliyor hatta bir bilgisayar ile seri port iletişimine geçebiliyorsunuz. Buda sizi hem devre kurma çabasından kurtarırken hem de projelerini daha hızlı kodlayabilme imkanı sunuyor. Dezavantajı yok mu? Var tabiki. Mikrodenetleyici üzerinde halihazırda çalışan bir framework olduğundan dolayı bu donanımı 100% verimle kullanamıyorsunuz. Biraz daha yavaş kalıyor. Bu durum C/C++ ve C# dillerinin kıyaslanması gibi düşünülebilir. Daha yavaş olduğu için -bazı özel projeler hariç- C# dan vazgeçmezsiniz herhalde.

 

Arduino’ ya uyumlu bir sensör ile (DHT11) sıcaklığı ve nemi okuyup, 7 segmentli digitler kullanarak yazdırmayı planlıyorum. Ayrıca okunan değerleri seri port üzreinden server odasındaki bir bilgisayarada ileteceğim. İş buradan sonra sizin planınıza kalmış. Ben bütün platformlardan bu bilgiye erişmek istediğim için; bu sunucu üzerinden bilgileri servis edeceğim. Devam eden yazılarımda tarasımları ve kodları paylaşarak bunu bir seri yazı halinde yazmayı planlıyorum. Yapılacak işin kaba taslak bir çizimi aşağıdadır. Herkese iyi günler.

 

Scanned-image-0

Yorumlar: 1 »

Allah rızası için…

Kategori: Genel
Tarih: 28th Kasım 2014

İhtiyacımız olan tek şey: Allah rızası için sevmek, Allah rızası için yapmak.  Birazdan kalk ve ilk gördüğün adama selam ver. İçinden de de ki: Ben bu adama Allah rızası için selam verdim. Peygamberimiz selamı yayınız dedi ve ben sırf bu amaçla bu adama selam verdim. Hemen telefonu eline al. Sana geçen hafta kelek yapan arkadaşını ara. Halini sor. Hatta bir yemek teklif et. Hiç dile getirme ayıbını. Bunu, ona yanlışını vurgulamak için de yapma. Peygamber Mekke’ i fethettiğinde; kendilerine zulmeden, onları daha önce o memleketten hicret zorunda bırakanlara: “Size bugün bir zulüm yok, zarara da uğratılmayacaksınız. Şimdi serbestsiniz. Haydi gidin!” demedi mi? Sonra rabbine dön ve de ki: Yarabbi sen biliyorsun ki ben sırf Resulullah efendimiz böyle yaptı diye, sırf onu taklit etmek için bunu yaptım. Fırsatını buldukça secdelere kapan. Bana en yakın olduğunuz hal odur diyo çünkü. De ki Ya rabbi! Biz sen istiyorsun diye bu tozlu yerlere yüzlerimi sürüyoruz. Eğer isteseydin daha pis yerlere de kapanırdık. Biz senin dediklerini tutmaya çalışıyoruz.

 

Her ne olursa işte. Kalk! Bir şeyler yap. Ama Allah rızası için yap. O’ nu um. Yetmedi mi artık kendin için yaşadığın?

Yorumlar: 0 »

Sanal Ubuntu Disk Dolma Sorunu

Kategori: Linux, Ubuntu
Tarih: 5th Aralık 2013

Ubuntunuzdan “the system running in low graphics mode” uyarısı alıyorsanız bu, çoğunlukla grafik kartınız ve driverı ile ilgili bir sorun olmakla beraber düşük bir ihtimalle de diskinizde yer kalmasıyla alakalı bir sorunda olabilir. İşletim sistemi açılışta grafik driverını yükleyemediği için grafik driverını atlayarak bilgisayarı açmak istiyor. Bunun çözümü işletim sisteminin kurulu olduğu diskin boyutunu artırmak. “Partition Magic” gibi yazılımlar bu işi çözselerde çok stabil değil bazen sıkıntı çıkabiliyor. Virtual Box’da sanal hdd nin boyutunu artırmaya izin vermiyor. Artıramıyorsak yeni ve daha büyük bir disk oluşturup küçük diski buna klonlayabiliriz. Bunun için “hdclone” isminde küçük bir program var. Önce bununla klonlamayı denedim falan programın free sürümü farklı boyutlardaki diskleri birbirine klonlaamaya izin vermiyor. Küçük bi araştırmayla bu işi yapabilecek ücretsiz bir yazılım buldum ismi “clonezilla” çok başarılı bir program. http://clonezilla.org/ adresinden .iso indirilebilir.

Önce Sanal Makinemize yeni ve daha büyük bir disk ekliyoruz. Ardından da  clonezilla.iso dosyasını sanal makinemize yerleştirip başlatıyoruz. Sanal makinenin önceki ve sonraki hali aşağıda.

clone1

clone

Youtube de clonezilla ile disk kopyalama üzerine faydalı bir video buldum. Silinme ihtimaline karşı videyu buraya yüklüyorum. Videodaki adımları uygulayarak diskinizi genişletebilirsiniz.

videoyu indir

Windows 7 Şifre Unutma Alternatif Çözüm

Kategori: Güvenlik
Tarih: 5th Aralık 2013

Windows 7 işletim sistemi için şifre unutmakla ilgili değişik çözümler, sıfırlama diskleri vs internette bolca mevcut. Geçmişte bi blokta bu konuyla ilgili alternatif bi yazı okumuştum. Bi arkadaşımın şifresini unutmasıyla denediğim çözümü paylaşmak istiyorum. Şifreyi unuttuktan sonra eski şifrenin ne olduğunu bulmak neredeyse imkansız ama komut satırına bir satır kod yazarak eski şifreyi hatırlamadan yeni bir şifre oluşturulabilir.

net user "kullanci_adi" yeni_sifre

Sorun şifreyi unuttuktan sonra komut satırına ulaşamıyor olmak. Bunun içinde şöyle bir çözüm sunulmuş. Windowsun parola isteme ekranında sol alt köşedeki butona tıklattığımızda erişim kolaylığı penceresi açılıyor. Bu pencere aracılığıylada büyütci çalıştırabiliyorsunuz. Büyüteç /Windows/System32 dizini altındaki “magnify.exe” ismindeki bir program. Biz komut satırını başlatan “cmd.exe” programının adını “magnify.exe” diye değiştirebilirsek işletim sistemi büyüteci açtığını zannederek bize komut satırını çalıştıracaktır. Bizde oradan şifremizi değiştirebiliriz.

“cmd.exe” nin adının değiştirebilmek için herhangi bir live işletim sistemi kullanılabilir. Yada alternatif olarak Windows 7 yükleme cd’si ile bilgisayarı başlatıp “Bilgisayarınızı Onarın” seçeneğini tıklatarak açılan pencereden “Driver yükle” butonuna basarsanız bu pencereden de dosya sistemini görebilir ve isim değiştirme işlemlerini yapabilirsiniz.

Not: Her ihtimale karşı  “magnify.exe” dosyasını yedekelyiniz ve “cmd.exe” dosyasının bir kopyasını oluşturup bunun ismini değiştiriniz.

Optimization WordPress Plugins & Solutions by W3 EDGE