Tuesday, November 2, 2010

PhoneGap Accelerometer Test with Box2D JS and IPhone



TR


Gecenlerde keşfettiğim Phonegap sayesinde iphone için ilk uygulamamı yaptım. PhoneGap ın özelliği ise, klasik web uygulamalarını native fonksiyonlar ile birleştirmek...
Videoda Accelerometer sayesinde yerçekimini her zaman aşağıya ayarlıyan basit bir fiziksel dünya ve 2d objeler var. Box2D JS ile hazırladım demoyu, Umarım fikir verecek, detaylı performans testlerini daha sonra oluşturabilirim. Zamansızlıkdan dolayı ancak bunu çıkarabildim.



EN

In this video, there is a test for phonegap with Accelerometer. Demo is showing a 2D physical world and some objects. With Accelerometer, I defined demo's gravity direction and real world gravity direction are same. It gives ~90fps with One object with no move. When objects have movement it gives ~17fps.

Sunday, July 11, 2010

Google interview

Şubat ayının başlarında gördüğüm şu tweet http://twitter.com/bruce_at_google/status/8614681120 ile başladı 3,5 aylık Google serüvenim. Daha önce kendime güvenip de başvuruda bulunmamıştım Google a. Fakat GWT deyince akan sular durdu. Tweet'in çoşkusuyla hemen Bruce Johnson'a(GWT nin babası) mail attım. Bana gönderdiği cevapda ise en yakın zmnda bir işe alım elemanın benimle iletişime geçeceğini söylemişti. Dediği kadar yakın olmasada şubat ayının sonunda aşağıdaki mail i aldım...

Thank you for your interest in Google. I'd like to set up a time for us to
discuss Google career opportunities and your qualifications. Please let me
know a couple of days and times when you would be available to speak with me
as well as the best phone number for me to contact you. I'll email you back
to confirm a time that also works for me.
I hope to hear from you soon!
Cheers,

1-2 hafta içerisinde uygun olduğum zamanları söyledim. Ne tür sorular geleceğini ve nasıl bir görüşme olacağını sordum? Teknik bir görüşme olmayacağını söyledi ve genel olarak senin ve google ın planları üzerine bir konuşma yapacağımızı belirtti.Yanlız belirttiğim 1-2 hafta içinde konuşmayı gerçekleştiremedik. Toplantılar ve diğer işleri olduğunu söyledi...

Nisan ortasına kadar sarkdı 1. görüşme. Geçen 1,5 aylık süre sabır sabır modunda ve ingilizcem konuşma için yeterli olacakmı kuşkusuyla geçti. En sonunda ilk görüşmeyi yaptık. İngilizce konusundaki korkularım boşa çıktı :), gayet iyi geçti görüşme. Bana üzerinde çalıştığım projeler hakkında sorular sordu. Gelecek ile ilgili planlarımı sordu. Görüşmenin sonunda teknik görüşme için ingilizcemin yeterli olmayacağını düşündüğümü belirttim. Bana Türkçe bir görüşme ayarlayabileceğini ve mail ile 2. görüşmenin tarihini belirleyeceğimizden bahsetti.

Yeniden uzun bir bekleyiş başladı. Çünkü bir türlü yanıt alamıyordum maillerime konu hakkında. Yaklaşık 1 ay sonra 2. görüşme için mail aldım. 1. görüşmedeki eleman Türkçe bir görüşme ayarlayamadığını söyledi. Hayellerimi yıktı :P.

Soruları paylaşmıyacağım, sadece fikir alabileceğiniz şekilde yazıcam. Görüşmenin başında hangi programlama dilinde daha iyi olduğumu sordu. Ve bende Java dedim. Bana collection frameworkden 2 farklı soru sordu. Sorulanların tarzı; hashmap ile treemap in arasındaki fark nedir gibiydi... Sorulanlar arasında bir konu hakkında hiçbir bilgim yokdu. Bilmediğimi söyledim ve fikir yürüteceğimi söyledim... Görüşmeden sonra sorunun cevabını araştırdığımda çok yakın bir şey söylemiş olduğum için sevindim :). Görüşmenin 2. kısmı ise google docs real time modda programlama yaparak geçti. Algoritmalar üzerineydi bu sorular. Sıralanmış bir dizenin, bazı değişiklikler sonrasında arama yapılması şeklindeydi 2 soruda. Basit çözümler yaptım bu sorulara. Fakat daha hızlı sonuç getirmesi için optimize etmeye çalışırken yakında zamanımızın dışına çıkacağımızı söyledi. Ve optimize işlemlerini bitiremeden zaman bitti :(daha fazla çalışmalıymışım:) Nasıl bir şey yapmak isteğimi anlattım ve görüşmeyi sonlandırdık.

Yaklaşık 1-2 hafta sonrada bir teselli maili aldım:) Mailde, Gwt takımı için uygun bulunmadığım ve bana başka iş fırsatları için tekrar başvuruda bulunmamı söylüyordu mail. Tamamen beklediğim bir sonuç. Çünkü derleyiciler ve temel kütüphaneler hakkında çok az bilgim var. Ve algoritma konusunda daha ileriye taşımam gerekiyor kendimi...

Sonuç olarak söyleyeceğim şeyler;
  • yaratıcılık ve iyi iş konusuna önem verdiklerini (kısacası bnmle görüşmeyi istemelerinin tek sebebi olabilir oda gerçek zamanlı oyun projem:http://tr.im/iflagame)
  • google görüşmelerinden korkacak bişey olmadığı
  • görüşmelerin aralıklıklarının anlamsız derecede uzun olmasının can sıktığı
  • görüşmeye hazırlanmanın çok fazla bir katkısının olmadığını anladım. Çünkü zaten hazır olmak gerekiyor görüşmeler için. O yüzden 1-2 yıl sonra hala kendi işim hakkında bir girişim yapmamış olursam şansımı tekrar denicem...
Sizinle görüşmelere hazırlanırken kullandığım bazı bağlantıları paylaşayım.
http://www.topcoder.com/tc?module=Static&d1=tutorials&d2=alg_index
www.wiley.com/compbooks
http://labs.google.com/papers.html
http://code.google.com/edu/
http://www.youtube.com/watch?v=w887NIa_V9w
http://www.businessinsider.com/15-google-interview-questions-that-will-make-you-feel-stupid-2009-11
http://jiansnet.blogspot.com/2010/05/some-google-interview-questions.html
biraz eski ama fikir verebilir http://www.catonmat.net/blog/my-job-interview-at-google/
görüşmeden korkmuş insan tipi; http://www.businessinsider.com/my-nightmare-interviews-with-google-2009-11
umarım konu hakkında kafası karışık insanların bir parçada olsa işine yarayacak bir döküman olmuştur yazdıklarım. Umarım amacınıza ulaşırsınız ...

Friday, June 11, 2010

Translate Bookmarklet

http://translatebookmarklet.appspot.com/
bu adresden test durumundaki sözlük bookmarklet ine ulaşabilirsiniz. Göz atıp geri dönüş yaparsanız sevinirim.
özellikleri ise şöyle
-kullanıcı ya göre son girilen dil ayarlarını kaydetmek.
-otomatik olarak mouse ile secilen metinin cevirmesi.
-yakında history kısmı eklicem...


Google Translate Bookmarklet from kerem on Vimeo.

Thursday, January 14, 2010

Making a bookmarklet with GWT 2.0 and Cross domain request

Last week, I did not found any tutorial, when I was researching the bookmarklet with gwt. and I decided to make this tutorial. Because GWT allows you to write client-side applications in Java and deploy them as JavaScript and it is protecting your life about cross browser problems.

Before you begin


I assumed you have read getting started doc and cross-site doc of gwt. And applied them. When you finished cross-site doc, you need to change some parts of StockWatcher.java for converting it to a bookmarklet. Because StockWatcher example is placed in the rootpanel of the page. You need to replace it with dialogBox or something like that. Find the following code...

// Associate the Main panel with the HTML host page.
RootPanel.get("stockList").add(mainPanel);

and romeve it. Add a new dialog box before entry point method.

private DialogBox dialogBox = new DialogBox();

When you add the dialogBox, you need to add mainPanel to it at the end of onModuleLoad() method.

// Add a close button at the bottom of the dialog
Button closeButton = new Button("Close",
new ClickHandler() {
public void onClick(ClickEvent event) {
dialogBox.hide();
stocks=new ArrayList();// for stoping requests
refreshWatchList();
}
});
mainPanel.add(closeButton);
mainPanel.setCellHorizontalAlignment(closeButton,
HasHorizontalAlignment.ALIGN_LEFT);
dialogBox.setAnimationEnabled(true);
dialogBox.setText("StockWatcher Bookmarklet!");
dialogBox.setWidget(this.mainPanel);//mainPanel is added here
dialogBox.center();
dialogBox.show();//show dialog box at the begining


Compiling the Gwt codes

If you are using eclipse, right click your project->Google->GWT Compile and select the output style pretty. If you are not using eclipse check here and compile the project with pretty outputStyle.



After compiling you will find js code of the project under 'war' file.


bookmarklet.js

This Javascript code detects the browser and loads which gwt compiled code will work with user's browser.

gwtBookmarklet= {};

gwtBookmarklet.jsHref;

//red codes must be rewriten by you for defing which gwt output code is compatible with bookmarklet users browser.
gwtBookmarklet.gecko='4A9AF23F20B91CA17681F1D617F98C01';
gwtBookmarklet.gecko1_8='4A9AF23F20B91CA17681F1D617F98C01';
gwtBookmarklet.opera='89761C96674DDF7C636AA9CBAED8746A';
gwtBookmarklet.safari='93BCE8C4ABFD675A4CA66B5F11783FA0';
gwtBookmarklet.ie6='B3D0C2CF46B711E114C99611B637F431';
gwtBookmarklet.ie8='B3D0C2CF46B711E114C99611B637F431';

//reporsitory address for your compiled codes
gwtBookmarklet.baseLocation="http://gwtbookmarklet.appspot.com/";

//CSS file address
gwtBookmarklet.cssHref=gwtBookmarklet.baseLocation+"stockwatcher/gwt/standard/standard.css";

gwtBookmarklet.loadJsCssFile=function(filename, filetype){
if (filetype=="js"){ //if filename is a external JavaScript file
var fileref=document.createElement('script')
fileref.setAttribute("type","text/javascript");
fileref.setAttribute("src", filename);
}
else if (filetype=="css"){ //if filename is an external CSS file
var fileref=document.createElement("link")
fileref.setAttribute("rel", "stylesheet");
fileref.setAttribute("type", "text/css");
fileref.setAttribute("href", filename);
}
if (typeof fileref!="undefined")
document.getElementsByTagName("head")[0].appendChild(fileref)
};


gwtBookmarklet.detectBrowser=function(){
var ua = navigator.userAgent.toLowerCase();
var makeVersion = function(result){
return parseInt(result[1]) * 1000 + parseInt(result[2]);
}
;
if (ua.indexOf('opera') != -1) {
return gwtBookmarklet.opera;
}
else if (ua.indexOf('webkit') != -1) {
return gwtBookmarklet.safari;
}
else if (ua.indexOf('msie') != -1) {
if (document.documentMode >= 8) {
return gwtBookmarklet.ie8;
}
else {
var result_0 = /msie ([0-9]+)\.([0-9]+)/.exec(ua);
if (result_0 && result_0.length == 3) {
var v = makeVersion(result_0);
if (v >= 6000) {
return gwtBookmarklet.ie6;
}
}
}
}
else if (ua.indexOf('gecko') != -1) {
var result_0 = /rv:([0-9]+)\.([0-9]+)/.exec(ua);
if (result_0 && result_0.length == 3) {
if (makeVersion(result_0) >= 1008)
return gwtBookmarklet.gecko1_8;
}
return gwtBookmarklet.gecko;
}
window.alert("unkown browser");
return 'unknown';
};

gwtBookmarklet.init = function() {
gwtBookmarklet.jsHref=gwtBookmarklet.baseLocation+gwtBookmarklet.detectBrowser()+".cache.html";
gwtBookmarklet.loadJsCssFile(gwtBookmarklet.cssHref, "css");
gwtBookmarklet.loadJsCssFile(gwtBookmarklet.jsHref, "js");
};

gwtBookmarklet.init();

red codes must be rewriten by you for defing which gwt output code is compatible with bookmarklet users browser. For getting specific name of browser files open the stockwatcher.nocache.js find the code below.

if (!isHostedMode()) {
try {
unflattenKeylistIntoAnswers(['gecko'], '4A9AF23F20B91CA17681F1D617F98C01');
unflattenKeylistIntoAnswers(['gecko1_8'], '4A9AF23F20B91CA17681F1D617F98C01');
unflattenKeylistIntoAnswers(['opera'], '89761C96674DDF7C636AA9CBAED8746A');
unflattenKeylistIntoAnswers(['safari'], '93BCE8C4ABFD675A4CA66B5F11783FA0');
unflattenKeylistIntoAnswers(['ie6'], 'B3D0C2CF46B711E114C99611B637F431');
unflattenKeylistIntoAnswers(['ie8'], 'B3D0C2CF46B711E114C99611B637F431');
strongName = answers[computePropValue('user.agent')];
initialHtml = strongName + '.cache.html';
}
catch (e) {
return;
}
}

these red text are name of gwt compiled codes. apply them to bookmarklet.js with yours.


Clearing compiled browser specified files from Html tags

When you open files which are ending ".cache.html" extension. You will see some html tags in the codes. You need clear all of html code. the files must have only JS codes. Some of the codes:

<html><head><script>
</script></head><body><script><!--
--></script><script><!--
--></script></body></html>

and you should add init function caller at the end of ".cache.html" files.

init();// this function is representing gwt onModuleLoad() module.



Making bookmark link


<a href="javascript:(function(){
gwtbookmarklet=document.createElement('SCRIPT');
gwtbookmarklet.type='text/javascript';
gwtbookmarklet.src='http://gwtbookmarklet.appspot.com/bookmarklet.js';
document.getElementsByTagName('head')[0].appendChild(gwtbookmarklet); })();">GWTBOOKMARKLET!!</a>

The only important thing is full url path of the bookmarklet.js.


Test

GWTBKMLT&CROSS-DOMAIN drag and drop this link to your bookmarks and try it any page...


Bu dökümanın Türkçe'sine buradan ulaşabilirsiniz.

Monday, December 21, 2009

Bilgisayar Alırken Windows Seçmemekte Özgürsünüz

Bir çoğumuz dizüstü bilgisayar (notebook, netbook vb.) alırken satıcı firmaların içine Windows işletim sistemini yüklenmiş olarak sattıklarını biliyoruz. Bir yerde son kullanıcıya satış yapıldığını düşünecek olursak kullanımı (benim görüşüme göre) hâlâ en kolay ve en basit anlaşılır arayüze sahip işletim sistemi Windows. Bu yüzden kurulu olarak gelen bir işletim sistemi olacaksa Windows olması makûl oluyor.

Yine de profesyonel kullanıcının aldığı bilgisayara Linux dağıtımları gibi ücretsiz veya başk ücretli işletim sistemlerini yükleme isteği var ise bilgisayarı satın alırken farkında olmadan ödediği Windows lisans ücretini ödeyerek bilgisayarı alması zaten çok mantıklı değil. Linux Kullanıcıları Derneği (LKD) e-posta listesinden bildiriyorum:

“Pardus Kullanıcıları Derneği başkanı ve LKD üyesi bir avukat Tüketici Mahkemesine açtığı dava sonucu bilgisayar ile birlikte alınması zorunlu kılınmış olan Windows işletim sisteminin ederini faiziyle birlikte geri alma hakkını kazandı. [...] Bu davanın sonucu olarak özgür işletim sistemi kullanıcıları gibi yasal işletim sistemi lisanslarına sahip kullanıcılar dava açmak yerine, satıcı firmanın zorluk çıkarması durumunda, mahkemenin verdiği örnek karar ile tüketici heyetine başvurarak, masrafsız bir şekilde istemediği işletim sistemini iade ederek ederini geri alabilir. ”

Şimdi sırada farkında olmadan her bilgisayar alışında Windows lisansına 100$’a yakın (emin olmamakla beraber belki de daha fazla) para yatıran son kullanıcıyı bilinçlendirmek kalıyor. Ben de bu yazıyı okuyan blog sahibi arkadaşlardan özgür yazılımı destekleyenleri veya ülke ekonomisinin iyiliğini düşünenleri bloglarında bu konuyu dile getirmeye davet ediyorum.

NOT: Bilinçlendirme kampanyası içeren bu yazıyı bu notla beraber aynı şekilde blogunuzda/sitenizde kopyalayarak yayımlayabilirsiniz.


bnm kaynak: Ahmet Alp Balkan

Friday, October 23, 2009

Google Wave Vol 2

Wave in ruhu çok güzel gelmeye başladı. Şu videoya da bi göz atınız




Kaynk



?