DuckDB database dosyasını MYSQL’e import etmek

DuckDB Nedir ve Verilerin MySQL’e Aktarımı

DuckDB Nedir?

DuckDB, veri analitiği için optimize edilmiş, hafif ve hızlı bir ilişkisel veritabanı yönetim sistemidir. Özellikle büyük veri kümeleri üzerinde hızlı analiz yapmak için tercih edilir. SQLite gibi, tek bir dosya üzerinden çalışır (.db dosyaları). Ancak, performansı ve analitik işlemler için sunduğu gelişmiş özelliklerle dikkat çeker.


DuckDB’yi Windows’ta İndirme

Windows için DuckDB’nin CLI (Komut Satırı Arayüzü) versiyonunu indirmek için şu adımları izleyebilirsiniz:

  1. DuckDB’nin resmi web sitesini ziyaret edin:
    https://duckdb.org
  2. Downloads (İndirmeler) bölümüne gidin ve CLI Binaries kısmından işletim sisteminize uygun olan Windows sürümünü indirin.
  3. İndirilen dosya bir duckdb_cli-x.x.x-win.exe dosyası olacaktır. Bu dosyayı istediğiniz bir klasöre taşıyın ve CLI üzerinden çalıştırabilirsiniz. İsmini ducdb.exe olarak değiştirirseniz daha kolay olur. Yazıda o şekilde değiştirdiğinizi kabul edip anlatmaya devam ediyorum.

DuckDB Tablolarını Export Etme

Bir .db dosyasındaki tabloları CSV formatında dışa aktarmak için DuckDB’nin CLI arayüzünü kullanabilirsiniz.

Örnek Senaryo:

Elimizde database.db adında bir DuckDB veritabanı var. Bu dosyada users ve orders adında iki tablo mevcut.

DuckDB CLI Kullanarak Export Etme

  1. DuckDB’yi başlatın:
    • Komut satırını açın ve DuckDB’nin CLI dosyasını çalıştırarak veritabanınızı açın:
      duckdb.exe database.db
  2. Tabloları CSV olarak dışa aktarın:
    COPY users TO 'users.csv' (HEADER, DELIMITER ',');
    COPY orders TO 'orders.csv' (HEADER, DELIMITER ',');
    • HEADER: CSV dosyasına sütun başlıklarını ekler.
    • DELIMITER ',': Verileri virgülle ayırır.
  3. Export edilen dosyaları kontrol edin:
    • Çalıştığınız dizinde users.csv ve orders.csv dosyalarının oluşturulduğundan emin olun.

MySQL’e Import İşlemi

Gerekli Araçlar:

  • Navicat veya benzeri bir GUI (grafiksel kullanıcı arayüzü)
  • DuckDB’den dışa aktarılan CSV dosyaları

Adımlar:

  1. Navicat’te Veritabanını Açın:
    • MySQL veritabanınızı seçin.

  2. CSV Dosyasını Import Etme:
    • MySQL veritabanında ilgili tabloya sağ tıklayın ve “Import Wizard” seçeneğini seçin.
    • Dışa aktardığınız users.csv dosyasını seçin.
    • Column Mapping ekranında CSV sütunlarını MySQL tablo sütunlarıyla eşleştirin.
    • Import işlemini başlatın.
  3. Kontrol Edin:
    • Verilerin doğru bir şekilde yüklendiğinden emin olmak için tabloyu kontrol edin:
      SELECT * FROM users;

Plesk kurulu Centos üzerinde MagicSpam kurulumu

Üzerinde Plesk kurulu bir Linux – Centos için MAGICSPAM kurulumu şu şekilde yapılabilir.

plesk bin extension --create magicspam
plesk bin extension --register magicspam
plesk bin extension --pack magicspam
plesk bin extension –i magicspam-2.0.18-3.zip

MagicSpam kurulum dosyalarını magicspam’ın kendi sitesinden indirebilirsiniz.

Ayrıca /etc/selinux/config dosyasında SELINUX=permissive yapılmalı.

İşlemlerden sonra magicspam log dosyalarına yazamıyorsa şu komutu kullanabilirsiniz.

/opt/psa/admin/sbin/modules/magicspam/register -i

Komut satırında mysqldump ile komple veritabanı yedeği almak

Linux’da mysqldump komutu ile komple veritabanının yedeğini şu şekilde alabilirsiniz.
Tüm veritabanları, tüm tablolar ile beraber tek bir sql dosyasına yazılacağı için komut çıktısı büyük olabilir.

mysqldump -u root -p --all-databases > alldb.sql

 

 

Komut satırında CURL ile FTP sunucusuna dosya yüklemek

Linux’da CURL komutu ile bir FTP sunucusuna bir dosyayı yüklemek mümkündür ve bunu aşağıdaki yapabilirsiniz.

curl -T yedek.gz ftp://kullanici_adi:sifre@200.201.202.203:21/klasor/upload.gz

Gördüğünüz üzere curl programına yedek.gz dosyasını, kullanici_adi ve sifre‘yi kullanarak, 200.201.202.203 nolu IP’deki klasor isimli klasöre upload.gz isminde yüklemesini söylemiş olduk.

3D Yazıcılar için Cura (.gcode) dosyasını ZAXE (.zaxe_code) dosyasına çevirmek

Cura yazılımı 3D yazıcılar için kullanılan, açık kaynaklı bir dilimleme yazılımıdır.
Cura yazılımının çıktısı bilindiği üzere .gcode uzantısındadır.

Diğer taraftan Zaxe 3D Printing Technologies şirketinin geliştirmiş olduğu Zaxe 3D yazıcılar ise başka bir formattaki .zaxe_code uzantısını kullanır.

Elinizdeki .gcode dosyasını zaxe_code dosyasına çevirmek mümkün ve bunun için aşağıdaki bizim yazdığımız VBS dosyasını kullanabilirsiniz.

Dim md5obj
set md5obj = CreateObject("System.Security.Cryptography.MD5CryptoServiceProvider")

md5obj.Initialize()

Set fso = CreateObject("Scripting.FileSystemObject")

Const adTypeBinary = 1
Set objStream = CreateObject("ADODB.Stream")

Function bytesToHex(aBytes)
Dim hexStr, x
For x=1 To lenb(aBytes)
hexStr= LCase(hex(ascb(midb( (aBytes) ,x,1))))
if len(hexStr)=1 then hexStr="0" & hexStr
bytesToHex=bytesToHex & hexStr
Next
end Function

' read bytes from fileName
Function LoadFile(fileName)
objStream.Open
objStream.Type = adTypeBinary
objStream.LoadFromFile( fileName )
LoadFile = objStream.Read
objStream.Close
End Function

' returns hex value of md5 hash from content of fileName
Function HashOfFile(fileName)
fileBytes = LoadFile(fileName)
' Do NOT omit braces around fileBytes - it will not work...
md5hashBytes = md5obj.ComputeHash_2( (fileBytes) )
HashOfFile = bytesToHex(md5hashBytes)
End Function

Function BrowseForFile()
'@description: Browse for file dialog.
'@author: Jeremy England (SimplyCoded)
BrowseForFile = CreateObject("WScript.Shell").Exec( _
"mshta.exe ""about:<input type=file id=f>" & _
"<script>resizeTo(0,0);f.click();new ActiveXObject('Scripting.FileSystemObject')" & _
".GetStandardStream(1).WriteLine(f.value);close();</script>""" _
).StdOut.ReadLine()
End Function

' open dialog ile dosya seçimi
filePath = BrowseForFile()

' seçilen dosyanın md5 hashini hesapla
hash=HashOfFile(filepath)

'json dosyasına yazılacak içerik. aynı zamanda hesaplanan hash dosyasını da bu dosyaya yaz
json_content="{""filament_used"": 3640.0, ""sub_material"": ""zaxe_pla"", ""nozzle_diameter"": 0.4, ""bed_temperature"": 60, ""checksum"": """ & hash & """, ""material"": ""zaxe_pla"", ""name"": ""astm_d638_type1_3.2mm"", ""model"": ""Z1PLUS"", ""version"": ""1.0.2"", ""extruder_temperature"": 200, ""duration"": ""00:30:22""}"
Set objFSO=CreateObject("Scripting.FileSystemObject")

'json dosyasını kaydet
Set objFile = objFSO.CreateTextFile("info.json",True)
objFile.Write json_content & vbCrLf
objFile.Close

Set oShell = WScript.CreateObject ("WScript.Shell")
' dosyanın sadece adını al (path bilgisinden arındır)
ShortFileName = Mid(filePath, InStrRev(filePath, "\") + 1)

'7za ile gcode dosyasını, info.json dosyasını ve snapshot.png dosyasını sıkıştır
oShell.run "7za a -tzip " & ShortFileName & ".zaxe " & filePath & " info.json snapshot.png"

'1 saniye bekle
WScript.Sleep 1000

'kayıt edilen zip dosyası içindeki gcode dosyasının ismini data.zaxe_code olarak değiştir
oShell.run "7za rn " & ShortFileName & ".zaxe " & ShortFileName & " data.zaxe_code"

Kodda gördüğünüz üzere işlemler bittikten sonra bir de sıkıştırma işlemi yapılmaktadır ve bunun için ilgili klasörde 7ZIP dos komut satırı programının bulunması gerekmektedir. Ayrıca bu script’in bulunduğu klasörde snapshot.png dosyasının da bulunması gerekir.

Bunun yanında kodda göreceğiniz üzere bazı şifrelemeler yapmak için MD5 Crypto Servisi kullanılmaktadır ve bu da .NET Framework 3.5 içerisinde bulunan bir servistir. Dolayısı ile bu script’in çalışacağı bilgisayarda .NET Framework 3.5′in kurulu olması gerekir.

Detayları geçelim derseniz bu script’in kullanımı oldukça basit 🙂
Buradan şu dosyayı indirin ve içerisindeki ZAXE_CONVERT.vbs dosyasını çalıştırın.
Dosyanın içerisinde gerekli her şey var. (.NET Framework 3.5 dışında)
Dosyayı çalıştırdıktan sonra gcode dosyanızı seçin ve saniyeler içerisinde zaxe_code dosyanıza kavuşun.

Notlar :

* Zaxe Z1 Plus modelinde denenmiştir. Diğer modellerde çalışmıyorsa iletişim için yorum bırakabilirsiniz. Bunun için kod üzerinde düzenleme yapılması gerekebilir.
* Dosyanın kullanımı ve diğer konularda sorumluluk kullanıcının kendisine aittir.

Adobe Dreamweaver CC’de Database Panelini geri getirmek …

Farketmiş olduğunuz üzere Adobe Dreamweaver CC versiyonunda eskiden Window menüsünde bulunan DatabasesBindingsServer Behaviors gibi seçenekler artık bulunmuyor.
Kısacası bu özellikler CC versiyonunda kaldırıldı ve yakın gelecekte de yok edilecek.

Kanaatimizce Dreamweaver, PHP, MYSQL üçlüsünü yoğun olarak kullanan programcıların işlerini oldukça kolaylaştıran bu panellerin kaldırılıyor olması bir çok programcıyı zorlayacak.

Adobe’nin bu panelleri yok etmiş olması, yerine başka birşeyler koyacağı anlamına gelebilir.
Ama yine de yerine başka bir şey koymadan, direkt olarak kaldırmış olması iyi değil.

Bu panelleri yeniden aktif hale getirmek için MACOS üzerinde Applications\Adobe Dreamweaver CC\Configuration\DisabledFeatures\ klasörüne,

WINDOWS üzerinde ise C:\Program Files (x86)\Adobe\Adobe Dreamwever CC\Configuration\DisabledFeatures\ klasörüne gidin.

Bu klasörde bulunan Deprecated_ServerBehaviorsPanel_Support.zxp isimli eklentiyi çift tıklayın.
ZXP uzantılı dosyalar Adobe’nin extension dosyalarıdır ve otomatik olarak Adobe Extension Manager içerisinde açılacak ve kurulmaya başlayacaktır.

1-2 dakika Kurulum işleminin bitmesini bekleyin, DreamWeaver’ı kapatın ve bir daha açmayın. Açın açın.
Açınca göreceksiniz ki Window menüsünde DatabasesBindingsServer Behaviors menüleri yeniden aktif hale gelmiş ve çalışıyor.

Diğer taraftan ikinci bir yol olarak; bu işlemi Adobe Extension Manager içerisindeyken, önce Adobe Exchange eklentisini kurup, sonra da Adobe Exchange programını kullanarak Adobe’un mağazasından Server Behavior & Database isimli eklentiyi kurarak ta aktif edebilirsiniz.

Haydi hayırlı olsun.

Bu arada paneller geri geldiği halde “Record Insertion Form Wizard” özelliğinin tamamen kaldırılmış olması ise ayrı bir facia.

PHONEGAP veya XCODE ile paketlenen IPA dosyasını AppStore’a göndermek

PhoneGap veya Xcode ile bir uygulama yazdınız ve bunu AppStore’a göndermek istiyorsunuz.

AppStore’un denetimli bir yapıya sahip olması ve özellikle tüm eklenen programları denetlemek zorunda olmasından dolayı bu iş birazcık zor gibi görünebilir.

Ancak yine de belirli bazı adımları atlama yapmadan izleyerek, AppStore’a kolayca bir uygulamayı göndermek mümkün.

İşte o adımlar :
Öncelikle programınızı compile ettiğinizi (derlediğinizi) varsayıyor ve elinizde IPA dosyası olduğunu varsayıyoruz.
Bildiğiniz üzere IPA uzantısı, iOS cihazlarındaki uygulamaların doğal uzantısıdır.
Yukarıda bahsettiğim denetim mekanizmasından dolayı, bu işlemlerin en önemli ve olmazsa olmaz adımı, IPA dosyasını uygun şekilde imzalamaktır.
Bu işlemleri yaparken, 1 adet Mac bilgisayar kullandığınızı varsayıyoruz.
Windows üzerinde de bu işlemleri yapmak (en azından önemli bir bölümünü yapmak) mümkündür, ancak deveye hendek atlatmaya ne gerek var ki?
Ayrıca Apple Developer Hesabınızın da oluşturulmuş ve aktif olduğunu varsayıyoruz.
Evet başlıyoruz.

BİR SERTİFİKA İMZALAMA İSTEĞİ OLUŞTURALIM

Öncelikle SpotLight’ı kullanarak KeyChain Access programını açın. Burada  KeyChain Access menüsünden Certificate Assistant (Sertifika Asistanı) menüsünü seçin ve devamında Request A Certificate From A Certificate Authority menüsüne tıklayın.
User Email Address kısmına e-posta adresinizi yazın. (Apple Developer Account’a tanımlı hesabınızı kullanırsanız daha iyi olur)
Common Name bölümüne ise herhangi bir isim yazabilirsiniz. Örneğin “SERTIFIKA”.
Aynı ekranda bulunan Saved to Disk seçeneğini seçin ve CONTINUE tuşuna basın.
Bu işlemler için bir klasör açın ve bu certSigningRequest uzantılı dosyayı o klasöre kayıt edin.
Bu sayede elinizde SERTIFIA.certSigningRequest dosyası olmuş oldu.

 

BİR SERTİFİKA OLUŞTURALIM

Şimdi http://developer.apple.com adresine girin, oturum açın, Member Center bölümüne girin. (https://developer.apple.com/account/overview.action)
Sol tarafdaki menüden Certificates başlığına tıklayın. Burada sağ üst tarafta bulunan + (ARTI) tuşuna tıklayın.
Açılan ekranda Production bölümünde bulunan App Store and Ad Hoc radyo düğmesini seçin ve CONTINUE tuşuna basın.
Şimdi aşağıdaki bir hata ekranıyla karşılaştınız. Burada bize bir SERTİFİKA İSTEK DOSYASI oluşturmamız söyleniyor.
Bu dosyayı zaten az önce oluşturmuştunuz. Dolayısı ile bu ekranı CONTINUE diyerek geçin.
Şimdi başka bir ekranla karşılaştınız.
Bu ekranda, bizden kendi bilgisayarımızda oluşturduğumuz SERTİFİKA İMZALAMA İSTEĞİ dosyasını istiyor. (SERTIFIKA.certSigningRequest)
Choose File düğmesine tıklayıp, dosyamızı seçiyoruz ve Generate tuşuna basıyoruz.
LOADING yazısı ile karşılaştınız.
Bu ekran kendiliğinden yenilenen bir ekran değil nedense, o nedenle burada 2 dakika kadar bekleyin ve Sol taraftaki Certificates linke tıklayın.
Ekrana gelen listede Sertifikanızı görüyor olmalısınız. Bu sertifikanın üzerine tıklayın ve DOWNLOAD tuşu ile dosyanızı indirin.
Şimdi elinizde CER uzantılı bir dosya daha oldu ve SERTİFİKA dosyamızı da oluşturmuş olduk.

BİR PROVISIONING PROFILE DOSYASI OLUŞTURALIM

Şimdi yine aynı ekrandayken (developer.apple.com sitesindeyken) Sol taraftaki PROVISIONING PROFILE linkine tıklayın.
Yine az önce yaptığımız gibi + (ARTI) tuşuna tıklayın.
Aşağıdaki ekranı görüyor olmalısınız.
Bu ekrandaki App Store seçeneğini seçin ve CONTINUE tuşuna tıklayın.
Gelen ekranda ise APP ID olarak sizin daha önce bu uygulama için oluşturmuş olduğunuz APP ID’ler listelenecektir.
Eğer daha önce APP ID oluşturmadıysanız, sol tarafdaki IDENTIFIERS bölümünden oluşturmalısınız.
Bu listeden kendi uygulamanız için oluşturduğunuz APP ID’yi seçin ve CONTINUE tuşuna basın.
Şimdi size, bu “Provisioning Profile” dosyasına hangi Sertifikayı dahil etmek istediğiniz sorulacaktır.
Farkettiğiniz üzere, az önce oluşturmuş olduğumuz sertifika dosyası burada listeleniyor. Bunu seçip, CONTINUE tuşuna basalım.
Son aşama olarak aşağıdaki gibi bir ekranla karşılaştınız.
Yukarıdaki ekranda, profil dosyanıza bir isim verin ve GENERATE tuşuna basın.
Evet, profil dosyamız oluştu, bu ekrandaki DOWNLOAD tuşuna basıp dosyamızı indirelim.
Artık mobileprovision uzantılı bir dosyamız daha oldu.

BİR P12 DOSYASI OLUŞTURALIM

Bir kişisel anahtarı ve bir sertifikayı barındıran dosyalar P12 dosyası olarak biliniyor.
Yani bu dosya içerisine, sertifikamızı ve kişisel anahtarımızı (private key) paketlemiş olacağız.
Şimdi KeyChain Access progamını yeniden açalım.
FILE menüsünden IMPORT ITEMS menüsünü seçelim ve az önce oluşturduğumuz CER  dosyasını import ediyoruz.
Bu yüklediğiniz Sertifikayı KeyChain Access programının Certificates bölümünden görüyor olmalısınız.
Şimdi o sertifikaya sağ tıklayın ve “Export …” menüsünü seçin.
Ve devamında diskteki bir yere (bu işe başlamadan önce bir klasör açmıştınız ya hani, işte oraya) kayıt edin.
Evet şimdi elimizde bir de P12 dosyamız oldu.

XCODE TARAFINDA İMZALANMIŞ IPA DOSYASINI OLUŞTURMAK

Eğer bilgisayarınızda XCODE yüklü ise, programınızın konfigürasyon bölümünden BUILD SETTINGS bölümüne girerek, CODE SIGNING IDENTITY bölümünde KeyChain’e eklemiş olduğunuz Serfikayı seçebilirsiniz.

Bunu yaptıktan hemen sonra PRODUCT menüsünden ARCHIVE seçeneğini seçersiniz.
Archive dosyası oluşturulduktan hemen sonra XCODE’un bir TOOL’u olan ORGANIZER programı otomatik olarak açılacaktır.
Burada oluşturulmuş olan dosyayı görebilirsiniz. Bu dosyayı seçip, DISTRIBUTE tuşuna tıklayarak, Apple Developer Account bilgilerinizi girer ve dosyanızı otomatik olarak gönderebilirsiniz.

PHONEGAP TARAFINDA İMZALANMIŞ IPA DOSYASI OLUŞTURMAK

http://build.phonegap.com adresine girelim. Burada Signing Keys bölümüne giriş yapıp, Add Key butonuna tıklayalım.

İmzalama işlemine bir isim verip, yukardaki işlemler sonucunda oluşturduğumuz P12 uzantılı ve mobileprovision uzantılı dosyalarımızı buraya upload edelim.

Oluşan IPA dosyasını yeniden kendi bilgisayarımıza indirelim.

Xcode varsa Xcode’u açıp, XCODE isimli menüden OPEN DEVELOPER TOOL menüsünü ve ardından APPLICATION LOADER uygulamasını açalım.
Eğer Xcode yoksa, problem değil.  https://itunesconnect.apple.com/apploader/ApplicationLoader_2.9.dmg adresinden Application Loader programını indirebilirsiniz.
Application Loader programını açalım ve DELIVER YOUR APP tuşuna basalım.
Kullanıcı adı ve şifremiz sorulacaktır. Buraya Apple Developer Portal’deki kullanıcı adı ve şifremizi girelim.
Gelen listede Developer Portal’de oluşturduğumuz APP ID’ler listelenecektir.
İlgili uygulamanın APP ID’sini seçelim ve Next diyelim. Devamında IPA dosyamızı seçelim ve gönderelim.

BANA BALIK TUTMAYI ÖĞRETME, BALIK TUT, PİŞİR YARIM EKMEK ARASINA DÜRÜM YAP DİYENLER İÇİN NOT :

1. KeyChain kullanarak bir certSigningRequest uzantılı dosya oluşturun.
2. Apple Developer Portal’de, yukarıdaki certSigningRequest dosyasını kullanarak bir sertifika oluşturun ve bilgisayarınıza yükleyin.
3. Apple Developer Portal’de bir mobileprovision dosyası oluşturun ve diske kayıt edin.
4. KeyChain kullanarak, az önce oluşturduğunuz sertifika dosyasını içeriye aktarın.
5. KeyChain kullanarak, 4 nolu adımda import ettiğiniz dosyayı p12 olarak export edin.
6. Application Loader veya Organizer kullanarak dosyanızı AppStore’a gönderin.

Hepsi sadece bu kadar! 🙂

Pi sayısının ilk 100.000 , 1.000.000 ve 10.000.000 basamağı için gereksiz bir analiz

Yaptığımız derin ve gereksiz bir analize dayanarak diyebiliriz ki ; Pi sayısının ilk 100.000 basamağının içerisinde tam olarak 9.999 adet SIFIR buluyor.

Tarihe geçilsin. Sonra vay efendim biliyordunuz da neden söylemediniz, matematik dünyasına neden yardımcı olmadınız diye birşey olmasın.

Sonra; Pi sayısının ilk 1.000.000 basamağı içerisinde ise tam olarak 99.959 tane SIFIR bulunuyor. Yani Pi sayısının ilk 1.000.000 basamağı içerisinde tam olarak 40 tane daha SIFIR olsa idi, o zaman; Pi sayısının ilk 1.000.000 basamağı içerisinde 99.999 adet SIFIR sayısı bulunur diyecektik.

Peki Pi sayısının 10.000.000 basamağı içerisinde kaç tane 1 var derseniz 999.333 adet der ve geçeriz.

Peki 0’ların veya 1’lerin veya herhangi bir rakamın pi’nin içerisinde kaç tane geçtiğinin ne önemi var ?
Bakın bunlar uzay ve havacılık dairelerinde, uçakların iniş ve kalkış planlamalarının yapıldığı bilgisayar yazılımında. Şaka tabii ki. Hiç bir önemi yok elbette.

Dahası deriz ki ; pi sayısının bugüne kadar bilinen bir artış düzeni olmadığı ve olmayacağı varsayıldığından dolayı, herhangi bir rakamın pi sayısı içerisinde kaç defa olduğunu gözlemlemek için pi sayısının tamamına bakmak gerekir. pi sayısının tamamı diye bir tanım olmadığı için bu mümkün olmasa da, yine de diyebiliriz ki, pi sayısının basamakları sayısı ne kadar yüksekse bu adetler birbirine oldukça yaklaşır ve sonsuza yaklaştığında eşitlenir bile.

Bu durum, “Sayısal Loto’da bilmemkaç sayısı çok çıkıyormuş” şeklindeki saçmalığı da açıklar bize.
Ola ki; çekiliş sayısı milyonlarca, trilyonlarca yapıldığı zaman görülecektir ki; her rakam neredeyse aynı derecede ve eşit adette çıkacaktır.

Neyse ; Pi sayısını anlamlandırmaya yönelik bu şekilde saçma ve gereksiz tezleri olan varsa ve yorum olarak olarak yazsın da belki daha başka saçma şeyler de bulabiliriz.

Excel’de 2’lik tabandaki 32 basamaklı bir sayıyı Onluk tabana çevirme

Excel’deki BIN2DEC fonksiyonu Binary (İkilik) sistemdeki bir sayıyı Decimal (Onluk) sisteme çevirir.
Ancak Excel’deki bir kısıtlama nedeniyle BIN2DEC fonksiyonu en fazla 9 basamaklı 2’lik sayıları çevirebilir.

Gördüğüm kadarıyla 9’tan fazla basamaklar için BIN2DEC fonksiyonunun sonuç değeri -1 oluyor.

Peki Excel’de 2’lik tabandaki 16 basamaklı bir sayıyı Onluk sisteme çevirmemiz gerekirse ne yapmalıyız?

Biz hem sorunu çözmek hem de tüm dünya halklarına faydalı olabilmek için aşağıdaki gibi bir formülü yazdık.

Elbette bu işlemi Excel’de bir makro yazarak ta çözmek mümkün.
Veya farklı formüller üretmek te mümkün.

Ancak yine de Excel’de A1 hücresine girilen ikilik tabandaki 32 basamaklı bir sayıyı Onluk sisteme formül yardımı ile çevirmek isteyen varsa aşağıdaki formülü kullanılabilir 🙂

Bu formül 32 basamaklı 2’lik sayıyı, 10’luk sayıya çevirir.

=(MID(A1;32;1)*1)+(MID(A1;31;1)*2)+(MID(A1;30;1)*4)+(MID(A1;29;1)*8)+(MID(A1;28;1)*16)+(MID(A1;27;1)*32)+(MID(A1;26;1)*64)+(MID(A1;25;1)*128)+(MID(A1;24;1)*256)+(MID(A1;23;1)*512)+(MID(A1;22;1)*1024)+(MID(A1;21;1)*2048)+(MID(A1;20;1)*4096)+(MID(A1;19;1)*8192)+(MID(A1;18;1)*16384)+(MID(A1;17;1)*32768)+(MID(A1;16;1)*65536)+(MID(A1;15;1)*131072)+(MID(A1;14;1)*262144)+(MID(A1;13;1)*524288)+(MID(A1;12;1)*1048576)+(MID(A1;11;1)*2097152)+(MID(A1;10;1)*4194304)+(MID(A1;9;1)*8388608)+(MID(A1;8;1)*16777216)+(MID(A1;7;1)*33554432)+(MID(A1;6;1)*67108864)+(MID(A1;5;1)*134217728)+(MID(A1;4;1)*268435456)+(MID(A1;3;1)*536870912)+(MID(A1;2;1)*1073741824)+(MID(A1;1;1)*2147483648)+(MID(A1;0;1)*4294967296)

Mac üzerinde Eclipse ile Android Programlama nasıl yapılır?

Mac işletim sistemi üzerinde Android uygulamalar yapabilmek için izlemeniz ve dikkat etmeniz gerekenleri şu şekilde sıralayabiliriz.

https://developer.android.com/sdk/index.html#mac-bundle adresinden Bundle olarak dağıtılan programı indirin.

Bu bundle paketinin içinde

Eclips
Eclips Android Developer Tools
Android Platform Araçları
En son Android platformu ve
Android için en son Emülatör imaj dosyası

vardır. Yani bu Bundle paketini yükleyerek Mac üzerinde başka hiçbir ayara gerek kalmadan, Android programlama yapabilmek için herşeye sahip olursunuz.

Mac üzerine kurulumu yaptıktan sonra, Eclips programını açabilir ve File – New- Android Application Project komutu ile yeni bir proje oluşturabilirsiniz.

Yazdığınız Android projesini test edebilmek için Eclips’in Window menüsünde bulunan Android Virtual Device Manager bölümü ile bir sanal Android Emülatörü oluşturabilirsiniz.

Android Emülatörü çok mu yavaş? İşte hızlandırmanın yolu.

Eclips ile Windows ya da Mac üzerinde Android için programlama yaparken, illa ki yazdığınız programları bir Android Emülatör ile denemek isteyeceksinizdir.

Ancak tam bu esnada Android’in çok yavaş olduğunu farketmiş olursunuz.

Öyle ki, Run tuşuna bastığınızda yazdığınız programın Emülatör üzerinde görünür hale gelmesi neredeyse 15 dakika sonra mümkün olabilmektedir.

Aslında problemin ana sebebi, yani emülatörün bu kadar bekliyor olmasının tek nedeni onun bir ARM işlemcisi kullanmasından kaynaklanıyor. Evet ARM işlemcisi, bir Intel işlemci kadar hızlı değildir çünkü o zaten küçük işlemler için üretilmiştir.

İşlemci konusundan önce, Emülatör’ün, grafik işlemlerini kendi grafik işlemcisine değil de kullanmış olduğunuz bilgisayarın işlemcisine yaptırmasını söyleyebilirsiniz. Bu birazcık hız kazandırır Emülatöre. Emülatörü ayarlarken Use Host GPU seçeneğini seçebilirsiniz.

Şimdi de Android SDK Manager’ı kullanarak INTEL x86 Atom System Image programını kurun.

Biraz daha hız kazanmış oldunuz ancak hala yeterli değil.

Şimdi ise Intel x86 Emulator Accelerator’ü (HAXM) kuralım.
Çok daha hızlı bir emülatöre sahip olmamızı da aslen bu program sağlayacak. Bunu yükleyerek emülatörü ARM işlemci ile değil INTEL işlemci ile çalıştırabileceğiz.

Yine Android SDK Manager‘ı kullanarak HAXM‘ı yükleyin.

Android’i kapatıp açtıktan sonra emülatör’ün Intel üzerinde çalıştığını ve açılışının en fazla 15 SANİYE olduğunu görmelisiniz.

Diğer taraftan bu işlemi Intel işlemcili Mac üzerinde deniyorsanız ve işletim sisteminizin versiyonu 10.9 ise bir problem var.
Yukarıdaki işlemleri yapınca, Emülatörü her açtığınızda (start ettiğinizde) bilgisayarınız kilitleniyor ve tek yol açma-kapa tuşu oluyorsa HAXM‘ün HOTFIX‘ini de yüklemelisiniz.

HAXM Hotfix için : http://software.intel.com/en-us/articles/intel-hardware-accelerated-execution-manager-end-user-license-agreement-macos-hotfix

Onlar Saldırıya Hazır Peki Siz Savunmaya Hazır mısınız ?

2004 Yılında Win Net Magazine Dergi’sinde yayınlanan, SQL Enjeksiyon Saldırıları ve Savunma Yöntemleri konulu makalemde, temel düzeyde SQL Enjeksiyon saldırılarının nasıl yapıldığı ve bu saldırılara karşı alınabilecek “basit” önlemlerden bahsedilmekte.

 

ONLAR SALDIRIYA HAZIR …

PEKİ SİZ SAVUNMAYA HAZIR MISINIZ ?
– SQL Enjeksiyon Saldırıları ve Savunma Yöntemleri –


SQL Enjeksiyon Saldırıları ( SQL Injection Attacks )
 son günlerde Türkiye ‘ de Web Sitesi Saldırılarının başlıca nedeni haline gelen ve eğer önlem alınmaz ise web sitesi sunucularına büyük zararlar verebilen bir saldırı yöntemi haline gelmiştir.“Web Site Hacking” denilen olgunun dayanılmaz hafifliğini ve heyecanını parmaklarında hisseden hacker ‘ lar ya da stajyer hacker ‘ lar için , öğrenilmesi ve uygulaması kolay bir Web Sitesi Saldırı yöntemi olup çıkmıştır SQL Enjeksiyon Saldırıları.Peki nedir bu SQL enjeksiyon, nasıl yapılır ve daha da önemlisi nasıl korunmak gerekir ?SQL Enjeksiyon Saldırıları, adından da tahmin edebileceğiniz gibi SQL Sorgulama dili kullanılan bir uygulamaya SQL ‘ in anlayabileceği şekilde zararlı kodlar göndermek ve SQL Dili vasıtası ile zararlı işleri yaptırmak anlamına gelir.Şimdi, “ayinesi iştir kişinin lafa bakılmaz” atasözünü de dikkate alarak hemen SQL Enjeksiyon Saldırısının uygulama üzerinde nasıl işlediğine ve web sitemizi nasıl bir hack arenası haline getirdiğine bakalım :Web Sitemiz içerisinde şöyle bir SQL kodu olduğunu ve aşağıdaki ürün ID ‘ sini parametre olarak kullanıcıdan seçimine göre değişken olarak aldığını varsayalım.

SELECT urun_adi, urun_aciklama FROM urunler WHERE urun_id=999

 

Bu SQL Kodu bize ID numarası urun_id şeklinde parametre olarak verilen (örneğimizde 999) ürüne ait “ürün adı” ve “ürün açıklaması” bilgilerini urunler isimli database ‘ den getirecektir. Yapı olarak basit ve tehlikesiz bir SQL sorgu cümlesi olarak görünüyor değil mi ?

 

İşte SQL Enjeksiyon Saldırıları tam burada başlamaktadır. Çünkü sizin URL aracılığı ile gönderdiğiniz urun_id parametresine SQL kodları enjekte etmek pekalâ mümkündür. Şimdi işin bu yönünü inceleyeceğiz.

 

Yukarıdaki SQL koduna, urun_id parametresini web sitenizde şöyle bir link ile gönderdiğinizi varsayalım :

 

http://www.talihsizsite.com/urunler.asp?ID=999
Web sitenize saldırı yapmayı deneyen hacker, öncelikle SQL enjeksiyon saldırılarına açık olup olmadığınızı anlamaya çalışacak ve daha sonra da ulaşmak istediği ve SQL Server ‘ ın izin verdiği sistem komutlarını çalıştırmaya başlayacaktır. Peki web sitenize saldırmayı deneyen kişi, urunler.asp dosyanıza verdiği parametreyi şu hale getirirse ne olur sizce ?

 

http://www.talihsizsite.com/urunler.asp?ID=999 ; SHUTDOWN WITH NOWAIT;

Burada , aldığı parametre neticesinde yukarıdaki SQL cümlemiz şu hale gelmiş olacaktır :

SELECT urun_adi, urun_aciklama FROM urunler WHERE urun_id=999 ; SHUTDOWN WITH NOWAIT;

 

Kendi yazdığınız SQL Cümlesine elbette güveneceğiniz için SQL Cümleniz web uygulaması içerisinde direkt olarak çalıştırılacaktır. Ancak sonuç ne yazık ki vahim olacaktır. Çünkü ; (noktalı virgül) işareti sayesinde iki SQL cümlesini bir arada işletebilme yeteneğine sahip olan SQL Server öncelikle 999 numaralı ürüne ait bilgileri sorgulayacak ve hemen devamında SQL Server beklemeden kapatılacak , web sitenize erişim bu saatten sonra imkansız hale gelecektir.

 

Web sitenize SQL cümlecikleri enjekte etmek isteyen kötü niyetli birisinin her zaman SHUTDOWN WITH NOWAIT gibi masum (!) enjekteler kullanmayacağını, bunun dışında SQL Server ‘ ın yeteneklerine dayanan bir çok sistem komutunu çalıştırma, fiziksel dosyalarınızı silme, SQL Server ‘ da bulunan database ‘ lerinizi silme, uzaktan çalıştırılması  mümkün olan prosedürleri çalıştırma , Windows registry kayıtlarına kolaylıkla ulaşma gibi işlemler yapmak isteyeceğini belirtmekte büyük fayda var.

 

 

Kodlamaya Dikkat !

 

 

SQL ENJEKSİYON SALDIRISI YÖNTEMİ İLE WEB SİTENİZDEKİ TÜM KULLANICI BİLGİLERİNİN VE KREDİ KART NUMARALARININ ÇALINMASI AN MESELESİ …

 

 

Daha doğrusu eğer bir hacker sitenizde SQL Enjeksiyon denemeleri yapıyorsa ve ilk kullandığı enjeksiyonun  sonucu da SQL Server ‘ ınızı kapatmak olursa kendinizi şanslı sayabilirsiniz.  Bunun nedenini de şu şekilde bir senaryo geliştirerek açıklayalım isterseniz : Büyük bir alışveriş sitesinin webmaster ‘ ı ya da yöneticisi durumundasınız ve bu web sitesinde çalışan uygulamanız kullanıcı isimlerini, şifrelerini, kişiler bilgilerini ve dahası müşterilerinize ait kredi kartı numaralarını database üzerinde saklıyor. İşte asıl felaket budur ! Websitenize saldıran hacker ‘ ın müşterilerinize ait kredi kartı numaralarına ve tüm şahsi bilgilerine erişmesi ve bunları kötü amaçlarla kullanması SQL Enjeksiyon açığı sayesinde an meselesidir.

SQL SERVER HATA MESAJLARI

Hata mesajı mı yoksa Hacker ‘ a yardım mı ? )

Doğal olarak her programlama dili ya da sorgulama dili kodlama aşamasında yapılan hataları Runtime aşamasına da taşıyabilmektedir. Bu sayede programcılar yaptıkları hatanın farkına varırlar ve bu hataları düzeltme imkanı bulurlar.

Web sitelerinde SQL Bağlantısı kurmak için kullanılan ODBC (Open Database Connectivity) ‘ nin de elbette ki Runtime aşamasında hata mesajları mevcuttur.
Ancak , SQL Enjektesi yapılabilen bir uygulamanın verdiği hata mesajları aynı zamanda hacker dostlarımıza da fazlasıyla yardımcı olacaktır.  Gelin hep beraber nasıl olur da bu masum hata mesajları hacker ‘ lara yardımcı olur ve hacker ‘ lar bunu hangi yolda kullanırlar, inceleyelim :

 


Yukarıdaki örneğimizde bir Hacker , SQL Server ‘ da kullandığınız tablo isimlerine ulaşmak için şöyle bir kod kullanabilir : 

http://talihsizsite.com/urunler.asp?id=999 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES—

 

ID parametresinin aldığı bu değer neticesinde uygulamamız içerisindeki SQL cümlemiz şu hale gelmiştir :

 

SELECT urun_adi, urun_aciklama FROM urunler WHERE urun_id=999 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATIN_SCHEMA.TABLES–

 

Bu SQL Cümlesinin direkt çalıştırılması durumunda web sayfanız aşağıdaki hatayı vererek çalışmasını durduracaktır ki zaten saldırganın istediği de budur :

Microsoft OLE DB Provider for ODBC Drivers error ‘80040e07′
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value ‘TABLE1’ to a column of data type int.
/urunler.asp, line 48 

Buradaki hata olarak şunu ifade ediyor :  TABLE1 isimli bir tablo bulundu ve bu TABLE1 kelimesi INTEGER ‘ a dönüştürülmek istendi, ancak bu başarısızlıkla sonuçlandı.

 

Gösteriyi nasıl buldunuz ? SQL cümlemize yukarıdaki kodu gönderen saldırgan artık SQL Server ‘ ımızda bulunan ilk Tablo isminin TABLE1 olduğunu anlamış oldu. Saldırgan bu aşamadan sonra yukarıdaki SQL cümlesinin değişik varyantlarını kullanarak diğer tablo isimlerine de ulaşarak istediği her tür bilgiye erişebilir. Örneğin saldırgan yukarıdaki cümleyi şu şekilde düzelterek içerisinde kredi_kart kelimesi geçen tablolara ulaşabilir.

 

http://www.talihsizsite.com/index.asp?ID=999 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE ‘%KREDI_KART%’—

 

Bu sorgunun neticesinde SQL Server saldırgana şu hata mesajını verecektir.

 

Microsoft OLE DB Provider for ODBC Drivers error ‘80040e07′
[Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value ‘KREDI_KART_NUMARALARI’ to a column of data type int.
/urunler.asp, line 48

 

İşte burada da saldırgan, SQL Server ‘ da kayıtlı olan ve KREDI_KART_NUMARALARI adında bir tablonun varlığından haberdar olmuş oldu. Doğal olarak ; yapılacak tüm saldırı tiplerini burada listelemek güvenlik açısından sakıncalıdır ve etik açıdan da doğru olmayacaktır.

SALDIRIDAN KORUNMA …

SQL Enjeksiyon saldırılarından korunmak için tek yapmanız gereken bir web uygulamasını programlarken oldukça katı kurallar ve denetimler koymaktır. İsterseniz şimdi bu saldırı tipinden korunmamız için gereken kuralları listeleyelim.

 

Unutmayın ; web sitenizi bu saldırı tipinden korumanız sadece kendinizi değil aynı zamanda müşterilerinizin bilgilerini de korumanız anlamına gelmektedir.

 

 

 

Kimseye güvenmeyin !

Çok katı bir kural mı oldu ?  Peki bunu biraz yumuşatalım isterseniz : Internet kullanıcılarından gelebilecek her girdi bilgisini potansiyel tehlike olarak görün. Internet kullanıcılarının tümünün aynı bilgi düzeyine sahip olmadığını kesinlikle unutmayın.

 

Gelen parametre uzunluklarını ayarlayın …

Bir alan için database ‘ iniz üzerinde örneğin 5 karakterlik bir uzunluk belirlediyseniz, aynı şekilde parametre girilebilen textbox (girdi kutuları) için de 5 karakterlik bir sınır vermek gereklidir. Aynı şekilde URL aracılığı ile alınan parametrelerin de programlama yolu ile kısıtlanması ; örneğin gelen parametrenin ilk 5 karakterinin alınması saldırıların vereceği zararın önlenmesini sağlayacaktır.

 

Web Server ve SQL Server arasındaki bağlantıda asla Sistem Yöneticisi hesabını kullanmayın …
Sıklıkla yapılan hatalardan en büyüğü de Web Server ile SQL Server arasındaki bağlantının, genellikle en üst düzey yetkiye sahip olan kullanıcı hesaplarıyla yapılmasıdır. Bu iki server arasındaki bağlantıda kullanılacak hesabın, kısıtlı yetkilere sahip hatta sadece web sitesinin ihtiyaç duyabileceği komutları çalıştırma yetkisine sahip bir hesap olmasına çalışılmalıdır. Bu sayede, web sitesinden SQL Enjeksiyon saldırısı yöntemiyle gelen ölümcül saldırılar etkisiz hale getirilmiş olacaktır.

 

Kullanıcının girdiği ya da URL yoluyla gelen değerlerin tiplerini kontrol edin …

Web uygulamanız içerisinde mutlaka bir denetim mekanizması olsun. Kullanıcıdan aldığınız her değeri SQL Server komutu olarak çalıştırmadan önce, o değerin istediğiniz tipte olup olmadığını denetleyen bir fonksiyon yazmayı unutmayın. Yukarıdaki örneğimizde 999 şeklinde sayısal olarak gelmesi gereken değerin dışındaki string tipli değerlerin kabul edilmemesini sağlayın.

 

Gelen değerler içerisindeki yabancı karakterleri temizleyin …

Web uygulamanızdaki girdi kutularından ya da URL yoluyla gelen değerler içerisinde genellikle büyüktür, küçüktür, virgül, noktalı virgül , eşittir gibi sembollere ihtiyaç yoktur ve bu semboller SQL Server ya da ASP dilinde kullanılan sembollerdir. Bu noktada ASP dili ile aldığınız bir parametreyi nasıl temizleyeceğinizi anlatmakta fayda var. Burada bir fonksiyon yazarak “kötü” karakterleri yok ediyoruz , tabii ki bu fonksiyonu uygulamanıza göre geliştirmek sizin elinizde :

<%
Function Temizlik ( deger )

Temizlik = Replace ( deger , “>” , “”)
Temizlik = Replace ( deger , “<” , “”)
Temizlik = Replace ( deger , “;” , “”)
Temizlik = Replace ( deger , “,” , “”)
Temizlik = Replace ( deger , “’” , “”)

End Function

Unutmamak gerekir ki en güvenli sistem power kablosu takılmamış olan sistemdir, ancak bu sistemden de fayda görmeyeceğimiz çok açıktır.  Sistemlerinizi korumak için güç kablosunu çekmek yerine, kendi kendinizi Internet kullanıcılarının ve dahası hacker ‘ ların yerine koyup , bu şekilde uygulamalar geliştirmek daha fonksiyoneldir. Hepinize güvenli sistemler diliyorum …

 

 

Yusuf ÇAKIR

yusuf@winnetmag.com.tr

MacOS MAMP Server üzerinde MSSQL bağlantısı için FreeTDS kütüphanesi kurulumu ve konfigürasyonu

Bilindiği üzere Linux ve haliyle MacOS işletim sisteminin doğal MSSQL bağlantı yeteneği bulunmuyor.

Genel anlamda Linux dünyasında Apache, PHP ikilisinin yanına hemen MYSQL gelmekte ve tercih edilmekte.

Ancak gün gelir, PHP’nin mssql_connect fonksiyonu ile bir MSSQL Bağlantısı kurulup sorgu çalıştırılmak istenirse, birazcık uğraşı ile Linux, Centos veya MacOS MAMP üzerinde MSSQL bağlantısı yapabilmek ve yakındaki veya uzaktaki MSSQL veritabanlarında sorgu çalıştırabilmek mümkündür.

Bir Linux işletim sisteminde PHP’nin MSSQL fonksiyonlarını kullanabilmek, yani Linux’e MSSQL bağlantı yeteğini kazandırmak için başlıca yapılması gerekenleri şu şekilde sıralayabiliriz.

Öncelikle FREETDS kütüphanesini yükleyeceğiz.
Sonra PHP’nin son versiyonunu indirip, freetds ile çalışabilmesi için konfigüre edeceğiz.
Sonra da bir kaç ini dosyası değişikliği ile konuyu sonuçlandıracağız.

Öncelikle FREETDS paketini şuradan indirin. MAC’inizde bir terminal penceresi açın.

cd /usr/local

komutunu kullanın ve devamında

mkdir freetds

komutu ile freebsd isminde bir klasör oluşturun. Şimdi, az önce download ettiğiniz freetds-stable.tgz dosyasının bulunduğu dizine gidin. Örneğin bu dosyayı Downloads dizinine indirdiyseniz

cd /users/yazilimci/Downloads/

komutu ile ilgili dizine geçiş yapın.

tar -xf freetds-stable.tgz

komutu ile sıkıştrılmış, freetds-stable.tgz dosyasını dizine çıkartın.

cd freetds-0.91

komutu ile açılmış dosyaların bulunduğu dizine giriş yapın.

/configure --prefix=/usr/local/freetds --sysconfdir=/usr/local/freetds/conf/freetds --disable-libiconv --disable-odbc

komutu ile freetds kütüphanesini konfigüre edin.

make

komutu ile freetds’yi derleyin.

sudo make install

komutu ile derlenen kütüphanesin kurulumunu yapın. Bu komuttan hemen sonra sizden bilgisayarınızın root şifresi sorulacaktır, şifrenizi girin.

Şu anda FreeTDS’in kurulumunu tamamlamış bulunuyoruz.

Şimdi de PHP’nin yeni versiyonunu indirip, yeniden derleyip kurulumunu yapalım.

Buradan
 PHP’nin son versiyonunu indirin.
Yukarıda yazdığım şekilde önce tar komutu ile php’yi extract edin ve extract edilmiş dosyaların bulunduğu klasöre geçiş yapın.

./configure

komutu ile PHP’yi konfigüre edin.

make

komutu ile PHP’yi derleyin.

Install etmeden önce extract edilmiş PHP dosyalarının içerisindeki ext/mssql klasörüne geçiş yapın.

phpize

komutu ile PHP’yi phpize edin. (Bu komut PHP uzantı derleme ortamını hazırlar)

./configure --with-mssql=/usr/local/freetds

komutu ile mssql uzantısına, freetds ile çalışması gerektiğini anlatın.

Şimdi yine ext/mssql dizininde iken

sudo nano php_mssql.c

komutu ile php_mssql.c dosyasını nano editörü ile açın.

Bu dosyada

PHP_FE_END

satırını bulun ve

{NULL, NULL, NULL}

şeklinde değiştirin. Dosyayı; CTRL-X ile çıkarken Y ile kayıt edin.

Şimdi yeniden terminal ekranına döndünüz, gözleriniz hafiftan kararmaya başlamış durumda ve sonraki komuta hazırsınız.

make

komutu ile PHP’yi derleyin.

Şu anda hala ext/mssql klasöründesiniz, şimdi bu klasörün altındaki modules klasöründen bir dosyayı alıp, MAMP’ın eklentiler klasörüne kopyalayacağız.

Bir Finder penceresi açın ve Downloads klasöründeki açılmış PHP dosyalarınızın bulunduğu klasördeki ext/mssql/modules klasörüne gelin. Burada bulunan mssql.so dosyasını kopyalayın.

Şimdi ayrı bir Finder penceresinde MAMP uygulamasının bulunduğu klasöre gelin.
Burada gideceğiniz klasör /Applications/MAMP/bin/php/php-5.3.6/lib/php/extensions/no-debug-non-zts-20090626/

Az önce kopyaladığınız msssql.so dosyasını buraya yapıştırın.

Bir kaç klasör yukarıda bulunan /Applications/MAMP/bin/php/php-5.3.6/conf/ klasöründeki php.ini dosyasını bir editör ile açın. (nano olur textedit olur, textwrangler olur …)

Burada extension= kelimesini aratın ve bu satırların en altına

extension=mssql.so

kodunu ekleyin. Bu bize, mssql.so eklentisinin PHP ile beraber çalışması gerektiğini anlatmış oldu.

Hepsi bu kadardı 🙂

Şimdi MAMP’ı restart edebilir ve sonuçları deneyebilirsiniz.
Eğer bu işlemleri Linux ya da türevi bir sunucu üzerinde yapmak istiyorsanız küçük farklılıklar dışında yine yöntem aynı şekilde olacaktır.

PHP tarafında bir MSSQL bağlantısı yapmak ve yukarıdaki işlemlerin sonucunu görebilmek için şöyle bir kod kullanabilirsiniz  :

<?php
$sunucu = '192.168.1.200';
// Bağlanıyoruz ...
$link = mssql_connect($sunucu, 'sa', 'sa_sifresi');

if (!$link) {
    die('MSSQL bağlantısı yapılırken birşeyler yanlış gitti. ');
}
?>

Ay fotoğrafı nasıl çekilir?

Ay fotoğrafı çekmenin zorlu ve eğlenceli bir iş olduğunu söylemek sanırız doğru olur.
Buradaki en büyük zorluk, çekmek istediğiniz nesnenin bir ışık kaynağı olmasıdır.

Diğer bir zorluk ise ayın biz dünyalılara birazcık uzak olma durumudur.
Dünyadan yaklaşık olarak 380bin KM. uzaklıkta bulunan ayı çekebilmek için zoom lens gerektiği açıktır.

Diğer bir zorluk ise, ayın hem kendi etrafında dönmesi, hem dünyanın etrafında dönmesi, bu da yetmezmiş gibi dünya ile birlikte güneşin etrafında dönmesi meselesidir.

Dolayısı ile ay fotoğrafı çekilecekse yaklaşık olarak şu notları verebiliriz :

YÜKSEĞE ÇIKIN

Zaten ışık yayan bir kaynağı çekmek zorken, bir de üstüne araba farları, evlerin ve binaların ışıkları, havai fişeklerin vs ışıkları ile uğraşmayın.
Bunu yaparak aynı zamanda, toz duman kir vs. gibi şeylerden de uzaklaşmış olursunuz.

TEMİZ VE BERRAK HAVADA ÇEKİM YAPIN

Bu şart. Çünkü önce siz ayı net olarak görmelisiniz ki, fotoğraf makineniz de onu net olarak görebilsin.

AY DÜNYAYA DAHA YAKINKEN ÇEKİM YAPIN

Bazı günler var ki ay dünyaya daha fazla yaklaşmış olur. Ay ile dünya arasındaki mesafe 380bin KM iken, bazı günlerde bu mesafe 350bin KM’ye kadar düşer.
Çekmek istediğiniz nesne ne kadar yakınsa, o kadar iyi olur değil mi ? Hem de bu nesne AY ise.

ODAK UZAKLIĞI, ISO, DİYAFRAM AÇIKLIĞINI İYİ AYARLAYIN

Burası bir fotoğraf sitesi değil.
İyi ayarlayın işte, çok ama çok fazla deneme yapın ve en uygun parametreleri yakalayın.

TRIPOD (ÜÇAYAK) KULLANIN

Muhtemelen uzun pozlama yapmanız gerekmeyecektir ama yine de bir Tripod kullanmadan çekim yapmanız çok ama çok zor.

FOTOĞRAFINIZI “HEMEN” ÇEKİN

Hemen çekmeniz ve hızlı olmanız lazım çünkü  hareketli bir nesneyi çekiyorsunuz.
Gerçekten de ay, sandığınızdan da hızlı hareket ediyor.

Aşağıda bilmemkaç yılında çekmiş olduğum bir ay fotoğrafını görmektesiniz.
İlk defa ay fotoğrafı çektiğim için belki çook iyi değil gibi görünebilir.

Zaten bu çekimden sonra, ay fotoğrafı çekmeyi bıraktım, sonuçta her çektiğim fotoğraf öncekinin aynısı oluyor 🙂

(Fotoğrafın üstüne tıklayıp büyük halini izleyebilirsiniz)
(Yok ben daha büyük izlemek istiyorum diyenler de tam olarak burayı tıklayabilirler.)

ATmega328 İşlemcisinin EEPROM Yazma/Silme Limiti Üzerine

ATMEL firmasının üretmiş olduğu, ARDUINO UNO‘lar üzerinde de kullanılan ATmega328 kodlu mikro kontrolcüsünün (kendisine bundan sonra işlemci diyeceğiz) datasheet‘inde de belirtildiği üzere, bu işlemcinin üzerinde bulunan EEPROM’larda belirli bir yazma/silme limiti bulunmaktadır.

 

Aslında bu limit, EEPROM’ların tümünde zaten bulunan bir limittir.

Bildiğiniz üzere EEPROM’lar elektriksel olarak yazılabilen ve silinebilen ürünlerdir. Dolayısı ile her yazma ve her silme işlemi elektriksel bir işlem neticesinde oluşturulur. Bu sayede, EEPROM denen ürünler, elektrik kesilse bile üzerlerindeki bilgiyi saklayabilirler ve unutmazlar. Unutmayın unutulanlar unutanları asla EEPROM.

Örneğin ATmega328 işlemcisinin üzerindeki EEPROM‘un üzerindeki bilgiyi yaklaşık 20 yıl boyunca tutabildiği efsanelere konu olmuş bir durumdur.

Ancak az önce bahsettiğim üzere, elektriksel olarak bazı bilgileri yazmak ve silmek demek, birşeylerin ömrünün elektriksel olarak yok olması demektir.
Bu nedenle ATMEL’in dokümanlarında belirttiği üzere ATmega328 üzerindeki EEPROM‘lar “100binden fazla yazma ve silme ömrüne sahiptir“.

ATMEL’in datasheet’inde de belirttiği üzere bu EEPROM‘lar en az 100bin defa GÜVENLE yazılabilir ve silinebilir.
Ancak önemli olan nokta şu ki ; ATMEL, 100bin defa güvenle yazılıp, silinebildiğini belirtmekte ancak 100bin’den sonrasına garanti vermemektedir.

Dolayısı ile ARDUINO‘nun kendi EEPROM‘una yazarken dikkatli yazın. Ne kadar az yazma ve silme, o kadar EEPROM ömrü demektir.

Az önce, bu EEPROM’u “öldürmek” için uzun uzun çalıştım.
Arduino EEPROM’una yaklaşık 60-65 dakika boyunca, her defasında 1 byte veri olmak üzere toplamda 1 milyon 200bin defa YAZMA işlemi yaptım.
Yaklaşık 30 dakika bekleme süresinden sonra, EEPROM’un içine baktığımda (okuma işlemi yaptığımda), bilgilerin hala durduğunu gördüm.

Dolayısı ile ATMEL’in 100bin defa dediği olay, en az 100bin defadır. Ancak yine de 100binlerden sonra, birşeylerin ters gidebileceği düşüncesini unutmayın.

Bir de ATmega328’in EEPROM’unun hafıza kapasitesinin 1024 byte olması ile alakalı bir iki notum olur sizlere.

Bilindiği üzere bu EEPROM’un hafızası maximum 1024 Byte.
Yani buna en fazla 0’ıncı adresten başlayıp, 1023’üncü adrese kadar en fazla 1 byte olmak kaydı ile toplamda 1024 byte yazabilirsiniz.

Adres olarak verdiğiniz 1024 ve üzerindeki her adres, göreceli adreslere dönüştürülecek ve EEPROM’un ilgili adresine öyle yazılacaktır.
Yukarıdaki cümleyi anlamadınız değil mi ? Şimdi ben okudum, ben de anlamadım. Problem değil, cümle içinde kullanalım :

Örneğin
Adres olarak 1023’üncü adrese A harfi yazarsanız bu 1023’inci adrese yazılır. (Adresleme 0’dan başladığı için aslında 1024’e yazmış oluruz)
Adres olarak 1024’üncü adrese A harfi yazarsanız bu 0’ıncı adrese yazılır. (Adresleme 0’dan başlar ve 1023’de biter. Ama biz 1024 verdiğimiz için ve böyle bir adres olmadığı için bu 0’ıncı adrese yazılır)
Adres olarak 1025’inci adrese A harfi yazarsanız bu 1’inci adrese yazılır.(Adresleme 0’dan başlar ve 1023’de biter. Ama biz 1025 verdiğimiz için ve böyle bir adres olmadığı için bu 1’inci adrese yazılır)
Adres olarak 2000’inci adrese A harfi yazarsanız bu, 976’ıncı adrese yazılır. (Adresleme 0’dan başlar ve 1023’de biter. Ama biz 2000 verdiğimiz için ve böyle bir adres olmadığı için bu 976’ıncı adrese yazılır)

Bu konuda herhangi bir sorunuz olursa, şu aşağıdaki yorum kısmına yazmanız yeterli.

Universal Bağlama Programı

Yıl 2001. Bağlama sazı ile uğraşıyorum, ama her bağlama öğrenen gibi hemen de birşeyler çalmak, birşeyleri seslendirmek istiyorum. Biraz uğraşıyorum ama Gelin Ayşe’den öteye gitmek kolay olmuyor 🙂

Eh, madem bu iş gerçek bağlama ile kolay olmuyor, o halde açayım Delphi’yi bilgisayarda bağlama çalabileceğim bir program yapayım diyorum.

Önce programın nasıl olması gerektiğini tasarlıyorum. İşte, üstünde tuşlar olsun, her tuş bir bağlama notasını temsil etsin, kullanıcı çaldığı parçayı kayıt edebilsin, sonradan dinleyebilsin, dosyaya kayıt edebilsin ama içerisinde Türkü Sözleri arşivi de olabilsin …

Öncelikle bu programın daha önce yapılıp yapılmadığını araştırdım, bazı denemeler yapılmıştı ama başarıya ulaşmamıştı.

Hemen kolları sıvadım, şurası böyle olsun, şurası şöyle olsun derken üzerinden aylar geçti ve sonunda elimde ismine Universal Bağlama dediğim, bilgisayarda bağlama çalınabilmesini sağlayan bir program oluvermişti.

Madem ilk program olacak, içerisinde geniş bir türkü sözleri arşivi olsun diyerek TRT Türk Halk Müziği Ses Sanatçısı Gül Emekçi hanımefendi ile iletişim kurdum.
Kendisinde bulunan Türkü sözlerini de paylaşıp, programı kendi web sitelerinden de yayınlayacağını söyledi. Aynı zamanda Türk Halk Müziğinin değerli sanatçılarından Sümer Ezgü beyefendi ile de iletişime geçtim, o da memnun olduğunu ve destek vereceğini söyledi. Sümer Ezgü’den yardım almadım, daha doğrusu ihtiyaç olmadı ama onun bir mail ile olsa bile destek vereceğini söylemesi beni şenlendirmişti.

Devamında Türkü sözleri arşivi barındıran büyük web siteleri ile iletişim kurdum ve destek verip vermeyeceklerini sordum. Sağolsunlar, hepsi azami derecede destek verdiler.
O yıllarda, dünyanın en büyük download sitesi olan download.com sitesi ile irtibata geçtim, programın İngilizce desteği olmadığı için kabul edemeyeceklerini bildirmişlerdi.
Bu programın dünyada ilk olduğunu ve İngilizce desteğinin gerekmediğini bildirdiğimden 1 hafta sonra Universal Bağlama, download.com’da yayınlanan nadir Türkçe programlardan olmuştu.

Bir anda program o kadar yayıldı ki, download.com’da yüzbinlerce indirildi, Türk sitelerinde çok aranan programlar arasına girmişti.
Sonraları Müzikte Temsil Müziksel Temsil Sempozyum’unda Türk Makam Müziğini Bilgisayarda Temsil Etmeye Yönelik Yerli Yazılımlar başlığı altında Universal Bağlama’dan bahsedildiğini öğrendim.
Bana e-posta gönderen yüzlerce öğretmenin bu programı, ilkokul, ortaokul, lise düzeyindeki öğrencilerine ders esnasında kullanıldığını öğrendim.

Bazı program yapımcılarının yazmış olduğu programlarda, yazılan notaların Universal Bağlama biçiminde kayıt edilmesini sağlayan menüler bile bulunmakta idi.

Şu anda bile bakınca, arama motorlarında hala binlerce sitede Universal Bağlama ile ilgili yazılar ve download linkeri bulunmakta.

İşte bu da böyle küçücük bir anımdı, tarihe not düşülsün 🙂

Universal Bağlama programını Google’da arayarak indirebilirsiniz, ancak buraya download linkini vermeyi düşünmüyorum.

Programın hakkında bölümüne Bedri Rahmi Eyyüboğlu’nun şu unutulmaz dizelerini yazmıştım :

Şairim,
Zifiri karanlıkta gelse şiirin hası,
Ayak seslerinden tanırım.
Ne zaman bir köy türküsü duysam,
Şairliğimden utanırım …

AppStore’a gönderilen uygulamaların onaylanma süreci

Apple’ın mobil cihazlar için kullandığı AppStore isimli uygulama marketine bir programcı olarak bir uygulama göndermenizin ardından bekleme süresi “en fazla 6 gün” olarak bilinmektedir.

Diğer taraftan, Apple’ın bir programı kabul edip etmeyeceğini tek kişi belirlememektedir.

Apple’ın AppStore’a gönderilen her programda standard ve hatta standard dışı testler gerçekleştirdiği bilinen bir gerçektir.

Bir uygulamada, bir sorun bulunduysa ve bu sorunun uygulamaya geçer not verip vermeyeceği muallakta ise, bu uygulama direkt olarak rededilmemekte fakat bir üst operatöre gönderilmektedir.

Üst operatörün de red veya kabulünden sonra ilgili uygulama denetimi geçmiş ya da geçememiş olarak işaretlenmektedir.

Eğer AppStore’a gönderdiğiniz bir uygulama 6 günün sonunda (7’inci günün başında) hala yayınlanmadı ise, tavsiye edilen şey, 3 gün daha beklenmesidir.

Ayrıca, yeni yıl, noel ve hıdırellez kutlaması gibi Amerika için önemli olan günlerde bu sürenin 1-2 gün daha fazla olduğu bilinmektedir. Bunun nedeni, çoğu uygulama yapımcısının yeni uygulamasını bu gibi günlerden 1-2 gün önce veya sonra gönderiyor olmasıdır.

Apple’ın bir programı incelerken hangi etmenleri göz önüne aldığını bilmek isteyenler için şöyle bir link bulunuyor :

https://developer.apple.com/appstore/resources/approval/guidelines.html

Not: Linki inceleyebilmek için, AppStore’da oturum açmanız gerekebilir.

MD5 Şifrelemesini Kırmak

Konuyu kısaca anlatmak için MD5’in ne olduğuna göz atmak gerekir.

Message Digest Algorithm kelimelerinin kısaltmasından oluşan bu şifreleme tekniği, genellikle bir verinin bir yerden başka bir yere transferinin sorunsuz gerçekleşip gerçekleşmediğinin kontrolünde kullanılır.

Örneğin internetten indirdiğiniz 2 GB. boyutunda bir dosyayı indirdiniz.
Acaba indirme işlemi sırasında 1 bit bile olsa bu dosyada bir sorun oluştu mu ?

Genellikle bu tip büyük dosyaların yanında bir de MD5 HASH (MD5 Kelimesi diyelim biz buna) verilir.

Bu sayede bilgisayarınıza indirdiğiniz dosyanın MD5 Kelimesi ile, karşı tarafın size verdiği MD5 kelimelerinde bir farklılık varsa, dosyanızda bir sorun oluşmuş demektir.

MD5 bir şifreleme algoritmasıdır. MD5 algoritması ile sonsuz uzunlukta bir veriden 32 karakterli128 bit bir veri elde etmek mümkündür. En önemli özelliği geri dönüşümsüz oluşudur.

Örneğin deneme kelimesinin MD5 karşılığı 8f10d078b2799206cfe914b32cc6a5e9 şeklindedir.

Ancak görüldüğü üzere, daha doğrusu MD5 algoritmasının yapısı gereği, 8f10d078b2799206cfe914b32cc6a5e9 karşılığından yola çıkarak deneme kelimesine ulaşmak mümkün değildir. (matematiksel olarak mümkün değildir)

Diğer taraftan; elimizde 8f10d078b2799206cfe914b32cc6a5e9 şeklinde bir MD5 Kelimesi varsa bunu kırmanın bazı yolları da var elbette.

WordList yöntemi : 
Bu yöntem, bilinen bazı kelimelerin MD5 karşılığını hesaplamak ve elimizdeki HASH ile tutup tutmadığına bakmaktır.
Örneğin bir kelime listesi olduğunu ve içerisinde elma, armut, üzüm, deneme, ayva kelimelerinin bulunduğunu varsayalım. Bu durumda, bir program elma’dan başlayarak ayva’ya kadar tüm kelimelerin MD5 karşılığını alacak ve elimizdeki HASH’in, deneme kelimesinin HASH’i ile aynı olduğunu anlayabilecektir. Bu durumda 8f10d078b2799206cfe914b32cc6a5e9 HASH’inin deneme’nin karşılığı olduğu anlaşılabilecektir.
Ancak tüm kelimeleri matematiksel olarak derlemek mümkün olsa da, zaman ve imkan açısından kayıt altına almak mümkün olamayacağı için bu yöntem çok da tercih edilen bir yöntem değildir ve şifrenin bulunabilmesi de sadece ihtimal dahilindedir.

Brute Force Atak (Kaba Kuvvet Atağı)
Eğer A harfinden başlayıp, Z harfine kadar 1 karakterli tüm harflerin HASH’ini biliyor olsaydık, şifrelenmiş tüm 1 karakterleri otomatik olarak çözmüş olurduk.
İşte bu yöntem de, belirli bir harften başlayıp, belirli bir harfe kadar sayan ve saydığı her harfin (ya da kelimenin) HASH’ini alan programları kapsamaktadır.
Ancak görüldüğü ve tahmin edildiği üzere, her ne kadar A’dan Z’ye 1 karakterli sayıları saymak kolay olsa da, A’dan Z’ye örneğin 20 karakterli sayıları saymak “zaman açısından” bilgisayarlar için bile kolay değildir.
Örneğin İngiliz alfabesinde 26 harf bulunur. Bu yöntemle 10 karakterli tüm harfleri A’dan Z’ye saymak  demek (26^1)+(26^2)+(26^3)+(26^4)+(26^5)+(26^6)+(26^7)+(26^8)+(26^9)+(26^10) kadar kombinasyon eder ki bu da 146.813.779.479.510 (146 trilyon civarı) eder.
Bu 146 milyon civarı ihtimalin kaç byte tuttuğunu hesaplamak için her bir kombinasyon grubunu uzunluğu ile çarpabiliriz.

Dolayısı ile

(26^1)*1+(26^2)*2+(26^3)*3+(26^4)*4+(26^5)*5+(26^6)*6+(26^7)*7+(26^8)*8+(26^9)*9+(26^10)*10 formülü ile bu ihtimallerin 1.462.265.243.615.930 Byte ettiğini buluruz.

1.462.265.243.615.930 byte ise yaklaşık olarak 1.330 Terabyte bir disk gerektirir.

Yani bu kadar ihtimalin HASH’ini hesaplamak ya da sağ baştan saymak hem zaman açısından imkansız, hem de disk boyutu açısından imkansızdır. (En azından imkansıza yakındır)

Ama yok ben deneyeceğim derseniz, normal bir bilgisayarla işlemi başlatabilir ve torunlarınıza “Bilgisayarda işlem yapılıyor, kapatmayın” şeklinde bir not yazabilirsiniz.

Zira bu kadar kombinasyonu hesaplamak için oldukça fazla zamana ve oldukça fazla toruna ihtiyacınız olacaktır.

Sonuç :
Uğraşmayın.

Navicat ile MacOs’ta MAMP üstünde kurulu bir MYSQL veritabanına bağlanmak

Navicat ile MacOs’ta MAMP üstünde kurulu bir MYSQL veritabanına bağlanmak

Navicat ile MAMP üstünde kurulmuş olan bir MYSQL veritabanına bağlanmak için Windows tarafında pek fazla birşey yapmanız gerekmiyor.
Sadece Bağlantınıza bir isim verin (Connection Name) , Server adresi olarak localhost kendi bilgisayarınızı gösterin ve root şifrenizi yazarak bağlanın.

Ancak bu işlemi bir MacOs işletim sistemi üzerinde yaparsanız bağlanamadığınıza dair bir hata mesajı alırsnız.
Bu durumda yapmanız gereken Bağlantı Özellikleri (Connection Properties) penceresinde iken Advanced tabına geçiş yapmak ve Use Socket File (Soket dosyası kullan) seçeneğini seçenek /Applications/MAMP/tmp/mysql/mysql.sock yazmaktır.

Bilgisayar programcısı olmak istiyorum

Öncelikle programcı olmak istemenizdeki amacı sorgulamak gerekiyor. Neden programcı olmak istiyorsunuz ?

Para kazanmak için mi Programcı olmak istiyorsunuz ? O halde iyi bir plan yapın, bir banka soyun ve yakalanmayın.
Para kazanmak için, bu söylediğimiz yöntem daha iyidir ama yine de programcılık yaparak da iyi paralar kazanabilirsiniz.

Programcılık Nedir?

Öncelikle ne olmadığını söylemek gerekir.
Ortada “Programlama sanatı” gibi terimler dolaşıyor olsa da Programcılık bir sanat değildir.
Programcılık bir bilim dalı hiç değildir.
Programcılık sadece bir meslek dalıdır.

Hobi olarak bilgisayar programcılığı yapabilir miyim?

Hobi olarak kasaplık yapan birini gördünüz mü siz.
Evet görmediniz, çünkü programcılık bir meslektir.
İlla ki programcılığı hobi olarak yapacağım derseniz, şimdiden söyleyelim.
Eğer günün birinde bir program yapmış olsanız bile, o programı sadece siz ve 3-5 arkadaşınız kullanacaktır.
Programcılık, hobi yapılacak kadar kolay, 3-5 günde öğrenenilebilecek bir konu değildir.

Meslek olarak bilgisayar programcılığı yapabilir miyim?

Elbette.
Çünkü bu bir meslektir ve her meslek gibi, eğer daha önce altyapınız yoksa, bunu öğrenmeniz gerekir.
Bundan 6 ay önce kasap dükkanım vardı ama şimdi programcılık yapıyorum diyen birini göremezsiniz.
Bu da şunu gösteriyor ki; programcılık öyle 3-5 ayda öğrenilebilecek bir meslek değildir.
Eğer ben bu işi yapmak istiyorum, bu iş benim mesleğim olmalı, ben bu işi seviyorum derseniz OKUMALI, ÇALIŞMALI ve UYGULAMALISINIZ.

Okumak

Bir üniversitenin Bilgisayar Mühendisliği bölümünü okumak,
Bir üniversitenin Bilgisayar Programcılığı bölümünü okumak,
Üniversiteye gitmeyip bu konuyla alakalı kitapları ve kaynakları okumak,
veya Kurslara ve eğitim kurumlarına gidip okumak,

Kısacası okumak bu işin ilk adımı.

Çalışmak

Sadece okumak yeterli değil elbette. Öyle bir okumalısınız ki, bu iş okumaktan çıkıp, anlamaya dönüşmeli.

Uygulamak

Neredeyse en önemli adım. Kendi kendinize program yapıp, programlamayı öğrenemezsiniz.
Herhangi bir işyerine gidin ve onlara bir program yazacağınızı ve bunun karşılığında para istemediğinizi belirtin.
Niye para istemiyoruz sorusunu soranlar ise bu testi geçemediler, bu yazıdan sonraki satırları okumasalar bile olur.
Çünkü öğrenme aşamasında tek düşündüğünüz şey para değil, programlama ve onu öğrenmek olmalı.

Ben bilgisayar programcısı olabilir miyim?

Ben programcılığı bir yetenek olarak görüyorum, ama yine de yeterli süre çalışma ile yetenek denilen şeylerin öğrenilebildiğini görüyoruz.
Yani ne kadar yetenek olarak görülse de, çalışma ve yeterli uygulama ile bu iş yapılabilir.
Edison’un lambayı bulmasına bakın. Bu icadı yapmak için çalışmaya başladığında, bir çok kişiden daha az fizik biliyordu.
Lambayı bulduktan sonra, “lambayı buldum” demedi, “Nasıl lamba yapılamaz sorusunun 1000 farklı yolunu buldum” demişti.
Eğer yeterli merak, öğrenme kapasitesi, azim varsa neden programcı olamayasınız ki ?

Bilgisayar programcısı olabilmek için ne kadar süre gereklidir?

“1 gün” mutlaka programcı olursunuz.
Ama o süre sizin okumanıza, çalışmanıza ve uygulamanıza bağlı.
10 yıl desek belki az olur, 6 ay desek belki çok olur.

Zeki olmak gerekiyor mu?

Zeki olmak bazen Allah vergisi birşeydir ama bundan daha güzel birşey var ki ; Zeka geliştirilebilen birşeydir.
Mantığınızı ne kadar çok kullanırsanız, kendinizi problem çözmeye ne kadar çok adarsanız, zekanız o kadar çok gelişir ve o kadar programcı adayı olursunuz.

ÖĞRENMEK İÇİN NEREDEN BAŞLAYAYIM ?

Abaküs’ten başlayın, sayma sayılarından başlayın, insanların neden 10 parmağı olduğunu düşünün.
Sadece 2 parmaklı olsaydık ne olurdu diye sorun kendinize.
Neden ihtiyacımız oldu bilgisayara ? Sonra ne oldu da Bilgisayar’lar geliştirildi.
İnsan zekasını bilgisayara aktarmak nasıl mümkün olabiliyor ?
Mantık nedir sorularının cevabını bulun, araştırın. Biraz matematik öğrenin, sayı sistemlerini inceleyin.
“99 Adımda Programcılık” gibi kitaplardan önce yukarıdaki soruların cevaplarını ve buna bağlı soruların cevaplarını öğrenin.
Kod yazmak bu işin basit tarafı.

HANGİ DİLDEN BAŞLAMALIYIM ?

En kolay olanından başlayın. HTML olsun mesela.
Sonra buna bağlı olarak çalışabilen Javascript’e geçiş yapın.
Sonra buna bağlı olarak çalışabilen PHP, ASP gibi dillere geçiş yapın.
En iyi dil, en iyi bildiğiniz dildir.
Geçiş yapma aşamasında, sevmediğiniz bir dil olursa boşverin, diğerine geçin.
Diğer insanlar en çok hangi dili kullanıyorsa o dillere yönelin.
Hem öğrenmek için kaynağınız bol olur, hem de soru sormak için kullanacağınız bir sürü insan olur.

PROGRAMCILIK PARA KAZANDIRIYOR MU ?

Programcılık, kasaplık, bakkalcılık ya da şoförlük.
Para kazandırmayan meslek yoktur. Yeter ki siz işinizi iyi yapın ve mesleğinizi sağlam temeller üzerine kurmuş olun.
Elbette, programcılık mesleğinin kazancı bir kasabın kazancından biraz daha fazla olabilir.
Ama burada asıl önemli olan ne kadar para kazandığınız değil, o parayı nasıl kazandığınızdır.
Bir işi severek yapmıyorsanız, o işten kazandığınız parayı da sevemezsiniz.
Çünkü modern çağ insanları olarak, hayatımızın yarıdan fazlası çalışmakla geçiyor ve sevmediğimiz bir işi yapmak, hayatımızın sönük geçmesine sebep olur.

HTML5 Manifest dosyaları ile sayfaları Offline olarak gezdirmek

HTML5 ile gelen Application Cache özelliği ile, bir web sayfasını belirli kurallar dahilinden Cache altına almak ve offline olarak da izlenebilmesini sağlamak mümkündür.

manifest uzantılı dosyalar ile tanımlanabilen bu Application Cache özelliği sayesinde 3 avantajınız olur.

  • Kullanıcıların uygulamanızı (ya da web sitenizi) offline olarak kullanabilmesi mümkün olur,
  • Sayfa yüklenmeleri hızlandırılmış olur,
  • Server tarafındaki iş gücü hafiflemiş olur.

HTML manifest dosyaları <html manifest> etiketine aşağıdaki şekilde parametre olarak verilir.
Tavsiye edilen dosya uzantısı appcache veya manifest şeklindedir.
Genel tavsiye appcache olmasına karşın, eski iOS versiyonlarının illa ki manifest uzantılı bir dosya istediğini unutmayın.

Ayrıca manifest dosyası olarak PHP, ASP gibi bir dosya da kullanabilir ve manifest dosyasına yazılacak kuralların otomatik belirlenmesini sağlayabilirsiniz.

<!DOCTYPE HTML>
<html manifest=”deneme.appcache”>

 

MANIFEST DOSYASININ YAPISI NASILDIR ?

CACHE MANIFEST

# 2012-02-21 v1.0.0

CACHE:

/theme.css
/logo.gif
/main.js

NETWORK:

login.asp

FALLBACK:

/html/ /offline.html

Yukarıda görüldüğü üzere manifest dosyasında 3 tane kural var.
CACHE , NETWORK ve FALLBACK.

CACHE  bölümüne hangi dosyaların cache’lenmesi gerektiği yazılır.
NETWORK bölümüne daima online olarak alınacak dosyalar yazılır.
FALLBACK bölümüne, online alınması gerektiği halde online alınamayan dosyaların yerine hangi dosyaların gösterileceği yazılır.

Normal şartlarda # 2012-02-21 v1.0.0 satırı bir comment (yorum) satırı olarak işlem görürken, Manifest dosyasında bunun bir görevi daha vardır.
Eğer daha önce CACHE MANIFEST bölümüne yazdığınız bir dosyanın yenilenmesi ve yeniden internetten alınması gerekiyorsa ne yapacaksınız ?
İşte HTML5, bu durumda sizin # satırı ile yazdığınız tarihe ve versiyona bakar.
Eğer değişiklik varsa, Manifest dosyası yeniden okunur ve gereken işlemler yapılır.

NOTLAR :

Cache’lenmesini istediğiniz her sayfanın başına <html manifest=”deneme.appcache”> şeklinde bildirim eklemelisiniz.

Manifest dosyasında wildcard kullanamazsınız, yani *.html gibi bir tanım yapmazsAnız, her dosyayı tek tek manifest dosyasına yazmalı ya da yazdırmalısınız.

Başka bir domain üzerindeki dosyaları da manifest dosyasına ekleyebilirsiniz, sakıncası yok.

Bazı browser’lar cache’lenecek dosyaların toplam boyutuna bir sınır koyar. Genellikle 5 MB civarındadır.

Eğer belirtilen manifest dosyası için browser tarafından 404 hatası dönerse, cache sıfırlanır, bilgiler online alınır.

Daha önce CACHE bölümüne bir resim yazdıysanız ve bunun güncellenmesini istiyorsanız, o halde # ila başlayan bölümdeki versiyonu değiştirmelisiniz.

Yapacağınız denemelerde, Chrome tarayıcısını kullanabilir ve cache işlemlerinin doğru çaışıp çalışmadığını test edebilirsiniz. Bunun için chrome adres çubuğuna chrome://appcache-internals/ yazabilir ve cache’lenmiş sitelerin durumunu görüntüleyebilirsiniz.

Hamparsum Nota Sistemi

HAMPARSUM DA KİM ?

Hamparsum Nota Sisteminden bahsetmeden önce, bu nota sisteminin mucidi, değerli bestekar, müzik hocası, tamburi Hamparsum Limonciyan‘dan bahsetmek gerekir.

Hamparsum Limonciyan 1768 doğumlu Osmanlı Ermenisi bestekar ve Müzik hocasıdır. Aynı zamanda bir tambur sanatçısıdır. Bilinen 27 şarkısı, 11 peşrevi, 9  semaisi ve 20 kadar Ermenici İlahisi bulunmaktadır. Geliştirmiş olduğu notasyon sistemi sayesinde Türk Müziğinin bu zamana kadar gelebilmesi çalışmalarında önemli bir başarı sağlamıştır.

Hamparsum, eski Ermeni kilisesi ilahilerinin kaydedilmesinde kullanılan Khaz Sistemi’nin geliştirmiş ve Hamparsum Notası denilen notasyon sistemini dünyaya  kazandırmıştır.

Hamparsum notası 200 yıl boyunca binlerce eserin günümüze kadar gelebilmesine imkan sağlanmıştır.

MICROSOFT WORD ile HAMPARSUM NOTASI

Hamparsum Notasını Microsoft Windows altında çalışan herhangi bir kelime işlemci programında da yazabilmek mümkündür.

Örneğin bir Notepad, Excel ya da Word.
Biz burada Hamparsum Notasının Word üzerinde nasıl yazılacağını, kurulumundan başlayaracak anlatacağız.

KURULUMU

Bu notayı kurmak için öncelikle, Hamparsum notaları konusunda en önemli bilgi kaynaklarından birisi olan hamparsum.net üzerinden gerekli ZIP dosyasını indirebilirsiniz.
Ancak yine de ben, oradan download edip, kendi arşivime aldığım bu önemli dosyayı sizin için buraya yükledim.
Dolayısı ile kurulum adımlarını şu şekilde takip edebilirsiniz :

1. İçerinde 2 tane dosyanın olduğu dosyamızı BURAYA tıklayarak indirin.

2. İndirdiğiniz dosya büyük ihtimalle İNDİRİLENLER (Downloads) klasöründe inmiş olacaktır. O dosyayı bulun ve üzerine sağ tıklayarak dosyayı açın.

3. Sıkıştırılmış olan dosyanın içerisinden 2 adet dosya çıkmış olacaktır. HAMPARS.TTF ve HAMPARSUM.DOT

4. Öncelikle FONT dosyamızı kuracağız. TTF uzantılı olan HAMPARS.TTF dosyası font dosyasıdır. Bu dosyaya SAĞ tıklayarak YÜKLE menüsüne basın.

5. Font dosyamız yüklendikten sonra MS-Word programınızı açın ve Dosya menüsünden Aç diyerek HAMPARSUM.DOT dosyasını açın.

6. Eğer Word programınız, size bu dosyanın güvenli olmayabileceği konusunda birşeyler diyorsa, Düzenlemeyi Etkinleştir tuşuna basabilirsiniz.

7. Artık Hamparsum notalarını bu sayfaya yazabilir ve yazım işiniz bittikten sonra kayıt edebilirsiniz. Kayıt esnasında sizden yeni bir isim istenecektir. Yani açmış olduğunuz HAMPARSUM.DOT dosyası asla değiştirilmeyecektir çünkü o bir şablon dosyası.

NASIL YAZIYORUZ ?

Şu anda bulunduğunuz Word sayfasına normal yazı yazar “gibi” yazıyorsunuz. Az birşey fark var …
Bu fark ise tamamen Notanın Oktav’ını belirtmekle alakalı. Yani yazacağınız notanın kaç oktav olacağına göre tuşlara bazı karakterlerle beraber basıyoruz.

Öncelikle şunu belirtelim:

DO, RE, Mİ, FA# (Fa Diyez), SOL, LA, Sİ- (Si Bemol) notaları için  sırasıyla D,R,M,F,S,L,T tuşlarını kullanmaktayız. (ANA NOTA HARFLERİ)

DO için D
RE için R
Mİ için M
FA DİYEZ için F
SOL için S
LA için L
Sİ BEMOL için T

Ancak yukarıda anlattığımız üzere bu tuşlara direkt olarak basmıyoruz ve aşağıdaki tuşları kullanıyoruz. (YARDIMCI TUŞLAR)

1. OKTAV için ALT ve CTRL tuşları ile notanın harfine basıyoruz.
2. OKTAV için ALT tuşu ile beraber notanın harfine basıyoruz.
3. OKTAV için CTRL tuşu ile beraber notanın harfine basıyoruz.
4. OKTAV için CTRL ve SHIFT tuşu ile notanın harfine basıyoruz.

Örneğin 1 OKTAV DO notası için ALT tuşu ile beraber CTRL tuşuna ve aynı zamanda D tuşuna basın.
Örneğin 3 OKTAY FA notası için CTRL tuşu ile beraber F tuşuna basın.

Arızalı sayılan notaları yazmak içinse yukarıda bahsettiğimiz YARDIMCI TUŞLAR‘dan sonra X harfine basıp, hemen devamında ise ANA NOTA HARFİNE basmak gerekir.

Örneğin Sümbüle  (Tiz La Diyez) notasını ekrana yazmak için CTRL + X ve devamında L tuşlarına basılır.