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;

gdrive (Google Drive) Command Line Interface (CLI) uygulamasını kurmak, yapılandırmak ve çalıştırmak

Bu çalışmada Linux üzerinde komut satırında Google Drive işlemleri yapmamızı sağlayan gdrive uygulamasını indirip kuracağız.
(Bu adımlar Windows üzerinde de benzerdir ancak aynı değildir.)
Devamında bu uygulamanın Google Drive’a erişebilmesi için gerekli Google Console uygulamasını oluşturup, izinlerini vereceğiz.
Son aşamada gdrive testlerini yapacağız ve çalıştırarak bir dosyayı Google Drive’a upload edeceğiz.

  • https://github.com/glotlabs/gdrive/releases adresinden gdrive’ın uygun versiyonunu indirin ve sunucuda uygun bir klasöre yükleyin. Örneğin ben bu dosyayı /usr/sbin klasörüne yükledim. Bu uygulama bizim Google Drive işlemlerimizi yapmamızı sağlayacak.
  • Şimdi gdrive uygulamasının Google Drive’a erişebilmesi için Google Cloud üzerinde bir uygulama oluşturmamız gerekiyor. Bunun için şu adımları sırasıyla, dikkatle ve atlamadan yapın.
  • Google Cloud Console adresine gidin.
  • Menüden Yeni bir proje oluşturun. (veya var olanı seçin )
  • Yukarıdaki Arama kutusunda “drive api”  kelimesini aratın ve “Google drive api” seçeneğini seçin.
  • Enable tuşuna basarak Google Drive API‘yı aktif edin.
  • Soldaki Credentials menüsüne tıklayın.
  • Configure Consent Screen butonuna basın.
  • Buradan “External user type” seçeneğini seçin.
  • Create tuşuna nasın.
  • App name (Uygulama Adı), User support email (Kullanıcı destek e-postası), Developer contact information (Geliştirici Postası) alanlarını doldurun. App Name alanına projeye verdiğiniz ismi verin. Diğer alanlar boş kalabilir.
  • Save and continue tuşuna basın. Burada bir hata alırsanız büyük ihtimalle uygulama adı ile ilgilidir, değişik varyasyonları deneyin.
  • Şimdi”Add or remove scopes” butonuna tıklayın.
  • Bu listede google drive api‘yi arayın. (Çok sayfalı bu listede diğer sayfalara da bakın)
  • Buradan scopes …/auth/drive ve …/auth/drive.metadata.readonly seçeneklerini seçin.
  • Update tuşuna basın.
  • Save and continue tuşuna basın.
  • Şimdi Add users tuşuna basın.
  • gDrive uygulaması ile kullanacağınız Google mail adresini buraya yazın.
  • Bu ekran kapanana kadar Add tuşuna basın. (Muhtemelen 2 defa)
  • Save and continue tuşuna basın.
  • Yeniden sol taraftaki Credentials menüsüne tıklayın.
  • Üst taraftaki “Create credentials” butonuna basın ve “OAuth client ID” seçeneğini seçin.
  • Uygulama tipi olarak Desktop seçin ve bir isim verin.
  • Şimdi Create tuşuna basın.
  • Tam şu anda karşınıza bir pencere çıktı. Buradan “Cliend Id” ve “Client Secret” bilgilerini kopyalayın, lazım olacak.
  • OK tuşuna basıp bu pencereyi kapatın.
  • Sol taraftaki “OAuth consent screen” menüsüne tıklayın.
  • Publish app” tuşuna basın.
  • Gelen dialog penceresinde Confirm tuşuna basın.
  • Şimdi gdrive uygulamasını yüklediğimiz /usr/sbin klasörüne gidelim ve gdrive account add komutu ile kullanıcıyı uygulamaya ekleyelim. Bu komutu çalıştırdığınızda az önce kopyaladığınız Cliend Id ve Client Secret bilgisini girin. 
  • Bu komut sonucunda size bir link verilecek. Bu linki web tarayıcınıza yapıştırın, Google bu uygulamaya izin vermek isteyip istemediğinizi soracaktır. İzin verin ve bekleyin. Eğer sunucu üzerinden işlem yapıyorsanız sorun yok çünkü localhost:8085 şeklinde bir adrese yönleneceksiniz ve işlem tamamlanmış olacak. Ama benim gibi sunucuya remote olarak bağlanıyorsanız önce gdrive’ın  windows versiyonunu indirin, sonra kendi bilgisayarınızda gdrive account add komutunu kullanın ve aynı Client ID ve Client Secret ile uygulamaya izin verin, devamında üretilen linki tarayıcınıza girip izinleri verin, ardından gdrive account export <mail_adresiniz> komutu ile bu izin bilgisini export edin, üretilen dosyayı sunucunuza gdrive komutunun olduğu klasöre upload edin, sonrasında  gdrive account import <export_edilen_dosya_adi> komutu ile izin dosyasını import edin.
  • Kullanıcı ekleme işleminin başarılı olup olmadığına bakmak için gdrive account list komutunu kullanın. Bu listede eklediğiniz mail adresinizi görüyor olmanız lazım.
  • Artık ilgili Google hesabının Google Drive dosyalarına erişebilir, düzenleyebilir ve listeleyebilirsiniz.
  • Bunun için örneğin /usr/sbin/gdrive files upload –parent 098f6bcd4621d373cade4e832627b4f6 dosya_adi şeklindeki komut ile dosyanızı Google Drive’a upload edebilirsiniz. Burada dosya_adi parametresinden hemen önce gelen karışık rakamlar Google Drive’da ilgili klasörün ID’sidir. Bu ID’yi Google Drive’da browser ile gezinirken adres çubuğundaki URL’den alabilirisiniz. Bu ID’yi almanın bir yolu da gdrive’ı çalışır hale getirdikten sonra  gdrive files list komutunu kullanmaktır. Bu komut sunucunda gelen listede her bir klasörün ID’si bulunuyor olacaktır.

Linux’ta bir klasörü alt klasörleriyle birlikte sıkıştırmak

Linux’ta bir klasörü alt klasörleriyle birlikte sıkıştırmak için tar programını şu şekilde kullanabilirsiniz.

tar -czvf olusturulacakDosya.tar.gz klasor

Yukarıdaki tar dosyasına gördüğünüz üzere czvf parametreleri veriliyor.
c parametresi Create an Archive‘in kısaltması ve oluşturma komutunu vermiş olduk.
z parametresi ile bu sıkıştırmanın gzip kullanılarak yapılmasını söylemiş olduk.
v parametresi ile işlem sonuçların ekrana basılmasını söylüyoruz.
f parametresi ile dosya ismi yazacağımızı belirtiyoruz ve hemen devamında gördüğünüz gibi dosya ismini yazıyoruz.

Bu komut sayesinde klasor ismindeki klasörü olusturulacakDosya.tar.gz  isminde alt klasörleriyle beraber sıkıştırmış olduk.

Nedir bu REACT ?

React Nedir ve Ne ayaktır?

React bir JavaScript kütüphanesidir. React ile “kullanıcı arayüzleri” oluşturulur.
Yani React; bir yazılım projesinin backend tarafı ile değil, frontend tarafı ile ilgilidir.
Diğer bir anlatımla : React; bir yazılım projesinin server tarafındaki kodlarıyla değil, kullanıcıya görünen kısmıyla ilgilidir.)
React; ReactJS adıyla da bilinir ve Facebook tarafından geliştirilmiştir.

React ile single page yani tek sayfalı uygulamalar da geliştirilebilir. Ayrıca React Native ile mobil uygulamalar da geliştirilebilir. React’i bir çok büyük işletme kullanıyor. Örneğin Yahoo, Facebook, Instagram, NetFlix gibi.

JSX Nedir?

Bu kelime JavaScript Syntax eXtension teriminin kısaltmasından oluşur.
React içerisinde kullanılan JSX denilen yapı; HTML benzeri bir yazım şekli ile JS objeleri oluşturmamızı sağlar.

İşte karşınızda React içinde yazılmış basit bir JSX örneği 🙂

const element = <h1>Selam Dünya!</h1>;

Gördüğünüz gibi bir içerisinde Selam Dünya yazan bir <h1> etiketi oluşturduk ve onu element isimli değişkene atadık. Basit ve anlaşılır değil mi?

Laravel’de Component nedir ve nasıl kullanılır?

Bu yazımızda gelin Laravel’deki Component konusuna  bir bakalım.
Laravel’de Blade üzerinde sık tekrarladığımız şeyler olur.
Örneğin tüm CRUD işlemlerinde, işlem yapıldıktan hemen sonra, kullanıcıya işlemin sonucunu göstermek isteriz.
(İşleminiz başarılı şekilde kayıt edildi, Form’da hatalar bulundu vs. gibi)

Tüm CRUD işlemlerinde bu şablonu tekrarlıyorsak ve hemen hemen aynı şeyleri yapıyorsak neden onu bir Component haline getirmeyelim. İşte component’lerin asıl amacı da bu.
Component’ler Klasik PHP‘deki include komutuna benzer şekilde ancak işler, ancak daha yeteneklidirler ve parametre alabilirler.

Şimdi bu söylediklerimizi örnekler ile açıklayalım ama önce bir component oluşturalım.

 php artisan make:component Alert

Bu komut sayesinde Laravel bizim için 2 tane dosya oluşturulacak.
Birincisi app/View/Components klasöründe altında Alert.php isimli Class dosyasıdır. İçeriği de tam olarak şöyle :

<?php
namespace App\View\Components;
use Illuminate\View\Component;
class Alert extends Component
{
/**
* Create a new component instance.
*
* @return void
*/
public function __construct()
{
//
}

/**
* Get the view / contents that represent the component.
*
* @return \Illuminate\Contracts\View\View|\Closure|string
*/
public function render()
{
return view('components.alert');
}
}

İkinci dosya ise resources/views/component klasörü altında alert.blade.php ismindeki Blade dosyası.

İşte bu blade dosyası içerisine sık kullandığınız HTML/Blade kodlarını yazabilir ve istediğiniz Blade dosyası içerisinde kullanabilirsiniz.

Bunu kullanmak içinse tem yapmamız gereken ilgili yere <x-alert />şeklinde komut yazmak.
Dikkat ettiğiniz gibi, <x- yazdıktan hemen sonra component’in ismini (component’in class ismini) yazıyoruz.

alert.blade.php dosyasına istediğiniz kodu yazabilirsiniz. Bu kod <x-alert /> komutu görülen yerlere otomatik olarak enjekte edilecektir.

Ayrıca alert component’ine göndermek istediğiniz bir parametre olursa bunu da HTML attribute ile gönderebilirsiniz.

<x-alert type="error" :message="$message"/>

Bu örnekte type isminde bir parametreyi ve aynı zamanda  message isminde bir parametreyi component’e göndermiş olduk. type ismindeki parametreye “error” şeklinde bir string atadık.
message isimli parametreye ise $message ismindeki bir değişkeni atadık. Dikkat ederseniz değişken ataması yaparsan ilgili parametrenin hemen ömüne iki nokta üstüste işareti (:) koyuyoruz.

Şimdi de gönderdiğimiz bu değişkenleri component’in construct metodunda tanımlamalıyız.
Bu sayede component render edilince otomatik olarak view’a aktarılmış olacaktır.
Yani bu değişkenleri view’a göndermek için sizin ayrıca bir şey yapmanıza gerek yok.

<?php

namespace App\View\Components;

use Illuminate\View\Component;

class Alert extends Component
{

public $type;

public $message;


public function __construct($type, $message)
{
$this->type = $type;
$this->message = $message;
}

public function render()
{
return view('components.alert');
}
}

Gördüğünüz gibi; type ve message isminde 2 adet parametreyi component’e gönderdik.
Component‘in construct metodunda da bu 2 adet parametreyi tanımladık.

Şimdi component’inizin Blade’inin içinde şu şekilde bir kullanım ile bu parametrelere erişebilirsiniz..

<div class="alert alert-{{ $type }}">
{{$message}}
</div>

İşte bu kadar kolay 🙂

Laravel’de Many to Many ilişkilerde attach, detach ve sync komutlarına detaylı bir bakış

Bilindiği üzere Laravel’de modeller arasında kurulabilen 4 çeşit ilişki vardır.

1. One To One (Birden Bire)
2. One To Many (Birden çoğa)
3. Many To One (Çoktan Bire)
4. Many To Many (Çoktan Çoğa)

Diğer ilişki türlerini tahmin az çok edebiliyorsunuzdur, bizim burada duracağımız konu Many to Many özelinde attach, detach ve sync konusu olacak.

Öncelikle şunu açıklayalım : Many to Many ilişki nedir ?
Bir modeldeki bir çok kayıtın, diğer modeldeki bir çok kayıta ilişkisel anlamda bağlı olmasına Many To Many ilişki denir.

Evet, bunu anlamak için en iyisi bir örnekle açıklamak.
authors tablonuz olduğunu düşünün. Bu tabloda yazarlar bulunuyor.
books diye bir tablonuz daha olduğunu düşünün. Bu tabloda da kitaplar bulunuyor.
Bir yazar birden çok kitap yazmış olabilir.
Bir kitabın da birden çok yazarı olabilir.
İşte bu tür ilişkiler Many to Many ilişki olarak tanımlanır.

Many to Many ilişkiyi tanımlamak için ana tablolar olan authors ve books tablolarından ayrı olarak bir tane daha tabloya ihtiyacımız olur : author_book
Bu tablonun author_id ve book_id isimli 2 tane alana sahip olması yeterli.

İşte Book modelimiz.
Gördüğünüz gibi içerisinde authors isminde bir metod var ve ilişki belongsToMany olarak kurulmuş.

namespace App;
use Illuminate\Database\Eloquent\Model;
class Book extends Model
{

public function authors()
{
return $this->belongsToMany('App\Author');
}
}

İşte bu da Author modelimiz.
Gördüğünüz gibi içerisinde books isminde bir metod var ve ilişki belongsToMany olarak kurulmuş.

namespace App;
use Illuminate\Database\Eloquent\Model;

class Author extends Model

public function books()
{
return $this->belongsToMany('App\Book');
}
}

2 tablo arasında ilişkiyi kurduğumuza göre bir kitabın yazarlarını şu şekilde kolayca çekebiliriz.

$book = App\Book::find(1);
foreach ($book->authors as $author) {
dd($author->name);
}

Gelelim esas konumuza 🙂
Laravel bu ilişkileri birbirine bağlamak, koparmak ya da senkronize etmek için 3 yardımcı sunuyor:
attach, detach ve sync

Önce attach’a bakalım

$authorId=2;
$book = App\Book::find(1);
$book->authors()->attach($authorId);

Gördüğünüz gibi 1 nolu kitaba, 2 nolu yazarı atamış (attach etmiş) olduk.

Şimdi de detach

Bir kitaba atanmış bir yazarın ilişkini koparabilir yani o yazarı ilgili kitabın yazarlığından çıkartabiliriz.

$authorId=5;
$book->authors()->detach($authorId);

Yukarıdaki kod sayesinde 5 nolu yazarı, ilgili kitaptan çıkartmış (detach etmiş), ilişkisini koparmış olduk.

Eğer bir kitaptan bir kaç yazarın ilişkisini koparmak isterseniz detach metoduna parametre olarak bir kaç id verebilirsiniz.

$book->authors()->detach(1,5,7,11) gibi.

Ayrıca bir kitaptaki tüm yazarların ilişkisini koparmak istiyorsanız bu defa $book->authors()->detach(); şeklinde detach’a parametre vermeden bunu gerçekleştirebilirsiniz.

Ve son olarak sync

sync metodu ise verilen ilişkiler dışındaki ilişkileri koparır ve verilen ilişkilerin kalmasını sağlar.

Örneğin $book->authors()->sync([5, 10, 15]); şeklinde bir kod ile 5, 10, 15 nolu id’ler dışındakiler silinir ve sadece 5, 10, 15 nolu id’lerin ilişkisi kalır.

Linux üzerinden Google Drive’a Komut Satırından Upload yapmak

Linux; harici bir program kullanmadan henüz Google Drive‘a dosya yükleme olanağına sahip değil.
Ancak https://github.com/prasmussen/gdrive adresindeki program ile bunu başarabiliriz.

Öncelikle gdrive dosyasını indirelim.

wget -O drive https://drive.google.com/uc?id=0B3X9GlR6EmbnMHBMVWtKaEZXdDg

Devamında indirdiğimiz dosyayı uygun bir klasöre taşıyalım.

mv drive /usr/sbin/drive

Bu dosyaya çalışma izni verelim.

chmod +x /usr/sbin/drive

Şimdi şu komutla bir dosyayı Google Drive’a yükleyebiliriz.

/usr/sbin/drive upload --parent 1u0JfLgxjvfGkJJnsIesHVI6zw3YIRnw --file dosyaadi.txt

Yukarıdaki komutta 1u0JfLgxjvfGkJJnsIesHVI6zw3YIRnw ifadesi Google Drive’daki klasörün ID’sidir.
Bu ID’yi elde etmek için, Google Drive’a web üzerinde erişip, ilgili klasörü açabilir ve URL’den klasörün ID’sini alabilirsiniz.

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.

Linux’ta bir klasörü alt klasörleriyle birlikte sıkıştırmak

Linux’ta bir klasörü alt klasörleriyle birlikte sıkıştırmak için tar programını şu şekilde kullanabilirsiniz.

tar -czvf olusturulacakDosya.tar.gz klasor

Yukarıdaki tar dosyasına gördüğünüz üzere czvf parametreleri veriliyor.
c parametresi ile oluşturma komutunu vermiş olduk.
z parametresi ile bu sıkıştırmanın gzip kullanılarak yapılmasını söylemiş olduk.
v parametresi ile işlem sonuçların ekrana basılmasını söylüyoruz.
f parametresi ile dosya ismi yazacağımızı belirtiyoruz ve hemen devamında gördüğünüz gibi dosya ismini yazıyoruz.

Bu komut sayesinde klasor ismindeki klasörü olusturulacakDosya.tar.gz  isminde alt klasörleriyle beraber sıkıştırmış 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.

Laravel’de Layout sistemi nedir?

Dikkat ettiğiniz üzere; bir çok web uygulaması genelde aynı düzeni kullanır.
Çoğu web uygulamasının genellikle bir menüsü, üst bölümü, alt bölümü, içerik bölümü vs. gibi benzer bölümleri bulunur.

Bir web uygulaması geliştirdiğinizi düşünün.
Bu uygulamanın her sayfasında aynı HTML kodlarını, aynı Javascript kodlarını tekrarladığınızı düşünün. Bu durum hiç iyi olmazdı ve muhtemelen sizi kod yazdığınıza pişman ederdi.

İşte tam da bu noktada Laravel bey, size bir imkan sunuyor : Layout Sistemi.

Web uygulamanızın düzenini bir Blade bileşeni olarak tanımlayabilir ve onu kolayca her sayfanızda kullanabilirsiniz.

Şimdi Şablon Devralma yöntemi ile Layout oluşturmaya bir göz atalım.

<!-- resources/views/app.blade.php -->

<html>
<head>
<title>Uygulamamızın Adı - @yield('baslik')</title>
</head>
<body>

<div class="container">
@yield('icerik')
</div>
</body>
</html>

Yukarıdaki bulunan koda dikkat edin.
@yield(‘baslik’) ile bu komutun tam olarak bulunduğu yere başlığın geleceğini anlatmış oluyoruz.
Aynı şekilde @yield(‘icerik’) komutu ile de buraya içeriğin geleceğini anlatıyoruz.

Şimdi bir alt görünüm tanımlayalım ve yukarıdaki şablonu devralarak kullanalım.

@extends('app')
@section('baslik', 'Bu bir sayfa başlığıdır')
@section('content')
<p>İşte burası da içerik bölümü</p>
@endsection

@extends(‘app’) komutuyla app isimli layout‘u kullanacağımızı belirtiyoruz.
@section(‘baslik’, ‘Bu bir sayfa başlığıdır’) komutu ile layout’ta bulunan ilgili yere bu bilginin yazılmasını sağlıyoruz.

@section(‘icerik’),
<p>İşte burası da içerik bölümü</p>
@endsection

komutlarıyla da icerik bölümüne bu bilginin yazılmasını sağladık.

Böylece oluşturacağımız herhangi bir sayfada, artık app isimli layout‘u kullanabilir ve tekrarlardan kurtulabiliriz.

Laravel’de Controller nedir ve nasıl oluşturulur?

Laravel‘de isterseniz tüm komutlarınızı web.php yani Route dosyanıza da yazabilirsiniz ancak bu efektif bir yöntem olmayacaktır. Aynı zamanda bu şekilde yapılması MVC yapısına da aykırıdır.
Laravel‘de işlemlerinizi Controller ismi verilen yapılarda gerçekleştirmelisiniz.
Controller dosyaları gerçekte birer text dosyalarıdır ve bir Controller dosyasının yapısı yaklaşık olarak şu şekildedir.

<?php
namespace App\Http\Controllers;
use App\Models\User;
class UserController extends Controller
{

public function show()
{
   return view('profil',['isim='YAZILIMCI.ORG']);
}

}

Gördüğünüz gibi bu Controller‘ın içerisinde show isminde bir fonksiyon bulunuyor. Bu fonksiyon profil isimli View‘i çağırıyor ve ona isim şeklinde bir parametre aktarıyor.

Controller dosyaları Laravel’de app/Http/Controllers klasöründe bulunur. İsterseniz bu dosyayı kendiniz de oluşturabilirsiniz ancak Laravel bunun için bir Artisan komutuna sahip. Dolayısı ile bu komutu kullanarak Controller’ınızı oluşturabilirsiniz. Haydi UserController isminde bir Controller oluşturalım.

php artisan make:controller UserController

Bildiğiniz üzere Laravel’de Controller yapısı “genellikle” şunlar için kullanılıyor.

Veritabanındaki kayıtları listelemek (index)
Veritabanındaki bir kayıtı göstermek (show)
Yeni kayıt oluşturma formunu göstermek (create)
Doldurulan yeni kayıt formunu veritabanına saklamak (store)
Kayıt düzenleme formunu göstermek (edit)
Doldurulan kayıt düzenleme formunu veritabanına saklamak (update)
Bir kayıtı silmek (destroy)

İşte bu gereksinimlerden dolayı Laravel bizlere Controller oluştururken bu metodları otomatik oluşturma seçeneği de sunuyor. Bu sayede index, show, create, store, edit, update, destroy metodları oluşturulan Controller’ın içinde otomatik olarak eklenmiş halde geliyor. Bunu yapmak için Controller oluşturma kodunun yanına –resource kelimesini eklemek yeterli.

php artisan make:controller UserController --resource

Bu komut çalıştırıldıktan sonra oluşan UserController dosyamızın içeriği tam da şu şekilde olacaktır.

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class UserController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        //
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //
    }
}

Bu dosyanın içerisinde index, create, show, edit, update, store, destroy gibi metodların otomatik olarak oluşturulduğuna dikkat ettiniz değil mi?

Artık kodlarınızı bu metodlar (fonksiyonlar) içerisine yazabilirsiniz.

index metodunda tüm kayıtları listeleyeceğiniz view’i gösterebilirsiniz.
create metodunda yeni kayıt oluşturma formunun bulunduğu view’i gösterebilirsiniz.
store metodunda yeni kayıt formundan $request ile gelen bilgileri veritabanına kayıt edebilirsiniz.
show metodunda gelen id değerini kullanarak ilgili kayıtı çekebilir ve kayıt gösteren view’inizi gösterebilirsiniz.
edit metodunda kayıt düzenleme formunun bulunduğu view’i gösterebilirsiniz.
update metodunda kayıt düzenleme formundan $request ile gelen bilgileri veritabanına update yapabilirsiniz.
destroy metodu ile de id’si $request ile gelen kayıtı silebilirsiniz.

Peki bu şekilde resource olarak oluşturduğunuz Controller için Route tanımını nasıl yapmalısınız?
O daha da basit. web.php dosyanızda şu şekilde bir tanım yapabilirsiniz.

Route::resource('users', UserController::class);

Bu şekildeki tanımınız sonucunda artık şöyle URL’lere yanıt verilecektir.

/users adresine GET yapılırsa index metodu çalışır.
/users/create adresine GET yapılırsa create metodu çalışır.
/users/ adresine POST yapılırsa store metodu çalışır.
/users/{id} adresine GET yapılırsa show metodu çalışır.
/users/{id}/edit adresine GET yapılırsa edit metodu çalışır.
/users adresine PUT/PATCH yapılırsa update metodu çalışır.
/users{id} adresine DELETE yapılırsa destroy metodu çalışır.

Ayrıca bu Route’lar otomatik olarak isimlendirilmiş olacaktır.
Bu sayede örneğin create URL’sini örneğin View’ınızda elde etmek için

{{route('users.store')}}

komutunu kullanabilirsiniz.

Aynı şekilde Resource ile otomatik oluşturulan Users Route’unun diğer fonksiyonlar için isimleri şöyledir.

users.index
users.create
users.store
user.store
users.show
users.edit
users.update
users.destroy

 

Laravel Route işlemleri nasıl yapılır?

Kısaca; Laravel’de hangi URL’ye girilince ne yapılacağını belirten yapıya Route denir.
Temel Route işlemleri routes klasöründeki web.php dosyasında belirtilir.

Şimdi detaylara takılmadan bunlara bir göz atalım 🙂

localhost:8000/merhaba adresine girilince geriye direkt olarak bir yazı döndürmek isteyelim. İşte bu kadar basit.

Route::get('/merhaba', function () {
return 'Merhaba Dünya';
});

Peki bu defa localhost:8000/user adresine girilince, UserController isimli Controller‘ımızdaki index fonksiyonunu çalıştıralım.

use App\Http\Controllers\UserController;
Route::get('/user', [UserController::class, 'index']);

Şimdi de localhost:8000/iletisim adresine girilince localhost:8000/bize-ulasin adresine otomatik yönlendirme sağlayalım.

Route::redirect('/iletisim', '/bize-ulasin');

Ayrıca localhost:8000/anasayfa adresine girilince index isimli View şablonumuzu da çağırabiliriz. O da şöyle :

Route::view('/anasayfa', 'index');

Çağırdığımız View‘e bir değişkeni parametre olarak da geçebiliriz. Böylece View‘ın içinde o değişkeni kullanabilirsiniz. Örneğin localhost:8000/hakkimizda adresine girilince aboutUs isimli View‘i gösterelim ve ona isim değişkenini gönderelim.

Route::view('/hakkimizda', 'aboutUs', ['isim' => 'yazilimci.org']);

Peki ya parametre içeren bir URL’miz varsa? İşte onu da şöyle tanımlarız.

localhost:8000/kullanici/117 şeklindeki URL’yi tanımlayıp ve id değişkenini parametre olarak alalım.

Route::get('/kullanici/{id}', function ($id) {
return 'Kullanıcı ID : '.$id;
});

URL’deki parametre sayısı birden fazla da olabilir. Örneğin 2 parametreli bir URL’yi de şu şekilde tanımlarız.

Route::get('/haberler/{haber}/yorumlar/{yorum}', function ($haberId, $yorumId) {
//Burada $haberId ve $yorumId değişkenlerini kullanabiliriz.
});

Yanına ? işareti konulan parametre opsiyonel olur. isim parametresi girilmezse bu örnekte değeri null olur.

Route::get('/kullanici/{isim?}', function ($isim = null) {
return $isim;
});

Eğer istersek tanımladığımız Route’a bir isim de verebiliriz. Bu sayede bu route’un yolunu View’lerde kullanabiliriz.

Route::get(
'/kullanici/profil',
[UserProfileController::class, 'show']
)->name('profil');

İsimlendirmiş olduğumuz Route tanımını kullanarak URL oluşturabiliriz. İşte böyle 🙂

$url = route('profil');

Şimdi bir de Controller’da bu isimlendirilmiş Route’a yönlendirme yapalım.

return redirect()->route('profil');

Laravel’de Route işlemleri gözümüzde büyütülmeyecek kadar basit sayılabilir bir konudur.
Yeterli sayıda uygulama ile siz de Route işlemlerinizi kolayca yapabilir hale gelirsiniz.

 

 

Laravel nasıl kurulur ve ilk proje nasıl oluşturulur?

Laravel nasıl kurulur diye düşününce aklımıza uzun kurulum videoları geliyordur.
Ancak Laravel‘in kurulumu ve ilk projenin oluşturulması oldukça basittir.
Detay anlatımları girmeden, kısaca özetlemek gerekirse Laravel’i şu bir kaç adımla kolayca kurabilirsiniz.
Hadi başlayalım.

1. Önce Composer’ı kurun.

Composer, bir paket yönetim sistemi programıdır.
Yani anlaşılır olarak söylemek gerekirse bir uygulama kurulurken, ona bağlı yan uygulamaların da kurulabilmesini sağlar.
Şimdi https://getcomposer.org adresine tıklayın ve Composer‘ı Windows bilgisayarınıza kurun. Bir kaç Next ile bu iş kolayca yapılabilir.
Böylece Laravel nasıl kurulur diye düşünürken, ilk adımı tamamlamış oldunuz bile 🙂

2. Eğer bilgisayarınızda PHP yoksa WAMP kurun.

Laravel ile çalışmak için bilgisayarınızda PHP olmalıdır. Kolay olması amacıyla WAMP programını https://www.wampserver.com/en/ adresinden bilgisayara kurabilirsiniz.
Bu sayede bilgisayarınızda Apache isminde bir web sunucu programı, MYSQL isminde bir veritabanı yönetim sistemi ve PHP kurulmuş olacaktır.

3. Composer ile ilk projenizi oluşturun.

Composer bir komut satırı programıdır. O nedenle Başlat’a tıklayıp, CMD yazıp, Enter’a basın ve aşağıdaki komutu çalıştırın.

composer create-project laravel/laravel benimProjem

Bu komut, bulunduğunuz klasörde benimProjem isminde bir klasör oluşturacak, Laravel‘i kuracak ve benimProjem ismindeki projeyi de oluşturmuş olacaktır.
Gördüğünüz gibi sadece bir komut ile hem Laravel’i bilgisayarınızdaki benimProjem klasörüne kurmuş oldunuz, hem de projeyi oluşturmuş oldunuz.

4. Projenizi çalıştırın

Oluşturulan projenizi çalıştırmak için, benimProjem klasörüne cd benimProjem komutu ile geçin ve aşağıdaki komutu çalıştırarak web sunucusunu başlatın.
Bu web sunucusu Laravel tarafından sağlanan bir web sunucusudur. Bunu başlatmak için Artisan Komutları denilen komutlar kullanılır.
Zannediyoruz Laravel çalışmalarınız boyunca sık sık kullacağınız komutlardan birisi de aşağıdaki komut olacaktır.

php artisan serve

Uygulama Server’ınız artık çalıştığını göre, projenize şu adresten ulaşabilirsiniz.
Elbette, bu projeniz şu an için bir iş yapmıyor.
Bu projede Laravel’in size örnek olması amacıyla oluşturmuş olduğu bir Welcome sayfası bulunuyor.
Ama yine de ilk Laravel deneyiminiz olduğundan dolayı sizin için büyük bir adım.
Tebrikler 🙂

http://localhost:8000/

 

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)

PHP ile Türkçe karakterler nasıl değiştirilir?

Daha doğrusu, elinizde bulunan bir STRING ifadeyi sadece ingiliz alfabesindeki karakterleri içerecek şekilde değiştirme nasıl yapılır?
Bu sayede ingiliz alfabesi dışındaki tüm karakterler belirlediğiniz karakter ile değiştirilecektir.
Türkçe’ye özgü karakterleri değiştirmek için şu aşağıdaki fonksiyonu kullanabilirsiniz.

function replace_tr($text) {
$text = trim($text);
$search = array(‘Ç’,’ç’,’Ğ’,’ğ’,’ı’,’İ’,’Ö’,’ö’,’Ş’,’ş’,’Ü’,’ü’,’ ‘);
$replace = array(‘C’,’c’,’G’,’g’,’i’,’I’,’O’,’o’,’S’,’s’,’U’,’u’,’_’);
$new_text = str_replace($search,$replace,$text);
return $new_text;
}

Bu fonksiyon Ç harfini C ile, Ğ harfini G ile vs. değiştirir …

Ayrıca eğer bir string ifadesi içinde, İngiliz alfabesinde olmayan tüm karakterleri değiştirmek isterseniz ;

$cumle=(‘/&%+^’!^+%&/(%+DENEME(/&%+^’+%&/’
$cumle = preg_replace(‘/[^a-z0-9_ ]/i’, ”, $cumle);

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

Plesk sunucuda mail şifrelerini listelemek

Mail şifrelerinin güçlü olması önemli bir husustur.
Yoksa brute force yöntemi ile şifre denemeleri yapan kişiler başarıya ulaşırlar ve onların başarıya ulaşması hiç iyi değildir.
Bu nedenle Plesk kurulu bir Linux sunucuda

/usr/local/psa/admin/bin/mail_auth_view

komutunu kullanarak mail şifrelerini listeleyebilir ve zayıf olan şifreleri güçlü olanlarla değiştirebilirsiniz.
Ancak derseniz ki ben sadece belirli bir domaine ait olan maillerin şifrelerini listelemek istiyorum; o halde şöyle bişey kullananabilirsiniz :

/usr/local/psa/admin/bin/mail_auth_view | grep yazilimci.org

Yok ben onu demiyorum, sadece bir tek mailin şifresini görmek istiyorum derseniz;

/usr/local/psa/bin/mail –info info@yazilimci.org

komutunu kullanabilirsiniz.

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.

Laravel’de isimlendirme kuralları

Laravel’de de, diğer dillerde olduğu gibi istediğiniz şeye istediğiniz ismi verebilirsiniz.
Ancak sizden sonra gelecek programcıların kodunuzu anlayabilmeleri gerekir. Ayrıca siz de kodunuzu yazdıktan bir zaman sonra kodunuzu kolayca okuyabilmesi gerekir.
Bu nedenle Laravel’deki isimlendirme kurallarına uymak gerekir. Gelin bu kurallara hızlıca göz atalım.

LARAVEL’DE CONTROLLER İSİMLERİ NASIL OLMALI ?
Controller isimleri TEKİL olmalı, sonunda Controller kelimesi olmalı, kelimeler arasında boşluk olmamalı ve tüm kelimeler büyük harfle başlamalı.

Örneklerle daha kolay anlayacağız 🙂

Doğru kullanım : CustomerController
Doğru kullanım : InvoiceController
Doğru kullanım : CityController
Doğru kullanım : UserController

Yanlış kullanım : CustomersController (çoğul kullanılmamalıydı)
Yanlış kullanım : Invoice (Controller kelimesi ile bitmeliydi)

LARAVEL’DE VERİTABANI TABLO İSİMLERİ NASIL OLMALI ?
Tamamı küçük harflerle yazılmalı, her bir kelimenin arasına alt çizgi ( _ ) konulmalı ve çoğul olmalı.
Doğru kullanım : invoices
Doğru kullanım : invoice_lines
Doğru kullanım : post_comments

Yanlış kullanım : all_invoice (all kelimesine gerek yoktu)
Yanlış kullanım : Customers (tüm harfler küçük harf olmalı)
Yanlış kullanım : postComments (her bir kelime arada alt çizgi ile bölünmeliydi ve tüm harfler küçük harf olmalıydı)

LARAVEL’DE VERİTABANI TABLOLARINDAKİ ALAN  İSİMLERİ  NASIL OLMALI ?

Alan isimlerinin tamamı küçük harflerle yazılmalı, kelime aralarında alt çizgi ( _ ) olmalı. Ayrıca alan isimlerinde tablo ismi kullanılmamalı.

Doğru kullanım : id, content
Doğru kullanım : created_at
Doğru kullanım : image_name

Yanlış kullanım : posts_id (alan isminin başında posts tablosuna referans verilmiş)
Yanlış kullanım : postId (Camel Case kullanılmış, oysa Snake Case kullanılmalıydı)
Yanlış kullanım : forum_title (alan isminin başında forum tablosuna referans verilmiş)

Laravel’de formlar içerisinde OLD yardımcısının kullanımı

Uzunca bir formu doldurup Gönder tuşuna bastığınız ve form alanlarından birini doldurmayı unuttuğunuz için formu sil baştan yeniden doldurduğunuz oldu mu hiç ?
Normal koşullarda bir Form gönderildikten sonra, eğer formda bir eksiklik veya hata varsa formun kullanıcının önüne dolu haliyle gelmesi gerekir ki kullanıcı o bilgileri yeniden doldurmak zorunda kalmasın.

Laravel’de Form’a “bir önceki post işleminde” girilen bilgileri almak için “old” yardımcısını kullanın.
Aşağıdaki kodda görüldüğü üzere, input elementinin value özelliğinde şöyle bir kod var :

{{old('mobile_phone',$data->mobile_phone)}}

Yukarıdaki kod ile bir önceki post edilen form’daki eski mobile_phone değişkenini yazar.
İkinci parametre ile eğer form daha önceden post edilmemişse, yani mobile_phone değeri boş ise data->mobile_phone ile veritabanında bulunan değer yazdırılır.

Bir daha açıklamak gerekirse; aşağıdaki kodda şunu söylemiş oluyoruz :
Input elementinin value özelliğine; post edilen mobile_phone değerini yaz, eğer post edilen bilgi yok ise, veritabanından gelen mobile_phone değerini yaz.

<p><input maxlength="10" name="mobile_phone" type="tel" value="{{old('mobile_phone',$data->;mobile_phone)}}" /></p>