Мережі та ІТ
Скрінсейвер з гарними фотками для ледачих
Багатьом людям рано чи пізно стандартний майкрософтівський прапорець набридає і вони шукають якоїсь гарненької заміни. Одним хочеться оживити “відпочиваючий” комп’ютер усякими там анімованими пейзажами чи акваріумними рибками (ненав’язлива реклама
), а іншим типу мене обожнює дивитись на всякі там гарні фотки. Скрінсейверів, що просто показують фотографії з певних каталогів на диску нині дофіга, але всам факт завантажування фоток такого ледащо і гіка як я вельми дратує – ну не сучасно це, і кому ті зайві рухи потрібні? От як би то його зробити, щоб воно саме… Та сучасні технології не стоять на місці і вже мабуть навіть останній найледачіший користувач інтернету знає про інсування стрічок RSS – найзручнішого засобу отримувати свіжу інформацію без нагальної необхідності лазити по сайтах (найбільш адекватні з них ще й користуються єдино вірною RSS-читалкою – Google Reader, але зрештою донесення цієї істини до варварів не є темою цього допису і залишаєтсья на самоопрацювання). Так от, одне з чудес RSS полягає в тому, що воно дозволяє додавати в стрічку не лише звичайні статті (з текстом, відео та картинками), а і долучати до нього медіа-дані (як аттачменти у електронній пошті). Ті самі відео та картинки, але не як елемент статті, а як окрему сутність (в термінах RSS воно називається enclosure). Це важливо, бо комп’ютери все-таки тупі і виділити потрібну картинку з-поміж тексту їм не так легко як людині. Думаю ви розумієте до чого я веду: картининки можна автоматично отримувати з відповідних RSS і не треба нічого самотужки качати – розумні програми зроблять все за вас. Єдина умова – щоб ці картинки були оформлені у стрічці як enclosue (на жаль, не всі фото-сайти настільки просунуті, щоб видавати стрічки картинок з картинками не у вигляді вмісту новини, а саме як додаток).
Read the rest of this entry »
Google JS API
Ті, хто займаються Вебом, звісно, давно знають про цю фічу, тому я публікую це не стільки в розрахунку на когось, скільки на згадку собі, бо задовбався при створоенні кожного нового сайту шукати в шаблонах старих сайтів ці заповітні декілька рядків:
<script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script type="text/javascript">
google.load("jquery", "1.3.2");
</script>
Фрагмент вище дозволяє завантажувати потрібну версію jQuery прямо з Гугла і при виході нової версії не потрібно щось перезаливати на свій сайт – лише змінити в шаблоні заголовку сторінки номер версії і все готово.
Звісно ж таким чином можна завантажувати не лише jQuery, а й декілька інших Javascript-фреймворків. На сторінці Google AJAX Libraries API можна знайти всі бібліотеки та їх версії, що наразі підтримуються.
Більше того, таким чином можна також завантажувати Javascript’ові сервіси Гугла, наприклад такі як Google Maps, але для того доведеться звісно ж при завантаженні JSAPI вказати API Key, який отримується тут під конкретний домен. Тобто загальний вигляд підключення Google Maps API виглядатиме так:
<script type="text/javascript" src="http://www.google.com/jsapi?key=ABCDEFG"></script>
<script type="text/javascript">
google.load("maps", "2");
</script>
Детальніше про роботу з JSAPI можна знайти на сторінці Google AJAX API.
Пишем GUI з wxWidgets. Підготовка
Отож, як і обіцяв, вирішив почати потроху описувати свій досвід освоєння цього GUI-фреймворку. По-перше пара слів про сам wxWidgets. Це вже досить старий і тому стабільний і потужний фреймворк для розробки графічних інтерфейсів. Він кросплатформенний (є версії для Windows, Linux, MacOS та кількох інших, навіть для OS/2) і доступний у варіантах для декількох мов програмування (наприклад, C++, Python, Perl, C#, тощо). Як заявляють розробники прямо на головній сторінці сайту, основною особливістю їх фреймворку є те, що він повністю базується на “рідних” для того чи іншого середовища контролах, а не емулює їх, як робить більшість інших кросплатформенних GUI-бібліотек. За рахунок цього бінарний код виходить дуже компактним, а графіка виглядає природно для відповідної системи. Отака цікава штука. Трохи забігаючи наперед скажу, що, wxWidgets, звісно, не такі приємні в розробці як Qt (там взагалі просто сідаєш і пишеш – настільки логічно все побудовано, а кращої документації я ще не бачив ні до чого), але водночас після декількох днів роботи з ним він мені починає подобатись все більше і більше.
Ось така цікава штука цей wxWidgets. А тепер перейдемо власне до підготовчих кроків, які доведеться зробити перед тим як розпочати перший проект. Наразі я опишу процес для Win32, але згодом хочу спробувати і відповідно занотувати цю саму процедуру для Linux.
Read the rest of this entry »
latitude2brightkite
Останнім писком моди в сучасному інтернеті є всякі фішечки пов’язані з GeoLocation, тобто вашим місцерозташуванням на Земній кулі. Щоправда оскільки більшість сервісів пов’язаних з цією фічею базувались на Google Maps ми стояли дещо осторонь технологічного прогресу, бо не мали нормальної мапи українських міст. Але так не могло тривати вічно і ось декілька тижнів тому в Гугл Мапс з’явилась нормальна мапа України з деталями обласних центрів (не ідеальна, звісно, але яка є). Але повернемося до гео-сервісів. Одним з найцікавіших, на мій погляд, був Brightkite. Брайткайт – це такий собі Твіттер, але по-першу, з можливістю постити картинки, а по-друге – з прив’язкою до вашого розташування. Особливість його в тому, що ви можете фільтрувати повідомлення по радіусу відносно вашого положення, що в країнах де це розвинуто вельми прикольно. Але мені в Брайткайті не подобалась одна річ: треба було постійно оновлювати своє розташування вручну набираючи свою адресу, або (коли підтрики адрес в мапах не було) копіпастячи з Google Maps широту та довготу, що взагалі нівелювало задоволення від користування сервісом. Для сучасних телефонів з GPS типу iPhone та Andriod’ів вже є нативні додатки, які дозволяють постити місцерозташування в Брайткайт автоматично. Але у мене є лише старенький телефон з Windows Mobile 5 for Smartphones на борту. Щоправда одразу після релізу я на нього поставив Google Latitude – це такий собі виключно мобільний (принаймні для України) і значно примітивніший аналог Brightkite, але прикол його в тому, що навіть за відсутності GPS він визначав місце по сотам GSM-мережі, що хоч і дає похибку десь в 1-3 км залежно від соти, але все ж вельми непогано. Коротше кажучи, навідала мене думка склеїти їх якось і ось результат:

latitude2brightkite – це сервіс, на якому можна підконектитись до ваших аккаунтів на Brightkite (через OAuth, що цілком безпечно, бо не вимагає від вас зберігати паролі на сайті) та Google Latitude (тут треба буде вручну скопіпастити ваш Латітьюдівський ідентифікатор, бо, на жаль, поки що в мене не вийшло автоматизувати його отримання). Ну і далі сервіс використовуючи ці дані періодично отримує гео-інформацію з Латітьюд і постить її у Брайткайт. От і все. Там є ще пара дрібних багів, але я їх на цьому тижні пофікшу.
До речі, з OAuth я промучився добряче. Мануали які я знайшов – всі з купою води і ніфіга не зрозуміло, тому довелося дізнаватись подробиці того як працює ця кухня просто взявши робочий приклад для Google App Engine і дивлячись що і як там зроблено. Так що я може навіть переборю лінощі і трохи згодом напишу свій стислий мануал.
Гарні новини від Brainbench продовжуютсья
На днях Brainbench прислали мені листа повідомляючи, що через місяць в мене закінчується підписка на їх тести. Минулого року я вже писав, що вони пропонували річну підписку для деяких країн з 85% знижкою, тобто всього за 30$ на рік (річна підписка коштує майже 200$). І от я думав, що це типу була на рік замануха, а на наступний вже доведеться платити повну ціну, що, звісно, мене геть не влаштовувало, але заради цікавості подивився на інвойс і був приємно вражений, що на наступний рік ціна залишилась незмінною. Отаке. Так що в через місяць треба буде не забути сплатити, бо штука все ж прикольна для оцінки власних знань.
Вовча мобілізація або Dell, Huawei E800 та Utel
Отож від сьогодні мій ноут повністю обмобілізовано: тобто при необхідності в будь-якому місці з покриттям HSDPA або хоча б GSM у нього буде інет. Поки що це ніби-то і лише забавка, але так як вона обійшлася у вельми скромну суму, то чому б і ні? Тим паче, що можливості все ж гарні відкриваються: по-перше, тепер зможу повноцінно працювати принаймні по дорозі додому в Білу Церкву, по-друге, тепер у гарну погоду не обов’язково це робити вдома – можна піти в місто та посидіти десь в парку на лавці, чи на травичці спершись спиною об якесь деревце, що просто прекрасно.

Епопея з моїм омобілюванням почалася досить таки давно, здається наприкінці минулого року, коли завдяки Феру мну став власником чудового 3G-пакету U’Family 5 від Utel з інетом по 5 коп./МБ (навіть в GSM-роумінгу) всього за ~26 з копійками гривень в місяць абонплати. Але телефон у мене був звичайний і тому я весь час сидів виключно у білайнівському роумінгу. Після вимушеної покупки нового ноутбуку мну помітив, що у нього потенційно є вбудована можливість роботи з HSDPA модемами (навіть слот для сім-карти під акумулятором був), але такими фічами комплектуються лише збірки ноутів для США та Нової Зеландії. Я зацікавився можливістю встановлення такого обладнання у нас, та в сервісному центрі “Улісс” мені сказали, що зробити вони теоретично таке можуть, але модеми, що приходять від Dell залочені під AT&T і у них був випадок, коли модем не запрацював з нашими картками і тому вони мені порадили просто взяти модем у форматі Express-Card і забути про які б то не було проблеми. На тому мій запал тимчасово пропав, адже ціна, яку просив за модеми Utel кусаєтьcя вельми боляче: від найпростішого USB-модему 749 до Wi-Fi роутеру за 1699 грн. Але ж є така чудова річ як eBay! Час від часу я заходив туди цікавлячись поточними цінами на модем Huawei E800. Аналогічний девайс можна було придбати у Utel за 899 грн., що, погодьтесь, дещо забагато як для модему. І ось трапилося диво: десь на третій чи то четвертий захід я знайшов лот, де продавався новенький розлочений E800. Ціна на той час становила трохи більше 20$ і торги закінчувалась за 10 хвилин. І біддер був лише один. Накинувши в останні секунди розіграшу пару баксів я на диво з легкістю виграв лот. Загальна вартість разом з доставкою була в районі 45$, але в перерахунку на гривні навіть по курсу 8 (в той час як на момент покупки він був у районі 7.6-7.7), це було у 2.5 рази дешевше, аніж брати у того таки Utel. І от сьогодні, через кілька тижнів очікування, нарешті девайсик опинився у мене. Але це все приказка. Казка буде далі
Google datastore sucks…
Ну, не так щоб взагалі, але сьогодні сівши після півторатижневої перерви (співбесіди і все таке) за згаданий нещодавно новий веб-проект остаточно зрозумів, що для моєї задачі воно абсолютно не підходить. Google App Engine – непогана штука, але для простих проектів типу того ж Jaiku. У мене ж структура даних досить насичена відношеннями many-to-many та ще й має велику ієрархічну структуру, яку легко можна описати засобами Datastore, але працювати практично нереально із-за відсутності хоча б якоїсь подоби join’ів. Плюс до того, я під час написання минулого проекту на Django став вельми балуваним і те, що тут інтеграція з цим фреймворком через дупу і з купою обмежень мене кумарить. Сама робота полягає більше в тому як так ви**нутись, щоб хоч якось отримати отримати в Datastore те, що за допомогою Django Models робиться в один рядок. Коротше кажучи, мну вирішив вибиратись з цього болота, поки не пізно. Буду портувати те, що понаписував на нормальну Джангу. Сподіваюсь, на наступному тижні буде достатньо вільного часу і я встигну до кінця місяця швиденьку портувати код. Потім проект розгорну на тому ж хостингу, де і цей блог. Щойно перевірив: воно чудово працює і через mod_python, так що поки буду розробляти можна навіть не доплачувати за FastCGI (правда треба буде не забути сам хостинг проплатити, а то це, здається, останній місяць). Отаке… :-/
Приклад використання Twitter REST API
Вчора вночі щось мене пробило і я до 2-ї ночі сидів писав одну штуку собі в допомогу, а сьогодні вранці, коли хотів вже залити виявилось, що це вже зробили до мене, причому найцікавіше, що виглядає все один в один як те, що зробив мну. Не розумію, правда, як я не знайшов його вчора – мабуть вже заспаний був, але суть не втому. Щоб робота марно не пропадала поділюся парою коротких сніпетів на пітоні.
Правильне використання просторів імен
Переклад статті Using Namespaces Properly від Dejan Jelovic
Простори імен – дуже потужна особливість мови C++. Ця стаття не вчитиме синтаксису просторів імен, вона просто покаже як їх варто використовувати.
Простори імен лише обгортають всі імена, що в нього входять в якесь інше ім’я. Наприклад:
namespace net {
class Socket {
...
};
}
...
net::Socket socket;
Завдяки цьому ми впевнюємося, що якщо дві бібліотеки матимуть свої реалізації класу Socket, то якщо вони назвуть свої простори імен по-різному, ваша програма зможе їх використовувати без яких би то не було конфліктів.
Але це викликає ще одне питання: якщо дві незалежні компанії вирішать писати мережеві бібліотеки, то який шанс, що вони будуть робити реалізацію класу з назвою Socket? Я так думаю, що вірогідність цього відсотків 100.
Нам також подобається, коли простори імен легко набираються, що означає, що вони мають бути довжиною в 2-4 символи. З урахуванням цього, який шанс, що обидві компанії назвуть свій простір імен “Net”? 5 відсотків? 10 відсотків?
Як би там не було, це показує, що простори імен не вирішують цю проблему повністю – вони просто зменшують вірогідність її виникнення.
Read the rest of this entry »
CДурнеІм’яКласу
Вирішив на всяк випадок зібрати свої переклади кількарічної давнини на цьому блозі, щоб не загубились якщо що. Нижче – перша ластівка – переклад статті “CStupidClassName” від Dejan Jelovic. За пару годин ще пару перепощу – може комусь стане в нагоді.
Read the rest of this entry »



