Вы не вошли.
[левел-ап]
[айти]
Начал сегодня финальный модуль по SwiftUI, тот, что с проектом, который будет оцениваться. Начал идти по разделам модуля, а сайт ушёл на технические работы. Работы закончились, я снова залогинился, и увидел, что весь прогресс по модулю пропал
К счастью, было не много, и я быстро нагнал.
Сделал проект - там надо было к существующему приложению добавить функционал.
Посмотрел перед отправкой - а некоторые поля в форме не валидируются. А должны. Полез в код, обнаружил, что где-то валидация специально сделана не так, где-то отсутствует.
Поправил неправильную валидацию, добавил недостающую.
Отправил проект, жду, пока другие студенты оценят. И сейчас пойду оценивать проекты сам.
анон-левел-апер
[левел-ап]
[айти]
Проекты для оценки другими студентами выдаются рандомно, как я понимаю, и порой рука тянется к лицу, когда видишь, что иногда отправляют.
Совершенно левые проекты: ожидается, скажем, проект на Swift для приложения ресторана, человек отправляет проект на Реакте для заказа еды. Или приложение для поиска парковки. Или вместо архива всего проекта один файл, в котором огрызки кода, так, что даже запустить нельзя. Кто-то не отправляет вообще ничего и пишет, мол, помоги мне пройти валидацию, поставь все нужные галочки, и я помогу тебе
Понятно, что кто-то проходит курс ради сертификата, но блин. Просто мне непонятно, когда люди загружают вообще левые проекты и ожидают, что как-то кто-то где-то поможет.
Если ты не получишь знаний, зачем тебе сертификат и что ты будешь делать, если знания вдруг потребуются ("Ты же курс прошёл")? А если у тебя уже есть знания, то всё можно пройти быстро и без проблем.
К тому же и курс, и задания вовсе не сложные.
анон-левел-апер
[фехтование]
Очередной урок у маэстры прошёл лучше, чем я вообще рассчитывала!
Для начала, она поменяла разминку. Теперь вместо того, чтобы каждый студент делал фехтовальные действия - шаг вперёд/назад, выпал - по её команде, мы делаем фехтовальные действия, стоя друг к другу лицом и стараясь сохранять постоянную дистанцию всё время.
Затем, она начала учить педагогике одну из новых девочек, с которой я менялась ролями в прошлый раз, И Я ВЕСЬ УРОК БЫЛА СТУДЕНТОМ И ПРАКТИКОВАЛАСЬ! Это было здорово, и я даже немного помогала этой девочке, когда она что-то забывала или была не совсем уверена, что делать.
Маэстра произнесла небольшую речь, в которой пару раз повторила, что обучение педагогике - это не наказание, как некоторым может показаться. И что по-настоящему знать фехтование можно только побыв на стороне учителя. Я полностью согласна с ней, но всё же, всё же есть деталь...
И у нас наконец появились фехтовальные поединки в конце урока!!! Каждый поединок длится несколько минут, а потом мы все меняемся местами, чтобы фехтовать с другим оппонентом. Интересно фехтовать и с совсем новичками, и с тем, кто начал набираться какого-то опыта.
Ещё одна из девочек, у которой был когда-то давно опыт, задала мне задачу своими уколами в живот сбоку - кажется, это её любимая атака, она постоянно её повторяла и уколола меня так два или три раза. Я решила задачу отступанием назад и определённой защитой, после чего у неё уже не получалось уколоть меня таким образом.
Я очень счастлива таким переменам! Рада, что маэстра пошла на компромисс, что уроки стали интереснее и живее, и что есть поединки. Так что, похоже, я остаюсь с маэстрой!
анон-левел-апер-фехтовальщик
[левел-ап]
[айти]
Отправил своё приложение на ревью в AppStore
анон-левел-апер
[левел-ап]
[айти]
Получил результаты ревью в App Store: моё приложение отвергли.
Два замечания:
1) приложение-компаньон зависает на двух конкретных типах девайсов - один из айпадов o_O и самый последний айфон. Версия OS - 18.0.1 - тоже самая последняя, самая недавняя
2) Иконка для часов не соответствует принципам дизайна, потому что её фон сливается с фоном экрана часов, надо сделать фон другого цвета
Начал работать над этими замечаниями.
Голова болит третий день с утра, в левом виске как будто засела иголка.
Зато на выходных наконец съездили в лес опробовать новый кэмпер, и были счастливы! Но об этом отдельно.
анон-левел-апер
Анончик, а если такого девайса у тебя нет, как ты поправляешь баг и проверяешь? В эмуляторе каком-то, или как?
(Извини, что с мороза)
Анончик, а если такого девайса у тебя нет, как ты поправляешь баг и проверяешь? В эмуляторе каком-то, или как?
Да, в Xcode есть очень много симуляторов для разных девайсов и версий операционных систем.
(Извини, что с мороза)
Всё в порядке, это же здорово, что тебе интересно
анон-левел-апер
[левел-ап]
[айти]
Итак, я разобрался с проблемой на айпаде: так как приложение не для него, а для телефона, я добавил проверку типа девайса и для айпада сделал отдельное вью, которое говорит использовать айфон
Проверил везде - по идее я указал во всех настройках только iOS и айфон, я не знаю, почему айпад всё же как-то пролез. Может, из-за того, что в билде таргета указал any iOS device, но там или это, или симулятор Или я что-то недопонял.
Для афйона я сделал часть функционала недоступной, когда часы не подключены к нему.
Думал, как лучше - просто сделать кнопку недоступной и поменять надпись на ней на что-то вроде "Подключите часы" или заблюрить весь экран целиком и написать это сообщение поверх блюра.
Решил остановиться на одной кнопке.
И наконец смог воспроизвести баг, который увидели в App Store - когда приложение на телефоне зависает намертво. Это было непросто, но я поняла, что это случается, когда приложение на телефоне запущено -> часы не подсоединены -> часы подсоединяются —> приложени на телефоне намертво зависает.
В консоли Xcode я увидел
unable to close due to unfinalized statements or unfinished backups
Assertion failed: (0), function isBulkReadStatement, file SQLiteDatabaseTracking.cpp, line 710.
Загуглил, результатов именно для iOS разработки совсем мало, в основном вопросы - кто-то сталкивался с таким?
Я понятия не имею, почему это произошло и как это фиксить, Я не использую явно никаких бд. Чувствую себя в тупике. Ну штош.
анон-левел-апер
[Путешествия]
[офф-роад]
В прошлые выходные наконец испытали новый кэмпер, заодно пригодились навыки офф-роада с недавних курсов
Как раз на этих курсах один из других участников, с которым разговорились, поделился годным местом в лесу, где можно встать на ночь, переночевать, а утром насладиться панорамным видом на лес и горы. Это примерно 3 часа езды на северо-восток.
Большая часть дороги была не очень интересной, а потом мы свернули на узкое шоссе между полями, холмами и редкими виноградниками. Солнце уже село, но небо ещё хранило нежные цвета, и окрестности казались местом из сюрреалистического сна.
Потом дорога свернула в лес, с обеих сторон её, словно стены, обступали высоченные деревья. К этому моменту уже стемнело, машин было мало, и было ощущение, что мы совсем одни, и на много миль вокруг никого.
Но тут начали попадаться один за другим совсем маленькие городки. Домики стояли близко к дороге, и их отделяли от неё обычно лишь несколько деревьев. Было очень мило видеть, проезжая мимо, тёплый свет в окнах, гирлянды из лампочек на заднем дворе, кто-то уже начал украшать дома к Хэллоуину. Но домики пролетали быстро, и их снова сменяла темнота.
В какой-то момент мы услышали стук. Поехали медленнее, прислушиваясь. Моя мысль была - ну только не проколотое колесо. Но звук не был постоянным, он то появлялся, то пропадал. Заехали на заправку, заправились и посмотрели - вроде всё в порядке (забегая вперёд, скажу, что на следующее утро мы пришли к выводу, что виновата дорога, а точнее, трещины и неровности на ней).
Наконец, мы приехали к точке на карте и увидели едва заметный съезд в лес. Кто-то уже встал там около самой дороги, с тяжёлым кэмпером-фургоном - в маленьком лагере горел огонь в специальной большой металлической чаше, и мы решили быстро пройти пешком дальше, чтобы посмотреть, есть ли там более уединённые места.
Мы шли вдвоём по ночному глухому лесу. Звёзды мерцали ярко, и их было так много, как никогда не увидишь в городе. Тишина, темнота (ок, у мужа маленький фонарик) и запах леса
Мы шли минут 10 вверх и вниз по извилистой узкой грунтовке с камнями и корягами. Очень близко к первому лагерю обнаружили второй, там тоже был тяжёлый кэмпер-микроавтобус, который дальше по такой дороге не проехал бы.
В конце дороги мы нашли милую полянку, а когда прошли немного дальше, то вышли на открытую площадку, откуда открывался прекрасный вид на поросшие лесом горы, залитые лунным светом. Отлично, сюда и заедем, решили мы.
Вернулись к машине, проехали до площадки, осторожно, огибая коряги, и встали лагерем.
Приготовили ужин на индукционной плитке (в машине есть розетка) - пюре и польская "киелбаса", поужинали и легли спать.
Наш кэмпер раскладывается вверх, и там отличное пространство для сна - плоское, ровное и большое, как настоящая кровать.
Правда, мы не подумали, какая будет температура ночью в горах в середине октября, но мы хотя бы взяли с собой худи
Но так-то у нас до сих пор днём припекает. К счастью, наши спальные мешки рассчитаны на температуру около нуля, а там было градуса 3-4.
Я просыпался посреди ночи, пытаясь устроиться поудобнее, но я спал гораздо лучше, чем в нашей предыдущей машине без кэмпера.
Первым делом мы приготовили горячий кофе и насладились видом: сосны, утреннее солнце, гранитные скалы и панорамный вид
Солнце быстро согрело воздух, а там мы уже приготовили завтрак.
Я побродил немного вокруг, видел следы копыт оленей, заодно испробовал новый объектив для своего фотоаппарата.
После завтрака попробовали старлинк - и получили хороший интернет посередине леса
Собрались, сложили кэмпер и поехали обратно. И вот тут особенно пригодились навыки офф-роада, а особенно направляющего, потому что днём видно гораздо больше препятствий, чем ночью
Самым сложным, пожалуй, было развернуться и выехать с нашей уютной площадки, минуя острые камни, которые мы не смогли убрать. Острые они были в основном сбоку, в так по ним можно было проехать колесом - главное, чтобы они не порезали бок самого колеса.
Несколько раз я выходила из машину и показывала жестами, как и куда ехать, но мы выбрались довольно быстро и легко. Заодно поняли, что пила и лопата не помешают в дальнейших приключениях.
Днём лес, конечно, выглядит гораздо приветливее, видны горы. Я почему-то думал о том, что их высоченных прямых сосен получились бы превосходные мачты для парусников, но время уже не то, так что сосны простоят ещё много лет.
анон-левел-апер-путешественник
[левел-ап]
[айти][дыбр]
Разобрался, как починить багу с бд в своём проекте, из-за которой приложение зависало.
Сшил два плаща по старинным выкройкам себе и подруге на Хэллоуин (я больше не буду шить в последний момент, я больше не буду шить в последний момент, я больше не буду...)
Съездили с мужем к друзьям на хэллоуинскую тусу в их городке, выгулял плащ, выгулял своё платье на 18 век, отлично повеселился Никогда не видел столько ведьм сразу!
Почти закончил ещё один модуль в курсе по iOS разработке.
Наконец выбрал и купил пистолет, забрал его. Почистил и смазал пистолет в первый раз. Съездил с ним на стрельбище и опробовал.
Начал читать мрачную книгу, которую давно хотел.
Помогал мужу обустраивать кэмпер.
Пару раз узнал, что означает "ощущение иголки в виске" от головной боли.
Так и не умею пока управлять своим временем так, как хотелось бы.
анон-левел-апер
[левел-ап]
[айти]
Я потратил много времени (почти всю субботу) на то, чтобы понять, что вью, похожее на окошко, что появляется и заслоняет почти целиком другое вью, почти во весь экран, это не picker вида NavigationStack, а вью модификатор по имени .sheet.
В момент, когда я понял это, и полчаса после в голове у меня прыгал мемас про шиииииииииииит, и я не мог удержаться от того, чтобы не озвучить его пару раз.
[дыбр]
Началась осень: как-то быстро похолодало и стало рано темнеть. Я уже чувствовал несколько раз холодок вечером, но он был ускользающий.
И пару раз уже шёл дождь! Но один раз я едва не попал под ливень без зонта, и это было бы не очень приятно, зато потом вышло такое солнце, был такой запах на улице! я как раз доел свой кебаб и вышел из кафе
анон-левел-апер
[дыбр]
Первый настоящий осенне-зимний дождь, сильный, долгий, с серым небом и тяжёлыми облаками. Как-то резко стало рано темнеть, а в доме уже хочется надевать носки.
[левел-ап]
[айти]
На прошлой неделе наконец сделал задание по курсу, отправил его, получил 100% и могу двигаться дальше!
Надо было сделать 3 вью для сайта воображаемого ресторана: общее меню с едой, напитками и десертами, детальное вью для каждого элемента и вью для сортировки и фильтрации.
Всё оказалось проще, чем я думал, но 1) Задание было местами написано очень непонятно 2) Я проглядел, что сортировка и фильтрация опциональны, хоть и являются хорошим упражнением.
Пофиксил все замечания к своему приложению, что были в ревью от Apple, заодно нашёл баг со своевременным отображением изменений на экране часов, и не совсем понял, почему я не видел его раньше
Отправил пару дней назад своё приложение на повторное ревью. Жду.
Получил приглашение на первый раунд собеседования на iOS девелопера! Даже сперва не поверил своим глазам, лол.
Они сразу указали, что будет на интервью. Это каждодневная задача на Swift, что-то вроде сделайте запрос к API, распарсите полученный JSON и отобразите в UI. Собеседование будет на следующей неделе, так что я готовлюсь провалить его.
Что очень здорово, так это то, что в курсе, который я сейчас прохожу, как раз объясняются запросы и парсинг JSON в Swift
анон-левел-апер
[левел-ап]
[айти]
Моё приложение одобрили в AppStore!
анон-левел-апер
[левел-ап]
[айти]
Итак, моё первое собеседование на iOS девелопера.
Интервьюер дал мне наполовину готовый проект и озвучил задание: доделать его так, чтобы был следующий функционал.
Список элементов на экране из JSON, который уже есть, и кнопка - первый экран (скриншот, как должно быть).
По нажатию на кнопку текст на ней меняется, список элементов исчезает - второй экран.
Появляется уведомление, что отправка успешна, наверху есть кнопка <Back - третий экран.
Я спросил, правильно ли я понял, что надо сделать - и пересказал своими словами в чуть более технических деталях. Он подтвердил.
То есть мне надо было сделать декодинг JSON - для этого создать модель (в отдельном файле), по которой декодить - это я сделал в специальном сервисе. И сделать так, чтобы вью получало эти данные из класса сервиса, причём получало сразу.
Я создал поле в классе, которое будет хранить полученные декодированные данные и написал метод, который делает декодинг и присваивает данные полю класса.
Я сделал класс Observable object, а созданное поле сделал Published - чтобы все изменения сразу отображались во вью, которое будет иметь переменную типа этого класса.
Во вью я создал переменную типа этого класса и сделал её Observed object.
Чтобы данные сразу появлялись, едва вью загрузится на экран, я вызвал у вью модификатор onAppear(), и в нём вызвал метод класса (у переменной, которая Observed object), который делает декодинг и присваивает данные соответствующему полю класса.
Потом я вызвал List() в самом вью и передал туда данные из специального поля, которому они и присваиваются.
На экране появился список элементов, который требовался.
Далее я рассказал, как бы я сделал следующие экраны.
И на этом время закончилось.
Я слишком много говорил, объясняя, что я буду делать. Я говорил, когда кодил. Я иногда повторялся, сбивался. Из-за этого потратил слишком много времени. Говорить следовало лаконичнее.
Ну и какое-то время ушло на то, чтобы пофиксить ошибки, что-то дополнить по ходу, когда Xcode ругался. И объяснить подробно, что я делаю и почему -_-
Потом я рассказал мужу, как прошло интервью, и он сказал, что лучше не говорить, когда пишешь код, потому что по его опыту интервьюера, когда человек на собеседовании одновременно пишет код и говорит, он пишет заметно медленнее и не так хорошо, когда пишет молча и сосредоточенно, это отвлекает. Ну и что объяснять и уточнять хорошо, но не стоит слишком много и подробно объяснять, из-за времени.
Под конец собеседования я задал несколько вопросов, про команду, про организацию, и что бы чувак посоветовал начинающему iOS разработчику, помимо пет-проектов, чтобы расти и развиваться - на этот вопрос он ответил, что всегда полезно разбираться, как не просто писать код, но как именно писать хороший код - никогда не будет лишним.
Ничего не ожидаю от собеседования, и заранее смирился с любым результатом, потому что в худшем случае в моей жизни ничего не изменится Но было интересно и полезно получить опыт именно по iOS собеседованию. Хотя меня вообще удивило, что меня позвали на него без особого опыта, только с пет-проектом.
По курсу начал изучать Core Data в iOS, и что-то не очень легко идёт, не все вещи получается понять сразу.
анон-левел-апер
[левел-ап]
[айти]
После собеседования ответ пока не пришёл. Если отказ - ну ок. Если пригласят на следующий тур - хех, тогда мне придётся срочно вспоминать, как вращают бинарные деревья. Возможно, ещё и на Свифте. Меня устраивают оба варианта по разным причинам
Подал резюме ещё на несколько вакансий.
Почти закончил очередной модуль по курсу, по Core Data. Я сначала не сразу понял, чем это отличается от бэкенда, и было бы хорошо, если бы в самом начале объяснили чуть подробнее.
Тема для меня совершенно новая, так что потратил времени чуть больше, чем ожидал, потому что перечитывал/пересматривал, делал записки, гуглил непонятное. Но очень рад, что наконец познакомился с этой темой.
Но что не понравилось - некоторые задания и вопросы написаны левой пяткой, всё же в среднем курс более тщательно сделан. Например, в начале задания надо создать две сущности, скажем, Блюдо и Гость. А дальше по тексту вместо Блюда написано "Десерт".
Или они говорят: вот тут сделайте это, а где это "тут" - очень расплывчато.
И, по-моему, они не обновили раздаточный материал и некоторые моменты после выхода нового Xcode
[дыбр]
К нам идут зимние ливни!
По крайней мере, так говорит прогноз погоды и новости, обещая мощный циклон и подтопления. Сиэттл, судя по ним, вообще смыло.
Я уже приготовился, но сегодня не выпало ни капли. Ну вот завтра точно!
Зато вышел побегать и насладился красивым закатом
анон-левел-апер
[дыбр]
Когда просишь AI нарисовать тебе человека и указываешь отдельно, что у человека должно быть две руки и две ноги.
Но AI всё равно не всегда понимает, как это.
анон-левел-апер
Но AI всё равно не всегда понимает, как это
Чистая правда. А уж сколько он рисует порой пальцев....
Чистая правда. А уж сколько он рисует порой пальцев....
То слишком много, то слишком мало
[дыбр]
Зимний ливень пришёл! На один вечер пятницы После него все выходные яркое солнце и ползущие по части неба тёмные тяжёлые облака
Пошёл гулять, фотографировал
анон-левел-апер
[левел-ап]
[айти]
Пришёл отказ из того места, куда я собеседовался в прошлый понедельник.
Заканчиваю очередной модуль курса, там, где про данные в Swift. Cделал и отправил на проверку свой проект, проверяю проекты других участников, всего надо проверить 3, по списку того, что в проекте есть и как работает. Кто-то отсылает некомпилирующийся код, кто-то вообще пустой пост без проекта, а кто-то полную копипасту опубликованного далее по курсу решения
Вообще темы в этом модуле новые для меня, так что повторю-ка его ещё раз потом, проверю, насколько хорошо понял.
В книжке про то, как наш мозг учится, говорят о важности повторения того, что ты изучил, не просто перечитать, а убрать материал от глаз и честно попытаться всё вспомнить и объяснить. Рекомендуется так делать несколько раз, со всё увеличивающимися интервалами - это называется Spaced Repetition.
Половину дня льёт мелкий плотный дождь.
анон-левел-апер
Отредактировано (2024-11-26 01:08:30)
[левел-ап]
[айти]
Пришёл отказ из ещё одного места, куда подавался, но там я просто отправил резюме.
На этих выходных я увидел наконец своё приложение в AppStore и тут же понял, как же лоханулся: я взял и честно загрузил скриншоты с телефона, потому что при отправке приложения на ревью было поле для скриншотов с телефона! И они выглядят ниочёмно, потому что на телефоне у меня только настройки, а основное приложение на часах. И как пользователь, глядя на список настроек на телефоне, поймёт, что это приложение для часов, чтобы измерять твой пульс и подсказывать, усилить или ослабить темп?..
Из этих скриншотов непонятно, что вообще делает моё приложение
Скриншоты с часов у меня там тоже есть, но 1) чтобы их увидеть, надо развернуть секцию, а секцию надо сначала заметить 2) тоже не совсем понятно, что это за цифры и сообщения на экране -_- У меня, конечно, есть текст, который коротко и ёмко говорит о моём приложении, но текст сначала найди и прочитай, а картинку видно сразу.
У многих других приложений в App Store не скриншоты, а промо-картинки, где показано, как люди пользуются приложением, и для чего приложение вообще нужно, причём так, чтобы сразу было понятно и красиво, чтобы человек тоже захотел хотя бы попробовать.
И я понял, что я практически не задумывался о маркетинге. Хотя бы о том, как сделать приложение привлекательным или просто понятным для тех, кто ищет что-то близкое.
В итоге я занялся дизайном промо-скриншотов! Сначала взял было фото с бесплатных стоков, но там непонятно всё же, можно ли использовать их фотки, да ещё и отредактированные, в таких целях.
Решил нагенерить сам с помощью AI Я писал уже про ноги и пальцы, да...
В итоге остановился на гугловском Gemini (бесплатно он не рисует людей полностью) и Adobe Express, ими остался доволен.
Нагенерил людей, которые готовятся бегать, бегут медленно, бегут быстро, отдыхают после бега.
Следующим шагом было получить картинку Apple Watch, у которых на экране моё приложение, тут на помощь пришёл Rotato, туда же я и залил сгенерированные картинки как бэкграунд.
И последний шаг - подогнать картинку под нужный размер экрана (6.5 и 6.9 дюймов), с этим помог Picasso, у него есть приложение как раз для картинок для App Store. Ещё и разместил коротки текст на картинках, вроде "Поставь цель", "Оставайся в выбранной зоне пульса", и так далее
В итоге у меня теперь есть картинки, где показаны люди, как если бы они использовали моё приложение, и на каждой картинке большое изображение часов с приложением, подсказывающее, что оно делает и как его использовать.
Отправил снова в App Store (для обновления скриншотов надо было обновить версию самого приложения ), но ревью прошло очень быстро, и теперь моё приложение отображается как следует!
Я доволен.
анон-левел-апер