Понеже съм уникален кретен и пиша ужасно не мърлив и недообмислен код, успях да оставя без достъп до хостинг машината ми за цяла вечер. Проблема се оказа малоумно тривиален ама кой да мисли на време.

#!/bin/bash -x
wget http://checkip.dyndns.org/ -O /tmp/ipaddr
IPADDR=$(cat /tmp/ipaddr | grep -Eo '\<[[:digit:]]{1,3}(\.[[:digit:]]{1,3}){3}\>')
IPADDROLD=$(cat /tmp/ipaddr_old | grep -Eo '\<[[:digit:]]{1,3}(\.[[:digit:]]{1,3}){3}\>')

if [ "$IPADDR" != "$IPADDROLD"  -a "$IPADDR" != "" ]
then
 sed -i "s/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/$IPADDR/" /etc/bind/neo2shyalien.eu
 /etc/init.d/bind9 restart
 echo "server localhost" > /tmp/nsupdate
 echo "zone neo2shyalien.eu" >> /tmp/nsupdate
 echo "update delete ns.neo2shyalien.eu. A" >> /tmp/nsupdate
 echo "update delete ns.neo2shyalien.eu. CNAME" >> /tmp/nsupdate
 echo "update add ns.neo2shyalien.eu. 38400 A $IPADDR" >> /tmp/nsupdate
 echo "update add *.neo2shyalien.eu. 38400 CNAME ns.neo2shyalien.eu." >> /tmp/nsupdate
 echo "show" >> /tmp/nsupdate
 echo "send" >> /tmp/nsupdate
 echo "" >> /tmp/nsupdate
 /usr/bin/nsupdate -k /etc/Kns.neo2shyalien.eu.+157+59417.private -d /tmp/nsupdate
 mv /tmp/ipaddr /tmp/ipaddr_old
fi

Това вече е поправения скрипт които няма да допуска грешка. След малко ще обясня къде е била проблемата част сега да обясня какво прави скрипта. Поне нали съм на динамично публично ip. Съм пуснал горния скрипт да проверява за промяна в адреса ми ако се смени да променя настройките на машината и да праща информация за домейна ми, че има промяна. Общо взето тривиален скрипт но в него бях допуснал ужасно малоумен пропуск. В частта където се проверява за смяна на адреса

if [ "$IPADDR" != "$IPADDROLD"  -a "$IPADDR" != "" ]

Преди беше


if [ "$IPADDR" != "$IPADDROLD"]

Така самия ред прави следното взима 2-та IP адреса и ги сверява ако са еднакви пропуска ако са различни ъпдейтва. В предния вариант бях пропуснал много важна грешка поради някаква причина скрипта ми беше решил че имам IP = „“ (нищо) и пренаписало конфигурацията на bind-а ми с празно поле и при следващата смяна вече не може да пренапише правилно конфигурацията което води липса на връзка с nameservr-a. Малоумно нали 😉

От около една седмица вече съм собственик на HTC TyTN 2. Продадох си стария HTC TyTN 1 и с известно доплащане си купих Kaiser-a(кодовото име на TyTN 2). Новия ми комуникатор се различава от стария с доста по добрия си хардуер – по ново поколение ARM процесор, 2 пъти повече оперативна памет по голям NAND за ROM-a. Отделно че разполага и с GPS което безумно много ми липсваше в стария Hermes. Предишния собственик не беше експериментирал с машинарията и затова цялото удоволствие от SPL-ването и отключването и се падна на мен 🙂 Към момента го карам с Android през мемори картата, че нещо напоследък не съм възхитен от дроида и мисля да си поиграя да портна Openmoko GUI. Работата ми по предишния проект приключи като портнах Touch Screen driver-a. Вярвам имаше още хляб в проекта но нямах нито време нито нерви да се занимавам и с него. Засега ще карам с Android-a докато не ми остане време да си портна Openmoko-то все пак дроида колкото и да не ми допада е по добре Windows Mobile 😉 Имам разни забележки по работата на телефона но проекта е прекалено напреднал тепърва да се включвам в тимът на разработчиците.

Така както писах в предишния пост проблема с дефинирането на променливата base_url е доста неприятен. В конкретност тази променлива се грижи за създаването на пътя към линкове, екшъните в формите, редиректите и прочие и ако не е сетната CI нереаботи корекно 🙂 Работи ама прави едни луди неща с url-тата 🙂 Решението както винаги е елементарно ( за мен се появи малко преди да реша да си го напиша сам) 😀


$config['base_url'] = ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == "on") ? "https" : "http");
$config['base_url'] .= "://".$_SERVER['HTTP_HOST'];
$config['base_url'] .= str_replace(basename($_SERVER['SCRIPT_NAME']),"",$_SERVER['SCRIPT_NAME']);

С това парче код се замества base_url в конфигурационния фаил. Работи както се вижда както за http така и за https. Взима си само папката в която разположена платформата така, че не е необходима никаква намеса от наша страна.

Едно адски отвратително нещо да ползваш Gnome с английски локал е, че ми показва първия ден от седмицата неделя. Ужасно неудобно и дразнещо е. Решението е адски простичко да се промени реда в файла с локализацията от

first_weekday 1 на first_weekday 2. А защото съм мързелив всеки път да го правя на ръка го направих и на скриптче 😉 Че при ъпдейт на локализациите и се замазва положението грозно. Скрипта трябва д а се стартира root права.


#!/bin/bash

if [ $EUID -ne 0 ]
then
 echo -en "\n \033[1;31m Must be a root \033[0m \n"
 exit 0
fi

LOCAL=$(locale | grep LANG | cut -d"=" -f2 | cut -d"." -f1)
FILE="/usr/share/i18n/locales/$LOCAL"

if [ -f $FILE ]
then
 sed -i 's/^first_weekday.*/first_weekday 2/' $FILE

 locale-gen
 killall gnome-panel

 echo -en "\n \n \n \033[44;1;33m Done \033[0m \n \n \n"
else
 echo -en "\n \033[1;31m File doesent exixst \033[0m \n"
fi

Ако евентуално позлвате друг вид локализация скрипта ще го прихване. И ще го направи на понеделник ако не е 😉 Ето и линкче към скрипта.

Преид около седмица имах да драсна един проект на php. Общо взето немога да споделям детайли ама беше сравнително проста хава. След като го приключих останах ужасен от резултата – ужасно напсиан код, дърварщина, никакъв финес, единствено позитивно нещо беше, че е надежден. Ама аз необичам така, обичам като пиша да е по хубавия начин, а не с секирата насякан и набит. Добре, че не е публично достъпен, че иначе щях да си умра от срам. Такава разка загубана на умения я отдавам единствено и само на писането на bash-ове през последната половин година и тотална липса на по обектни похвати в програмирането. От вчера започнах фундаментално опресняване на познанията, че скоро ще ме очакват нови задачки закачки а няма се излгам като кифладжия с грозен код. След няколкочасове четене си припомних обекния модел в php, бях збаравил че колкото и да е смотан като езит php (което мнение аз не споделям) има изключително приличен обектен модел.