Pull to refresh
48
0
Дмитрий Л. @DVLev

PHP/JS developer

Send message

Организация миграции схем баз данных на основе Nasgrate

Level of difficultyHard
Reading time5 min
Views1.7K

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

В этой статье я бы хотел подробнее остановиться на Nasgrate

Основные преимущества Nasgrate

в качестве хранилища SQL-запросов используются обычные текстовые файлы без привязки к какому либо языку программирования. Это упрощает процесс взаимодействия между командами, работающими с разными технологиями (например Node и Python), не приходится разбираться в особенностях язковых конструкций

возможность автоматического создания миграции на основе анализа изменений в двух базах данных (пока поддерживается только MySQL, но в планах другие базы данных) или между двумя состояниями миграций одной базы данных

наличие визуального интерфейса (а не только консольного клиента) позволяющего организовать просмотр изменений в наглядном виде

Читать далее
Total votes 5: ↑4 and ↓1+3
Comments1

Сравнение схем двух баз данных

Reading time3 min
Views9.9K

При разработке приложений иногда возникает потребность в сравнении двух баз данных (например prod и dev).

Существует ряд подходов для решения этого вопроса - от создания dump-файла со структурой db и последующим использованием diff, до использования специализированных платных решений типа dbForge или RedGate.

Одним из таких решений, сочетающих бесплатность и удобство использования, является Compalex.

Читать далее
Total votes 7: ↑5 and ↓2+3
Comments11

Apple Watch 4 (44 мм, 2019 г.) vs Pebble Steel Classic (2014 г.)

Reading time6 min
Views47K
Свои Pebble Steel Classic я купил в 2014 году, аккурат перед выпуском самых первых Apple Watch (0 серия) (можно почитать мой обзор далекого 2014 года https://habr.com/ru/post/364677/). Я помню как сильно сомневался брать Pebble или подождать выпуска Apple Watch (это же Apple!) и как испытал облегчение когда часы от Apple все таки дошли до прилавков (тормозные, не работающие без смартфона, едва вытягивающий день использования).

После этого я каждый год смотрел на прогресс Apple Watch и каждый год не понимал ради чего стоит потратиться на этот довольно дорогой гаджет и чем он окажется лучше моих текущих Pebble.

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

Читать дальше →
Total votes 101: ↑89 and ↓12+77
Comments117

Секс, любовь и отношения сквозь призму микросервисной архитектуры

Reading time3 min
Views6.6K
«Когда я разделила секс, любовь и отношения — все стало значительно проще...» цитата умудренной жизненным опытом девушки
Мы программисты и имеем дело с машинами, но ничто человеческое нам не чуждо. Мы влюбляемся, женимся (выходим замуж), рожаем детей и … умираем. Как и у простых смертных, у нас постоянно возникают проблемы эмоционального плана, когда “не сошлись характером”, “мы не подходим друг к другу” и т.д… У нас случаются любовные треугольники, разрывы отношений, измены и прочие эмоционально окрашенные события.

С другой стороны, в силу особенностей профессии, мы любим чтобы было все логично и одно вытекало из другого. Если не нравлюсь — то чем конкретно? Если не сошлись характерами, то какой конкретно частью. Объяснения в стиле “ты меня не жалеешь и не любишь” кажутся нам каким то набором малопонятных абстракций, которые нужно измерить (в каких единицах измеряется жалость) и дать понятные граничные условия (какие события должны эту жалость тригерить).
Читать дальше →
Total votes 22: ↑12 and ↓10+2
Comments7

Использование событийной модели в Doctrine 2 + Symfony 3

Reading time6 min
Views22K

Давайте представим ситуацию: у вас есть заказ в интернет магазине (Entity). Заказ имеет некий статус. При смене статуса заказа необходимо провести кучу сопутствующих действий, например:


  • сохранить в заказе дату последнего изменения
  • записать в историю по заказу информацию о смене статуса
  • отослать письмо / sms клиенту
  • вызвать метод API службы доставки / платежной системы / партнера и т.д.

Возникает вопрос как все это правильно организовать с точки зрения программного кода.
Все ниже описанное справедливо для Doctrine 2 и Symfony > 3.1

Читать дальше →
Total votes 7: ↑6 and ↓1+5
Comments52

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

Reading time3 min
Views28K
Disclaimer: я не являюсь профессиональным юристом, поэтому все нижеизложенное — это попытки самостоятельно разобраться в вопросе на основе вдумчивого чтения различных источников. За профессиональной юридической консультацией лучше обращаться к людям, которые занимаются этим на постоянной основе (их называют "юристы").

Начнем с наглядного примера: у вас есть сайт коммерческой организации и вам нужно разместить схему проезда. Вы недолго думаете идете на Яндекс.Карты (Google Maps, 2Gis), делаете скриншот, рисуете в Photoshop какие-то ориентиры, чтобы человек не запутался, выкладываете на свой сайт в разделе "Контакты" и… попадаете на штраф 300 тыс. руб. за неправомерное использование объекта авторского права.

Читать дальше →
Total votes 34: ↑31 and ↓3+28
Comments66

Навигация по коду в IDE от JetBrains с использованием REST API и командной строки

Reading time4 min
Views14K

image


При разработке приложений часто приходится сталкиваться с необходимостью просмотра вывода exception stack trace (в логах или при debug-инге). Хотелось бы иметь возможность автоматически попадать в необходимое место кода, прямо кликом по строке в выводе stack trace в браузере или в терминале.


Если вы являетесь пользователем одного из последних продуктов компании JetBrains (в частности PhpStorm), вы можете использовать для этих целей внутреннее REST API (для навигации из браузера) и command line launcher (для навигации в терминале).


Навигация в браузере


Частичное описание методов REST API IDE от JetBrains можно посмотреть здесь:


» http://develar.org/idea-rest-api/


Одним из методов этого API является возможность открыть файл проекта и переместиться на произвольную позицию в этом файле внутри самой IDE.

Читать дальше →
Total votes 29: ↑29 and ↓0+29
Comments12

Быстрое создание phar файлов используя Box

Reading time6 min
Views9.7K


Phar — это аналог jar из мира Java, но только применительно к PHP. Phar упаковывает файлы проекта в специальный архив и позволяет легко переносить и устанавливать приложение без манипуляций с самим проектом в виде исполняемой программы.

Описание phar из официальной документации
Phar archives are best characterized as a convenient way to group several files into a single file. As such, a phar archive provides a way to distribute a complete PHP application in a single file and run it from that file without the need to extract it to disk. Additionally, phar archives can be executed by PHP as easily as any other file, both on the commandline and from a web server. Phar is kind of like a thumb drive for PHP applications.


Для создания phar файлов в PHP существует довольно развесистый API, но есть способ проще и удобнее — использовать проект Box.

Формат JSON файла


Проект Box позволяет описать процесс создания phar файла в удобном JSON формате.

Самый простой файл выглядит так:

{
    "files": ["src/Put.php"],
    "main": "bin/main",
    "output": "example.phar",
    "stub": true
}

Читать дальше →
Total votes 21: ↑21 and ↓0+21
Comments3

Сервис от компании Percona для создания оптимальной конфигурации MySQL серверов и анализа SQL-запросов

Reading time2 min
Views17K
Предлагаю ознакомиться с сервисом от компании Percona, который позволяет правильно настроить конфигурацию MySQL сервера на основе конкретных условий использования и проанализировать используемые SQL-запросы на наличие ошибок и недочетов.



Анализ запросов в данном сервисе — не является заменой команде EXPLAIN, которая ориентирована на анализ производительности запроса, а является скорее дополнением, которое анализирует запрос с точки зрения его синтаксиса.

Читать дальше →
Total votes 22: ↑17 and ↓5+12
Comments8

Использование bit.ly для анализа переходов из email рассылок

Reading time2 min
Views28K
При размещении входящих ссылок на внешних источниках или исходящих ссылок на собственном сайте, возникает проблема получения статистики переходов по этим ссылкам. В частном случае, когда внешняя ссылка ведет на ваш сайт, вы можете получить эту статистику используя веб-аналитику вроде Яндекс.Метрики или Google Analytics анализируя источники трафика (если речь о входящем трафике), либо навешиваете метки на ссылки, если речь о трафике исходящем.



Но есть случаи, когда либо у вас либо закрыт доступ к статистике, либо ссылка размещена не на ваш ресурс (например участие в реферальной программе), либо вы используется CMS, где вставка какого-либо js кода запрещена (и соответственно метки вы проставить не можете), либо используете email рассылку, содержащую ссылки на сайты партнеров (кросс-маркетинг).

В этом случае можно использовать дополнительные возможности, предоставляемые сервисами сокращения URL (в моем случае это bit.ly). Сразу скажу что данный способ не подходит, если вы публикуете внешние ссылки с целью SEO-оптимизации, так как ваша оригинальная ссылка заменяется на сокращенную и поисковики ее «не засчитают».

Читать дальше →
Total votes 7: ↑7 and ↓0+7
Comments1

Как разделить VPN трафик в MacOS

Reading time2 min
Views31K


VPN
VPN (англ. Virtual Private Network — виртуальная частная сеть — обобщённое название технологий, позволяющих обеспечить одно или несколько сетевых соединений (логическую сеть) поверх другой сети (например, Интернет) WikiPedia


Предположим, вы разработчик и часть ресурсов (например база данных) находятся в корпоративной сети, доступ в которую осуществляется через VPN.

Если вы посмотрите на все доступные инструкции как настраивать VPN на Mac OS, то увидите что авторы говорят вам ставить галку «отправлять весь трафик через VPN», что приводит к тому, что (Капитан Очевидность) весь трафик идет через VPN, что в свою очередь накладывает все ограничения корпоративной сети (запрет на посещение отдельных ресурсов, закрытые порты и т.д.) или ограничения сервиса анонимизации (узкий канал, долгий ping и т.д.).

Возникает вопрос — нельзя ли через VPN пускать только определенный трафик, а весь остальной (основной) трафик пусть идет по обычному каналу без ограничений.

Делается это довольно просто.

Читать дальше →
Total votes 12: ↑5 and ↓7-2
Comments9

Можно ли заниматься разработкой на iPad?

Reading time7 min
Views98K
Программирование — процесс творческий и часто желание написать кусок кода или сиюминутно исправить ошибку становится просто невыносимым. Иногда написания кода требуют внешние обстоятельства, как то критичная ошибка в коде, которая валит проект. Для сотрудников, занимающих руководящие позиции в команде, нужна возможность провести code review и поправить проблемные участки кода.

Хорошо когда в пределах досягаемости есть стационарный компьютер или ноутбук на котором развернута привычная среда разработки. Но что делать если вы находитесь за пределами рабочего места? Таскать с собой постоянно ноутбук? Но во первых большой 13-15 дюймовый ноутбук не везде развернешь (например общественный транспорт), а во вторых таскать его постоянно с собой — еще то занятие. Можно конечно купить 11 дюймовый MacBook Air (или его аналог), но все равно он будет не настолько компактен и не так часто используем, чтобы оправдать покупку.

Чтож, обратим свой взор на устройства, которые сейчас практически всегда с нами — это телефон и планшет. Телефон — это конечно вариант экстремальный, хотя сейчас, с появлением 6 — 6,5 дюймовых моделей, грань между телефоном и планшетом стирается. У меня есть опыт успешного восстановления удаленного сервера по ssh с телефона iPhone 4s с 3.5 дюймовым экраном. Но мы все таки говорим о процессе полноценной работы с кодом, поэтому, на мой взгляд, минимальным является планшет с диагональю от 7 дюймов, экран которого вмещает сопоставимое с экраном большого компьютера, информации. Я покажу на примере iPad Mini возможные варианты его использования для решения повседневных задач разработчика.



Если вас заинтересовала тема — читаем дальше (осторожно, большое количество картинок).
Читать дальше →
Total votes 48: ↑39 and ↓9+30
Comments95

Compalex: сравнение схем двух баз данных

Reading time3 min
Views37K
Предположим, у вас есть prod и test базы данных. В какой-то момент разработчик внес изменения в тестовую базу, но забыл внести эти изменения в боевую базу. Если это часто используемая таблица, то ситуация очень быстро становится очевидной, так как в логах появятся ошибки в SQL-запросах и вам начинает звонить начальник с упреками «какого @#$%».

Но иногда изменения затрагивают редко используемые таблицы, либо изменения на первый взгляд не совсем очевидны (например, кто-то изменил длину поля VARCHAR и у вас стали обрезаться строки, или кто-то добавил индекс, из-за которого запросы на тестовой базе выполняются на порядок быстрее).

Еще вариант — вы провели обновление ПО и у вас все перестало работать. Куча непонятных ошибок на пустом месте, приложение лежит, пользователи не довольны.

В таких случаях бывает очень полезно посмотреть чем же отличаются базы и сделать соответствующие выводы.


Читать дальше →
Total votes 30: ↑23 and ↓7+16
Comments27

Субъективные ощущения после месяца использования Pebble Watch

Reading time7 min
Views23K

Часть первая. Лирическая


А нужны ли вообще SmartWatch? У меня есть ноутбук для работы в офисе, iPad для серфинга и работы на ходу, Kindle для чтения и iPhone для музыки, подкастов, звонков и тд, FitBit как фитнес-трекер. Зачем мне еще один гаджет непонятной функциональностью? Что он может дать мне такого, чего не может мне дать, например, iPhone?

Второй вопрос — если покупать Smart Watch, то какие? Нужен ли цветной экран? Нужен ли измеритель пульса? Нужна ли возможность чтения сообщений или достаточно только значка с уведомлением, а само сообщение можно прочитать на телефоне?

image
Читать дальше →
Total votes 33: ↑30 and ↓3+27
Comments44

Пара полезных команд, которые могут пригодиться при DDoS и не только

Reading time3 min
Views81K
В моем случае, в качестве frontend сервера, стоит nginx и формат access-лога имеет вид:

log_format main '$remote_addr — $remote_user [$time_local] "$host" "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" -> $upstream_response_time';

Что на выходе дает что-то вроде такой строки:

188.142.8.61 — - [14/Sep/2014:22:51:03 +0400] «www.mysite.ru» «GET / HTTP/1.1» 200 519 «6wwro6rq35muk.ru» «Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.191602; .NET CLR 3.5.191602; .NET CLR 3.0.191602» "-" -> 0.003

1. tail -f /var/log/nginx/nginx.access.log | cut -d ' ' -f 1 | logtop

Позволяет получить общую картину: распределение уникальных IP, с которых идут запросы, кол-во запросов с одного IP и т.д.
Самое ценное — что все это работает в режиме реального времени и можно мониторить ситуацию, внося какие-либо изменения в конфигурацию (например просто забанить ТОП 20 самых активных IP через iptables или временно ограничить географию запросов в nginx через GeoIP http://nginx.org/ru/docs/http/ngx_http_geoip_module.html).
Читать дальше →
Total votes 105: ↑101 and ↓4+97
Comments21

Куда исчезает место на жестком диске в Mac OS Х

Reading time1 min
Views174K
Являясь счастливым обладателем MacBook Pro с SSD на 256Gb, стал замечать, что система непонятным образом «разрастается».

Вроде бы фильмы качаются на внешний жесткий диск, на SSD находятся только рабочие файлы, а место куда-то исчезает.
Из 256Gb со временем осталось лишь 107Gb.

Утилита OmniDiskSweeper показывала, что должно быть занято около 70 Gb пользовательскими данными. Вопрос — куда делись еще примерно 80Gb?

Набрав в терминале
# du -h -d 1 /
увидел в корне странную папку с названием /.MobileBackups, как раз и занимающую 80Gb.

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

Отключается все это через консоль:
# sudo tmutil disablelocal

Дополнительно можно почитать здесь.
Total votes 78: ↑50 and ↓28+22
Comments41

Московские пробки с высоты месячного полета

Reading time1 min
Views35K
Мне захотелось пойти дальше и сделать нечто, что позволило бы оценить загруженность дорог не с позиции «здесь и сейчас», а в целом за месяц. Иначе говоря, ответить на вопрос «какова в целом дорожная ситуация и как она зависит от времени года».

В итоге получился график, который отражает что происходило с дорожной ситуацией в течении месяца. По горизонтальной оси расположены часы, по вертикальной даты. Цвет показывает загруженность дороги по 10-ти бальной шкале. Одна «строчка» этого графика соответствует общей дорожной ситуации в течении дня.

Например так выглядит октябрь:

image

Читать дальше →
Total votes 62: ↑50 and ↓12+38
Comments25

Добавление альбома исполнителя в сервисе Яндекс.Музыка

Reading time1 min
Views5.4K
Как все уже знают, на днях Яндекс анонсировал замечательное приложение Яндекс.Музыка для платформы iOS. На мой взгляд, самая главная киллер-фича данного приложения — это его способность воспроизводить музыку в off-line режиме.

Т.е. дома, открыв music.yandex.ru, добавляете в плейлисты любимую музыку, открываете приложение на iPhone и синхронизируете плей-листы.

Единственный момент, который меня напрягал во всей этой истории — это невозможность работать с музыкой на уровне альбомов. Нужно создать плейлист, назвать его, потом добавить туда все треки из альбома. Когда добавил плейлист — нет обратной ссылки на альбом.
Читать дальше →
Total votes 6: ↑6 and ↓0+6
Comments0

У Яндекс.Музыки кончились права на часть музыкальных композиций

Reading time1 min
Views4.6K
Сегодня при попытке прослушать музыкальную композицию из своего плейлиста на Яндекс.Музыка получил следующее сообщение:

++++++++++
К сожалению, срок действия прав Яндекс.Музыки на часть треков, которые входили в ваш плейлист, истёк.

Мы сделаем всё возможное для скорейшего возвращения ваших любимых композиций.

А пока вы можете подписаться на уведомления о возвращении треков на Яндекс.Музыку.
++++++++++

image
Total votes 49: ↑35 and ↓14+21
Comments18

Новый интерфейс проектирования кухонь от ИКЕА

Reading time1 min
Views1.1K
Через несколько дней на сайте Икеа появится новая программа для 3D-проектирования кухни.

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

image

Специально для хабрапользователей, ссылка на рабочую версию, которая пока официально доступна только в магазинах.
Total votes 21: ↑13 and ↓8+5
Comments22

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Registered
Activity