Лична страницата на Крум Лозев. Блог, снимки, мисли
Kik's web blog
"It's not that we gotta do what we do
It's what we know, so to me it ain't nuttin but bein true..."
-- DMX "The Rain"
Статии за 2006-09

След повече от две седмици най-накрая се реших да напиша поредната "статия" към моя вече умиращ блог. Липсата на какъвто и да е интерес малко започва да ми навява мисълта, че делото ми няма много смисъл, но затова пък съм решил това да е едно от нещата, от които няма да се откажа, така че ето го и поредното заглавие (Smile)
От сега държа да отбележа, че тази статия е за начинаещи "УЪеб" програмисти и няма за идея да учи на каквито и да е било нови техники, а по-скоро, както миналите заглавия да покаже интересни начини за комбинация между инструментите на "дивелопЪра" (тия думи в кавичките, със странния правопис са така, защото не се сещам точни еквиваленти на български (Smile)).
Интернет броячите са интересни същества, които заслужават да им се отдели внимание и да се разнищи как точно работят. Ето в България вече има поне два сайта, които предлагат тази услуга безплатно и много се гордеят с нея - чак слагат логата си по банерите, които предоставят. Всъщност брояча не е особена философия. Нека погледнем следния код: <img src="http://noWhere.com/counter.php?user=2" /> Е да, не изглежда като 100 редовите HTML кодове, които ни карат да си лепим по страниците за да имаме простия брояч, но пак би работил, и то не зле. Какво ще направи PHP-то брояч:
  • Ще отбележи, че втория "user" отбелязва още едно посещение
  • Ако има желание, ще отчете IP адреса на посетителя (които ще получи в $_SERVER['REMOTE_ADDR'], тъи като този посетител е толкова негов, колкото и наш, зареждаики картинката от неговия саит)
  • Евентуално, ако не го мързи, ще запише с какъв browser е бил посетителя, както и операционна среда, в колко часа, на коя дата и т.н.
  • Ще покаже картинка - нали все пак сме му поискали да бъде SRC на нашата картинка, следователно би било неучтиво ако ни отговори с нещо друго (Smile).
А, даже последното деиствие би могло да бъде много лесно - праща един [HEADER("Content-type: image/png");] или нещо подобно беше фунцията в PHP-то, след което просто прави съвсем първичен [INCLUDE "images/counter_image.png";]. Да си го запиша това дето пиша ((Smile)): <? // Записване си някаде, че: // Посетителскоя клиент е: $_SERVER['HTTP_USER_AGENT'] // Адреса на посетителя е: $_SERVER['REMOTE_ADDR'] // Са ни посетили в: time() // Колко неща още можем да разберем за посетителя, четем тук: //http://php.data.bg/manual/en/reserved.variables.php#reserved.variables.server // Показваме картинка с наш банер на посетителя: HEADER("Content-type: image/png"); INCLUDE "images/counter_image.png"; ?> С това искам, да кажа, че с единия ред HTML, брояча може да разбере куп работи.
Сека да си се върна на мисълта за интересната комбинация между PHP и JavaScript. Тя се изразява, в това, че ще можем да следим една важна статистика - с какви резолюции са най-често нашите посетители, за да можем да подобрим стария ни неработещ и грозен дизаин с нов, малко по-хубав, но много по-полезен (Smile)
PHP не може да познае с каква резолюция е човека от другия краи на връзката, но затова пък JavaScript-а които е там може. Гледаме следния код, който пак ще повика картинка от саита на брояча: <script language="JavaScript"> var base = "http://noWhere.com/counter.php?user=2&"; var base += 'resolution=' + screen.width + 'x' + screen.height; document.write('<img src=' + base + ' alt="My Counter" />'); </script> <noscript> <img src="http://noWhere.com/counter.php?user=2&nojavascript=1" alt="No java script counter" /> </noscript> Сега вече counter.php освен всичком което описах малко по-горе, ще може да разбере с каква разделителна способност е посетителя. Ще получи нещо от рода на 1280x1024 в $_GET['resolution'], а ако посетителя на JavaScript, или ако го е изключил, то ние ще получим $_GET['nojavascrip'] = 1 (Smile)
Скоро, когато понамеря време ще напиша и пълно решение - един безплатен брояч, ако някои се интересувакак точно се пише, но там е по-интересен момента със статистиките и как най-рационално да водил статистика на посетителите. Което от своя страна е свързано повече с бази данни, но за това - по късно (Smile)
[ Нагоре ] [ Няма коментари ]
Днес да напиша малко за последната ми играчка, която още е в ранен тестов период, и сташно много зависи от това какъв browser ползвате. Тестчето е много просто, но същевременно е и интересна експоатация на w3c стандартите и XML възможностите, които тепърва ще има да се развиват.
Сега вече да премина към тема (Smile) Всички знаем за RSS стандарта, който ни позволява да разглеждане новините на сайтовете в browser или пощенския клиент. Но да се спрем на самоя изчистен RSS, и на един много благ формат, за форматиране на каквито и да е XML данни, а именно: XSL. По-добре можете да се запознаете с него е тук: http://w3schools.com/xsl. Между другото XSL значи EXtensible Stylesheet Language.
Цел
Ще направин прост RSS четец, който да показва данни от външен (или вътрешен) RSS Feed.
Как?
Ползваме вградената в браузера поддръжка на XSL и в частност [XSLT].
Дали ще работи навсякаде?
Относително (Smile) Трябва да кажа, че би трябвало, тъй като е w3c стандарт, който обаче не е особено пополярен сред дизаинерите, тъй като на повечето от тях име е труден HTML-a пък камо ли нещо което има функции и други щуротии в него (Smile). Да се върна на темата.
  • Internet Expl. би трябвало да го показва правилно след версия 5 (доколкото четох)
  • Firefox не видях проблем с 1.5.0.4 и 1.5.0.6
Приемаме, че добре сме се запознали с всички 'технологии', които ще ползваме, затова прибягваме към това, как ще изпълним заданието.

това, което ще обяснявам е тук:
http://kikweb.dgd-bg.com/xslt/

XSL Template for RSS displaying Ще трябва да показваме XML файл, които е ВАЛИДЕН (!!) RSS, т.е. че няма да можен да показваме каквото и да е (Smile)
Моят XSL изглежда така: <?xml version="1.0" encoding="CP1251"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html> <body> <h2> <a> <xsl:attribute name="href"> <xsl:value-of select="rss/channel/link"/> </xsl:attribute> <xsl:attribute name="title"> <xsl:value-of select="rss/channel/description"/> </xsl:attribute> <xsl:value-of select="rss/channel/title"/> </a> </h2> <table border="1"> <tr bgcolor="#9acd32"> <th align="left">Author</th> <th align="left">Title</th> <th align="center">Date</th> </tr> <xsl:for-each select="rss/channel/item"> <tr> <td><xsl:value-of select="author"/></td> <td> <a> <xsl:attribute name="href"> <xsl:value-of select="link"/> </xsl:attribute> <xsl:attribute name="title"> <xsl:value-of select="description"/> </xsl:attribute> <xsl:value-of select="title"/> </a> </td> <td><xsl:value-of select="pubDate"/></td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet> Повече за това как работи можете да намерите на линка в началото.
Този въпросен template ще ни показва линкчета и други темподобни глезотиики от RSS файла.
PHP Script to merge Сега да кажа и за скрипта, който ще ни покаже как ще сработи цяла схема. няма да го показвам, а ще дам връзка към кода му.
http://kikweb.dgd-bg.com/xslt/index.phps
Накратко какви са променливите, които приема:
  • TYPE по този начин му показваме какво да ни казва. Възможни са две опции: XML i XSL.
  • RSS Пълен url от които да чете. Приема само url-и от вида: http://kikweb.dgd-bg.com/last.rss.
TYPE автоматична слага за линк към себе си за да имаме само един фаил, който да прави всичко. На практика тази променлива е напълни излишна, ако искаме да показваме само един тип данни. Тъй като не искам да правя 3 файла, ги слагам в един скрипт. Другото действие, което скрипта извършва, е да подменя ?> тага от получения RSS със <?xml-stylesheet type="text/xsl" href="http://kikweb.dgd-bg.com/xslt/?type=XSL"?> линк към XSL стила, в който да се визуализира. Малко дървен начин да ги съединя, но тъй като тага в XML може да го има само веднъж, и то най-отгоре, то скрипта ще работи при всякакви условия.

Overall Integration in HTML
Сега идва ред и за познатата част от историята. Какво да го правим това цялото нещо... Ще ви кажа и тука една хитринка, пак рядко използвана от масите дизайнери и други занимаващи се с "уЕбъ ДивЕлопмЕнт" (Smile)
Погледнете следния чист XHTML код: <object type="text/xml" codetype="text/xml" width="100%" border="1" data="http://kikweb.dgd-bg.com/xslt/?type=XML"> RSS Online Reader </object> Този "благ таг" (Smile) OBJECT ни позволява да кокажем каквото и да е съдържание в нашия browser.

Usage
Изпробвайте как работи получения от мен скрипт в реални условия. Ще ви дам линкове, за да видите как ще прочетете заглавия от някои страници:
  • kikweb.dgd-bg.com моят си RSS
  • alistapart.com Как изглеждат alistapart.com в нашия reader
  • www.kde.org така ще изглеждат новините на kde.org в нашия четец
Заключение
Засега мога да определя използваните горе начини като "алтернативни" и неприложими в голяма част от случаите, но се отправям с надежда, че интернет пространството ще се развие достатъчно и такива кодове вече ще бъдат квалифицирани като прости и задължителни знания. Най-хубавото в тази статия е, че е устремена изцяло към client-side програмиране и не е блючена и капка JavaScript (Smile)
Дано статията да ви е харесала
[ Нагоре ] [ 1 коментар ]
Сега си мисля да спечеля малко вниманието на хора занимаващи се с CSS. В настоящия текст ще разберете как да направите някои щуротиики с CSS, дори и никога в бъдеще да не ви се наложи да ги използвате. Първо да кажа за няколко сайта, които ще е почти задължително да прегледате, преди да се захванете с каквото и да било от долоописаното.
  • http://www.w3schools.com/css/ - Много за четене и добър извор за учене ( лично го ползвам постоянно)
  • http://www.w3.org/TR/CSS21/ - Това е сайт със всички общоприети CSS стандарти. Ако се зачетете по-подробно, можете да видите много бъгове относно IE (Smile)
Стара книжка с детски приказки
Та сега да си кажа и аз каква ми е думата (Smile) Заглеждаме се по-внимателно в пълното обяснение на класовете и псевдо такивата, и си спомняме за детските книжки, където всяка нова приказка започва с главна буква, която е много по-голяма от всички останали, ярко изпъква и е или нарисувана, или изографисана по странен начин. Носталгията вече напълно е взела връх над нашите простосмъртни души, и решаваме нашата страница да започва с голяма хубава буква, която да прави странно впечатление на всеки посетител.
Измествам въпроса от защо, на КАК ( колкото и глупаво да е обяснението за ЗАЩО (Smile).
Ако сте обърнали внимание, в настоящата страница можете да забележите въпросния ефект с първата буква. Следва само да обясня как става това: четем тук.
Малко код, който чувствително ще уголеми първите букви в параграфите ни (Smile)
p:first-letter { font-size:200%; } Вече зачело на параграфите седят свойно по-големи букви (Smile). За фонтове и тем-подобни няма да говоря, тъй като смятам, че всеки може да прочете и да напасне стиласпоред свойте нужди.
вече съм разкрил за силата на CSS и сега само ще хвърля светлина върху това, как тези букви да не стърчат грозно нагоре (Smile) горния код става следния: p:first-letter { font-size:200%; float: left; } С това изчерпвам опита, натрупак покрай "ИНОВАТИВНИЯ" (насмешка) дизайн на личната си страница. Оставям във ваши ръце да развивате идеята, ако ви допада, а ако не - съжалявам че сте си изгубили времето, но вината си е ваша ;P
Накрая, ето и линк към любимия ми сайт за дизайн и най-вече за CSS:
www.aListApart.com
ENJOY!
[ Нагоре ] [ 1 коментар ]
Siemens CX75 Kакто бях споменал, малко преди кандидат студентските си изпити си взех нова играчка. То си е направо играчка, особено щуротиите които се опитвах да подкарам на новия си телефон. както и да е де, телефона е без особено красив външен вид, но за това пък бих го препоръчал на всеки - Bluetooth, MMC Slot, Camera 1.3 Megapixel и най-благото - JAVA 2 ME. Ще да рече че има API-та за цялата си периферия (Smile)
Сега идва въпроса за това какво толкова аджаба можем да правим с него?
Сега нека първо обясня как да го свържем с Linux през Bluetooth-a. Честно да си призная първия път ми отне 2 дни, но за това пък в последствие се опаза много просто. Първо сваляме BLUEZ, което са моули за локалния BT Dongle.
Опсанието е най-вече предназначено за Slackware потребители, другите потърсете на края на статията линкове, който може да са ви по-полезни.
mkdir tmp_bluez; cd tmp_bluez; wget http://mirrors.unixsol.org/linuxpackages//Slackware-9.1/Console/bluez-bluefw/bluez-bluefw-1.0-i686-1rmx.tgz wget http://mirrors.unixsol.org/linuxpackages//Slackware-9.1/Console/bluez-hcidump/bluez-hcidump-1.6-i686-1rmx.tgz wget http://mirrors.unixsol.org/linuxpackages//Slackware-9.1/Console/bluez-hciemu/bluez-hciemu-1.0-i386-2roc.tgz wget http://mirrors.unixsol.org/linuxpackages//Slackware-9.1/Console/bluez-pan/bluez-pan-1.1-i386-1roc.tgz wget http://mirrors.unixsol.org/linuxpackages//Slackware-9.1/Console/bluez-sdp/bluez-sdp-1.5-i386-2roc.tgz wget http://mirrors.unixsol.org/linuxpackages//Slackware-9.1/Console/bluez-utils/bluez-utils-2.4-i386-1roc.tgz Така вече в директорията tmp_bluez имаме всички пакети които ще ни трябват. Инсталираме пакетите: installpkg *.tgz Пристъпваме към настройването на bluetooth мрежата. За тази цел ще ни трябват два демона: hcid и sdpd. Настройките им са лесни.
Отваряме файла /etc/bluetooth/hcid.conf. Ето моя conf за пример: options { autoinit yes; security auto; pairing multi; pin_helper /opt/kde/lib/kdebluetooth/kbluepin; } # Default settings for HCI devices device { name "KikPC (%h)"; class 0x100000; iscan enable; pscan enable; lm accept; lp rswitch,hold,sniff,park; } Ако всичко е наред можем да проленим /etc/rc.d/rc.local (за Slack) или просто стартов файл за друга дистрибуция. Добавяме следните редове: modprobe hci_usb hcid sdpd Както забелязахте ж hci.conf сложихме pin_helper ../kbluepin; На негово място можеше да сложим просто фаил, който изписва някакъв код, но тъй като мислим с размах сме предвидили, че ще ползваме kbluetooth. И ако всичко до момента сработва, е време да инсталираме и него ( http://kde-bluetooth.sourceforge.net/ ). Пакет потърсете на: http://mirrors.unixsol.org/linuxpackages//Slackware-10.2/X11/kdebluetooth/kdebluetooth-1.0beta1-i486-1bmr.tgz

Това беше за опита ми за подкарване на телефона и разпознаването му с Linux
Bluetooth remote control Вече имаме KBlueTooth и искаме на накараме компютъра ни да се подчинява на команди от телефона. ще ви препоръчам някой линкове, които си заслужава да пробвате, ако моето долуописно предложение не ви допада:
  • Anyremote - Моят любимец, който ще ви препоръчам
  • Bemused - Контрол на XMMS. Базиран на Java приложение и демонче на машината
  • bt-remote-control
  • Blurc
Hacking Anyremote
Последно в статията да кажа две думи за Anyremote. След като го компилирах, възникна друг проблем: Телефона се разпознава и се вижда чудесно, всичко работи, но дяволът се разкача през различен период от време. Просто спира да предава. Тук, идва време за един "хак" - стартираме anyremote през sh скрипт, който да проверява дали случайно телефона не е решил да се разкачи. Скрипта е следния: #!/bin/sh ## Unfurtunatelly ANYREMOTE makes a kind of time disconnects.that`s why ## I will restart it every ... 5mins for example ## Please send suggestions to kik_AT_data.bg RESTART_TIME=100 # 600sec = 10 min TIME_BETWEEN_RESTARTS=5 # How long to wait procees to die PHONE_BT_ADDRESS='XX:XX:XX:XX:XX:XX' # From which phone should we remote the control; # проверете адреса с: "hcitool scan" като го пишете с главни букви! LOG_FILE="/home/kik/phone/remote.log" # "/dev/stdout" # LOG_DATE_FORMAT='%x/%H:%M:%S' # Init "/dev/rfcomm0" echo "[`date +$LOG_DATE_FORMAT`] Starting $0">$LOG_FILE # Do restarting the anyremote while true; do if [ -e "/home/kik/phone/$PHONE_BT_ADDRESS" ]; then if [ "`hcitool conn | grep $PHONE_BT_ADDRESS`" = "" ]; then echo "[`date +$LOG_DATE_FORMAT`] Connection down. Restarting it.">>$LOG_FILE if [ "`ps ax | grep anyremote`" != '' ]; then echo "[`date +$LOG_DATE_FORMAT`] Killing Old 'anyremote'">>$LOG_FILE killall anyremote; sleep 5; fi; kdesu -c "rfcomm release /dev/rfcomm0 && rfcomm bind /dev/rfcomm0 $PHONE_BT_ADDRESS 1" echo "[`date +$LOG_DATE_FORMAT`] Waiting $TIME_BETWEEN_RESTARTS secs to restart app">>$LOG_FILE sleep $TIME_BETWEEN_RESTARTS echo "[`date +$LOG_DATE_FORMAT`] $PHONE_BT_ADDRESS Online: starting anyremote">>$LOG_FILE anyremote -f /home/kik/.anyremote.cfg -d & echo "==========================================">>$LOG_FILE else echo "[`date +$LOG_DATE_FORMAT`] Connection checked and seems to be OK">>$LOG_FILE fi; else echo "[`date +$LOG_DATE_FORMAT`] Device is not online. Exitting & Sorry.">>$LOG_FILE exit 1 fi; echo "[`date +$LOG_DATE_FORMAT`] Sleeping $RESTART_TIME seconds">>$LOG_FILE sleep $RESTART_TIME done exit 0 Този скрипт, ОБАЧЕ работи само ако има файл с име Bluetooth адреса на телефона в папка "/home/kik/phone/". Можете или да махнете тази проверка, или да добавите (както аз съм направил) друг discovery скрипт в kbluetoothd. Моя скрипт е: case "$1" in run) # Look up the name for each found/lost device with the # device name cache of kbluetoothd via dcop for dev in $FOUND_DEVICES ; do echo "online">/home/kik/phone/$dev /home/kik/phone/remote.sh>$LOG_FILE & kdialog --title "Remote Control - On" --passivepopup "Remote controll is switched on" 5 done for dev in $LOST_DEVICES ; do rm /home/kik/phone/$dev killall /home/kik/phone/remote.sh killall anyremote kdialog --title "Remote Control - Off" --passivepopup "Remote controll is switched off" 5 done ;; configure) kedit "$JOB_PATH" ;; esac Малко линкове
Ще ви споделя линковете, които съм намерил във връзка с моя телефон, като трябва да кажа че не сам пробвал всичкия софтуер на сайтовете показани по-долу, затова не сам убеден, че че всички работят изрядно. Моля споделяите линкове и съвети в коментарите.
  • Gammu Програма за размяна на данни с телефона, синхронизация и какво ли още не.
  • tuxmobil.org цитирам заглавето на страницата: "Linux Applications for Mobile Bluetooth(TM) Cell Phones". То е достатъчно красноречиво (Smile)
  • blues55 Отново цитат; "...transforms a Siemens S55 cell-phone into a remote control for your computer..."
  • georgi.unixsol.org Подробни и пълно описание как да настройте Bluetooth dongle за да работи с телефона ви.
  • Anyremote Отново споменавам Anyremote (Smile)
  • SyncEvolution 0.3 Синхронизация посредством SyncML
  • www.linuxjournal.com Syncing the Treo 650 with Bluetooth
  • benq-siemens.com Benq-Siemens Official Site. Слагам го тук за да разгледате колко много глезотиики можете да си свалите .... Линка е за моя модел телефон.
  • tuxmobil.org Още един линк към http://tuxmobil.org/. На тази страница търсете хубави Java приложения
[ Нагоре ] [ Няма коментари ]
За много хора това ще е сигурно поредния блог на някой си, затова бих искал още сега да Ви запозная с интересите си, така че да знаете какво може да очаквате. Преди месец или два се сдобих с не-лош откъм функционалности Siemens CX75, като след няколко седмици вече използвах всички негови функционалности с домашния ми Linux (Slackware): Obex sync, bluetooth remote и т.н. Тази статия ще напиша веднага щом ми остане поне малко свободно време, което всъщност ще е скоро (Smile) Друго нещо ще е лист с полезни линкове, без които (според мен) никой не може да нарече себе си дизайнер или разработчик, мисля също и да хвърля малко светлина около някои CSS щуротиики, на които съм голям фен. Може би на последно място, а най-вероятно и по ценност, ще намерите немалко PHP скриптове, които съм писал през последните гоини (Smile) Мисля че който споделя мойте интереси ще хвърля по едно Учо от време на време (Smile)
[ Нагоре ] [ Няма коментари ]
Има 5 статии за този месец
Get Firefox! X Multimedia System Pidgin Instant messanger Get Slackware Valid XHTML 1.0 Transitional [Valid RSS]

Creative Commons License
This work is licensed under a Creative Commons Attribution 2.5 Bulgaria License.
Това е лична страница. Писаното тук не е мнение на хора свързани по какъвто и да е начин с мен и не трябва да се цитира като такова!