Вернемся к этому позже

Внезапно понял какой фичи мне не хватает в Gmail.

Я очень хочу, что бы появился плагин, который позволяет отметить письмо как «временно прочитанное». Например: приходит мне днем письмо с напоминанием оплатить сервера или прочитать интересную статью, днем у меня нету времени или возможности этим заниматься и к данным вещам нужно будет вернуться вечером. Если оставить это письмо не прочитанным, чтобы не забыть вечером на него среагировать, то оно будет целый день мешаться на видном месте, почтовый клиент будет говорить что есть новые письма, а иконка на айфоне будет надоедать цифрой в красном кружке. С другой стороны, если отметить его как прочитанное, то велика вероятность забыть о нем и оно потеряется в сотне других писем проходящих через мой ящик.

Некоторые решают эту проблему с помощью хитрой системы ярлыков, другие держат под рукой evernote или remember the milk, а мне лень отвлекаться и делать столько действий, просто чтобы не забыть, уж лучше запомнить, реально.

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

Реально, эта фича спасла бы мир.


Про ценообразование при разработке сайтов.

Наткнулся на замечательный текст, от парня из OwlBox. Хочу сохранить сюда на память, что бы перечитывать когда в очередной раз мне предложат «помочь с сайтом» за кегу пива.

Каждый раз, когда я начинал трогать мышку менее чем за 1000$ я потом сильно жалел, не бывает «простеньких сайтов», аппетит приходит во время еды, требования плывут, и все в рот имели итеративный подход, если итерации сопровождаются соответствующими выплатами и этапами по договору. Это даже с точки зрения бухгактерии не выгодно. Это нижний порог. У хороших студий эта планка в 10 раз выше. На мой взгляд это правильная политика. При скудном бюджете есть миллион разных способов продвижения в интернете своих услух, не требующих сайта, работающего на имидж или выполняющего роль инструмента продаж.
Если обсуждается сумма ниже 1000$ — мы друг–друга просто не поймем, может быть кто–то другой поймет. От заказов нужно уметь оказываться.

Имидж — это декларация того, что мы можем потратить приличные бабки за хороший, годный, красивый и эффективный относительно целей заказчика сайт. Возможны комбинации. Но ключевой момент — потратить бабки и какие–то положительные свойства сайта. Я принципиально против того, что унитаз, покрытый позолотой эквивалентен золотому унитазу и вообще когда одно выдается за другое. Так как то, что король голый, как правило, все равно очевидно. Ну если вы не являетесь говносыночком пидораса из говноправительства, заказывающего сайт для говносколково.

Средний ценник среднего проекта под ключ у меня получается в районе $5000. Всякая верстка — это 1–15% от объема работ работы. Основной объем падает на тестирование и удовлетворение меняющихся требований. Пусть дизайн будет 1000$, программирование — 1000$ верстка и изготовление графического контента — еще $1000. На пальцах — это расклад при котором все участники процесса довольны.

С огромной вероятностью стоимость проекта относительно объема работ в итоге составит 5000–10000$ — косвенные расходы, непредвиденные работы, тестирование, изменений, детализация требований, дополнительные встречи с заказчиком, переговоры и т.д. Вот и получилось x2.

Если натягивается готовый шаблон на готовый движок, то все равно внезапно окажется что у нас не два уровня иерархии разделов, а все–таки 3, секретарша не справляется с wysywig редактором, гамма должна быть несколько светлее, внезапно образуется еще 200 единиц графического контента, шаблон выглядит как полное говно в IE6, которым пользуется заказчик из–за своей внутрикорпоративной политики и т.д.

Если вы не поняли — именно на это говно уйдет половина вашей работы. Если вам заказывают сайт по вашей оценке на 10k$, но бюджет заказчика позволяет всего лишь 7,5k$ а сам он видел что «что–то такое же» вообще делали за штуку и считает что за такие бабки получит священный грааль с элексиром вечной молодости, то это не клевый крупный заказ. Это плохая мерзкая жопа в которую вы гарантированно влезете. К тому же, с большой вероятностью, вы и объем работ оценили неправильно и он не на 10k$, а на 15k$ или больше.

Другой взгляд: если заказчик хочет хоть как–то заниматься продвижением, то либо сам сайт или его услуги должны быть просто замечательными, а это либо дорого либо сложно, соответственно, либо, если, это хоть сколько ни будь конкурентный рынок и область продвижения, стоимость продвижения будет составлять большое количество штук баксов. Очень странно, если конечная точка, куда приходит посетитель, будет стоит 100$

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


  Один комментарий   23 января 2012   Статьи  

PHP — Переворот числа

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

Задача простая. Перевернуть любое целое число используя только математические операторы. Было 5432, должно стать 2345.

<?php
 
    function reverseInt( $a )
    {
        $tmp = $a;
        $return = 0;
 
        while( $tmp > 0 )
        {
            /* 
 
            Играть с числами очень весело, можно находить и открывать для себя
            их волшебные свойства. Так, например, если 432 разделить на 10, 
            то мы получим 43.2
 
            Выделяя остаток от деления, нам очень легко решить нашу 
            задачу по перестановке числа.
 
            Таким образом, проходим по каждому разряду числа, 
            умножая его после каждой итерации на 10
            и прибавляя к результату остаток от деления,
            получаем нужное нам число.
 
            */
 
            $return = ( $return * 10 ) + ( $tmp % 10 );
 
            /*
            Каждый раз делим исходное число на 10, что-бы обойти каждый его разряд.
            */
 
            $tmp = intval( $tmp / 10 );
 
        }
 
        return $return ;
 
 
    }
 
    $foo = 123456789;
 
    echo 'Start: ' . $foo . "\n";
 
    $bar = reverseInt( $foo );
 
    echo 'End: ' . $bar . "\n";

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


Хитрожопые инкорпорейтед

Наткнулся сегодня на еще одно решение задачи, про переворот строки. Вспомнил этот комикс.

<?php 
 
$a = 'abcdefgh'; 
// Напишите здесь недостающий код, 
// чтобы результатом работы скрипта 
// была строка $a, повернутая наоборот 
echo $a; 
?>
<?php 
 
$a = 'abcdefgh'; 
$a='hgfedcba';
echo $a; 
 
?>


,   Нет комментариев   9 августа 2011   Заметки  

Dive into Python :)

Шесть месяцев назад я нашёл в Интернете книжку «Dive into Python». Странная книжка, толстая, да ещё на не русском языке. Усердно прочитал её, методично и вдумываясь, но таки ничего и не понял. Но что–то не отпускало меня — я пошёл на python.org и стал изучать стандартную библиотеку, старательно, скрупулезно, от корки до корки. Гугля примеры кода, я наткнулся на пост в блоге одного гуру, где было написано про PEP8. То, что рассказывал этот умудрённый опытом кодер, настолько впечатлило меня, что я словно в припадке безумия бросился зубрить эту конвенцию по написанию питоньего кода. У меня тряслись руки, по телу прокатывали волны возбуждения, я, можно сказать, бился в экстазе всё это время — и теперь могу процитировать наизусть любой пункт, даже если меня разбудить посреди глубокой ночи.

Новые знания окрыляли меня, я бросился писать (что бы вы подумали?) очередную имиджборду. Я не писал раньше имиджборд, эта была моей первой. По пути пришлось освоить азы вёрстки на html и css, но там всё оказалось совсем не сложно.

Я плавно двигался вперёд, наращивая функционал. И знаете что? Я упёрся в недостаток производительности. Ну, так мне показалось. Я делал замеры, устранял места с тяжёлым кодом. Тысячи раз запускал ab, но так и не сумел перейти порог в 300 запросов в секунду. Я как–то ожидал большего и был немного разочарован.

Гугл, снова гугл. Десятки статей и тем на форуме… Довольно быстро я заметил, что люди часто пишут про какие–то «асинхронные веб–сервера». Часто встречались названия Tornado и Gevent. Я прочитал про них подробнее — и был просто ошеломлён. Как мне это раньше не приходило в голову?! Это же, это просто гениально, чёрт меня побери!

Исходники в ведро, всё переписать! Меня переполняло новое знание, поток мыслей ровно ложился в строчки кода. Я просто не мог остановиться. Чашка кофе… Ещё чашка… Мой небольшой кусочек софта приобретал кристальную чистоту, я смертельно устал, но продолжал в умилении полировать его зудящими руками, нанося последние штрихи.

Пять тысяч. Я получил производительность в пять тысяч запросов в секунду. В ту ночь я так и не смог заснуть.

Увлекательнейший мир хай–лоада открылся передо мной. Позже я изучил ещё много классных вещей типа сверх-быстрых асинхронных key–value–хранилищ, или, например, такого необычного подхода к обработке данных, как map–reduce.

Это уже был другой я, новый, обновлённый. С незашоренным взглядом, с жаждой новых знаний и незнакомых концепций. Я летел вперёд, оставляя за спиной ступень за ступенью.

За пол–года я сменил несколько мест работы, и моя зарплата взлетела до умопомрачительных сумм. Сотни замечательных мест открыли передо мной свои двери. Любые, самые изысканные девушки проявляли просто чудеса изобретательности, чтобы находиться рядом со мной.

А ещё, я никогда не забуду тот момент, когда на одной из конференций я впервые в жизни поймал на себе завистливый взгляд. Это был взгляд какого–то сливающегося с толпой неудачника, взгляд преисполненный ненависти, презрения и желчного вожделения, направленного на мой Олимп. Наверное, он всю свою никчёмную жизнь писал на каком–нибудь си–шарпе или там на джаве, проводя долгие дни в одиночестве. И теперь начинал подсознательно догадываться, что долгие годы безуспешно пытался построить замок из навоза.