Search
Write a publication
Pull to refresh
4
0
Lev Lybin @lybin

Разработчик Python / Team Lead Ведущий (Lead)

Send message

Приемы написания скриптов на Bash. #2

Reading time11 min
Views28K
Моя прошлая статья Приемы написания скриптов на Bash вызвала жаркие дебаты в комментариях. Основной ее посыл был в использовании библиотеки функций. Кроме того я описал способ разбора параметров в Bash. Благодарю всех за конструктивные комментарии. Обращаю Ваше внимание, что статья предполагается для широкого круга читателей, а не адресована исключительно системным администраторам.

Продолжим начатое, и на реальном примере дополним подход к разбору параметров и унификации функционала скриптов.
Читать дальше →

Миникомпьютер из роутера с OpenWRT: разрабатываем USB-видеокарту

Reading time25 min
Views188K

Добрый день, уважаемые хабровчане. В этом цикле статей мы с вами пройдем достаточно длинный, но весьма интересный путь по превращению обычного роутера в мини-компьютер с LCD-дисплеем. Для этого мы разработаем сначала USB-видеокарту на базе микроконтроллера STM32F103, потом тестовый драйвер, который позволит нам выводить на него графику, и, наконец – полноценный драйвер фреймбуффера, благодаря которому можно будет запустить настоящие графические приложения, такие как x-сервер. Заодно мы научимся включать наш код в дерево исходников OpenWRT, допиливать его ядро и делать прочие полезные вещи.
Ну а в самом конце мы получим результат, который, я надеюсь, вызовет ностальгическую слезу у многих читателей. Я постараюсь излагать материал таким образом, чтобы в конце каждого этапа мы получали осязаемый результат, не дающий угаснуть энтузиазму. Итак, начнем.
Читать дальше →

Как устроены массивы в PHP

Reading time6 min
Views75K
В прошлой статье я рассказывал о переменных, теперь пойдет речь о массивах.

Что такое массивы на уровне PHP?


На уровне PHP, массив — это упорядоченный список скрещенный с мэпом. Грубо говоря, PHP смешивает эти два понятия, в итоге получается, с одной стороны, очень гибкая структура данных, с другой стороны, возможно, не самая оптимальная, точнее, как выразился Anthony Ferrara:
PHP arrays are a great one-size-fits-all data structure. But like all one-size-fits-all <anything>, jack-of-all-trades usually means master of none.

Ссылка на письмо



(на картине изображен HashTable с Bucket-ами, В. Васнецов)
Читать дальше →

Играемся с изображениями в Python

Reading time3 min
Views256K
В этой статье я хотел бы разобрать различные способы преобразования изображений с помощью Python. Для примеров я решил взять несколько наиболее известных. В статье не будет ничего сложного, она ориентированна в основном на новичков.
Картинка для испытаний:


Читать дальше →

Используем «Яндекс.Чистый Веб» для защиты от спама

Reading time5 min
Views27K
Уже достаточно долгое время Яндекс предоставляет бесплатный сервис обнаружения спама в сообщениях под названием «Яндекс.Чистый Веб», однако до сих пор он остаётся малопопулярным.

В этом посте я продемонстрирую основные методы работы с API «Яндекс.Чистый Веб» на примере простого PHP-класса.
Подробнее!

Введение в TDD «на пальцах» (Rails + Rspec)

Reading time4 min
Views45K
Лично для меня, довольно тертого разработчика, процесс внедрения TDD был непростым и местами тернистым.

Вкратце законспектирую, поскольку порог входа в тестирование действительно выше, чем просто сесть и писать код на RoR. Сделаю несколько, как написали бы пиндосы, highlights.
image

Теоретически процесс TDD должен выглядеть так:



1. Написали падающий тест, прогнали rspec, убедились что тест не проходит (красный)

2. Написали кусок кода, прогнали rspec, убедились что тест проходит (зеленый)

3. Отрефакторили, убедились что все хорошо и тесты не падают.

4. Отправили код в продакшн

Читать дальше →

Skype-бот для голосовых конференций

Reading time2 min
Views30K


Вероятно, некоторые помнят сервис Skype Casts — публичные голосовые конференции, где каждый мог создать конференцию, которая анонсировалась на сайте skype.com. В 2008 году сервис был закрыт.

Сегодня единственная возможность хостить конференцию — держать запущенным Skype-клиент.
Это не удобно, потому как человек, который «держит» конференц-звонок не может принять входящий вызов, иначе конференция будет поставлена на удержание и никто в ней не сможет общаться. Если у хоста проблемы с интернетом — связь портится у всех.
К тому же хостить звонок в котором 10-15 участников существенно нагружает компьютер.

Мы пытались решить эту задачу держа запущенным Skype на Windows-сервере. Чтобы звонок не обрывался когда все участники кладут трубку — приходилось запускать две копии клиента и держать второго как участника конференции.
Но такая схема не очень стабильна, через 3-5 дней один из клиентов вылетает и звонок обрывается. Приходилось каждый переподнимать его вручную.

И вот наконец удалось найти стабльное и просто решение на основе skypekit позволяющие:

Постоянно держать звонок с помощью одной копии skypekit.
Если все участники конференции положили трубки, звонок перезапускается как /golive

Хостить бота на Linux-сервере без X-ов.
Десктопный клиент требует для запуска X-сервер. Skypekit можно запускать без него, даже на VPS.
Доступен под все платформы Windows/Linux/Mac

Управлять ботом через комманды в чате
Бот умеет разграничивать права доступа, различать комманды отправленные из основного чата конференции и из других чатов.
При желании можно написать аналог irc-шного eggdrop.

Инструкция

Пишем бота для игры «Найди отличие»

Reading time2 min
Views38K

Не так давно я наткнулся на игру, в которую играл много лет назад. Я думаю, многие при поиске отличий ломали себе глаза долгое время. Сегодня я решил пройти её еще раз, но проходить её с 0 мне было, честно говоря, лень. Поэтому я решил написать себе помощника. В статье будет рассказано одно из решений, не наилучшее, но самое понятное для новичков. Итак, начнем.

Писал я всё на python 2.7
Использовалась библиотека PIL

from PIL import Image, ImageDraw


Далее необходимо описать все функции и методы, которые мы будем использовать, для того, чтобы всем был понятен дальнейший код.

image1 = Image.open("1.jpg")

Так мы открываем нужный нам файл.

pix1 = image1.load()

Записываем в pix1 цвета всех пикселов картинки. Теперь по координате пикселя мы можем получить его цвет.

draw = ImageDraw.Draw(ANS)

Создание инструмента для рисования.

image1.size

Возвращает пару (ширина и высота картинки).

draw.ellipse((x, y), (255, 255, 255)) 

Рисование белой точки по заданным координатам.

ANS.save("ans.png", "PNG")

Сохранение изображения в формате PNG. Если не указан полный путь, то сохраняется в папку с исполняемой программой.

del draw

Удаление инструмента «draw».

Приступим к главному…
Читать дальше →

Дайджест интересных новостей и материалов из мира айти за последнюю неделю №36 (15 — 21 декабря 2012)

Reading time5 min
Views32K
Предлагаем вашему вниманию очередную подборку с ссылками на новости, интересные материалы и полезные ресурсы.


Читать дальше →

Продуктивная работа с MySQL в командной строке

Reading time3 min
Views40K
Даже если Вы используете GUI-инструменты для работы с MySQL, однажды Вам предстоит столкнуться с командной строкой. Поэтому полезно знать некоторые трюки, которые облегчают работу.

Примечание: эти команды работают только для Unix/Linux.
Читать дальше →

Рисование графиков. Python. Tkinter

Reading time2 min
Views146K
Это моя первая статья и я хотел бы рассказать о том как написать простейшую программу по рисованию графиков функций.
Статья ориентирована на новичков!
Начнем с того, что наша функция будет иметь вид:
y = c(x)
Где c(x) — это выражение от одной переменной «x».
Сразу считаем её.

f = input('f(x):')


Считать значение функции мы будем функцией eval().
Подключим нужные нам библиотеки.

from math import *
from tkinter import *
f = input('f(x):')


Теперь надо нарисовать оси координат.

from math import *
from tkinter import *

f = input('f(x):')

root = Tk()

canv = Canvas(root, width = 1000, height = 1000, bg = "lightblue", cursor = "pencil")
canv.create_line(500,1000,500,0,width=2,arrow=LAST) 
canv.create_line(0,500,1000,500,width=2,arrow=LAST) 

canv.pack()	
root.mainloop()


Читать дальше →

Остров, о котором забыл Scrum

Reading time7 min
Views30K
На оригинал данной статьи я наткнулся случайно, разгребая почту и наткнувшись на новостную рассылку от ScrumAlliance. Тема метрик Scrum команд и непосредственно кода, меня интересует уже давно. Особенно любопытно, что с этими метриками делать дальше, и первостепенно — зачем они вообще нужны?

В данной работе автор поднимает важнейшую тему для молодых Scrum команд — почему со временем теряется продуктивность и как сохранить ее в долгосрочной перспективе?
Cкучные предисловия я припас для своего уютного блога, а тебе хаброчитатель предлагаю ознакомиться с самой сутью.

Чтобы расширить свой кругозор, а также получить ответ на свои внутренние вопросы, добро пожаловать под кат…
Да, я пережил конец света!

Инструмент планирования и контроля из подручных материалов

Reading time5 min
Views26K


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

Но сколько ни говори о хороших процессах — всегда есть возможность что-то подкрутить и сделать немного лучше. Сегодня расскажу о том, как мы боролись с «забывчивостью» руководителей проектов у себя в студии.
Читать дальше →

Тепловизор: смотрим на мир глазами Хищника

Reading time4 min
Views234K
Давно хотел дорваться до тепловизора — у меня в профиле наверное год висело объявление. Наконец, тепловизор удалось найти — и тем что удалось снять и рассказом о том, как они работают — хочу поделиться.

Температуру объектов можно определять потому что количество испускаемого объектами ИК света в первую очередь зависит от температуры и уже меньше — от материала (emissivity, в правильных пирометрах и практических всех тепловизорах можно настраивать поправку на emissivity, чтобы получать достаточно точную температуру.).

С ростом температуры — излучение становится более коротковолновым, с 700-800 градусов уже захватывая область видимого света. На этом принципе работают как тепловизоры, так и пирометры (инфракрасные термометры) и датчики движения.

Тепловизоры, как и многие интересные вещи в этом мире — изначально придуманы для военных. Любые теплые предметы неизбежно светятся в ИК свете (и днем и ночью), воздух свободно пропускает ИК-свет в диапазоне 7-14мкм и наконец — туман, пыль — гораздо меньше задерживает ИК свет, т.е в условиях плохой видимости видно может быть гораздо дальше.
Читать дальше →

013.jpg или Принцессы не какают

Reading time20 min
Views255K
Вот уже совсем скоро конец света, дорогие мои айтишнички. Чтобы вы не боялись закрывать сегодня глазки, я расскажу вам добрую сказочку. О том, что даже после самого тёмного кончика светика, после самого дремучего апокалипсика, когда даже электрончики откажутся строем ходить по проводкам, для вас, дорогие айтишнички найдётся работёнка… Принцессы? Принцессы будут. И драконы тоже. Какая ж сказка без принцесс и драконов? Так что не боимся, закрываем глазоньки и слушаем волшебную сказочку...
image
— Именем Князя Питерского, давайте сюда декларацию. Что везем? Откуда?
— Из Новосибирска. 256 мегабайт сертифицированных данных для Интернета Его Высокопревосходительства. Научные, метеорологические, новости, деловая и частная корреспонденция, — доложила я, зная, что таможня шутить не любит.
— Открывайте, посмотрим.
— Что, все 256 мегабайт смотреть будете?
Открывайте, разберемся...

Письма torrent счастья от большого брата

Reading time2 min
Views64K
image
В некоторых странах уже начали приходить письма торрент счастья от провайдеров. «На вас поступила жалоба от правообладателя такого-то фильма что с вашего IP в такое-то время было скачано/роздано. И мы(провайдер) конечно пока не вправе без решения суда разгласить правообладателю запрашиваемую информацию о вас, но по решению суда будем вынуждены сделать это… »
Читать дальше →

Пишем свой Android Market

Reading time5 min
Views29K
В рамках работы над большим количеством android приложений появилось желание создать свой Android Market на локальном сервере (с шахматами и поэтессами).
Свой маркет должен решать две простые задачи:
  • Распространение и обновление корпоративных приложений. У нас есть набор внутри корпоративных приложений, которые нельзя публиковать на Google Play. Сейчас пользователи оповещаются о новых версиях по емайлу, что не удобно.
  • Бета тестирование заказных приложений на большой группе коллег, с обратной связью.


И так, нам необходимо реализовать небольшое Android приложение, которое будет скачивать список доступных приложений, проверять наличие обновлений для уже установленных, устанавливать/удалять приложения.
Читать дальше →

Параллелим R

Reading time3 min
Views12K

Введение


Сейчас практически невозможно представить себе мир без параллельных вычислений. Параллелят все и вся, даже у мобильных телефонов теперь несколько ядер, а значит… ну вы понимаете. Но давайте поговорим не о мобильных приложениях, а о более полезных и интересных вещах. О машинном обучении. Тема тоже модная, разрекламированная, про машинное обучение слышали даже домохозяйки и только ленивый еще не трогал это руками. Для машинного обучения, и если быть более точным, для статистических расчетов есть множество разных фреймворков, на мой вкус лучший из них – R (да простят меня поклонники Octave). И речь пойдет именно о нем.

Disclaimer:
я не претендую на особую строгость изложения, моя задача донести до читателей общую мысль.
Читать дальше →

Нужно ли калибровать цветные принтеры?

Reading time3 min
Views18K
Вопрос калибровки цветного принтера часто ставится довольно жёстко, так как качество печати в цвете может довольно сильно зависеть от того, насколько хорошо откалиброван принтер. Калибровка большинства цветных принтеров заключается в выполнении двух автоматических операций по настройке цветов:

Читать дальше →

Information

Rating
Does not participate
Location
Бангкок, Таиланд, Таиланд
Registered
Activity