კიდევ ერთი ლოდინი დასრულდა…

ბლა ბლა ბლა მიზეზების გამო ბოლო ერთი თვე გზაში იყო და ახლახანს ჩამოვა ჩემთან ის რაღაცა, რაზეც 9 თვის წინ მქონდა პოსტი (Gadgets from my wishlist). მაშინაც და შეძენამდე ერთი დღით ადრეც არ ვფიქრობდი რომ მაგას ავირჩევდი.. მაგრამ ბოლოს გადავწყვიტე რომ არც თუ ბევრი რამ მინდა.. უფრო სწორედ არაფერი მინდა ამდენი ხნის განმავლობაში (ამის გამოკლებით) და გამოვიწერე Wacom Cintiq 12wx.

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

ფანქარს 1024 დაჭერის (pressure) დონე აქვს და ამის გამო ძალიან გავს ნამდვილს. ერთადერთი ხმა არ აქვს :D ხატვის დროს..  არც დაყოვნების დროს შეამჩნევთ. ეკრანზეც ზუსტად იმ დროს დადის კურსორი, რა დროსაც ფიზიკურად ფანქარი.

ზედ არსებული shortcut ღილაკები ყველანაირად ხელს უწყობენ მომხმარებელს, რომ კომპიუტერის კლავიატურაზე არ მოუწიოთ ხელის გადაყოფა :D

პლანშეტის ეკრანი ცალკე მონიტორად უერთდება კომპიუტერს და უფრო დიდი სივრცეა ^^

ჯერჯერობით ნაკლი, რაც თვალში მხვდება, ბევრი კაბელები და ბლოკებია. ერთგან თუ ააწყობ, იმის მიგრაციას ერთი საათი უნდა :D  საერთო ჯამში კი იმაზე კმაყოფილი ვარ, ვიდრე შეიძლება :)

ეხლა მთავარია მოვიფიქრო, ლეკვას როგორ ვაჩვენო. თუ არა და მთის და მუჰამედის პრინციპით ვიმოქმედებ :D

wacom-copy

p.s. სურათს ხვალ დღის სინათლეზე გადავუღებ :)

კოდის წერის სიჩქარის მნიშვნელოვნად გაუმჯობესება

არა მარტო კოდის :)

ალბათ უმეტესი თქვენგანი უკვე იყენებს მას ან მის ალტერნატივას. ზოგიერთ IDE-ს ჩადგმული აქვს მისი შესაძლებლობები.

მე კი მხოლოდ დღეს ვნახე Nettuts+ საიტზე და უკვე შემიყვარდა. ლაპარაკია Texter პროგრამაზე.

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

არა მარტო ტექსტს ვაბამთ. შესაძლებელია მაკროსების წერაც. მაგალითად, თუ წინადადების ბოლოს გაგვახსენდა, რომ წინადადება <p></p> პარაგრაფის ტეგებში უნდა ჩაგვესვა, Texter-ს შეუძლია ისევ რაღაც წინასწარ განსაზღვრული shortcut-ით ეს ტეგები ჩაუსვას, თუ ამ shortcuts განვსაზღვრავთ მაკროსით: {HOME}<p> {END}</p>

ძალიან ზოგადად ვლაპარკობ, იმიტომ რომ ვფიქრობ ვიდეოში ყველაფერს დაწვრილებით ხსნის ჩემი ერთ-ერთი საყვარელი რედაქტორი – ჯეფრი ვეი. ვიდეო ამ ბმულზეა.

Hotstring-ის დამატება Texter-ში

Hotstring-ის დამატება Texter-ში

როგორც ჩანს LifeHacker-ის Texter-ის გარდა კიდევ არსებობს მისი მსგავსი პროგრამები, მაგრამ მე უკეთესი ვერ შევარჩიე. ამას კი ჯერჯერობით რაც ვუპოვე ერთადერთი ნაკლი უნიკოდია. არა მარტო ის, რომ უნიკოდი თვითონ პროგრამას არ ესმის, არამედ ხელსაც მიშლის, როცა სხვაგან ვწერ ქართულად და პროგრამის გათიშვა მიწევს.. მიუხედავად ამისა მაინც საშინლად მოსახერხებელია :D

უტოპია

პოსტი არქივიდან…

4746 by CrazyTob
4746 by CrazyTob

თბილისის ფორუმის ხშირი სტუმარი არ ვარ, მაგრამ ხანდახან წამიცდება ხოლმე მაინც ხელი და შევდივარ :D იმ დღესაც ერთი თემის სათაურმა მიიქცია ყურადღება: ადამი და ევას მერე უარესობისკენ რატომ ვითარდება ყველაფერი და რამე თუ გვეშველება როდისმეო..

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

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

არ ვიცი ასეთი ბუნება კარგია თუ ცუდი, მაგრამ ფაქტია, რომ ასეა :) და ფიზიკურად შეუძლებელია ისეთი გარემოს არსებობა, რომელიც ყველასთვის მისაღები იქნება..

მორალი: საჭიროა შეცდომებიც, საჭიროა სინანულიც, საჭიროა ტკივილიც, საჭიროა იმედგაცრუებაც :) იმიტომ რომ ესენი გვიბიძგებენ უკეთესობისკენ, სტიმულსაც გვაძლევენ რაღაც გაგებით, მთავარი გამოსავლის პოვნაა, გამკლავება : ) იმიტომ რომ ”რაც არ გვკლავს, გვაძლიერებს”…

Zend PHP Certification: PHP Basics, part 2

ორიოდ სიტყვას კიდევ ვიტყვი რიცხვით ტიპებზე, რადგან წინა პოსტში რაღაცეები გამოვტოვე.

Integer ტიპის ზომა პლატფორმაზეა დამოკიდებული.
32 ბიტიანი სისტემისთვის რიცხვი უნდა იყოს შუალედში -2^31 და 2^31-1
64 ბიტიანი სისტემისთვის -2^63 და 2^63-1

თექვსმეტობით (hexadecimal) წარმოდგენილი რიცხვისთვის ეს შუალედები განსხვავდება:
32 ბიტიანი სისტემისთვის 0-დან 2^31-1 -მდე
64 ბიტიანი სისტემისთვის 0-დან 2^63-1 -მდე.

თუ ინტერპრეტატორს შეხვდება რიცხვი ამ საზღვრებს გარეთ (overflow), ის რიცხვს float ტიპად მიიღებს.

$large_number =  2147483647;  // = 2^31-1
var_dump($large_number);
// output: int(2147483647)

$large_number =  2147483648;  // = 2^31
var_dump($large_number);
// output: float(2147483648)

Float ტიპის ზომაც პლატფორმაზეა დამოკიდებული თუმცა მაქსიმალური მნიშნველობა მიახლოებით 1.8e308-ია (64 ბიტიანისთვის, თუ სწორად გავიგე).

Float ტიპის რიცხვები შეიძლება წარმოვადგინოთ შემდეგი სინტაქსით (მთელის და წილადის გამოსაყოფად აუცილებლად წერტილია საჭირო და არა მძიმე):

<?php
$a = 1.234;
$b = 1.2e3;
$c = 7E-10;
?>

გასათვალისწინებელია, რომ PHP-ის შემთხვევაში ამ ტიპის რიცხვები სიზუსტეს კარგავს ბინარულში გადასვლის შემდეგ. მაგალითად (int)((0.1 + 0.7) * 10) საბოლოო ჯამში მოგვცემს 7-ს და არა 8-ს. (0.1 + 0.7)*10 გვაძლევს 7.99999..-ს. (მთელ რიცხვზე (int) დაყვანის დროს, რიცხვი ქვედა ზღვრისკენ მრგვალდება.)

ამიტომ თუ მათემატიკური გამოთვლები ან შედარება გვჭირდება float ტიპით, ყოველთვის BC math ან gmp ფუნქციები უნდა გამოვიყენოთ.

ოპერატორები

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

ოპერატორები დაყოფილია ტიპებად (მხოლოდ რამდენიმე დეტალს ჩავუღრმავდები, დანარჩენი ჩვეულებრივი განმარტებები php.net-ზეა ან აგერ ქართულად ამ ლინკზე):

არითმეტიკული ოპერატორები

მინიჭების ოპერატორები

ბიტური ოპერატორები
გასათვალისწინებელია შესრულების მიმდევრობა. მაგალითად == შედარებას უფრო მაღალი პრიორიტეტი აქვს ვიდრე & ბიტურ ოპერაციას, ამიტომ  $a & $b  == true  შემთხვევაში ჯერ შედარება შესრულდება.

კიდევ ერთი რამ: რატომ ვწერთ ხოლმე შეცდომების რეპორტინგის ჩართვის დროს მაგალითად ასეთ რამეს? E_ALL & ~E_NOTICE

error_reporting-ი მიმდინარე სეთინგების შესანახად bitmask-ს იყენებს. თითოეულ ასეთი კონსტანტის უკან ბიტების ერთობლიობა დგას.

მაგალითად
E_ALL –ს შეესაბამება  00000000000000000111011111111111.
E_NOTICE  => 00000000000000000000000000001000
(ანუ ბოლოდან მეოთხე ბიტი როცა ”ჩართულია”, ეს ნიშნავს რომ E_NOTICE ჩართულია)
~E_NOTICE გამოვა => 11111111111111111111111111110111
E_ALL & ~E_NOTICE   => 00000000000000000111011111110111

საბოლოო ჯამში მოგცემს მთელ სიმრავლეს ოღონდ შენიშვნების (notice) გამოკლებით.

შედარების ოპერატორები
ამ ოპერატორებიდან and და && ზუსტად ერთნაირად მოქმედებენ. ასევეა or და ||. განსხვავება მათ შორის მხოლოდ შესრულების მიმდევრობის პრიორიტეტებშია. && და ||  ოპერატორებს უფრო მაღალი პრიორიტეტი აქვთ შესრულების დროს ვიდრე მათ შესაბამის სიტყვიერ ჩანაწერებს.

შეცდომების კონტროლის ოპერატორები
ასეთი php-ში მხოლოდ ერთია  -   @, რომელიც შეცდომის დასაფარად გამოიყენება. ეს არ ნიშნავს, რომ ის კოდში მომხდარ შეცდომას მიხედავს, არამედ უბრალოდ შეცდომის შეტყობინებას არ გამოიტანს. ამიტომ მისი გამოყენების დროს სიფრთხილეა საჭირო და ის არ არის try..catch -ის შემცვლელი (ჩვეულებრივ მოქმედებს ფატალური შეცდომების დროსაც, როცა სკრიპტი შესრულებას წყვეტს. შეცდომის შეტყობინებას მაინც არ გამოიტანს).

სისტემური ბრძანების შესრულების ოპერატორები
ასეთი ბრძანების გასაშვებად გამოიყენება ` ` ბრჭყალები (backticks). მაგალითად echo `ls -al`;

ისინი არ მუშაობენ თუ ჩართულია safe_mode ან გამორთულია shell_exec()

მნიშნველობის გასაზრდელი/შესამცირებელი ოპერატორები (++ –)
boolean ტიპზე არ მოქმედებს.

ლოგიკური ოპერატორები
აქ მხოლოდ იმას შევნიშნავ, რომ ოპერანდების მნიშვნელობიდან და ოპერატორიდან გამომდინარე შედეგის მისაღებად ყველა ოპერანდის შესრულება საჭირო არ არის და არც სრულდება. მაგალითად if (false && some_function()) { }  ასეთ შემთხვევაში some_function() არასდროს გამოიძახება, რადგან false და && უკვე ნიშნავს რომ საბოლოო შედეგიც false იქნება.

სტრიქონის ოპერატორები ( .   .= )

მასივის ოპერატორები

ტიპის ოპერატორები (instanceof)

შეკითხვები:

1. რა მნიშვნელობები იქნება float1 და float2 ცვლადებში? (php.net)

$float1 = (float) '1.5';
$float2 = (float) '1,5';

1.5
1

2. რა შედეგი ექნება კოდს? (php.net)

<?php
var_dump(25/7);
var_dump((int) (25/7));
var_dump(round(25/7));
?>

float(3.5714285714286) -> / ოპერატორი არ ასრულებს მთელ გაყოფას და ჩვეულებრივ float-ს გვაძლევს შედეგად.
int(3)
float(4)

3. რა შედეგი ექნება f() ფუნქციის გამოძახებას? (php.net)

int f()
{
  int a, b;
  a = 2, b = 4;

  return a;
}

პარსირების შეცდომა მოხდება. C ენისგან განსხვავებით php-ში მძიმის გამოყენება არ შეიძლება ესეთი კომბინირებული expression-ების დასაწერად. თუმცა for ციკლში დაშვებულია. ასეთი რამ იმუშავებს: for ($a = 2, $b = 4; $a < 3; $a++) { }

4. რა შედეგი ექნება კოდს?

$a = -10 % 3;
$a += "1";
echo $a;

0
მოდულით გაყოფის დროს თუ ერთ ერთი უარყოფითია, პასუხიც უარყოფითია.
რიცხვით ტიპს თუ ვამატებთ სტრიქონს, სტრიქონი რიცხვზე დაიყვანება და ისე შესრულდება ოპერაცია.

5. რა შედეგი ექნება კოდს?(php.net)

$a=1;
$a  +=  $a++   +   ++$a;
echo $a;

1. ++$a is first incremented. Now $a is 2.
$a += $a++ + 2
$a is 2

2. $a++ is added to 2 then $a is incremented
$a += 2 + 2
$a is 3

3. now the value of 2 + 2 is added to $a ($a is 3)
$a = $a + 2 + 2

Answer: 3 + 2 + 2 = 7

6. რა მნიშვნელობა იქნება $a ცვლადში ამ სტრიქონის შესრულების შემდეგ (php.net)?

$a = true ? 0 : true ? 1 : 2; 

(true ? 0 : true) ? 1 : 2 = 2

7. რას დაბეჭდავს კოდი (php.net)?

echo 2 ^ "3";
echo "2" ^ 3;

1 1
ორივე შემთხვევაში int-ზე დაიყვანს
2 ^ ((int)"3") => 1
((int)"2") ^ 3 => 1

8. რას დაბეჭდავს კოდი?

function f(){
  echo 'I am inside f function\n';
  return false;
}

if (true | f()){
	echo 'bla bla bla';
}

I am inside f function
bla bla bla

| ოპერატორი || -ის მსგავსად short-circuit არ არის. ორივე მხარე შესრულდება, იმის მიუხედავად, რომ პირველი ოპერანდი true-ს უდრის.

9. რას დაბეჭდავს კოდი?

$a=true;
$a--;
echo $a;

1
++ და -- ოპერატორები ბულის ტიპებზე არ მოქმედებს.

Zend PHP Certification: PHP Basics

PHP ტეგები

სულ ოთხი ტიპის ტეგი არსებობს, რომელთაგან მხოლოდ პირველის გამოყენებაა რეკომენდირებული.

1. ჩვეულევრივი
<?php echo "Hello World"; ?>
2. short tags
<? echo "Hello World"; ?>  ან <?= "Hello World" ?>
3. ASP tags
<% echo "Hello World"; %> (მისი shortcut <%= "Hello World" %>
4. Script tags
<script language="php">
echo 'Hello world';
</script>
  • ამ ოთხიდან Short და Asp ტეგების გამოყენება თუ გვინდა, php-ის კონფიგურაციაში უნდა გავააქტიუროთ შესაბამისი ფუნქციონალი. ისინი პორტატული არ არის და საერთოდ გვირჩევენ, რომ არ გამოვიყენოთ.
  • short ტეგებს კონფლიქტი მოსდით xml ჰედერთან.
  • ყველანაირი სიმბოლოები (მათ შორის ”ცარიელი” space-ები, ახალი ხაზის “\n” სიმბოლოები, ტაბები “\t”) რაც php ტეგების გარეთაა, პირდაპირ ბრაუზერის output-ში წავა. და თუ ისინი ჰედერებს გაუსწრებენ, არასასურველი შედეგი იქნება.
  • ზედა პუნქტიდან გამომდინარე php პარსერი დამხურავი ტაგის მომდევნო პირველ newline სიმბოლოს output-ში არ გაგზავნის, იმიტომ რომ ზოგი რედაქტორი ავტომატურად, ჩვენს გარეშე ამატებს ”\n”-ს ფაილის ბოლოს.
  • თუ დამხურავი ტეგი ფაილის ბოლოს არის, ის შეიძლება საერთოდ გამოვტოვოთ და ამით თავიდან ავიცილოთ ზევით განხილული შემთხვევა. შეცდომა არ იქნება, ოღონდ ეს xml პარსერს შეუშლის ხელს.

კომენტარები

  • ერთ-ხაზიანი კომენტარებისთვის შეგვიძლია // და # გამოვიყენოთ. მათი მოქმედება სრულდება იმავე ხაზის ბოლოს ან იმ ხაზზე მყოფ php-ის დამხურავ ტეგთან (ეს არ ეხება script  დამხურავ ტეგს).
  • მრავალ სტრიქონიანი კომენტარებისთვის –  /* */  ან /**  */
    მათზე php-ის დამხურავ ტეგს ზეგავლენა არ აქვს. ასევე არ აქვს მნიშვნელობა თუ რამდენ ასეთ კომენტარის ბლოკს ჩავდგამთ ერთმანეთში, მაგრამ მისი პირველივე დამხურავი ყველას ერთდროულად დახურავს.

ტიპები

PHP-ში რვა პრიმიტიული ტიპი არსებობს. აქედან:

ოთხი სკალარული: boolean, integer, float (ზუსტად იგივეა რაც double, ორი სახელი მხოლოდ ისტორიული მიზეზის გამოა შემორჩენილი), string

ორი შედგენილი: array, object

ორი სპეციალური ტიპი: resource, NULL

ასევე არის რამენიმე ფსევდო-ტიპი: mixed, number, callback

PHP მკაცრად ტიპიზირებული ენა არ არის, ამიტომ ცვლადის წინასწარ აღწერა და ტიპის გამოცხადება საჭირო არ არის. ტიპის დადგენა runtime დროს ხდება.

ტიპების ერთმანეთზე დასაყვანად ცვლადს წინ ვუწერთ ფრჩხილებში ტიპის სახელს. დაშვებულია შემდეგი:

  • (int), (integer) – cast to integer
  • (bool), (boolean) – cast to boolean
  • (float), (double), (real) – cast to float
  • (string) – cast to string
  • (array) – cast to array
  • (object) – cast to object

boolean-ზე დაყვანის შემთხვევაში შემდეგი გამოსახულებები გამოდის false:

  • integer 0 (ნული)
  • float 0.0 (ნული)
  • ცარიელი სტრიქონი (string), და ასევე სტრიქონი, რომელიც მარტო ერთი ”0”-გან შედგება.
  • მასივი, რომელშიც ელემენტები არ არის.
  • სპეციალური ტიპი NULL
  • SimpleXML ობიექტი, რომელიც ცარიელი ტეგებისგან არის შექმნილი

integer ტიპზე დაყვანის დროს:

  • boolean ცვლადის დროს true გადადის ერთიანში, ხოლო false გადადის 0-იანში.
  • string ცვლადის დროს თუ სტრიქონი მხოლოდ რიცხვს არ შეიცავს, მაშინ ინტერპრეტატორი ყველანაირად ცდილობს მხოლოდ რიცხვის ნაწილი ამოიღოს. ის უგულველყოფს space-ებსაც, მაგრამ ვერაფერს იზამს, თუ სტრიქონი სხვა სიმბოლოებით იწყება (ამაზე იხილეთ სავარჯიშო 4 :) )

მთელი რიცხვები (integer)  შეიძლება წარმოდგენილი იყოს ათობით, თექვსმეტობით ან რვაობით ათვლის სისტემებში. რვაობითი რიცხვები აუცილებლად იწყება 0-ით, ხოლო თექვსმეტობითი 0x-ით.

შეკითხვები:

შეკითხვები:
1. რას დაბეჭდავს შემდეგი კოდი:

/*
echo "Hi"
// */ echo "Am I commented out?";

Am I commented out?
*/-ს გადაფარავს //-ს.

2. რას დაბეჭდავს შემდეგი კოდი:

// /* Hi ?> */ Am I commented out?

Am I commented out?
მიუხედავად იმისა, რომ PHP-ის დამხურავი ტეგი მრავალსტრიქონიან კომენტარებშია მოქცეული, ის მაინც დახურავს კომენტარს. როგორც ჩანს ამ შემთხვევაში //-ს გადაფარავს */-ს.

3. რას დაბეჭდავს შემდეგი კოდი (php.net):

var_dump(0 == 1);
var_dump(0 == (bool)'all');
var_dump(0 == 'all');
var_dump(0 === 'all');

boolean false
boolean false
boolean true
boolean false

4. რას შედეგი ექნება დაყვანებს (phpf1.com):

1. (int)"10"
2. (int)"10.5"
3. (int)"10,5"
4. (int)"10  "
5. (int)"  10  "
6. (int)"10test"
7. (int)"test10"

1. 10
2. 10
3. 10
4. 10
5. 10
6. 10
7. 0

5. რას დაბეჭდავს კოდი (php.net):

echo 01090;

დაბეჭდავს რიცხვს 8.
ეს არის რვაობითის ჩანაწერი, რადგან 0-ით იწყება. მაგრამ რვაობითისთვის დაუშვებელ ციფრსაც შეიცავს. როცა ასეთი ციფრი ხვდება ინტერპრეტატორს, ის უბრალოდ დანარჩენს ჩამოაჭრის. ამ შემთხვევაში დარჩება 010, რაც ათობითში 8-ის ტოლია.

6. რას დაბეჭდავს კოდი (php.net):

echo false;
echo false+false;
echo intval(false);
echo true;
echo true+true;
echo intval(true);

როგორც ჩანს boolean კონსტანტებს, true-ს და false-ს სხვადასხვანაირად ექცევა ინტერპრეტატორი.
იმის მაგივრად, რომ გამოვიდეს 000121, გამოდის 00121.
ცალკე აღებული false სტრიქონად გარდაქმნის დროს 0 არ ხდება, ხოლო true ხდება 1.

Zend PHP Certification

Zend | PHP Company

წელიწადზე მეტია რაღაც ჟინს ვყავარ შეპყრობილი, რომ Zend-ის სასერტიფიკაციო გამოცდა ჩავაბარო. პირველ რიგში იმიტომ, რომ მისთვის მომზადების პერიოდში ბევრ რამეს ვისწავლი, მეორე იმიტომ, რომ შემეძლება ჩემთვის რაღაცით მაინც განვსაზღვრო რა დონეზე ვიცი ენა და მესამე იმიტომ, რომ რაღაცნაირად მომწონს ამ გამოცდისთვის მზადების პროცესი.

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

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

პ.ს. სავარჯიშოებს რაც შეეხება, ერთადერთი რაც ვნახე – The Zend PHP Certification Practice Test Book ეს არის. ეს კი ძალიან ცოტაა. ზოგადად შეცდომებზე ვსწავლობ და ბევრი ამოცანები მინდა ^^

თუ ვინმე გამიმხელთ კარგ რესურსს, მადლობელი ვიქნები :)

Eva Cassidy – Over the rainbow

მაწყნარებს, მამშვიდებს და ბედნიერად მაგრძნობინებს თავს. მაშინაც კი, როცა ცუდად ვარ და კარგად გახდომაც არ მინდა :)

იმდენად მიყვარს, არ მინდა სადმე დამეკარგოს ან დამავიწყდეს.. ამიტომ აქ უნდა მქონდეს :) )

To post or not to post…

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

ბუნებაში გასვლა და სიმშვიდე იმით მაინც მიყვარს, რომ ახალი იდეები წვიმასავით მოდის, განხორციელება თქვი შენ… თანაც ხანდახან საჭიროა ხოლმე გვერდზე გადგომა, ან ზევიდან დახედვა, ან ცივი გონებით განსჯა და პრობლემების მოგვარებაც მარტივია ასე..

ბევრი ვიფიქრე თუ ცოტა, მომენატრა ჩემი დღიური, ინკოგნიტო ბლოგიც და სხვებისაც მშურს უკვე, პირად თემებზე რომ წერენ პოსტებს.. ჰოდა, გადავწყვიტე ამ ისედაც აჯაფსანდალ ბლოგს ახალი ტიპის წერილები შევმატო. თუნდაც იმიტომ, რომ გულის სათქმელის გამზიარებლები სანაპიროზე დავტოვე v_v და ჯერ კიდევ არ აპირებენ ჩამოსვლას.

Continue reading

Treelist – jQuery plugin

Update: დაემატა expandAll() და collapseAll() ფუნქციები. ასევე აქტიური ელემენტის დამახსოვრება გვერდის განახლების დროს.

სინამდვილეში ამას პლაგინი მარტო იმის გამო ქვია, რომ ძალიან მინდოდა პლაგინის დაწერა :) )) პატარაა და თან მისი მსგავსები ძალიან ბევრია ინტერნეტში სხვადასხვა ფერის და გემოსი.

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

გამოყენების ინსტრუქცია:
1. სკრიპტი ჩავამატოთ საიტზე, ხოლო სკრიპტამდე ჩავამატოთ თვითონ jQuery-ის სკრიპტი. მაგალითად:

<script src="js/jquery.js" type="text/javascript"></script>
<script src="js/jquery.treelist.js" type="text/javascript"></script>

2. Tip: jQuery-ის ჩამატებისას შეგიძლიათ თქვენს სერვერზე არსებული ფაილის მაგივრად Google-ის ჰოსტზე განთავსებული ფაილი აიღოთ. ბევრი მომხმარებლის ბრაუზერში უკვე არის მისი კეშირებული ვარიანტი და ჩატვირთვა აღარ დასჭირდება:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/ jquery.min.js" type="text/javascript"></script>

3. თვითონ საიტზე კი, სადაც სიაა, ჩავამატოთ ჯავასკრიპტი.

$('#tree').treelist();

ამ მაგალითში tree სიის ძირეული <ul> ელემენტის id-ია.

1.3.0 ვერსიაში დამატებით არის ორი ფუნქცია. expandAll ყველაფერს ჩამოშლის, ხოლო collapseAll ყველაფერს აკეცავს.

$('#tree').expandAll();
$('#tree').collapseAll();

თუ გვინდა რომ გვერდის განახლების შემდეგ რომელიმე პუნქტი ჩამოშლილი დარჩეს, მაშინ სიის შესაბამის <li> ელემენტს უნდა მივანიჭოთ ”active” კლასი. “active” არის default-ად. კლასის სხვა სახელის შემთხვევაში, treelist() ფუნქციას პარამეტრად უნდა გადასცეთ კლასის სახელი.

შესაძლო პარამეტრები: active, show_speed, hide_speed.

პარამეტრების გადაცემების მაგალითი:

$('#tree').treelist({show_speed:200,
active:'active_item'
});

სადემონსტრაციო ვერსია

გადმოწერა:
jquery.treelist-1.3.0.js 09-08-2009
jquery.treelist-1.0.0.js 02-07-2009

პ.ს. ვცადე IE 6+, Mozilla FireFox, Chrome ბრაუზერებში.. სკრიპტის წარმადობას ვერ ვამოწმებ, მაგრამ თუ გავაუმჯობესე და დავაოპტიმიზირე, ახალ ვერსიასაც ავტვირთავ.

The NetBeans Collaboration Project

ამ პოსტის ესკიზი მას მერე დევს დრაფტებში, რაც Xray-იმ (იმედია არ მიწყენს) ერთობლივი მუშაობის იდეა გამოთქვა. ერთობლივ მუშაობაში კოდის ერთდროულად წერას ვგულისხმობ. წარმოიდგინეთ, რომ გახსნილი გაქვთ NetBeans IDE და რამდენიმე ადამიანი ერთდროულად არედაქტირებთ ერთსა და იმავე ფაილებს.

პირველად რომ ვცადეთ, ფრიად აღფრთოვანებული დავრჩი. დროის პრობლემების გამო, იშვიათად გვიწევდა შეხვედრა, თორემ pair programming და მისი ჯანი. არადა უკანასკნელი ძალიან მომწონს მისი ნაყოფიერების გამო. კოდი უმეტესად შეცდომების გარეშე გამოდის ხოლმე.

NetBeans-ის Developer Collaboration პლაგინი კი ზუსტად ‘remote’ pair programming-ის საშუალებას იძლევა. :) თუ ასე შეიძლება დაერქვას.

რის შესაძლებლობას იძლევა?

მომხმარებლების ჯგუფის წევრებს შეუძლიათ უყურონ ერთსა და იმავე ფაილებს და ნებისმიერი მათგანის მიერ დარედაქტირების შედეგი real-time დროში დაინახონ. თან პროგრამა გიჩვენებთ, რომელი სტრიქონების ცვლილება მიმდინარეობს და რომელი მომხმარებლის მიერ.

პლაგინს მესენჯერიც აქვს ჩადგმული, რომელსაც სხვადასხვანაირად ფორმატირებული შეტყობინებების გაგზავნა/მიღება შეუძლია (ფორმატირებაში კოდის ფორმატირებას ვგულისხმობ. ანუ, იგივენაირად შეიძლება წერა, როგორც ჩვეულებრივ NetBeans IDE-ში – თავისი shortcut-ებით)

NetBeans Collaboration

გარემოს ასაწყობად საჭიროა:

1. Collaboration სერვერის დაყენება და დაკონფიგურირება (ასეთი სერვერი რამდენიმე არსებობს, თუმცა NetBeans-ის Developer Collaboration მოდულები კარგად არის შემოწმებული OpenFire XMPP სერვერთან ერთად სამუშაოდ, ამიტომ მის საიტზე ამ სერვერის დაყენებას გვირჩევენ და ინსტრუქციაც დევს).

2. NetBeans IDE-ში საჭიროა Developer Collaboration პლაგინის დაინსტალირება.

3. მომხმარებლების დამატება OpenFire-ის ადმინისტრატორის პანელიდან და შემდეგ ამ მომხმარებლების შესვლა (log in) NetBeans IDE-დან.