3 заметки с тегом

hackathon

Как подключить колонки к Айфону через AirPlay за 9 $

У меня появилось немного свободного времени и я вспомнил, что давно хотел подключить колонки на кухне к AirPlay, но не хотелось ставить там Apple TV. Вообще, в этом нет ничего сложного. Берем C.H.I.P.:

Подключаем к компьютеру, чтобы зайти на него в headless-режиме:

ssh chip@chip.local

Пароль: chip. (Если ругается на LC_ALL — решение.)

Как зашли, подключаем к вайфаю.

Когда появился интернет, устанавливаем shairport-sync, и наслаждаемся:

Изи! Рил-ток.

* * *

This post in English.

Авторизация в Московском метро

cover black

Обновлено—2. Приложение для авторизации в метро для iOS появилось Апсторе!

Обновлено. Бета-тестирование завершилось. Спасибо всем за участие! «Москва. Метро. Авторизация вайфай» отправилось в Апстор на проверку. Нет рекламе прокладок в Московском метро! Подписывайтесь на меня в твитере @m4rr — следите за новостями. А пока зацените мой стартап — Paste.

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

Новый логотип вайфая

За две недели в бета-тестирование было выпущено 10 билдов. Спасибо дорогим бета-тестерам за фидбек! Отдельное спасибо @iShift за помощь в построении гипотез, и @r3s3t за прекрасную иконку!

Приложение работает так: телефон подключается к вайфаю в вагоне, вы запускаете приложение, и — вуаля! — приложение автоматически проходит 9 кругов авторизации вместо вас и на айфоне появляется интернет.

Это приложение пока не в Апсторе Если вы хотите его попробовать — напишите мне письмо и я отправлю вам приглашение.

***

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

За время работы над приложением я подробнее узнал про сетевой сервис Captive portal, который для этого и был создан. Как это работает?

Айось, после подключения к вайфаю, делает первый запрос на какой-нибудь captive-check.apple.com, и если получает ожидаемый ответ, то считает, что интернет доступен. Если ответ неожиданный — показывает специальное окно, в котором загружается страница логина. В Старбаксе, например, именно так.

Но разработчики авторизации в метро специально [1, 2, 3] пропускают запрос на каптив-портал, и айось получает ожидаемый успешный ответ. Но если после этого, вы пытаетесь открыть любой сайт, то вместо него вы все равно получаете страницу авторизации! И новости про Coбянинa, конечно.

Короче, я считаю, что это неправильно, и приложение отлично с этим справляется!

Open Source! [BY NC SA]

2015   App Store   aйфон   hackathon   iOS   mauth   метро

Свифт-хакатон от CocoaHeads Moscow

На прошлых выходных ребята из CocoaHeads Moscow устраивали первый (в мире?) Свифт-хакатон. (Свифт — это новый язык Эпла для программирования под Айось и Макось.) Хакатон проходил в Москве, в офисе Мейл.ру два дня подряд.

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

В офисе Мейл-ру очень хорошо и уютно. Свежие соки, кофе, чай, кола, печеньки, массажные кресла и переговорки — все, что угодно было для нас бесплатно в эти выходные. И еда. Невероятно приветливые повара на кухне кормили нас три раза в день, огромное спасибо им за это. И это для того, чтобы мы хорошо работали и не скучали :) И мы работали!

Мы с ребятами собрались в команду, чтобы решить задачу вычленения основного текста из контента веб-страниц. Поделились на две группы: первая делает пользовательский интерфейс приложения, вторая — парсер и распознавалку ссылок и текста страниц.

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

Мы стали экспериментировать с подходами к разработке. Создали два таргета в Икскод-проекте, две ветки в Гите (и потом задолбались их мерджить, но зато комильфо!) А также проектирование, прототипирование, какао-поды и т. д.

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

  • вытащить текстовые хтмл-теги (article, h1...6, p и т. д.), но это не везде хорошо работает
  • поискать самый длинный контент в тегах, но это не гарантирует основной текст
  • посчитать количество точек в каждом теге и, где больше, — там основной текст, но это жесть
  • предложить юзеру указать на основной текст, лол

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

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

Все проекты лежат на гитхабе CocoaHeads Moscow:

Спасибо CocoaHeads Moscow и огромное спасибо компании Мейл-ру. Было здорово!

Здание Мейл-ру и вид из офиса во время рассвета:

2014   CocoaHeads   hackathon   Swift   Москва