пятница, 24 мая 2013 г.
четверг, 14 марта 2013 г.
Scons
Scons - это замена makefile. Scons написан на Python. Scons очень удобен и у него замечательная документация. Scons полезен всем :)
Простой пример:
Допустим есть пример, состоящий всего из файлов main.cpp, 1.h, 1.cpp, 2.h, 2.cpp. Необходимо написать простейший сборщик.
Создаем файл SConstruct, почему название именно такое? Потому что оно дается автоматически, как Makefile, только SConstruct :) Затем пишем две строчки внутри файла:
env=Environment()
env.Program('myprog', ['main.cpp',1.cpp','2.cpp'] )
Пишем в консольке scons...
Scons дьявольски умен и сообразителен. И нам и ему понятно, что myprog и есть наш собранный исполняемый файл.
Main page of scons
Ну а еще можно добавить, что scons используют:
Простой пример:
Допустим есть пример, состоящий всего из файлов main.cpp, 1.h, 1.cpp, 2.h, 2.cpp. Необходимо написать простейший сборщик.
Создаем файл SConstruct, почему название именно такое? Потому что оно дается автоматически, как Makefile, только SConstruct :) Затем пишем две строчки внутри файла:
env=Environment()
env.Program('myprog', ['main.cpp',1.cpp','2.cpp'] )
Пишем в консольке scons...
Scons дьявольски умен и сообразителен. И нам и ему понятно, что myprog и есть наш собранный исполняемый файл.
Main page of scons
Ну а еще можно добавить, что scons используют:
- Ardour
- Battlefield 1942
- Blender
- Csound
- Delta3D
- Google Chrome[1]
- GtkRadiant[2]
- id Software
- Nullsoft Scriptable Install System
- NVDA
- SuperCollider
- VMware
- MongoDB
пятница, 25 января 2013 г.
Пример работы с ftplib.
Еще один пост любви к Python. Как передать некоторый список файлов(имеются полные пути) на ftp-сервер? Очень просто :)
server_ftp = '192.168.0.102' #для примера, в программе можно задать что угодно
login_ftp = "fox100500"
pass_ftp = "fox_134342"
port_ftp = "1069"
def ftp_online():
ftpConnect = FTP()
try:
ftpConnect.connect(server_ftp, port_ftp)
ftpConnect.login(login_ftp, pass_ftp)
ftpConnect.quit()
ftpConnect.close()
enable = 1
except:
enable = 0
return enable
def copy_file(ftp, path): # ftp - через что соединяемся, path - абсолютный путь до передаваемого файла
name_file = path.split('/')[-1:][0]
send_file = open(path, 'rb')
ftp.storbinary('STOR ' + name_file, send_file, 1024)
def read_ways_from_file(file_name):
f = open(file_name, 'r')
return f.readlines()
def copy_all_files(ftp, lines): # ftp - через что соединяемся, lines - list абсолютных путей до файлов
for line in lines:
line = line.replace('\n', '')
copy_file(ftp, line)
if __name__ == "__main__":
if ftp_online() == 1:
ftpConnect = FTP()
ftpConnect.connect(server_ftp, port_ftp)
ftpConnect.login(login_ftp, pass_ftp)
ftpConnect.cwd('/information')
st = ftpConnect.pwd()
copy_all_files(ftpConnect, read_ways_from_file('download.txt'))
server_ftp = '192.168.0.102' #для примера, в программе можно задать что угодно
login_ftp = "fox100500"
pass_ftp = "fox_134342"
port_ftp = "1069"
def ftp_online():
ftpConnect = FTP()
try:
ftpConnect.connect(server_ftp, port_ftp)
ftpConnect.login(login_ftp, pass_ftp)
ftpConnect.quit()
ftpConnect.close()
enable = 1
except:
enable = 0
return enable
def copy_file(ftp, path): # ftp - через что соединяемся, path - абсолютный путь до передаваемого файла
name_file = path.split('/')[-1:][0]
send_file = open(path, 'rb')
ftp.storbinary('STOR ' + name_file, send_file, 1024)
def read_ways_from_file(file_name):
f = open(file_name, 'r')
return f.readlines()
def copy_all_files(ftp, lines): # ftp - через что соединяемся, lines - list абсолютных путей до файлов
for line in lines:
line = line.replace('\n', '')
copy_file(ftp, line)
if __name__ == "__main__":
if ftp_online() == 1:
ftpConnect = FTP()
ftpConnect.connect(server_ftp, port_ftp)
ftpConnect.login(login_ftp, pass_ftp)
ftpConnect.cwd('/information')
st = ftpConnect.pwd()
copy_all_files(ftpConnect, read_ways_from_file('download.txt'))
Есть некий текстовый файл download.txt, в котором записаны пути до нужных файлов. Нам лишь необходимо запустить скрипт и он скопирует эти файлы на сервак.
Для чего это может использоваться? Ответ прост - отложенная отправка файлов на android. Есть куча программ, которые превращают андрюшу в сервер, также есть всячиские task менеджеры, которые могут включать и выключать wifi в определенное время, то есть нам лишь необходимо настроить запуск wifi андроида ночью, настроить запуск скрипта - граббера информации(скачка хабра, новостей, запись радио), а потом взять и передать все с помощью данного скриптика.
Также хочу отметить, что для скачки контента из интерната лучше всего пользоваться wget. Помимо регулировки порядка вложенности скачки страниц он имеет кучу настроек. Допустим, чтобы скачать web-страницу полностью надо ввести в консоль: wget -k -p <адрес страницы>.
воскресенье, 13 января 2013 г.
Метод "Бегунка" на Java.
Хочется рассказать о решении классической задачи на списки. Многие знают что такое список и даже с чем его едят, но почему-то затем их забывают. Иногда же полезно вникнуть в суть и порешать задачи, решение которых может и не придти сразу в голову :)
Итак, дан список, нам необходимо определить содержит ли он петлю. Самый простой и действенный способ - воспользоваться так называемым методом бегунка.По списку бежит два бегунка - быстрый и медленный, пусть первый делает два шага за такт, а второй один. Допустим, что нам также известна длина списка = k. Число же шагов до петли пусть будет = l. Тогда если быстрый бегунок на l - k шагов отстает от медленного, а быстрый нагоняет его за 1 шаг в единицу времени, то они встретятся на l - k шагов. В этой самой точке они будут стоять как раз в k шагов от начала петли. Т.е. когда указатели встретятся, нам нужно передвинуть медленный бегунок на голову, а быстрый оставить на месте, при движении их с теми же скоростями место их следующей встречи и будет началом петли :)
Вот такой вот простой алгоритмик :) Как всегда исходник(Java): Исходник
Итак, дан список, нам необходимо определить содержит ли он петлю. Самый простой и действенный способ - воспользоваться так называемым методом бегунка.По списку бежит два бегунка - быстрый и медленный, пусть первый делает два шага за такт, а второй один. Допустим, что нам также известна длина списка = k. Число же шагов до петли пусть будет = l. Тогда если быстрый бегунок на l - k шагов отстает от медленного, а быстрый нагоняет его за 1 шаг в единицу времени, то они встретятся на l - k шагов. В этой самой точке они будут стоять как раз в k шагов от начала петли. Т.е. когда указатели встретятся, нам нужно передвинуть медленный бегунок на голову, а быстрый оставить на месте, при движении их с теми же скоростями место их следующей встречи и будет началом петли :)
Вот такой вот простой алгоритмик :) Как всегда исходник(Java): Исходник
Минимальная настойка linux-окружения на примере openbox.
Сейчас я сделаю то, что обязан сделать любой линуксоид - рассказать про свою минимальную настройку "linux-окружения". Конкретно хочу описать связку, которая, по-моему, работает замечательно = Openbox + conky + tint2 panel + pytyle2 + немного умения разбираться в конфигах. Если о первой составляющей слышали все, о второй чуть поменьше, о третьей еще меньше, то о четвертой просто необходимо рассказать подробнее.
CONKY
Про конфигурацию коньков я уже рассказывал, ничего не изменилось. Я лишь написал еще один небольшой скрипт, который парсит RSS-ленту для получения погоды. Он будет также выложен(осторожно, говнокод!).
OPENBOX
http://ru.wikipedia.org/wiki/Openbox. В общем все понятно. Ставим как обычно, выбираем при загрузке и наслаждаемся минимализмом и быстротой(если нифига не понятно и страшно -нажмите правую кнопку мыши : -) ).
TINT2 panel
Лютая, бешеная, простая в конфигурации, легкая панель. Запускается командой tint2.
Ставится как обычно apt-get'oм. При первом запуске создастся конфигурационный файл в ~/.config/tint2/tint2rc. Его-то править и надо для достижения необходимого эффекта.
Мне всегда хотелось, чтобы приложения, которые открыты на нескольких рабочих столах отображались на всех рабочих столах. После прочтения доков и правки конфигов мечта стала реальностью - панель великолепна и удовлетворяет моим скромным требованиям.
PyTYLE2
Скажу, что искал что-то, что помогло бы мне с тайлингом и написано бы было предпочтительно на python'e. Обнаружился pytyle2 - великолепная штучка, которую рекомендую всем :) Кстати, на использование ее меня натолкнул пост http://muhas.ru/?p=171(там же описаны комбинации клавиш по умолчанию и что где лежит). А вот небольшой примерчик тайлинга в действии.
НЕМНОГО О НАСТРОЙКЕ
Автозагрузка
В ~/.config/openbox есть файлик с говорящим названием - autostart, если нет, то смело создаем. В нем прописываем все, что должно стартовать вместе с openbox. Описывается он примерно так:
tint2 &
pytyle2 &
conky &
Обои на рабочий стол
По умолчанию на рабочем столе ничего нет. Так просто все не изменить, есть несколько программ, которые занимаются сменой обоев, самая простая и действенная - feh. Ставим, прописываем feh --bg-scale "путь до обоины". И да, если хотите, чтобы обои были при запуске системы, пропишите команду в автозапуск.
Комбинации клавиш или как сделать скриншот экрана.
В ~/.config/openbox/rc.xml лежат настройки не только кнопок, но и многие настройки внешнего вида. По примеру того, как там описаны уже существующие комбинации для PrtSc пропишем запуск баш-скрипта:
CONKY
Про конфигурацию коньков я уже рассказывал, ничего не изменилось. Я лишь написал еще один небольшой скрипт, который парсит RSS-ленту для получения погоды. Он будет также выложен(осторожно, говнокод!).
OPENBOX
http://ru.wikipedia.org/wiki/Openbox. В общем все понятно. Ставим как обычно, выбираем при загрузке и наслаждаемся минимализмом и быстротой(если нифига не понятно и страшно -нажмите правую кнопку мыши : -) ).
TINT2 panel
Лютая, бешеная, простая в конфигурации, легкая панель. Запускается командой tint2.
Ставится как обычно apt-get'oм. При первом запуске создастся конфигурационный файл в ~/.config/tint2/tint2rc. Его-то править и надо для достижения необходимого эффекта.
Мне всегда хотелось, чтобы приложения, которые открыты на нескольких рабочих столах отображались на всех рабочих столах. После прочтения доков и правки конфигов мечта стала реальностью - панель великолепна и удовлетворяет моим скромным требованиям.
PyTYLE2
Скажу, что искал что-то, что помогло бы мне с тайлингом и написано бы было предпочтительно на python'e. Обнаружился pytyle2 - великолепная штучка, которую рекомендую всем :) Кстати, на использование ее меня натолкнул пост http://muhas.ru/?p=171(там же описаны комбинации клавиш по умолчанию и что где лежит). А вот небольшой примерчик тайлинга в действии.
НЕМНОГО О НАСТРОЙКЕ
Автозагрузка
В ~/.config/openbox есть файлик с говорящим названием - autostart, если нет, то смело создаем. В нем прописываем все, что должно стартовать вместе с openbox. Описывается он примерно так:
tint2 &
pytyle2 &
conky &
Обои на рабочий стол
По умолчанию на рабочем столе ничего нет. Так просто все не изменить, есть несколько программ, которые занимаются сменой обоев, самая простая и действенная - feh. Ставим, прописываем feh --bg-scale "путь до обоины". И да, если хотите, чтобы обои были при запуске системы, пропишите команду в автозапуск.
Комбинации клавиш или как сделать скриншот экрана.
В ~/.config/openbox/rc.xml лежат настройки не только кнопок, но и многие настройки внешнего вида. По примеру того, как там описаны уже существующие комбинации для PrtSc пропишем запуск баш-скрипта:
$ cat screenshot.sh
#!/bin/bash
name=`date +%x-%X-%N.png`
scrot ~/$name
Не забываем поставить scrot, именно она будет отвечать за "производство" скриншота.
понедельник, 7 января 2013 г.
Быстрое добавление композиций в last.fm из vk.com
Я все как-то обходил вниманием last.fm, слушаю то пандору, то просто 42.fm. Но last.fm хороша тем, что безупречно подбирает что-то, что будет точно Вам по вкусу :). По этому было решено "перенести" музыку из vk.com на last.fm. Так как композиций на данный момент у меня в профиле vkонтакта 445, то делать это в ручную как-то даже не прилично.
Был написан маленький скриптик - скробблер vk => last.fm.
Опишу особенности реализации. Чтобы воспользоваться api last.fm необходимо получить две строки - ключ для api и некое секретное значение(ну а еще быть там зарегистрированным ;)) ).
Проходим по адресу http://www.lastfm.ru/api/accounts, регистрируем свое приложение, запоминаем строки.
Идем на http://code.google.com/p/pylast/, эсвээним либу(если нет svn - ставим). Сразу же напишем небольшой пример - добавление композиции.
import pylast
API_KEY = "your_key"
API_SECRET = "your_secret"
username = "username"
password_hash = pylast.md5("password")
network = pylast.LastFMNetwork(api_key = API_KEY, api_secret =
API_SECRET, username = username, password_hash = password_hash)
library = pylast.Library(user = "username", network = network)
track = network.get_track("Rob Dougan", "Clubbed To Death (Kurayamino Variation)")
library.add_track(track)
И видим... Видим ошибку:
Все потому, что авторы библиотеки забыли добавить одну строчку, из-за чего собственно и происходит баг. Потому идем в исходники библиотеки, а именно на строку примерно 1970(функция add_track() ), добавляем в нее строку params['artist'] = track.get_artist().get_name().
Полдела сделано. Теперь ставим либу для работы с vk.com(sudo pip install vkontakte). Как заводить приложение мною уже было рассказано,
да и вообще как получать и качать музыку тоже, поэтому расписывать смысла нет,
используя старые наработки для каждой композиции из вконтакте получаем "имя
исполнителя", "название" иотправляем в last.fm. После всего получаем забитый профиль :)
Запускаем пример снова... Работает!
Полдела сделано. Теперь ставим либу для работы с vk.com(sudo pip install vkontakte). Как заводить приложение мною уже было рассказано,
да и вообще как получать и качать музыку тоже, поэтому расписывать смысла нет,
используя старые наработки для каждой композиции из вконтакте получаем "имя
исполнителя", "название" иотправляем в last.fm. После всего получаем забитый профиль :)
Ссылка на скрипт как всегда: https://www.dropbox.com/s/zlqpu4p0q4t32qd/pyLastFM.py
пятница, 14 декабря 2012 г.
Pandora.com. Как запилить прослушивание, если вы таки в России
Все знают о last.fm, но немногие слышали о pandora.com, который в сто раз круче этого самого last.fm. Но вот не задача, pandora - таки не арбайтен автоматом у нас в России, поэтому был найден великолепный плагин для Хрома и Мозиллы - https://mediahint.com/. Ставим, заходим на http://www.pandora.com/, вводим название композиции или имя артиста, приступаем к прослушиванию :)
воскресенье, 21 октября 2012 г.
О козлах и raspberry pi.
Много воды утекло с того момента, как я заказал сей девайс. Почти каждый день я как полный идиот проверяю почтовый ящик и вижу там... Нифига я там не вижу. Да, примерно полтора месяца назад они мне прислали сообщение с извинениями и все. Больше ничего. Козлы, где моя малинка???
Мораль сей басни такова - не покупайте малинку на официальном сайте.
Мораль сей басни такова - не покупайте малинку на официальном сайте.
Sms самому себе или знай, что у тебя случилось.
Иногда есть вещи, о завершении(или начале) которых знать просто необходимо: упал сервак, завершилась закачка торрента или еще чего произошло. Для этого было бы очень полезно уметь слать смс самому себе, телефон - то всегда рядом с нами. Тут сразу же вспоминается корпорация добра(google) с ее google calendar и его смс - оповещениями. Поэтому нет ничего не логичного в том, чтобы взять и состряпать отсылалку сообщений самому себе с помощью данной фичи. Все просто до безобразия - смотрим API календаря(для python), пишем небольшой классик и все, можно оповещаться.
class GoogleSms:
def __init__(self, username, password):
self.username = username
self.password = password
service = gdata.calendar.service.CalendarService()
service.email = username
service.password = password
service.source = 'GoogleSms'
service.ProgrammaticLogin()
self.calendar_service = service
def send(self, message):
event_time = time.strftime(TIME_FORMAT, time.gmtime(time.time() + 3600))
event = gdata.calendar.CalendarEventEntry()
event.title = atom.Title(text=message)
event.content = atom.Content(text=message)
reminder = gdata.calendar.Reminder(minutes=60)
reminder.method = 'sms'
when = gdata.calendar.When(event_time)
when.reminder.append(reminder)
event.when.append(when)
try:
cal_event = self.calendar_service.InsertEvent(event, CALENDAR_URL)
except gdata.service.RequestError, request_exception:
raise
Хочу отметить, что если вы хотите, чтобы сообщение дошло до вас сразу же, то необходимо отправлять его за час(как-то странно выразился, но вроде понятно). Также лимит сообщения около 60 символов. Всего 20 смс в день. Ничего. Нам с вами хватит ;)
суббота, 1 сентября 2012 г.
О приложениях для Android.
Купив любой девайс с операционной системой Android, первое о чем задумываешься - это какие приложения действительно хороши и почему их ставить обязательно. Хочется поделится своими впечатлениями о нескольких программках.
Практически сразу после покупки устройства я понял, что смартфон просто необходимо рутовать. Объясню почему. Первая причина - экономия траффика, НОРМАЛЬНЫЕ приложения, с помощью которых можно блочить другие приложения, чтобы они не лезли в инет(когда не надо) требуют рута. Вторая причина - реклама, блокировщики рекламы также требуют рута. Третья причина - многие другие приложения, такие как антивирусы, лаунчеры и тд и тп, требуют рута. Поэтому если у Вас прошла гарантия или вы не боитесь ее потерять(я не боюсь, потому что можно потом рут взять и отменить:) ), я НАСТОЯТЕЛЬНО советую его рутануть.
Superuser - программа первой необходимости после получения рута. С помощью нее вы можете контролировать процесс допущения приложений к правам рута. Также superuser ведет журнал, что очень полезно. Ставим сразу.(нужен root)
DroidWall - приложение, с помощью которого можно создать два списка(белый и черный) для контроля доступа других программ к интернету(блочим допуск приложений к 3G). Must have! (нужен root)
CPU tuner - хоть я и пишу про эту программу после записи о двух других, но считаю, что эта программулина стоит на первом месте для любого Android устройства. Она частично решает такую большую проблему, как прожорливость операционки. Вы можете настроить несколько режимов работы смартфона, в зависимости от параметров батареи. Можно делать очень многое, все тут описывать не вижу смысла. Ставить нужно обязательно. (нужен root)
Tasker - лучшая программа для планирования запуска приложений, имеющая огромное количество функций, а также свой собственный язык программирования! Вещь великая, могучая и платная.
Total Commander - ну тут без слов, все знают что такое и для чего надо.
FTPServer - одно из многих приложений, которое делает из вашего смарта server Ftp соединения(что не безопасно, кстати), но с помощью данной функции можно много что творить со смартом(в скором времени напишу что именно). Также необходим в том случае, если вы не можете сделать FtpServer на своем компьютере и присоединиться смартом как клиентом.(нужен root)
Быстрый блокнот - если что-то нужно быстро записать, не видя при этом кучи рекламы и кнопок управления - это лучшая из программ.
FPse - все мы любим поиграть. А я люблю поиграть в Sony Playstion 1. Это лучший эмулятор приставки для Android.
EBookDroid - читалка кучи форматов.
Далее напишу приложения так сказать более узкой направленности.
SL4A и Script Launcher - программы для запуска скриптов на Python, Perl, Ruby.
Kivy Launcher - запускаем скрипты, написанные на Python прямо на смарте(я уже об этом писал)
AIDE - пишем полноценные Java приложения прямо на нашем устройстве.
Touchqode - программисткий блокнот
Я не являюсь пиратом, но и не пропагандирую платить за что-то, не испробовав это. Поэтому я просто оставлю ссылки на сайты тут:
http://4pda.ru/ http://rutracker.org/forum/index.php
Практически сразу после покупки устройства я понял, что смартфон просто необходимо рутовать. Объясню почему. Первая причина - экономия траффика, НОРМАЛЬНЫЕ приложения, с помощью которых можно блочить другие приложения, чтобы они не лезли в инет(когда не надо) требуют рута. Вторая причина - реклама, блокировщики рекламы также требуют рута. Третья причина - многие другие приложения, такие как антивирусы, лаунчеры и тд и тп, требуют рута. Поэтому если у Вас прошла гарантия или вы не боитесь ее потерять(я не боюсь, потому что можно потом рут взять и отменить:) ), я НАСТОЯТЕЛЬНО советую его рутануть.
Superuser - программа первой необходимости после получения рута. С помощью нее вы можете контролировать процесс допущения приложений к правам рута. Также superuser ведет журнал, что очень полезно. Ставим сразу.(нужен root)
DroidWall - приложение, с помощью которого можно создать два списка(белый и черный) для контроля доступа других программ к интернету(блочим допуск приложений к 3G). Must have! (нужен root)
CPU tuner - хоть я и пишу про эту программу после записи о двух других, но считаю, что эта программулина стоит на первом месте для любого Android устройства. Она частично решает такую большую проблему, как прожорливость операционки. Вы можете настроить несколько режимов работы смартфона, в зависимости от параметров батареи. Можно делать очень многое, все тут описывать не вижу смысла. Ставить нужно обязательно. (нужен root)
Tasker - лучшая программа для планирования запуска приложений, имеющая огромное количество функций, а также свой собственный язык программирования! Вещь великая, могучая и платная.
Total Commander - ну тут без слов, все знают что такое и для чего надо.
FTPServer - одно из многих приложений, которое делает из вашего смарта server Ftp соединения(что не безопасно, кстати), но с помощью данной функции можно много что творить со смартом(в скором времени напишу что именно). Также необходим в том случае, если вы не можете сделать FtpServer на своем компьютере и присоединиться смартом как клиентом.(нужен root)
Быстрый блокнот - если что-то нужно быстро записать, не видя при этом кучи рекламы и кнопок управления - это лучшая из программ.
FPse - все мы любим поиграть. А я люблю поиграть в Sony Playstion 1. Это лучший эмулятор приставки для Android.
EBookDroid - читалка кучи форматов.
Далее напишу приложения так сказать более узкой направленности.
SL4A и Script Launcher - программы для запуска скриптов на Python, Perl, Ruby.
Kivy Launcher - запускаем скрипты, написанные на Python прямо на смарте(я уже об этом писал)
AIDE - пишем полноценные Java приложения прямо на нашем устройстве.
Touchqode - программисткий блокнот
Я не являюсь пиратом, но и не пропагандирую платить за что-то, не испробовав это. Поэтому я просто оставлю ссылки на сайты тут:
http://4pda.ru/ http://rutracker.org/forum/index.php
Подписаться на:
Сообщения (Atom)