Önyüzünde Backbone kullandığımız projeye eklenmesi gereken basit bir özellik var.
– Formda 12 tane alan vardır bunların *,*,* alanları zorunludur.
– Kullanıcı formu doldurur.
– Form geçerli ise listeleme sayfasına yönlendirilir.
– Geçersiz ise ilk hatalı input viewport’a gelir (scroll yapılır).
– Hem desktop hem mobilde aynı akış sağlanmalıdır.
Ne mobilde ne de masaüstü sürümde (responsive, esnek tasarım) form elemanının yerini tespit edip scroll yapamayacağımıza göre en güzel çözüm o elemanı aktif hale getirmek, yani “focus” event’i tetiklemek. Backbone size form yapısı sağlamıyor, fakat @powmedia’nın formu hemen hemen bütün ihtiyaçları karşılıyor.
Sistemde kullandığımız hiç bir kütüphaneyi abstract bir katman eklemeden kullanmıyoruz. Dolayısı ile kendi oluşturduğumuz Form, Backbone.Form u extend eden abstract katman. Yapımız AMD (Asynchronous Module Definition) ve dependency manager olarak RequireJS kullanıyoruz. Bunlarla birlikte Backbone bağımlılıkları olan jQuery, underscore gibi kütüphaneleri de sayfaya yüklememiz gerekiyor.
Çalıştığımız dizine RequireJS, Backbone ve BackboneForms u koyduktan sonra BackboneForms’dan kalıtım alan modulümüzü şöyle yazıyoruz:
Not: Ön bilgi vermekte fayda var, sayfamızda Backbone.Form github’daki powmedia’nın geliştirdiği formdur. Radiobox, selectbox gibi form elementleri editors namespace’i altında toplanmış. Siz de kendi form element türlerinizi geliştirebilirsiniz. Mesela yukarıdan gelen bir başka istekde bir sistemdeki tüm fiyat belirten inputların başına para cinsi, sonuna da “.00” şeklinde küsüratı sabitlememiz istenmişti, biz bunu Backbone.Form.editors.PriceField şeklinde tanımladık, formların şema tanımlamalarında da “type: ‘Text'” yerine “type: ‘PriceField'” yazarak basitçe çözdük.
Tüm form elementleri Backbone.Form.Field‘i extend ediyor. Backbone.Form.editors namespace’i altında da üst paragrafda bahsettiğim form eleman türleri var. Yani checkbox’ı override etmek için Backbone.Form.editors.Checkboxes, veya hidden input’u yeniden tanımlamak için Backbone.Form.editors.Hidden methodunu ezmeniz gerekiyor.
Bu blog yazısında bahsettiğimiz yer Backbone.Form.Field methodunu yeniden tanımlamak. Fakat ileriye dönük farklı ihtiyaçları da karşılayabilmek için biz burada Backbone.Forms’u da boş şekilde extend ettik.
/**
* Author: Irfan Durmus
* Date: Thu Apr 3 12:03:32 2014 +0400
*
* Customized Backbone Form Asynchronous Module in order
* to provide atuo-focus to first error field in Backbone Forms.
*/
define([
'backbone',
'backbone-forms'
], function(
Backbone,
BackboneForms
){
// we'll need this variable to count how many element we have in our form.
var counter,
// extend Backbone.Form element to implement new features in the future
Form = Backbone.Form.extend({});
Form.Field = Backbone.Form.Field.extend({
/**
* Overwrite the setError method of Backbone.Form.Field
* to focus first element when error occur
*/
setError: function(msg) {
Backbone.Form.Field.prototype.setError.call(this, msg);
this.hasError = true;
counter++;
this.findError();
},
/**
* Overwrite the clearError method of Backbone.Form.Field
*/
clearError: function() {
Backbone.Form.Field.prototype.clearError.call(this);
this.hasError = false;
counter++;
this.findError();
},
findError: function() {
var totalSize = _.size(this.form.schema),
focusField = null;
if (counter == totalSize) {
// set counter 0 to able to manage next form action;
counter = 0;
_.each(this.form.fields, function(field, key, fields) {
if (!focusField && field.hasError) {
focusField = field;
}
});
if (focusField) {
focusField.focus();
}
}
}
});
// return and use this extended form class instead of Backbone.Forms;
return Form;
});
Form’u post ettiğimizde, form her bir elemanı için, clearError veya setError methodlarını çağırıyor. Biz yine formun sağladığı methodları static olarak Backbone.Form.Field.prototype.clearError.call ile çağırarak normal davranışını bozmadık. Sonra hata olup olmadığını anlamak için hasError’u set ettik (sanırım formda zaten var bu, satırı silip denemedim). Her bir form elemanı için her iki method’dan birisi çağrıldığına göre counter++ ile iki methodda da artırım yapmamızın bir saknıcası yok. Son olarak da kendi tanımladığımız findError methodunu çağırıyoruz.
Not: Diğerleri nasıl çözüm üretmiş diye araştırdığımda ingilizce kaynaklarda bile object orient bir çözüm olmaması çok garip gelmişti.
İnternette konuyla ilgili bir sürü makale görürsünüz, sürüyle parametre, yok o codec bulunamadı, yok bunu kullanamazsın gibi hatalara sebep olabilir.
iPad için en basit ve yeterli yol;
ffmpeg -i myVideo.avi -s 1024x768 myVideoForiPad.mp4
800×600 ekrana sahip bir cihazınız varsa, 1024×768 i 800×600 olarak değiştirin.
Şöyle toplu dosya işlemi de yapabiliriz.
#!/bin/bash
counter=1;
addition=1;
for i in *.avi
do
ffmpeg -i $i -s 1024x768 "episode-"$counter".mp4"
counter=$(($counter + $addition));
mv $i "converted/"$i
done;
Prompt’un ne kadar önemli olduğunu (daha bir kaç yıl önce) farkettiğimde bi’ snippet yazmıştım, geçenlerde github’a push’lamıştım. “Unix like” bir sistemde prompt’da genelde hostname, username felan görürsünüz. Sistemci için “irfan@localhost:~$” gibi bir prompt iyi olabilir fakat bir developer için çok gereksiz veriler bunlar.
Yeterli olduğunu düşündüğüm için geliştirileceğini veya buna ihtiyaç duyulacağını düşünmemiştim, bu yüzden snippets repoma göndermiştim kodu. Bu gün Berker “Bunun sonuna svn de bulunduğumuz branch’i eklesek?” demesiyle bana bi aydınlanma geldi. (daha&helliip;)
Ne kadar oldu görüşmeyeli, 1 yıl oldu sanırım. Özlemişim seni blog’um. İnsanın karalayacak kendine ait bir yeri olması ne güzel bir şeymiş. Her şey çok değişti bir yıldır blog.. En son görüştüğümüzde istifa etmiştim ama sana söylememiştim sanırım. Her bitiş yeni bir başlangıçmış, işten ayrıldıktan sonra Tridor Software R&D de yaklaşık 1 yıl kadar çalıştım. Süper insanlarla çalıştık orada. Evet evet oradan da istifa ettim bi kaç ay önce. 1.5 ay kadar önce Rocket Internet GmbH ye başladım. Burada da süper insanlarla çalışıyorum. Sanırım nasipliyim ben blog. Her istifa daha güzel bir başlangıç sebebi oldu.
Kaza yaptım çöpçülere küfrettim, İstanbul’da kaldım trafiğe küfrettim. Eski kodları kurcaladım, işe yarayanları snippet yaptım, github‘lara koydum. jQuery Plugin’ler yazdım, onları da push’ladım. Üşenmedim dökümanlar yazdım. Mobile yazdım, push edemedim, bir Objective-C ye yaklaştım, bir javascript e döndüm. Arada sıkıştım kaldım zaman zaman.
Sende tar.gz’nin içine sıkışıp kaldın di mi bir yıl boyunca. Kusura bakma bi el atamadık senin dertlerine bu kadar zaman boyunca.
Ne zamandır yazmıyodum, yazasımda yoktu açıkcası.. Bu yıl eski dilde ÖSS ye girdim. Yeni isimleri bayaa bi çorba olduğu için aklımda kalmıyor pek. O kadar çok özel üniversiteden posta, sms ve e-posta olarak spam aldım ki resmen üniversiteler öğrencileri yolunacak kaz olarak gördüğünden emin oldum.
Topu topu 100-200 kontenjanı oluyor devlet okullarının. Özel üniversitelerde bunu fırsat bilip, yıllık sadece 20 bin TL den başlayan fiyatlarla diye reklamlar yapıyorlar.
İnsanlara spam yapacak zihniyette olan, tercih etmemeniz gereken bazı üniversiteler;
KTO – Karatay Üniversitesi Konya
Bahçeşehir Üniversitesi
Kapadokya Üniversitesi
Işık Üniversitesi
Doğu Akdeniz Üniversitesi
Beykoz Lojistik Meslek Yüksekokulu
Sms’leri silmesem, postaları yırtıp atmasam daha 20 tane daha yazabilirdim buraya. İşin diğer bir tuhaf yanı acaba ÖSYM adayların e-mail adreslerini ücret karşılığında bunlara satmışmıdır?
Kendime bir iyilik yaptım, iMac 27 inch 2.66 Ghz i5 Quad Core modeli standart konfigürasyonla aldım. 21 Ocak da ebay den siparişini verdim, 26 Ocak 2010 Salı günü elimdeydi. Makine öyle böyle değil moruk.. 2560×1440 çözünürlük görülmeye değer, quad core‘u hissediyosun. Almak isteyipde tereddütde olanlara diyebileceğim tek şey düşünmeden alabileceğiniz en ideal Macintosh modeli. Dell UltraSharp 27 inch IPS Panel in USA Fiyatı $929 ve Dell UltraSharp 30 inchin Türkiye fiyatı 2699$ + KDV olduğunu düşünün, ve tekrar iMac i düşünün. Bu arada 30 inch Dell 2560×1600 çözünürlük veriyor, ciddi bir fark yok iMac ile arasında. İkiside IPS panel LCD kullanıyor. (daha&helliip;)
444 03 34 ü aradım az evvel. 6 Aylık 29 TL hesap işletim ücreti + 35 TL kredi kartı üyelik ücreti, toplamda 64 TL paramı gasp etti. Bende paramı geri almak istiyorum. Sorun bu.
Alo garantinin telefon şubesi menüsü o kadar karışık ki, kimsenin yolunu bulabildiğini sanmıyorum.
Yaklaşık 4 kez menü ile boğuştuktan sonra, kredi kartımı kaybettim tuşuna bastım ve bi insan evladı çıkıp bana 343 ü tuşlamam gerektiğini söyledi, tuşladık.
Sonra biri çıktı 43 ü tuşla dedi, onu da tuşladık.
Sonra ki tip 12122 yi tuşla dedi onu da tuşladık. Aralarda 20 şer dk bekleme süresi var gecenin 3 ünde.. Gündüz bu sürenin ne kadar uzayabileceğini tahmin bile edemiyorum. Neyse listeye devam.
Sonraki tip 26 yı tuşlamamı söyledi, onu da yaptık.
Sonra telefon kapandı.
Bu da geçen sürenin ekran görüntüsü : (daha&helliip;)
2009 Haziran – Temmuz kullanım oranım aşağıda görüldüğü gibi. Sanırım biraz abartmışım -) Ağustosun daha başındayız ki 12 GB bile olmuş. Kotalı kullananlar nasıl başa çıkıyorlar anlam veremiyorum.
Az çok bilişim dünyasıyla ilgiliyseniz bu rapora mutlaka ama mutlaka gözatın. Türkiye’deki bilişim çalışanlarının problemlerini çok güzel bir şekilde ortaya koymuş.
EMO Bilgisayar Mühendisliği Meslek Dalı Ana Komisyonu tarafından hazırlanan Bilişim Çalışanları Anketi’nin sonuçları yayınlandı. 483 bilişim çalışanının katıldığı anket, bilişim çalışanları ve sektör hakkında önemli bilgiler veriyor.
Bilindiği üzere süper hızlı internet sağlayıcımız, saçma kanunlar sayesinde bize olur olmaz yasaklar uygulamakta. Daha önce Youtube DNS ve IP adresleri diye bir yazı yazmıştım. Bu sefer, balık yemesini değil balık tutmasını yazacam -P Hatta çok abartıp, çok başlangıç düzey yazacağım, neyi nasıl yapacağınızı biliyorsanız, sadece IP adreslerini almak için yazının doğrudan sonuna gidebilirsiniz.
The Pirate Bay torrentlerini bir şekilde edinseniz bile, torrent istemciniz hata kodu döndürebilir. Aşağıdaki ayarları yaptıktan sonra, hem The Pirate Bay a sansürlere takılmadan girebilecek, hemde sıkıntısız torrent indirebileceksiniz.
Bilindiği üzere TTNet’in sansür uygulamasında yaptıkları şey sadece yasaklamak istedikleri sitenin IP adreslerini DNS sunucularından kaldırıp, yasaklandığına dair uyarı çıkan sayfaya yönlendirmek. Her bilgisayar DNS çözümlemesinde önce kendi hosts dosyasına bakar, eğer hosts dosyasında bir alan adı için bir host tanımlanmışsa, öncelikle o hostu tercih eder, tanımlanmamışsa sisteme tanımlı olan DNS sunucusuna aradığı hostu çözümlemesini ister.