воскресенье, 26 августа 2012 г.

Пишем для Android на Python или немного о Sl4A и Kivy.


Купив смартфон конечно же меня заинтересовала быстрая разработка под него. Java, конечно же, является родной для Андрюши, но я толком ее не знаю, да и мороки с ней огого...(хотя приличные приложения надо писать именно на Java).

Мне же нужно иногда что-то запустить так, игры ради. Поэтому представляю вам два способа(которые и так многим известны) программирования под Аndroid на Python.

СПОСОБ ПЕРВЫЙ.

SL4A (Android Scripting) — интерпретатор, который запускает под Android скрипты на Python, Perl, JRuby, JS, PHP и др.

После установки мы получаем интерпретатор и несколько самых распространенных библиотек. Легко делается очень многое. Если сравнивать коды простых приложений, написанных на Java и Python(с помощью данной либы), то на Python примерно раза в 3-4 короче. Имеется неплохая документация + возможность программирования непосредственно на девайсе. В общем, must have!

Но все же мне больше понравился именно второй способ :)

СПОСОБ ВТОРОЙ.

Kivy - open source библиотека для быстрой разработки приложений, создания интерфейса для различных тач-девайсов.

Она меня очень обрадовала. Не ну правда, вспоните долгий запуск эмулятора андроида, вспомните, как долго и муторно происходит запуск, вспомните, что много выглядит все равно не так, как это будет смотреться на самом деле. Тут же все очень хорошо, написанное не только работает под linux, windows, android, но и работает быстро + есть доступ к нативным функция устройств.

Мы пишем приложение на Python(т.е. пишем очень быстро :)), ставим эмулятор для андроида с сайта библиотеки и можем просто забрасывать наши исходники на карту памяти в папку kivy - и всё!(каждая программа -  в отдельной папке). Мы получаем рабочую программу:).

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

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

Чтобы не трындеть тут зазря, в качестве первого примера приложения я написал программку - расписание занятий для моей группы в универе :) Собственно исходники расписания.
Выглядит эта штука в linux примерно таким образом, как оно будет выглядеть в Android можете проверить сами.


 

вторник, 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, кого заинтересовало - пишите, есть много идей, которые хотелось бы реализовать в ближайшее время.