Posterous theme by Cory Watilo

Ответ на третий извечный русский вопрос: Где я?

Вот представьте себе картинку: проснулись вы с утра с жестокого бодунища, скажем так, в не очень хорошем самочуствии и со слабым представлением что, где и с кем у вас было вчера.

Естественно что в таком состоянии мозг судорожно пытается загрузится и начинает мучаться извечными русскими вопросами: Кто виноват? Что делать? А ты с какого района? Где я собственно нахожусь? 

Если за ответами на первые два я вас адресую к русским классикам, то с последним вопросом разобраться как два пальца об асфальт.

Итак план действий следующий:

1) Бодренько поднимаем свое бренное тело хотя-бы на метр от пола.

2)  Мутным взором сканируем округу в поисках ближайшего компьютера

3) Ползем к нему и дрожащими пальцами набираем в консоли следующее

curl -s http://geoiplookup.wikimedia.org/ | python -c 'import sys, json, string, webbrowser; webbrowser.open(string.Template("http://maps.google.com/maps?q=$lat,$lon").substitute(json.loads(sys.stdin.read().split("=")[-1])))'

4) Откроется окошко браузера где красненьким маркером показано ваше текущее положение.

Просто для запоминания и достаточно изящно, не правда ли?

Однако у этого метода есть несколько недостатков. Во первых, данный метод хоть и отвечает на вопрос "Где я?", абсолютно игнорирует последующие вопросы, по типу:"С какого х@я я тут оказался?", "Langao это вообще где?", "Почему у меня грубый шов на том месте где была почка?" Во вторых если вы доползете до компьютера, а там окажется мелкомягкое поделие самая популярная операционная система, то сходу у вас ничего не получится. Однако в этом есть и плюс - пока вы будете ставить python, cygwin и curl похмелье скорее всего пройдет.

Установка tftp сервера на CentOS 5

tftp (Trivial File Transfer Protocol) простой протокол передачи файлов, к ftp не имеет никакого отношения и используется, в основном, для загрузки бездисковых станций и различных железок (типа cisco). В моем конкретном случае оно мне понадобилось чтобы бэкапить конфиги рабочих Cisco.

 

На мое удивление оказалось, что поднять эту хрень под линуксом задача нетривиальная. Не сложная, но чтобы все получилось - нужно чётко знать что делать.

 

Моя эпопея началась с того, что команда yum install tftpd послала меня лесом. На этом этапе я задумался и начал рыть интернеты. В итоге и родилась данная компиляция, написанная, в основном, для меня любимого, чтобы не забыть что и как я делал по прошествии времени. Впрочем, если оно еще кому-нибудь поможет, я буду только рад.

 

Итак, начинаем:

  1. Первым моим открытием было то, что в  CentOS эта хрень называется не tftpd (что казалось абсолютно логичным) а tftp-server. Соответственно первая команда должна выглядеть вот так: yum install tftp-server
  2. После того как эта балалайка всосется и установится, можно приступать к ее настройке. Работает она через супердемон xinetd. Для начала надо ее включить командой: chkconfig tftp on  
  3. Проверяем. В выводе команды chkconfig --list в самом низу, где запускаются сервисы на основе xinetd, напротив tftpd должно быть написано «вкл» 
  4. Теперь смотрим в настройки самого tftpd, в файлик /etc/xinetd.d/tftp В нем прописана директория, где хранится содержимое, что отдает tftp сервер. В моем случае это была папка /tftpboot У меня она уже была создана, мне осталось только прописать на нее права доступа, чтобы она была доступна для всех: chmod -R 777 tftpboot/
  5. Перезапускаем xinetd  /sbin/service xinetd reload и вроде счастье есть
  6. Ага счаз! Те файлики, что я положил в папку tftpboot прекрасно читаются снаружи и даже перезаписываются, а вот новых создавать не получается :-( 
  7. Пришлось курить маны. Оказалось, что tftpd должен запускаться с ключем -с, который и позволяет писать новые файлы внутрь его рабочей директории. Лезем опять в файлик /etc/xinetd.d/tftp и в строчке server_args добавляем нужный ключ. У меня эта строчка выглядит как: server_args = -c -s /tftpboot Еще раз перезапускаем xinetd и вот теперь счастье есть!

Небольшое замечание: SELinux - скотина такая, мешает нормальной работе с tftp. При попытке обращения к tftp-серверу клиентская машинка говорит: Иди мальчик лесом, правь пермишены" (Error code 0: Permission denied). Нужно либо полностью загандошить SELinux либо перевести его в permissive mode. Временно (до перезагрузки) это делается командой echo 0 >/selinux/enforce Если нужно добиться постоянного эффекта то правим файл /etc/selinux/config Прописывая там вместо SELINUX=enforcing строку SELINUX=permissive

 


PS: Я не упоминаю о том, что файрволл на линуксовой машинке должен быть соответствующим образом сконфигурирован (разрешены входящие запросы от использующих tftp железок на 69 udp dport и добавлены модули ip_conntrack_ftp ip_conntrack_tftp

 

О новых сериалах

После того, как закрылась целая куча сериалов, что я смотрю, ощутил необходимость подыскать свежее мыло.

Отсмотрев достаточно много роликов, посвященных предстоящим премьерам буржуйских телеканалов, таких как FOXNBC и ABC  я отобрал для себя те, на которые стоит обратить внимание. Конечно по рекламному трейлеру трудно судить о качестве всего сериала, но хотя бы общее представление составить можно.

Итак, не вызвали рвотного рефлекса, а наоборот вызвали желания ознакомиться поподробнее следующие сериалы:

1) Alcatraz от самого J.J Abrams (это который LOST, Fringe и иже с ними)

 

2) Terra Nova - вроде занятная сказка про выживание, с динозёбрами в главной роли.

 

3) Grimm - ожидается неплохая страшилка.

 

4) Prime Suspect - полицейский сериал. Я в принципе не любитель, но судя по ролику должно быть забавно.

 

 

Вот собственно и всё из того что понравилось. Естессно, на вкус и цвет все фломастеры жрать не надо разные.

В комментариях всячески приветствуются ссылки на другие интересные сериалы.

Следим за балансом сотового телефона.

В сети можно найти туеву хучу аппликух, которые помогут вам узнать текущий баланс вашего сотового. В конце-концов можно USSD запрос послать прямо с мобильного (*100# для МТС). Недостаток у всех этих решений один - нужно помнить: запустить программу, проверить баланс и тп. Деньги же на телефоне, как правило, кончаются внезапно. Да, я - раздолбай, но в моей жизни есть гораздо более интересные вещи, чем забивать себе голову отслеживая балас телефона.

Наткнувшись на вот эту  статью на Хабре, был очарован красотой (а скорее простотой) реализации и решил адаптировать решение под свои нужды.

Поскольку основная система дома и на работе MacOS, то вместо wget’а будем использовать curl (wget в макоси отсутствует, а curl есть «из коробки»)

Уведомлялку сделаем через growlnotify  (утилитка находится в папочке extras установочного пакета Growl)

В итоге получаем вот такой, простенький скрипт:

 

#!/bin/bash

# ===========================================================

# = This script checks your mobile balance and warns you if =

# =           it lower then the threshold value             =

# ===========================================================

 

LOGIN="916XXXXXXX" #Your phone number

PASS="XXXXXX" #Password from MTS iHelper

THRESHOLD="150" #Threshold value in roubles

 

request()

{

curl \

--cookie cookies.txt \

--cookie-jar cookies.txt \

--junk-session-cookies \

-s \

-L \

$@

}

 

request -o 1.html \

'https://ihelper.mts.ru/SELFCAREPDA/Security.mvc/LogOn'

request -o 2.html \

-d "username=$LOGIN&password=$PASS" \

'https://ihelper.mts.ru/SELFCAREPDA/Security.mvc/LogOn'

 

 

MONEY=`cat 2.html | grep Баланс | awk -F \<strong\>\<strong\> '{print $2}' |awk -F \</strong\> '{print $1}'` # your current balance in roubles 

DIFF=`echo "$MONEY<$THRESHOLD" | bc` 

 

if [ "$DIFF" = "1" ] 

then

/usr/local/bin/growlnotify  -n APP -s -I  /Applications/Utilities/Activity\ Monitor.app -m "$MONEY руб."  Мало денег на телефоне

fi

 

 

 

Скриптик лезет на мобильную версию «Интернет Помошника» от МТС (она тупо легче), представляется вами и забирает информацию о текущем балансе. Если денег на счету меньше определенной суммы (в моем случае: меньше 150 рублей), то пользователю выдается предупреждение, через growlnotify.

 Grep, конечно, не слишком кошерно использовать, в случае изменения веб-странички оно все поплыть может, но в данный момент меня это устраивает. Наворачивать что-то сверху (типа html2txt) мне лениво, тем более, что это не даст 100% гарантии от изменения веб-станички.

 

Теперь надо все это дело прикрутить к целевому компьютеру, чтобы оно работало само. C launchctl мне разбираться было тупо лень, поэтому использовал хорошо знакомый кронтаб.

Копируем сам скрипт, например в /Applications и пишем в консоли от имени текущего пользователя следующее:

 

crontab -e

 

Для редактирования пользовательского crontab’а открывается великий и ужасный vi (на самом деле vim, но в данном случае это не важно) Работать с этим текстовым редактором не то чтобы сложно, но обычному человеку непривычно. Кстати, в гугле более 22 миллионов ответов на вопрос «Как выйти из vi» На самом деле, все просто, сейчас дам пошаговую инструкцию.

  1. Нажимаем букву i на клавиатуре и, о чудо, теперь мы можем вводить текст.
  2. Пишем следующее:

1 */2 * * * /Applications/balanceMTS

 

то есть запускать скрипт мы будем каждую первую минуту, каждого второго часа (мне так показалось оптимальным, вы можете поставить свои параметры) balanceMTS - это имя скрипта.

 

3. По завершении переводим каретку на новую строку и нажимаем Esc

4. Вводим с клавиатуры :wq (эти символы должны отображаться внизу окна терминала) и нажимаем Enter

5. Всё, пользовательский файл crontab создан. Посмотреть на него можно по команде

 

crontab -l

  

Теперь этот скрипт будет запускаться через указаннные промежутки времени (раз в 2 часа в моем случае), проверять баланс и плевать на экран если денег маловато. А вот отрывать задницу от стула и переться в банкомат придется, всё-же, самому.

Можно, конечно, попробовать платить скриптом, через тот-же хронопей, но мне эта идея кажется слишком рискованной.

 

Собственно говоря, это всё. Всем спасибо, я кончил и закурил!

 

Про iPad2, прыжки через поколение или нахрена козе боян.

Посмотрел я вчера эпловую презентацию нового iPad’а. Естессно восторга были полные штаны. Тоньше (уииии), легче (вау), цельных 2 камеры (вообще офигеть), 2х-ядреный процессор (тут вообще пароксизмы восторга переходящие в бурный оргазм)

Через некоторое время, стерев следы восторга с экрана 1го iPad’а (на котором собственно я и смотрел трансляцию) я задался извечным вопросом русской, и не только, интеллигенции: А нахрена, собственно, козе боян? Что мы имеем в сухом остатке если отбросим маркетинговую шелуху? Чем новый девайс лучше старого?

Если лень читать дальше, то сразу отвечу на последний вопрос - ничем! По крайней мере для меня. По сути апгрейд iPad’а не принес ничего нового (кроме камер, но о них чуть позже). 

 

  • Толщина - это конечно здорово и впечатляет, вот только у меня и текущие размеры неудобства не вызывают и вполне устраивают. В общем толщина это МКЕ-фактор
  • Вес - вот это уже более критично. Текущий iPad, все-же, тяжеловат. Одно но - изменение веса совсем незначительно (если не ошибаюсь - менее 100 грамм) Хотя, конечно, надо самому пробовать и сравнивать - может оно и существенно.
  • 2 камеры - вот это единственное новшество, по сравнению со старым iPad. К моему сожалению, я, наверное, моральный урод, но от отсутствия камеры в iPad’е совершенно не страдал. Снимать фото и видео с помощью большой разделочной доски это как-то…в общем не мой стиль, извините. Единственное, что оправдывает эти камеры это FaceTime. FaceTime - это невьебенно круто, но пользовался я им… 4 раза за все время его существования. Причем по делу - 1 раз. И это все при том, что i- и прочих маковских девайсов, поддерживающий эту фичу, в моем окружении больше чем дофига. Следовательно от наличия камер я тоже как-то не сильно выигрываю (а точнее не выигрываю вовсе)
  • И последний коронный аргумент - Процессор. Apple A5 c цельными 2мя ядрами. Что в 2 раза больше чем в моем текущем iPad’е. Именно это должно заставить меня забиться в угол от ощущения собственного нищебродства и срочно захотеть купить новую i-сковородку. Господа и дамы - давайте, только честно, ответим себе: А вам не глубоко пофиг на циферки ттх в новых устройствах? От того, что они больше, у вас зарплата прибавится или здоровье лучше станет? Важно, чтобы с девайсом работать было удобно ( в это понятие я вкладываю и быстродействие и время жизни без розетки и еще кучу других факторов). Текущий iPad быстр, а увеличение ядер процессора позволит ему стать еще быстрее (не в 2 раза, конечно, но быстрее). И где мы это увидим? В приложениях. Точнее в игрушках. Вот только появятся эти игрушки где-то через пол-года после релиза iPad2. Если вообще появятся. Я имею ввиду игры (приложения) которые будут ощутимо медленнее (до некомфортности) работать на 1м поколении iPad и будут активно вас подталкивать к покупке iPad2. С iPhone’ами было именно так. 

 

К чему вся эта телега? К тому, что если отбросить marketing bullshit, то адекватных причин владельцам iPad бросать все и покупать iPad2  вроде как и нет. Кроме «хочу и всё» и повышения собственного ЧСВ, но это вряд-ли можно отнести к адекватным причинам. Имеет смысл прыгать через поколение устройств. Если проводить аналогию с iPhone, то на 3G модели сейчас работать уже не совсем комфортно, ощущаются тормоза. 3GS, в то же время, хоть и не обладает таким офигенным экраном, как у четверки, но вполне ничего с точки зрения удобства использования.

О сокращениях и современном английском

Разбирая завалы старых заметок наткнулся на прекрасное. Источник, к сожалению, уже не вспомню. Для твиттера это слишком масштабно, поэтому пишу сюда.

Современное сочинение американского школьника на тему "Как я провел лето": 

"My smmr hols wr CWOT. B4, we used 2go2 NY 2C my bro, his GF &amp; thr 3 : kids FTF. ILNY, it's a gr8 plc."

В переводе с идиотского на русский (в смысле на нормальный английский) 
My summer holidays were a complete waste of time. Before, we used to go to New York to see my brother, his girlfriend and their three screaming kids face to face. I love New York. It's a great place.

NB: Подумалось тут: а для твиттера подобного рода сокращения языка - самое то. Первоначальное "сочинение умещается в 101 символ. Хотя более правильно учится формулировать мысль так, чтобы она помещалась в 140 символов без всяких сокращений.

К вопросу о курении.

Очень хочется поднять вопрос вынесенный в заголовок, ибо наболело и нужно высказаться.

Я - курю и воспринимаю это совершенно нормально. Один мой друг не курит и это тоже совершенно нормально. Другой бросил курить и держится, в силу каких причин - в данном случае совершенно не важно, но это уже вызывает у меня уважение. Не то, что он именно не курит, а то, что проявляет силу воли.  Однако меня бесят проповедники, которые пытаются втюхать мне насколько курение вредно и призывают ать-два, ать-два, алиллуйя, в новый мир со здоровым телом, строем, шагом марш. Особенно когда такие "борцы" пытаются силой и палками загнать меня в свое видение идеального мира.

Курение вредно для организма курильщика? Возможно (заметьте, только возможно). А еще вредно жрать сладкое, бухать до синих чертиков, много работать и кучу всего. Жить вообще вредно, от этого умирают. Доведено до абсурда, но доля истины в сказанном есть. Хорошо, пускай вредно. И я предупрежден об этом - этот рекламный понос льется регулярно из телевизоров, газет, интернетов, улиц - откуда угодно. Разве что унитаз еще меня ни разу не предупреждал: Чуваааак, ты куришь - ты можешь умереть. Да и то, полагаю, только потому, что курю я табак, а не что-то более концептуальное и расширяющее сознание. Итак - я в курсе. И я курю. Это мой выбор. Выбор сознательного человека, члена общества, который работает, платит налоги и в состоянии содержать и оплачивать себя и свои прихоти. Все. Точка. Закончили. Спасибо и идите нахуй с вашей моралью.

А вот тут выясняется одна интересная подробность. Оказывается нифига не закончили, и нифига не идите в пешее путешествие с сексуальным уклоном. У противников (точнее даже не у противников - эти вполне адекватные, а у долбанных проповедников) появилась еще одна святая корова: пассивное курение. Ты куришь - значит ты вредишь мне любимому. И тут уже начинается совершенно другой разговор.

Люди, в массе своей, существа эгоистичные. Хорошо это или плохо - вопросы морали (которая, как известно, век от века и страна от страны изменчива). Однако факт остается фактом. Обычному человеку насрать с высокой колокольни на все, что не относится напрямую к нему и еще к конечному ряду людей, которые ему дороги. Вот вас, например, сильно заботит, что дети в африке пухнут с голоду и мрут как мухи под мухобойкой? Не в том смысле, что прочитали и подумали "ай-яй-яй, как же это плохо", а так чтобы  день и ночь об этом размышлять и страдать от осознания данного  факта. Что, все таки беспокоит? Поздравляю - значит вы либо живете в африке, либо это ваши дети там голодают, либо и то и другое. А большинству - насраааать. Как бы кощунственно это не звучало. А теперь давайте представим себе, что завтра изо-всех СМИ польется волна поноса на тему: Поскольку дети в африке голодают, ваша зарплата или пенсия будет понижена на, ну допустим, 5000 рублей и еще и водка подорожает по этому-же поводу. Что будет? Правильно - волна негодования и искреннее переживание каждого за бедных африканских детей.

Именно такой замечательный  трюк и проделали евангелисты отказа от курения с толпой, придумав байку о пассивном курении. Они заставили верить, что якобы-проблемы мирно курящего в уголочке человека, касаются всех. Нет, я не спорю, если в комнате топор можно вешать от дыма, то некурящему человеку это, наверное, на пользу не пойдет. Но говорить о вреде на улице или в хорошо проветриваемом помещении? По моему бредово. Если только учуял запах от чувака, который курит в 5ти метрах от тебя, все, пиздец, жизнь тут-же сократилась на год. Смолы? По воздуху? В количестве способном повредить? Не смешите мои коленки. Следуя этой логике в городах вообще дышать нельзя из-за загаженности воздуха автомобилями, пердящими от злости на курильщиков товарищами и прочими выхлопами. Однако машинами на улице, почему-то никто не возмущается. В аспекте вредности их выхлопов. По крайней мере такого промывания мозгов изо всех щелей по этому поводу не проводят. А с курением, ясен пень: запретить и не пущать. Ибо нехуй. Ибо, судя по всему, в современно обществе это проблема номер один. Вот как только последний курильщик сдохнет в мучениях от своей пагубной привычки, тут-же наступит счастье и процветание во всем мире, коммунизм и бесплатное пиво.

Нет, я совершенно не спорю с тем, что некурящему человеку может быть неприятен запах табачного дыма. Так-же как и запах говна или горящей помойки. Только я что-то не наблюдал массовых обращений граждан ЖЭКи по поводу говна и срача на улицах (и прочих вредных для здоровья факторов), а вот наехать на курящего индивида - это дело святое. Как-то не вяжется это с моим пониманием логики. Естественно, дышать воздухом без запаха табака - это совершенно нормальное желание, и его надо уважать. Точно так-же как надо уважать желание человека покурить. Точно так же. Ровно в той же мере. Тут мы приходим к избитому, но от этого не менее верному выражению - Свобода одного человека заканчивается там, где начинается свобода другого. 

Проблема курения, в рамках взаимоотношений человека с человеком, решается так-же как и любая другая проблема. Мирно или не очень, но по взаимной договоренности, в частном порядке, и в каждом конкретном случае. Можно попросить уступить место в транспорте, а можно попросить не курить. В ответ вашу просьбу могут удовлетворить или нет. В зависимости от…(тут идет куча разных факторов) и с той или иной формой вежливости. Это нормально. Мы все люди и всегда можем договорится друг с другом. До тех пор пока кто-нибудь, особо ментально одаренный, не придумает возвести этот договор в рамки закона. А вот тут начинается жопа. Потому что если по закону нельзя курить в общественных местах тебе об этом расскажет каждая собака. С брызгами слюны изо рта и матюгами расскажет. А еще по закону необходимо, например,  оплачивать проезд в общественном транспорте. О чем, тот же индивид (который вот только что с брызгами слюны…ну вы поняли) несомненно знает, и выражает свое знание участием в табунном забеге по вагонам электрички от приближающихся контролеров. И это считается нормальным. 

В итоге ситуация сложившаяся с курением, на мой взгляд, очень печальная. В пору создавать партию борьбы за права курильщиков. Ибо притесняют и сильно и границы разумного давно уже пройдены.  Почему свобода одного должна заставлять другого забиваться в самый дальний угол. Где, сука, равенство? 

Ндааа, буков много получилось. Но моя цель достигнута - свою потребность высказаться я этим постом реализовал. Получилось немного путано, однако за разъяснением любого непонятного или, с вашей точки зрения, спорного момента - welcome в комментарии.

Слегка резюмируя: Я не против некурящих или борцов с курением, я против фанатиков. Я за разумный подход к урегулированию вопроса о том, что кому-то неприятно что другой курит. За разумный, а не за ультимативный. Я считаю, что байка о пассивном курении именно байка (опять таки, в разумных пределах).

 

Спасибо, я кончил и закурил.

Ставим PyQt на Mac OS или мы не ищем легких путей.

Вся эта байка началась с того, что для одного мелкого, домашнего проектика понадобилось мне красивый гуй (GUI) нарисовать. Поскольку проектик написан на питоне, полез я в интернеты почитать чем нонче кошерно окошки для юзверей рисовать. Оказалось PyQT4.

Вот только если python в макоси уже есть и неплохо себя чувствует, то для установки pyQT придется потрахаться помучаться. Нормального mac-way: скачал-запустил-работает в данном случае не наблюдается, ну или я не нашел. Поэтому, пришлось вспомнить линуксовое прошлое и ставить все из сырцов. Алгоритм не совсем тривиальный, поэтому привожу его здесь, авось кому-нибудь пригодится.

 

Шаг 0. xcode должен уже стоять в системе, если нет - бегом качать и ставить 

Шаг 1. Качаем бинарники qt для cocoa (32/64bit) Это .dmg образ, устанавливается путем тыканья мышкой в нужные места на экране, все просто и привычно.

Шаг 2. Ставим нужную приблуду

  • Качаем sip  вот отсюда лучше developmet snapshots. 
  • Распаковываем tar -xf sip-snapshot-4.10.2-ea295d6e9e9c.tar
  • Заходим в папку и делаем там python configure.py
  • затем make 
  • затем sudo make install

Шаг 3. Собственно то, зачем вся эта байда затевалась

  • тянем  сырцы pyqt (можно девелопмент, но я стянул стабильную)
  • Распаковываем tar -xf PyQt-mac-gpl-4.7.2.tar
  • Заходим в папку и делаем там python configure.py
  • затем make (вот тут, если все без ошибок, можно покурить, оправится и вволю поплевать в потолок)
  • и, наконец sudo make install

Когда все вот так расписано, кажется действительно все просто. Однако, мне пришлось помучатся часа 2 прежде, чем все заработало. Сначала qt было поставлено без поддержки 64 bit и при компиляции pyqt стало ругаться, что у вас архитектура не совпадает. Потом я, сдуру, решил все перекомпилить под 32bit'а и в итоге возникать начал уже интерпретатор питона. Говорить ему каждый раз VERSIONER_PYTHON_PREFER_32_BIT=yes /usr/bin/python было как-то совсем не интересно, поэтому пришлось найти правильную версию qt и начать все заново.

В общем, как-то так. Если кому поможет - буду рад. Если нет - тоже не расстроюсь. Зная себя, месяца через 4 я сам эту процедуру забуду и буду рад такой шпаргалке.

 

PS: Вот, кстати, неплохая ссылочка на вражеском Однако ее надо разумно воспринимать, некоторые вещи там написаны не совсем корректно, а некоторые излишни.

We'll be back soon.

Не секрет, что онлайновый магазин Apple иногда закрывается. И уж тем более не секрет, что это означает скорое появление каких-нибудь вкусных новинок или апдейтов. Для тех, кто в такие моменты судорожно обновляет страничку, в надежде одним из первых узнать что нового, предлагаю простенький скриптик.

----------------------------------------------------------------------------------------------------

#! /bin/bash

while [[  true ]]; do

STOREDOWN=`curl -s http://store.apple.com/us | grep backsoon `

if [ "$STOREDOWN" = "" ]; then

/usr/local/bin/growlnotify "Apple store is up!" -m "Let's see what's new"

exit

fi

sleep 20

done

----------------------------------------------------------------------------------------------------

STOREDOWN это переменная, которая становится непустой, в случае если по адресу http://store.apple.com висит желтенький листочек с надписью "We'll be back soon." Имя этого листочка (файлика backsoon.gif) мы как раз и ищем в коде страницы, и если находим загоняем в переменную. Далее проверяем значение переменной, если она пуста уведомляем пользователя через growlnotify и выходим из программы. В противном случае, ждем 20 секунд и повторяем все по новой. И так до бесконечности, точнее до тех пор, пока AppleStore не откроется.

 

 

 

 

Маленький повод для гордости.

Попался мне тут, под горячую руку, мелкий питоновский демоненок. Эту скотинку я, пару лет назад, нарыл уже не помню где и приспособил регулировать проблемы взаимодействия нас, любимых, с мастерхостом. Они, в то время, выкатили совершенно идиотские условия, которые в рамках инфраструктуры нашей сети решались либо быстро, но через костыль, либо правильно, но с переделыванием половины сервисов. Решили  побыстрому, демоненок как раз и играл роль костыля. Старался и мучался, но делал приятное мастерхосту. Работать он правда не любил и частенько норовил прилечь отдохнуть. Я, помнится, тогда потратил некоторое количество времени и нервов на попытку разобраться что-же этой твари не нравится, ну и повивисекствовал немного - на кишки его посмотрел. Был молодой, глупый, короче неасилил. Пришлось его подстегивать в стиле unix-way. Ага, по крону проверять состояние и если ленивая скотина решила похалявить - грохать заразу и поднимать заново. 

Сейчас вводя в строй очередной, более правильный сервачек, вспомнил о функции выполняемой демоненком и решил переселить его на новое железо. Нет, с одной стороны конечно, работает - не трожь, но с другой стороны трудился он на рухляди, которая в скором времени должна быть отправлена в утиль. С третье стороны - раз уж я о нем вспомнил - надо организовывать новоселье. Время есть, место тоже, даже настроение вполне рабочее. Работа плевая - минут 10-15 со всеми проверками.

Ага, 15 минут, размечтался. Однако через сорок минут попыток заставить демона хоть как-то работать в новом окружении (ядре/железе/версии linux'а) я  начал понимать что и как он делает, повнимательнее посмотрел на его код, зажмурился…и переписал всё нафиг! И оно даже заработало, более того, оно даже правильно заработало, без падений, лени и отжора CPU.

Теперь сижу страшно довольный собой. Конечно дело, по большому счету, пустяковое, Однако фишка в том, что я совершенно неожиданно для себя решил проблему, которая поставила меня в тупик 2 года назад. Вот так постепенно расту над собой.

Спасибо, я кончил и закурил :-)