Git’in hastasıyız; vcs, deployment vb. her işimize yarıyor sağolsun. Ancak hala svn’e bağlı kaldığımız yerler oluyor. Benim örneğimde takip ettiğim upstream vcs olarak svn kullanıyor ve çatallayamıyorum, yansılamak için bir çözüm ararken bir başka git magic ile karşılaştım.
Git depomuzu tutacağımız dizine girdikten sonra aşağıdaki adımları uyguluyoruz:
Bu adımları tamamladığınızda o an için svn deposunun yansısını almış oluyorsunuz. Daha sonrasında senkronizasyonu sağlamak için ise aşağıdaki adımları tekrarlıyorsunuz:
12
$ git svn rebase
$ git push origin master
Senkronizasyon işini takip etmek istemiyorsanız siz de benim gibi bu işi cron ile çözebilirsiniz.
Objective-C ile yazdığınız projelerde dikkat edilmesi gereken hususlardan birisiyle alakalı detaylı bir blog yazısına denk geldim. Birinin işine yarar düşüncesiyle not alayım.
Yazının özeti şöyle:
Always initailize your object variables to nil, no matter what, because some day they may be captured by a block and if they contain junk when the block is copied you’re going to crash.
Django ile web uygulamaları geliştirmeye başlayanların eski alışkanlıkları sebebiyle yaptıkları bazı hatalar var. Birkaçını zamanında ben de yapmıştım ve ceremesini de çekmiştim. Rama Vadakattu’nun yazdıklarına küçük birkaç ek ile aşağıda bulabilirsiniz. StackOverflow‘da sürekli güncellenen bir liste de mevcut.
Proje adını import satırına yazmayın
Varsayalım ki proje3 içinde xyz isimli bir uygulamanız var, bu durumda aşağıdaki gibi import etmekten sakının:
1
fromproje3.xyz.modelsimportAuthor
Böyle yazdığınızda import ettiğiniz modül isimleri proje adına bağımlı kalır ve uygulamanız tekrar kullanılabiliir olmaz, ayrıca ileride proje adını değiştirmek istediğinizde tekrar adlandırmayı zorlaştırır.
Doğru kullanım:
1
fromxyz.modelsimportAuthor
Bu yazım şeklini projeniz python path’inde olduğu sürece kullanabilirsiniz.
MEDIA_ROOT ve TEMPLATE_DIRS değişkenlerini hardcode etmeyin
settings.py dosyanızda MEDIA_ROOT ve TEMPLATE_DIRS gibi değişkenlerinizi hardcode etmeyin.
Bu kullanım projenizi sunucular arasında taşırken ya da geliştirme ortamından üretim ortamına taşırken sorun oluşturabilir, bunun yanında farklı platformlarla çalışırken de sorun çıkaracaktır.
Aşağıdaki şekilde kullanırsanız bu sorunların önüne geçebilirsiniz:
Bu kullanımın sorun teşkil ettiği durumlardan biri de statik dosyaları farklı bir sunucuda ya da serviste barındırmak istediğinizde ortaya çıkıyor. Örneğin statik dosyaları sunarken Amazon S3 kullanmak istediniz ve sunucunuzun adresi cdn.xyz.com, bu durumda websiteniz.com/appmedia altında aranacak olan statik dosyaların her biri için bu tanımlamaları değiştirmeniz gerekecek.
Bu sorunun önüne geçmek için ise {{ MEDIA_URL }} etiketini aşağıdaki şekilde kullanabilirsiniz:
Tek yapmanız gereken MEDIA_URL değişkeninizi “/appmedia/” yerine “http://cdn.xyz.com/” şeklinde yazmak olacaktır.
Temel işlemleri views içinde yapmayın
Modelleriniz ile ilgili temel işlemleri (model instance’a özgü işlemler) views içinde yapmak pek de güzel bir fikir değildir. Çünkü kodu tekrar kullanamadığınız gibi unit testlerini de yazamazsınız.
Bunun yerine models altında yer vermek ya da yardımcı fonksiyonlar tanımlamak daha iyi bir fikirdir. Hatta her model instance üzerinde yapılacak işlemler için o model’e kendine özgü bir manager yazmak daha da iyidir.
Peki views içinde ne olacak diyorsanız onu da açıklayayım. ORM ile bir nesneyi ya da nesne listesini elde etmek için ya da template içinde kullanılan bir listeyi oluşturmak için kullandığınız işlemleri yazacaksınız.
Geliştirme ve üretim ortamları için farklı ayar dosyası
İki ortam arasında uygulama taşırken DEBUG değişkeni gibi ortama özgü değişkenleri değiştirmekten yorulmuş olabilirsiniz. Genel kanı ortama özgü ayar dosyaları oluşturup mantıksal bir sorguya göre ortama uygun dosyayı import etmektir.
Bunun birkaç farklı yöntemi olmasına karşın benim kullandığım aşağıdaki yöntemi yazacağım. Ortam bağımlı değişkenleri her ortam için farklı bir settings dosyası (settings_production.py ve settings_development.py) oluşturup içine yazıyoruz. Daha sonra aşağıdaki şekilde import ediyoruz:
3. parti uygulamaların template etiketlerini tek seferde yükleyin
Başka geliştiriciler tarafından yazılan uygulamaların template etiketlerini aşağıdaki şekilde kullanıyoruz:
template.html
1
{% load template_tags %}
Bu satırı etiketleri kullandığımız her template’e yazmak hem DRY prensibini bozuyor hem de fazla efor gerektiriyor. Bunun yerine aşağıdaki şekilde kullanıldığında tek yerden yönetilebiliyor ve bizi fazla efor sarf etmekten kurtarıyor. Bu kodu uygulama çalışırken yüklenen herhangi bir dosyaya (settings.py, urls.py vb.) yazabilirsiniz.
Fark ettiğiniz üzere her bir url için name=… gibi bir isim belirledik. Bu isimlendirme template, view ve modellerde URL’leri hardcode etmeden kullanmamızı sağlıyor. Bu sayede URL yapısını değiştirmek istediğiniz zaman template, view ve modelleri tekrar düzenlemek zorunda değilsiniz.
İsimlendirmede dikkat edilecek bir husus bu isimlerin tekil (unique) olması gerektiği. Bunu sağlamak için gibi bir şablon kullanabilirsiniz.
En basit yöntemlerden bir tanesi diğer bir çok djangonaut gibi django debug toolbar kullanmaktır. Bu araç sayesinde kaç sql sorgusu ne kadar sürede çalıştırıldı, template adı, logging, cookie ve session bilgisi gibi bilgilere erişebilirsiniz.
Bir diğer yöntem de pdb kullanmak olabilir. Eric Holscher tarafından hazırlanan screencast‘e göz atmak isteyebilirsiniz.
Projenizi zenginleştirin
Bir uygulamaya ihtiyacınız varsa önce internette arama yapmayı deneyin, büyük ihtimalle sizden önce bir başkasına da lazım olmuştur. Dolayısıyla aynı işi yapan uygulamayı hazır bir şekilde bulmanız mümkündür. Aşağıda en çok kullanılan uygulamalardan oluşan küçük bir liste var.
Pinax - Bir çok temel uygulamayı içinde bulunduran bir proje.
South - Model değişikliklerini kolayca yönetmenizi sağlayan bir proje.
django-compressor - JS ve CSS dosyalarınızı sıkıştırarak tek dosya olarak sunmayı sağlayan bir uygulama.
django-tastypie - Kolayca RESTful API oluşturmanızı sağlayan bir uygulama.
django-reversion - Modelleriniz üzerinde sürüm kontrol yetenekleri sağlayan bir uygulama.
django-social-auth - Sosyal ağlarla kullanıcı yetkilendirmesini sağlayan bir uygulama.
virtualenv kullanın
Projenizi geliştirirken bağımlılıkları yönetmek için sisteminizden izole bir ortam oluşturun. Deployment ve geliştirme aşamasında size bir çok kolaylık sağlayacağı gibi uygulamanızı dağıtmaya karar verirseniz diğer geliştiricilerin de işini kolaylaştıracaktır. Başlangıç için küçük bir yazıyı daha önce yazmıştım, göz atabilirsiniz.
Gerek yerel sisteminizde gerekse sunucularınızda birden fazla uygulama bulunduruyorsunuzdur. Çoğunun kendine has bağımlılıkları ya da bazı uygulamaların belirli sürümlerine bağımlılıkları olabilir. Bu gibi durumlarda virtualenv yardımınıza yetişiyor ve sisteminizden izole Python ortamları oluşturmanızı sağlıyor.
Bu sayede Python 2.5 ile 2.7 veya 3 kullanan uygulamalarınızı birbirinden farklı ortamlarda çalıştırabilir ve bir takım sorunların önüne geçebilirsiniz. Veya uygulama bağımlılıklarını doğrudan sisteme kurmak yerine sadece çalışılacak ortama kurabilirsiniz.
kurulum
virtualenv’i easy_install ya da pip ile kolayca kurabilirsiniz.
Bu komutu çalıştırdığınızda ortam taslağını (gerekli betikler, python ve setuptools) ortam_adi dizini altına kopyalar. Bu ortamı kullanırken kurduğunuz python paketlerini ortam_adi/lib/pythonX.X/site-packages dizini altında bulabilirsiniz.
Eğer setuptools yerine distribute kullanmak isterseniz ortamı oluştururken --distribute parametresini kullanabilirsiniz.
1
$ virtualenv --distribute ortam_adi
Farklı python sürümü kullanarak ortam oluşturmak için:
1
$ virtualenv -p python2.5 ortam_adi
kullanım
Yeni ortamımızı başarıyla oluşturduk, biraz da etkin kullanım adımlarına bakalım isterseniz.
Ortamımızı etkinleştirmek için:
12
$ source ortam_adi/bin/activate
(ortam_adi)~$
Ortamı etkinleştirdiğinizde komut istemi satırındaki değişikliği fark edeceksiniz. Bu andan itibaren yaptığınız her kurulum o ortama özel olacak ve sisteminizi etkilemeyecek.
Ortamı pasifleştirip sistem öntanımlı ortamına dönmek için:
1
(ortam_adi)~$ deactivate
Paket kurulumu için doğrudan pip’i ya da easy_install’u kullanabiliriz.
1
(ortam_adi)~$ pip install yolk
Burada örnek olarak yolk paketini verdim, hem küçük bir paket olduğu için hem de işinize yarayabileceği için fark etmenizi istedim. Yolk ortamınızda kurulu python paketlerini görüntülemenizi sağlayan bir araç.
1
(ortam_adi)~$ yolk -l
Bu listede bazı paketlerin sistemden inherit edildiğini göreceksiniz, eğer ortamı tamamıyla sistemden izole etmek isterseniz ortamı oluşturma esnasında --no-site-packages parametresini kullanabilirsiniz.
Sanal ortamımıza kurduğumuz paketlerin sistemi etkilemediğini denemek isterseniz de:
123
(ortam_adi)~$ deactivate
$ yolk -l
yolk: command not found
pip kullanacaksanız uygulamanız için bir bağımlılık dosyası oluşturup onu da kullanabilirsiniz. Bu özelliği denemek için de requirements.txt isimli bir dosya oluşturup içine birkaç paket yazın ve ardından pip ile yükleyin:
iPhone’unuzun Home düğmesi zamanla geç tepki vermeye ya da hissizleşmeye başlayabiliyor. Telefon fiziksel bir zarar görmemişse çoğunlukla bunun sebebi yazılım kaynaklı oluyormuş, ben de yeni öğreniyorum.
Bu gibi durumlarda tekrar kalibre etmek oldukça kolay, aşağıdaki adımları uyguladığınızda farkı göreceksiniz.
Öntanımlı gelen Apple uygulamalarından birini açın. (Hava durumu, Borsa, Rehber vb.)
Power düğmesine ”kapatmak için sürükleyin” ibaresini görene kadar basın ve görününce bırakın.
Kapatma ekranı kaybolana kadar Home düğmesine basın. Böylece uygulama kapanmaya için zorlanacak.
Bu işlemleri tamamladığınızda Home düğmesini kalibre etmiş olacaksınız ve tepkileri normale dönecek.
MacBook Pro kendisinden hiç beklenmeyecek bir başarı gösterip bir süredir
sorun çıkartıyor bana. Bunlardan bir tanesi adeta insanı çileden çıkarıyor.
Durduk yerde (hiçbir işlem ile bağlantısı olmaksızın, evet) ekran kararıyor ve
cihaz çalışmaya devam etmesine karşın hiçbir şekilde görüntü alamıyorsunuz.
Geriye tek çare bilgisayarı kapatıp tekrar açmak kalıyor ve yeniden
başlattığınızda şöyle bir hata raporu sizi karşılıyor.
Bazen tekrar başlatmanıza rağmen siyah bir mesaj kutucuğunda ‘lütfen beni
yeniden başlat’ mesajı gösteriyor.
Bir şeyler yazarken, ‘kodu yazdım bir çalıştırması kaldı’ derken ya da bir
dosya indirirken başınıza gelebilecek bu hadisenin yaklaşık bir ay öncesine
kadar bir çözümü yoktu. Bir çok insan Apple forumlarında
tartıştıdurdu. Hatta bu sorun için
Facebook sayfası dahi oluşturuldu.
Önceleri gfxCardStatus ile sadece
Intel ekran kartını kullanarak çözdüğümüz bu soruna Apple bir çözüm getirdi ve
güncelleme olarak yayınladı. Bu sorundan muzdarip iseniz ve hala güncellemeyi
kurmadıysanız sizi şöyle alalım. Basitçe
Software Update aracını çalıştırarak aşağıda gördüğünüz güncellemeyi de
kurabilirsiniz.
Ayrıca belirtelim ki bu sorun (görünen o ki) sadece 2010 ortası üretim tarihli
15” cihazlarda mevcut.
MacBook Pro kendisinden hiç beklenmeyecek bir başarı gösterip bir süredir sorun çıkartıyor bana. Bunlardan bir tanesi adeta insanı çileden çıkarıyor. Durduk yerde (hiçbir işlem ile bağlantısı olmaksızın, evet) ekran kararıyor ve cihaz çalışmaya devam etmesine karşın hiçbir şekilde görüntü alamıyorsunuz. Geriye tek çare bilgisayarı kapatıp tekrar açmak kalıyor ve yeniden başlattığınızda şöyle bir hata raporu sizi karşılıyor.
Bazen tekrar başlatmanıza rağmen siyah bir mesaj kutucuğunda ‘lütfen beni yeniden başlat’ mesajı gösteriyor.
Bir şeyler yazarken, ‘kodu yazdım bir çalıştırması kaldı’ derken ya da bir dosya indirirken başınıza gelebilecek bu hadisenin yaklaşık bir ay öncesine kadar bir çözümü yoktu. Bir çok insan Apple forumlarında tartıştıdurdu. Hatta bu sorun için Facebook sayfası dahi oluşturuldu.
Önceleri gfxCardStatus ile sadece Intel ekran kartını kullanarak çözdüğümüz bu soruna Apple bir çözüm getirdi ve güncelleme olarak yayınladı. Bu sorundan muzdarip iseniz ve hala güncellemeyi kurmadıysanız sizi şöyle alalım. Basitçe Software Update aracını çalıştırarak aşağıda gördüğünüz güncellemeyi de kurabilirsiniz.
Ayrıca belirtelim ki bu sorun (görünen o ki) sadece 2010 ortası üretim tarihli 15″ cihazlarda mevcut.
Bugünkü eğlencemiz bir öncekine çok benziyor. Ancak bu sefer label ya da button gibi sık kullanılan öğelerle değil hep gözümüzün önünde olsa da pek dikkatimizi çekmeyen navigasyon çubuğuyla (UINavigationBar) oynayacağız.
UINavigationItem’ın ayarları native uygulama görünümü istemediğimiz bir çok uygulama için yetersiz kalıyor. Bu noktada NavigationItem’ın title property’sini bir kenara bırakıp ilgimizi titleView property’si üzerine yoğunlaştırıyoruz. titleView property’sine değer olarak herhangi bir UIView nesnesi verebiliyorsunuz, bu örnekte UILabel kullanacağım ancak biraz egzersizle farklı fontlar kullanarak yazı yazabilirsiniz
Değişik renkli başlıkları farklı view controller’larda kullanabileceğimizi düşünerek verdiğimiz metni bir label’ın içine yazıp bize o label’ı döndüren bir fonksiyon yazarak başlıyoruz.
labelForNavigationItem fonksiyonunu zenginleştirmek ve yazınıza görsellik katmak size kalmış.
UILabel kullandığım bir örnek:
Başka bir uygulamada UILabel yerine UIImageView kullandım, demem o ki diğer UIView nesnelerine ihtiyacınız olduğunda hiç çekinmeyin bu kodlarda birkaç değişiklik yaparak sorunsuzca kullanılabiliyor.
Bugünkü eğlencemiz bir öncekine çok benziyor. Ancak bu sefer label ya da button gibi sık
kullanılan öğelerle değil hep gözümüzün önünde olsa da pek dikkatimizi
çekmeyen navigasyon çubuğuyla (UINavigationBar) oynayacağız.
UINavigationItem’ın ayarları native uygulama görünümü istemediğimiz bir çok
uygulama için yetersiz kalıyor. Bu noktada NavigationItem’ın title
property’sini bir kenara bırakıp ilgimizi titleView property’si üzerine
yoğunlaştırıyoruz. titleView property’sine değer olarak herhangi bir UIView
nesnesi verebiliyorsunuz, bu örnekte UILabel kullanacağım ancak biraz egzersizle farklı
fontlar kullanarak yazı yazabilirsiniz ;)
Değişik renkli başlıkları farklı view controller’larda kullanabileceğimizi
düşünerek verdiğimiz metni bir label’ın içine yazıp bize o label’ı döndüren
bir fonksiyon yazarak başlıyoruz.
labelForNavigationItem fonksiyonunu zenginleştirmek ve yazınıza görsellik
katmak size kalmış.
UILabel kullandığım bir örnek:
Başka bir uygulamada UILabel yerine UIImageView kullandım, demem o ki diğer
UIView nesnelerine ihtiyacınız olduğunda hiç çekinmeyin bu kodlarda birkaç
değişiklik yaparak sorunsuzca kullanılabiliyor.
iOS platformu için uygulama geliştiriyorsunuz diyelim, tasarımınız gereği sistemdeki fontlardan başka bir font kullanmanız gerekiyor ya da sadece değişiklik olsun diye bunu yapmak istiyorsunuz belki de. Benim gibi platformun teknik detaylarını bilmeyen bir tasarımcı başınıza iş açmış bile olabilir
Öncelikle bu çözümün sadece iOS SDK 4 ve üzeri sürümlerde çalışacağını belirtelim. Eğer bu bir sorun değilse aşağıdaki adımları takip ederek sonuca ulaşabilirsiniz.
Kullanmak istediğiniz font dosyasını (TTF/OTF) XCode’da projenize ekleyin.
Projenizin info.plist (projeadı-info.plist de olabilir) dosyasına ”Fonts provided by application” isimli bir anahtar ekleyin.
Eğer birden fazla font kullanacaksanız bu anahtarın tipini Array yapmayı unutmayın.
Anahtarın değeri olarak eklediğiniz font dosyasının adını (uzantısıyla birlikte) yazın ve dosyayı kaydedin.
Kodun içinde [UIFont fontWithName:@"YeniFontunAdı" size:16] şeklinde kullanabilirsiniz.
Buradaki “YeniFontunAdı” eklediğiniz dosyanın adı değil bilgisayarınızdaki görünen adıdır. Örnek vermek gerekirse ”bauhaus_med.ttf” dosyasını kullanmak istediğinizde ”YeniFontunAdı” yerine ”Bauhaus Medium” yazmalısınız. Dikkat edilecek bir husus da bazı fontların birden fazla ismi olmasıdır. Hata yapmamak için fontu bilgisayarınızda açıp kontrol edin.
UILabel, UITextView ve UIButton gibi setFont metodu olan her türden nesne için kullanabilirsiniz.
UIButton ile yapılmışı:
İlk üç madde için puanlar BeefyApps‘e giderken son madde için birkaç puan da Shang Liang‘a gidiyor.
iOS platformu için uygulama geliştiriyorsunuz diyelim, tasarımınız gereği
sistemdeki fontlardan başka bir font kullanmanız gerekiyor ya da sadece
değişiklik olsun diye bunu yapmak istiyorsunuz belki de. Benim gibi platformun
teknik detaylarını bilmeyen bir tasarımcı başınıza iş açmış bile olabilir :)
Öncelikle bu çözümün sadece iOS SDK 4 ve üzeri sürümlerde çalışacağını
belirtelim. Eğer bu bir sorun değilse aşağıdaki adımları takip ederek sonuca
ulaşabilirsiniz.
Kullanmak istediğiniz font dosyasını (TTF/OTF) XCode’da projenize ekleyin.
Projenizin info.plist (projeadı-info.plist de olabilir) dosyasına ”Fonts provided by application” isimli bir anahtar ekleyin.
Eğer birden fazla font kullanacaksanız bu anahtarın tipini Array yapmayı unutmayın.
Anahtarın değeri olarak eklediğiniz font dosyasının adını (uzantısıyla birlikte) yazın ve dosyayı kaydedin.
Kodun içinde [UIFont fontWithName:@”YeniFontunAdı” size:16] şeklinde kullanabilirsiniz.
Buradaki “YeniFontunAdı” eklediğiniz dosyanın adı değil bilgisayarınızdaki görünen adıdır. Örnek vermek gerekirse ”bauhaus_med.ttf” dosyasını kullanmak istediğinizde ”YeniFontunAdı” yerine ”Bauhaus Medium” yazmalısınız. Dikkat edilecek bir husus da bazı fontların birden fazla ismi olmasıdır. Hata yapmamak için fontu bilgisayarınızda açıp kontrol edin.
UILabel, UITextView ve UIButton gibi setFont metodu olan her türden nesne için
kullanabilirsiniz. UIButton ile yapılmışı:
İlk üç madde için puanlar BeefyApps‘e giderken son madde için birkaç puan da Shang
Liang‘a gidiyor.
Xerox Phaser 3117′niz var ve Mac OS için sürücüsü olmadığını mı fark ettiniz?
Zaten Xerox’un uyumluluk belgesi de Mac OS X 10.6 ile desteklenmediğini söylüyor.
“Ee şimdi ne yapacağız?” diye düşünürken biraz araştırma ile bir çözüm buldum. Yazıcısına uygun sürücüleri ilk bakışta bulamayan herkesin yolu muhakkak Linux Foundation’ın Open Printing çalışma grubunun sitesine düşmüştür, nitekim Mac kullanmama rağmen benimki hala düşüyor
Kurulum işlemleri bittikten sonra Sistem Seçenekleri > Yazıcı & Fax > Yazıcı Ekle yolunu takip ederek karşımıza gelen pencerede arama kutusuna GDI yazıyoruz ve listenin en üstündeki Generic GDI Printer Foomatic/gdi sürücüsünü seçiyoruz.
Xerox Phaser 3117’niz var ve Mac OS için sürücüsü olmadığını
mı fark ettiniz? Zaten Xerox’un uyumluluk belgesi de Mac OS X 10.6 ile desteklenmediğini söylüyor.
“Ee şimdi ne yapacağız?” diye düşünürken biraz araştırma ile bir çözüm buldum.
Yazıcısına uygun sürücüleri ilk bakışta bulamayan herkesin yolu muhakkak Linux
Foundation’ın Open Printing çalışma grubunun sitesine düşmüştür, nitekim Mac
kullanmama rağmen benimki hala düşüyor :)
Kurulum işlemleri bittikten sonra Sistem Seçenekleri > Yazıcı & Fax > Yazıcı
Ekle yolunu takip ederek karşımıza gelen pencerede arama kutusuna GDI
yazıyoruz ve listenin en üstündeki Generic GDI Printer Foomatic/gdi
sürücüsünü seçiyoruz.
Bir MacBook’unuz var ve fark ettiniz ki USB portlarından biri veya birkaçı çalışmayı bırakmış. iPad’inizi iPhone’unuzu ya da başka bir cihazınızı taksanız da hiçbir eylem gerçekleşmiyorsa, cihazınızı şarj edemiyorsanız hemen bozulduğunu düşünmeyin
Zira çok kolay bir çözümü var. EFI ve SMC’yi sıfırlamanız gerekiyor. Bunun için bütün açık uygulamaları kapatın çünkü bilgisayarımızı kapatacağız.
Shift+Control+Option+Power düğmelerine eşzamanlı basın ve MacBook’unuzun prize takılı olduğundan emin olun.
Bilgisayarınız kapandıktan sonra Power düğmesine tekrar basın ve gri ekran görüntülenmeden önce MacBook reboot edene kadar Command+Option+R+P düğmelerine basın.
Bir MacBook’unuz var ve fark ettiniz ki USB portlarından biri veya birkaçı
çalışmayı bırakmış. iPad’inizi iPhone’unuzu ya da başka bir cihazınızı
taksanız da hiçbir eylem gerçekleşmiyorsa, cihazınızı şarj edemiyorsanız hemen
bozulduğunu düşünmeyin :)
Zira çok kolay bir çözümü var. EFI ve SMC’yi sıfırlamanız gerekiyor. Bunun
için bütün açık uygulamaları kapatın çünkü bilgisayarımızı kapatacağız.
Shift+Control+Option+Power düğmelerine eşzamanlı basın ve MacBook’unuzun prize takılı olduğundan emin olun.
Bilgisayarınız kapandıktan sonra Power düğmesine tekrar basın ve gri ekran
görüntülenmeden önce MacBook reboot edene kadar Command+Option+R+P
düğmelerine basın.
Okuldaki son seneme biraz hızlı başladım, 8 ders alıyorum. Bunlardan “Olasılık ve İstatistik Teorilerine Giriş” ve “Çokluortam Sıkıştırma ve İşleme” isimli iki derse birbirleriyle iç içe olmaları sebebiyle diğerlerinden fazla ilgi gösteriyorum.
Çokluortam Sıkıştırma ve İşleme dersini Sıla Ekmekçi Flierl isimli hocamız veriyor. Kendisi bu konudaki çalışmalarıyla tanınan oldukça donanımlı ve tecrübeli biri. Bazen anlattıklarını algılamakta sorunlar yaşasak da araştırıp altyapımızı geliştirdikçe daha rahat anlaşabildiğimizi görüyorum.
Gelelim konumuza; haftaya sınav var ve çalışmak için kaynağa ihtiyacım var. Hocamızın ders materyali olarak kullandığı Bernd Girod’un sunum dosyalarını bulmam gerekiyordu ve hepimizin yapacağı gibi Google’a sorayım dedim, pek ümitli değildim aslında. Google’da bulamazsam p2p ağlara bakacaktım ancak birkaç sayfa taradıktan sonra fark ettim ki Stanford’da Bernd amcanın verdiği aynı isimli dersin bütün sunum dosyaları erişime açıkmış. Tabii ki hemen sömürdüm
Okulda 5. yılıma girdim ve henüz ders notlarını kolayca paylaşan bir hoca ile karşılaşmadım. Kimisinin çok ahlaki sebepleri varken (korsan materyal paylaşımı yapmak istememek gibi) kimisinin sadece “benim emeğim var, kendi araştırmam ve notlarım, neden sizinle paylaşayım” demesi sonucu eski öğrencilerin birikimlerine yöneldik hep.
Bir eğitmen, bir akademisyen, bir bilimadamı neden üretimini saklar, neden paylaşıma açık olmaz. Kaybedecek neleri olabilir ki? Ya da kazanacaklarının yanında daha değerli ne kaybedebilirler? Neden “özgür” kılmıyoruz bilgiyi? Akademisyen ne iş yapar?
Daha bir sürü soru sorulabilir ancak cevaplarını verebileceğimiz günün gelip gelmeyeceğini merak ediyorum ben. Ya da cevapları da boşverin, bütün akademisyenlerin ürettiği bir ülke istiyorum. Belki Murat Eren gibi Necdet Yücel gibi ya da adını bilmediğim, yazmayı unuttuğum diğer idealist akademisyenlerin artması lazım, kesinlikle bunu istiyorum.
Birileri “özgür” olmayı, “özgür” bırakmayı öğretsin. Bunu bazen zorunluluklar koyarak, bazen kendisi örnek olarak yapsın.
Okuldaki son seneme biraz hızlı başladım, 8 ders
alıyorum. Bunlardan “Olasılık ve İstatistik Teorilerine Giriş” ve “Çokluortam
Sıkıştırma ve İşleme” isimli iki derse birbirleriyle iç içe olmaları sebebiyle
diğerlerinden fazla ilgi gösteriyorum.
Çokluortam Sıkıştırma ve İşleme dersini Sıla Ekmekçi
Flierl isimli hocamız
veriyor. Kendisi bu konudaki çalışmalarıyla tanınan oldukça donanımlı ve
tecrübeli biri. Bazen anlattıklarını algılamakta sorunlar yaşasak da araştırıp
altyapımızı geliştirdikçe daha rahat anlaşabildiğimizi görüyorum.
Gelelim konumuza; haftaya sınav var ve çalışmak için kaynağa ihtiyacım var.
Hocamızın ders materyali olarak kullandığı Bernd Girod’un sunum dosyalarını
bulmam gerekiyordu ve hepimizin yapacağı gibi Google’a sorayım dedim, pek
ümitli değildim aslında. Google’da bulamazsam p2p ağlara bakacaktım ancak
birkaç sayfa taradıktan sonra fark ettim ki Stanford’da Bernd amcanın verdiği
aynı isimli dersin bütün sunum dosyaları erişime açıkmış. Tabii ki hemen
sömürdüm :)
Okulda 5. yılıma girdim ve henüz ders notlarını kolayca paylaşan bir hoca ile
karşılaşmadım. Kimisinin çok ahlaki sebepleri varken (korsan materyal
paylaşımı yapmak istememek gibi) kimisinin sadece “benim emeğim var, kendi
araştırmam ve notlarım, neden sizinle paylaşayım” demesi sonucu eski
öğrencilerin birikimlerine yöneldik hep.
Bir eğitmen, bir akademisyen, bir bilimadamı neden üretimini saklar, neden
paylaşıma açık olmaz. Kaybedecek neleri olabilir ki? Ya da kazanacaklarının
yanında daha değerli ne kaybedebilirler? Neden “özgür” kılmıyoruz bilgiyi?
Akademisyen ne iş yapar?
Daha bir sürü soru sorulabilir ancak cevaplarını verebileceğimiz günün gelip
gelmeyeceğini merak ediyorum ben. Ya da cevapları da boşverin, bütün
akademisyenlerin ürettiği bir ülke istiyorum. Belki Murat
Eren gibi Necdet Yücel gibi
ya da adını bilmediğim, yazmayı unuttuğum diğer idealist akademisyenlerin
artması lazım, kesinlikle bunu istiyorum.
Birileri “özgür” olmayı, “özgür” bırakmayı öğretsin. Bunu bazen zorunluluklar
koyarak, bazen kendisi örnek olarak yapsın.
Birbirimizi mükemmelleştirmenin ya da buna çabalamanın kolay olacağını zaten düşünmüyordum. Zor olacağını ve bir çok şeyin kırılıp dökülebileceğini biliyordum. Beklemediğim ise bu kadar genel kabul noktalarda anlaşamamış olmamız idi.
Giden kim olursa olsun aklı diğerinde kalmayacak mı sanıyorsun? Öyleyse yanılıyorsun.
Gerçekten de Serdar Ortaç’ı yoran hayat bize acı koydu..
Artistanbul’da tekrar çalışmaya başladığım dönemlerde bir müşterimizin sitesi hazırlanıyordu. Süre olarak çalışmanın ortalarına denk geldiğim için pek müdahale şansım olmadı ve altyapıda Symfony kullanıldı. O gün bugündür, sunucu tarafında herhangi bir yerine müdahale etmek istediğimizde karşımıza her seferinde birbirinden farklı ve izlenemez hatalar çıkıyor.
Neyse ki bugünkü izlenebilir bir hataydı ve benden önce birileri çözmüştü Birazcık aramayla öğrendim ki Fatal error: Class ‘sfInflector’ not found – Symfony $VER diye ağlamasının sebebi strtolower işlevinin Türkçe yerelinde doğru çalışmaması.
Artistanbul’da tekrar çalışmaya başladığım dönemlerde bir müşterimizin sitesi
hazırlanıyordu. Süre olarak çalışmanın ortalarına denk geldiğim için pek
müdahale şansım olmadı ve altyapıda Symfony
kullanıldı. O gün bugündür, sunucu tarafında herhangi bir yerine müdahale
etmek istediğimizde karşımıza her seferinde birbirinden farklı ve izlenemez
hatalar çıkıyor.
Neyse ki bugünkü izlenebilir bir hataydı ve benden önce birileri çözmüştü :)
Birazcık aramayla öğrendim ki Fatal error: Class ‘sfInflector’ not found –
Symfony $VER diye ağlamasının sebebi strtolower işlevinin Türkçe yerelinde
doğru çalışmaması.