Профессионально я перестал занимался программированием лет десять назад (писал системы на разных языках, но предпочитал C и C++, как под DOS, так и под Windows), перейдя в область сетевого/системного администрирования. Конечно же, я продолжал писать, но уже на скриптовых языках Shell, Perl, немного TCL и Python.

Год назад во время общения с разработчиком Blogo мне снова захотелось “вернуться в семью”, и я начал присматриваться к программированию под Mac OS X. Ничего тогда толком не написал, но немного в Objective-C разобрался. Язык мне очень понравился, даже несмотря на лёгкое презрение к нему хардкорных программистов.

Потом у меня появилась идея нескольких приложений под iPhone и тут программирование более плотно вошло в мою жизнь. По основному роду деятельности у меня достаточно серьёзная занятость, поэтому приходится урывать для программирования время вечерами. Но хватит самооправданий – расскажу о тех книгах, по которым я учился и с которыми продолжаю работать (спасибо Артёму, который глядя на скриншоты программ чтения pdf под iPad задал мне вопрос о том, какие книги по программированию я бы мог порекомендовать).

(more…)

Tagged with:  

Меня в последнее время унесло в дебри, более близкие разработчикам и системным администраторам, чем обычным пользователям Mac’ов. Что поделаешь – что делаю, о том и пою. Буду стараться разбавить эту тематику материалами, интересными широкому кругу людей, но пока продолжу углубляться.

Я в процессе работы делаю заметки и готовлю фрагменты конфигураций, записывая их в текстовые файлы вида 20100527.txt – один файл на каждый день. Удобно то, что при необходимости можно посмотреть, что и как именно я делал. Увеличение продуктивности налицо, так как мне не приходится делать множество вещей с нуля.

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

(more…)

Tagged with:  

Представим ситуацию – есть сервер, соединение с которым должно быть всегда активным, даже если в shell нет никакой активности. Или же должен постоянно работать туннель ssh. Обычный ssh при разрыве соединения не производит его переустановку (разве что можно посылать alive-пакеты, но это действует для активных сессий: ssh -o ServerAliveInterval=10 host.com).

Вот, например, такую картину я вижу постоянно при соединении со своим сервером, когда сессия неактивна долгое время:

$ ssh host.com
Linux host.com 2.6.32.12-linode25 #1 SMP Wed Apr 28 19:25:11 UTC 2010 i686

20:51 [ctrld@host][~]
17:14 [ctrld@host][~] Write failed: Broken pipe

Через какое-то время я получаю “Write failed: Broken pipe”. В данном случае переподключиться вручную просто, но всегда найдётся ситуация, когда это сделать гораздо труднее.

(more…)

Tagged with:  

Git – это распределённая система контроля версий (Version Control System или же VCS). На первый взгляд может показаться, что её можно использовать только в применении к программированию, но это не совсем так.

Да, заниматься программированием без какой-либо системы VCS – это признак низкой квалификации. Можно провести аналогию между таким программистом и системным администратором, не делающим резервные копии своих серверов. Оба имеют работу только до первой потери данных.

Но применение VCS вообще и Git в частности гораздо шире, чем область программирования. Если что-то требует слежения за версионностью, то потенциально к нему можно использовать VCS. В качестве примера могу привести систему etckeeper, которая хранит в VCS (git, bazaar, mercurial, etc) изменения в конфигурационных файлах /etc.

При применении VCS нужно использовать здравый смысл – желательно не хранить в VCS часто изменяемые большие бинарные данные вроде видео.

(more…)

Tagged with:  

Установка MongoDB

MongoDBNoSQL… Для решения одной задачи я решил попробовать нереляционную базу данных. В production система будет работать на Debian, но для разработки и тестирования мне она нужна на ноутбуке. Сказано – сделано.

Для установки подобного софта я использую HomeBrew.

(more…)

Tagged with:  

Предположим, из консоли нужно скопировать какой-то текст, находящийся в файле, допустим, публичный ключ id_rsa.pub (да, это для GitHub). Путь “в лоб” прост:

$ cat ~/.ssh/id_rsa.pub

Затем выделение текста мышью, “⌘+C”. И вставка куда нужно.

Но есть правильный метод – использование команды pbcopy для копирования (есть также команда pbpaste):

$ cat ~/.ssh/id_rsa.pub | pbcopy

А затем – вставка скопированного содержимого файла куда нужно. И не нужно судорожно дёргать мышью для копирования содержимого большого файла.

Tagged with:  

Установка Git под Mac OS X

Git. Распределённая система контроля версий. Была создана Линусом Торвальдсом для работы над ядром Linux. Следствие – широкое распространение в узких кругах, мощь и сложность.

Установить Git можно из портов MacPorts или Fink. Но этот метод чем дальше, тем меньше мне нравится – за нужным пакетом тянется длинный хвост зависимостей, часть из которых может заменять (в плане очерёдности в $PATH) штатные программы. Когда я вижу попытку установки perl5.8 при том, что в Mac OS X 10.6.2 уже и так стоит perl5.10, на меня нападает странное чувство, вынуждающее прервать установку. Или вспомним недавнюю загадку Кирилла Воронина про rsync, когда проблема с копированием данных была вызвана тем, что вместо штатного rsync вызывался rsync из портов без поддержки resource forks.

Поэтому я отбросил мысль о MacPorts и начал искать альтернативу. Нашёл проект “Git for OS X” на Google Code.

Если вам нужен Git, то дальнейшие объяснения излишни, расписывать, что выбирать при запуске инсталлятора смысла нет. Я поставил версию git-1.7.0-intel-leopard.dmg. Git ставится в /usr/local/git. После установки запустил скрипт “setup git PATH for non-terminal programs.sh”, находящийся в dmg, который добавляет переменную окружения $PATH с путём к git в файл ~/.MacOSX/environment.plist для корректной работы неконсольных программ.

(more…)

Tagged with:  

Я предпочитаю все рецепты проверять на своих системах, но для сайта The Apple Blog делаю исключение – настолько подробных и понятных инструкций я мало где встречаю.

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

Сейчас более популярны распределённые системы контроля версий, например, Git или Mercurial, но мне привычен Subversion. В Mac OS X 10.6 SVN входит штатно (в 10.6.2 – версия 1.6.5). Детальная инструкция по установке приводится в статье на The Apple Blog “How-To: Setup a SVN Server Under OS X 10.6“. Именно настройкой SVN я буду заниматься завтра.

Планы намечены, теперь нужно им следовать.

Tagged with:  
© 2010 The Apple Geek