Arm1.ru

Как обновить хакинтош с OS X Mavericks до Yosemite

Как обновить хакинтош с OS X Mavericks до Yosemite

Недавно наконец сделал обновление с OS X 10.9 до 10.10 своего рабочего хакинтоша. Потратил много времени. Опишу, как это сделал и с какими проблемами столкнулся.

Читать далее...

comment comments

Заметка про HTTPS и приложения для ВК

Однажды почуяв, что сайт может открываться по https, браузеры (по крайней мере, Firefox и Chrome) уже не хотят открывать его по https. Например, ВКонтакте. А раз сайт открывается через https, то некоторые ресурсы страницы могут всё ещё подгружаться по http, но только не Javascript-скрипты. Они блокируются и должны загружаться только по https.

Сегодня делал простенькое iframe-приложение для ВК. По сути у меня слегка оформленнся php-страница, в которую я просто ставил php-код системы бронирования и покупки билетов. Вставив в приложении в ВК адрес, обнаружил, что ВК у меня работает через HTTPS и страница моя тоже пытается по нему же загрузиться. А т.к. сервер мой https не поддерживает, пришлось настраивать.

Сертификат я получил через StartSSL бесплатно. Настроил всё, всё заработало (теперь мой бложек можно открывать и так: https://arm1.ru отключил, оставил только http пока, т.к. все комменты от Disqus и лайки соцсетей слетели :) да и нет нужды мне в https на этом домене), аллилуйя, скрипт стал грузиться. Только вот PHP-код системы билетов возвращает по сути свой HTML, в котором подгружается по http разный js-код. А так как он блокируется, ничего опять не работает :) Адская, конечно, связка получается. ВК -> iframe -> мой сервер -> сервер билетов. Теперь жду, пока они у себя на сервере https настроят и по нему будут весь js-код отдавать.

Но пара полезных уроков извлечена.

  1. По возможности внешний js-код подгружать не "http://site.com/code.js", а "//site.com/code.js". // - говорит о том, чтобы использовать текущий протокол соединения. Проверка возлагается на плечи браузера и не нужно самому в коде проверять протокол.
  2. Экспириенс по поднятию и настройке https на своём сервере. 2 инструкции, чтобы не потерялись:
    1. Получаем бесплатный SSL сертификат (через StartSSL).
    2. Настраиваем HTTPS-сервер на nginx.

Теперь главное не забыть, что через год SSL сертификат надо будет продлить.

comment comments

Расширение для Safari для Funkysouls.com

Расширение для Safari для Funkysouls.com

Я периодически захожу на Funkysouls в поисках новой музыки. Пролистываю несколько первых страниц, смотрю по тэгам - может ли мне это быть интересно, после чего копирую название исполнителя, иду в ВК или на Яндекс.Музыку, вставляю и слушаю там пару трэков. Если мне нравится - тогда только пробую заиметь альбом.

Надоело мне копипастить и я написал расширение для Safari (давно хотел освоить).

Расширение делает всего 2 вещи:

  1. Когда заходишь на Funkysouls - у каждого релиза добавляется 2 кнопки Play, как видно на скрине. Красная ведёт на поиск по исполнителю на Яндекс.Музыку, синяя ведёт на поиск по исполнителю в ВК. Не надо больше копипастить. 2 клика - и ты слушаешь.
  2. Разошёлся слегка, пока писал, и добавил панельку в браузер. Расширение дёргает раз в 5 минут RSS сайта и выводит на панельке 3 последних релиза. Можно отслеживать их не заходя на сайт, например. Естественно, если нажать на название релиза на панельке, откроется новая вкладка с его страницей на фанках.

При желании, можно взять код расширения из end.js и button.css, вставить его в Chrome в расширение Control Freak, например, и получить те же 2 кнопки Play в Chrome. В Firefox, думаю, тоже, через Greasemonkey.

Исходники на GitHub.

Установить расширение.

comment comments

HTML5 видео как фон страницы

HTML5 видео как фон страницы

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

Читать далее...

comment comments

Выход за пределы песочницы в iOS

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

Как известно, все приложения в iOS работают внутри песочницы, за пределы которой они выходить не могут. Все приложения из App Store устанавливаются в /var/mobile/Applications/ (приложения, которые ставятся в iPhone из Xcode - туда же), где для них создаётся отдельная папка с нечитаемым именем. Выходить за пределы этой папки нельзя. Ни для чтения, ни, тем более, для записи.

Выход за пределы песочницы в iOS
Это, например, папка гугловой игры Ingress.

Выход за пределы песочницы в iOS
А это айосный калькулятор, например, лежащий в /Applications.

Если мы хотим, например, прочитать в приложении SMS-сообщения телефона, то нам нужно прочитать файл /var/mobile/Library/SMS/sms.db - это обычная SQLite база данных, без шифрования и защиты. Её можно скачать с джейлбрейкнутого телефона и открыть любой тулзой, которая умеет открывать SQLite-файлы, и посмотреть все SMS-ки и даже фигачить по ней sql-запросы для поиска и прочего.

Выход за пределы песочницы в iOS
Тут, например, лежит файл со всеми смс-ками iPhone.

Так вот, доступа к этому файлу из песочницы нет. И Jailbreak от этого не спасает, он даёт полный доступ к файловой системе, но только если ты работаешь вне песочницы.

Чтобы приложение работало вне песочницы - его нужно переместить из /var/mobile/Applications/ в директорию /Applications. Тогда приложение будет в папке системных программ, будет иметь доступ на брейкнутом девайсе к файловой системе, не будет удаляться из телефона удержанием пальца на иконке и всё такое.

И вот боль тут в том, Xcode ну никак не может установить приложение туда, только в песочницу. Можно делать это руками - заходить в телефон, перемещать через какой-нибудь iFunBox, и вот такой вот геморрой каждый раз. И самая боль в том, что ты теряешь удобство отладки. Нельзя запустить в Xcode апп на девайсе и спокойно смотреть в консольку - что же там приложение твоё пишет - работает или нет?

Никакие твики из Cydia, типа дающие для приложений доступ к файловой системе даже для приложений из песочницы, не дали эффекта. По крайней мере, у меня на iOS 7.1.2. Говорят, что даже если запустить приложение от root'а, но всё равно в песочнице - и это не даст прав на чтение системных директорий. Хотя, такое ощущение, что раньше такое работало, но и джейлбрейки были другие.

Такой вот ад. В ближайшее время буду пробовать найденные в инете скрипты для автоматизации перемещения приложения внутри айфона после билда через SSH с отлавливанием syslog'а. Хочу ещё расписать, чего я наковырял внутри айфона в плане «где что хранится», но позже, по окончании ада :)

comment comments

node-couchdb-mover

node-couchdb-mover

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

Тулза для CouchDB. Т.к. CouchDB хранит после изменений/удалений документов ревизии и не всегда их очищает, бывает, что база адски растёт в размере. Например, у ребят, для которых эта тулза актуальна сейчас, то, что должно весить 6 гигов, весит 50-60. Может быть они где-то запустили что-то или накосячили, понаменяв и понаписав кучу всего в базу, чем люто увеличили её размер. В общем, проще просто создать новую чистую базу и перенести туда все живые документы.

Тулза просто берёт все документы из 1 базы в CouchDB, и кладёт их в другую. Работает пока довольно топорно, берёт все документы скопом и потом по 1 кладёт в базу. Для баз с относительно небольшим количеством документов работает нормально, а вот если их там тысяч этак 80, то у меня на компе получение документов длилось около 4-5 минут. Поэтому переделаю её вскоре, чтобы брала документы пачками и фигачила внесение в базу не асинхронно, а по очереди.

Но пока пользоваться можно. Тулзу можно встроить, например, в свой Node.Js проект.

В консоли:

npm install node-couchdb-mover

В коде:

var mover = require('node-couchdb-mover');
mover.moveDocuments('dbName1', 'dbName2');

Кроме того, её можно использовать прямо из консоли:

npm install -g node-couchdb-mover
couchdb-mover --from=dbName1 --to=dbName2

Ну, и как это положено, исходники на гитхабе | пакет на npmjs.org.

comment comments

Как узнать ретина дисплей или нет?

Как узнать ретина дисплей или нет?

Ко мне в блог много заходов из поисковиков по запросам вроде «Как определить дисплей retina». Попадают они ко мне на статью про Objective-C, но ищут они явно не код :) Запилил в итоге такую вот страничку, на которую надо просто зайти через браузер с вашего устройства. Если ретина - результат будет зелёным, как на скрине выше. Если не ретина - то красный, как на скрине ниже.

Как узнать ретина дисплей или нет?

Работает для iOS-устройств (iPhone, iPad, iPod) и Mac с экраном Retina. На экранах с высокой плотностью пикселей на дюйм тоже пишет, что retina :)

Адрес страницы: https://arm1.ru/retina/

comment comments