Вы не вошли.
Сижу пришибленный. Работа идёт еле-еле. В голове пусто и тяжело.
Несколько лет назад, давно, я, остановившись на несколько минут, сделал фото памятника "Стена Скорби", жертвам политических репрессий.
Один из его фрагментов исписан словом "Помни" на множестве языков.
Тогда, в солнечный ясный день, у подножия стояла ваза с несколькими красными гвоздиками.
Теперь люди несут и несут цветы.
анон-левел-апер
[левел-ап]
[айти][работа]
На прошлой неделе был на собеседовании, начальный этап.
Вообще началось с того, что мне написала рекрутёр и сказала, мол, есть вакансия в хорошей компании. Я посмотрел - да это ж SDET. Меня вообще уже подзадолбали вакансии QA и SDET, замаскированные под вакансии инженеров-программистов.
Во-первых, тратишь время, вчитываясь в длинные параграфы обязанностей и квалификации.
Во-вторых, их трудно отсеять фильтрами.
Но я уже научился определять относительно быстро. Если в требованиях указан только язык программирования, то, скорее всего, это оно. Если сказано "тесно работать с командой программистов...", то 99%, что можно закрывать (уже довольно явно намекает). Туда же часто "быть адвокатом качества" в связке "искать баги в программном обеспечении и проверять, что они починены".
Я сказал об этом рекрутёру, но через какое-то время она позвонила снова, сказав, что поговорила с нанимающим менеджером и он сказал, что описание может быть сбивающим с толку. "Что там может сбивать с толку, когда никаких специфических именно для программиста умений там нет?", - подумал я, но ради тренировки по собеседованиям согласился.
Нанимающий менеджер был приятным собеседующим, хорошо рассказал про вакансию, про культуру в команде, ответил на все мои вопросы. Как я и ожидал, это вакансия SDET, так что ничего сбивающего с толку. Контракт на полгода, как я понял, у них много старого кода в тестовом фреймворке, который надо бы разгрести, переписать и прочитать. Первым вопросом ко мне было: "У тебя есть большаааая старая кодовая база, иногда код выглядит как пипец, как ты начнёшь разгребать?" Я ответил, мол, буду смотреть в код, буду запускать, буду разбираться, каким целям он должен служить, и так далее. А про себя подумал: "Нет, спасибо". Так-то некоторые задачи могут быть и интересными - у команды есть простенькие роботы, одна из задач - запрограммировать их так, чтобы они выполняли нужное действие, скажем, трогали экран (собственно, это все их функции). Но это лишь часть автотестов, да и ничего сложного в этом так-то нет, часто просто используешь уже существующую библиотеку и просто передаёшь координаты.
Проблема с SDET обычно в том, что после какого-то уровня (обычно это миддл, реже сеньор), по моему опыту, расти технически уже особо некуда, и ты просто занимаешься одним и тем же.
Пообщались хорошо, тренировка удалась. После собеседования я написал рекрутёру, что это не то, что я ищу, поблагодарив за её время и усилия.
анон-левел-апер
Отредактировано (2024-03-08 07:58:56)
[левел-ап]
[айти][опенсорс проект]
Мои пулл реквесты уже несколько недель ждут, чтобы их одобрили Основной разработчик проекта и самые опытные контрибуторы пока работают над другими вещами типа деплоймента, CI и вообще нового интерфейса.
Я пока на перепутье: продолжать ли фиксить баги и делать свои фичи, используя опенсорсные библиотеки которые последний раз обновлялись два-три года назад или пока попробовать новый опенсорс проект.
Сейчас немного перепиливаю под себя один тоже опенсорсный продукт (React/TypeScript), может, даже выложу, когда будет готово, но основная цель - сделать так, чтобы лично мне на моём локальном деплойменте было удобно его использовать. Ну и знания/опыт.
анон-левел-апер
[левел-ап]
[айти]
Вот ты знакомишься с опенсорс-проектом, видишь общую структуру, фронт и бэк, начинаешь разбираться в коде, дебажить и фиксить баги. Узнаёшь кусочек тут, кусочек там. При каком-то следующем баге ты уже примерно можешь представлять, что могло поломаться, где искать и у тебя предварительные предположения, как это можно починить.
Но вот при этом, когда ты можешь разобраться в существующем коде и что-то починить, у тебя всё равно далеко не сразу приходит понимание, как в общем и целом устроен и работает фреймворк/язык программирования.
И ты поневоле становишься "пакером". Вот тут приходят на помощь статьи по фреймворку/языку, и главное не полениться сразу же потратить время на понимание, каково общее место кусочка, который ты изучил, в большой мозаике. Лучше всего прочитать, разобраться, попробовать разные примеры самому, можно потом посмотреть видео, если есть, и записать/нарисовать диаграмму самому (разные виды запоминания и всё такое).
Так шаг за шагом создаётся ментальная карта этой области знаний. В идеале, наверное, когда столкнулся с чем-то новым, будет полезно набросать самые общие основы большой картины и понять, где место кусочка, который ты вот сейчас изучил, чтобы очертить себе границы и главные места.
[дыбр]
[фото]
На выходных ездили гулять в лес.
Прошли примерно десять километров с общим подъёмом 500 метров, видели водопады, океан, замшелые ветви и лесных великанов
анон-левел-апер
Фотографии шикарные, лес очень атмосферно выглядит. Представляю, насколько там свежий воздух
Отредактировано (2024-02-26 23:32:10)
Спасибо, анончик Да, воздух там отличный, ещё и пахнет чудесно
анон-левел-апер
[левел-ап]
[айти]
Есть два варианта сделать нужную фичу: нажимаешь на кнопку или линку в браузере, и открывается ранее сохранённое рабочее пространство.
Это 1) простая HTML-страница со списком ссылок на все пространства (template в джанго-бэкенде), список пространств приходит с вью из бэкенда и 2) UI-контролы в одном из элементов фронтенда этого веб-приложения (источник списка всех пространств всё тот же - бэкенд).
В первом варианте в адресе указываешь URL фронтенд-сервера с параметром, значение которого = айди пространства, во втором варианте вешаешь обработчик на кнопку, который вызывает функцию из реакта (фронт), загружающую это пространство.
В чём были трудности анона?
Анон забыл, вообще, напрочь, что в ссылке можно указать адрес <a href="..." с нужным URL. Анон всё пытался сообразить, как же в HTML-файле в бэкенде вызвать функцию из реакт-компонента во фронтенде
Как так вообще работает мозг, что иногда вообще забывает и не доходит до таких элементарных вещей?.. потому что ты не пользовался этим знанием, анон?
[фехтование]
Вчера впервые умудрился забыть шлем В итоге маэстра из-за требований безопасности работала со мной на поролоновых саблях (обычно для совсем новых студентов) Выполнять на них действия на клинке сложно, они короткие, гнутся, и сложновато держать игрушечную саблю как настоящую рапиру. Но это был интересный опыт, и хоть я почти весь урок казнил себя и был грустным, всё же удостоился пары похвал (после некоторого количества замечаний и исправлений).
После урока я планировал пофехтовать с Бейзадом, но из-за шлема, точнее, его отсутствия, он просто дал мне урок - продолжение всех действий на клинке (всего их девять, если не брать разновидности) с рапирой и базовые атаки с саблей.
Сабля мне пока кажется сложнее, в основном из-за изменения положения кисти и тонкостей рубящих атак (и положения руки с оружием перед выполнением атаки), особенно в зависимости от того, какую сторону противника ты атакуешь (бок, flank), внутреннюю или внешнюю.
Но под конец урока я уже выполняла атаки правильно
анон-левел-апер
[левел-ап]
[айти][опенсорс проект]
Один из моих пулл реквестов с фиксом бага наконец заехал в репу!
Другой, где я добавил возможность создавать сущности не только с контентом строго определённого типа, а с контентом разных типов, создатель проекта перевёл в драфт. Он написал, что над этим реквестом надо ещё пора поработать, но он бы хотел иметь такую фичу, так что оставит на будущее.
Всё ещё мучаю второй опенсорс проект:
нажимаешь на кнопку или линку в браузере, и открывается ранее сохранённое рабочее пространство.
2) UI-контролы в одном из элементов фронтенда этого веб-приложения
Это React + TypeScript, и в основном компоненте есть методы для загрузки данных и переменная состояния для общей сцены, которая и вмещает в себя рабочее пространство.
Я же хочу сделать загрузку пространства в отдельном компоненте. Я попробовал использовать ту же функцию-утилиту, которая используется в одном из методов главного компонента, и понял, что без переменной состояния общей сцены (часть главного компонента) она как следует не работает (это пока моё предположение, надо 100% подтвердить).
Пару дней у меня заняло разобраться (относительно, лол) в методах и функциях, которые вызывают другие методы и функции, а те другие, а те другие, и так далее. Я видел несколько новых типов, над которыми пришлось пораскинуть мозгами - что они значат, для чего они вообще
Проект немаленький, и у меня, если честно, пару раз кипел мозг. Я до конца пока не разобрался, можно ли вообще сделать загрузку пространства в отдельном компоненте и что для этого нужно. И если нет, то почему. Сложно, сложно! Особенно идти от частного к общему. Трудновато сходу быстро понять структуру и связи в таком проекте.
[левел-ап]
[спорт]
Со второй половины января я снова стал бегать по 2-3 раза в неделю. VO2 max (кардио фитнесс, сколько кислорода потребляет организм во время тренировки) с 40.7, что выше среднего, упал до 37.6 - 37.8 в феврале
В ноябре-декабре я болел, тест не показал ковид, но чувствовал я себя пару-тройку недель разбитым и усталым. Ещё и сил и энергии совсем не было, так что весь спорт, кроме фехтования, я забросил. И, скажу честно, мне было очень сложно выгонять себя бегать и ходить в серую хмарь, когда небо затянуто тучами, ветер холодный, и общее ощущение можно описать как "зябко". И когда на улице ещё нет ливня. А рыжий котик у соседей на окне спит так сладко, как умеют только котики, и от этого выходить на улицу хочется ещё меньше
Но у меня отросла отсохшая в декабре сила воли, и я снова регулярно бегаю и хожу быстрым шагом.
анон-левел-апер
Отредактировано (2024-03-06 00:13:34)
[левел-ап][дыбр]
Недавно что-то пришла мысль, что я впустую тратил время, когда работал SDET. Я приуныл. Но потом начал развивать эту мысль, и ответом на вопрос "Почему?" было "Это не то, чем я хочу заниматься сейчас" и "Эта работа дала мне недостаточно опыта, чтобы быстро и легко поменять её на другую".
Тут моё уныние слегка скукожилось
Да, сейчас я хочу заниматься другим, и это нормально - поменять род занятий, когда хочется, и вот я уже занимаюсь другим.
Опыт - 1) Очевидно, что при смене деятельности ты переучиваешься и приобретаешь новые опыт и знания 2) Всё же некоторый полезный опыт я таки приобрёл (вместе с зарплатой, хех).
Единственное, что может быть рассмотрено как потраченное время - то, что мне далеко не всегда нравилась моя работа. И я жалею, что не сменил её раньше. Но, как говорят, весь этот опыт привёл тебя в то место, где ты сейчас. И ты уже знаешь лучше, что ты хочешь и чего не хочешь.
Мог ли я поменять работу раньше? Наверное, мог. Делал ли я что-то для этого? Делал. Достаточно, сделал ли я вообще всё, что было в моих силах? Не знаю
Но я могу сделать сегодня всё, что в моих силах. И завтра. Так зачем смотреть в прошлое и сожалеть, когда сегодня можно работать ради завтра и послезавтра и множества других дней?
И вот немного хочулий могулий магнолий, чтобы отвлечься и не ныть из-за серой и зябкой ранней весны
анон-левел-апер
Отредактировано (2024-03-07 22:53:21)
[левел-ап]
[айти][опенсорс проект]
Я понял, что применял не совсем верный метод ознакомления с кодом проекта. Это было неправильное "от частного к общему".
Нашёл функцию, по идее похожую на нужную мне, и начал разбираться, как она работает в общей картине основного большого компонента приложения, и как работает сам этот компонент. Стало сложно и абстрактно, застрял.
Надо было начать с Inspect элемента в UI (совсем рядом с которым я ещё позже и разместил мои контролы для загрузки, потому что они выполняют очень похожие действия), который точно делает то, что мне надо, просто с другим типом входных данных (файл, а не ответ бэкенда на мой запрос), найти его в коде, где декларируется, где и как используется и понять, как он загружает рабочее пространство из файла (и можно ли так же загрузить пространство из бэкенда).
И ведь я даже начал это делать на прошлой неделе, но вместо того, чтобы полностью пройти этот путь, я бросил его и взял и перескочил на другой
Вот это был бы более рабочий подход "от частного к общему".
Консистентность - это порой то, чего мне не хватает в моём левел-апе((
В итоге я выяснил, что в функции, которая делает именно то, что мне нужно, используется такой объект, который манипулирует общим состоянием через свои внутренние функции, и эти функции не принимают параметры извне. И использует эти объекты в моём компоненте некий менеджер, который имеет доступ к состоянию общего большого компонента (речь про его состояние, когда загружаем рабочее пространство).
Мне нужно передавать айди рабочего пространства в запросе к бэкенду для загрузки этого пространства (по нажатию на контрол с айди), так что вариант, где я не могу явно передать параметр, не подойдёт.
С загрузкой тех же данных из файла это сделано без явной передачи параметров типа имени файла, там используется функция, обрабатывающая выбор и открытие файла, который вот юзер открыл, она сама знает какой лол
В итоге мой следующий шаг - разобраться, как в Реакте используется useContext и как менеджер в моём компоненте работает с общим состоянием.
анон-левел-апер
Отредактировано (2024-03-08 08:01:24)
[левел-ап]
[айти][опенсорс проект]
Итак, я разобрался, что такое useContext в Реакте, для чего он нужен, и как менеджер в моём компоненте работает с общим состоянием. Менеджер в данном случае - инстанс класса, который в конструкторе принимает состояние рабочего пространства, его элементы и функцию, которая обновляет рабочее пространство (после загрузки другого, сохранённого пространства, например) И этот инстанс, хранящий в себе нужное состояние и элементы, передаётся с помощью useContext в компонент ниже самого основного компонента, вот как там происходит обновление общего состояния.
Правда, эта функция, которая обновляет пространство, принимает аргумент кастомного типа, но я разобрался и увидел, что этот тип представляет собой объект вида {состояниеПространства, списокЭлементов, ... }, так что можно создать такого вида объект из тела респонса запроса к бэкенду.
Разобраться было непросто, я и сейчас не до конца уверен, что разобарлся как следует, но теперь у меня есть ниточка, и я хочу проверить, правильно ли моё предположение. Вообще это очень классное чувство, когда думаешь, что нашёл путь решения проблемы, казавшейся неприступной.
анон-левел-апер
[левел-ап]
[айти][опенсорс проект]
Сделал! Заработало!
Теперь сохранённые рабочие пространства загружаются через реквест к бэкенду при нажатии на кнопку с айдишником в браузере!
И я узнал про ещё одну классную вещь в Реакте
Остались задачи поменьше и деплоймент на мой локальный сервер в докер-контейнере. Но сейчас я немного отдохну и поеду на фехтовач.
анон-левел-апер
[дыбр]
В выходные съездили в Сан Франциско, погуляли по крутым улицам, поглазели на викторианские домики и зашли в магазин со всяческой утварью для приготовления кофе. Купили большой френч пресс (чтобы кофе из него хватало на двоих), посмотрели на всевозможные чайники, фильтры, хитрые стаканы с соломинками. В дальней части шла лекция, и народ слушал очень увлечённо. Совсем недавно заказали в этом же магазине кофемолку, она нам понравилась, и вот мы решили заехать в сам магазин и посмотреть всё вживую.
Кофемолка кстати очень милая и стильная, напоминает здание в стиле конструктивизма
Вместе с кофемолкой заказали вкусный бескофеиновый кофе в зёрнах, вот и заценили. Свежеобжаренный и свежепомолотый, он очень понравился. Привкус орехов, лёгкая кислинка, немного дымное послевкусие. До этого мы покупали кофе свежей тёмной обжарки, мололи его в магазине же и заваривали в кемексе. Но по сравнению с этим новым кофе он как будто пережжённый. И в кемексе пока не получилось сделать так же вкусно, как во френч прессе.
С бескофеиновым кофе, как я понимаю, это сложнее, потому что надо ещё найти хороший бескофеиновый, ну вот вроде повезло. Обычный, с кофеином, мы тоже пьём, но только утром и не слишком много. А так как кофе любим, то весь остальной день принадлежит бескофеиновому))
Мне нравится атмосфера в некоторых районах Сан Франциско: ты поднимаешься по холму всё вверх и вверх, и кажется, что это уже совсем-совсем край земли, а дальше только голубое небо и солнце. И безмятежная тишина вокруг. Но вот ты, наконец, поднялся, и тебе открывается улица с нарядными светлыми домиками и цветущими суккулентами.
Ещё съездили рано утром погулять в один из местных парков: холмы (пока ещё зелёные), оранжевые маки, люпины, зеркальная гладь залива, болота внизу с множеством замощенных досками тропинок. И птицы! Цапли, кулики, канадские гуси, дикие индюки и множество других
В визитор центре очень интересная постоянная экспозиция, посвящённая местным индейцам: история, карта, где какие племена жили, диорама, предметы быта, плакаты-статьи, маленькая доска с фразами на их языке и их значением на английском. Снаружи был стол, где джентльмен, принадлежащий к одному из плёмен (охлоны), очень увлекательно рассказывал и показывал (на столе было много предметов), как жили его предки, как жил он сам в детстве, как индейцы живут сейчас. Они проделали значительную работу (и продолжают) по сохранению языка, традиций и культуры.
анон-левел-апер
[левел-ап]
[айти][опенсорс проект]
Начал работать над деплойментом.
Хочу два контейнера, один для фронта, другой для бэка. И реверс-прокси перед бэком.
Сложно, когда прошлый раз ты трогал докер несколько лет назад -_-
Сначала я начал разбираться с nginx, хочу использовать его. Для разминки надо было поставить и настроить его, сделать так, чтобы отдавал статические файлы из моего фронта.
Ну что ж, я затупил с тем, откуда их брать и как их делать.
В моей голове упорно крутилось слово bundle, и я начал искать по нему, разбираться, как сделать его из реакт-приложения. Начал изучать приложения, которые берут и делают тебе его из твоего проекта.
В какой-то момент я понял, что зашёл в тупик, и пошёл с вопросом к мужу.
Оказалось, можно просто сделать билд через yarn build, взять файлы из директории build и готово
Как я мог узнать про это сам, начни я копать в другом направлении?
Зайти в Dockerfile проекта и посмотреть, что там за команды для сборки (пусть build:something), а потом зайти в package.json и посмотреть там в scripts значение ключа build:something, какие команды выполняются для этой команды.
Просто использовать команду.
ВСЁ.
Тяжело, когда ты не знаешь и не догадываешься, что делать, чтобы достичь цели.
Это как стоять на земле и смотреть на парящий островок, куда тебе надо бы забраться, но вот только ты не видишь ничего между собой и этим островком, только пустоту, за которую не ухватишься.
А потом, когда уже знаешь подходы и инструменты, то в руках словно появляется лестница или альпинистское снаряжение, хех.
Сейчас у меня есть контейнер с фронтом.
Разобрался, как создать для него Докерфайл, взять образы node и nginx, скопировать код фронта в контейнер, сделать билд и положить артефакты в корень nginx, чтобы когда откроешь адрес в браузере, там открылось твоё приложение.
Также есть контейнер с бэком.
Разобрался с Докерфайлом для него, взял образ питона, выставил пару переменных среды, скопировал в контейнер файл requirements.txt и поставил зависимости, скопировал код и запустил Джанго сервер
Также использую docker compose, чтобы удобно работать с несколькими контейнерами. Прописал настройки в docker-compose.yml, для фронта и бэка отдельные сервисы. Базу данных оставил в том же контейнере, что и бэк, у меня маленькое приложение чисто для себя.
Расстраивает, что простые по идее вещи порой занимают столько времени
Осталось разобраться, как спрятать бэк за реверс-прокси, и чуть поменять UI во фронте.
анон-левел-апер
[левел-ап]
[айти][опенсорс проект]
Искал, как запилить реверс-прокси для веб-приложением в докере.
Первые результаты выдачи - статьи с примерами, где даны конфиги. Я читаю конфиги nginx'а, который выкладывают авторы, и я не понимаю, что означает... примерно всё. Зачем нужен блок upstream, для чего нужно поле location и что происходит с его значением, почему в конфиге несколько блоков server.
И авторы не объясняют это в своих статьях. Мол, скопируйте к себе, потом выполните эти вот команды, и у вас должно заработать, а на экране появятся вот такие строчки. Вуаля, вы великолепны!
ПОЧЕМУ.
КАК.
ЗАЧЕМ.
Как же меня бомбит
Я не хочу тупо копипастить, я хочу понять, что в конфиге что означает, и почему конфиг составлен именно так.
Ненавижу такие говно-статьи с говно-контентом, а поди ж ты, первые в выдаче
Моей ошибкой в методе поиска информации было то, что за конкретными объяснениями я не пошёл на официальный сайт nginx и не посмотрел beginner's guide. Вообще, это стоит сделать привычкой - идит и читать официальные доки, если есть - начинать со гайдов для начинающих.
Возможно, авторы статей предполагают, что их читатели и так уже все знают, поэтому не нужно объяснять, что и почему Но я встретил большой свежий тред на реддите, где люди бомбились по примерно такому же поводу, так что не самое удачное предположение, а для начинающих, кто хочет разобраться, эти статьи практически бесполезны, давая лишь общее направление.
Вчера расстроился из-за этого, чувствуя себя тупым.
Сегодня морально полегче, но с утра болит голова, и эмоционально я как-то всё ещё близок к донышку. Хочется поискать утешения в любимых книгах и музыке (как разберусь в конфиге лол). Что хорошо, сегодня будет фехтовач, он-то меня наверняка вытащит из уныния.
анон-левел-апер
[левел-ап]
[айти][iOS]
Закончил с предыдущим проектом (напишу отдельно) и начал новый!
И не просто проект, а ещё и курс по совершенно новой и классной вещи - языку Swift и разработке приложений под iOS.
Начал с позапрошлого понедельника, и это просто восторг! Курс (книга в Apple Books) замечательный: очень понятный, подробный, написанный отличным языком. После каждой главы - лабы, как раз на границе лёгкого и челленджа. Мне показалось очень ценным то, что ты сразу закрепляешьзнания лабами, что и в самих главах есть маленькие примеры, и что ТАМ ВСЁ ПОНЯТНО, не надо ломать голову над непонятным концептом или примером, к которому просто нет объяснений.
Обожаю осваивать новое и интересное, а когда ещё и всё систематизировано, продумано и толково сделано, то вообще восторг Ну и когда задания как раз на границе возможностей и интереса: ты можешь сделать эту классную вещь, используя то, что ты узнал, чему научился и чуточку подумав (и не застрять надолго, лол, потому что про какую-то неочевидную вещь просто не упомянули)
Неделю я осваивал основы swift и Xcode, делал лабы и проходил руководство, как делать своё приложение - идея, дизайн, прототип, руководства Apple по дизайну
А потом начал делать своё первое приложение, и вот тут дорога пошла в горку
Идея очень простая, получить на умных часах текущий пульс и послать юзеру сигнал, если пульс выше или ниже заданной границы.
Что сделал анон-левел-апер? Вместо того, чтобы действовать уровень выше себя прежнего, он действовал как старая версия себя: вместо того, чтобы просто сделать самое простейшее Hello World и убедиться, что оно запускается, он начал разбираться, как снимать пульс и набросал код, который к концу дня ни разу не пробовал запустить Потому что интересно, дай-ка разберусь в этом, а потом в том, дай-ка кодец примерный набросаю, совсем немного, опа, уже 6 вечера
Я убеждаюсь, что некоторые важные вещи, которые вроде и кажутся интуитивными и очевидными, на самом деле надо записывать и держать под рукой, чтобы знать, как правильно жить разумнее делать проект.
Лабы были интересными и понятными. А вот Observed/Observable объекты и публикуемые проперти ощущались как хороший такой скачок в глубину, когда я начал разбираться, как делать реальное приложение.
Забавно вышло с тем, как я искал, где же в приложении должна быть логика. Пытался найти, как привязать вью к контроллеру, предполагая, что именно так надо делать (MVC, все дела). Предположение оказалось неверным, вью к контроллеру уже не привязывают Из MVC убрали C, и теперь swiftUI напоминает тот же Реакт.
К счастью, в доках и обсуждениях всё было объяснено весьма понятно, и разобраться, как запустить приложение и сделать что-то простое, оказалось не слишком сложно.
Дело идёт быстро, и чуть больше, чем за неделю у меня уже есть минимально готовый продукт, сегодня вечером как раз ходил (точнее, бегал) его тестировать - работает ли всё, как нужно, насколько удобно и приятно им пользоваться. И я доволен!
Конечно, остаются вещи, которые буду менять/улучшать потом, но сейчас самый основной функционал, ради которого и пишется приложение, работает. Дальше дело за отзывами самых первых пользователей.
Хоть и времени прошло совсем немного, но мне уже очень нравится разработка под iOS, подозреваю, из-за того, как сделана среда разработки и как УДОБНО Ты можешь мгновенно видеть свою работу на экране симулятора девайса в превью, смотреть на изменения в UI не запуская код, и вот это просто отлично закрывает этот промежуток абстракции между твоим кодом и тем, как выглядит результат его работы. Не надо держать в голове и представлять, можно просто посмотреть и потыкать курсором Это значительно помогает. А если говорить о приложении для телефона, а не для часов, там ещё удобнее, и возможность в редакторе тащить линию от условной кнопки на экране в код, чтобы описать логику её работы, то для меня это божественно: меньше слоёв абстракции, больше наглядного взаимодействия с объектами реального мира
Хех, узнал кстати недавно от мужа, что такой концепт софта называется WYSIWYG (what you see is what you get), и жалею, что не попробовал раньше. Но как снова буду делать что-то на Реакте, обязательно попробую :3 Это неплохо так облегчает и ускоряет работу
Взял за привычку не бояться потратить «слишком много» времени и внимательно прочитать доки, пока не станет совсем понятно (в книге это указано именно как правильная практика - прочитать доки, разобраться в большой картине и понять, что к чему), и это ощущается тоже классно - обычно после них на многие вопросы появляются ответы, с ментальной карты исчезают белые пятна. Да и здорово они написаны, хоть я бы и не отказался от большего количества примеров
анон-левел-апер
[левел-ап]
[айти][iOS]
Конечно, по мере работы с iOS средой разработки, розовые очки понемногу выцветают Пока что основная моя претензия - это что в хорошей теоретической документации порой не хватает примеров.
Ещё неудобства могут доставить некоторые не совсем очевидные вещи. Например, есть аргумент типа словарь, где ключи - строки, значение может быть любым. Выглядит это как [String:Any]. И он должен таким быть в определённых местах. Вот я решил отрефакторить немного код, написал Int вместо Any, потому что я же целое число передаю! В итоге у меня поломалось то, что работало, а я какое-то время не мог понять, почему В итоге нашёл мельком упомянутое, что мол, в именно таких случаях должно быть [String: Any]. Не знаю, может я не прочитал в доках про это, а если и прочитал, то не понял а если и понял, то не так лол
Ещё сегодня от Xcode постоянно отваливались мои часы, физический девайс, так что запускать и дебажить на них приложение было нелегко. Нашёл большой свежий тред, где народ жаловался на это, кто-то предлагал решения, но помогали они далеко не всем. В итоге я ребутнул комп, и всё снова заработало
В треде бомбились в адрес разработчиков инструментов для разработчиков, мол, ну Эппл, ну что же ты, ну мы уже привыкли, у нас высокие ожидания от тебя! Та же реакция у многих и на доки тоже, да. Не знаю, насколько большая команда занимается этими девелоперскими тулами, но подозреваю, что ресурсов у них на некоторые вещи не хватает, потому что зерно истины в жалобах на форумах есть.
Но мне всё равно нравится этими инструментами пользоваться. Запилил приложение-компаньон для телефона, очень простое. Сейчас обновляю основное приложение. Было бы здорово отправить его в app store, конечно. Но для начала надо бы дать попользоваться юзерам, кто потестировал бы его, получить фидбек. А для распространения своего приложения до отправки в app store тоже ппц много опций, в которых я пока тоже не до конца разобрался.
[Спорт]
Так вышло, что в iOS я углубился с увлечением, и прогулки стал пропускать. Мне жалко тратить утреннее время на них, если честно. Зато хотя бы не отказался от бега. Сейчас всё цветёт, волшебно пахнет, и дни стали длиннее, так что бегаю и наслаждаюсь золотым часом. И VO2max даже немного пошёл вверх, но как-то медленно, мотыляется около 38, падая до 37.7 порой. Всё же стараюсь не пропускать физические тренировки (включая фехтовач). По выходным выбираемся походим по горам и лесу, всё хлеб, но лучше вставать очень рано, иначе на тропинках сплошные люди и никакой тишины
анон-левел-апер
[левел-ап]
[айти][iOS]
Добавил ещё одно вью для приложения на телефоне, сделал возможность свайпать для переключения между вью. Пришлось порефакторить логику из отображения, вместо одной булевой переменной состояния и проверки if else сделал строковую переменную и switch.
Добавил кнопку, которая завершает текущую сессию измерения пульса и упражнение (оно запускается в бэкграунде, чтобы данные с датчика пульса запрашивались чаще, потому что 1) сейчас у девелоперов (кто только не в самом Эппл, наверное) нет прямого доступа к датчику измерения пульса 2) обычно пульс измеряется относительно редко, когда 3 тебя не слишком высокая активность, а мне надо каждую минуту).
Уже несколько недель чувствую себя очень увлечённым, как будто подхватил могучий поток и несёт. Постоянно думаю о том, а как сделать то, а как это. Всё любопытно, насохранял себе доков и статей, чтобы прочитать позже. Бывает, понимаешь, что уже пора бы сделать перерыв или вообще на сегодня закончить, но не можешь оторваться от того, что делаешь/читаешь, иногда я не могу перестать думать о каких-то вещах, связанных с приложением или swift в общем.
С одной стороны, я рад, что нашл вроде бы нишу в разработке, по которой горю, с другой у меня начало болеть плечо, шея и голова
Стараюсь работать то стоя, то сидя, не забывать о перерывах, всяких упражнениях и массаже. Переключиться мысленно сложнее, я даже во время бега не всегда могу отвлечься. Тут обычно помогает фехтование, чтение, видеоигры или шитьё (ещё одно моё хобби лел).
[фехтование]
Сегодня после работы фехтовал с Бейзадом, сначала он дал мне урок по рапире (я запутался и переводил всё это время foil как шпагу ): практиковали все четыре защиты.
Потом у нас был поединок, и я почувствовал, что деградировал
Я не знаю, может, из-за усталости, особенно умственной, но я был ппц медленный, с трудом отбивал атаки, едва смог уколоть сам пару раз. Конечно, у нас очень разные уровни, но мне кажется, что раньше я чаще мог уколоть, да и защищался лучше.
Впрочем, Бейзад сказал что, наоборот, видит прогресс. По его словам, все мои действия теперь в гораздо более узких границах, не выходящих за пределы моих плечей. Когда мы только начинали, я размахивал рапирой куда шире Что ж, хорошо.
После этого те же упражнения на саблях и тоже поединок. Тут я чувствовал себя лучше, потому что смог несколько раз ударить его, и даже по руке.
При этом сабля мне кажется сложнее в плане того, как надо поворачивать руку в разные моменты. Но постепенно всё начинает казаться простым и логичным.
[дыбр]
Всю неделю сон очень цепкий, не желающий отпускать. Снится что-то очень яркое и реальное, так что не сразу прихожу в себя, когда просыпаюсь.
Но некоторые сюжеты повторяются чаще других. Папа умер или умирает, скандал с мамой и кузен пропал, надо его искать. Ну и потусторонние места, они какие-то все в основном невесёлые.
Я бы лучше посмотрел сон со своими кошками, я очень хочу их увидеть снова живыми и здоровыми, поиграть и погладить, но пока увы.
Зато недавно была в гостях у бабушки, в старой квартире, которую уже продали. Она угощала вкусными блинами, а кузен сидел с нами за столом, и никуда не пропадал.
анон-левел-апер
[левел-ап]
[айти][iOS]
Сделал так, что теперь в упражнении, которым управляет моё приложение, видны калории, когда юзер его завершает (оно появляется в эппловском приложении Fitness)
Заодно сделал так, что начать сессию с измерением пульса и упражнением можно ещё и с телефона, и что изменять границы таргет зоны для пульса можно без нажатия кнопки в приложении на телефоне, а они сами отображаются на часах по мере того, как ты меняешь их на телефоне.
Сегодня прямо уже ппц чувствовал усталость, и плечо побаливало, так что делал перерывы подольше и почаще, делал упражнения для плеча и шеи, какое-то время работал стоя, вроде полегчало в итоге. А потом поехал на фехтовач, где делал ещё больше упражнений и смог переключить мысли.
[фехтование]
Был урок на дистанцию, потом поединок с тренером.
Дистанция и время - очень важные вещи, и очень важно рассчитывать их правильно. Я рад отдельному уроку именно по этой теме, хоть и то и дело сегодня был то слишком близко, то далеко, буквально пара дюймов.
В поединке я смог раза два или три уколоть тренера, но он, как обычно, уколол меня куда больше раз, сказав потом, что он повысил сложность лел. Он делает так почти каждый раз, когда видит, что у меня прогресс
После каждого укола он спрашивал, что произошло и почему он смог меня уколоть. Что произошло, я не всегда мог ответить, потому что очень быстро и мой мозг был занят другим, а почему он смог меня уколоть - потому что я вместо защиты нападал, а должен был сосредоточиться на защите, когда видел его атаку.
Ещё спрашивал, кто получил бы поинт, и тут выступает концепция приоритета (right of the way), которую я не очень люблю и которая применяется к рапире и сабле. Это кто получает поинт, если атаки были одновременными или с очень маленькой разницей. Радует, что я уже могу ответить, чей поинт и почему (и конечно же, поинты пока не мои, в основном потому, что я не защищался и не делал рипост, штош)
Но ничего, в следующий раз я буду чуть лучше, прекращу думать, как бы быстрее уколоть, и уделю больше внимания защите.
анон-левел-апер
[левел-ап]
[айти][iOS]
Пару раз использовал своё приложение на пробежке, в общем и целом остался доволен. По цвету экрана сразу понимаешь понять, в какой ты зоне и надо ли ускориться/замедлиться/продолжать в том же духе.
Постукивание по руке от часов, когда пульс стал слишком высоким - серия быстрых и сильных ударов, ощущается тоже быстро и заметно. А вот постукивание, когда ты пульс ниже того, что ты установил и надо бы ускориться - серия медленных постукиваний, порой вообще незаметное, особенно когда быстро бежишь. Когда идёшь, ещё ок.
Надо придумать, как это улучшить. Дело в том, что у часов сейчас ограниченный набор видов постукиваний, да ещё ограничение на время между ними, то есть девелопер не может вызывать одно за другим чаще определённого времени.
В прошлые выходные ездили с мужем в лес, и он тоже попробовал моё приложение на своих часах и дал отзыв с идеями, что можно улучшить и добавить. В том числе и постукивания, хех.
Я же обнаружил баг, когда захотел сам воспользоваться своим приложением: хотел задать границы пульса с телефона, а связь в моём приложении между телефоном и часами пропала и не появлялась. Всё, конец.
Пока не знаю, в чём конкретная причина. Воспроизводилось нерегулярно. Добавил логи, обработку ошибок и переподключение, если сообщение с телефона не доставлено, с тех пор этот баг пока не встречал
И вот немного фоточек из леса. Мы приехали пораньше, чтобы не ходить по жаре и среди людей лул. За день до этого шёл дождь, и кое-где ещё плавали клочья тумана
анон-левел-апер
[Дыбр]
Поймала себя на том, что мне не хватает спонтанности. Просто взять и написать для памяти то, что сейчас на душе, пусть даже совсем какой-то пустяк.
Например, как на вершинах совсем зелёных пока ещё гор за ночь (дождливую у нас, внизу) появились снежные шапки. (Уже месяц, как снег растаял, а горы неизбежно пожелтели под солнцем)
Или как зацвели розы, и каждая прогулка стала сплошным удовольствием: цветы белые, розовые, алые, сиреневые, чайные, в красных брызгах, словно их пытались покрасить бумажные солдаты королевы…
Даже эту запись я начал два дня назад и отложил
анон-левел-апер
[левел-ап]
[айти][iOS]
Добавил экран настроек в приложение на телефоне, работаю над ними. Можно будет задавать: 1) хочет ли юзер оповещений, когда у него пульс в нужной зоне 2) цвета для разных зон, если ему не нравятся те, что по умолчанию 3) разные виды постукиваний для оповещений, если не нравятся те, что по умолчанию
Первая настройка вышла легко и сразу заработала.
Настройка с цветами делает мне больно. Нет, цвета выбираются и передаются на часы, только вот на часах показываются другие цвета. Иногда похожие на выбранные, иногда нет. Посмотрел в дебаггере: в телефонном приложении я беру цвет в RGB-координатах из Color Picker, всё успешно передаётся в них же (Color(red: 0.4, green: 0.8, blue: 0.1)). На часах я создаю цвет из этих координат, а когда вывожу в дебаггере значение этого созданного на часах цвета, он отображается в виде hex-строки, типа #ff0000 Я пока не понимаю, почему.
анон-левел-апер
[левел-ап]
[айти][iOS]
Я разобрался, почему не все цвета, что я выбрал для приложения на телефоне, отображаются на часах.
Потому что я невнимательный упорыш и написал функцию, которая присваивает значения цвета части объекта для передачи. Объект состоит из трёх частей - соответственно для случаев, когда пульс слишком низкий, слишком высокий и когда он в нужном интервале. Моя функция присваивала rgb значения выбранного цвета той части объекта, что отвечает за слишком высокий пульс.
И я взял и вызвал её во всех трёх элементах для выбора цвета, для всех остальных частей объекта.
Сижу сейчас и чувствую, что, кажется, отравился Прямо перед выходными
анон-левел-апер
[левел-ап]
[айти][iOS]
Переделал внешний вид меню настроек, теперь он в эппловском стиле (использовал Form и NavigationView для этого), осталось закончить меню для выбора типа постукивания по руке в часах (haptic), оповещающего о том, в заданной ли зоне пульс или нет.
Вместе с этим ещё хочу добавить демонстрацию выбранного типа на часы, когда юзер выбирает на телефоне.
[дыбр]
Отравился я, к счастью, совсем несерьёзно, сегодня уже чувствую себя совсем хорошо.
Но фехтование вчера пришлось пропустить Я был слабым, вялым, каким-то упоротым, и интенсивная физическая нагрузка вряд ли пошла бы на пользу. Ещё и хз, не стало бы мне нехорошо за рулём.
Так как я всё же очень хотел моральных ништяков, то пошёл немного погулять неподалёку и пофоткать на закате васильки у одного из моих любимых старинных домов (мелькнула было мысль купить боба-чай, но я тут же прогнал её). Когда шёл домой, уже еле волочил ноги. Пришёл, устроился посидеть и посмотреть на фотки - и чуть не вырубился там же. Остаток вечера валялся и смотрел видео, где человек ходит и показывает заброшенные дома.
Фотки с фотоаппарата пока не разбирал, потому что не вывез, но с телефона понравились.
Около того дома растут розы, и розовые пахнут чудесно: чуть сладко, тонко, свежо и глубоко. На мне как раз были духи с запахом роз, которые я очень долго искал и подбирал, и я не без удовольствия отметил, что запахи весьма похожи. Конечно, те восхитительные розы пахли интереснее и глубже, но всё же.
Поиск духов с запахом розы был отдельным квестом, конечно.
Я перенюхал множество, но большинство даже близко не напоминали розу. Некоторые сильно и удушающе пахли густым розовым маслом на одной ноте, скатываясь потом во что-то ещё более тяжёлое.
Но я рад, что всё же нашёл то, что понравилось, хоть и буду продолжать пробовать новые: а вдруг встретится Та Самая Роза.
анон-левел-апер
[дыбр]
Сегодня удалили зубы мудрости, все сразу. Заняло полчаса, и это включая один «сложный», который полулежал в десне.
Приехал домой (точнее, привёз муж), сежу лежу.
P.S. Как же я рад, что наконец от них избавился
P.P.S. А вот теперь начало БОЛЕТЬ
анон-левел-апер
Отредактировано (2024-05-23 02:50:33)