Category: it

Category was added automatically. Read all entries about "it".

Как я писал "Небеса Израиля"

Я хочу рассказать как я писал приложение для телефона.

Началось с идеи. Я фотографирую, понемного продаю, даже на сайт National Geographic's что то взяли как победителя конкурса.

Вот сайт с моими фотографиями: https://www.paveltravelphoto.com/

И одним из моих любимых жанров сталоприехать на пляж Пальмахим и снимать там закаты. Есть закаты красивые, есть средненькие, есть так себе. Возникла идея это дело предсказывать.

Посмотрел на имеющиеся фотки закатов и попытался понять от чего зависит красота заката. Освещение облаков, их высота, хуё-моё.
Написал об этом статью, выложил - на хабре на русском (https://habr.com/ru/post/478192/), на медиуме на английском (https://medium.com/@javaap/forecasting-the-beauty-of-sunsets-1dcac0907139).

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

Начал с этим возиться, там нетривиальные форматы данных, разобрался.

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

А я ведь бекендщик до мозга костей.
Ну поговорил с чуваками, которые в Харькове нам фронтенд делают. Их главный сказал - да я тебе наваяю быстренько фронт, нет проблем.
Я ему деньги предложил, он не взял.
Наваял, еще и предложил мне оптимизировать это дело - чтобы у меня не сервер на бекенде бежал, а чтобы мой код клал прогнозы в S3 на амазоне, все равно они раз в 3 часа меняются.

Так и сделали. Причем, зная, что я сам фронт писать не буду, я сразу сделал чтобы список параметров (прогноз температуры, облаков, дождя, красоты закатов) и как их показывать фронтенд получает с бекенда, т.е. я могу очень много всего менять, не трогая фронт.

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

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

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

К тому же пришло понимание, что дизайн то красивый, но сложный для юзера.

И тогда, в очередной, раз, я понял, что "никто не даст нам избавленья, ни бог, ни царь и ни герой".

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

Идея была такая - 1) показывать погоду, прогноз и фото-параметры - красота заката, условия астрофотографии и т.д. 2) расчитывать на максимум людей - и фотографов и фанов следить за погодой 3) всюду делать подсказки, чтобы было всем понятно 4)делаю для андроида, айфоны идут в жопу 5) Приложение только для Израиля (я использую израильские API)

Сначала думал делать только на иврите, но потом понял, что уйма всякий компонентов UI на андроиде заточены под язык. Т.е. если язык андроида английский, а я пишу на иврите, не всюду легко сделать справа на лево или правильный alignment.

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

Для обсуждения вопросов "как сделать понятнее" сделал вотсап группу из друзей, которые согласились помочь.
Они скачивали ранние версии и критиковали.

Вообще - сделать приложение понятным, если в нем много данных и предназначено для разных категорий пользователей - это серьезный челендж. Намного серьезнее технических проблем (как сделать что то - это всё решается в stack overflow)

Как водится часть замечаний были в один голос, а часть - люди просили противоположные вещи.

Вообщем через полтора года после первоначальной идеи и через пару месяцев после начала написания приложения я выпустил первую версию

Естественно тут же пошли замечания про спеллинг - на всех языках я допустил уйму ошибок. Причем люди советовали не только исправление очевидных ошибок в словах, но и более удачные формулировки (и естественно противоречили друг другу).
Даже мои дети разделились в том сколько юдов надо ставить в первом слове в названии שמיי ישראל

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

Что дальше?

Цель у меня была такая - собрать побольше людей, чтобы потом собрать деньги на платные API - например прогноз молний.
Уже вижу, что шансы на это минимальны. Скорее всего и за хостинг буду платить сам и если захочу подключить платные источники - тоже сам :(

Но пока не буду отчаиваться - добавлю красоту рассветов, буду улучшать алгоритм красоты закатов, искать что еще можно там показать и в какой группе прорекламировать.
Опыт приобрёл, я считаю, бесценный :)

О предопределённости

Мне интересно искать причины событий. Находить изначальную точку с которой всё началось.

Я знаю с какого журнала заинтересовался программированием, кто мне рассказал про службу в пехоте, знаю кто из предков первый приехал в Харьков или у кого познакомились папа и мама.

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

1. Программистом я должен был стать. Даже если бы мне не попался тогда, в 1985 или 1986 тот журнал Наука и Жизнь. Достаточно посмотреть на то, кем работают мои одноклассники :) Я мог стать им раньше если бы поступил после школы в ХПИ, а не в ХГУ на физфак, но вряд ли бы это изменило много в моей нынешней жизни
2. Я мог в 16 лет жениться (я собирался) и завести ребенка. Это пожалуй самая серьезная точка, где всё могло пойти иначе. Это повлияло бы на меня сильно, но скорее всего всё равно я попал бы в Израиль и работал бы программистом. Характер более менее был бы такой же тоже. Мой опыт говорит что после 16-18 лет люди очень мало меняются, я видел это часто, когда встречался с людьми после 15-20 летнего перерыва. Тем не менее наличие ребенка и личность супруги влияют сильно, да. Это был бы я, но уже не совсем такой как есть, наверное.
3. Мы могли с родителями уехать в США. Там были мамины родители и один из братьев. В этом случае тоже я был бы не совсем такой как сейчас - другая страна, другая компания - всё это как то влияет на человека, на характер, привычки и т.д. Насколько сильно? Не знаю.
4. Остальные точки, где могло пойти что то не так, мне кажется повлияли бы еще меньше.

Прогнозирование красоты закатов

TL;DR: Из чего состоит красивый закат? Как предсказать эти элементы заката? Откуда взять данные для предсказаний?

Все фотографии в статье мои.

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

Элементы заката
1. Небо в том месте, где солнце заходит за горизонт.

Если небо в этом месте чистое - это красиво.
Если чистая полоска неба, а над этим облака - еще красивее.
Если есть небольшая облачность и Солнце заходит посреди облаков - тоже не плохо.
Если всё небо возле горизонта в облаках - плохо.

Примеры:


Солнце заходит без облаков на горизонте

Collapse )

Pixel injection как путь к ФБ профайлингу

Еще год назад, когда написали про Кембридж Аналитика первый раз, я подумал, как можно сделать что то похожее самому.
Дырка позволяющая собрать информацию о друзьях была прикрыта еще в 2015, и вообще ФБ стал уже очень строгим при разрешении приложений, собирающих данные (при чем у старых приложений "на какой цветочек я похож" разрешение не отзывает, сука).

Но тогда у меня возникла идея попробывать встраивание невидимой картинки в 1х1 пиксель в посты, чтобы посмотреть что вытащить из кукис HTTP запроса, когда он придет на мой сервер. Более того, возникла идея делать такой же втсроенный пиксель и в картинках.

Идея вот в чем - через кукис, которые приходят в запросе пикселя, получить авторизацию как пользователь ФБ и попытаться скачать его профайл, подменив в запросе свой хост на имя хоста, на котором сидит юзер.
Вот мой репозиторий на GitHub,там я это делаю на котлине с помощью Spring Social facebook.

Как оказалось, это возможно лишь отчасти.
Во первых токен да, получается получить, но он валиден не более 1 секунды (видимо время, выделенное браузеру на скачивание контента со страницы фейсбука). Если у пользователя медленная сеть (я экспериментировал над собой ечрез медленный вай фай) это время растет.
Во вторых так можно скачать только ленту пользователя, которую он видит сейчас - т.е. в Spring Social API:
fbApiProvider.getAPI(userId).feedOperations().getFeed(id)
заменив перед этим токен request.setheader("Oauth-host", userHeaders.host)

Вобщем получается, что в среднем в 20% случаев я могу получить 5-10 постов из фида юзера, т.е. то, что он видит перед собой и в кэше его браузера. Что он лайкнул, что нет я таким образом не знаю. Но если мой пост с волщебным пикселем попадется в ленте опять, я опять получаю возможность посмотреть на ленту.Картинки с пикселем, я расшаривал только на русскоязычных друзей, а не как Паблик, от греха подальше

Что с этим можно делать?
Я попытался во первых собрать какие то идентификаторы того, что в ленте - имена людей и имена сайтов на которые линки.
Потом попробывал про некоторых из них дать какой то таг. Ну скажет haaretz - "левые","мерец". Биби - "правые", "ликуд"
если я сам в ленте то "космос" :) Ну и т.д.

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

Т.е. так с определенной долей вероятности можно узнать что кого интересует.
Но от этого до информации что кому писать в письме и какого цвета делать фон, чтобы изменить его избирательные пристрастия далеко конечно :(

Как я писал сайт.

Хочу поделиться опытом как я писал сайт.

Сначала исходные данные - у меня в основном опыт на сервер сайд - Java и Scala, последний год немного приходитсдя писать на Python, получил в наследство поддерживать систему на Django. Небольшой опыт HTML, jQuery, первый Angular. Но совсем не большой. Т.е. что то могу делать гугля каждую деталь.
Захотел сделать простейший сайт - человек с кем то спорит, описывает спор на сайте - тема, пояснения, дата, мейл того, с кем спорит и мейл судьи.
Судья и оппонент подтверждают участие, потом, когда дата подходит судья решает кто выиграл спор.
Всё. Никакой возни с деньгами или что то такое - если спор на деньги, люди это сами описывают в пояснениях.

Сначала долго думал на чем делать. Важной и сложной частью казался логин. Надо делать через соцсети, гугл или что то такое. Сначала думал делать на Grails, благо Groovy я знаю, но вскоре выяснил, что Grails вообще, и плагин для логин через соц сети в частности,выглядят совсем заброшенными. Решил делать на Django, который все равно надо выучить для работы.
Вообще сначала я сделал proof of concept логина (для начала это было через GitHub) и только после этого реально начал что то писать, сделал проект (на том же GitHub) и т.д.


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

Интересно, что когда мне надо было вводить дату, я искал разные виджеты для Django, даже клонировал какой то репозиторий, исправлял его - но все работало через жопу. В итоге за 1 минуты прикрутил DateChooser из jQuery и всё.
Точно также потом список споров сделал на REST + jQuery, вместо встроеного джанговского view, но это было уже потом, когда почти всё было готово и я перестал бояться.

Совсем не очевидным оказалось какие страницы будут на сайте, заняло время представить себе как это вообще будет выглядеть.
Вообще всё связанной с UI оказалось сложным. Что должно быть на странице? Как это всё расположить? Как реализовать то, что я придумал в плане Layout?
Цветовая гамма - для меня вообще ужас. какие цвета делать? Какие шрифты?

Важно было как можно раньше определить MVP - minimal value product. Что включать в первую версию, которую выкачу на публику, а что нет.

Если пишешь один, то еще и постоянно падает мотивация. Очень помог Лев, который подключилса на каком то этапе, писал код, тестировал, обсуждал со мной - его помощь была намного больше, чем объем написанного им кода - без него я бы вряд ли вообще все довел бы до конца.
В UI также помогла Вита, однокурсница еще по ХГУ. Придумала дизайн, реализовала его в CSS, сделал цвет, шрифты.
Потом я сам выучил CSS Grid и всё переделал под него, но без Виты я бы просто не дошел бы до этого этапа.
Тексты мейлов и FAQ на сайте помог составить сын, Ярон.


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

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

Вообщем полезный опыт. Надеюсь, что в следующий раз, когда соберусь писать сайт, будет проще :)

Инструмент для бэкапа своего ЖЖ

Судя по всему надо делать инструмент для бэкапа ЖЖ.
Вопрос как его делать. Есть такие варианты:

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

2. Сайт без регистрации/логина. Дал свой юзернейм (тогда без комментов) или юзернейм и пароль - тогда с комментами - сгрузил файл
Плюсы - просто в использовании и написании
Минусы - неудобно разные отчеты делать. Т.е. можно, но надо продумать интерфейс - и скачивание бэкапа и статистика, отчеты и все это пока сессия жива. Скачивание ЖЖ может занять время - важно, чтобы закрывал сайт все это время - т.е. дополнительная головная боль
Нет поиска по ЖЖ

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


Следующий вопрос - бэкап во что?
HTML? пытаться имитировать разметку ЖЖ? Ведь там хранится не HTML. Тогда надо заниматься конвертацией. Скажем перевод строки переводить в BR таги и т.д. Много работы
Текст? А с картинками что делать?

Следующий вопрос - монетизация. Ну как минимум хостинг надо отбить, если это будет сайт. Ну и на пиво хотелось бы.
Donations? Какие то фичи в платной версии? А как это в случае сайта без регистрации делать?

Ваше мнение?

Страшная сказка

Знаете, почему в Израиле не хватает программистов?
Потому что есть рекрутинговое агенство, название которого всё время меняется, которое заманивает программистов, а потом приковывает их цепями к компьютеру и заставляет писать на ДжаваСкрипте израильские интернет магазины. Им выдают карточку "тенБис", но заказывать они могут только здоровую еду - салаты всякие. А по утрам у них СтэндАп митинги ежедневно. А те, кому удается сбежать, всё равно уже писать могут всю жизнь на джаваскипте и кушать только салаты, даже без мяса.
А одна девочка, когда перегрызла свою цепь и убежала, сама организовала такое агенство. Она даже с кнутом ходит и бьёт прикованых программистов за баги. И фейсбук у них не доступен. А за попытку зайти в ЖЖ - разряд тока.
А когда один мальчик перегрыз цепь у нее в подвале и убежал, он организовал таку

Фонетический поиск для ДНК совпадений по аутосомным маркерам

Тестирование на аутосомные маркеры и сравнение этих маркеров разных людей открыло новые возможности ДНК генеалогии.
Теперь сайты вроде 23andme, familytreedna уверенно предсказывают, что такие то и такие то люди являются где то 4х-5ти юродными братьями моих протестированных родственников.
Однако же чаще всего с этой информацией делать нечего - ты пишешь потенциальному кузену и выясняешь, что в лучшем случае он знает фамилии бабушек и дедушек и знает что они приехали в Америку "из России". Что с этим делать дальше? Ты собирал свое дерево по крупицам - у тебя известны по разным веткам 8-10 поколений, известно какая ветка из какой деревни, а понять хотя бы по какой линии ты родственник с этим "савпаденцем" - не можешь.

И тут нам на помощь может придти технология.

Я написал программку, веб сервис, которой можно скармливать раные документы - например перепись населения какой то деревни за 1856 год. Или список выборщиков в гос думу другой деревни за 1910 год и т.д.
Она может принимать как текстовые документы, так и ссылки (в таком случае она выкачает документ сама).



Веб сервис индексирует их, а потом, найдя очередного совпаданца, можно скармливать ему фамилии его предков и вебсервис будет искать в документах с учетом того, что одна и таже фамилия может быть записана (и услышана) по разному.
Если я нашел одну из его фамилий, например, в переписи по Свири за 1856, то можно предположить, что мы с ним связаны именно по линии прадедушки тестя, который жил именно там.




А это дает уже уйму информации - можно начинать просматривать метрические записи - искать брак между семьями и т.д.

Что дальше?

Этот вебсервис, как вы понимаете только прототип.
Как он может развиваться?

1. MyHeritage интегрирована с 23andme и у них есть доступ к разным базам данных в интернете. Они могли бы это сделать частью своего продукта - находить как (возможно) связаны сопваденцы по ДНК
2. Если бы JewishGen открыл бы свои базы по API, и 23andme сделал API на тему совпадений аутосомной ДНК (сейчас у них API есть, но ограниченый, только о себе), то можно было бы такой продукт сделать самому
3. Поиск я веду по всему документы, а в нем не только фамилии, но и имена, рассказ о документе - это может создавать false positives. API ыдавал бы только фамилии
4. Поиск по фонетике ведется с помощью Daitch Mokotoff Soundex а он не очень приспособлен для фамилий (хотя его использует и JewoshGen) - выдает много совпадений, которые не могут быть одной фамилией и наоборот. Хорошо бы сделать его вариант заточенный под европейские фамилии

Поисковик по сообществам.

Оригинал взят у henic в Поисковик по сообществам.
Ввиду безвременной кончины яндекс-поиска, javax_slr сделал аналог.
Попроще, с минимальным интерфейсом, без рекламы.

getlj.com.

Технические возможности:
1. Проиндексировано несколько сообществ. Добавить другие можно, соответственно запросам коллективного разума.
2. Возможен поиск по годам. Есть сортировка по дате.
3. Можно посмотреть все постинги данного пользователя в сообществе (пустое слово для поиска).

4. Сложные запросы, кажется, не поддерживаются.
5. Комментарии не проиндексированы. Я не нашел API или готовые утилиты, умеющие скачивать журнал сообщества, разворачивая комментарии.
6. Если индексировать закрытое сообщество, подзамочное в результатах не появится.

Проект некоммерческий (ежели кто хочет собственный журнал так проиндексировать, наверное, можно попросить автора, но вряд ли бесплатно).
Хостинг стоит десять долларов в месяц.
На странице есть кнопка "Donate" (ведущая на пейпал). Пока что народ скинулся на полгода, будем признательны, если финансово поддержите существование проекта.

Баги? Недостающие фичи? Интерфейс?
Утилита для скачивания журнала сообщества целиком?
Деньги, в конце концов.