Для тех, кто не в курсе, zsh – это такой shell-интерпретатор, наподобие bash и ему подобных. Привычка его ставить пошла от FreeBSD, где дефолтные tcsh и csh совсем не юзер-френдли на мой взгляд. Может и их можно настроить до нормального уровня, но ведь настоящие герои всегда идут в обход :).
Итак, в zsh можно включить достаточно мощный автокомплит просто «тыкнув пару кнопок» в консоли после первого запуска. Однако, по сравнению с большинством дефолтных поставок bash’а в разных дистрибутивах линукса, ему всё же не хватает цветастости. Но это дело легко поправимо, если добавить в файлик ~/.zshrc следующие алиасы:
# color
if [ -x /usr/bin/dircolors ]; then
test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dirc$
alias ls='ls --color=auto'
alias dir='dir --color=auto'
alias vdir='vdir --color=auto'
alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
fi
После этого необходимо перезапустить сеанс консоли (зайти заново в систему, запустить ещё одну копию zsh или перезапустить графический терминал – terminal, konsole, etc) и можно наслаждаться цветным выводом команд grep, ls и всего прочего описанного.
Не мог на этом просто взять и остановиться, ибо страдание фигнёй штука затягивающая. Дальше приделал следующую вещь:
Читать далее…
lizz Unix-like, Администрирование shell, zsh
На этот раз будет мини-заметка, уж слишком мне понравился трюк, о котором пойдёт речь дальше :).
Наверное любому программисту приходится часто писать конструкции такого вида:
if a == b:
c = d
else:
c = e
Как-то разбирая исходники какого-то проекта наткнулся на весьма компактную замену. Вот для сравнения два аналогичных блока кода с использованием логических операций python’а и с использованием конструкции if-else:
# if-else:
if random.random() > 0.5:
a = 1
else:
a = 0
# and-or style:
a = random.random() > 0.5 and 1 or 0
На мой взгляд выглядит гораздо лучше и компактнее (да-да, if-else можно записать в 2 строчки вместо 4, но мне так не нравится ^__^) . Другое дело, что некоторым это может показаться противоречиво с некоторыми пунктами дзена python’а (import this), но это спорно :). В общем использую там, где считаю нужным.
Кстати, если кого-то интересует производительность, то она примерно одинакова, далее выложу тесты и объяснение логики для тех, кому интересно.
Читать далее…
lizz Программирование, общие вопросы hints, Python
Статистика – вещь не только интересная, но иногда и полезная :). Wordpress – один из популярнейших движков php для блогов, для него существует огромное количество плагинов, в том числе и плагины для просмотра статистики по посещаемости. Один из таких плагинов – statpress. Но есть в нём некоторые недостатки, автор плагина добавил распознавание некоторых русских поисковых движков, но так же некоторые упустил из виду. Хотя даже тот же Яндекс обрабатывается не очень хорошо, не учитываются переходы с yandex.ua, yandex.kz и т.п. Но opensource тем и хорош, что всегда можно поправить исходники, если что-то тебя не устраивает :). Далее пойдёт речь об оптимизации плагина statpress под Российские поисковики.
Читать далее…
lizz web, Программирование PHP, StatPress, WordPress
По работе пришлось изучать работу Java’вского ORM’а, пока что знаком только бегло, но некоторые полезные штуки для новичка решил записать. Может кому пригодится, может нет, но хотя бы самому гуглить придётся меньше =). Кстати, примеры будут не на Java, а на Jython’е, т.к. с первым я тоже не очень знаком :).
Итак, опустим настройку и подключение Hibernate, предположим, что вы это уже сделали :). Быть может, напишу об этом позже. Требуется удалить из таблицы player (которая маппится с классом Player, естественно… или наоборот :) ) некоторые записи. Если мы знаем id игрока, тогда всё элементарно (как и в других случаях)):
player = session.load(Player, player_id)
session.delete(player)
Теперь рассмотрим случай, когда надо удалить много записей. Читать далее…
lizz Программирование Hibernate, Java, Jython, ORM, Python
Не для собственных нужд, но как-то понадобилось написать простой web-сервер для обработки на нём загруженных данных. В общем-то должен был получиться простой вёб-интерфейс к программе. Он и получился, местами даже слишком простой. В общем суть такова – необходимо получить от пользователя экзешник, на сервере его обработать нужными программами и выдать результат, т.е. обработанный файл для скачивания. Можно было бы написать скрипт на php, что было бы проще, но тогда необходимо с собой таскать какой-нибудь вёб-сервер (apache, denwer и т.п.). На питоне можно его реализовать достаточно просто в самом скрипте используя стандартные заготовки и библиотеки, такие как BaseHTTPServer. Ниже следует листинг с краткими комментариями.
Читать далее…
lizz web, Программирование BaseHTTPServer, HTTP, Python
Иногда встаёт вопрос. И требуется ответ. Если вопрос – узнать под ОС Windows модель какого-либо подключенного устройства, то ответ можно получить следующим образом. Жмём правой кнопкой по «моему компьютеру» (или по Вашему, если моего рядом нет), выбираем «свойства», в новом окне вкладку «оборудование», «диспетчер устройств». Находим в списке нужное устройство (аудиоконтроллер, сетевая карточка, etc), опять жмём правой кнопкой мыши по нужному девайсу, переходим на вкладку «сведения» и ищем подпункт «код экземпляра устройства», который может выглядеть следующим образом:
PCI\VEN_XXX&DEV_XXXX&SUBSYS_XXXXXXXX
Читать далее…
lizz Windows, Администрирование device, Windows XP
Встала задача написания небольшой графической оболочки для программы с минимальным интерфейсом (одна кнопка и одно поле вывода). Много нам не надо, поэтому решил обойтись идущей вместе с python’ом в поставке библиотекой TkInter. И тут столкнулся с небольшой проблемой – при нажатии кнопки запускаются довольно долгие и объёмные вычисления, из-за которых виснет весь интерфейс программы.
Читать далее…
lizz Программирование, общие вопросы, прикладное GUI, Python, TkInter
При написании в очередной раз программы для подбора паролей к чему-либо (исключительно в образовательных целях и для учёбы ;-) ) опять возникла необходимость в итераторе по заданному алфавиту. Т.е. необходимо написать класс, который мог бы генерировать пароли для последующей передачи их в программу, которая «примеряла» их к чему-надо. К чему – дело третье и сейчас нас (вернее Вас) не волнует. В результате получился скромный класс, который приведён ниже со столь же скромными моими комментариями к нему :-).
Читать далее…
lizz Программирование, прикладное Brute Force, Python
Очередной бестолковый велосипед от СГУ. Требуется написать «интерпретатор», который умел бы работать с файлами. Так же умел бы исполнять сторонние скрипты. Работа с файлами заключается в следующих функциях – открыть на запись, открыть на чтение, закрыть файл, читать из файла, читать n байт, записать в файл, читать в буфер, записать из буфера в файл, сместиться на определённую позицию.
Читать далее…
lizz Программирование Python
Опять делюсь универскими наработками. Задача в общем то примитивная (или по крайней мере её реализация). Надо сгенерировать N равнозначных ключей для шифрования/дешифрования сообщения. Т.е., генерируем 10 ключей, шифруем сообщение любым из этих 10, расшифровываем так же любым из этих 10. Например, зашифровали пятым ключом, расшифровали третьим, или десятым.
Читать далее…
lizz Программирование, криптография Python
В данном посте рассмотрим простенький пример использования ORM, а именно, Doctrine. Если кто не в курсе, то ORM (Object-Relational Mapping, объектно-реляционная проекция) – такая штука, которая обеспечивают классам прозрачный доступ к базе данных. Правда не всяким классам, а тем, которые представляют описание нашей модели данных. В общем мне бы пару лет назад узнать о такой штуке, может быть я и не забросил изучение php, и вообще, много чего полезного сделал :D. Если кто-то знаком с паттернами проектирования, то можно сказать, что Doctrine соответствует шаблону Active Record. К своему стыду, сам я не знаком с ними, поэтому ничего конкретней сказать не могу пока что :-).
Кстати, мы уже затрагивали мельком тему ORM, но только для python. Можете посмотреть тут про SQLAlchemy.
Далее будет рассмотрен пример написания модуля на php с использованием ORM Doctrine для отправки личных сообщений между пользователей.
Читать далее…
lizz web, Программирование Doctrine, ORM, PHP
Как-то лень было писать для задачки интерфейс, а в универе требовали, и тут в мою голову пришла мысль, что не плохо было бы иметь что-то вроде аналога интерактивного режима интерпретатора python’а (лицезреть который Вы можете выполнив команду python или нажав в виндовской IDLE F5).
Читать далее…
lizz Программирование, общие вопросы Python
Последние комментарии