Как стать автором
Обновить
89
0
Антон Терехов @Terehoff

Пользователь

Отправить сообщение

Работа с WAV-файлами с использованием PHP

Время на прочтение 7 мин
Количество просмотров 17K
Всё началось с того, что я задумался о том, как отобразить на сайте информацию о загруженном аудио-файле. Для начала решил разобраться с самым простым форматом — wav. Как оказалось, ничего сложного в этом нет и писать именно об этом, в общем-то, не было бы никакого смысла, благо, информации о том, как устроен wav-файл «изнутри» в Интернете полно.

И тут Остапа понесло И тут в голову пришла светлая мысль о том, что было бы прикольно не просто отображать информацию о файле, но и иметь возможность генерировать такой файл «на лету». Думаю, все видели в сети всевозможные «онлайн-пианино» и прочее, верно?

Итак, что мне удалось сделать за 2 вечера — под катом.
Читать дальше →
Всего голосов 14: ↑13 и ↓1 +12
Комментарии 13

Redmine: миграция с MySQL на PostgreSQL 9.5

Время на прочтение 3 мин
Количество просмотров 15K
image
В последнее время клиенты нашей компании все чаще обращаются с просьбой осуществить переход с MySQL на PostgreSQL. Действительно, активное развитие PostgreSQL дает повод разработчикам задуматься о смене СУБД. Зачастую при этом встает вопрос о переносе больших объемов данных, которыми «обросла» существующая база под MySQL.

Мы сами являемся активными пользователями Redmine и разработчиками плагинов для него, потому и выбрали эту CRM для иллюстрации процесса миграции.

Ниже описывается один из способов миграции с БД MySQL на PostgreSQL 9.5 для Redmine на ОС CentOS 6.

Читать дальше →
Всего голосов 15: ↑13 и ↓2 +11
Комментарии 10

Пишем shell скрипты на Python и можно ли заменить им Bash

Время на прочтение 6 мин
Количество просмотров 125K
В этой небольшой статье речь пойдет о том, можно ли легко использовать Python для написания скриптов вместо Bash/Sh. Первый вопрос, который возникнет у читателя, пожалуй, а почему, собственно, не использовать Bash/Sh, которые специально были для этого созданы? Созданы они были достаточно давно и, на мой взгляд, имеют достаточно специфичный синтаксис, не сильно похожий на остальные языки, который достаточно сложно запомнить, если вы не администратор 50+ левела. Помните, ли вы навскидку как написать на нем простой if?

if [ $# -ne "$ARGCOUNT" ]
then
    echo "Usage: `basename $0` filename"
    exit $E_WRONGARGS
fi

Элементарно правда? Интуитивно понятный синтаксис. :)

Тем не менее в python эти конструкции намного проще. Каждый раз когда я пишу что то на баше, то непременно лезу в поисковик чтобы вспомнить как писать простой if, switch или что-то еще. Присвоение я уже запомнил. :) В Python все иначе. Я хоть и не пишу на нем круглые сутки, но никогда не приходилось лезть и смотреть как там сделать простой цикл, потому что синтаксис языка простой и интуитивный. Плюс ко всему он намного ближе к остальным мейнстримовым языкам типа java или c++, чем Bash/Sh.

Также в стандартной и прочих библиотеках Python есть намного более удобные библиотеки чем консольные утилиты. Скажем, вы хотите распарсить json, xml, yaml. Знаете какой я недавно видел код в баше чтобы сделать это? Правильно:

python -c "import json; json.loads..." :)

И это был не мой код. Это был код баше/питоно нейтрального человека.

То же самое с регексом, sed бесспорно удобная утилита, но как много людей помнит как правильно ее использовать? Ну кроме Lee E. McMahon, который ее создал. Да впринципе многие помнят, даже я помню как делать простые вещи. Но, на мой взгляд, в Python модуль re намного удобнее.

В этой небольшой статье я хотел бы представить вам диалект Python который называется shellpy и служит для того, чтобы насколько это возможно заменить Bash на python в скриптах.

Велкам под кат.
Читать дальше →
Всего голосов 54: ↑45 и ↓9 +36
Комментарии 35

Поняв Docker

Время на прочтение 14 мин
Количество просмотров 221K

Если вы еще никогда не поддерживали чужие приложения, или пусть даже свои, но таких размеров, что уже не помещаются в одной голове, то прошу вас расслабиться, откинуться на спинку кресла и воспринимать прочитанное как поучительную сказку с надуманными проблемами, забавным сюжетом и очевидным счастливым концом. В противном случае, если реальный боевой опыт у вас имеется, добро пожаловать в ад, но с IDDQD и IDKFA.


К вашему сведению! В этой статье мы рассматриваем само явление docker-контейнеров, а не составляем список микросервисов, которые гнездятся внутри. Этим мы займемся в следующей серии, во имя справедливости!


UPDATE: пришлось заменить «докер» на «docker», иначе статья не ищется. Заранее прошу прощения за все «docker'ы» в тексте. Селяви.


Что мы имеем сегодня


  • Зоопарк дубовых VPS-хостингов.
  • Дорогие IaaS и PaaS с гарантированным vendor lock in.
  • Уникальные сервера-снежинки.
  • Ворох устаревших зависимостей на неподдерживаемой операционке.
  • Скрытые связи частей приложения.
  • Незаменимый админ полубог на скейтборде.
  • Радуга окружений: development, testing, integration, staging, production.
  • Генерация конфигов для системы управления конфигами.
  • Feature flagging.
docker run docker
Всего голосов 92: ↑83 и ↓9 +74
Комментарии 245

Восстанавливаем права доступа под Mac OS X — EL Capitan

Время на прочтение 2 мин
Количество просмотров 33K
При переходе на El Capitan ряд пользователей столкнулся с проблемами прав доступа — неработающее sudo, некорректная timezone, etc…

Корнем зла является урезанный доступ к /private/etc.

Для начала, вам, стоит проверить свой. Откройте Terminal (это можно сделать через Spotlight) и введите ls -la /private.

$ ls -la /private
total 0
drwxr-xr-x@   6 root  wheel   204 Oct  1 10:20 .
drwxr-xr-x   33 root  wheel  1190 Nov  4 15:56 ..
drwxr-xr-x  106 root  wheel  3604 Nov 13 18:04 etc
drwxr-xr-x    2 root  wheel    68 Aug 23 02:28 tftpboot
drwxrwxrwt   14 root  wheel   476 Nov 16 10:55 tmp
drwxr-xr-x   25 root  wheel   850 Nov  4 17:02 var
$ 

Вот так «drwxr-xr-x» и должны выглядеть права на etc. Если они выглядят больше похожими на «drwx-----», то вам к нам.
Читать дальше →
Всего голосов 22: ↑12 и ↓10 +2
Комментарии 13

Балансировка MySQL

Время на прочтение 2 мин
Количество просмотров 19K
Это краткая заметка как настроить отказоустойчевый кластер с балансировкой нагрузки из 2 MySQL серверов. Исходные данные 2 свежеустановленных MySQL сервера. Необходимо настроить работу таким образом, что бы в нормальной ситуации запросы балансируются между MySQL серверами, в случае выхода из строя одного из MySQL серверов все запросы идут ко второму.

Читать дальше →
Всего голосов 21: ↑13 и ↓8 +5
Комментарии 4

15 тривиальных фактов о правильной работе с протоколом HTTP

Время на прочтение 7 мин
Количество просмотров 231K
Внимание! Реклама! Пост оплачен Капитаном Очевидность!

Ниже под катом вы найдёте 15 пунктов, описывающих правильную организацию ресурсов, доступных по протоколу HTTP — веб-сайтов, «ручек» бэкенда, API и прочая. «Правильный» здесь означает «соответствующий рекомендациям и спецификациям». Большая часть ниженаписанного почти дословно переведена из официальных стандартов, рекомендаций и best practices от IETF и W3C.



Вы не найдёте здесь абсолютно ничего неочевидного. Нет, серьёзно, каждый веб-разработчик теоретически эти 15 пунктов должен освоить где-то в районе junior developer-а и/или второго-третьего курса университета.

Однако на практике оказывается, что великое множество веб-разработчиков эти азы таки не усвоило. Читаешь документацию к иным API и рыдаешь. Уверен, что каждый читатель таки найдёт в этом списке что-то новое для себя.
Читать дальше →
Всего голосов 191: ↑186 и ↓5 +181
Комментарии 120

Как определить дубликаты картинок с помощью PHP

Время на прочтение 4 мин
Количество просмотров 45K
В любом проекте человеческий фактор никто не отменял, и если пользователи самостоятельно грузят картинки на сайт – появления дубликатов не избежать. Когда доходит до тысяч файлов, глазами всего не пересмотреть, а повторяющиеся картинки мало того, что никому не нужны, так еще и занимают место, тратят ресурс и в конце концов тормозят работу.



Потому рано или поздно встает вопрос автоматизации процесса поиска повторов, и тут мы рассмотрим основные, а также попробуем в деле.
Читать дальше →
Всего голосов 45: ↑37 и ↓8 +29
Комментарии 24

Что нужно знать при миграции с MySQL на PostgreSQL?

Время на прочтение 8 мин
Количество просмотров 36K
В продолжение статьи о теории и практике миграции хранилищ данных на PostgreSQL, мы поговорим о проблемах, с которыми вы можете столкнуться при переезде с распространенной СУБД MySQL. Дабы не утомлять всех лишней риторикой, сегодняшний рассказ будет более тезисный и проблемно-ориентированный.

Все нижепредставленное является перечнем типовых ошибок дизайна и эксплуатации MySQL, которые могут повлиять на процесс адаптации схемы, переработки кода и переноса данных. Наличие всех этих мелочей в разнообразных коварных сочетаниях является одной из причин, по которой существующие “универсальные” инструменты вряд ли справятся конкретно с вашей базой.

Именно поэтому в предыдущей статье я рекомендовал не тратить время на поиск серебряной пули и написать что-нибудь свое “на коленке”, что действительно работает. Данная статья призвана облегчить написание такого инструмента, указывая на потенциальные изъяны, в наличии которых вы может сравнительно быстро убедиться.

Перейдем к делу.
Читать дальше →
Всего голосов 49: ↑43 и ↓6 +37
Комментарии 56

Понимая Docker

Время на прочтение 7 мин
Количество просмотров 1M
Уже несколько месяцев использую docker для структуризации процесса разработки/доставки веб-проектов. Предлагаю читателям «Хабрахабра» перевод вводной статьи о docker — «Understanding docker».

Что такое докер?


Докер — это открытая платформа для разработки, доставки и эксплуатации приложений. Docker разработан для более быстрого выкладывания ваших приложений. С помощью docker вы можете отделить ваше приложение от вашей инфраструктуры и обращаться с инфраструктурой как управляемым приложением. Docker помогает выкладывать ваш код быстрее, быстрее тестировать, быстрее выкладывать приложения и уменьшить время между написанием кода и запуска кода. Docker делает это с помощью легковесной платформы контейнерной виртуализации, используя процессы и утилиты, которые помогают управлять и выкладывать ваши приложения.
Читать дальше →
Всего голосов 27: ↑22 и ↓5 +17
Комментарии 62

Текстовый чат для сайта

Время на прочтение 3 мин
Количество просмотров 25K
image

Хочу поделиться опытом создания текстового чата на основе nginx-push-stream-module модуля Nginx, PHP и Javascript. Этот модуль функционирует по принципу long polling и может быть использован как для обмена мгновенными сообщениями между пользователями, так и для системы push–уведомлений.
Читать дальше →
Всего голосов 40: ↑26 и ↓14 +12
Комментарии 17

Ресайз картинок в браузере. Все очень плохо

Время на прочтение 10 мин
Количество просмотров 104K
Если вы когда-нибудь сталкивались с задачей ресайза картинок в браузере, то вы наверное знаете, что это очень просто. В любом современном браузере есть такой элемент, как холст (<canvas>). На него можно нанести изображение нужных размеров. Пять строчек кода и картинка готова:

function resize(img, w, h) {
  var canvas = document.createElement('canvas');
  canvas.width = w;
  canvas.height = h;
  canvas.getContext('2d').drawImage(img, 0, 0, w, h);
  return canvas;
}

Из холста картинку можно сохранить в JPEG и, например, отправить на сервер. Можно было на этом закончить статью, но сперва давайте взглянем на результат. Если вы поставите рядом такой холст и обычный элемент <img>, в который загружена та же картинка (исходник, 4 Мб), то вы увидите разницу.

img
Читать дальше →
Всего голосов 156: ↑152 и ↓4 +148
Комментарии 90

Пространства имен в PHP

Время на прочтение 9 мин
Количество просмотров 48K
На хабре можно найти немало статей о пространствах имен в PHP, но мне помогла именно эта, и именно ей я хочу поделится. Наверняка найдутся те, кому этот перевод поможет.

Путь к поддержке пространств имен в PHP был тернистым. Но к счастью она была добавлена к языку в версии PHP 5.3, и структура PHP кода значительно улучшилась с тех пор. Но как именно нам их использовать?

Что такое пространства имен?


«Не забывайте обратный слеш, когда Вы храните имя пространства имен в виде строки!»

Представьте себе пространство имен, как ящик, в который Вы можете положить все что угодно: карандаш, линейку, кусок бумаги и так далее. Это Ваши вещи. Прямо под вашим ящиком, располагается еще чей-то ящик, и его хозяин хранит те же вещи в нем. Чтобы избежать использования предметов друг друга, Вы решили маркировать ящики так чтобы стало ясно, что кому принадлежит.
Читать дальше →
Всего голосов 44: ↑33 и ↓11 +22
Комментарии 9

Незаметные сложности ракетной техники

Время на прочтение 5 мин
Количество просмотров 281K

Строительство и эксплуатация ракет-носителей — это своеобразная «черная команда» космонавтики. Большая и сложная работа делается незаметно, а большинство лавров достаются разработчикам полезной нагрузки. Мы забыли о сложности задач, которые решаются при проектировании и производстве ракет-носителей. Эта статья призвана показать важность темы и представить небольшой ликбез тем, кто хотел бы узнать, «как оно летает».
Читать дальше →
Всего голосов 248: ↑247 и ↓1 +246
Комментарии 285

На Google Maps появилось 50 тысяч изображений Амазонки

Время на прочтение 1 мин
Количество просмотров 1.3K


Не так давно инициативная группа сервиса Google Maps решила создать достаточно крупную 3D модель подводного мира австралийского Большого Барьерного Рифа. Теперь же еще одна команда выложила 50 тысяч снимков Амазонки и прибрежных дождевых лесов, объединив снимки в панораму. Теперь любой пользователь сервиса может полюбоваться снимками, зайдя на сервис Google Maps. Некоторые из панорамных снимков доступны прямо в соответствующей записи в официальном блоге компании.

Читать дальше →
Всего голосов 34: ↑32 и ↓2 +30
Комментарии 12

Стартап «Аватар»

Время на прочтение 1 мин
Количество просмотров 2.4K
Проект «Аватар» http://avatar.cx работает в 220 странах мира и рассчитан на 54 языка. Любой желающий за цену, начинающуюся от 7 $ час, может заказать себе человека-аватара, который займется выполнением заказанных действий в практически любой точке земного шара.

Суть сервиса его создатель Сергей Исаков формулирует следующим образом:

Вы желаете сегодня вечером поиграть в казино Лас Вегаса – входите на портал – выбираете город Лас Вегас – находите там список людей, готовых поработать Аватаром и свободных в данный момент – выбираете одного из них, с лучшими характеристиками его Интернета, видео камеры и качества звука, знанием своего языка (или берёте ещё и переводчика) – смотрите его расценки – связываетесь с ним через портал – спрашиваете его: «Готовы ли, Вы, прямо сейчас поработать 5 часов в своём городе – поиграть в казино?» – он отвечает: «Да» – оплачиваете 5 часов его работы через портал – ему приходит информация об оплате – соединяетесь с ним через Skype – у него очки со встроенной видеокамерой и звуком – он едет по Лас Вегасу в казино, и Вы всё видите и слышите – теперь он – это Вы – Вы им управляете – Вы купили место, время, его тело – Вы виртуально входите в казино Лас Вегаса, оплачиваете с Visa фишки и начинаете игру – у Аватар на груди (как медаль) висит знак Аватара – все окружающие видят и понимают, что этот человек Аватар. При необходимости, Вы можете доплатить ещё пару часов работы Аватара, так сегодня вечером Вы побывали в Лас Вегасе и поиграли в казино.


Под катом видео-презентация проекта.
Посмотреть
Всего голосов 104: ↑78 и ↓26 +52
Комментарии 88

Microsoft реализовала аналог Synergy (управление несколькими ПК одной мышкой)

Время на прочтение 2 мин
Количество просмотров 37K
В рамках инициативы Microsoft Garage разработана утилита Mouse without Borders (MWB), которая позволяет управлять четырьмя компьютерами с помощью одной мыши и клавиатуры. Концепция напоминает известную open-source программу Synergy, которая уже обсуждалась на Хабре.

В отличие от Synergy, разработка Microsoft проще в установке и настройке, а также имеет ряд дополнительных возможностей: например, перетаскивание файлов мышкой с одного десктопа на другой, одновременная авторизация на всех компьютерах или PrtScreen с любого экрана. Недостаток по сравнению с Synergy очевиден: MWB работает только на одной платформе Windows, в то время как Synergy поддерживает Linux и Mac.
Читать дальше →
Всего голосов 56: ↑46 и ↓10 +36
Комментарии 43

SMS о пришедших сообщениях Вконтакте

Время на прочтение 4 мин
Количество просмотров 5.6K
image

ВВЕДЕНИЕ


Давным-давно, мы с одноклассником думали о том, как заработать. Тогда, ничего кроме как рассылать рекламные смс мы не придумали. Реализовать это не получилось, ведь знаний и умений у нас не было. Но желание распознать картинку и отправить sms бесплатно (хотя в нашем краю Интернет был ой как дорог) осталось.

КАПЧА МОЕГО ОПЕРАТОРА


Установив PHP, решил начать его изучение с какой-нибудь задачки. Тут-то и вспомнились школьные годы. Сейчас у меня сотовый оператор Теле2, самый дешевый в моем регионе. Вот значит с ним и будем работать. Зашел на сайт бесплатной отправки. Увидел, как обстоит дело с смс. Довольно простые картинки.
Читать дальше →
Всего голосов 68: ↑57 и ↓11 +46
Комментарии 34

США составили список самых крупных пиратских точек

Время на прочтение 2 мин
Количество просмотров 2K
Внешнеторговое ведомство США опубликовало новую версию доклада Out-of-Cycle Review of Notorious Markets со списком самых крупных пиратских точек в мире в онлайне и офлайне. Два года назад в этом списке фигурировал рынок «Горбушка» и магазин AllOfMP3. Сейчас там новые персонажи, но значительную часть списка по-прежнему занимают российские и китайские сайты.

С ними США будут вести войну на политическом уровне, как это было с Allofmp3, ведь они напрямую угрожают американской экономике. Закрытие Allofmp3 пять лет назад было одним из обязательных условий по вступлению России в ВТО. Правда, Россия до сих пор и туда не вступила, но это уже другой вопрос.
Читать дальше →
Всего голосов 53: ↑44 и ↓9 +35
Комментарии 88

Семейный бюджет в Google Docs v3

Время на прочтение 6 мин
Количество просмотров 42K
C Новым Годом всех, кто не может в праздники без мозговой деятельности и без хабра.
Продолжаю полюбившуюся серию постов (раз, два) про теорию и практику ведения семейного бюджета в Google Docs.

Я честно вел свой бюджет, написанный в Google docs год назад, и родил новую версию и новую философию (для себя) ведения бюджета. Чем и спешу поделиться.

Вступление

Я знаю, что есть много специализированных систем для семейного бюджета вроде 4 Конверта или ИзиФинанс, но я люблю все делать сам, ибо это позволяет сделать то, что сам хочешь и своим детищем пользоваться приятнее.

Основные преимущества ведения бюджета на Google Docs:

1. Можно заполнять откуда угодно (ноутбуки, телефоны, айпады) — с помощью Google forms
2. Можно самому разрабатывать логику и визуализацию
3. Надежность и почти 100% отказоустойчивость обеспечена корпорацией зла :)

Немного философии.

Зачем мы начинаем вести бюджет? У каждого есть свои причины: понять, почему за 10 дней до ЗП кончаются деньги; понять, почему долги по кредиткам только растут; понять какие расходы лучше сократить или как накопить денег на новую машину.
Многие финансовые системы предлагают нам завести целую уйму статей бюджета и записываться свои расходы в них, не задумываясь, а зачем нам все это. Я в самом начале пошел тем же путем и столкнулся с тем, что расходы почти невозможно анализировать, т.к. часть из них были явно не постоянными (покупка ноутбука или костюма — явно расходы «по необходимости/желанию») и планировать и анализировать их невозможно.
Сферический бюджет в вакууме — это две статьи: «приход» и «расход». Каждый день вписываете расходы и доходы и смотрите, что получается. Потом у вас появляются мысли, а что мы хотим анализировать? Кто-то хочет посмотреть, а сколько в итоге уходит денег на авто (бензин, страховка, налоги, ремонт, мойка), кому-то интересно понять, сколько он тратит на развлечения (походы в рестораны, кино, бары).
Я советую делить статьи расходов не более чем на 10-15 позиций исходя из того, что вы хотите анализировать в этом году/квартале.

Мои статьи расходов выглядят примерно так:
image

А самое интересное — как это сделать в Гуглодоксах с подробными инструкциями и формулами и примеров — под катом.
Читать дальше →
Всего голосов 118: ↑104 и ↓14 +90
Комментарии 90

Информация

В рейтинге
Не участвует
Откуда
Рязань, Рязанская обл., Россия
Дата рождения
Зарегистрирован
Активность