Coding

Exception #07

15-ого марта состоялась конференция Exception #07, как всегда посвящённая программированию на динамических языках.

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

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

Я присутствовал далеко не на всех докладах, ибо кроме конференции в Киеве в этот день у меня были ещё некоторые дела. Так вот. Началось для меня всё в малом зале с доклада Андрея Светлова - ‘Мастер-класс по Python: Метаклассы + Дескрипторы’. Если быть откровенным, то тема для меня была интересна, но сам доклад не понравился. Докладчик жутко нервничал и рассказывал на мой взгляд не очень понятно. Но, кому надо, те поняли и задали вопросы.

Следующим для меня был доклад Сергея Щетинина - По ту сторону ООП: PEAK-Rules и PyProtocols. Человек очень любит поговорить, и рассказывал много и долго, много лишнего, а общих вещей на понятном языке тоже не было. А может просто я плохо его понял, ибо докладчик говорил очень бысто. Всем понравилась “физкультура” с поднятием рук, которая проводилась каждые пять минут доклада. Сергей спрашивал: “А кто здесь умеет жонглировать четыремя мячами?” (это не цитата, а исключительно по-памяти вопрос) и умеющие поднимали руки. Но тема доклада очень интересная.

Затем в малом зале выступил и я с докладом о Grails. В зале находилось очень много Java-разработчиков, и мне кажется что мы нашли общий язык. Было много хороших вопросов и я старался отвечать. Но, пару вопросов я таки не понял, а именно про миграцию баз в grails и про фильтры с использованием замыканий. В следующий раз начну доклад с ответов на эти вопросы. И, признаться честно, был очень удивлён реакцией слушателей, помидорами ни кого в тот день не закидывали :) Спасибо.

Так же довелось послушать Романа Калапуц с темой - Использование Jython и JRuby: разработка приложений для Java Virtual Machine. Рассказ был весьма интересный и познавательный. Разве что докладчик был немного перепуганный. Я бы с удовольствием послушал продолжение доклада на средующей конференции.

На оставшиеся доклады, к сожалению, попасть уже не удалось.

Пока у меня есть только видеозапись доклада с моим участием в “не очень хорошем качестве”

Обещаю в ближайшем времени выложить все материалы доклада “Разработка Веб-приложений с использованием Grails”

Трассировка в ColdFusion

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

Чтобы как-то облегчить жизнь я сделал кастом тег tracecode:

<cfswitch expression=#thisTag.ExecutionMode#>
<cfcase value=’start’>
<cfset start=GetTickCount()>
</cfcase>
<cfcase value=’end’>
<cfset end=GetTickCount()>

<cfoutput>
<h3>Total milliseconds elapsed: #end-start#</h3>
</cfoutput>
</cfcase>
</cfswitch>

Что бы найти медленный код нужно просто включить код в этот тег:

<cf_tracecode>

<!— Code Goes here —>

</cf_tracecode>

Преобразование IP-адреса в число

Вот, собственно вся функция, может кому будет полезно.

function ipToNumber($sIp) {
    $sPattern = ‘(25[0-5]|2[0-4]\d|[01]?\d\d|\d)’;
    if(!preg_match(“/^{$sPattern}\\.{$sPattern}\\.{$sPattern}\\.{$sPattern}$/”, $sIp)) {
        // invalid IP
        return -1;
    } else {
        $aNums = explode(‘.’, $sIp);
        $i = count($aNums);
        foreach($aNums as $nKey => $nValue) {
            $i–;
            $nResult += ($aNums[$nKey] * pow(256, $i));
        }
        return $nResult;
    }
}

Шаблон проектирования Singleton на PHP

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

Тогда ваш класс должен выглядеть так:

final class Database
{
    private static $instance;
   
    private function __construct()
    {
        // this code will never happen
    }
   
    public static function getInstance()
    {
       if (!isset(self::$instance)) {
           $class = __CLASS__;
           self::$instance = new $class;
       }   
       return self::$instance;
    }
   
    public function __clone()
    {
       trigger_error(‘It is impossible to clone singleton’, E_USER_ERROR);
    }
   
}

Данный класс объявлен как final для того, что бы от него не наследовались классы, обычно об этом забывают. Не очень хорошая идея наследовать свой класс от синглотна из-за статических членов. Но если вы всё так решите, то обязательно следует переопределить метод getInstance() и поле $instance.

Strange things

while (list(,$vvv) = @each($aTmp)) {
  $kkkk = substr($vvv,0,strpos($vvv,‘=’));
  $vvvv = substr($vvv,strpos($vvv,‘=’)+1);
  $aValues[$kkkk] = $vvvv;
}

Это кусок из кода, с которым мне приходится работать. Без комментариев.

Starting with PowerShell

Для установки Windows PowerShell требуется предварительно установленная .net-2.0. Весь пакет занимает порядка 1.5Mb, что совсем не много для программы подобной функциональности. Определённо начать знакомство с PowerShell стоит с изучения команды ‘help’. ‘help help’ - было моей первой командой. Для получения полной справки по какой-либо команде нужно добавить параметр -detailed или -full. При использовании параметра -detailed отображается практически та же информация что и при использовании -full за исключением того, что не выводиятся NOTES и дополнительные сведения о входных парамтерах запрашиваемой команды.

Вспоминая былые времена, захотелось иметь аналог команды ‘ps’. И, да, существует - команда ‘Get-Process’. Такая длинная запись не очень удобна в использовании, и существует псевдоним (alias) - ‘ps’. То есть


ps | sort cpu -descending


на самом деле является ни чем иным как:


Get-Process | Sort-Object cpu -descending

Windows PowerShell ps command

Псевдонимы можно задать и изменять самому, например:
Set-Alias myps Get-Process

ps С первого взгляда PowerShell очень красивый и логичный, и на мой взгляд более современный и гибкий, нежели любой Unix shell.

- Next »