December 18, 2008

Как скрыть код скрипта на Python для последующей его продажи.

Если вы пишите скрипты на продажу либо на заказ рано или поздно встает вопрос как скрыть код скрипта который вы продаете и не отдавать исходный код. Зачем это надо? Например для того чтобы скрипт сам по себе не пошел по рукам, за что вы будете получать 0$ со скрипта, который вы сделали для продажи. Для PHP был создан Zend Encoder. Но я уже не сижу на PHP, поэтому сегодня расскажу как скрыть код скрипта на Python.

Дело в том что все скрипты на Python при первом запуске пишутся интерпретатором в виде байткода в файлы с расширением .pyc (это не рус типа РУСский или что-нибудь в этом роде, это PYthonCompiled - т.е. скомпилированый Python код). Интерпретатор Python по умолчанию пытается запускать именно эти файлы, а если он не существует, то использует исходный код после чего записывает этот же pyc-файл. Эти файлы можно создать, так сказать, вручную перед распространением файлов.

Делается это так
>>> import py_compile
>>> py_compile.compile('megascript.py')

В результате рядом с megascript.py будет создан файл megascript.pyc который вы и будете продавать. Удачной разработки, и больших заработков!

Links: PEP 304 - Controlling Generation of Bytecode Files

Понравилось? помогло? – Подпишись на RSS!

December 3, 2008

Ориентация во сне по времени и связь с реальной жизнью.

Сегодня приснился довольно прикольный сон, в котором я был как бы в настоящем времени, как бы понимая свое текущее положение.

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

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

Баскетбольный марафон это такая штука когда местные организовывают команды с 2-х соседних городов и играют друг против друга 8 часов нон стоп в первую субботу декабря. Представляете 8 часов баскета? в прошлом году я первый раз попал на это событие и играл за местную команду, и даже (хвастаюсь) занял второе место по количеству набранных очков среди двух команд :). Нет там не какие то ламеры играли, у всех довольно хорошего уровня баскет. В этом буду второй и наверно последний раз, потому что к следующему году к декабрю я уже свалю отсюда куда то дальше. Хотя возможно приеду просто поиграть если не буду далеко где-то.

December 1, 2008

Отправляем сообщения об ошибках используя Gmail и модуль logging в Python.

Наверное многие как и я пользуются сервисами Google в том числе Google Apps for your domain, который позволяется не загоняться как минимум почтой на своем сервере и не бороться со спамерами использующими SMTP релей. В том числе сам Gmail имеет много преимуществ перед другими почтовиками. Отправляю почту я как правило тоже используя сервера gmail.

У программистов иногда стоит задача скриптами отправлять почту ( я не про спам ;) ), это может быть как контактная форма, так и какая то служебная информация от скриптов. Например скрипт оповещает о завершении какой-либо задачи, это могут быть какие то периодические отчеты, либо в случае ошибки отправлять письмо с данными о "происшествии".

November 30, 2008

Постим в twitter из командной строки.

Это очень простой скрипт использующий curl который поможет вам постить твиты в twitter прямо из командной строки. Создайте новый файл и добавьте в него следующие строки.
#!/bin/bash
curl --basic --user USERNAME:PASSWORD \
--data status="$*" http://twitter.com/statuses/update.xml -o /dev/null;

где USERNAME и PASSWORD должны быть заменены вашими данными. Сохраните файл с именем twit (ну или как вам захочется). Этот файл должен лежать внутри $PATH (незнаю как это умно сказать), например /usr/local/bin/twit или /bin/twit. Скрипт готов к употреблению.
twit "Тестим постинг в twitter из командной строки"

Вот и все. У меня на маке работает, на любом линуксе тоже должно работать (должен стоять curl). Хотя нет, не все. Мы же не хотим так просто светить свои логин и пароль на твитер. Поэтому совершим еще несколько телодвижений.
sudo chmod 551 /bin/twit
sudo chmod +s /bin/twit
sudo chown root /bin/twit

Теперь контент этого скрипта сможет читать только root, а запускать может кто угодно.

Stay tuned for more! 

November 11, 2008

SaaS. Что это такое, и кому это надо?


Случилось так что мне пришлось/захотелось связаться с довольно новым понятием как SaaS. Когда я к нему подходил, а это было больше чем пол года назад, я не знал о том, что это так называется, и что это вообще как-то называется. Я просто хотел написать сервис который, так сказать, будет сдаваться в аренду.

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

SaaS (Software-as-a-Service) - это бизнес модель предполагающая, попросту говоря, сдачу софта в виде вебсервиса в аренду. Т.е. это веб приложения доступные как правило из браузера имеющего доступ в интернет, и хостятся они на серверах провайдера. Отсюда и название Software-as-a-service — "Софт как сервис". Ярким представителем этой бизнес модели является SalesForce, так же считается что эта компания является первооткрывателем этого направления.

В западном интернете этот год уже ознаменовался бурным развитием и использованием этой бизнес модели, некоторые даже называют этот год годом SaaS. Кажется что эта бизнес модель является выгодной для обоих сторон — для провайдеров и для покупателей.

Стоит заметить что SaaS это не web 2.0. Web 2.0 это больше про социальные сети, блоги, генерируемый пользователями для других пользователей контент, разукрашеные дизайны и AJAX интерфейсы и т.д. Хотя в SaaS проектах AJAX интерфейс в любом случае приятен потому что он прост и быстр. SaaS это ваши традиционные бизнес приложения работающие через интернет и размещенные на ресурсах провайдера.

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

Но не все так сладко как показалось на первый взгляд. О преимуществах и недостатках этой бизнес модели, о ярких представителях, о проблемах создания а так же использования SaaS проектов и о многом другом я расскажу вам в следующихстатьях.

November 4, 2008

Используем MacFUSE в Mac OS X


Недавно открыл для себя такую штуку как MacFUSE и сильно упростил себе жизнь и работу. Некоторые блогеры называют MacFUSE технологией будущего.

Проект  MacFUSE, созданный разработчиком из Google Amit Singh, произошел от линуксового проекта FUSE, который позволяет создать файловую систему из любого контента любого сервиса или приложения.

Примеров использования этой технологии полно. Например подключение виндовой файловой системы в линуксе для всякого рода манипуляций с файлами и папками. Банально? А как вам создание файловой системы из RSS лент где папки это сами ленты, а файлы внутри этих папок это посты в RSS фиде которые можно редактировать, удалять, перемещать и т.д. Не юзабельно? Кому как. А более приближенный к реальности пример файловой системы на основе Google Docs где документы этого сервиса доступны в файловой системе? Фантастика, не так ли? Вот здесь или здесь можно посмотреть примеры использования MacFUSE.

UPDATE: Очень хороший пример использования MacFuse — Dropbox. Довольно активно пользуюсь этим сервисом, и мне очень нравится.

Я пока что воспользовался только утилитой SSHFS которая мне позволила иметь локальное зеркало сервера, за счет чего я могу копировать файл на сервер просто перетянув файл из одной локальный папки в другую, могу редактировать серверные файлы как локальные и т.д. Очень удобно. В планах вмонтировать Google Docs в свою файловую систему.

Вот здесь товарищи постарались и создали несколько примеров таких файловых систем. Весь код открытый, поэтому можно попробовать силы в этом направлении, и, возможно, появится на свет новый полезный проект, а не бестолковые социальные сети :)

UPDATE: Очень много посетителей попадают на этот пост из поисковиков. Причем часто по поиску "что такое macfuse". Если после прочтения этого поста возникают еще какие то вопросы, не стесняйтесь задавать в комментах :).

October 31, 2008

Получаем ширину скролла в браузере используя JavaScript.

Вечно создаю какие то непонятные вещи. Вот сегодня мне понадобилось определять ширину скроллбара в браузере. Причем не буду же я вручную их определять и задавать каким то массивом чтобы потом это срабатывало. Это не наш путь. Нужно чтобы динамически определялась эта ширина и выполнялись соответствующие действия.

Мне например нужен был этот функционал чтобы работал мой плагин к jQuery (который совершает хитрые манипуляции со скролами) как было задумано. Сам плагин расшарю немножко попозже, когда убежусь что он работает как надо и посчитаю что уже можно выложить :). Возможно кому то тоже такое пригодится. 

Код функции выглядит вот так:
function getScrollBarWidth () {
    var inner = document.createElement('p');
    inner.style.width = '100%';
    inner.style.height = '200px';

    var outer = document.createElement('div');
    outer.style.position = 'absolute';
    outer.style.top = '0px';
    outer.style.left = '0px';
    outer.style.visibility = 'hidden';
    outer.style.width = '200px';
    outer.style.height = '150px';
    outer.style.overflow = 'hidden';
    outer.appendChild (inner);

    document.body.appendChild (outer);
    var w1 = inner.offsetWidth;
    outer.style.overflow = 'scroll';
    var w2 = inner.offsetWidth;
    if (w1 == w2)
        w2 = outer.clientWidth;
    document.body.removeChild (outer);

    return (w1 - w2);
};

Пример можно посмотреть здесь и оценить размер своего .... кхмм... скролла. У кого какие размеры? :) у меня 15.

Stay tuned for more....

October 30, 2008

Google Developer Day в Праге.

Отметился Сегодня я расскажу о том как я посетил Google Developer Day который проходил в Праге 24 октября 2008 года. Поехали.

День начался очень рано и с приключениями. Как некоторые мои читатели уже знают я живу не в Праге, а на самом юге Чехии. Поэтому мне пришлось встать в 3 часа утра (надо же, более привычно ложиться спать в это время) чтобы быть в праге в 8 утра. Так вот так получилось что поезд, который по расписанию прибывает в 7:53 чудесным образом добрался до Праги примерно в 11:30. Незнаю на самом деле что произошло, но по пути поезд стал, и простоял на одном месте 2.5 часа, никаких автобусов все это время на подмену пригнать не могли – как говорили их небыло, но потом появились. Вообще с чешскими драгами (Ceske Drahy, аналог БЧ, РЖД) часто случается что поезд задерживается. Я всегда думал что это обусловлено глобальным ремонтом нашего направления дороги, но слышал много от кого что это не только в нашем направлении (впринципе даже поезд Москва - Прага, на котором мы сюда ездим обычно, тоже иногда с большими опозданиями приходит). Таким образом я приехал к обеду получается. Хотя успел попасть на 15 минут на сессию об Open Social так ничего интересного не услышав.

October 22, 2008

Быстрый сайт #1

Расположите контент на разных субдоменах для ускорения паралельной загрузки.


Идея в том что браузер может загружать только 2 файла (запроса) в один момент времени с одного домена. Это требование спецификации HTML 1.1 которой подчиняются браузеры. Таким образом если мы сможем загружать паралельно больше файлов, мы загрузим всю страницу быстрее. В этом случа используется лазейка в определении "с одного домена". Таким образом на практике можно распределить картинки, файлы таблиц стилей, JavaScript файлы, статические HTML страницы по разным субдоменам которые будут отличаться от основного домена.

Тем не менее вы должны учитывать что не рекомендуется использовать очень много субдоменов, т.к. каждый субдомен заставляет браузер делать поиск по DNS. Коллеги из Yahoo провели небольшое исследование на эту тему и пришли к выводу что вы должны использовать оптимально 2, но не больше 4 субдоменов. Я, например, в последнее время разделяю статику и динамику на 2 субдомена.

Источники: Circumventing browser connection limits for fun and profit; Optimizing Page Load Time;

October 10, 2008

Привет друзья

Привет всем... После долгого отсуствия и "дауна" блога я возвращаюсь к этому, неизвестно на сколько полезному, делу. Если кто-то не заметил, блог небыл доступен с начала августа и до сих пор, т.е. чуть больше 2 месяцев. Обусловлено это было моим "отпуском" и временным неимением сервера в распоряжении. Сложно себе представить отпуск у фрилансера, но я себе такой сделал – у нас в Чехии побывали родственники, и мы с женой побывали на родине.

За время отсутсвия я немного изменил отношение к своему блогу, и теперь попробую отнестись к нему более внимательно, писать более полезные вещи в надежде что они будут кому-либо полезны или просто интересны. Хотя я и решил по другому отнестись к своему блогу, понятие блогов в моем понимании не изменилось, т.е. я думаю что блоги не должны быть такими как они сейчас есть. О своем понимании блогов я думаю напишу в будещем.

Как некоторые могли заметить блог начинаю "снуля" в связи с тем, что, как я уже сказал, я переосмыслил свое отношение к ведению блога. А именно я решил вести его так, чтобы он был лицом моей профессиональной деятельности. То что было до этого сложно отнести к новому восприятию, хотя некоторые посты были нормальными, поэтому вероятно некоторые из них я перенесу сюда.

Так же произошли некоторые изменения в расположении блога. Раньше он был на домене blog.prudnikov.com, а теперь я перенес его на головной домен http://prudnikov.com/. Поэтому если кто-то оставался подписаным на RSS летну блога, прошу проверить адрес – для блога он должен быть таким http://feeds.feedburner.com/prudnikov. А мой микроблог (Powered by tumblr.com) сейчас находится на http://tumblr.prudnikov.com/ (RSS), перекочевав из домена prudnikov.com. Прошу извинить за такие миграции и обновить адреса в своих RSS ридерах.

А зачем вести и блог и микроблог? Отвечаю. Микроблог на tumblr удобен для постинга мелких вещей типа полезные линки, интересные видеоролики, фотки, цитаты – мне это удобно, особенно расшаривать линки. Я часто там расшариваю линки которые считаю полезными и интересными, поэтому рекомендую подписаться и на микроблог. В блоге же я решил писать полезные вещи по профессиональной теме. Так что подписываемся и на блог :)

Stay tuned.