вторник, 19 октября 2010 г.
среда, 13 октября 2010 г.
ссылка: mongodb основы map/reduce
Map-Reduce Basics: очень неплохая статья об агрегировании данных в MongoDB с помощью map/reduce.
понедельник, 27 сентября 2010 г.
Python: парсим дату
Иногда достаточно напряжной задачей бывает парсинг даты или времени. Это часто происходит совсем не в силу сложности задачи, а просто от отсутствия понимания, что здесь никакого велосипеда изобретать не нужно, а просто надо правильно использовать ресурсы стандартной библиотеки питона (), которые предлагают элегантные способы решения данной задачи.
Вашему вниманию предлагается ненапряжный (оттяжный) способ парсинга даты в питоне
Вашему вниманию предлагается ненапряжный (оттяжный) способ парсинга даты в питоне
datetime.strptime(sys.argv[1], '%H:%M')
С помощью которого можно сделать, например, простой-простой будильник (простой-простой, потому что будет работать в рамках одной даты, например, с 3 ночи до 7 утра, что бывает достаточно для программиста, админа или еще какого-нибудь гика).
#-*- coding: UTF-8 -*- import time import os import sys from datetime import datetime def play(): command = "totem ~/bin/alarm.pls >/dev/null 2>/dev/null" os.popen(command) def main(): try: while datetime.now().time() < datetime.strptime(sys.argv[1], '%H:%M').time(): time.sleep(1) except: print "Invalid hour:minute value!" finally: play() return if __name__ == "__main__": main()
понедельник, 13 сентября 2010 г.
День программиста-2010
Поздравляем программистов всех стран с их профессиональным праздником - днем программиста! Вот вам указ об официальном празднике: "О дне программиста".
Пусть даже разбег дат у нас небольшой - 13 сентября в простой год, о 365 днях, и 12 сентября - в високосный, о 366), мы все равно запасли для вас разные способы узнать, когда же он будет, на таких языках программирования как Python и JavaScript (хотели бы сами получить варианты на хаскелле и каком-нибудь брейнфаке):
python:
javascript:
* А эту функцию так мы вообще выполним:
Пусть даже разбег дат у нас небольшой - 13 сентября в простой год, о 365 днях, и 12 сентября - в високосный, о 366), мы все равно запасли для вас разные способы узнать, когда же он будет, на таких языках программирования как Python и JavaScript (хотели бы сами получить варианты на хаскелле и каком-нибудь брейнфаке):
python:
from datetime import date, timedelta def prog_date(): today = date.today() return today.replace(month=1, day=1) + timedelta(256) if __name__ == '__main__': print prog_date()
javascript:
function prog_date() { today = new Date(); today.setMonth(0, 1); today.setDate(256); return today; }
* А эту функцию так мы вообще выполним:
четверг, 19 августа 2010 г.
Python и mongodb: забрать значения из курсора
Очень полезной особенностью API Python для MongoDB (pymongo) является то, что мы всегда можем достать значения из ленивого курсора: для этого просто нужно использовать преобразование в list.
from pymongo import Connection c = Connection() db = c['database'] print db.users.find() # выведет курсор MongoDB:print list(db.users.find()) # выведет список объектов из базы: [{u'username': u'user', u'visitor': False ... }, ...]
Python: произвольная строка
Часто возникает необходимость сгенерировать строку из случайных символов (например, для того, чтобы задать пароль). Язык Python позволяет сделать это быстро и элегантно:
Здесь мы создали и вывели на печать строку из 10 рандомных символов.
import string import random def randstring(n): a = string.ascii_letters + string.digits return ''.join([random.choice(a) for i in range(n)]) print randstring(10)
Здесь мы создали и вывели на печать строку из 10 рандомных символов.
понедельник, 9 августа 2010 г.
(Ссылка) Python: конфликты метаклассов
Весьма неплохая статья о разрешении конфликтов метаклассов в Python.
JavaScript, jQuery: обертки
Когда-то можно было пользоваться такой функцией без всякого сомнения:
Теперь же, когда многие используют библиотеку jQuery, объявление подобной функции может привести к неработоспособности другого кода, так как $ является синонимом для jQuery.
В таком случае можно либо явно указывать jQuery вместо знака доллара, либо прибегнуть к более изящному решению - оберткам:
Было:
function $(id) { return getElementById(id); }
Теперь же, когда многие используют библиотеку jQuery, объявление подобной функции может привести к неработоспособности другого кода, так как $ является синонимом для jQuery.
В таком случае можно либо явно указывать jQuery вместо знака доллара, либо прибегнуть к более изящному решению - оберткам:
Было:
function f(arg1, arg2) { $('#some_selector')// ... }
Стало:
function f(arg1,arg2) {
(function($) { $('#some_selector')// ... code })(jQuery) }
Здесь мы создаем анонимную функцию и сразу же ее вызываем. Она представляет собой старую функцию с несколько измененной сигнатурой: в качестве параметра она получит jQuery, а "старые" аргументы будут доступны ей благодаря замыканиям.
суббота, 7 августа 2010 г.
Python: коварство рефакторинга (об удалении *.pyc файлов)
Python компилирует свои скрипты при первом запуске программы (точнее - при первом импорте из срипта, питон пытается сделать последующие обращения к скрипту чуть быстрее путем компиляции его в файл с расширением .pyc), потом он сначала ищет откомпилированный скрипт и только если его не находит - обращается к исходнику (.py).
Коварство рефакторинга (в частности, в среде разработки PyCharm от JetBrains) заключается в том, что если вы переименовываете один из модулей (например, old_module -> new_module), то вам необходимо вручную прописать импорты в других модулях. Иначе может получиться довольно забавная ситуация: вы в новом модуле добавляете какой-то функционал, а программа при запуске импортирует .pyc файлы старого модуля, ни сколько не ругается и, разумеется, выполняет старый код.
Удалять старые компилированные файлы можно, например, такой командой:
Коварство рефакторинга (в частности, в среде разработки PyCharm от JetBrains) заключается в том, что если вы переименовываете один из модулей (например, old_module -> new_module), то вам необходимо вручную прописать импорты в других модулях. Иначе может получиться довольно забавная ситуация: вы в новом модуле добавляете какой-то функционал, а программа при запуске импортирует .pyc файлы старого модуля, ни сколько не ругается и, разумеется, выполняет старый код.
Удалять старые компилированные файлы можно, например, такой командой:
find -type f -name '*.pyc' -exec rm {} \;
понедельник, 19 июля 2010 г.
Bash: подсчет количества строк
find -type f -name '*.py' -exec cat {} \; | wc -l
Так с помощью командной строки мы можем узнать количество строк кода в нашем проекте.
Подписаться на:
Сообщения (Atom)
