<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2russianfull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>Копилка опыта</title><link>http://demoriz.ru/</link><description>Повседневные задачи и их решения</description><language>ru-ru</language><lastBuildDate>Sun, 27 May 2012 20:54:41 -0000</lastBuildDate><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/demoriz" /><feedburner:info uri="demoriz" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2Fdemoriz" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fdemoriz" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.feedburner.com%2Fdemoriz" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/demoriz" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fdemoriz" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fdemoriz" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fdemoriz" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare href="http://lenta.yandex.ru/settings.xml?name=feed&amp;url=http%3A%2F%2Ffeeds.feedburner.com%2Fdemoriz" src="http://lenta.yandex.ru/i/addfeed.gif">?????? ? ??????.?????</feedburner:feedFlare><item><title>Простой ORM на php</title><link>http://feedproxy.google.com/~r/demoriz/~3/bflQcr0ijG0/</link><description>Совсем недавно стояла передо мной задача настолько специфичная, что я даже немного растерялся при выборе инструментов. Не буду вдаваться в подробности самой задачи, это уже собственность заказчика, обозначу необходимости. Php+mysql. Казалось бы, что тут специфичного на первый взгляд :). Ну да, практически дефолтная связка, но вот загвоздка, остальные условия были настолько жёсткими, что использовать какие либо готовое решение (CMS, CMF, Frameworks) казалось по меньшей мере неудобным. Хотя, не стану спорить, скорее всего на моём месте матёрый php-шник внедрил бы, что нибудь сильное, а я же решился писать велосипед. Почти велосипед, потому что ORM я взял готовый, ну настолько лень было писать SQL запросы вручную :)
&lt;br /&gt;
&lt;br /&gt;Моя лень толкнула меня на поиск чего то простого и в тоже время удобного. Пообщавшись с «гуглом» я наткнулся (где то в дебрях stackoverflow.com) на рекомендацию некоего idiorm. Перейдя на сайт проекта и пробежавшись глазами по простым примерам использования я понял ,что это то, что мне нужно. Вся ORM в одном файле. Какого либо описания самой базы и её таблиц не требуется. А сами методы взаимодействия настолько очевидны что понятны практически без дополнительного описания.
&lt;br /&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/hDn6MhtUz7sulkeLyuB122cg-48/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/hDn6MhtUz7sulkeLyuB122cg-48/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/hDn6MhtUz7sulkeLyuB122cg-48/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/hDn6MhtUz7sulkeLyuB122cg-48/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/demoriz/~4/bflQcr0ijG0" height="1" width="1"/&gt;</description><guid isPermaLink="false">http://demoriz.ru/post-26/</guid><feedburner:origLink>http://demoriz.ru/post-26/</feedburner:origLink></item><item><title>Генератор (x)html-css скелета.</title><link>http://feedproxy.google.com/~r/demoriz/~3/1aD44nGaPa8/</link><description>Не сказать конечно, что мне часто приходится верстать, но такая необходимость время от времени появляется. А иногда я делаю это даже с удовольствием. Правда это удовольствие довольно жестко разбивается о проблемы кроссбраузерности. Привет IE, долгих лет тебе жизни.
&lt;br /&gt;То о чём я хочу вам сегодня рассказать, скорее всего для многих покажется банальностью. Но всёже, вдруг кто то ещё не в курсе? Вдруг для кого то это станет ещё одним полезным инструментом? Если это так, то пользуйтесь на здоровье.
&lt;br /&gt;Каждый раз начиная нарезать какой либо макет, я ловил себя на мысли что всегда делаю это практически по одной наезженной схеме. Хидер, футер, сайдбар и тд и тп. Следующей мыслью было сделать один обобщённый шаблон с которого можно было бы начать вёрстку практически любого, более-менее типового сайта. Ведь это же логично, избавиться от однообразной рутиной работы, не повторяться, DRY (привет Django). У многих такие шаблоны скорее всего даже есть.
&lt;br /&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/5o9BUAB-rD7139lE7G1E2LNt-fc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5o9BUAB-rD7139lE7G1E2LNt-fc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/5o9BUAB-rD7139lE7G1E2LNt-fc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5o9BUAB-rD7139lE7G1E2LNt-fc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/demoriz/~4/1aD44nGaPa8" height="1" width="1"/&gt;</description><guid isPermaLink="false">http://demoriz.ru/post-25/</guid><feedburner:origLink>http://demoriz.ru/post-25/</feedburner:origLink></item><item><title>Синонимайзер (Haskell)</title><link>http://feedproxy.google.com/~r/demoriz/~3/GqqO4qaEj_Q/</link><description>Когда я первый раз написал &lt;a rel="external nofollow" href="/post-6/"&gt;синонимайзер на PyQt4&lt;/a&gt;, я и не подозревал, что он станет неким "Hello world" для gui приложений. Следующий &lt;a rel="external nofollow" href="/post-10/"&gt;вариант реализации синонимайзера&lt;/a&gt; был на Java. Кто дальше? Исходя из заголовка, не сложно догадаться, следующим будет — Haskell.
&lt;br /&gt;Haskell давно не даёт мне покоя. С того самого момента, когда он заинтересовал меня своей необычностью, я неоднократно забрасывал и вновь возвращался к постижению монад, стрелочек и прочих прелестей. Началось всё с интереса функциональному программированию в целом. Я с любопытством исследователя присматривался к достойным представителям этой парадигмы. Даже купил &lt;a rel="external nofollow" href="http://ru.wikipedia.org/wiki/%D0%A1%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D0%B0_%D0%B8_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%BF%D1%80%D0%B5%D1%82%D0%B0%D1%86%D0%B8%D1%8F_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC" target="_blank"&gt;sicp&lt;/a&gt; в бумаге. Честно сказать — зацепило. Но что то мне не хватало в Scheme. Я не хочу сказать, что Lisp плох, скорее это была субъективная «не симпатия». В Haskell меня привлекла лаконичность и математическая красота исходного кода. Окрылённый чувствами я практически сразу же схватился за довольно непростую задачу &lt;a rel="external nofollow" href="/post-18/"&gt;обфускатор js&lt;/a&gt; которую так и не решил полностью. Сейчас смотрю на тот пост и многое мне не нравится. Возможно перепишу в будущем с использованием библиотеки &lt;a rel="external nofollow" href="http://www.haskell.org/haskellwiki/Parsec" target="_blank"&gt;parsec&lt;/a&gt; и доведу до логического конца. Но это потом, а сейчас — синонимайзер ;).
&lt;br /&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/PRt8SZrXE3spHsJYE8P_ElQc-lY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/PRt8SZrXE3spHsJYE8P_ElQc-lY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/PRt8SZrXE3spHsJYE8P_ElQc-lY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/PRt8SZrXE3spHsJYE8P_ElQc-lY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/demoriz/~4/GqqO4qaEj_Q" height="1" width="1"/&gt;</description><guid isPermaLink="false">http://demoriz.ru/post-24/</guid><feedburner:origLink>http://demoriz.ru/post-24/</feedburner:origLink></item><item><title>AutoMount (Python)</title><link>http://feedproxy.google.com/~r/demoriz/~3/prKGCW8dCac/</link><description>Давольно часто приходится работать с файлами и каталогами на удалённых серверах. Задачи разнообразные, но зачастую сводятся к обычной работе с файловой системой. Создание, удаление, редактирование и тд... Для удобства в такой работе я монтирую (Linux на десктопе) файловую систему удалённого сервера локально, это позволяет использовать уже привычные для работы инструменты: редакторы, файловые менеджеры.
&lt;br /&gt;Монтирую с помощью sshfs и curlftpfs, в зависимости от типа доступа. Всё хорошо, да вот только аккаунтов накопилась целая куча из которых постоянно используемых чуть больше десятка.
&lt;br /&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/gHNwp1S9-igKeS8W5MSdvRDjP98/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gHNwp1S9-igKeS8W5MSdvRDjP98/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/gHNwp1S9-igKeS8W5MSdvRDjP98/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gHNwp1S9-igKeS8W5MSdvRDjP98/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/demoriz/~4/prKGCW8dCac" height="1" width="1"/&gt;</description><guid isPermaLink="false">http://demoriz.ru/post-23/</guid><feedburner:origLink>http://demoriz.ru/post-23/</feedburner:origLink></item><item><title>Genie</title><link>http://feedproxy.google.com/~r/demoriz/~3/2vnb7-kUbZc/</link><description>Вам нравится синтаксис Python? Простота и лёгкость с которой можно решать не простые задачи. Вот простейший пример работы со списком:
&lt;br /&gt;
&lt;br /&gt;&lt;pre class="prettyprint linenums"&gt;
l = []

l.append("Genie")
l.append("Rocks")
l.append("The")
l.append("World")

for s in l:
    print s

print " "

l[2] = "My"

for s in l:
    print s
&lt;/pre&gt;
&lt;br /&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/nqH7o8xZg_F7SB0q0n4oIqaj3iM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nqH7o8xZg_F7SB0q0n4oIqaj3iM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/nqH7o8xZg_F7SB0q0n4oIqaj3iM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nqH7o8xZg_F7SB0q0n4oIqaj3iM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/demoriz/~4/2vnb7-kUbZc" height="1" width="1"/&gt;</description><guid isPermaLink="false">http://demoriz.ru/post-22/</guid><feedburner:origLink>http://demoriz.ru/post-22/</feedburner:origLink></item></channel></rss>

