Рубрики
MacOS

Избавляемся от надоедливого сообщения «Accept incoming network connections» для приложений в Mac OS X

Периодически, после частичного обновления приложениями самих себя, или изменений со стороны пользователя, например, изменение иконки, при запуске приложения, которое работает с сетью, Mac OS X начинает каждый раз спрашивать о разрешении на входящие соединения, при этом не запоминая наш выбор. Связано это с тем, что после любого частичного изменения приложения, сигнатура кода, хранящегося в подписанном приложении, начинает отличаться от реального. И это вызывает беспокойство у операционки 🙂 У меня такое возникает, например, когда IntelliJ IDEA частично обновляется. Для того, чтобы избавиться от этого диалога, есть несколько решений:

  • Удалить измененное приложение, скачать и установить заново подписанное приложение от поставщика.
  • Самому подписать измененное приложение, чтобы сигнатура соответствовала реальным файлам.

Если с первым вариантом все понятно. То вот как делается второй:

kostik@GrayWolf: ~> sudo codesign --force --sign - /Applications/MyUntrustedApplication.app/

Для подписи можно использовать какой-либо сертификат, или же, в простейшем случае, подписать конкретный экземпляр приложения, указав «-» после параметра —sign.

Рубрики
MacOS Разработка

Web-разработка с использованием nginx, php-fpm, node.js на Mac OS X.

nginxКак известно, в комплекте с Mac OS X идет веб-сервер apache и php. Но как быть, если мы хотим использовать node.js, да не просто как отдельный сервер, висящий на отдельном порту, а иметь возможность проксировать http-запросы как к нему, так и к php. Небольшая инструкция по замене штатного httpd/php-module на связку nginx+php-fpm+node.js ниже.

Рубрики
MacOS

Задвоенные приложения в меню «open with» в MacOS Finder

Всем привет!
Давно я что-то не писал в блог. Вот небольшая заметка для тех, у кого список приложений «Open with» в Finder содержит кучу хлама в виде кучи старых версий программ и/или вообще программы, которых на маке уже нет.
Лечится это одной магической командочкой в терминале. Вот она (обратные слеши в конце написаны просто для переноса строк, а так, командочка одна):

kostik@KOsTIK: ~> /System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/\
> LaunchServices.framework/Versions/A/Support/lsregister \
> -kill -r -domain local -domain system -domain user
ThrottleProcessIO: throttling disk i/o
Рубрики
MacOS Разработка

Git sugar for ur bash

Решил написать небольшую заметку о том, как сделать работу с git’ом из консоли немного удобнее и приятнее.
Хочу осветить 3 небольших момента:

  • Украшаем приглашение командной строки, чтобы сразу было видно в какой ветке находимся.
  • Автодополнение веток и тэгов при работе в консоли.
  • Настройка алиасов git.

Отображение текущей ветки в приглашении.

Не знаю, кому как, а я привык работать с git из консоли. Поэтому у меня всегда открыт шелл с директорией проекта. И порой забываешь, в какой ты сейчас ветке находишься, и надо писать git status, чтобы это увидеть. Крайне удобно было бы сразу видеть текущую ветку, да и вообще статус рабочей директории. Без проблем! Все что нужно, это немного подправить свой .bash_profile|.bashrc. Меняем приглашение шелла слендующим образом:

[11:47] cmd#:5003
kostik@KOsTIK: ~> vim .bash_profile

# Для начала определить некоторые цвета:
red='\033[0;31m'
RED='\033[1;31m'
blue='\033[0;34m'
BLUE='\033[1;34m'
cyan='\033[0;36m'
CYAN='\033[1;36m'
green='\033[0;32m'
GREEN='\033[1;32m'
yellow='\033[0;33m'
YELLOW='\033[1;33m'
purple='\033[0;35m'
PURPLE='\033[1;35m'
NC='\033[0m'              # No Color (нет цвета)



## Добавим неско полезных функций
# Статус репозитория
function git_dirty_flag() {
    fl=`git status 2>/dev/null | grep -c :`
    if [ $fl -gt 0 ]; then
        fl="\[${PURPLE}\]*"
        echo $fl
    fi
}

# Ветка
function parse_git_branch() {
    br=`git branch --no-color 2>/dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'`
    if [ "$br" != "" ];   then
        br="\[${RED}\] {\[${CYAN}\]$br\[${RED}\]}"
        echo $br
    fi
}


# Настроим само приглашение. Поскольку в приглашении используются функции, нельзя просто написать
# PS1="\[${GREEN}\][\[${CYAN}\]\A\[${GREEN}\]] cmd#:\[${PURPLE}\]\!\n\[${GREEN}\]\u\[${RED}\]@\[${green}\]\h\[${GREEN}\]: \[${PURPLE}\]\w$(parse_git_branch)$(git_dirty_flag)\[${GREEN}\]>\[${NC}\] "
# Оно не будет работать.
# Но это легко поправить если использовать в качестве приглашения функцию, которая автоматически будет вызываться каждый раз для отображения приглашения, а следовательно она же будет вычисляться и все будет хорошо. Поэтому делаем так:
function powerprompt()
{
   PS1="\[${GREEN}\][\[${CYAN}\]\A\[${GREEN}\]] cmd#:\[${PURPLE}\]\!\n\[${GREEN}\]\u\[${RED}\]@\[${green}\]\h\[${GREEN}\]: \[${PURPLE}\]\w$(parse_git_branch)$(git_dirty_flag)\[${GREEN}\]>\[${NC}\] "

}

# говорим, что наше приглашение - это то, что делает функция powerprompt
PROMPT_COMMAND=powerprompt

После этого надо или перезайти в консоль или просто применить новые изменения:

[11:47] cmd#:5003
kostik@KOsTIK: ~> . .bash_profile

Теперь наша консоль будет выглядеть вот так:

# Это приглашение в обычном каталоге
[11:57] cmd#:5004
kostik@KOsTIK: ~> 

# Это приглашение в папке с git репозиторием с чистым деревом
[11:58] cmd#:5164
kostik@KOsTIK: ~/Projects/VISION_Admin {dev}> git status
# On branch dev
nothing to commit (working directory clean)

# Это приглашение в папке с git репозиторием, где есть незакоммитенные данные
[12:00] cmd#:5166
kostik@KOsTIK: ~/Projects/VISION_Admin {dev}*> git st
# On branch dev
# Untracked files:
#   (use "git add ..." to include in what will be committed)
#
#     src/1.qwe
nothing added to commit but untracked files present (use "git add" to track)

Так как Syntax Highlighter все раскрасил по своему, то вот скриншотик как это выглядит на самом деле.

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

Автодополнение веток и тэгов.

Такс, текущую ветку в шелле мы уже видим. Но ведь довольно часто приходится переключаться на другие ветки или тэги. Было бы крайне удобно, если бы шелл подсказывал названия веток так же как и имена директорий и команд. В OS X токого по умолчанию нет. Бинарные пакеты с git’ом ставят только сам git. В Убунтах, кажется, автодополнение есть сразу. Но тем не менее, всем кому это актуально, вот как это легко сделать:

# Качаем вот этот файлик с гитхаба
[12:12] cmd#:5010
kostik@KOsTIK: ~> curl https://github.com/git/git/raw/master/contrib/completion/git-completion.bash -OL


# Прописываем следующую строчку в своем bash_profile
[12:13] cmd#:5011
kostik@KOsTIK: ~> vim .bash_profile

source ~/git-completion.bash

# Перезаходим в консоль или сразу применяем изменения
[12:14] cmd#:5012
kostik@KOsTIK: ~> . .bash_profile

Все. После этого по табу у вас будут дополнятся ветки и тэги, как локальные так и удаленные.

[12:12] cmd#:5170
kostik@KOsTIK: ~/Projects/VISION_Admin {dev}> git br -a
  cam-group_hardware_setting
* dev
  js-refac
  master
  position_camgroup
  processes
  remotes/origin/cam-group_hardware_setting
  remotes/origin/dev
  remotes/origin/ext_backup_upload
  remotes/origin/fix2032
  remotes/origin/js-refac
  remotes/origin/master
  remotes/origin/position_camgroup
  remotes/origin/processes
[12:17] cmd#:5171
kostik@KOsTIK: ~/Projects/VISION_Admin {dev}> git co
1.0.0a                              1.1.1                               cam-group_hardware_setting          js-refac                            origin/ext_backup_upload            origin/position_camgroup           
1.0.10                              FETCH_HEAD                          dev                                 master                              origin/fix2032                      origin/processes                   
1.0.7                               HEAD                                ext_backup_upload                   origin/cam-group_hardware_setting   origin/js-refac                     position_camgroup                  
1.1.0                               ORIG_HEAD                           fix2032                             origin/dev                          origin/master                       processes                          
[12:17] cmd#:5171
kostik@KOsTIK: ~/Projects/VISION_Admin {dev}> git co p
position_camgroup   processes           

Настройка алиасов.

Ну и последний маленький кусочек оптимизации работы с git — настройка алиасов. Программисты — вообще народ ленивый, собственно именно по этому они пишут программы, а не делают все руками 🙂 И мне вот каждый раз набирать git checkout или git commit очень длинно и лень. Благо в git есть замечательные алиасы. Добавляем в свой gitconfig алиасы на свой вкус. У меня например забиты вот такие:

[12:16] cmd#:5012
kostik@KOsTIK: ~> vim .gitconfig 
[alias]
····logp = log --pretty=format:\"%h — %an: %s\"
····remotes = remote -v
····co = checkout
····st = status
····ci = commit
····br = branch
····logpg = log --pretty=format:\"%h — %an: %s\" --graph
····logg = log --graph
    hist = log --pretty=format:\"%h %ad | %s%d [%an]\" --graph --date=short

После этого достаточно написать в консоли git logpg и гит превратит это в git log —pretty=format:\»%h — %an: %s\» —graph

Ну вот и все. Если кому интересно, вот мой bash_profile на гитхабе.

Рубрики
MacOS

Выполнение произвольного скрипта при старте системы Mac OS X

Всем привет! У меня на работе давно есть потребность в статических маршрутах, отличных от маршрута по умолчанию. Но писать каждый раз в консоли sudo route add 10.1.1.1/24 192.168.24.222 после входа как-то напрягает, да и просто банально лень делать это каждый раз. В данном случае, прописывание маршрута — это частная задача. В общем случае это сводится к выполнению произвольного скрипта. Однако есть решение, пусть и не очень простое, но все-таки!

Рубрики
MacOS

Сборка PHP 5.3.x под MacOS X 10.6 с поддержкой iconv

Тот, кто заходил/читал мой блог раньше, скажет: «Кажется, я уже это видел». И будет прав. Давным давно я уже писал пост о том, как скомпилить php на MacOS X с поддержкой oracle, iconv и прочих библиотек. Но время идет, уже давно вышли новые версии и php и macosx, а проблема все остается нерешенной, правда пути ее решения несколько изменились.
Не буду рассказывать как включить поддержку Oracle в php, про это вы можете прочитать в моем старом посте:
Настройка Apache+PHP+MsSQL+Oracle на Mac OS X Leopard
, лучше расскажу как решить эту надоевшую уже проблему сборки php 5.3.[5678] с поддержкой iconv.

Рубрики
MacOS Администрирование Разработка

Makefile – missing separator. Stop.

После очередного апдейта безопасности MacOS X у меня в очередной раз слетел пых с ораклом. Во время шаманств при сборке пыха из сырцов, дабы скомпилить его с поддержкой iconv & oci8 столкнулся с вот такой проблемой:

kostik@KOsTIK: ~/Sources/php-5.3.8> make
Makefile:148: *** missing separator.  Stop.

Возникло это после ручной правки Makefile. Чего в обычной жизни делать не требуется. Но при сборке php под mac os x это неотъемлемый шаг. Если вы столкнулись с такой же проблемой, то знайте, что лечится она очень просто — надо использовать табы вместо пробелов там где требуются отступы. Так что просто внимательно следите за тем, что меняете. Меняйте только сами команды, а не отступы.

Рубрики
MacOS

Включаем GrowlMail после апдейта 10.6.4 -> 10.6.5

Всем салют!
Все маководы наверняка знают и используют такую замечательную вещь как Growl (это сервис нотификации обо всем и вся). У него есть замечательный плагин GrowlMail, который позволяет Mail.app отправлять в Growl уведомления о новых письмах. Я его использую, и мне нравится. НО. С этим плагином есть одна маленькая проблемка: каждый раз после апдейта Mail.app, которое происходит почти каждый раз при апдейте системы, Mail при запуске ругается на то, что этот плагин не совместим с этой версией Mail и отключает его. Собственно именно по этой причине разработчики Growl исключили этот плагин из поставки Growl и выделили его в отдельный проект. И вот, всем пользователям, каждый раз при апдейте системы, приходится ждать пока какой-нибудь хороший человек сделает новую сборку плагина. Но в этот раз, что-то никто не торопится обновлять плагин, а без него как-то грустно.
Но решение есть! И довольно-таки простое.

Рубрики
MacOS

Корректное завершение GUI приложений MacOS X из командной строки

Вот как вы думаете можно завершить GUI-приложение, запущенное на удаленном компе, имея лишь доступ по ssh?
Первый и самый очевидный ответ: kill наше_приложение. Это конечно замечательно, но что если есть важные данные?
Оказывается можно воспользоваться вот такой утилиткой под названием osascript.
osascript — выполняет AppleScripts и другие OSA-совместимые скриптовые языки.

Рубрики
MacOS

Обзор редакторов ID3 тэгов в Mac OS X

В продолжении темы про приведение фонотеки iTunes в порядок, хотелось бы осветить еще несколько утилит для работы с вашей музыкальной медиатекой.
В приведенной выше статье, хабраюзер написал про SongGenie & CoverScout 3, а так же упомянул утилиту MPFreaker.
У каждой из этих программ есть свои возможности, предназначение, а так же как плюсы так и минусы. Опять-таки все эти программы платные.
Что же еще есть достойного внимания для редактирования тэгов mp3-файлов.