воскресенье, 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ылка на скрипты и файл конфига