Apr 11

lrrr анонсировал открытия очередного digg-клона, в этот раз посвященного, как можно прочесть выше функциональным (и не только) языкам программирования:

Тем временем мы с Сёмкой организовали тут недодигг для программистов, утилизировав под это его давно пустовавший домен defun.ru

Основная тема — новости и ссылки о функциональном программировании, разных альтернативных и перспективных языках, ну и про computer science вообще. Ключевые слова — хаскель, erlang, lisp, smalltalk, ocaml. Ruby, groovy и питон туда тоже отлично впишутся.Сервис находится в состоянии лямбда-тестирования ©, так что некоторое время все еще будет несколько глючить и тормозить, так что баг репортам мы будем рады -> пишите на lrrr@defun.ru или semka@defun.ru.

Там за-defun-ено уже довольно много ссылок, так что не медлим, а идем на сайт и читаем, читаем, читаем!

PS. На данный момент сайт несколько… эммм… лежит. Видать, много пользователей привлекли. :) 

written by FX Poster

Apr 10

В последнее время всё больше стал замечать, что хороших, интересных блогов, пишущих про то, что мне интересно, практически нет. Практически нет статей, описывающих всякие новые технологии разработки, проектирование, в которых присутствуют интересные и полезные примеры по client-side программированию в web. Интересных для меня заметок по PHP я не видел уже фиг знает сколько…

Складывается впечатление, что в рунете могут только и делать что:

  • переводить западные интересные материалы - интересно, полезно, но обидно, что наши о таком не пишут.
  • копипастить документацию к различным фреймворкам, в основном - PHP, JS. Ну, или приводить свои примеры… которые почему-то 1 в 1 похожи на документационные.
  • выдавать хиленькие статейки о том - “вау, я тут попробовал <вставьте свой название>! офигительная штука!”. Каюсь, я сам в эту категорию попадаю.

Так же не радует зацикленность русскоязычных web-программистов на своих велосипедах - да вы посмотрите, каждый третий юзает “своё”, “потому что круто” и “мне не нужны чужие ошибки”. Своё, в основном, оказывается, полнейшей фигней… Еще не нравиться, что из-за появления всяких фреймворков, многие теперь считают себя крутыми программистами - пишут “сайты”, даже не понимая, как оно внутри работает. Особенно это касается применения JS-фреймворков - о том, как работают event’ы в JS знают единицы (я, кстати, сам недавно только узнал, но я учусь)… и так далее…

PS. Извиняюсь… Наболело…

PPS. Вот чем мне нравиться C++ - там, если не знаешь, то не повыёбуешься повыделываешься, как с PHP…

written by FX Poster

Apr 09

Пришло мне на днях письмо следующего содержания:

Recently, mrmob.com expired and we acquired it
in a domain name auction. Since you own the mr-mob.com
version of this domain name we wanted to provide you
with the opportunity to own the preferred mrmob.com version.

Our company specializes in recovering preferred expiring
domains and either selling them to individuals such as
yourself or building out our own web presence on those
valuable domains.

mrmob.com is a pretty darn good domain name and,
the truth is, the mrmob.com is a far stronger version of the
name than then mr-mob.com is.

* mrmob.com is much easier to remember
* mrmob.com conveys Professionalism that mr-mob.com cannot match.

If you’d like to own mrmob.com, you can buy it
now by covering our acquisition costs and a modest profit.

If you have any interest I encourage you to act quickly
because this domain name will only be offered for sale
for a limited time.

А за ним еще одно:

Earlier today I emailed you about the domain name mrmob.com,
but I forgot to mention something at the time…

If you decide to buy the mr-mob.com (здесь, видать, должно быть mrmob.com) version of your domain name, you don’t actually
have to rebuild a brand new website to get great value from the mrmob.com (а здесь наоборот - mr-mob.com)
domain name.

What many people do is simply forward the .com domain to your existing
site. If you do this, whenever anyone goes to mrmob.com they
end up on your current website.

Forwarding mr-mob.com to your existing website is super simple and takes less
than two minutes to set up (we’re happy to help with this if necessary).
To grab this domain while it’s still available, you can buy it online
at: mrmob.com or by phone by calling 1-563-823-4644.b

И через пару дней еще одно:

A couple of days ago I emailed you about the domain name
mrmob.com . Since you own the mr-mob.com version of
the domain, I thought you’d want the preferred ‘.com’ version.

If you’re interested, please let me know or use the secure link
below to buy the domain as soon as possible otherwise I’ll make
other plans with the domain.

Here’s the Secure Link:

(реально секьюрный линк :))

Also, Here’s the email I sent you a couple of days ago
in case you missed it….

Recently, mrmob.com  expired and went into a
domain name auction. We acquired it and, since you
own the mr-mob.com version of this domain name, we
wanted to provide you with the opportunity to own the
preferred mrmob.com version.

Our company specializes in recovering preferred expiring
domains and either selling them to individuals such as
yourself or building out our own web presence on those
valuable domains.

mrmob.com is a pretty darn good domain name and,
the truth is, the mrmob.com is a far stronger version of the
name than the mr-mob.com is.

* mrmob.com is more intuitive and easier to remember.
Odds are people trying to get to
your website are inadvertently going to mrmob.com
because they assume that’s where they can find you.

mrmob.com conveys Professionalism that mr-mob.com
cannot match.

If you’d like to own mrmob.com, you can buy it
now by covering our acquisition costs and a modest profit.

If you have any interest I encourage you to act quickly
because this domain name will only be offered for sale
for a limited time.

Как прочел я эти письма - сразу так весело стало. :) Интересно, и много народа дураков покупает домены на таких вот “аукционах”?

PS. За домен “попросили” всего лишь 458$. :) 

written by FX Poster

Apr 09

Добро пожаловать в CSS Naked Day!

written by FX Poster

Apr 08

Что бы вы предпочли - datepicker или 3 select’а для дня, месяца и года?

У нас на проекте мнения разделились, потому решил устроить опрос…

written by FX Poster

Mar 30

Собственно, в понедельник дочитал я эту книгу… Читается, как и “Getting Real” очень легко - никаких тебе сложных формул или примеров с кодами - практически обычная художественная литература с огромным уклоном в IT.  :) Всем, кто хоть как-то касается IT - практически must read, остальным - по желанию.

В книге освещаются довольно интересные вопросы как по технологиям программирования (в частности, .NET), так и советы по устройству распорядка своего рабочего дня, как рекомендации о том, как выбирать сотрудников себе на фирму, так и рассказы о Unicode и “законе дырявых абстракций”. Кстати, все (или практически все) рассказы из этой книги были сначала опубликованы на блоге Джоела, который я тоже советую читать всем, кто “хочет знать больше”.

PS. Линуксоидам читать обязательно! Почему - увидите. :) 

PPS. В этой книге некоторые вещи подаются в представлении, абсолютно ортогональном тому, про которое рассказывает “Getting Real“. И если вы после прочтения обоих книг впадете в ступор - я вас предупредил! ;)

written by FX Poster \\ tags:

Mar 29

Собственно, продолжим начатое

Сегодня мы займемся установкой Symfony на ваш компьютер. Первым делом идем на офсайт и смотрим страницу, описывающую процесс установки! Несмотря на наличие этой страницы, мне всё же задают вопросы - “как ставить”, “какой способ установки выбрать” - судя по всему, такая статья лишней не будет.

Существует 3 основных способа установки Symfony на ваш компьютер:

  1. Скачать архив
  2. Установить из SVN
  3. Установить через PEAR

Установка путем скачивания архива

Скачиваем архив (symfony 1.1 beta 2) с официального сайта, и распаковываем в любую директорию (не обязательно в php’шный include_path). После чего фреймворком уже можно пользоваться. Но есть неудобства - для того, чтобы пользоваться консольными командами - прийдется каждый раз прописывать в консоли путь к файлу “symfony.bat” (или “symfony”, в зависимости от того - пользуетесь вы ОС на основе *nix или Windows), этот файл находится в ./data/bin. Для того, чтобы убрать этот недостаток:

  • под Windows - пропишите путь к “symfony.bat” в переменную PATH (помочь вам сделать это может Google).
  • под *nix - запустите “sudo ln -s /<путь к директории, куда вы распаковали архив>/data/bin/symfony /usr/bin/symfony”

После этого можете пользоваться в консоли командами типа “symfony init-project” и т.д.

Плюсы: простота - кроме скачивания и распаковывания архива ничего не нужно делать; если на компьютере, на который вы собираетесь устанавливать Symfony, нет интернета - достаточно просто принести архив на этот компьютер.

Минусы: отсутствие автоматизации - для обновления Symfony прийдется самостоятельно повторять процедуру.

Установка из SVN

Если вы не знакомы с SVN - лучше выберите первый вариант. Процедуру прописывания путей к ./data/bin/symfony прийдется повторять и здесь. Для установки - перейдите в директорию, куда хотите установить symfony и введите:

svn checkout http://svn.symfony-project.com/branches/1.1

в *nix-ОС, либо проделайте подобную процедуру (checkout) через TortoiseSVN под Windows - объяснять не буду - у TortoiseSVN интуитивно-понятный интерфейс.

Плюсы: можно удобно обновляться до самой последней версии с помощью возможностей SVN; если на компьютере, на который вы собираетесь устанавливать Symfony, нет интернета - достаточно просто принести директорию, куда вы “установили” Symfony на этот компьютер.

Минусы: в SVN может находится не совсем стабильная версия (стабильные версии хранятся в http://svn.symfony-project.com/tags/); способ сложнее для тех, кто не умеет работать с SVN.

Установка через PEAR

Если у вас не установлен PEAR - тогда вам пора обратится к Google.

Установка очень проста (перевод доки с офсайта):

Введите в коммандной строке:

$ pear channel-discover pear.symfony-project.com

Для установки стабильного релиза (на данный момент это 1.0.12), введите:

$ pear install symfony/symfony

Для установки бета-версии (на данный момент - 1.1 beta 2, т.е. то, что нам нужно), введите:

$ pear install symfony/symfony-beta

Для обновления Symfony воспользуйтесь следующими командами:

$ pear upgrade symfony/symfony

или

$ pear upgrade symfony/symfony-beta

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

Минусы: проблемы с установкой на компьютерах без интернета (я не зря это пишу, такие вопросы уже были).

Есть и еще один способ:

Установка sandbox’а

Sandbox - это “пустое” приложение Symfony вместе с самим фреймворком. Скачать его можно отсюда. Архив распаковываем (!!!) в директорию сервера, например: localhost у вас настроен на директорию c:\www\. Вы распаковали архив в директорию c:\www\test\ таким образом, что директория web у вас содержится в c:\www\test\web\. После этого запускаем сервер и заходим на адрес http://localhost/test/web/ и видим начальную страничку, сгенерированную Symfony.

Я сам в случае с Symfony 1.1 воспользуюсь именно sandbox’ом.

Ссылки:

  • У Макса появилась отличнейшая статья о том, что сейчас наблюдается в рунете с блогами с SMO. Знать бы, как с этим бороться…
  • Тем, кто использует Propel в Symfony -появился отличный плагин, упрощающий написание запросов через Criteria - sfPropelFinder.

written by FX Poster \\ tags: ,

Mar 27

Ну что ж, начнем повествование…

В Symfony 1.1, в отличии от предыдущей версии, полностью изменилась работа с формами (а также еще очень многими вещами, которых, я надеюсь, я коснусь позже) - вместо кучи кода, разбросанного по многим местам (которым, впрочем, вполне удобно пользоваться благодаря достаточно удобным view helper‘ам) появилось достаточно красиво спроектированная ОО-система, собирающая логику работы с формами в одном месте.

На That’s Quality не зря назвали серию постов “Forms, Widgets and Validators” - работа с формами предполагает знания именно об этих трех компонентах, которые объединены под общим названием Form Framework:

  • Forms - компонент отвечает за логику работы формы, не зацикливаясь на её внешнем виде.
  • Widgets - собственно, классы, представляющие собой графические элементы формы. Здесь определяется то, как форма будет выглядеть внешне.
  • Validators - компонент, отвечающий за проверку правильности введенных значений в форму.

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

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

Создаем саму форму в контроллере:

class userActions extends sfActions
{
  public function executeIndex()
  {
    $this->form = new RegisterForm();
  }
}

И выводим её во View:

<form method="post" action="<?php echo url_for('user/index') ?>">

<table cellspacing="0" cellpadding="0">
  <?php echo $form ?>
</table>

<div class="submit">
  <input type="submit" value="Submit" />
</div>

</form>

Что это еще за RegisterForm? Узнаете завтра, а пока что советую вспомнить, о чем я писал в статье про формы в Symfony 1.0. Вспомнили? Теперь стало понятно название RegisterForm? :)

written by FX Poster \\ tags: ,

Mar 26

Засел я сейчас за написание давно обещанной статьи про новый Form Framework, который будет включен в состав Symfony 1.1. Пока разобрался, что и как подключать - Symfony 1.1 Sandbox упорно не хотел работать с базой данных так, как нужно было бы, пока поглядел в кодах - что и как нужно делать (а то порядком уже подзабыл всё, что я смотрел при прошлом просмотре Symfony 1.1). В общем, решил я, что одной статьей дело не обойдется - слишком уж много всего рассказывать нужно, так что с завтрашнего дня я буду выкладывать одну статью в день, которые будут касаться форм в Symfony 1.1. Эти статьи можно будет считать “русским аналогом” вот этого цикла статей - это не будет перевод статей, скорее я буду руководствоваться тем, что написано там, чтобы знать, куда дальше двигаться в своем повествовании, при этом, возможно, останавливаясь на некоторых моментах, которые, на мой взгляд, достаточно важны для новичков в Symfony.

В общем, посмотрим… Завтра посмотрим. :)

PS. Сегодня, кстати, вышла вторая бета-версия Symfony 1.1, на которой я и буду тестировать всё, что я напишу. Список изменений по сравнению с Symfony 1.0 лежит здесь - достаточно занимательное чтиво.

written by FX Poster \\ tags: ,

Mar 21

Собственно, возникла проблема - заказчик хочет на сайте URL’ы определенного вида. Всё бы ничего - но то, что он хочет очень сильно расходится с тем, как работает сам сайт. Так вот, задание таково - нужно написать регулярку, которая бы выдавала true на всё, не включая (account|comment|user). В принципе регулярку такую я составил: /(?!(account|comment|user))/. Проблема в том, что рутинговая система накладывает свои ограничения на регулярки, а точнее приписывает к ним слева и справа свою фигню: '#^(?:\\/(<вот сюда можно вставлять всё, что угодно>))?$#'. Вопрос таков - можно ли что-то вставить в средину последней регулярки так, чтобы она вела себя как и моя, описанная выше. Если да - подскажите, что вставлять, а нет - так нет, буду через mod_rewrite решать проблему.

written by FX Poster