«Эль-Капитан»

Никогда в жизни не ставил бета-версию «МакОСи», но пришлось. Я уже писал в твитере, что «Йосемити», текущая версия — худшее, что случалось с «Маками». Тормоза и глюки — это я понимаю, но пять минорных версий подряд не мочь исправить проблему с вай-фаем — это неимоверные перебор. Последнее обновление только ухудшило ситуацию — домашняя сеть 5 ГГц отваливается минут через 10, приходится переключаться на 2,4.

В общем, поставил себе третью бету «Эль-Капитана», пока полёт нормальный. Тормоза ушли, глюков не видно, с вай-фаем если всё и не идеально, то уж точно стало гораздо лучше. Если у кого-то схожие проблемы, крайне рекомендую перейти на бету.
13 комментариев
1 августа 2015 12:45

Tcl/tk и Retina

О, оказывается, можно «ретинизировать» интерпретатор Тикля — сделать так, чтобы программы на этом языке хорошо смотрелись на маковской ретине (см. скриншот). Ретинизированный Тикль (24.29КиБ) Для этого нужно скачать программу Retinizer и бросить в неё Wish.app, который находится в /System/Library/Frameworks/Tk.framework/Versions/Current/Resources/
Комментировать
23 июня 2015 20:38

Говорящие часы

Часы (53.96КиБ) Вот очень правильная настройка есть в «Маке» (немногие её включают, а зря!) — компьютер может произносить текущее время каждый час, полчаса или четверть часа. Пользуюсь ей давно, помогает быть продуктивнее в работе.

Во-первых, помогает ориентироваться в собственной скорости (уже 11 часов, а я так мало сделал!), во-вторых, позволяет выйти из состояния «залипания» — когда мысли распозлись, взгляд расфокусировался.

По кнопке «Настроить голос…» открывается меню, в котором можно выбрать русский голос, если это требуется.

Если у вас «Мак», рекомендую включить эту настройку!
8 комментариев
5 февраля 2015 11:08

Русские имена на «Маке» после разархивации ZIP

Я вчера скачал несколько десятков зип-архивов, внутри которых тысячи файлов с русскими именами. Скачивал через браузер «Сафари» и этот поганец, как у него водится, услужливо мне их распаковал после скачивания. У меня время от времени вылетает из головы эта особенность, в общем, я получил кучу папок и файлов, которые выглядят вот так: Кракозябры (17.71КиБ) Эта давнишняя проблема «Мака», проистекающая из родовой травмы зип-архивов — этот архиватор родился ещё во времена ДОСа и для совместимости сохраняет русские имена ещё в той, ДОСовской кодировке. Правда, лет 15 назад я ковырял формат и увидел, что в каких-то метаданных лежит оригинальное имя, но должно быть «Мак» про это поле ничего не знает.

Как бы там ни было, в конце индикатора прогресса я увидел кучу файлов с нечитаемыми именами. Ничего готового я быстро не нашёл, поэтому сварганил небольшой скрипт на «баше», который восстанавливает русские имена разархивированного зип-архива.

Способ употребления такой: складываете всё испорченное в какую-либо папку и запускаете внутри fixzip. В процессе «ремонта» он будет показывать на экране восстановленные имена. Два раза запускать нельзя — имена снова будут испорчены.
12 комментариев
6 ноября 2014 09:45

Как ускорить Yosemite

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

Я почитал в сети советы бывалых по ускорению её работы, кое-что применил сам, делюсь.

Во-первых, надо отключить полупрозрачность. Это даёт существенный прирост к отзывчивости системы, особенно при работе с двумя мониторами. Отключается она в системных настройках → «Универсальный доступ» → «Уменьшить прозрачность». Уменьшить прозрачность (62.29КиБ) Во-вторых, рекомендуют отключить экран виджетов. Говорят, на него тратится порядочно ресурсов системы. Опять «Системные настройки» → «Mission Control» → в списке «Dashboard» надо выбрать «Выкл.». Dashboard (92.69КиБ) В-третьих, и это частый совет в таких ситуациях, нужно сбросить данные System Management Controller (SMC). Для этого нужно выключить ноутбук, зажать на десять секунд клавиши левого «шифта», «альт», «контрол» и кнопку питания, после чего включить ноут обратно.

В-четвертых, так же нужно сбросить PRAM. Для этого, опять же, нужно выключить ноутбук, включить его и зажать «комманд», «альт» и клавиши «P» и «R» до тех пор, пока не загрузится операционная система.
29 комментариев
23 октября 2014 08:45

Уходим с телефоном, «МакБук» выключается

Причина, по которой я засел за Пайтон и стал изучать как из него работать с Bluetooth в том, что мне очень хотелось сделать следующую вещь: как только я покидаю рабочее место, мой ноутбук блокируется.

Идея выглядела просто: надо посмотреть присутствует ли в эфире мой смартфон, если нету, значит я куда-то ушёл (я без смартфона не хожу). Я сначала это на «Баше» сделал и всё даже работало, но случилось неожиданное: Mac OS время от времени стала падать с серым экраном смерти. Тогда я взял в руки Пайтон. Я даже запрограммировал сканирование эфира, но выяснилась неприятная штука — через какое-то время моя «Нокия» автоматически выключала видимость устройства и никакими уговорами не удалось убедить её этого не делать. Пришлось делать проверку соединением со смартфоном (не знаю как это сажает батарею, не успел ещё проверить).

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

Шаг №1.

Нужно узнать так называемый «адрес» вашего устройства и привязать его к компьютеру. Тут ничего сложного нет, заходим в настройки «Блютуз» на «Маке» (они находятся в «Системных настройках»), привязываем его как обычно и переписываем себе 12 букв, разделённых минусами, это и есть адрес: Настройки Bluetooth (80.68КиБ)

Шаг №2.

С этого шага потребуется уметь пользоваться терминалом. Создаём запускаемый файл /usr/local/bin/bt-lock следующего содержания:
#!/usr/bin/python

import objc
import sys
from subprocess import call

objc.loadBundle('IOBluetooth', globals(), bundle_path=u'/System/Library/Frameworks/IOBluetooth.framework')

def CheckDevice(address):
    dev = IOBluetoothDevice.withAddressString_(address)

    if dev.isConnected():
        return True

    conn = dev.openConnection()

    if conn == -536870185: # Bluetooth is off
        return True

    if conn == 0:
        dev.closeConnection()
        return True

    return False


cmdtorun=(r'/System/Library/CoreServices/Menu Extras/User.menu/Contents/Resources/CGSession', r'-suspend')

try:
    if not CheckDevice(sys.argv[1]):
        call(cmdtorun)
except IndexError:
    print("Usage: bt-lock <device address>")
В скобках замечу, чтобы сделать файл запускаемым нужно в терминале выполнить следующую команду: chmod a+x /usr/local/bin/bt-lock.

Шаг 3.

Создаём файл ~/Library/LaunchAgents/ru.bolknote.Bluetooth-lock.crontab.plist с таким вот содержимым:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>ru.bolknote.Bluetooth-lock.crontab</string>

  <key>Program</key>
  <string>/usr/local/bin/bt-lock</string>

  <key>ProgramArguments</key>
  <array>
    <string>/usr/local/bin/bt-lock</string>
    <string>а̲д̲р̲е̲с̲ ̲в̲а̲ш̲е̲г̲о̲ ̲у̲с̲т̲р̲о̲й̲с̲т̲в̲а̲</string>
  </array>

  <key>Nice</key>
  <integer>20</integer>

  <key>StartInterval</key>
  <integer>30</integer>

  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>
И выполняем в терминале команду «launchctl load ru.bolknote.Bluetooth-lock.crontab.plist». Это всё.

Чтобы отключить всю эту марахайку, достаточно выполнить в терминале команду «launchctl unload ru.bolknote.Bluetooth-lock.crontab.plist» или выключить Bluetooth на ноуте.

Решение только для «Мака», как работать из Пайтона с Блютузом под другие операционные системы, я не знаю.
20 комментариев
16 марта 2013 20:20

Превращение маковской флешки в полноценную

Как, наверное, многие знают, при покупке ноута «МакБук», в коробке лежит не компакт-диск (как это бывает с ноутами других фирм), а флешка, на которую записана операционная система (в комментариях читатели подсказали, что сейчас уже флешку не кладут). Флешка очень симпатичная, но, к сожалению, использовать её для своих нужд не получается — при подсоединению к компьютеру она монтируется как виртуальный сидиром и записать на неё ничего не получается. Флешка для Мака (78.10КиБ) Оказывается, есть способ превратить её в полноценную, перезаписываемую флешку! Для этого, правда, понадобится компьютер с Виндой или хотя бы виртуальная машина. В моём случае это был старенький ноут с нужной операционкой. Винда вам нужна, чтобы запустить утилиту sm32Xtest, которая и вразумит ваш «сидиром».

После запуска, если утилита не нашла вставленную флешку, нужно нажать «F5», в этом случае, произойдёт скан всех ЮСБи-устройств и в одной из строчек появится надпись «Ready», у меня это оказался порт №1, как видно на скриншоте: Утилита нашла флешку (37.50КиБ) Если эта операция выполнилась успешно, надо нажать клавишу пробела и дождаться выполнения всех оставшихся операций. Если всё прошло хорошо, в строке статус сменится на «Pass», а справа появится большая надпись «OK»: Всё прошло хорошо (45.09КиБ) После этого можно флешку извлекать (не забудьте извлечь её безопасно). У меня получилась флешка в 8ГБ: Новоиспечённая флешка (76.29КиБ)
11 комментариев
8 марта 2013 22:05

Как очистить контексное меню «Открыть с помощью…» в «Маке»

На «Макрадаре» появилась статья о том как очистить контекстное меню «Открыть с помощью…» на «Маке». Для меня загадка почему это так, но после установки программ и обновления их версий в нём остаются дубли. Например, у меня там несколько «Опер», парочка «Икс Кодов» и так далее.

Чтобы избавиться от дублей, нужно запустить в «Терминале» следующую команду:
/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister \
-kill -r -domain l -domain s -domain u
Она не делает ничего опасного, лишь чистит это меню (опция «kill»), потом рекурсивно («r») проходится по локально установленным программам («domain l»), программам системы («domain s») и программам, установленным только для текущего пользователя («domain u»), и добавляет нужные из них в контекстное меню.
4 комментария
21 сентября 2012 08:39

Удаляем расладку «U.S. English» из «Мака»

Артём Поликарпов написал рецепт как можно удалить из «Мака» раскладку «U.S. English». Она очень мешается и совершенно не нужна, если поставить великолепную раскладку Ильи Бирмана (кстати, если вы почему-то ей не пользуетесь, то вы делаете большую ошибку).

Но рецепт Артёма мне не нравится тем, что для его выполнения приходится иметь у себя редактор Xcode, который ещё и несколько гигабайт весит. Поэтому я, как водится, написал скрипт, который нужно выполнить из «Терминала» (после его выполнения придётся опять залогиниться в систему) и ненужной раскладки уже не будет. Ничего ненужного (12.87КиБ) Какое счастье!

Проще всего скрипт запускать из «Терминала» вот так:
bash  <(curl -fsSkL raw.github.com/bolknote/shellgames/master/us_layout_remover.sh)
Чтобы вернуть всё обратно достаточно запустить программу ещё раз.

Добавлено позднее: удалению раскладки может мешать Punto Switcher.
57 комментариев
24 августа 2012 22:48

Проблема с wifi-иконкой в «Montain Lion»

Верхнее меню «Макоси» (6.17КиБ) У меня с апгрейдом системы до «Горного Льва» возникла нестрашная, но раздражающая проблемка — несмотря на то, что соединение с вайфайем есть и сайты открываются, «Мак» утверждал, что подключение к интернету отсутствует и показывал иконку вайфая в верхнем меню с восклицательным знаком.

Меня это раздражало, потом и на ноуте жены возникла та же проблема. Поискал в интернете, все спрашивают совета, но никто не предлагает решение.

Решение нашёл случайно — надо удалить все лишние сетевые устройства (кнопкой с минусом в «Настройках сети»), у меня там была целая куча «свистков» МТС, «Мегафона» и «Билайна», у жены — то же.

Удалил устройства, восклицательный знак в иконке вайфая пропал. Потом устройства можно добавить обратно, это уже ни на что не влияет.
6 комментариев
31 июля 2012 15:19

Настройка «Сообщений» в «Горном Льве» на работу с «аськой»

В «Горном Льве» («Montain Lion» — это новая версия «Макоси», которая появилась сегодня) есть новая программа — «Сообщения» (Messages), это встроенный в операционную систему интернет-пейджер с поддержкой протоколов AIM, Джаббер, «Гугл Толк» и «Яху!».

ICQ в списке нет, но тем не менее, настроить «Сообщения» для работы с этим протоколом можно — в «аське» используется тот же протокол, что и в AIM — «Оскар», надо только поменять данные сервера, с которым надо соединяться и убрать галочку «Использовать SSL»:

ICQ в Messages (48.71КиБ)

Чтобы отключить HTML, который «Сообщения» отсылают по аське, нужно выполнить следующую последовательность действий:
# 1) в «Терминале» выполняем:
defaults read com.apple.iChat.AIM | sed "s/\(ForceICQPlainText\).*/\1 = 1;/" | xargs -0 defaults write com.apple.iChat.AIM
chflags uchg ~/Library/Preferences/com.apple.iChat.AIM.plist

# 2) !перезагружаемся!

# 3) в «Терминале» пишем:
chflags nouchg ~/Library/Preferences/com.apple.iChat.AIM.plist
17 комментариев
25 июля 2012 20:08

Интерактивная игра на bash: «Арканоид»

После шахмат, где я решал проблему опроса клавиатуры, мне захотелось попробовать сделать что-то ещё более интерактивное. В шахматах нет никаких фоновых процессов, единственное действующее лицо в игре — сам человек. Хотелось сделать что-то, где в фоне к опросу клавиатуры происходит ещё что-то. Проблема в том, что bash поддерживает только блокирующий вводу.

Забегая вперёд, скажу, что проблему решить вполне удалось. Я разделил игру на два процесса, один из которых опрашивает клавиатуру и сообщает о нажатии второму при помощи сигналов — USR1, USR2 и HUP, как раз три сигнала по трём управляющим клавишам — „←“, „→“ и «пробел». Последняя нужна, чтобы пускать шарик.

Решил сделать «Арканоид», не совсем классическую версию (на неё мне ещё бы пара вечеров потребовалась), но близкую. В игре есть три типа блоков разных цветов — вишнёвый разбивается сразу, синий при первом ударе превращается в вишнёвый, а от зелёного (самое интересное!) при ударе иногда отваливается часть, поймав которую, можно получить приятный бонус — более широкую ракетку, дополнительную жизнь или липкость. Последнее означает, что шарик в этом режиме не отскакивает от ракетки, а прилипает.

Арканоид (49.62КиБ)

Ещё одна фишка игры — звуковое оформление, которое нечасто услышишь в консоли, я думаю. Правда, только для «Мака» (сделано командой «say», я заставляю её проговаривать буквы с большой скоростью), знаю, что для Линукса тоже есть команды для синтезатора речи («espeak», например), но мне негде их попробовать.

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

От терминала, как и в шахматах, требуется уметь отображать 256 цветов и хорошая поддержка «Юникода». Нигде, кроме как под «Мак» игру я не тестировал, по-прежнему рекомендую iTerm2 в качестве терминала. Более полусотни строк кода и небольшое видео.
13 комментариев
18 сентября 2011 20:31

Сетевая игра на bash: шахматы

Я давно хотел написать какую-нибудь сетевую игру на bash, причём желательно, чтобы управление было удобное, с клавиатуры, обычными курсорным клавишами. Вообще, тема интерактивного взаимодействия в bash глубже, чем «введите число, нажмите „Enter“» не раскопана. Мне пришлось всё изобретать и исследовать самостоятельно. Я очень старался найти что-то похожее по уровню интерактивности, но не нашёл.

Поскольку тонкости управления с клавиатурой съели очень много моего времени, я не стал заморачиваться с тонкостями совместимости, поэтому игра тестировалась только под Mac OS X, есть ненулевая вероятность, что она заработает и под Linux и уж точно её можно допилить там до рабочего состояния.

Для работы игра требует наличия nc (aka Netcat) и терминала с поддержкой 256 цветов (под Mac OS рекомендую iTerm2). При наличие интереса к игре, допилю до терминала на 16 цветов и /dev/tcp. Кстати начал выкладывать все свои шел-поделки на ГитХаб.

Шахматы (17.46КиБ)

Эта игра запускается посложнее, так как сетевая, у неё два параметра, о которых она расскажет, если её запустить без них. Первый — адрес машины противника, второй — порт. Порт выбирается одинаковым на обеих машинах. Игру можно запустить и на одной машине, в двух консолях (на скриншоте как раз такой случай).

Играть просто — в каждый момент времени активна только одна доска (на скриншоте — правая, у неё буквы и цифры вокруг доски ярче), на активной доске курсор двигается курсорными клавишами — ←, →, ↑ и ↓, взять фигуру и поставить её на доску — по клавише пробела или Enter. Как только вы поставили фигуру на доску, ход переходит к сопернику. «Съесть» фигуру соперника проще простого — достаточно поставить свою фигуру на чужую. В игре есть защита — нельзя «съесть» свою фигуру.

Ничего помимо этого в игре нет — не производится правильность контроля ходов, нет проверки на завершение игры, можно даже ходить фигурами соперника. Было очень сложно придумать как обрабатывать нажатия в shell, так что остальное сделать я просто не успел, не поместилось в формат «игрушка за вечер». Исходники внутри.
21 комментарий
15 сентября 2011 17:36

Bashnut Battery

Есть такая программа — coconutBattery, красиво показывает под MacOS X состояние батареи и некоторые другие характеристики. Поскольку я тут тренируюсь писать под Bash, решил сегодня повторить её функционал. Полностью не получилось, так как новая версия MacOS X выдаёт что-то странное в параметре потребляемой мощности, но остальное повторил в точности. С параметром «Age of your Mac» я смухлевал, беру данные с онлайн-сервиса (без подключения к интернету этот параметр будет выдавать NA), но зато я эти данные кеширую на сутки. Bashnut Battery (17.12КиБ) В этом скрипте я разучил несколько новых фокусов, рад что сел за эту задачу. И ещё новинка — я теперь проверяю тип терминала, если он содержит «256» (поддерживаются 256 цветов), то цвета берутся из расширенной палитры. Сам код — далее.
7 комментариев
14 сентября 2011 20:06

Занятость каналов WiFi

Утилита, чтобы посмотреть занятость каналов (11.09КиБ) Что делать перед днём программиста как не программировать? Я настраивал точку доступа дома и пытался выбрать более свободный канал. Быстро найти подходящую утилиту под Mac OS X я не смог, поэтому начал её писать на bash. До конца не дописал (хотел ещё обозначить сколько устройств на одном канале висит), то что есть выкладываю — не пропадать же добру! Дальше.
21 комментарий
13 сентября 2011 06:52