И всегда мне казалось, что айтишники — это существа в кофтах и с пивасом, которые бегают по этажам и настраивают компы в бухгалтерии. Короче, какая-то фигня. То ли дело транспорт! Реальный сектор! Такие знания всегда пригодятся.
⠀
Мало того, что мне было смертельно скучно изучать основы проектирования АТП, принцип работы сцепления и как правильно нарезать зубчатые шестерни (я и сейчас помню про эвольвенту, чтоб её!); так еще и ни дня я не проработал по специальности.
6 лет обучения, магистерская степень и два диплома.
Мама, почему я так забил на себя? Почему не жалел времени и сил.
⠀
Когда мне попал в руки фотоаппарат, я понял, что это отдушина после стольких лет занятия не тем. Чистое творчество, компьютер и много новых знакомств. И понеслась.
⠀
Тем не менее, потребность в фундаментальном IT-образовании осталась. И здорово, что сейчас есть крутые курсы по программированию и море информации в открытых источниках.
#СтатьПрограммистомПослеТридцати
⠀
Мало того, что мне было смертельно скучно изучать основы проектирования АТП, принцип работы сцепления и как правильно нарезать зубчатые шестерни (я и сейчас помню про эвольвенту, чтоб её!); так еще и ни дня я не проработал по специальности.
6 лет обучения, магистерская степень и два диплома.
Мама, почему я так забил на себя? Почему не жалел времени и сил.
⠀
Когда мне попал в руки фотоаппарат, я понял, что это отдушина после стольких лет занятия не тем. Чистое творчество, компьютер и много новых знакомств. И понеслась.
⠀
Тем не менее, потребность в фундаментальном IT-образовании осталась. И здорово, что сейчас есть крутые курсы по программированию и море информации в открытых источниках.
#СтатьПрограммистомПослеТридцати
Вот как выглядит backlog #getbetterapp
Начал ещё в выходные, но только сейчас после работы доделал настройки для пушей.
Сделал по красоте, минимум кода и расширять потом будет легко.
Можно было хранить настройки в UserDefaults, но я упоролся по идее хранить конфиг удаленно, и потому фичу пришлось писать дольше, чем я думал.
Но зато какой кайф, когда «оно работает». Билд залил в AppStore, завтра проверю, чтобы в 9 долетел пуш (я у мамы кьюэй), и потом на проверку.
#getbetterapp
Сделал по красоте, минимум кода и расширять потом будет легко.
Можно было хранить настройки в UserDefaults, но я упоролся по идее хранить конфиг удаленно, и потому фичу пришлось писать дольше, чем я думал.
Но зато какой кайф, когда «оно работает». Билд залил в AppStore, завтра проверю, чтобы в 9 долетел пуш (я у мамы кьюэй), и потом на проверку.
#getbetterapp
Как я выбирал язык программирования?
Ноябрь 2018. Мой текущий грейд — абсолютно никто.
Чтобы вы понимали, для меня не было большой разницы между Java и JavaScript. Я предполагал, что второй - это разновидность первого, но со скриптами.
Окей, у меня же есть знакомые программисты. Пишу им.
"Все деньги в джаве"
"Ты же модный и современный, почему бы не JS?"
"Попробуй рельсы"
Это соответственно Java, JS и Ruby разработчики😅
Я выбрал Java (не из-за денег, конечно же) и с головой ушел в обучение. Базу освоил быстро, а вот с ООП было тяжело. До сих пор помню когнитивный диссонанс от записи User user = new User().
Инстансы, наследование, SOLID... "Неужели все программисты знают это?"
Изучать Swift даже мысли не было. Почему-то iOS-разработчики казались мне небожителями (возможно, всё дело в стоимости Apple техники).
К марту 2019 окончил курс, сдал экзамен, написал с ментором небольшой проект и начал искать работу. Об этом расскажу в следующий раз.
#СтатьПрограммистомПослеТридцати
Ноябрь 2018. Мой текущий грейд — абсолютно никто.
Чтобы вы понимали, для меня не было большой разницы между Java и JavaScript. Я предполагал, что второй - это разновидность первого, но со скриптами.
Окей, у меня же есть знакомые программисты. Пишу им.
"Все деньги в джаве"
"Ты же модный и современный, почему бы не JS?"
"Попробуй рельсы"
Это соответственно Java, JS и Ruby разработчики😅
Я выбрал Java (не из-за денег, конечно же) и с головой ушел в обучение. Базу освоил быстро, а вот с ООП было тяжело. До сих пор помню когнитивный диссонанс от записи User user = new User().
Инстансы, наследование, SOLID... "Неужели все программисты знают это?"
Изучать Swift даже мысли не было. Почему-то iOS-разработчики казались мне небожителями (возможно, всё дело в стоимости Apple техники).
К марту 2019 окончил курс, сдал экзамен, написал с ментором небольшой проект и начал искать работу. Об этом расскажу в следующий раз.
#СтатьПрограммистомПослеТридцати
Нашел и пофиксил баг с авторизацией
Вчера выкатил версию 1.10.
От Waiting for Review до Ready to Sale прошло всего полчаса, удивительно.
Пока доводил до ума пуши, обнаружил неприятный баг.
GetBetter я писал как свой первый большой iOS-проект, и местами там остались некоторые сомнительные решения. Например, в классе FirebaseDatabase лежало поле let user = Auth.auth().currentUser. И это было удобно, например, чтобы в методах получать id пользователя. Вот только, если выйти из приложения и потом сразу нажать "продолжить без регистрации", то user оставался старый. А это вело к тому, что не запускался welcome-экран, выбор сфер и тд. База данных пыталась найти информацию о старом пользователе, а в сессии был новый.
В 1.10 баг пофиксил, и добавил классные анимации в дневник и советы дня, если там нет контента. Ну и по мелочи порефакторил.
#GetBetterApp
Вчера выкатил версию 1.10.
От Waiting for Review до Ready to Sale прошло всего полчаса, удивительно.
Пока доводил до ума пуши, обнаружил неприятный баг.
GetBetter я писал как свой первый большой iOS-проект, и местами там остались некоторые сомнительные решения. Например, в классе FirebaseDatabase лежало поле let user = Auth.auth().currentUser. И это было удобно, например, чтобы в методах получать id пользователя. Вот только, если выйти из приложения и потом сразу нажать "продолжить без регистрации", то user оставался старый. А это вело к тому, что не запускался welcome-экран, выбор сфер и тд. База данных пыталась найти информацию о старом пользователе, а в сессии был новый.
В 1.10 баг пофиксил, и добавил классные анимации в дневник и советы дня, если там нет контента. Ну и по мелочи порефакторил.
#GetBetterApp
Тот случай, когда #GetBetterApp стал для меня вполне себе заменой Instagram и VK. Потребность вести дневник есть, но не хочется делать это в публичном пространстве. Приватная лента собственных постов с картинками — самое оно. Плюс есть визуализация прогресса, и некоторая статистика для любителей циферок.
Раньше я пользовался приложением DayOne, но оно было слишком навязчиво с просьбой оплатить подписку.
В 2021 есть, кстати, мысли сделать GetBetter платным, с единой ценой в 1-2 доллара, без внутренних оплат.
Раньше я пользовался приложением DayOne, но оно было слишком навязчиво с просьбой оплатить подписку.
В 2021 есть, кстати, мысли сделать GetBetter платным, с единой ценой в 1-2 доллара, без внутренних оплат.
Бывает такое, что рабочий день кончился, а ты ближе к ночи придумал, как пофиксить тот баг. И с самого утра летишь к компу, смотришь, что это работает, и со спокойной душой идешь завтракать. Знакомо?
Anonymous Poll
79%
Да, братан, жиза
0%
Нет, зачем работать в нерабочее время?
21%
Я не программист и вообще не понимаю, о чем ты
Наверно, в любом коллективе время от времени рождаются локальные мемы. Для истории сохраню наши мемасы декабря, хоть они и в категории "memes without context".
Если это кажется лишним и вы на это не подписывались, дайте знать.
Если это кажется лишним и вы на это не подписывались, дайте знать.
Чего не умеет Firebase
Сервисы Firebase от Google действительно хороши. Auth берет на себя всю работу с авторизацией (до сих пор не люблю писать авторизацию😅). Cloud Message шлет пуши. Storage хранит файлы. Даже на бесплатном тарифе нормальные квоты, которых хватит для небольшого проекта.
Realtime Database — это NoSQL база с нестрогой типизацией. К сожалению, она не умеет в запросы с просчетом на стороне сервера (либо я просто не знаю, как).
В #GetBetterApp есть фича "совет дня", у котого можно ставить лайк. Я хотел, чтобы на экране отображалось количество лайков всех пользователей. Долго думал, как лучше это реализовать. В итоге сделал таблицу tip_likes, в которой id - это id юзера, а внутри лежит массив id залайканных им советов. И чтобы показать количество лайков, приходится получать ВСЕ данные этой таблицы и искать вхождение текущего совета в каждой записи. И хорошо, если пользователей меньше 1к (как сейчас). А представьте размер JSON даже для 10к юзеров! Хотелось бы прямо в запросе делать
Сервисы Firebase от Google действительно хороши. Auth берет на себя всю работу с авторизацией (до сих пор не люблю писать авторизацию😅). Cloud Message шлет пуши. Storage хранит файлы. Даже на бесплатном тарифе нормальные квоты, которых хватит для небольшого проекта.
Realtime Database — это NoSQL база с нестрогой типизацией. К сожалению, она не умеет в запросы с просчетом на стороне сервера (либо я просто не знаю, как).
В #GetBetterApp есть фича "совет дня", у котого можно ставить лайк. Я хотел, чтобы на экране отображалось количество лайков всех пользователей. Долго думал, как лучше это реализовать. В итоге сделал таблицу tip_likes, в которой id - это id юзера, а внутри лежит массив id залайканных им советов. И чтобы показать количество лайков, приходится получать ВСЕ данные этой таблицы и искать вхождение текущего совета в каждой записи. И хорошо, если пользователей меньше 1к (как сейчас). А представьте размер JSON даже для 10к юзеров! Хотелось бы прямо в запросе делать
entries.where { $0.contains(tipId) }.count и получать с сервера просто число, а не простынь.График отправки и открытия пуш-уведомлений.
В декабре 2020 добавил пуши для советов дня. Заметно, что пользователи оценили и стали охотнее тапать по ним.
В январские праздники прирост новых пользователей сильно вырос: от 3-6 в день в 2020 до 10-15 в день сейчас.
#GetBetterApp
В декабре 2020 добавил пуши для советов дня. Заметно, что пользователи оценили и стали охотнее тапать по ним.
В январские праздники прирост новых пользователей сильно вырос: от 3-6 в день в 2020 до 10-15 в день сейчас.
#GetBetterApp
Уже несколько пользователей #GetBetterApp дали понять, что хотели бы видеть настройку времени для push-уведомлений. Ну что ж, этим я сегодня и занялся.
В Firebase на бесплатном плане доступны только 10 топиков. 2 уже заняты под текущие пуши, значит остается по 4 кастомных под эту задачу.
Раскидал так: Советы дня (6, 8, 10 и 12 МСК), Итоги дня (16, 18,20 и 22 МСК).
Как только все юзеры перейдут на новую версию 1.11, то старые топики удалю (и в коде надо будет убрать их упоминания).
Удалил сохранение настроек пушей из Firebase Database и перенес их в UserDefaults на устройстве. Потому что хранить конфиг в удаленной базе было лишним. Я совсем забыл, что подписка зависит от FCM-токена, который привязан к устройству. Простыми словами, можно было подписаться на айфоне, а на айпаде под тем же аккаунтом показывалось бы, что айпад тоже подписан (а это не так).
Пока что сборка только у меня на телефоне. Потестирую уведомления и если все ок, то на следующей неделе выпущу.
В Firebase на бесплатном плане доступны только 10 топиков. 2 уже заняты под текущие пуши, значит остается по 4 кастомных под эту задачу.
Раскидал так: Советы дня (6, 8, 10 и 12 МСК), Итоги дня (16, 18,20 и 22 МСК).
Как только все юзеры перейдут на новую версию 1.11, то старые топики удалю (и в коде надо будет убрать их упоминания).
Удалил сохранение настроек пушей из Firebase Database и перенес их в UserDefaults на устройстве. Потому что хранить конфиг в удаленной базе было лишним. Я совсем забыл, что подписка зависит от FCM-токена, который привязан к устройству. Простыми словами, можно было подписаться на айфоне, а на айпаде под тем же аккаунтом показывалось бы, что айпад тоже подписан (а это не так).
Пока что сборка только у меня на телефоне. Потестирую уведомления и если все ок, то на следующей неделе выпущу.
Каждый раз удивляюсь, как продолжают ухудшать популярнейший в своё время «файлообменник» Skype. Уже несколько раз (даже после нескольких обновлений), после запуска приложения звук на макбуке сам выставляется на 100%.
Играющая музыка взрывается громкостью и доводит меня до каления.
Ну и в целом, если честно, убогий мессенджер)
Забавно, но на собеседовании я уточнял, где ведется переписка в компании. Телеграм? Я согласен на оффер!
Играющая музыка взрывается громкостью и доводит меня до каления.
Ну и в целом, если честно, убогий мессенджер)
Забавно, но на собеседовании я уточнял, где ведется переписка в компании. Телеграм? Я согласен на оффер!
(Не) Всё получается
В какие-то дни у тебя всё получается. Задачи понятны и быстро закрываются. Внутри приятное удовлетворение от проделанной работы. В продукте работают твои фичи.
А случаются дни, когда ты закапываешься в проблеме. Уходишь дальше, шерстишь интернет, читаешь документацию. И итогом оказывается, что проблема не решается. А если это конец недели, то совсем грустно.
Не врываешься, а вползаешь в выходные с некоторым ощущением бесполезности.
Так вот, это нормально.
И вроде простая и понятная истина, но в моменте лично мне всегда сложно.
В какие-то дни у тебя всё получается. Задачи понятны и быстро закрываются. Внутри приятное удовлетворение от проделанной работы. В продукте работают твои фичи.
А случаются дни, когда ты закапываешься в проблеме. Уходишь дальше, шерстишь интернет, читаешь документацию. И итогом оказывается, что проблема не решается. А если это конец недели, то совсем грустно.
Не врываешься, а вползаешь в выходные с некоторым ощущением бесполезности.
Так вот, это нормально.
И вроде простая и понятная истина, но в моменте лично мне всегда сложно.
В выходные выкатил 1.12 версию #getbetterapp:
• Добавлен уровень сложности (для тех, кто активно пишет или же пишет редко)
• Настройка времени пушей стала удобнее
• Добавлено количество постов по месяцам
https://apps.apple.com/us/app/id1522666671
• Добавлен уровень сложности (для тех, кто активно пишет или же пишет редко)
• Настройка времени пушей стала удобнее
• Добавлено количество постов по месяцам
https://apps.apple.com/us/app/id1522666671
Цифры
Ровно год назад стартовала разработка #getbetterapp.
Полгода назад (9.07.20) я выложил приложение в AppStore.
Сегодня произошла 1000 регистрация аккаунта.
Ура👏
Ровно год назад стартовала разработка #getbetterapp.
Полгода назад (9.07.20) я выложил приложение в AppStore.
Сегодня произошла 1000 регистрация аккаунта.
Ура👏