вторник, 21 августа 2012 г.

Переносим контакты со старой nokia на android

Собственно не хотелось забивать контакты ручками, поэтому как обычно сделал скрипт.
Я уже писал о переносе контактов с vk.com на адроид, в общем способ переноса с nokia практически аналогичен.

Сначала необходимо скачать контакты с помощью Nokia PC Suite в формате .txt, затем запустить скрипт, который сделает из txt'ника годный для загрузки на google файл с расширением .csv.

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

суббота, 18 августа 2012 г.

Мелкий скрипт для запуска приложений по времени.

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


def AlarmClock(time_start_app):
    time_start_app_tmp = time_start_app[:]
    while True:
        dt = list(time.localtime())
        hour = dt[3]
        minute = dt[4]
        if hour == 0 and minute == 0:
             time_start_app_tmp = time_start_app[:]
        for i in xrange(len(time_start_app)):
             if time_start_app_tmp[i][0] == hour and time_start_app_tmp[i][1] == minute and         time_start_app_tmp[i][3] == 0:
                 StartOnNumber(time_start_app_tmp[i][2])
                 time_start_app_tmp[i][3] += 1

Определяется приложение по его номеру:

def StartOnNumber(value):
   if value == 1:
        print "1!"
   elif value == 2:
        print "2!"
   elif value == 3:
        print "3!"

Внутрь главной функции передается list, состоящий из часа, минуты, приложения и факта запуска( time_start_app = [[21, 46, 1, 0], [21, 46, 2, 0], [11, 29, 3, 0]] ).

В общем все, запускаем процесс в фоне и радуемся.

понедельник, 13 августа 2012 г.

Подсказки из книги "Программист - прагматик"


Читая книгу "Программист - прагматик", я заметил, что авторы дают очень хорошие подсказки, которые не плохо было бы распечатать и повесить около рабочего места. Более того, если вы прочтете книгу, то эти подсказки будут наталкивать Вас на нечто большее, а потому представляю их Вам:

Подсказка 1: Позаботьтесь о вашем ремесле
Подсказка 2: Думай! О своей работе
Подсказка 3: Представьте варианты решения проблемы, а не варианты отговорок
Подсказка 4: Не живите с разбитыми окнами
Подсказка 5: Будьте катализатором изменений
Подсказка 6: Следите за изменениями
Подсказка 7: Сделайте качество одним из пунктов требований
Подсказка 8: Инвестируйте регулярно в ваш портфель знаний
Подсказка 9: Критически анализируйте прочитанное и услышанное
Подсказка 10: Важно, что говорить и как говорить
Подсказка 11: Не повторяй самого себя
Подсказка 12: Сделайте так, чтобы программу можно было легко использовать повторно
Подсказка 13: Исключайте взаимодействие между объектами, не относящимися друг к другу
Подсказка 14: Не существует окончательных решений
Подсказка 15: Пользуйтесь трассирующими пулями, для того чтобы найти цель
Подсказка 16: Создавайте прототипы, чтобы учиться на них
Подсказка 17: Программируйте ближе к предметной области вашей задачи
 Реализуйте программу грамматического разбора времени, используя Perl. (Подсказка: регулярные выражения позволяют написать хорошие программы грамматического разбора.) 
Подсказка 18: Проводите оценки во избежание сюрпризов
Подсказка 19: Уточняйте график проекта на основе текста программы
Подсказка 20: Сохраняйте знания в формате простого текста
Подсказка 21: Используйте сильные стороны командных оболочек
Подсказка 22: Используйте один текстовый редактор, но по максимуму
Подсказка 23: Всегда используйте управление исходным текстом программы
Подсказка 24: Занимайтесь устранением проблемы, а не обвинениями
Подсказка 25: Не паникуйте
Подсказка 26: Ищите ошибки вне пределов операционной системы
Подсказка 27: Не предполагайте – доказывайте
Подсказка 28: Изучите язык обработки текстов
Подсказка 29: Пишите текст программы, которая пишет текст программы
Подсказка 30: Невозможно написать совершенную программу
Подсказка 31: Проектируйте в соответствии с контрактами
Подсказка 32: Пусть аварийное завершение работы программы произойдет как можно раньше
Подсказка 33: Если что-либо не может произойти, воспользуйтесь утверждениями, которые гарантируют, что это не произойдет вовсе
Подсказка 34: Пользуйтесь исключениями только в исключительных случаях
Подсказка 35: Доводите до конца то, что начинаете
Подсказка "Доводите до конца то, что начинаете" говорит нам о том, что в идеале подпрограмма, которая назначает ресурс, обязана его и освобождать. Мы можем применить ее в данном случае, осуществляя небольшую реорганизацию программы:
Подсказка 36: Минимизируйте связывание между модулями
Подсказка 37: Осуществляйте настройку, а не интеграцию
Подсказка 38: Помещайте абстракции в текст программы, а подробности – в область метаданных
Подсказка 39: Анализируйте последовательность операций для увеличения параллелизма
Подсказка 40: Проектируйте, используя службы
Подсказка 41: При проектировании всегда есть место параллелизму
Подсказка 42: Отделяйте визуальные представления от моделей
Подсказка 43: Используйте доски объявлений для координации потоков работ
Подсказка 44: Не пишите программы в расчете на стечение обстоятельств
Подсказка 45: Оцените порядок ваших алгоритмов
Подсказка 46: Проверяйте ваши оценки
Подсказка 47: Реорганизация должна проводиться часто и как можно раньше
Подсказка 48: Проектируйте с учетом тестирования
Подсказка 49: Тестируйте ваши программы, в противном случае это сделают ваши пользователи
Подсказка 50: Не пользуйтесь программой функции-мастера, которую не понимаете
Подсказка 51: Не собирайте требования – выискивайте их
Подсказка 52: Работайте с пользователем, чтобы мыслить категориями пользователя
Подсказка 53: Абстракции живут дольше, чем подробности
Подсказка 54: Используйте глоссарий проекта
Подсказка 55: Не размышляйте вне ящика – найдите этот ящик
Подсказка 56: Прислушайтесь к сомнениям – начинайте тогда, когда полностью готовы
Подсказка 57: Некоторые вещи лучше сделать, чем описывать
Подсказка 58: Не будьте рабом формальных методов
Подсказка 59: Дорогие инструменты не всегда создают лучшие решения
Подсказка 60: Организуйте команду на основе функциональности, а не должностных обязанностей
Подсказка 61: Не используйте процедуры, выполняемые вручную
Подсказка 62: Тестируйте раньше. Тестируйте часто. Тестируйте автоматически
Подсказка 63: Программа не считается написанной, пока не пройдет тестирование
Подсказка 64: Используйте диверсантов для тестирования самих тестов
Подсказка 65: Тестируйте степень покрытия состояний, а не строк текста программы
Подсказка 66: Дефект должен обнаруживаться единожды
Подсказка 67: Считайте естественный язык одним из языков программирования
Подсказка 68: Встраивайте документацию в проект, а не накручивайте ее сверху
Подсказка 69: Слегка превышайте надежды ваших пользователей
Подсказка 70: Ставьте вашу подпись под работой

среда, 8 августа 2012 г.

Вот они, вот они!!! Коньки мечты моей!

Всем известна программа для системного мониторинга под X Window System - Conky.  А многие даже могут знать, что из коньков можно вызывать на выполнение скрипты. Но вот незадача, сколько не  видел конфигураций коньков, ни разу не замечал, чтобы на них выводили что-то помимо системного мониторинга(что очень странно, надо сказать). Поэтому решил исправить сей недостаток, и выставить на обозрение свой конфиг, состоящий из уже выложенных сюда скриптов, а также файла conky.conf.

Собственно внешний вид будет примерно такой: 
Итак, что имеем: время работы, частота, сколько процессов запущено, топ 5 процессов, ОЗУ, SWAP, состояние разделов, почта(дата и время последнего письма), одна из новостей хабра(грабим RSS-ленту), цитата с Bash.im и рандомный анекдот :)

P.S. Запуск любого Python'овского скрипта производится вот так: ${execi 100 python ПУТЬ ДО СКРИПТА}
Ccылка на скрипты и файл конфига 

вторник, 31 июля 2012 г.

Доработать скайп? Хммм, возможно :)

Все хотят того, чтобы все вокруг было удобно. Можно ли написать бота для скайпа, не подавая заявки на его kit? Да запросто ;)
http://skype4py.sourceforge.net/doc/html/ Очень замечательная штука для питона, всем рекомендую посмотреть. Через минуту вы уже будете спамить друзей, а через 5 напишите скриптик, который будет звонить им, когда они возьмут трубку - сбрасывать вызов)) 
Поэтому дерзайте -  если будет что-то интересное, можете и мне рассказать.

Кстати, подумываю прикрепить голосовой набор номера к умному дому. 

среда, 18 июля 2012 г.

Исходники говорливого, слушающего скрипта

Выкладываю исходники заготовки голосового управления компьютером. Кому что интересно - пишите.
Функции, которые были реализованы:
-Вкл/выкл радио
-Вкл/выкл музыка
-Говорит погоду
-Говорит время
-Говорит время последнего письма на электронной почте
-Откликается на имя Лиза ;)

Как перестану бездельничать, сделаю скрипт демоном и приступлю к дальнейшему развитию своего умного дома :)

Ссылка : https://www.dropbox.com/sh/thcook5ulyh6s9m/chgsV06j3B

P.S. Жду не дождусь роспберри пи 

вторник, 10 июля 2012 г.

Умный дом. Учим Linux слушать и говорить.

Иногда хочется зайти домой, сразу завалиться на диван, сказать: "Музыка!", и чтобы все сразу завелось, заиграло. Или узнать погоду на ближайшее время одним словом, не выходя в интернет и никуда не заглядывая... Да и много вещей хотелось бы автоматизировать таким образом...

Есть множество open sourse движков по распознаванию речи(по-моему мнению лучший - sphinx), но все они либо ужасны в настройке, либо голос распознают плохо, но это еще не самое страшное. Самое страшное - русский язык. По понятным причинам, хотелось чтобы все команды были на русском. Поэтому был избран самый простой способ распознавать русскую речь  и имя ему - google speech API. Конечно, есть определенные минусы при работе с google API, главный - зависимость от интернета, ну, что поделать, за все приходиться платить. 

Специфика работы такова: мы пишем свою команду во .flac(wav и другие форматы попросту не поддерживаются), посылаем куда надо и получаем ответ в формате json(читай python-словарь), в котором содержится несколько ключей, из которых интересны лишь два - текстовое представление той речи, которую мы произнесли и степень соответствия с указанным текстом(есть смысл, что если confidence(степень соответствия)<0,5 делать повторный запрос). 

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

Также хотелось бы, чтобы компьютер не только слушал, но и мог произносить речь. Можно конечно записать ответы заранее и вставлять их в определенные места, но это как-то не интересно, долго и узконаправленно. Намного круче заставить google translate произносить текст за нас :). 

После написание данного функционала можно пилить уже сами функции - исполнители.
Пока написано несколько: воспроизведение радио, прогноз погоды(произносится), время(произносится), чистка лог-файлов по воспроизведению кодового слова. В ближайшее время выложу проектик на github, кого заинтересовало - пишите, есть много идей, которые хотелось бы реализовать в ближайшее время.

четверг, 5 июля 2012 г.

Работа с файлами на Python (найдено на просторах рунета)

Список функций для работы с файлами.
01shutil.copy() # копировать файл
02shutil.copytree() # копировать каталог
03shutil.move() # перемещаем файл
04shutil.rmtree() # удалить каталог
05 
06tmpfile.mkstemp() # временный файл
07filecmp.cmp() # сравнить файл
08filecmp.cmpfiles() # сравнить каталог
09 
10subprocess() # Запуск другого процесса
11 
12os.getcwd() # получить рабочий каталог программы
13os.chdir() # изменить рабочий каталог
14os.access() # проверка доступа
15os.listdir() # Список каталогов и файлов
16os.strat() # сведения о файле
17os.mkdir() # создать каталог
18os.makedirs() # Создать каталог и промежуточные каталоги
19os.rmdir() # удалить пустые каталоги
20os.removedirs() # удалить пустые каталоги
21os.remove() # удалить
22os.walk() # выполнить команду по всем каталогам дерева
23 
24glob.glob() # получить список файлов и поддиректорий по маске
25 
26os.path.abspath() # абсолютный путь
27os.path.abspath() # разбивает путь каталог и имя файла
28os.path.dirname() # Получить из пути только каталога
29os.path.basename () # Получить из пути имя файла
30os.path.join() # соединить каталог и файл
31os.path.isfile() # Проверка является ли файлом
32os.path.isdir() # Проверка что это каталог
33os.path.getsize() # узнать размер
34os.path.exists() # проверить на существование
35os.path.getctime() # время создания файла
36os.path.getmtime() # время изменения