არქივი September, 2009

Code.ge Presents: Internet Explorer 6 Must Die!

კიდევ ერთხელ მოგესალმებით ყველას. ამჯერად წარმოგიდგენთ ერთ მინი პროექტს რომლის განცხორციელებაც დაგეგმილი მქონდა გასული წლის დეკემბერში მაგრამ გარკვეულ თუ გაურკვეველ მიზეზთა გამო ვერ გამოვნახო სულ რამდენიმე საათი რათა ამ იდეისთვის ხორცი შემესხა :D . თუმცა რამდენიმე დღის წინ არსაიდან აღმოცენებულმა Google – ს პროექტმა Chrome Frame კვლავ გამიღვიძა ამის სურვილი.

პროექტი Internet Explorer 6 Must Die! მიმართულია ინტერნეტის მომხმარებელთა შორის Internet Explorer 6.0 – ის შემცირებისა და ამ ბრაუზერის სიკვდილის( :D ) დასაჩქარებლად. მიუხედავად ყველაფაფრისა ამ ბრაუზერს ინტერნეტ ბაზრის 25% უკავია რაც ყოვლად დაუშვებელი და მიუღებელია, მითუფრო რომ Microsoft – მა ბოლო წლების მანძილზე გამოუშვა ორი, გაცილებით უკეთესი ბრაუზერი Internet Explorer 7 და Internet Explorer 8.

Internet Explorer 6 Must Die! არის მცირე ზომის სკრიპტი, რომელიც უნდა ჩასვათ თქვენს ვებ გვერდში. ხოლო თუ მომხმარებელი თქვენს გვერდს გახსნის Internet Explorer 6 – ის მეშვეობით დაინახავს მსგავს შეტყობინებას:

Picture 16

ნაჩვენები შეტყობინება მთლიანად დაფარავს გვერდს ისე რომ მომხმარეელი მხოლოდ გამჭვირვალე ფონის მიღმა შეძლებს გვერდის კონტენტის დანახავს. მომხმარებელს შეუძლია არჩევანი გააკეთოს და ძირითადი 6 ბრაუზერიდან აირჩიოს ერთერთი.

ჩემის აზრით თითოეული ჩვენგანის აქტიურობა და მცდელობა იმისა რომ თუნდაც რამდენიმე ერთეულით შევამციროთ Internet Explorer 6 გარკვეული დროის შემდეგ მნიშნველოვან შედეგს გამოიღებს. ეს კი პირველ რიგში იმ ადამიანებისთვის არის მნიშნვნელოვანი რომლებიც ქმნიან ვებ საიტებს/აპლიკაციებს და რომლებიც უამრავ დროს ხარჯავენ Internet Explorer 6 – თან გაუთავებელ ბრძოლაში.

პროექტის საწყისი კოდი განთავსებულია GitHUB – ზე. მისი გამოყენებისათვის საკმარისია გადმოწეროთ სკრიპტის ბოლო ვერსიის zip არქივი შემდეგი მისამართიდან: http://github.com/ioseb/ie6mustdie/downloads.
გახსნათ არქივი თქვენთვის სასურველ დირექტორიაში ხოლო თქვენს ვებ გვერდში BODY ტეგის დახურვამდე მიუთითოთ შემდეგი JavaScript კოდი:

1
<script type="text/javascript" src="path/to/ie6mustdiefolder/ie6mustdie.js"></script>

დანარჩენს კი სკრიპტი თავად გააკეთებს!

LinGEO – Now on iTunes!

Picture 14 აღესრულა! დღეს დილიდან ლაშამ ძალიან კარგი ამბავი შემატყობინა, ჩვენმა აპლიკაციამ Apple – ს კაბალური შემოწმების პროცესი წარმატებით გაიარა და დღეიდან უკვე LinGEO ოფიციალურად არის დამატებული Apple AppStore – ში, შესაბამისად ვისაც გაქვთ iTunes ანგარიში თამამად შეგიძლიათ გადმოწეროთ აპლიკაცია და დააინსტალიროთ თქვენს iPhone – ზე. კიდევ ერთხელ განასკუთრებული მადლობა ლაშას აპლიკაციის დასრულებისა და მისი გაუმჯობესებისათვის, ასევე იმ რთული პროცესის წარმატებით გავლისათვის რასაც აპლიკაციის AppStore – ში განთავსებას ახლავს თან! ასევე დიდი მადლობა Toto – ს შესანიშნავი რჩევებისა და გაუმჯობესებებისათვის და გიორგი(Flyer) კვიჟინაძეს ლოგოს შექმნისათვის!

ტეგები: , ,

Google Chrome Frame

რამდენიმე დღის წინ Google – მ გაახმაურა თავისი ახალი პროექტი სახელად Google Chrome Frame. ეს არის პლაგინი InternetExplorer – ისთვის რომელის ინსტალაციის შემდეგაც საიტები თუ მათ გააჩნიათ შესაბამისი META ტეგი, ჩაიტვირთებიან არა IE – ს ძრავის არამედ Google Chrome – ს ძრავის მეშვეობით. ეს ნიშნავს იმას რომ ყოველგვარი არათავსებადობის პრობლემა(რომელსაც 99% შემთხვევებში იწვევს IE) საერთოდ აღარ შეაწუხებს მომხმარებელს. როგორც აღმოჩნდა გუგლის ეს ნაბიჯი განპირობებული იყო მისი ახალი პროდუქტის – Google Wave გამო რომელიც ხელმისაწვდომი მომავალი კვირიდან გახდება. საინტერესო არის ის, რომ, გუგლმა IE – ს ყველა ვერსიის მხარდაჭერაზე განაცხადა უარი რადგანც ამ ბრაუზერებს არ აქვთ JavaScript – ისა და HTML5 – ის ახალი შესაძლებლობების მხარდაჭერა.

cf-in-ie

მაგრამ Wave – ს გამო შექმნილი პლაგინის გაოყენებაში არანაირად არ ვართ შეზღუდული და იგი შეგვიძლია გამოვიყენოთ ნებისმიერი ვებ საიტისთვის, რისი მაგალითიც არის ჩემი ბლოგი :) თუ ამ გვერდს გახსნით IE6 – ის მეშვეობით მაშინათვე დაინახავთ Google Chrome Frame – ს ინსტალაციის შემოთავაზებას და იმ შემთხვევაში თუ დააინსტალირებთ პლაგინს თქვენს კომპზე არსებული IE6, IE7 და IE8 ავტომატურად იმუშავებს Chrome Frame რეჟიმში :) :)

ტექნიკურად ეს საკითხე გვარდება ძალიან მარტივად. პირველ რიგში საიტის HEAD სექციაში უნდა დავამატოთ შემდეგი META ტეგი:

1
<meta http-equiv="X-UA-Compatible" content="chrome=1" />

თუ Google Chrome პლაგინი უკვე დაინსტალირებული აქვს მომხმარებელს ყველა ვერსიის IE იმუშავებს Google Chrome – ს ძრავით ისე რომ ამის შესახებ მომხმარებელს არაფერი ეცოდინება. სრულად »

ტეგები: , , ,

LinGEO ინგლისურ/ქართული ლექსიკონი iPhone – სთვის

Screen shot 2009-09-22 at 7.01.54 PMროგორც იქნა ერთ წლიანი პაუზის შემდეგ ჩემს მიერ დაწყებულმა და შემდგომ მიტოვებულმა პროექტმა – LinGEO შეიძინა პროდუქტის სახე და ახლა უკვე მომხმარებლებს შეუძლიათ მისით სარგებლობა.

პირველად ეს პროექტი გავახმაური ერთი წლის წინ როდესაც მას ჯერ კიდევ ერქვა LinGO, მას შემდეგ ვეღარ გამოვნახე შესაბამისი რესურსი რომ მიმეყვანა ეს პროექტი ბოლომდე. სულ ახლახანს როდესაც კვლავ გადავწყვიტე აქტიური ბლოგერობა და ზოგადად ოპენ სორს პროექტებზე მუშაობის გაგრძელება, გავხსენი ამ პროექტის საწყისი კოდიც(იხ. LinGEO on GitHUB). ამის მიზეზი ერთის მხრივ იყო ჩემი სურვლი რომ დამესრულებინა პროექტი, ხოლო მეორეს მხრივ ჩემი კოლეგისა და მეგობრის ლაშა დოლიძის დაინტერესება.

კოდის გახსნიდან სულ რაღაც სამი კვირის შემდეგ სახეზე გვაქვს უკვე დასრულებული პროექტი. ამისათვის განსაკუთრებულ მადლობას ვუხდი ლაშას რომლის უშუალო დამსახურებაც არის ამ პროექტის საბოლოო პროდუქტად ქცევა. გარდა უმნიშვნელოვანესი პროგრამული დეტალების დახვეწისა მან განათავსა პროდქუტი Apple – ს App Store – ში(პროგრამა ამჯერად მოლოდინის რეჟიმშია და ველით დასტურს), ასევე შექმნა Cydia – ს რეპოზიტორი არაოფიციალური iPhone – ს მომხმარებელთათვის.

ასევე მინდა მადლობა გადავუხადო Toto – ს შესანიშნავი კომენტარებისა და შენიშნვებისათვის რომელიც გააკეთა ამ პროდუქტთან დაკავშირებით.

ტეგები: , , , ,

Java: variables, stack and heap

პრეზენტაცია Java – ს ცვლადების და მათთან დაკავშირებული საკითხების შესახებ.

ტეგები: , ,

JavaScript: String.replace()

რამდენიმე წლის წინ დავწერე პოსტი JavaScript – ით DOM ელემენტის სტილებთან მუშაობის შესახებ. ბრაუზერებს შორის სხვაობიდან გამომდინარე(კერძოდ კი IE – ს განსხვავებული მიდგომის გამო) პრობლემის გვერდის ასავლელად დავწერე ქვემოთ ნაჩვენები კოდი:

1
2
3
4
5
6
7
8
9
10
function getCamelCase(string) {
    var tokens = string.split('-');
    if (tokens.length > 1) {
        for (var i = 1; i < tokens.length; i++) {
            tokens[i] = tokens[i].substring(0, 1).toUpperCase() + tokens[i].substring(1).toLowerCase();
        }
        string = tokens.join('');
    }
    return string;
}

კოდის ერთადერთი დანიშნულებაა ტირეებიანი CSS ატრიბუტების მაგ. border-left-color, background-color გადაყვანა ე.წ. Camel Case ფორმატში ანუ borderLeftColor, backgroundColor და ა.შ.

დღეს კოდის წერისას იგივე პრობლემა მექანიკურად გადავჭერი სხვა უფრო მოხდენილი და რაც მთავარია გაცილებით მცირე ზომის კოდის მეშვეობით:

1
2
3
4
5
6
7
8
var str = "some-test-string";
str.replace(/-([\w])/gi, function(a1, a2) {
    return a2.toUpperCase();
});

//კოდის შესრულების შემდეგ
//სტრიქონი "some-test-string"
//გარდაიქმნება შემდეგნაირად: "someTestString"

დამეთანხმებით რომ თვალსაჩინო სხვაობაა :D როგორ მუშაობს ეს კოდი? პირველ რიგში შეგახსენებთ თავად String ობიექტის replace() მეთოდის სიგნატურას:

str.replace(regexp|substr, newSubStr|function[, Non-standard flags]);

ანუ replace() მეთოდს მეორე პარამეტრად ახალი, ჩასანაცვლებელი სტრიქონის ნაცვლად შეგვიძლია გადავცეთ ქოლბექ ფუნქცია რომელიც დააბრუნებს დამუშავებულ სტრიქონს, ხოლო ეს დაბრუნებული სტრიქონი თავის მხრივ გამოყენებული იქნება რეგულარული გამოსახულების მიერ ნაპოვნი შესატყვისის ჩასანაცვლებლად.

საინტერესოა ასევე თუ რა პარამეტრებს გადასცემს replace() მეთოდი ქოლბექ ფუნქციას. გადასაცემი პარამეტრების რაოდენობა ცვალებადია და დამოკიდებულია მთელ რიგ ფაქტორებზე. მაგალითად ჩემს მიერ ნაჩვენებ მაგალითში ფუნქციას გადაეცემა ოთხი პარამეტრი, კერძოდ კი ფუნქცია გამოიძახება ორჯერ შემდეგი პარამეტრებით:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//პიველი დამთხვევისათვის ანუ "-t"
function(
  "-t",  //რეგულარული გამოსახულების მიერ ნაპოვნი სტრიქონი სრულად
  "t",    //დამაჯგუფებელ ფრჩხილებში მოთავსებული შედეგი
  4,     //პოზიცია რომელზეც მოხდა პირველი დამთხვევა
  "some-test-string" //სრული სტრიქონი
);

//მეორე დამთხვევისათვის ანუ "-s"
function(
  "-s",  //რეგულარული გამოსახულების მიერ ნაპოვნი სტრიქონი სრულად
  "s",    //დამაჯგუფებელ ფრჩხილებში მოთავსებული შედეგი
  9,     //პოზიცია რომელზეც მოხდა პირველი დამთხვევა
  "some-test-string" //სრული სტრიქონი
);

ნაჩვენები კოდიდან თვალსაჩინოა სავარაუდო პარამეტრების რაოდენობა, თუმცა მნიშვნელოვანია შემდეგი დეტალების გათვალისწინება, ქოლბექ ფუნქციას:

  • პირველ პარამეტრად ყოველთვის გადაეცემა რეგულარული გამოსახულების მიერ ნაპოვნი სრული შესატყვისი;
  • ბოლო პარამეტრად ყოველთვის გადაეცემა სრული სტრიქონი რომლშიც განხორციელდა გარკვეული შესატყვისის ძიება;
  • ბოლოდან მეორე(ბოლოს წინა) პარამეტრად ყოველთვის გადაეცემა ნაპოვნი შესატყვისის პოზიცია.
  • თუ რამდენი პარამეტრის გადაცემა მოხდება პირველსა და ბოლო ორ პარამეტრს შორის დამოკიდებულია რეგულარულ გამოსახულებაში გამოყენებული დამაჯგუფებელი ფრჩხილების რაოდენობაზე(ჩემს მიერ ნაჩვენებ მაგალითში ასეთი პარამეტრი ერთია რადგან მხოლოდ ერთი დამაჯგუფება მაქვს გამოყენებული);
  • replace() მეთოდი გამოიძახებს ერთხელ თუ რეგულარული გამოსახულების ბოლოს არ გვაქვს მითითებული “g” ანუ გლობალური მოდიფიკატორი, ან გამოიძახებს იმდენჯერ რამდენი დამთხვევაც მოხდება კონკრეტული შესატყვისისათვის(ნაჩვენებ მაგალითში გამოძახება მოხდება ორჯერ).

enjoy B-)

ტეგები: ,