Самый простой генератор паролей
Рубрика: Development, Юмор | 25 June 2008, 22:39 | Vadim Voituk
Цитата:
Работаю в вебконторе, сижу смотрю на девочку-программиста напротив -
она смотрит на монитор и бьёт кулаками по клавиатуре. Нежно так, но кулаками :)
- Че, грю, делаешь?! Альтернативные методы разработок?
- Да грит не, я пароль на фтп для пользователей генерирую %)
Источник: http://bash.org.ru/quote/393171
Самое смешное в том, что до недавнего времени я делал точно также. Пока сегодня не прийшлось сгенерировать порядка 50 паролей подряд.
Выручил меня такой вот примитивный генератор паролей:
base64 /dev/urandom | head -n1 -c6
Grails at LinkedIn
Рубрика: Development, Groovy, LinkedIn | 12 June 2008, 18:03 | Vadim Voituk
Когда-то, во время моего доклада на киевской встрече developers.org.ua, кто-то (кажется Алексей Колупаев) спросил где на реальных действующих проектах используется Groovy и Grails.
Первое, что я ответил – это LinkedIn. Но вот конкретнее рассказать, где там Grails а где Java, в силу непричастности к разработке этой соц-сети – не смог.
Теперь же инженеры LinkedIn сами поведали нам “где”, “как” и главное “зачем” у них используется Grails. Смотрим презентацию: [Далее...]
Аналог jQuery.ready() в Prototype.js
Рубрика: Ajax | 10 June 2008, 23:55 | Vadim Voituk
Недавно впервые удалось попробовать использовать JavaScript-библиотеку jQuery.
Из того, что понравилось сразу – это возможность выполнять JavaScript-код не по событию полной загрузки страницы (window.onLoad), а сразу после загрузки и инициализации DOM-дерева. Т.е. можно уже выполнять манипуляции с DOM-деревом не дожидаясь загрузки стилей, изображений и остальных медиа-компонентов.
В jQuery реализуется это 2-мя способами:
$(document).ready(function(){...})
и в сокращенной нотации
$((function(){...})
Но так как я являюсь давним пользователем prototype.js – сразу же захотелось такую же возможность и в нем. Как оказалось в версии 1.6 она уже есть, и использовать её можно таким образом:
document.observe('dom:loaded', function(){ ... })
или
Event.observe(document, 'dom:loaded', function(){ ... })
Работоспособность проверял на Prototype 1.6.0.2 в Firefox3, Internet Explorer 6 и Safari (Win+Mac).
PHP, MySQL и FOUND_ROWS() bug
Рубрика: Development, MySQL | 5 June 2008, 11:53 | Vadim Voituk
“Словил” сегодня пренеприятнейший баг, который стоил мне более часа потерянного времени.
Выполняем в консольном mysql-клиенте такой запрос:
SELECT SQL_CALC_FOUND_ROWS FROM tablename LIMIT 5;
Получем resultset из 5ти результатов (предполагается, что в таблице tablename больше 5ти записей)
Теперь в этом же соединении выполняем:
SELECT FOUND_ROWS();
Получаем значение, равное количеству строк в tablename – ничего сверхъестественного, все как и ожидалось.
Самое интересное начинается если повторить выполнить эти SQL-запросы из PHP-скрипта (при определенных условиях, но о оних ниже) – второй запрос будет всегда возвращать 0.
Причиной всему – , которая наблюдается при включенной опции
mysql.trace_mode=true
Дабы не поулчить подобную неприятность в своих проектах рекомендую пока установить в false.
При тестировании использовался PHP 5.2.1 и с модулем mysql client API 5.1.16-beta.
Groovy Classpath & Dynamic class loading
Рубрика: Development, Groovy | 4 June 2008, 11:55 | Vadim Voituk
В Groovy подключить дополнительные Java-библиотеки и классы можно 3-мя способами:
- Дописыванием пути к jar-у или директории с классами в глобальную переменную CLASSPATH
- Указанием значение параметра -classpath (он же -cp) при запуске groovy, groovysh, и тд.
- Размещением необходимых jar-ов в директории ~/.groovy/lib
При разработке небольшой утилиты парсинга и анализа лог-файлов мне необходимо было выбирать нужный jar-файл в зависимости от некоторых условий.
Потому ни один из приведенных способов мне не подошел.
К тому же мне необходимо было искать jar-файлы в директории, в которой находился сам скрипт, в то время как запускаться он мог из любой директории.
Вспомнив про черновик заметки о ClassLoader-ах, которую Юра все никак не соберется дописать и опубликовать, получилось что-то вроде:
Простой прием, демонстрирующий определение местополжения класса и загрузку дополнительных JAR-ов
[java]
def codebase = this.getClass().getProtectionDomain().getCodeSource().getLocation()
def f = new File(codebase as String)
def url = new URL(f.getParent()+"/commons-lang-2.3.jar")
this.getClass().getClassLoader().getRootLoader().addURL(url)
Class au = Class.forName("org.apache.commons.lang.StringUtils")
assert au.isEmpty(null) && au.isEmpty("")
[/java]
P.S. Кстати запускать groovy-скрипт в UNIX-среде можно точно так же, как и sh, perl, php, python скрипты – указанием в первой строке:
#!/usr/bin/env groovy
