Здарова, фолкс! Велкам в мой канал.
Вас тут будет ждать познавательный (и не очень) контент на темы, в которых я имею (либо планирую получить) экспертизу:
- принятие решений
- иось
- здоровьице
- доведение своих мыслей до других людей
- абсолютно что угодно
Спасибо за решение уделить время мне и до скорого🚘
Вас тут будет ждать познавательный (и не очень) контент на темы, в которых я имею (либо планирую получить) экспертизу:
- принятие решений
- иось
- здоровьице
- доведение своих мыслей до других людей
- абсолютно что угодно
Спасибо за решение уделить время мне и до скорого
Please open Telegram to view this post
VIEW IN TELEGRAM
❤21❤🔥3
Привет всем! 🎩
Хочу сегодня немного поговорить о context switching'е.
Давайте представим ситуацию: у вас есть план на ближайшие 40 минут сфокусированно работать над чем-либо. Через 15 минут к вам прибегают со словами "можно тебя на 5-10 минут, обсудить кое-что". Вы отвлекаетесь, решаете вопрос, а после возвращаетесь к работе. Вот тут можно задать интересный вопрос: какой прогресс у изначальной задачи?
На моей практике ответом чаще всего будет нечто близкое к нулю. На это есть минимум 2 причины:
- если вы не успели дойти до логической точки, то усилия обнулились. Фактически начинаем заново;
- если успели, то понадобится время на восстановление контекста. Более того, это время может быть не меньше уже потраченного.
Бонусом получаете значительную трату вашей энергии - так как процесс "погружение в задачу - выход - погружение в иную задачу - выход - погружение обратно в исходную" не может быть бесплатным по определению.
Далее можно чуть-чуть проэкстраполировать и подумать о прогрессе, если таких ситуаций было штуки 3 за день. Скорее всего, получим дефолтное - заебались, силы кончились, а результата почти нет💧 .
Вообще тут неплохо было бы задуматься о причинах. Ведь зачастую вокруг нас есть люди, у которых чуть ли не главная обязанность - делать так, чтобы работа выполнялась. Фактически же выходит так, что эти люди чуть ли не самые главные вредители. Это очень странно. Подозреваю, что проблемы тут чисто физиологические - нет у нас врождённых навыков к стратегическому планированию. Мы хотим решить проблему здесь и сейчас, ну максимум с доставкой за 15 минут до двери. Соответственно, ожидать разумных для нас действий от других людей не стоит.
Можно ли с этим что-либо сделать? - Да, уберите физическую возможность вас отвлечь, закройте слек/телеграм/дверь. Мир не рухнет, если ваш любимый менеджер получит ответ на 20 минут позже, а даже если и рухнет, то навряд ли для вас.
Хочу сегодня немного поговорить о context switching'е.
Давайте представим ситуацию: у вас есть план на ближайшие 40 минут сфокусированно работать над чем-либо. Через 15 минут к вам прибегают со словами "можно тебя на 5-10 минут, обсудить кое-что". Вы отвлекаетесь, решаете вопрос, а после возвращаетесь к работе. Вот тут можно задать интересный вопрос: какой прогресс у изначальной задачи?
На моей практике ответом чаще всего будет нечто близкое к нулю. На это есть минимум 2 причины:
- если вы не успели дойти до логической точки, то усилия обнулились. Фактически начинаем заново;
- если успели, то понадобится время на восстановление контекста. Более того, это время может быть не меньше уже потраченного.
Бонусом получаете значительную трату вашей энергии - так как процесс "погружение в задачу - выход - погружение в иную задачу - выход - погружение обратно в исходную" не может быть бесплатным по определению.
Далее можно чуть-чуть проэкстраполировать и подумать о прогрессе, если таких ситуаций было штуки 3 за день. Скорее всего, получим дефолтное - заебались, силы кончились, а результата почти нет
Вообще тут неплохо было бы задуматься о причинах. Ведь зачастую вокруг нас есть люди, у которых чуть ли не главная обязанность - делать так, чтобы работа выполнялась. Фактически же выходит так, что эти люди чуть ли не самые главные вредители. Это очень странно. Подозреваю, что проблемы тут чисто физиологические - нет у нас врождённых навыков к стратегическому планированию. Мы хотим решить проблему здесь и сейчас, ну максимум с доставкой за 15 минут до двери. Соответственно, ожидать разумных для нас действий от других людей не стоит.
Можно ли с этим что-либо сделать? - Да, уберите физическую возможность вас отвлечь, закройте слек/телеграм/дверь. Мир не рухнет, если ваш любимый менеджер получит ответ на 20 минут позже, а даже если и рухнет, то навряд ли для вас.
Please open Telegram to view this post
VIEW IN TELEGRAM
💯15👍4🔥3❤2❤🔥1🙉1
Всем доброй ночи!
Расскажу немного об увольнениях😭 .
Неожиданно для себя выяснил, что я давно не уходил сам - везде со мной прекращали сотрудничество.
Первое место работы - беларуский продукт, на локальном рынке весьма известный.
Тут была типичная история с тем, что в компании начался кризис и она начала срезать траты. В Беларуси ТК не сильно ориентирован на работника, да и судебных прецедентов мало. Поэтому я тут обошёлся 2 зарплатами. Из смешных моментов - я собирался увольняться сам, но меня опередили на месяц. Из-за этого получил на 1 зарплату свыше своих ожиданий.
Второе место - польско-беларуский аутсорс, B2B контракт.
Здесь был довольно смешной кейс. Изначально компания нанимала меня себе в убыток. Заказчик был перспективный, а мой предшественник успел немного налажать. Поэтому, как я понимаю, стратегически решили закинуть человека с хорошей экспертизой.
В целом всё было отлично, но работы откровенно не хватало для двух иосеров.
Спустя 8 месяцев я стал наблюдать определённые звоночки: аутсорс мне стал предлагать другие “интересные” (мех) проекты, где по описанию было очевидно - работы будет ёбом. Я от всего тактично отказался. Спустя несколько недель узнаю, что на проекте я буду ещё 2 недели, а потом всё.
Контракт подразумевал notice period 7 дней. Учитывая, что моё ИП и компания в одной юрисдикции, то этот период был соблюдён.
Из минусов - не успел потратить отпуск.
Третье место - компания из Саудовской Аравии, B2B контракт.
Крайне интересный опыт в плане погружения в другую культуру(в восточные компании я теперь только за очень большие деньги) .
Работать в коллективе, где девушки преимущественно в парандже, а ребята подхалимные раздолбаи - крайне увлекательное мероприятие. Если кто-нибудь работал с индусами, то заметит очень большое сходство - люди в целом предпочитают делать видимость работы вместо самой работы. Нюанс в том, что люди на топовых позициях тоже всё это прекрасно знают и из-за этого увлекаются микроменеджментом.
В общем у СТО были ожидание, что я буду активно лидить и параллельно кабанчиком деливерить в прод. Если со вторым я более-менее справлялся, то от первого отнекивался как мог. В итоге спустя где-то полтора года мы сошлись на том, что я не сильно подхожу компании, и расстались.
Мне оплатили накопившийся 2-недельный отпуск, и сотрудничество на этом завершилось. Учитывая, какой филькиной грамотой был сам B2B контракт, то можно сказать повезло.
Все увольнения выглядят одинаково. Зачастую неожиданно назначают созвон, где среди участников есть неожиданные для вас люди - менеджер / hr / директор. Если в первый раз у меня было "плохое" предчуствие перед созвоном, то перед вторым и третьим я точно знал, что это конец.
Выводы - не прокрастинирием, а изучаем особенности работы по разным контрактам!
- в случае ТК зачастую можно выторговать неплохие для себя условия. Если вас вынуждают подписать увольнение под видом соглашения сторон с оплатой каких-нибудь 2 недель, то вас тут наёбывают;
- в случае B2B желательно не копить отпуск, он может сгореть. Идеал - считайте его 13-ой зарплатой и вносите в часовой рейт;
- B2B контракты - юридически слабый документ, если стороны находятся в разных юрисдикциях. Если в одинаковых, то рекомендую попробовать пропихнуть notice period побольше.
Из четвёртого и текущего места я планирую уже уходить по своей инициативе, но об этом позже.
Расскажу немного об увольнениях
Неожиданно для себя выяснил, что я давно не уходил сам - везде со мной прекращали сотрудничество.
Первое место работы - беларуский продукт, на локальном рынке весьма известный.
Тут была типичная история с тем, что в компании начался кризис и она начала срезать траты. В Беларуси ТК не сильно ориентирован на работника, да и судебных прецедентов мало. Поэтому я тут обошёлся 2 зарплатами. Из смешных моментов - я собирался увольняться сам, но меня опередили на месяц. Из-за этого получил на 1 зарплату свыше своих ожиданий.
Второе место - польско-беларуский аутсорс, B2B контракт.
Здесь был довольно смешной кейс. Изначально компания нанимала меня себе в убыток. Заказчик был перспективный, а мой предшественник успел немного налажать. Поэтому, как я понимаю, стратегически решили закинуть человека с хорошей экспертизой.
В целом всё было отлично, но работы откровенно не хватало для двух иосеров.
Спустя 8 месяцев я стал наблюдать определённые звоночки: аутсорс мне стал предлагать другие “интересные” (мех) проекты, где по описанию было очевидно - работы будет ёбом. Я от всего тактично отказался. Спустя несколько недель узнаю, что на проекте я буду ещё 2 недели, а потом всё.
Контракт подразумевал notice period 7 дней. Учитывая, что моё ИП и компания в одной юрисдикции, то этот период был соблюдён.
Из минусов - не успел потратить отпуск.
Третье место - компания из Саудовской Аравии, B2B контракт.
Крайне интересный опыт в плане погружения в другую культуру
Работать в коллективе, где девушки преимущественно в парандже, а ребята подхалимные раздолбаи - крайне увлекательное мероприятие. Если кто-нибудь работал с индусами, то заметит очень большое сходство - люди в целом предпочитают делать видимость работы вместо самой работы. Нюанс в том, что люди на топовых позициях тоже всё это прекрасно знают и из-за этого увлекаются микроменеджментом.
В общем у СТО были ожидание, что я буду активно лидить и параллельно кабанчиком деливерить в прод. Если со вторым я более-менее справлялся, то от первого отнекивался как мог. В итоге спустя где-то полтора года мы сошлись на том, что я не сильно подхожу компании, и расстались.
Мне оплатили накопившийся 2-недельный отпуск, и сотрудничество на этом завершилось. Учитывая, какой филькиной грамотой был сам B2B контракт, то можно сказать повезло.
Все увольнения выглядят одинаково. Зачастую неожиданно назначают созвон, где среди участников есть неожиданные для вас люди - менеджер / hr / директор. Если в первый раз у меня было "плохое" предчуствие перед созвоном, то перед вторым и третьим я точно знал, что это конец.
Выводы - не прокрастинирием, а изучаем особенности работы по разным контрактам!
- в случае ТК зачастую можно выторговать неплохие для себя условия. Если вас вынуждают подписать увольнение под видом соглашения сторон с оплатой каких-нибудь 2 недель, то вас тут наёбывают;
- в случае B2B желательно не копить отпуск, он может сгореть. Идеал - считайте его 13-ой зарплатой и вносите в часовой рейт;
- B2B контракты - юридически слабый документ, если стороны находятся в разных юрисдикциях. Если в одинаковых, то рекомендую попробовать пропихнуть notice period побольше.
Из четвёртого и текущего места я планирую уже уходить по своей инициативе, но об этом позже.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥19🆒5❤3 2👍1
Привет!
Я уехал в небольшой отпуск, но контент по расписанию. Расскажу кое-что о подписи B2B (они же ИП’шные) контрактов.
Сам по себе процесс прост:
- HR присылает контракт;
- всё ок — подписываете (эл. подпись / закорючка в pdf документе / получите и отошлёте физический документ)
- что-то не ок — согласовываете спорные пункты и подписываете (либо нет🏥 )
Тут меня ждал огромный сюрприз: в контрактах бывают ошибки, странные и откровенно бредовые пункты. У меня был предрассудок: в компаниях работают проф. юристы — значит и их работа будет выполнена хорошо. В случае ТК договоров это ещё может быть правдой, в случае B2B не совсем.
Для себя я согласовывал 4 контракта и пару раз прочитывал чужие. Вот что было:
Опечатки, ошибки, неверно введённые данные.
Тут ничего нового. Кривой адрес, налоговый номер - везде могут допустить ошибку. Внимательно проверяйте информацию и всё будет хорошо.
Некорректные пункты.
а) Было прописано, что я, будучи разработчиком, могу выполнять задачи, связанные с графикой и дизайном.
б) Авторские права на мои индивидуальные проекты будут принадлежать компании.
Если на первое ещё можно было закрыть глаза, то второе - откровенный бред. Подозреваю, что впихнули пункт по ошибке, собирая B2B контракт из ТК'шного (компания на 3000+ людей, лол), так как его молча вычеркнули.
Всратые ограничения.
Запрет параллельно оказывать услуги в сфере IT другим контрагентам, если они будут занимать свыше N часов в неделю. Ну вы поняли🐺 .
Зачастую всё более-менее согласовывается, но не всегда.
Был у меня офер в один из крупнеших европейских финтехов. Прислали контракт на подпись. Там всё было хорошо кроме одного пункта: компания могла штрафовать за перформанс, размер штрафа — месячный оклад. Каких-либо критериев и макс. кол-во штрафов прописано не было. Фактически компания имела бы право просто так херачить штраф хоть каждый день.
Начал обсуждать это с HR и знаете, что мне ответили? Вкратце — ничего не знаю, таких случаев не было, контракт поменять не можем. Как говорится, имаджинируете моё лицо, когда компания на 5000+ людей играет в "мы обосрались — мне пофиг, моя хата с краю".
В общем отказ от оффера. После мемное сообщение от HR в стиле "мы готовы были вас нанять, это вы сами отказались", мех😷 .
Не стесняйтесь задавать вопросы и предлагать правки. Контракты можно и нужно изменять: добавлять оговорённые устно плюшки, убирать непонятную ересь. Не всё получится, но навык ведения переговоров сам не прокачается.
Это ваша и только ваша ответственность удостовериться в адекватности контракта. Этот документ регламентирует все ваши отношения с компанией. Если лень, то заплатите внешнему юристу.
Я уехал в небольшой отпуск, но контент по расписанию. Расскажу кое-что о подписи B2B (они же ИП’шные) контрактов.
Сам по себе процесс прост:
- HR присылает контракт;
- всё ок — подписываете (эл. подпись / закорючка в pdf документе / получите и отошлёте физический документ)
- что-то не ок — согласовываете спорные пункты и подписываете (либо нет
Тут меня ждал огромный сюрприз: в контрактах бывают ошибки, странные и откровенно бредовые пункты. У меня был предрассудок: в компаниях работают проф. юристы — значит и их работа будет выполнена хорошо. В случае ТК договоров это ещё может быть правдой, в случае B2B не совсем.
Для себя я согласовывал 4 контракта и пару раз прочитывал чужие. Вот что было:
Опечатки, ошибки, неверно введённые данные.
Тут ничего нового. Кривой адрес, налоговый номер - везде могут допустить ошибку. Внимательно проверяйте информацию и всё будет хорошо.
Некорректные пункты.
а) Было прописано, что я, будучи разработчиком, могу выполнять задачи, связанные с графикой и дизайном.
б) Авторские права на мои индивидуальные проекты будут принадлежать компании.
Если на первое ещё можно было закрыть глаза, то второе - откровенный бред. Подозреваю, что впихнули пункт по ошибке, собирая B2B контракт из ТК'шного (компания на 3000+ людей, лол), так как его молча вычеркнули.
Всратые ограничения.
Запрет параллельно оказывать услуги в сфере IT другим контрагентам, если они будут занимать свыше N часов в неделю. Ну вы поняли
Зачастую всё более-менее согласовывается, но не всегда.
Был у меня офер в один из крупнеших европейских финтехов. Прислали контракт на подпись. Там всё было хорошо кроме одного пункта: компания могла штрафовать за перформанс, размер штрафа — месячный оклад. Каких-либо критериев и макс. кол-во штрафов прописано не было. Фактически компания имела бы право просто так херачить штраф хоть каждый день.
Начал обсуждать это с HR и знаете, что мне ответили? Вкратце — ничего не знаю, таких случаев не было, контракт поменять не можем. Как говорится, имаджинируете моё лицо, когда компания на 5000+ людей играет в "мы обосрались — мне пофиг, моя хата с краю".
В общем отказ от оффера. После мемное сообщение от HR в стиле "мы готовы были вас нанять, это вы сами отказались", мех
Не стесняйтесь задавать вопросы и предлагать правки. Контракты можно и нужно изменять: добавлять оговорённые устно плюшки, убирать непонятную ересь. Не всё получится, но навык ведения переговоров сам не прокачается.
Это ваша и только ваша ответственность удостовериться в адекватности контракта. Этот документ регламентирует все ваши отношения с компанией. Если лень, то заплатите внешнему юристу.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥23❤2
Бу! 👻 Испугался? Не бойся, это я — твоя рабочая суббота. Иди ко мне, посиди, поработай. Смотри на задачи, они смотрят на тебя. Давай посидим так вместе, пока твои глаза не устанут. Не хочешь? Ну почему же? 👋
Сегодня напишу, как определял, сколько часов в день я способен работать.
Сподвигло к этому следующее:
- восьмичасовой рабочий день казался скамом,
- я часто ощущал накопившуюся усталость к концу недели,
- удобный способ потестить работу интервалами (= помодоро).
Технически эксперимент был несложный: работу делаем в рамках сессий, фиксируем длительность одной и их кол-во за день. Записываем итоговое кол-во сессий за день и уровень усталости к концу дня. За основу взял значения: 50 минут и 6 сессий за день. Между сессиями отдых в районе 10 минут подальше от компьютера. Фактически получаем 5 рабочих в день и 1 час отдыха. Можно даже подумать, что мы обманываем работодателя — недостаёт 2ч до заветных 8!
Первые два дня всё было хорошо — работа шла плюс теперь я знал, сколько осталось работать. К концу третьего дня я сильно устал, четвёртый кое-как доработал, в пятый день я просто ебланил. Вывод очевиден — переоценил себя.
Далее я решил сократить длительность сессии до 45 минут. Теперь за день работал 4.5 часа вместо 5. И в результате … в пятницу я точно так же хуи пинал, но в четверг было легче, а среда была вполне обычным днём. Едем дальше, сокращаем кол-во сессий до 5. Теперь всё стало хорошо — спокойно завершил рабочую неделю в пятницу. Потом я ещё немного поиграл с длительностью сессий и их кол-вом. Вывод был одинаковый — мой предел стабильной умственной работы без выгорания составляет 4 часа в день. При превышении неминуемо возникала ситуация “я всё🙅♂️ , сегодня отдыхаем”.
На основании вышесказанного можно поинтересоваться: как тогда другие люди умудряются отрабатывать 8ч в день? — Никак. Они точно так же устают, выгорают, пинают и работают явно меньше 8ч.
Теперь я работаю почти всегда по таймеру. Чуть лучше понимаю причины усталости к концу недели. Вам же предлагаю спросить у проджекта/скрам мастера/менеджера: “почему мы бежим марафон спринтами😔 ?”
Сегодня напишу, как определял, сколько часов в день я способен работать.
Сподвигло к этому следующее:
- восьмичасовой рабочий день казался скамом,
- я часто ощущал накопившуюся усталость к концу недели,
- удобный способ потестить работу интервалами (= помодоро).
Технически эксперимент был несложный: работу делаем в рамках сессий, фиксируем длительность одной и их кол-во за день. Записываем итоговое кол-во сессий за день и уровень усталости к концу дня. За основу взял значения: 50 минут и 6 сессий за день. Между сессиями отдых в районе 10 минут подальше от компьютера. Фактически получаем 5 рабочих в день и 1 час отдыха. Можно даже подумать, что мы обманываем работодателя — недостаёт 2ч до заветных 8!
Первые два дня всё было хорошо — работа шла плюс теперь я знал, сколько осталось работать. К концу третьего дня я сильно устал, четвёртый кое-как доработал, в пятый день я просто ебланил. Вывод очевиден — переоценил себя.
Далее я решил сократить длительность сессии до 45 минут. Теперь за день работал 4.5 часа вместо 5. И в результате … в пятницу я точно так же хуи пинал, но в четверг было легче, а среда была вполне обычным днём. Едем дальше, сокращаем кол-во сессий до 5. Теперь всё стало хорошо — спокойно завершил рабочую неделю в пятницу. Потом я ещё немного поиграл с длительностью сессий и их кол-вом. Вывод был одинаковый — мой предел стабильной умственной работы без выгорания составляет 4 часа в день. При превышении неминуемо возникала ситуация “я всё
На основании вышесказанного можно поинтересоваться: как тогда другие люди умудряются отрабатывать 8ч в день? — Никак. Они точно так же устают, выгорают, пинают и работают явно меньше 8ч.
Теперь я работаю почти всегда по таймеру. Чуть лучше понимаю причины усталости к концу недели. Вам же предлагаю спросить у проджекта/скрам мастера/менеджера: “почему мы бежим марафон спринтами
Please open Telegram to view this post
VIEW IN TELEGRAM
❤21🔥15👍4🤔1
Пора написать чего и по технической теме. Поэтому расскажу малость про свифтовый Structured Concurrency.
Не буду углубляться в определения — для этого есть документация и книжка Никиты, почитайте, если ещё не. Сейчас я хочу наглядно показать, чем он хорош.
Решим задачу использования long polling’а. Этот механизм нужен для ситуации “необходимо дождаться чего-либо, периодически проверяя статус”.
Частый кейс применения — экран оплаты. Пользователь ввел платёжные данные, нажал оплатить и убежал подтверждать транзакцию в банк. аппке. Пока приложение ждёт результата транзакции, оно примерно раз в секунду отправляет запрос на сервер для получения статуса.
Вот реализация этой задачи (fyi — код рабочий, копируйте, если интересно):
и вот для сравнения реализация на базе GCD:
В случае SC мы описываем конкретно бизнес-логику: отправить запрос, подождать и отправить запрос снова.
GCD реализация содержит много утилитарного кода: таймер, какие-то вложенные замыкания. Если забудем отменить таймер, то привет утечки памяти.
Фактически SC даёт более высокоуровневую абстракцию. Это позволяет нам больше думать о непосредственно логике чем об утилитарной части.
Не буду углубляться в определения — для этого есть документация и книжка Никиты, почитайте, если ещё не. Сейчас я хочу наглядно показать, чем он хорош.
Решим задачу использования long polling’а. Этот механизм нужен для ситуации “необходимо дождаться чего-либо, периодически проверяя статус”.
Частый кейс применения — экран оплаты. Пользователь ввел платёжные данные, нажал оплатить и убежал подтверждать транзакцию в банк. аппке. Пока приложение ждёт результата транзакции, оно примерно раз в секунду отправляет запрос на сервер для получения статуса.
Вот реализация этой задачи (fyi — код рабочий, копируйте, если интересно):
enum PaymentState {
case pending
case failed
case success
}
func performPaymentRequest() async throws -> PaymentState {
// Эмулируем долгий сетевой запрос
try await Task.sleep(for: .seconds(1))
let randomNumber = Int.random(in: 0...1)
if randomNumber == 1 {
return .success
} else {
return .pending
}
}
func makePayment() async throws {
var shouldPerformPolling = true
let pollingInterval: Duration = .seconds(2)
while shouldPerformPolling {
let paymentState = try await performPaymentRequest()
shouldPerformPolling = (paymentState == .pending)
if shouldPerformPolling {
try await Task.sleep(for: pollingInterval)
}
}
}
и вот для сравнения реализация на базе GCD:
func performPaymentRequest(completion: @escaping (Result<PaymentState, Error>) -> Void) {
// Эмулируем долгий сетевой запрос
DispatchQueue.global().asyncAfter(deadline: .now() + 1.0) {
let randomNumber = Int.random(in: 0...1)
if randomNumber == 1 {
completion(.success(.success))
} else {
completion(.success(.pending))
}
}
}
func makePayment() {
let pollingInterval: TimeInterval = 2.0
let timer = DispatchSource.makeTimerSource(queue: DispatchQueue.global())
timer.schedule(deadline: .now(), repeating: pollingInterval)
timer.setEventHandler {
performPaymentRequest { result in
switch result {
case .success(let paymentState):
if paymentState == .pending {
return
} else {
timer.cancel()
}
case .failure(let error):
timer.cancel()
}
}
}
timer.resume()
}
В случае SC мы описываем конкретно бизнес-логику: отправить запрос, подождать и отправить запрос снова.
GCD реализация содержит много утилитарного кода: таймер, какие-то вложенные замыкания. Если забудем отменить таймер, то привет утечки памяти.
Фактически SC даёт более высокоуровневую абстракцию. Это позволяет нам больше думать о непосредственно логике чем об утилитарной части.
🔥19👍6👏5✍1
Расскажу про типичную ловушку мигранта в Европу — релокация по рабочей визе.
Начинается она с того, что человек получает предложение поработать в какой-нибудь богатой стране Европы. Зарплата при этом будет на уровне 3-6к евро.
Вообще звучит неплохо, соглашаемся, приезжаем и видим следующее:
- зарплата в контракте гроссом. Вычитаем из неё 40%,
- аренда дорогая. 30-50% от остатка после налогов просто исчезает,
- еда дороже, услуги тоже (с заметно худшим качеством).
Всё это приводит к тому, что на выходе остаётся каких 0-20% от зарплаты (той скромной, после налогов🤡 ).
На этом этапе я никого не удивлю. Дальше начинается самое веселье!
1. Рабочая виза — узаконенное рабство👮 .
Что-то пошло не так: не умеете в копроративные игры, подкачали софты, не справились с задачами(почти исключено, кста) — получаете увольнение с необходимостью поиска работы за месяц (за три, если blue card). Сам поиск займёт 1-6 месяцев. Не нашли — едьте домой.
2. Дорогая аренда. Открываем ипотечный калькулятор и видим: сумма равна (или даже меньше) ежемесячного платежа.
Что в такой ситуации можно сделать? Правильно, берём ипотеку! Зачем платить дяде, когда можно за своё.
3. Может возникнуть желание поменять/купить машину.
Опять же кредиты недорогие, а машины хорошие. Почему бы и нет.
4. Первые пару лет — это бесконечный список дел.
В таких условиях выдохнуть, стратегически подумать о ситуации будет невероятно тяжело. Даже если и получится, то возможные пути решения будут зачастую пугать и демотивировать.
Фактически получаем следующую и весьма вероятную картину — чистых денег мало, а долговых обязательств много. Человек может добровольно загнать себя в жёсткие рамки жизни.
При всём этом чувствовать себя будет неплохо, но вещи типа "полгодика отдохнуть от работы", "поменять профессию" будут даваться тяжело, так как благосостояние и даже сама возможность пребывания будет завязана на работу.
Можно ли из этого вырваться, а лучше не попадать? Да, безусловно, но это будет тяжело.
Собственно поэтому я и зову такую миграцию ловушкой. Такие дела☕️ , ребята!
Начинается она с того, что человек получает предложение поработать в какой-нибудь богатой стране Европы. Зарплата при этом будет на уровне 3-6к евро.
Вообще звучит неплохо, соглашаемся, приезжаем и видим следующее:
- зарплата в контракте гроссом. Вычитаем из неё 40%,
- аренда дорогая. 30-50% от остатка после налогов просто исчезает,
- еда дороже, услуги тоже (с заметно худшим качеством).
Всё это приводит к тому, что на выходе остаётся каких 0-20% от зарплаты (той скромной, после налогов
На этом этапе я никого не удивлю. Дальше начинается самое веселье!
1. Рабочая виза — узаконенное рабство
Что-то пошло не так: не умеете в копроративные игры, подкачали софты, не справились с задачами
2. Дорогая аренда. Открываем ипотечный калькулятор и видим: сумма равна (или даже меньше) ежемесячного платежа.
Что в такой ситуации можно сделать? Правильно, берём ипотеку! Зачем платить дяде, когда можно за своё.
3. Может возникнуть желание поменять/купить машину.
Опять же кредиты недорогие, а машины хорошие. Почему бы и нет.
4. Первые пару лет — это бесконечный список дел.
В таких условиях выдохнуть, стратегически подумать о ситуации будет невероятно тяжело. Даже если и получится, то возможные пути решения будут зачастую пугать и демотивировать.
Фактически получаем следующую и весьма вероятную картину — чистых денег мало, а долговых обязательств много. Человек может добровольно загнать себя в жёсткие рамки жизни.
При всём этом чувствовать себя будет неплохо, но вещи типа "полгодика отдохнуть от работы", "поменять профессию" будут даваться тяжело, так как благосостояние и даже сама возможность пребывания будет завязана на работу.
Можно ли из этого вырваться, а лучше не попадать? Да, безусловно, но это будет тяжело.
Собственно поэтому я и зову такую миграцию ловушкой. Такие дела
Please open Telegram to view this post
VIEW IN TELEGRAM
Привет-привет! 👋
Последний пост был аж в ноябре.
Обойдёмся без долгих оправданий — было лень, я уставал, а хотелось успеть "сделать всё". Для последнего я знаю только один рабочий способ: нужно срезать хотелки.
Математически это работает просто. Ресурс ограничен(и конечен) , список дел разрастается до немыслимых размеров буквально за полчаса-час и сокращается не быстро. Можно и нужно идти в сторону увеличения ресурса, но это работа вдолгую и каких-то сверхрезультатов не ждите. А вот сократить список дел и чутка зачиллиться можно прямо сейчас.
Эта идея может дать неожиданные профиты. Кроме "меньше стресса", "больше сил", "уделяю время себе" есть шанс обнаружить, что и кол-во выполняемых дел увеличилось. Произошло же это потому, что перестали постоянно ебать себе голову с "успеть всё", а начали делать.
И конечно это работает при понимании своих хотелок. Если их нет, а жизнь немного "на автопилоте", то возможно такой подход станет оправданием бесконечной прокрастинации. Было и было!🛌
Последний пост был аж в ноябре.
Обойдёмся без долгих оправданий — было лень, я уставал, а хотелось успеть "сделать всё". Для последнего я знаю только один рабочий способ: нужно срезать хотелки.
Математически это работает просто. Ресурс ограничен
Эта идея может дать неожиданные профиты. Кроме "меньше стресса", "больше сил", "уделяю время себе" есть шанс обнаружить, что и кол-во выполняемых дел увеличилось. Произошло же это потому, что перестали постоянно ебать себе голову с "успеть всё", а начали делать.
И конечно это работает при понимании своих хотелок. Если их нет, а жизнь немного "на автопилоте", то возможно такой подход станет оправданием бесконечной прокрастинации. Было и было!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥26🤝10 6
Привет всем! ☕️
Давненько ничего не писал. Што ш - было и было. Начался WWDC 25, а у меня естьбесполезная привычка смотреть записи и тыкать палкой в новые фичи.
Не знаю, какой там рак на горе свитнул, но Эпплы сделали что-то реально прикольное и полезное - реализовали макрос💪 ! Работает он для: контроллеров, вьюх и коллекций.
При обновлении модели у контроллера вызывается метод
В случае UIView вызовется
Поддерживается вложенность. Внутренние классы придётся пометить макросом, структуры заработают сразу(что ожидаемо, так как те же Int'ы тоже структуры)
Бэкпорт до iOS 18(скомпилируется и на iOS 17, лол) , но нужно добавить флажок
Загрузить и потыкать компилирующиеся примеры можно здесь.
Давненько ничего не писал. Што ш - было и было. Начался WWDC 25, а у меня есть
Не знаю, какой там рак на горе свитнул, но Эпплы сделали что-то реально прикольное и полезное - реализовали макрос
Observable для UIKit'а При обновлении модели у контроллера вызывается метод
viewWillLayoutSubviews.
class SampleViewController: UIViewController {
@IBOutlet var counterLabel: UILabel!
private let counterModel = Counter()
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
counterLabel.text = "\(counterModel.value)"
}
}
В случае UIView вызовется
layoutSubviews
class CounterView: UIView {
private let counterModel = Counter()
private let label = UILabel()
override init(frame: CGRect) { ... }
override func layoutSubviews() {
super.layoutSubviews()
label.text = "\(counterModel.value)"
}
}
Поддерживается вложенность. Внутренние классы придётся пометить макросом, структуры заработают сразу
@Observable
class Counter {
var value: Int = 0
let innerModelClass = InnerModel()
var innerModelStruct = InnerModel2()
}
@Observable
class InnerModel {
var value: Int = 0
}
struct InnerModel2 {
var value: Int = 0
}
Бэкпорт до iOS 18
UIObservationTrackingEnabled = YES в info.plist. Загрузить и потыкать компилирующиеся примеры можно здесь.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤18🔥12⚡5🤡1
Сегодня будем учиться простой и правильной установке программ на мак!
Иногда вижу, как люди тратят на это неприлично много времени. Поэтому давайте раскажу о варианте поэффективнее👍 .
Из коробки у нас есть 2 способа:
1) аппстор для мака,
2) скачать и установить вручную.
Обе опции довольно всратые. В сторе много чего нет, а в 2к25 искать установщики в интернете уныло🏥 .
К счастью существует решение - homebrew. Это консольная утилита.
С её помощью я ставлю:
- обычные программы типа телеги, зума, слэка, дискорда
- консольные рабочие утилиты (cocoapods, xcodegen, go, java и т.д.)
- рабочие программы установщик которых как правило находится где-нибудь на странице релизов гитхаба (xcodes)
Для установки нужно запустить терминал и выполнить:
Для установить аппки нужно знать её имя внутри хоумбрю. Получить его можно несколькими способами:
- в терминале запустить
- воспользоваться поиском на сайте brew.sh
- запросом в гугл(мой выбор)
- (внезапно) спросить у чата гпт - пример
Узнав имя, нам достаточно запустить команду
Не всё можно установить таким образом. Хоть хоумбрю дефакто и стал стандартом, но находятся аппки, которые нужно устанавливать вручную💧 .
Процесс установки может показаться чутка тяжеловатым, ещё и терминал использовать надо. В действительности процесс занимает у меня около минуты.
Иногда вижу, как люди тратят на это неприлично много времени. Поэтому давайте раскажу о варианте поэффективнее
Из коробки у нас есть 2 способа:
1) аппстор для мака,
2) скачать и установить вручную.
Обе опции довольно всратые. В сторе много чего нет, а в 2к25 искать установщики в интернете уныло
К счастью существует решение - homebrew. Это консольная утилита.
С её помощью я ставлю:
- обычные программы типа телеги, зума, слэка, дискорда
- консольные рабочие утилиты (cocoapods, xcodegen, go, java и т.д.)
- рабочие программы установщик которых как правило находится где-нибудь на странице релизов гитхаба (xcodes)
Для установки нужно запустить терминал и выполнить:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Для установить аппки нужно знать её имя внутри хоумбрю. Получить его можно несколькими способами:
- в терминале запустить
brew search app_name- воспользоваться поиском на сайте brew.sh
- запросом в гугл
homebrew app_name - (внезапно) спросить у чата гпт - пример
Узнав имя, нам достаточно запустить команду
brew install app_name, подождать завершения и можно пользоваться. Не всё можно установить таким образом. Хоть хоумбрю дефакто и стал стандартом, но находятся аппки, которые нужно устанавливать вручную
Процесс установки может показаться чутка тяжеловатым, ещё и терминал использовать надо. В действительности процесс занимает у меня около минуты.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17❤4👍1
Пепега Девелопмент
Сегодня будем учиться простой и правильной установке программ на мак! Иногда вижу, как люди тратят на это неприлично много времени. Поэтому давайте раскажу о варианте поэффективнее 👍 . Из коробки у нас есть 2 способа: 1) аппстор для мака, 2) скачать и установить…
Media is too big
VIEW IN TELEGRAM
Вот пример установки постмана. Заняло секунд тридцать 😎
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17❤1👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Нельзя просто взять и перестать хекать со стабильности SwiftUI ☕️
Please open Telegram to view this post
VIEW IN TELEGRAM
💯8🤣5😁2
Приветы всем!
Как-то не доходили руки до постов на тему тулинга. Што ш, будем сегодня разбираться, как завести иосные проекты в курсоре!🚘
Начнём издалека и вспомним, что Apple нам так-то выкатили Swift Language Server Protocol. Эта вещица позволяет наделить любой редактор возможностью понимать свифтовый код.
Очень грубо говоря - эта штука умеет взять все файлики проекта, скормить его компилятору и подвестить нам ошибки. Есть только один нюанс - она нихрена не знает про системные фреймворки. Всякие
И это по факту полная руина попыток сбежать из икскода. Мы можем писать на свифте в том же VS Code, но не можем писать под иос😤 .
Чуть позже кто-то весьма умный заметил, что современные проекты уже давно не набор файлов, собирающиеся компилятором в бинарник. Сейчас везде целые билд системы. Они знают как запускать код, его тесты, какие есть зависимости и откуда они тянутся.
Так появился Build Server Protocol. Если LSP мог предоставить нам автокомплит только в рамках существующего кода, то BSP уже знает буквально всё о нашем проекте и соотвественно уровень автокомплита совершенно иной.
Пару лет назад кто-то обнаружил поддержку BSP в Xcode. Так появился проект xcode-build-server. Это позволило наконец иметь нормальный автокомплит в других редакторах. Ничего более он не умеет, но многим уже и этого достаточно. Я пытался его использовать годик назад, но как-то не срослось.
И вот недавно увидел проект Sweetpad. Это расширение для VS Code. Он умеет не только показывать хороший автокомплит, но и полноценно запускать проект без захода в икскод.
Сегодня решил дать ему шанс и поработал весь день из курсора.
Вкратце - заебись🎧 .
С кайфом поработал целый день. В икскод заходил только для дебага. Вообще и дебаг должен был нормально работать - я проверял на тестовом проекте. Но не так нет, на моём проекте дебаг не то чтобы сильно полезная вещь.
Кто ещё не понял - эта херня очень сильно бустит возможности вайбкодерства в курсоре. Если раньше нейронка генерировала код исключительно на основе текста, то теперь курсор может понять, что скомпилируется, что нет и внести соответствующие правки.
Такие дела!☕️
Как-то не доходили руки до постов на тему тулинга. Што ш, будем сегодня разбираться, как завести иосные проекты в курсоре!
Начнём издалека и вспомним, что Apple нам так-то выкатили Swift Language Server Protocol. Эта вещица позволяет наделить любой редактор возможностью понимать свифтовый код.
Очень грубо говоря - эта штука умеет взять все файлики проекта, скормить его компилятору и подвестить нам ошибки. Есть только один нюанс - она нихрена не знает про системные фреймворки. Всякие
DispatchQueue.main.async и т.д. для него выглядит как бред сумашедшего. И это по факту полная руина попыток сбежать из икскода. Мы можем писать на свифте в том же VS Code, но не можем писать под иос
Чуть позже кто-то весьма умный заметил, что современные проекты уже давно не набор файлов, собирающиеся компилятором в бинарник. Сейчас везде целые билд системы. Они знают как запускать код, его тесты, какие есть зависимости и откуда они тянутся.
Так появился Build Server Protocol. Если LSP мог предоставить нам автокомплит только в рамках существующего кода, то BSP уже знает буквально всё о нашем проекте и соотвественно уровень автокомплита совершенно иной.
Пару лет назад кто-то обнаружил поддержку BSP в Xcode. Так появился проект xcode-build-server. Это позволило наконец иметь нормальный автокомплит в других редакторах. Ничего более он не умеет, но многим уже и этого достаточно. Я пытался его использовать годик назад, но как-то не срослось.
И вот недавно увидел проект Sweetpad. Это расширение для VS Code. Он умеет не только показывать хороший автокомплит, но и полноценно запускать проект без захода в икскод.
Сегодня решил дать ему шанс и поработал весь день из курсора.
Вкратце - заебись
С кайфом поработал целый день. В икскод заходил только для дебага. Вообще и дебаг должен был нормально работать - я проверял на тестовом проекте. Но не так нет, на моём проекте дебаг не то чтобы сильно полезная вещь.
Кто ещё не понял - эта херня очень сильно бустит возможности вайбкодерства в курсоре. Если раньше нейронка генерировала код исключительно на основе текста, то теперь курсор может понять, что скомпилируется, что нет и внести соответствующие правки.
Такие дела!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤13👍6🔥4
This media is not supported in your browser
VIEW IN TELEGRAM
Вы знали, что Swift можно использовать для написания скриптов? 💡
Понадобилось написать одну мелочёвку, но на обычных скриптовых языках я пишу редко, поэтому прокрастинировал недельки три над идеей.
Только вчера вот вспомнил, что ведь и свифт можно под такие нужды использовать🏥 .
Всё оказалось очень просто: создать файл, выставить права запуска и гооооол😎 !
Понадобилось написать одну мелочёвку, но на обычных скриптовых языках я пишу редко, поэтому прокрастинировал недельки три над идеей.
Только вчера вот вспомнил, что ведь и свифт можно под такие нужды использовать
Всё оказалось очень просто: создать файл, выставить права запуска и гооооол
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥6❤2👏1😍1
Приветы всем! Расскажу сегодня про одну неофициальную фичу Свифта.
Пусть у нас есть 2 протокола, у которых, так уж вышло, есть одинаковый по названию метод.
И мы хотим иметь 2 различные реализации этого метода в 1 классе:
Для решения этой задачи можно применить аттрибут @_implements(ProtoName, ProtoMethod). Получится так:
Далее при использовании сущности под соотвующим интерфейсом у нас будет меняться вывод:
Аттрибут не является приватным (= запрещённым) API. Это фича на уровне компилятора. Единственная опасность – отсутствие гарантий выпила в след. версии компилятора(что кмк фигня) .
Очевидно такие вещи не нужно юзать по любому поводу. Идеальное решение – конечно же переименовать метод. Только это не всегда возможно: протокол может идти из библиотеки, он может юзаться в 100500 местах(рефакторинг в икскоде, гы) либо нам просто лень 💡 .
Пусть у нас есть 2 протокола, у которых, так уж вышло, есть одинаковый по названию метод.
protocol A {
func kek()
}
protocol B {
func kek()
}
И мы хотим иметь 2 различные реализации этого метода в 1 классе:
class Pepega: A, B {
func kekForA() { print("a") }
func kekForB() { print("b") }
}
Для решения этой задачи можно применить аттрибут @_implements(ProtoName, ProtoMethod). Получится так:
class Pepega: A, B {
@_implements(A, kek())
func kekForA() { print("a") }
@_implements(B, kek())
func kekForB() { print("b") }
}
Далее при использовании сущности под соотвующим интерфейсом у нас будет меняться вывод:
let pepega = Pepega()
let a = pepega as A
let b = pepega as B
a.kek() // тут будет a
b.kek() // тут уже будет b
Аттрибут не является приватным (= запрещённым) API. Это фича на уровне компилятора. Единственная опасность – отсутствие гарантий выпила в след. версии компилятора
Очевидно такие вещи не нужно юзать по любому поводу. Идеальное решение – конечно же переименовать метод. Только это не всегда возможно: протокол может идти из библиотеки, он может юзаться в 100500 местах
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥2👏1😨1
