Как записать ISO на USB из терминала OSX

Перед записью .iso или .img через консоль на USB лучше всего поставить pv, для отображения прогресс бара записи. При наличии Homebrew это просто сделать командой brew install pv. Приступаем к записи:

  1. Вставить USB флешку;

  2. Через терминал вывести список доступных дисков, выполнив команду:

     diskutil list
    
  3. Найти в списке USB флешку, обычно что-то вроде /dev/disk1;

  4. Отмонтировать все разделы на ней, выполнив команду:

     diskutil unmountDisk /dev/disk1
    
  5. Теперь время прожечь .iso или .img используя dd и pv, для этого к названию диска, из предыдущего шага, прибавляем в начале букву r (например disk1 → rdisk1) и выполняем команду:

     pv -ptre /path/to/image.iso | sudo dd bs=1m of=/dev/rdisk1
    
  6. После завершения необходимо извлечь USB флешку используя команду:

     diskutil eject /dev/disk1
    

Конвертация таблиц MySQL из MyISAM в InnoDB

Вот простой трюк для перевода всех MySQL MyISAM таблиц в таблицы InnoDB.

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

/usr/bin/mysql --defaults-extra-file=/etc/mysql/debian.cnf --batch --skip-column-names -e "SELECT CONCAT('ALTER TABLE ',table_schema,'.',table_name,' engine=InnoDB;') FROM information_schema.tables WHERE TABLE_SCHEMA='your_database_name' AND ENGINE = 'MyISAM';" > myisam.txt

Получив таким образом список SQL запросов в файле myisam.txt, необходимо его выполнить используя команду:

/usr/bin/mysql --defaults-extra-file=/etc/mysql/debian.cnf your_database_name < myisam.txt

Как я готовлю Sublime Text 2 на OSX

Поводом к написанию этой статьи послужила вынужденная переустановка операционный системы с последующей ее настройкой. Все настройки моего любимого редактора Sublime Text 2 были потеряны безвозвратно.

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

Dev Build

Тут все просто. Первым делом стоит забыть про стабильную версию этого редактора и перейти на версию из dev канала. Изменения в этом канале появляются значительно чаще чем в стабильной версии, а значит и новый функционал можно посмотреть за пару недель до стабильного релиза. Для отчаянных экспериментаторов есть nightly build, который обновляется практически каждые несколько дней.

OS X Command Line

Не один редактор не может быть полноценным без cli. Для использования Sublime Text 2 из консоли на официальном сайте есть небольшая инструкция. У меня стоит Homebrew и поэтому не надо создавать лишнюю папку, а достаточно изменить симлинк путь ~/bin/subl на /usr/local/bin/subl полностью команда:

ln -s "/Applications/Sublime Text 2.app/Contents/SharedSupport/bin/subl" /usr/local/bin/subl

Теперь можно наслаждаться всеми прелестями cli, посмотреть список поддерживаемых команд можно набрав subl --help.

Replacement Icon

Для эстетов типа меня, которым не нравится стандартная иконка приложения, можно установить альтернативный вариант который мне приглянулся намного больше.

https://github.com/dmatarazzo/Sublime-Text-2-Icon

Заменить иконки можно вручную но после каждого обновления программы иконки будут слетать. Для автоматизации процесса замены в комплект с иконками входит скрипт ./mac_replace_icons, который мне не понравился. Я использую свою версию скрипта, который запускаю после каждого обновления.

#!/bin/bash

# The direction this script is running in
THIS_DIR="$( cd -P "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

cp "$THIS_DIR/Sublime Text 2.icns" "/Applications/Sublime Text 2.app/Contents/Resources/"
cp $THIS_DIR/Document\ Icons/*.icns "/Applications/Sublime Text 2.app/Contents/Resources/"

# Trickery to force icon replace
sudo find /private/var/folders/ -name com.apple.dock.iconcache -exec rm {} \; 2>/dev/null
killall -KILL Finder
killall -KILL Dock

Soda Theme

В дополнение к предыдущему пункту, я бы порекомендовал использовать альтернативную тему оформления окна - Soda Theme, она поставляется как в светлом так и в темном варианте. Все инструкции по установке можно найти в репозитории на Github.

https://github.com/buymeasoda/soda-theme

Plugins

Не хотелось бы подробно останавливаться на этом пункте, плагинов для этого редактора можно найти огромное количество и даже я не стал исключением и написал несколько.

Для установки большинства плагинов можно воспользоваться прекрасным плагином Sublime Package Control. Который позволяет автоматически устанавливать плагины и поддерживать их в актуальном состоянии.

Кроме того на Github можно обратить внимание на организацию Sublime Text Packages включающую в себя обширны список репозиториев с плагинами и сниппетами.

Spell check

По-умолчанию в редакторе присутствует поддержка англоязычной орфографии, а для добавления других языков можно воспользоваться соответствующей инструкцией. Если углубиться чуть более подробно, то Sublime не поддерживает словари в кодировках отличных от UTF-8, поэтому будем готовить свой словарь.

  1. Скачиваем словарь для русского языка c сайта OpenOffice
  2. Меняем расширение с .oxt на .zip и распаковываем полученный архив. Нас интересуют только 2 файла, для русского словаря это ru_RU.dic и ru_RU.aff
  3. В меню Sublime Text нажимаем Preferences → Browse Packages, создаем там папку Language - Russian и копируем файлы словарей в нее.
  4. Теперь словари необходимо сконвертировать в UTF-8. Открываем файл c расширением .aff и смотрим на первую строку, там будет что-то вроде SET KOI8-R. Значит словарь в кодировке KOI8-R, конвертируем любым удобным способом, я воспользовался утилитой iconv. После конвертирования необходимо открыть файл ru_RU.aff и заменить строку с кодировкой на SET UTF-8.
  5. Готовую UTF-8 версию русского словаря можно скачать по ссылке и просто установить.
  6. После всех этих манипуляций проверка русской орфографии появится соответствующим пунктов в меню View → Dictonary → Language - Russian.

Preferences.sublime-settings

Не секрет что Sublime Text 2 имеет много предустановленных настроек которые можно посмотреть в меню Preferences → Settings - Default, редактировать данный файл не рекомендуется в связи с тем что он будет перезаписан при следующем обновлении. Все свои настройки необходимо вынести в отдельный файл, Preferences → Settings - User. Напоследок я решил выложить свои настройки которые установлены у меня в этом файле.

{
    "tab_size": 4,
    "translate_tabs_to_spaces": true,
    "detect_indentation": false,
    "trim_trailing_white_space_on_save": true,
    "highlight_line": true,
    "ensure_newline_at_eof_on_save": true,
    "fallback_encoding": "Cyrillic (Windows 1251)",
    "highlight_modified_tabs": true,
    "open_files_in_new_window": false,
    "theme": "Soda Dark.sublime-theme"
}

Ребилд плеера AudioJS для Радио-Т

Некоторое время назад я делал форк плеера audio.js для проигрывания .gsm файлов. А теперь вот решил сделать еще один форк этого плеера но уже для сайта, популярного подкаста, Радио-Т.

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

audio.js Radio-T build

Скрипт уже работает на сайте подкаста Радио-Т, а исходный код и все инструкции по установке можно посмотреть и скачать на GitHub.

Отдача статики POST'ом в Nginx

Все знают о том что в Facebook’e есть iframe страницы, но не все знают что Facebook эти страницы запрашивает через POST, а не через GET, как делают все остальные. Поэтому все fb:iframe приложения запрашивая у Nginx’а страницы в ответ будут получать ошибку:

405 "Method Not Allowed"

Это легко игнорировать когда Nginx используется как прокси-сервер, но когда за ним ничего нет, то приходится извращаться и единственным решением оказалось проксирование запросов Nginx в Nginx но на другой порт. Сильно урезанный кусок конфига того как это можно реализовать для отдачи статического контента через POST.

upstream fb_static {
    server localhost:8001;
}

server {
    listen       443;
    server_name  _;

    error_page 405 =200 @405;

    location @405 {
        proxy_method GET;
        proxy_pass http://fb_static;
    }
}

server {
    listen 8001;
    server_name _;

    location / {
        root "/var/www/fb";
    }
}

После всех этих извращений страницы будут прекрасно отображаться в Facebook’е через fb:iframe. Но этот вариант то что называется overthinking, поэтому не без помощи Rpsl удалось найти намного более компактный вариант без необходимости проксирования запросов.

server {
    listen       443;
    server_name  _;

    error_page 405 = $uri;

    location / {
        root "/var/www/fb";
        try_files $uri $uri/index.html /404.html =404;
    }
}