... ipucu Kategorisi

MySQL’de bozuk view’ların detayını görmek

Cuma, Aralık 9th, 2011

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”;

Group Concat!

Pazar, Aralık 4th, 2011

İ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

Form’u sayfadakinden farklı bir charset ile göndermek

Salı, Eylül 27th, 2011

Hiç iso-8859-9 charsetinde hazırlanmış bir sayfadan utf-8′e göre hazırlanmış başka bir sayfaya form datası göndermeniz gerekti mi? Bize gerekti. Kütüphane web sitemiz biraz eski kalmış ve iso-8859-9 formatında hazırlanmış. Yeni kurulan kütüphane yazılımı ise utf-8′e göre hazırlanmış.  Web sitesindeki arama kutucuğuna “ağaç”,”şair”, “ırmak” gibi Türkçe özel karakter içeren kelimeler yazdığınızda karşı tarafa a?a?, ?air, ?rmak gibi abuk subuk karakterler gittiğinden aramalar sonuç vermiyordu haliyle.

Bu sorunu gidermek için önce utf8′e çeviren javascript fonksiyonlarını inceledim. Malesef bulduğum bir kaç tane fonksiyon sadece belli karakterleri düzeltiyordu.

Aramaları biraz daha derinleştirince formların accept-charset diye tam bu iş için hazırlanmış bir özelliği daha olduğunu öğrendim. Sayfanın charset’i ne olursa olsun form’a accept-charset=utf-8 yazabiliyormuşuz. Yazdım, fıstık gibi çalıştı. Fekaaat! Her zamanki gibi Internet Explorer bu özelliği desteklemiyor.

Neyse ki onun da çözümü varmış. Forma aşağıdaki öğeyi eklediğinizde sorun çözülüyor:

<input type=”hidden” name=”enc” value=”&#153;”>

YouTube Videolarına Önizleme Resmi

Salı, Eylül 27th, 2011

Web sitenizde video galeri yapmak ve bu hizmet için YouTube’dan yararlanmak istiyorsanız vidoların önizleme resimlerine ihtiyaç duyacaksınız. Aşağıdaki örnek url’leri kullanarak videoların önizleme imajlarına ulaşabilirsiniz. Videoyu verdiğiniz gibi imaj dosyasını da YouTube üzerinden verebilir ya da yazacağınız kodla sisteminize kopyalayabilirsiniz. O size kalmış:

Örnek YouTube videosu: http://www.youtube.com/embed/4rb8aOzy9t4

Önizleme imaj dosyası yolu:

http://img.youtube.com/vi/4rb8aOzy9t4/1.jpg

http://img.youtube.com/vi/4rb8aOzy9t4/2.jpg

http://img.youtube.com/vi/4rb8aOzy9t4/3.jpg


MacosX İkinci Monitörde Dock ve Menü Kullanmak

Pazar, Mart 27th, 2011

Henüz 6 aylık olan Mac Mini’miz bugün GG’de yeni sahibine kavuştu. İş böyle olunca Mac Book Air’i büyük monitöre bağlamak ve konfigüre etmek lazım oldu. Miniport-VGA adaptörü sayesinde ikinci monitör problemsiz çalıştı fakat menü ve dock küçük ekranda kaldı. Bu can sıkıcı durum çok şükür fazla uzun sürmedi. Meğer “System Preferences / Displays” ekranında orta tab’da yer alan “Arrangement” sadece monitörlerin hizasını değil, dock ve menünün nerede olacağını da ayarlamamıza yarıyormuş. İnternette yabancı bir sitede nasıl yapılacağını gösteren videoyu izlemeseydim hayatta aklıma gelmezdi. Yandaki ekran çıktısında da görebileceğiniz üzere sağ taraftaki küçük ekran üzerindeki temsili menü çubuğunu fare ile sol ekrana sürükleyebiliyoruz. Böylece ana ekran soldaki büyük ekran olmuş oluyor.

Birden fazla Table View ile çalışmak

Çarşamba, Aralık 29th, 2010

Eğer iPhone uygulamamızda birden fazla Table View kullanmak istiyorsanız ve kodlar da birbirine karışmasın diyorsanız aşağıdaki adımları takip ediniz:

  • View Based Application taslağı ile yeni bir proje oluşturun. (Bu yazı için hazırladığımız örnek projemize “CokluTablo” adını verdik. Dosya isimlendirmeleri bu şekilde yapılacaktır.)
  • Resurce klasöründeki CokluTabloViewController.xib dosyasını Interface Builder ile açıp içine Library’den 2 tane TableView  nesnesi yerleştirin. (Resim 1)
  • Xcode’a geri dönüp Classess klasörüne sağ tıklayın ve şu adımları seçin: Add -> New File -> UIViewController Subclass (seçeneklerden sadece UITableViewController subclass seçili olsun). (Resim 2)
  • Dosya adı olarak Tablo1.m yazın (Tablo1.h da otomatikmen oluşacaktır).
  • Aynı işlemi tekrar yapın ve dosya adı olarak Tablo2.m yazın. (daha fazla…)

Web sayfasından videoları kolayca indirmek

Perşembe, Aralık 23rd, 2010

YouTube yada popüler video sitelerindeki videoları kolayca masaüstüne kaydetmek, hatta dilediğiniz formatta kaydetmek için Firefox’un harika bir plugini var: Video Download Helper. Videonun izlendiği sayfaya sağ tıkladığınızda DownloadHelper menüsünden “Ortam”ı tıkladığınızda indirmek istediğiniz videonun değişik ebatlardaki türevlerinden istediğinizi seçip doğrudan indirebilir yahut başka bir formata dönüştürüp kaydetmeyi seçebilirsiniz.

Kendi APN konfigürasyonunuzu kendiniz oluşturun (iPad 4.2)

Salı, Ekim 26th, 2010

Apple developer hesabına yılda belli bir parayı bağlayınca haybeye gitmesin diye ne kadar güncel sürüm varsa iPad’e kurup sonra da “aaa bu menü developer sürümünde yokmuş” diye yakınanlardan olmaya alışmıştım. Fakat binbir zahmetle kırpıp microsime çevirdiğim, içinde 1 yıllık 4GB hediye internet olan simkartımı iPad’de kullanabilmek için Hücresel Veri menüsünde APN ayarlarına sırf developer sürümü iOS kullandığım için sahip olamamak beni çileden çıkardı. Halbuki TURKCELL 3G yazısını görüyordum. Hücresel veri ağ’ım etkindi vs. Ama bir yere bağlanmaya kalktığımda “Hücresel Veri Ağı için servis bağlantınız yok” gibi bir ikaz geliyordu. Turkcell’i aradığımda yetkili bayan “Hücresel Veri Ağı ayarlarındaki APN menüsüne girmemiz lazım, başka türlü yardımcı olamam” deyip kesip atmıştı. Küçük bir google araştırması yapınca bu meselenin başka türlü de halledilebileceğini öğrendim. Sıcağı sıcağına paylaşayım istedim.

Öncelikle bu adresden iPhone Configuration Utility’i indirin (Uygulamanın Windows sürümü de burada ). iPad cihazınızı bilgisayarınıza bağlayın. Uygulamayı kurup çalıştırdıktan sonra sol baş kısımdaki LIBRARY menüsünün en altındaki “Configuration Profiles” seçeneğine tıklayın. Gelen sayfada önce soldan en üstteki “General” seçeneğine tıklayıp oluşturacağınız profile bir ad verin. Örneğin: turkcell_apn. Identifier bilgisine de örnekte görüldüğü gibi bir isim verebilirsiniz. Örn: com.turkcell.apn_profile. Sonra soldan en alttaki “Advanced” seçeneğini tıklayın ve sağ kısımdan Acces Point Name (APN) kısmına “internet” yazın, kullanıcı adı, parola vs kısımlarını boş bırakın  (TURKCELL için geçerli). Diğer şebekelerin bilgileri için buraya bakabilirsiniz.

Bu ayarları da oluşturdukdan sonra soldaki DEVICES sekmesinin hemen altında görülen iPad’inize tıklayın. Sağdan “Configuration Profiles” tabına tıklayıp biraz önce oluşturduğunuz konfigürasyon profilini “install” butonuna basın. iPad’inizde bu profili kabul etmeniz için bir pencere görüntülenecektir. Bu penceredeki kabul etme butonuna basarak işlemi sonlandırın. Sonra ver elini 3G ile internet…

Ilgili resimler sırasıyla aşağıdadır…

XCode’da Kod Tamamlama

Pazar, Ağustos 29th, 2010

XCode’un yapısı çok hoşuma gitmekle beraber diğer IDE’lere nazaran bir kusuru olduğunu düşünüyordum. Kod yazarken sizi zahmetten kurtarmak için en yakın ihtimali önceden sizin yazmak üzere olduğunuz ifadeye soluk bir renkle tamamlıyor. Siz “hah buydu” diyorsanız “tab” tuşuna basıp ifadeyi yazmış gibi oluyorsunuz, “yok bu değildi” diyorsanız yazmaya devam ediyorsunuz. Siz yazdıkça o en yakın ihtimali değiştirip önünüze koyuyor. Gayet iyi bir özellik ama diğer ide’lerde bu özellik daha gelişmiş oluyor. Genelde siz yazmaya başlar başlamaz, mesela değişkeninizi yazdıkdan sonra “.” işaretini koyar koymaz bir combo-box (aşağı açılır menü) çıkar ve siz orda tüm yazabileceğiniz ihtimalleri görürsünüz. Benim gibi acemi bir Objective-C geliştiricileri için XCode böyle bir özellik olması harika olurdu… Derken… Meğer varmış! Tesadüfen ifadeyi yazıp “.” koydukdan sonra ESC tuşuna basmasam görmeyecektim. Bir ömür böyle gidecektim. Ah Steve! İlla farklı olacaksın değil mi!

Yeni XCode ile Eski Sürüm iPhone’lar için Uygulama Yazmak

Pazar, Ağustos 29th, 2010

XCode’nizi güncellediğinizde Overview menüsünden eski sürüm iPhone’ların kalktığını görünce ümitsizliğe düşmeyin. XCode ekranında projenizin ana dosyasına çift tıklayarak Project Info penceresini açın. En üstteki Build sekmesine tıklayıp arama alanına “deploy” yazın. Gelen listede “IPhone OS Deployment Target” seçeneğini göreceksiniz. Burada istediğiniz iPhone sürümünü işaretleyebilirsiniz. Böylece eski iPhone cihazınıza uygulamayı gönderip testlerinizi yapmaya devam edebilirsiniz. Uygulamayı yayınladığınızda da eski sürüm iPhone’ler problem yaşamazlar.