Saturday, 16 August 2014

OS X Finder Genişliği


Uzun zamandır zahmet çekiyorum, finder'ın "as Columns" seçeneği ile dosyaları listeliyorum. Fakat gel gelelim varsayılan genişlik bana çok dar geliyor. İstediğim gibi rahat rahat dosyaları göremiyorum.

Nihayet aklıma geldi de araştırdım, nasıl değiştirebilirim diye.

Pek basitmiş.


  • Yeni bir finder penceresi açın.
  • Option tuşuna basılı olarak genişliği arttırın. 
  • Finder penceresini kapatın ve yeniden açın. 
Hepsi bu kadar. 



Tuesday, 10 December 2013

Git Projemizi Apache ile Yönetelim (OSX)

Arayış

github veya başka bir sunucu kullanmak istemiyorum, ihtiyacım o ölçüde değil ama iki üç kişi projemizi de yönetelim istiyorum. Yani git'i local olarak kullanmak işimi çözmüyor. SSH ile yönetim de hoşuma gitmiyor, yok işletim sistemi üzerinde kullanıcı yaratmalar, falanlar, filanlar. Araştırdım, aradım, taradım bilgiyi http://www.pkgbox.org/wordpress/2011/08/setting-up-a-git-server-on-macos-x-lion/ burada buldum. Fakat şimdi baktım, bu yazı da yerinde yok. Neyse ben bilgileri kurtardım. Özetle apache server ile git projelerimizi yönetebileceğiz.

Bir Kereye Mahsus

apache server OS X üzerinde zaten kurulu geliyor. Yani ohhhh mis.

htpasswd Dosyası

git projelerimize erişim için kullanıcılar kullanacağız, bunun için bir adet kullanıcı şifreleri dosyası lazım olacak, oluşturalım: 

sudo touch /etc/apache2/other/htpasswd-git

Kullanıcı Grup Dosyası

Kullanıcı gruplarımız için de bir dosyaya ihtiyacımız olacak, onu da oluşturalım: 

sudo touch /etc/apache2/other/htgroup-git

DavLock

git projelerimizi sadece okumayacağız, ayrıca yazma da yapacağız, bunun için DavLock sistemi kullanılacak, onun için aşağıdaki komutları çalıştırmalıyız: 

sudo mkdir -p /var/www/DavLock
sudo chown _www:_www /var/www/DavLock

İlk satırda klasör yaratıyoruz, ikinci satırda klasörün haklarını veriyoruz. 

Apache Config Dosyası

Apache'nin git projelerimizi anlamasını sağlamamız için de bir dosyaya ihtiyacımız var. Haydi, onu da yaratalım:

sudo touch /etc/apache2/other/gitrepo.conf

Sonra bu dosyanın içine ilk tanımlamamızı yapmamız gerekiyor. Ben projelerimi

/Library/WebServer/Documents/repo

altında tutuyorum. Dolayısı ile repo klasörü için bir tanımlama yapmam gerekli, ayrıca DavLock sistemi için de bir satır ekliyoruz: (Bu arada ben vim kullanıyorum, siz elbette istediğiniz text editörü kullanmakta özgürsünüz, yani istediğiniz sorudan başlayabilirsiniz)

DavLockDB "/var/www/DavLock/Lock"
  
  <Directory /Library/WebServer/Documents/repo>
      DAV On
      Deny from all
      AuthType Basic
      AuthName "Area51 git repositories"
      AuthUserFile /etc/apache2/other/htpasswd-git
      AuthGroupFile /etc/apache2/other/htgroup-git
  </Directory>

Bir Aşamanın Sonu

Evet, bir kereye mahsus yaptığımız işlemlerimiz bitti. Ancak işletim sistemini yeniden kurarsanız falan apache'yi yeniden yapılandırmanız gerekecektir, o zaman bu aşamayı tekrar yaparsınız. Artık gelelim git projemizi oluşturmaya :)

git Projemizi Yaratalım

Proje klasörünü yaratıyoruz. Örnek proje ismi olarak myproject kullanıyorum.

cd /Library/WebServer/Documents/
sudo mkdir -p repo/myproject.git

Git ile projeyi oluşturuyoruz:

cd repo/myproject.git/
sudo git init --bare

Şu anda projemiz oluştu. Fakat bu hali ile web server üzerinden sadece okuma yapabilir durumda. Biz server üzerinden yazma da yapmak istiyoruz. Yani commit yapacağız, push yapacağız v.b.. Bunun için post-update hook özelliğini açmamız gerekiyor. 

sudo mv hooks/post-update.sample hooks/post-update 
sudo chown -R _www:_www /Library/WebServer/Documents/repo/myproject.git 
sudo -u _www hooks/post-update 

Sadece okuma yapabilecek ve hem okuma hem de yazma yapabilecek iki kullanıcı yaratıyoruz.

sudo htpasswd /etc/apache2/other/htpasswd-git just_read
sudo htpasswd /etc/apache2/other/htpasswd-git read_and_write

Kullanıcı grubu dosyamıza da kim sadece okuma yapacak, kim hem okuma hem yazma yapacak belirtiryoruz.

sudo vim /etc/apache2/other/htgroup-git

dosyayı açtık içine aşağıdaki satırları ekleyelim:

myproject-reader:just_read read_and_write
myproject-writer:read_and_write

Geldik Apache configuration ayarlarını yapmaya.

sudo vim /etc/apache2/other/gitrepo.conf 

Dosyayı açtık, şimdi içine projemiz için gereken satırları ekliyoruz:
  
<Directory /Library/WebServer/Documents/repo/myproject.git>
    Allow from all
    Order allow,deny
    <Limit GET>
        Require group myproject-reader
    </Limit>
    <Limit GET PUT POST DELETE PROPPATCH MKCOL COPY MOVE LOCK UNLOCK>
        Require group myproject-writer
    </Limit>
</Directory>

İşlemlerimiz bitti. Şimdi Apache'yi yeniden başlatabiliriz. Öncelikle System Preferences altından Sharing kısmına gidip Web Sharing'in seçili olduğundan emin oluyoruz. Daha sonra

sudo apachectl restart 

komutu ile Apache'yi yeniden başlatıyoruz. Artık sistemimiz kullanıma hazır.  İstemci tarafına gidelim.

git clone http://read_and_write@localhost/repo/myproject.git

Tahmın edersiniz localhost yerine makine ismi (mesela osman.local) veya ip adresi gelebilir.

Mutlu Kodlamalar :)


Not: Ben bu yazıyı uzun zaman önce yazmıştım ama yayınlamamıştım, şimdi baĞzı değişiklikler yaptım ve tahmin edersiniz test edemedim, bir terslik olursa lütfen küfür etmeyin, buraya yazın, hallederiz :)

Volkan Özyılmaz

Tuesday, 9 April 2013

Dll Dosyanızı Yüklerken


Dll dosyasının Windows tarafından otomatik aranmasını istemiyorsanız ve yükleyeceğiniz dll dosyanızın yolunu vererek yüklemek istiyorsanız (bu ihtiyaç dll dosyasını izole etmek veya Dll Hell denilen versiyonlama farkları hatalarına düşmemek için olabilir) iki tane çözüm yolunuz var.

1- Eğer dll dosyasını bir exe içerisinden çağırıyorsanız .local dosyasını kullanabilirsiniz.

Örneğin do_things.exe çalıştırılabilir dosyanız ve other_things.dll de dinamik kütüphaneniz olsun. Şimdi aşağıdaki isimde bir dosya yaratın ve do_things.exe dosyası ile aynı klasöre kopyalayın.

do_things.exe.local 

Ayrıca other_things.dll dosyasını da aynı klasöre kopyalayın. Klasör içerisinde

do_things.exe
do_things.exe.local (boş bir dosya, içeriği yok)
other_things.dll

dosyaları mevcut olsun. Artık Windows .local dosyasını gördüğü için ilk olarak other_things.dll dosyasını do_things.exe dosyası ile aynı yolda arayacak, bulacak ve yükleyecektir.

Bu güzel bir yöntemdi fakat bazı durumlarda işimizi çözmeyebilir. Örneğin yüklemek istediğimiz dll dosyasını başka bir dll dosyasından yüklemek istiyorsak ve o başka dll dosyası da exe dosyası ile aynı yolda değilse ve olacağının bir garantisi yoksa .local dosyası işimizi çözmüyor demektir.

2- Delay Load Dll: Böyle bir durumda insanın aklına şu gelyor, keşke LoadLibrary ile kendim yüklesem ama GetProcAddress ile yapılması gereken işleri yapmasam!

Evet bu mümkün. Tek yapmanız gereken Visual C++ içerisinden

Project Properties --> Linker --> Input 

altında bulunan Delay Loaded Dlls seçeneğine dll dosyasının ismini vermek. Ardından kod içinde münasip bir yere LoadLibrary satırını eklemek. Hepsi bu!

Bu yöntem ile dll dosyanızı istediğiniz zaman, istediğiniz yerden yükleyebilirsiniz.

Volkan Özyılmaz

Friday, 1 February 2013

FTP ile Büyük Dosyaları Rahatça Sunucuya Yükleyin


FTP ile büyük dosyalarınızı sunucuya yüklerken problemler yaşıyor olmak normaldir. Dosyanın boyutu büyüdükçe birden çok oturumda atmak isteyebilirsiniz.

Ama paylaşımlı hosting kullanıyorsanız, yani aynı makinede çok fazla kişinin web sitesi varsa bir çok kısıt sizi bekliyor demektir.

Bu kısıtlardan en önemlisi istediğiniz programı sunucuya kuramazsınız. Örneğin dosyaları ayıran ve birleştiren bir programı paylaşımlı sunucuya kuramazsınız.

İhtyacımız olan şey büyük dosyamızı parçalara ayırıp sunucuya yükledikten sonra sunucu üzerinde tekrardan birleştirmek.

Çözüm: Eğer paylaşımlı sunucunuz bir Linux sunucusu ise, sunucuya ssh ile bağlanabiliyorsanız,  sunucu üzerinde gzip, gunzip, split ve cat komutları çalışıyorsa dosyalarınızı rahatça parçalayıp tekrar birleştirebiliriz.

Önce kendi makinenizde:

gzip -c buyuk_dosya | split -b 10m - buyuk_dosya_split.gz_

komutunu buyuk boyutlu dosyanızın bulunduğu klasörde çalıştırın. buyuk_dosya ismini kendi dosya isminiz ile değiştirin. Artık elinizde 10 MB boyunda bir çok dosya var.

Bu dosyaları ftp ile sunucuya aktarın. Dosyalar tek tek aktarılacakları için istediğiniz zaman yükleme işlemine ara verebilirsiniz.

Aktarım bittikten sonra ssh ile sunucunuza bağlanın ve aktarmış olduğunuz dosyaların bulunduğu klasöre gidin. Artık dosyaları birleştirme vakti geldi. Bunun için aşağıdaki komutu kullanabilirsiniz.

cat buyuk_dosya_split.gz_* | gunzip -c > buyuk_dosya

Biraz bekledikten sonra dosyanız sunucuda tek parça halinde duruyor olacak.

Küçük parçalar halinde duran dosyaları sunucu üzerinden silmeyi unutmayın :)

rm buyuk_dosya_split.gz_*


Volkan Özyılmaz


Tuesday, 25 December 2012

dylib install_name Göreceli Yol Çözümü


Mac OS X sisteminde dylib dosyaları oluştururken Windows sistemlerinden alışık olmadığımız install_name parametresi hayatımızı zorlaştırıyor.

install_name parametresi dylib dosyasının nerede duracağını derleme aşamasında bize soruyor. Dolayısı ile belirli bir yol vermeniz gerekiyor. dylib dosyasını başka bir yola taşırsanız çalışmıyor.

Örneğin eğer install_name parametresini "/Library/Application Support/YourCompanyName/mydynamic.dylib" şeklinde vermişseniz dosya burada bulunmak zorunda.

Eğer dylib dosyanızı göreceli olarak çalıştırmak istiyorsanız @executable_path özel sözcüğü yardımımıza koşuyor. Örneğin benim executable dosyam neredeyse onun altında libs klasörü altında bulunsun istiyorsanız install_name parametresini şöyle vermeniz yeterli olur:

install_name = "@executable_path/libs/mydynamic.dylib"

Bu ayarı Xcode projenizde ilgili target seçildikten sonra Linking altında Dynamic Library Install Name parametresini değiştirerek yapabilirsiniz. 

install_name parametresini yukarıdaki gibi verdikten sonra çalıştırılabilir dosyanızla beraber dinamik dosyanızı istediğiniz gibi taşıyabilirsiniz. 

Yukarıdaki örnek için konuşacak olursak, dikkat etmeniz gereken çalıştırılabilir dosyanızın bulunduğu klasörün altında libs diye bir klasör olması ve libs klasörü içerisinde mydynamic.dylib dosyası bulunmasıdır. 

Mutlu Kodlamalar!

Volkan Özyılmaz

Tuesday, 6 November 2012

Xcode Projesini Komut Satırından Derlemek


Komut satırından mevcuttaki Xcode projesini derlemek istiyorsanız aşağıdaki gibi kullanabilirsiniz.

xcodebuild -project ~/Projects/Proj_Name/Proj_Name.xcodeproj -alltargets

Neden böyle bir şey yapayım diyorsanız, kaynak kodları vim ile bazen düzenlemek isteyebiliyor insan, işte o anlarda Xcode'u açmadan derleme işlemini yapmak güzel olabiliyor :) 

Volkan Özyılmaz

Wednesday, 23 May 2012

Ubuntu Üzerinde Apache Hatası "Could not reliably determine the server’s fully qualified domain name, using 127.0.1.1 for ServerName"

Ubuntu üzerinde Apache'yi çalıştırdığınızda

"Could not reliably determine the server’s fully qualified domain name, using 127.0.1.1 for ServerName" 

hatasından kurtulmak için

/etc/apache2/httpd.conf 

dosyasının içerisine

ServerName localhost

yazmanız ve

/etc/init.d/apache2 restart

komutu ile Apache'yi yeniden başlatmanız yeterli olacaktır.

Volkan Özyılmaz