Bir Tasarımcının İsyanı
23 Ocak 2012
Tasarımcı bir arkadaşımdan aldığım mektubu burda paylaşmak istiyorum.
Tasarımcı bir arkadaşımdan aldığım mektubu burda paylaşmak istiyorum.
Birden fazla mönitör ile çalışıyorsanız ekranı kilitlemek için Hot Corner özelliği bazan sizi yorabiliyor (üç mönitör kullanıyorsanız ve alışkanlık icabı en sağ üst köşeyi ayarlamışsanız oraya varmak mesele oluyor), aslında bunu kolaylaştırmak için mönitörlerin görüntü hizalarını hot corner yaptığınız köşelerden tam denk getirmemek çok işe yarıyor. Böylece her mönitörde hot corner ayarlarınız çalışıyor.
Fakat bu yazıda menübar’ı kullanarak nasıl ekranı kilitleyebiliriz ona değinmek istiyorum. Keychain Access programını çalıştırıp menübar’dan Preferences’e ulaşın. İlk sekmede en üstte “Show keychain status in menu bar” kutusunu işaretlediğinizde menünüzde bir kilit simgesi belirecektir. Bu simgeye tıkladığınızda açılan menüden ekranı kilitleyebileceğiniz gibi “Keychain Access”in diğer seçeneklerine de ulaşabiliyorsunuz (diğer seçeneklerin tam olarak ne olduğunu bilmiyorum).
Bir sene önce Dell Vostro pc’lere iatkos kurmakla kendimizi avuturken çok şükür ofisimiz Mac Mini, MacBook Air, MacBook Pro ve iMac’lerle doldu. Evdeki Mac’lerin durumu da değişti ama sayı değişmedi. Geçen sene aldığım Air’i bir kaç ay önce daha iyi bir modeline yükseltmiştim ama ilki de hala duruyordu. Kayınbirader Mac Book Pro alıp pc eziyetine son verdiği sıralarda bizim küçük Air’e talip çıktı. Onu da başgöz ettik. Bir Mac gitti bir Mac geldi :)
Şimdi ofiste 27″ iMac kullanmanın verdiği lezzeti evde de arıyorum. Evdeki Air’den çok memnunum da, Air’e bağladığım bu Acer monitör beni mahvediyor. Şahika Hanım’ın 24″ iMac’ini mi ele geçirsem diye düşünüyorum. Ama Air de sürekli dışarda lazım oluyor. Bu sefer bütün bilgisayarlara ben el koymuş olacağım. Halbuki bu air’i de ona doğum günü hediyesi diye (!) almıştım :))))
Eskiden öyle miydi..
Üniversiteye girdiğim yıllarda iki arkadaş ancak ortaklaşa bilgisayar alabilmiştik hem de ikinci el. Üniversitede laptopu olanlar karton kutuları ile okula getirip götürüyorlardı. O derece lüks ve rüküş bir durumdu yani :) Üniversiteden sonra Gebze’deki enstitüde bir derse katılmıştım, ders çıkışında hoca laptopunu çantaya koymadan önce talep eden çocuklara konuyla alakalı dökümanları cd’ye yazıp verince “Budur! Laptop almam lazım” demiştim ve bilmem kaçıncı toplama pc’mi ablama satıp Compaq marka ilk laptopumu almıştım. O zamanlar Ankara’da yedek subaylık yapıyordum. Laz aklımla o laptopu nöbette film falan izlerim diye karargaha götürmüştüm. Ertesi gün çıkarken kapıdaki uzman çavuşlar bilgisayarıma el koymuşlardı. Kendi komutanıma koşup durumu izah ettim ama daha sonra astsubayımdan öğrenmiştim ki beni ihbar eden de kendi komutanımmış meğer :) Neyse ki 9 gün sonra bilgisayarıma geri kavuşmuştum. Ama o 9 gün neler çektim bir Allahü Teala bilir.
Compaq iyice haşat olduktan sonra dünyanın en büyük saçmalığını yapıp yerli marka bir laptop almıştım: DATRON!
Hala bu marka yaşıyor mu hiç bir fikrim yok, googling bile yapmak istemiyorum. Datron garanti kapsamındayken cozurdadığında aynı modelden artık üretilmediği için daha üst modelini ZORLA fark ödeyerek almak mecburiyetinde bırakılmıştım. Bir Gönen ziyaretinde yukarıda bahsi geçen kayınbiraderimin bilgisayarı Call Of Duty’i çatur çutur oynatırken bendeki Datron’un hiç oralı olmadığını görünce anında üç kuruşa oracıktaki komşuya bilgisayarı satıp o zamanın en iyi konfigürasyonlarından ASUS N61VN alma gafletinde bulundum. O gece nasıl bir yağmur yağıyordu, görmeliydiniz.
Asus’a lafım yok, hem şık hem sağlam bir bilgisayardı. Ama ennihayetinde şimdi benim için sadece bir PC! Asus’u aldıktan bir kaç ay sonra belki de o sıralarda ofiste bu yazının en başlarında bahsettiğim Dell Vostro’lar ortaya çıktı. “Bunlara Mac Os kurulabiliyor, XCode deneriz” gazı ile saldırdık. Çok da güzel kurulumlar yaptık ve sorunsuz kullandık. Bir iki hafta öncesine kadar hala o bilgisayarlar aynı işletim sistemiyle duruyorlardı.
İşte bu kısımları net hatırlamıyorum, evlilik yıldönümümüze 2 hafta kala Şahika Hanım’la bir delilik yapıp Darty’e gittik ve ne kadar kredi kartımız varsa ortaya koyup bir iPhone 3G bir tane de -aaaah kafam ah- Samsung i900 Omnia aldık. 250 TL daha ödeyip ben de iPhone alsaydım ömrümden 2 sene, cebimden de 2-3 bin TL gitmezdi.
İşte çok şükür o iPhone ile başlayan Apple serüveni 2-3 sene içerisinde çok hızlı bir aksiyona sahne oldu. Hanıma iMac aldık, sonra Mac Mini geldi, ofisten iPad ele geçirdik, Mini gitti Air geldi, o gitti yenisi geldi, kayınço Mac Book Pro aldı, ofise iMac geldi, iPad 2′ler geldi vs vs..
Tabi bu gidip gelmeler kredi kartlarında vahim rakamları beraberinde getirdi. Ama Mac kullanmak nasıl bir keyif veriyorsa arkadaş, o ekstreleri hiiiiç takmadık :) Biz takmayınca banka bize taktı, o da ayrı bir yazının konusu :) Ama çok şükür şimdi kartlar da yoook, ekstreler de yook, dert de yok.
Eğer okuduysanız uzun bir yazı oldu kusura bakmayın. İnsanlık hali, yaş ilerliyor, unutkanlık aldı başını gidiyor. Buraya karalayayım da nasip olursa ilerde okur eski günleri yad ederim diye lafı uzattık.
Her ne sürç-ü lisan ettiysek affola..
MySQL view’ları siz view’i oluşturduğunuz tabloda yapısal değişiklikler yaptığınızda bozulurlar. Kullandığınız veritabanı istemcisine bağlı olarak MySQL’deki bozuk viewlarınızı oluşturan sorguyu göremeyebilirsiniz. PhpMyAdmin gösterir mesela. Göremediğiniz view’ın içeriğini not almamışsanız düzeltmek için epey terlemeniz gerekir.
Eğer istemciniz bozuk view’ları göstermiyorsa şu query’i kullanarak view detayını bozuk da olsa alabilirsiniz.
select view_definition from information_schema.views where table_name = “buraya_view_adi_gelecek”;
İyi kötü 11 yıldır PHP-MySQL-PostgreSQL ile uğraşıyorum. Binlerce kez tablo şeklinde listeler hazırlamışımdır; sipariş listesi, müşteri listesi gibi. Genel olarak benzese de aslında sipariş listesi ile müşteri listesi ayrı yapıdadır. Müşteri listesi tek tablodan ibaret olabilir. Müşterinin adı, soyadı, adresi, telefonu vs. Bunları alt alta listelemekte hiçbir beis yok. Ama sipariş listesi öyle değildir. Siparişin genel bilgilerinin (sipariş tarihi, siparişi veren müşterinin id’si, siparişin durumu vs) yanısıra bir de o siparişte geçen ürünlerin id, adet ve belki o anki satış fiyatlarının tutulduğu ayrı bir tablo vardır. İç içe query’ler olmasın, kullanıcının da kafası karışmasın diye sipariş listesini oluştururken sadece sipariş genel tablosundaki bilgileri ekrana basar, en çoğu bu siparişte şu kadar ürün vardır diye bir count() bilgisi koyarız.
Halbuki hemen her müşteri de şunu ister; yahu burda siparişler güzel görünüyor da, hangi ürünleri almış görmek için illa sipariş detaylarına tıklamam gerekiyor. Biz de ahkam keseriz “ee aksi halde burda her sipariş için n tane satır görmen gerekecek, daha karışık bir ekran olacak bıdı bıdı bıdı”..
Halbuki siparişlerin çoğunda ya bir ürün var ya iki. Ekranda basmak bile problem oluşturmayacak ama o iç içe querylerle sistemi yormamak ya da topluca çok satır getirecek şekilde çekip php ile tabloyu düzeltmek zahmetine girmeyecek bir şey olsa.. sum() gibi.. sum() madem bir sütundaki rakamları toplayabiliyor, yok mu concat()’ın sum() gibi olanı..
Olmaz mı.. Olur elbet. Sen bu soruyu 11 sene önce sorsaydın ya akıllım.
Efendim, çektiğim sancıları yukarıda anlatıp size de aynı sancıları çektirebildiysem ne ala :) Öyle peşin peşin aha burdan böyle yapılıyor diyecek değildim :)
Belki benim gibi tanımayanlar vardır diye çok geç tanıştığım group_concat() ile sizleri tanıştırayım. Kendisi mySQL komutudur ama eminim diğer SQL dillerinde de muadilleri vardır.
Gayet kolay kullanılıyor. Klasik group by ifadenizi yazıyorsunuz, select kısmına group_concat(yanyana_gelecek_sutun_adi) şeklinde ifadeyi ekliyorsunuz. Örnek:
select s.id, s.musteri_id,s.tarih,s.durum_kodu, group_concat(u.urun_adi)
from tbl_siparis s
left join tbl_siparis_urun u on u.id=s.urun_id
Daha detaylı yazmak isterseniz:
select s.id, s.musteri_id,s.tarih,s.durum_kodu, group_concat(u.urun_adi order by u.urun_adi separator ‘, ‘)
from tbl_siparis s
left join tbl_siparis_urun u on u.id=s.urun_id
Apple bu sefer çok bekletmedi galiba. Tam bir hafta önce gönderdiğimiz uygulama bugün incelemeye alındı ve ardından kabul görüp ApStore’da yayınlanmaya başladı. Keşke daha önce iki kere gönderdiğim Tgrt-Haber uygulaması da geçebilseydi ama yayındaki bir problemden dolayı sürekli reject ediliyor. Çaresine bakacağız inşallah.
Tgrt-FM’in yeni uygulamasında radyonun değişen yayın url’si güncellendi. Zira eskisi bu nedenle çalışmıyordu. Sonra iPad’de de çalışabilecek şekilde geliştirildi. Zaman problemi nedeniyle arayüz olarak iPad’de farklı bir yapıya gidemedim malesef. Belki bir sonraki sürümünde olabilir.
Radyo’nun Twitter ve Facebook hesaplarına anında ulaşılabilmesi için kısayollar koyduk ve uygulama içerisinde web penceresi kullandık. iPad’de sorun olmaz ama iPhone’un nispeten dar ekranında problem oluşturabilir. Tepkilerden anlayacağız.
Ayrıca uygulamanın yapımcısı sevgili Huzur Pınarı sitesine de uygulama içerisinde link verdik.
Mevzu başlıktaki gibi kolay ve tek satırda hallolmuyor malesef. Amacım resimde gördüğünüz gibi yanyana iki div koymak ve bunlardan birisi sabit genişlikte iken diğer div’in kalan alanın tamamını kullanmasını sağlamak.
Fatih Hayrioğlu’nun sitesinde bulamayınca Google’da aradım ama Türkçe örnekler malesef netice vermedi. Stackoverflow.com’da şu sayfadaki Andres kullanıcısının örneği işe yaradı.
Bu işlem için evvela bu iki div’i taşıyacak bir div daha gerekiyor. Dışardaki div’e dar ve sabit genişlikli olan div kadar padding-left vermek gerekiyor ki geniş alan bu mesafeden başlasın ve %100 genişliğine sahip olmasına rağmen padding’den dolayı sadece kalan alanı kullanabilsin. Bu kısım çalıştığında aslında işin zor kısmı bitmiş oluyor. Geniş olan div’in sabit bir alan hariç tüm ekrana yayılmasını sağladık.
İkinci olarak da dar ve sabit genişliğe sahip div’i kapsayıcı alandaki padding’den oluşan boşluğa konumlandırmak gerekiyor. Normalde bu div de ana div’in içerisinde yer aldığından padding-left’ten etkilenecektir. Bu etkiyi sıfırlamak için kendi genişliği kadar negatif değerli margin-left kullanıp kendini taşıyan div’in dışına çıkmasını sağlamalıyız. Bu kadar.
Örnek:
CSS
.kutu {
height: 200px;
padding-left: 260px;
}.kutu .dar {
height: 200px;
width: 260px;
margin-left: -260px;
background-color:blue;
float:left;
}.kutu .genis {
float: left;
height: 200px;
width: 100%;
background-color:green;
}
HTML
<div class=kutu>
<div class=dar>Dar</div>
<div class=genis>Genis</div>
</div>
Örnek dosyayı indirmek için tıklayın.
Neredeyse bir ay kadar önce Tgrt-FM iPhone uygulamasında kullanılan sunucu adresinin değiştirildiğini, uygulamanın güncellenmesi gerektiğini haber verdiler ama hem Tgrt tarafından beklediğim bazı adreslerin (yayın akışı, frekans listesi ve streaming adresinin onların vereceği sabit adreslerde tutulmasını talep ettim, böylece hem kendi sunucumda parse etmeme gerek kalmayacak hem de olası streaming adres değişikliğinde uygulamayı güncellemek gerekmeyecek) gelmesi hem de fırsat bulup yeni bir tasarım yapmam biraz uzun sürdüğü için ancak bugün göndermek nasip oldu.
Sürekli istememe rağmen PHP’den başımı kaldıramadığım için unuttuğum Objective-C ve Xcode’un bana çıkartığı problemler de cabası tabi. Ama Tgrt-FM’in bu yeni sürümü sayesinde bir şeyi daha tecrübe etmiş oldum. iPhone ve iPad uygulamasını tek program altında kotarmak nasılmış onu öğrendim ve çok hoşuma gitti.
Ben tamamen tek bir arayüzle ve tek bir kod grubu ile işi halledeceğimi düşünüyordum ama tamamen öyle değilmiş. Evvela projeye başlarken Device Family seçeneğini “Universal” olarak işaretliyorsunuz. iPhone için ayrı, iPad için ayrı .xib dosyaları oluşuyor. Dolayısı ile iki uygulamanın görüntüsü tıpatıp aynı olmak zorunda değil. Mesela ekran daha büyük olduğundan iPad’de daha değişik bir arabirim sunabilirsiniz. Ama kod grubu tek parça olabiliyor. Şöyle ki: bizim örneğimize göre açıklayayım. Yanda gördüğünüz üzere TgrtFM klasörü altında TgrtFmAppDelegate dosyaları ile iPad ve iPhone klasörleri var. Bu klasörlerde de TgrtFMAppDelegate_iPad ve TgrtFMAppDelegate_iPhone dosyaları ve .xib dosyaları var.
Yani eğer iPhone ve iPad için farklı fonksiyonlar yazmayacaksanız hepsini ana klasördeki AppDelegate dosyalarına yazabiliyorsunuz. Eğer birbirinden ayrı işlemler olacaksa sadece onları kendi klasörlerindeki AppDelegate dosyasına yazabiliyorsunuz.
Uygulamanın bu sürümünde kullanıcılardan sık sık aldığımız bir şikayeti de düzelttik. Bir radyo uygulaması olduğundan arkaplana atıldığında da yayının devam etmesi beklenen bir davranıştır. Malesef önceki sürümde bu özellik yoktu. Audio Streaming konusunda zerre bilgim olmadığından internette bulduğum dökümanlardan ne anlıyorsam o kadar iş yapabiliyorum. Bu uygulamada kullandığımız ve http://cocoawithlove.com/ blogunun sahibi Matt Gallagher’ın yazdığı AudioStreamer classı için interneti tarumar ettim. Bir kaç örnek uygulama indirdim ve gerçekten arkaplanda yayının devam ettiğini gördüm. Ama bunu sağlamak için çok girift kodlar yazmışlardı. Bana daha transparan bir çözüm lazımdı. Ne bileyim, bir ayar dosyasına bir şey yazmak ya da bir konfigürasyon sayesinde bu işin olmasını bekliyordum.
Tam da aradığım çözümü şurada buldum. Örneği yazan kişi “böyle yapınca simülatörde çalışıyor, ama gerçek bir cihazda deneyemedim” diyordu. Korktuğum oldu, gerçek cihazda çalışmadı. Daha sonra şimdi adresini hatırlamadığım başka bir yerde de info.plist dosyasına arkaplanda çalışması için bir key eklemek gerektiğini okudum:
<key>UIBackgroundModes</key>
<array>
<string>audio</string>
</array>
Böylece mevzu tamamlanmış oldu. Ondan sonra bir saatimi de uygulamayı AppStore’a göndermeye harcadım. Kullandığım bilgisayar değişince keychain uygulamasında sertifikaları vs düzenlemem gerekiyordu. Nasıl yapılacağını hatırlamadığım gibi sürekli lazım olmadığından böyle son dakikalara kaldı. Uzun ama bildiğim yolu seçip Apple Developer Center sitesinden tekrar sertifika talep ettim, tekrar developer ve distribution profile’ları oluşturup indirdim. Xcode’a ekledim bütün hatalardan arındıkdan sonra “Archive” deyip uygulamayı gönderdim. Gönderme işleminde de hatalar çıkabiliyor, 7. denememde anca toparlayabildim.
İnşallah AudioStreamer class’ından kaynaklanan iki notice için Apple uygulamayı reddetmez. Çalışmasına engel olan hatalar değil. İnternette araştırdım ama nasıl çözüleceğini bulamadım. Matt Gallagher de class’ı güncellememiş.
Bekleyelim bakalım…
Bugün, eşimle birlikte Yeşilköy’deki Kas Hastalıkları Derneği‘ndeydik. Bir hafta kadar önce Dr. Hakkı Öcal’ın (yani Hakkı Abi) ve sevgili arkadaşımız Bahtiyar Dilek’in katkılarıyla neredeyse 10 yılı aşkın bir süredir gıyaben tanıştığımız bilişimci arkadaşlarla ortaklaşa kararlaştırdığımız bir etkinlikti bu. Ben son bir haftasını biliyorum, ama aylar öncesinden konuşulmaya başlandığını Facebook yorumlarından hatırlıyorum.
Etkinliğe ev sahipliği yapan ve bizim bilinçlenmemiz için dil döken, uğraşan dernek yöneticilerine ve kas hastalıklarının verdiği onca zorluklara rağmen canla başla çalışan başta Bahtiyar olmak üzere tüm sevgili arkadaşlarımıza nacizane teşekkür ediyorum.
Etkinlikte ilk önce katılımcı arkadaşlar kısaca kendilerinden bahsettiler. Edirne’den, Tokat’tan gelen arkadaşlarımız vardı. 1998-99 yıllarından beri gıyaben hep birbirimizi tanıyorduk. Bir kaçımız yüzyüze daha önce görüşmüştük. Ama mesela eşim Hakkı Abi’yle ilk kez burda görüşmüş oldu. Henüz twitter, facebook yokken -ya da biz tanışmamışken- forumlarda, irc’lerde birbirimizi tanıyorduk. Yüzyüze tanışmak bugüneymiş.
Tanışmadan sonra dernek genel sekreteri Aynur Dik hanımefendi, daha sonra da yönetim kurulu üyelerinden Hakan Özgül Bey kas hastalıkları ile ve Kas Hastalıkları Derneği ile ilgili, projelerle ilgili bazı bilgiler verdiler. Elimden geldiğince bunları anında twitter‘a göndermeye çalıştım. Şahika Hanım telefonla oynadığımı sanarak “Hakkı Abi sana dik dik bakıyor, bırak şu telefonu” diye uyardı ama ben dinlediklerimi yazmakla meşguldüm. Böyle bir intiba uyandırdıysam özür dilerim :)
Aldığım notları kısaca buraya da geçeyim:
Twitter’a attığım notlar bu kadardı. Sonrasında çay ikramı oldu ve bilişimciler hem dernek yöneticileri ve dernek mensubu arkadaşlarla, hem de kendi aralarında hasret giderdiler, fotoğraflar çektiler. Koca koca fotoğraf makineleriyle çekilen o pozlardan mutlaka istiyoruz. İlgililere burdan duyuruyorum!
Toplantıdan sonra bir kaç arkadaş İBB Florya Sosyal Tesisleri’nde muhabbete devam etmek istedik. Çok da güzel oldu. Ne yalan söyleyeyim, FriendFeed’in müdavimi olmama rağmen orda düzenlenen toplantılara hiç kanım ısınmıyordu. Eski arkadaşlar olan bu samimi muhabbet çok hoşuma gitti.
Organizasyona vesile olan Bahtiyar Dilek kardeşime, Kas Hastalıkları Dernek yöneticilerine, ABD’den gelip onca işinin arasına bizi de katan sevgili Hakkı Abi’ye, Selçuk Yavuz’a, Muharrem Taç’a, İbrahim Özdemir’e ve tanıştığım diğer tüm sevgili arkadaşlara ve bilhassa ta Eskişehir’den sırf bu etkinlik için günübirlik gelen Arda Balkan Bey’e de ayrıca teşekkür etmek istiyorum..
Tekrarı nasip olursa çok seviniriz.
Dün akşam bir arkadaşımın Almanya’dan getirttiği iPhone 4S’i biraz kullandım. İlk işim Siri’yi incelemek oldu tabi. Benim İngilizce telaffuzum berbat ötesi olduğundan Siri pek bir şey anlamadı. Gerçi Türkçe anlasaydı da telaffuzumu beğenmeyebilirdi (Bizim uşaklardan Cemal’i bağla dedum da).
Geçen sene iPhone 4′ü de ilk kez bu arkadaşda görüp “patrondan önce kullandım” havasını atmak için hemen twitter, instagram, facebook, friendfeed ne kadar sosyal medya varsa paylaşmıştım :)) Ama patronum şuan Amerika’da olduğundan gelirken kendine bir tane alıp “hava öyle değil böyle atılır Hasan’cım” derse şaşırmayacağım :))))
Bu kullandığım iPhone 4S, Almanya’dan geldi. Hem de piyasaya çıktığı günün ertesinde. Yeni iPhone’nun ABD ile aynı anda piyasaya çıktığı bir kaç ülke varmış. Bu sene Almanya da bu kervana katılmış. Aynı anda almayı geçtim, bize aynı sene içerisinde gelsin ona da razıyım. Ama asıl razı olamadığım fiyatı!
Unlock olarak Almanya’dan alınan telefonun fiyatı yaklaşık 2100 TL. Bunu duyunca tepem attı tabi. Ülkemizde hepsiburada.com’da 2800′den satılmasına ayrı sinirlendim, geçen sene iPhone4′ü Turkcell’den kampanyasız olarak aldığım fiyattan bile ucuz olmasına ayrı sinirlendim.
Hülasa; yediğimiz kazığın haddi hesabı yok. Bu kazığı Apple mı atıyor? Almanya’ya 10 liradan Türkiye’ye 20 liradan mı satıyor? Yoksa Türkiye’deki Turkcell, Avea, Vodafon “bizimkiler pahalıyı ayrı sever” deyip onlar mı icabımıza bakıyor. GSM firmalarının hiç bir maliyeti olmamasına rağmen SMS’e ayda 30 TL fatura kestiklerine ve iMessage sayesinde Apple’ın en azından bu yükün bir kısmından kurtulmama vesile olduğuna bakarsam, bu küçük hesap bile kazığı nerden yediğimi açık açık gösteriyor.