Finally, differentiable programming!
Здесь бы картинку прикрепить, где чувак пробирку держит, но к сожалению я уже прикрепил другую снизу... Недавно наткнулся на еще один классный пример компьютерной графики, использующий дифференцируемое программирование.
Дифференцируемое программирование, это такая парадигма, в рамках которой любая программа может быть продифференцирована. И здесь мой дружок пирожок, тебе безусловно потребуется знание calculus. Хотя, конечно в рамках этой парадигмы язык обычно содержит т.н. автоматическое дифференцирование (это когда достаточно бахнуть
А речь пойдет о такой прекрасной численной схеме, позволяющей симулировать упругие тела... ммм... Сама по себе идея Material Point Method не нова, например вот тут есть прекрасная реализация данного метода в 2D на c++. Подобный метод, к слову, использовала студия Дисней в создании своих мультиков. Да и в принципе в компьютерной графике это всё очень часто используется.
Заметили ведь что примеры в ссылке выше слегка всратые? Отметим этот немаловажный пункт, чтобы вернуться к нему немного позже.
Так вот, данный метод позволяет оперировать частицами с некоторыми заданными положениями и скоростями, и отслеживать их эволюцию во времени. Из этих частиц можно создавать различные "материалы", например песок или воду, задав некоторые констреинты (например коэффициенты жесткости или связи между двумя соседними частицами).
Но китайцы в своей статье пошли еще дальше и запилили Moving Least Squares Material Point Method, принцип работы которого вы и можете наблюдать на гифке ниже. Кроме того, они еще и умудрились уместить данную симуляцию в 88 строк кода (спрятав под ковер еще 10к строк в хедере в инклудах).
Здесь внимательный читатель спросит, собсна, а причем тут дифференциальное че то там? Теперь вспомним пример выше. Изначальный метод содержал некоторые неприятные особенности, например тела в таких симуляциях нельзя было разрезать, да и сам метод плохо работал, если поле скоростей частиц содержало разрывы.
А дифференцируемость моделей позволила задействовать процедуры оптимизации вроде градиентного спуска, так что все начало сходиться к нормальному результату уже спустя всего лишь десяток итераций. Китайцы к слову бахнули свой собственный "язык" DiffTaichi (на самом деле считай "бэкенд" на с++ а "фронтэнд" на вашем любимом языке 🐍). А в Swift for TensorFlow, который я использую для работы, так и вообще автодифференцирование встроено по умолчанию.
Данный пример (ниже на гифке) кстати не требует установки всего языка, достаточно скачать их пример и собрать его с помощью g++.
by @hw_code
Здесь бы картинку прикрепить, где чувак пробирку держит, но к сожалению я уже прикрепил другую снизу... Недавно наткнулся на еще один классный пример компьютерной графики, использующий дифференцируемое программирование.
Дифференцируемое программирование, это такая парадигма, в рамках которой любая программа может быть продифференцирована. И здесь мой дружок пирожок, тебе безусловно потребуется знание calculus. Хотя, конечно в рамках этой парадигмы язык обычно содержит т.н. автоматическое дифференцирование (это когда достаточно бахнуть
gradient(of: ...)
). Но всегда приятно примерно представлять о чем вообще речь то идет.А речь пойдет о такой прекрасной численной схеме, позволяющей симулировать упругие тела... ммм... Сама по себе идея Material Point Method не нова, например вот тут есть прекрасная реализация данного метода в 2D на c++. Подобный метод, к слову, использовала студия Дисней в создании своих мультиков. Да и в принципе в компьютерной графике это всё очень часто используется.
Заметили ведь что примеры в ссылке выше слегка всратые? Отметим этот немаловажный пункт, чтобы вернуться к нему немного позже.
Так вот, данный метод позволяет оперировать частицами с некоторыми заданными положениями и скоростями, и отслеживать их эволюцию во времени. Из этих частиц можно создавать различные "материалы", например песок или воду, задав некоторые констреинты (например коэффициенты жесткости или связи между двумя соседними частицами).
Но китайцы в своей статье пошли еще дальше и запилили Moving Least Squares Material Point Method, принцип работы которого вы и можете наблюдать на гифке ниже. Кроме того, они еще и умудрились уместить данную симуляцию в 88 строк кода (спрятав под ковер еще 10к строк в хедере в инклудах).
Здесь внимательный читатель спросит, собсна, а причем тут дифференциальное че то там? Теперь вспомним пример выше. Изначальный метод содержал некоторые неприятные особенности, например тела в таких симуляциях нельзя было разрезать, да и сам метод плохо работал, если поле скоростей частиц содержало разрывы.
А дифференцируемость моделей позволила задействовать процедуры оптимизации вроде градиентного спуска, так что все начало сходиться к нормальному результату уже спустя всего лишь десяток итераций. Китайцы к слову бахнули свой собственный "язык" DiffTaichi (на самом деле считай "бэкенд" на с++ а "фронтэнд" на вашем любимом языке 🐍). А в Swift for TensorFlow, который я использую для работы, так и вообще автодифференцирование встроено по умолчанию.
Данный пример (ниже на гифке) кстати не требует установки всего языка, достаточно скачать их пример и собрать его с помощью g++.
by @hw_code
Имплементация тригонометрических функций для программы «Аполлон 11»
Нижеприведенный код был написан Маргарет Хэмильтон в марте 1969, и использовался для вычисления тригонометрических функций, существенных для навигации командного и лунного посадочного модулей, первым высадивших людей на Луну.
Да, это та самая женщина, работавшая в НАСА и часто изображаемая с листингом её программного кода величиной в её рост 😎.
Кстати говоря, её строгий подход к программированию оказался настолько успешным, что неизвестно ни об одной программной ошибке, случавшейся во время пилотируемых миссий «Аполлон».
📌 Подробнее про код
👉 Также на гитхабе
by @hw_code
Нижеприведенный код был написан Маргарет Хэмильтон в марте 1969, и использовался для вычисления тригонометрических функций, существенных для навигации командного и лунного посадочного модулей, первым высадивших людей на Луну.
Да, это та самая женщина, работавшая в НАСА и часто изображаемая с листингом её программного кода величиной в её рост 😎.
Кстати говоря, её строгий подход к программированию оказался настолько успешным, что неизвестно ни об одной программной ошибке, случавшейся во время пилотируемых миссий «Аполлон».
📌 Подробнее про код
👉 Также на гитхабе
by @hw_code
Краткий обзор языков квантового программирования
Исторически первым таким языком стал язык QCL, или Quantum Computation Language (язык квантовых вычислений). Далее были попытки сделать ещё некоторые языки программирования для квантовых вычислений. На сегодняшний день глубокое развитие при поддержке государственных институтов Канады и США получил язык программирования Quipper, который основан на языке Haskell, дополняя его всем необходимым для решения специфических задач модели квантовых вычислений.
Как это ни странно, всё их множество также можно разделить на языки с императивной основой и на языки функциональные. Так, к императивным языкам квантового программирования относятся: квантовый псевдокод (это вообще был первый формализованный язык для квантового программирования, который, однако, остался только на бумаге), уже упомянутый QCL, затем язык Q и, наконец, язык qGCL (Quantum Guarded Command Language).
С другой стороны, к функциональным языкам квантового программирования относятся следующие: QFC и QPL (оба разработаны П. Селинджером, различаются только синтаксисом – первый является языком квантовых схем), QML (тоже, как ни странно, основан на языке Haskell), квантовое лямбда-исчисление и, собственно, язык Quipper.
Вся информация представлена также на таблице ниже. Однако, сюда не включены квантовые фреймворки на Python по типу [ссылка] или прочие изыски на других языках программирования, не получившие достаточного распространения.
by @hw_code
Исторически первым таким языком стал язык QCL, или Quantum Computation Language (язык квантовых вычислений). Далее были попытки сделать ещё некоторые языки программирования для квантовых вычислений. На сегодняшний день глубокое развитие при поддержке государственных институтов Канады и США получил язык программирования Quipper, который основан на языке Haskell, дополняя его всем необходимым для решения специфических задач модели квантовых вычислений.
Как это ни странно, всё их множество также можно разделить на языки с императивной основой и на языки функциональные. Так, к императивным языкам квантового программирования относятся: квантовый псевдокод (это вообще был первый формализованный язык для квантового программирования, который, однако, остался только на бумаге), уже упомянутый QCL, затем язык Q и, наконец, язык qGCL (Quantum Guarded Command Language).
С другой стороны, к функциональным языкам квантового программирования относятся следующие: QFC и QPL (оба разработаны П. Селинджером, различаются только синтаксисом – первый является языком квантовых схем), QML (тоже, как ни странно, основан на языке Haskell), квантовое лямбда-исчисление и, собственно, язык Quipper.
Вся информация представлена также на таблице ниже. Однако, сюда не включены квантовые фреймворки на Python по типу [ссылка] или прочие изыски на других языках программирования, не получившие достаточного распространения.
by @hw_code
Отсутствие одного «&» вызвало сбой в работе хромбуков
Из-за недавней ошибки в выпуске ChromeOS часть пользователей не смогла использовать свои хромбуки (вот интересно, их вообще кто-то использует, лол?).
В частности, как отметили в треде на Reddit, проблема, похоже, сводилась к отсутствию одного амперсанда в коде:
вместо
Это привело к тому, что обновленный ChromeOS не смог проверить пароли пользователей. Вот интересно, как данная «фича» вообще в прод попала в обход тестирования? Комментарии, как говорится, излишни.
ChromeOS обычно автоматически загружает обновления и затем переключается на новую версию после перезагрузки, вот поэтому пользователи, перезагрузившие свои устройства, внезапно столкнулись с их блокировкой.
Источник
@hw_code
Из-за недавней ошибки в выпуске ChromeOS часть пользователей не смогла использовать свои хромбуки (вот интересно, их вообще кто-то использует, лол?).
В частности, как отметили в треде на Reddit, проблема, похоже, сводилась к отсутствию одного амперсанда в коде:
if (key_data_.has_value() & !key_data_->label().empty()) {
вместо
if (key_data_.has_value() && !key_data_->label().empty()) {
Это привело к тому, что обновленный ChromeOS не смог проверить пароли пользователей. Вот интересно, как данная «фича» вообще в прод попала в обход тестирования? Комментарии, как говорится, излишни.
ChromeOS обычно автоматически загружает обновления и затем переключается на новую версию после перезагрузки, вот поэтому пользователи, перезагрузившие свои устройства, внезапно столкнулись с их блокировкой.
Источник
@hw_code
Лично для меня очень странно спрашивать такое у программиста, но допустим… Знакомы ли вы с комплексными числами?
Anonymous Poll
66%
Да, знаком с определением
17%
Да, знаю и применяю на практике
17%
Нет, я только про обеды знаю
Технологично и прогрессивно
увольняет сотрудников пермский стартап «Xsolla». На фото скрин письма СЕО данной «шарашки» – Александра Агапитова. Таким образом уволили уже 150 человек. Компания кстати работает в 200 странах и делает по 67 млн $ в год. Данный скрин кстати уже поднял кучу говна в этих ваших интернетах, от Пикабу и до каналов в телеграме.
И вот вроде бы что такого то? Людей увольняют постоянно, а тут хоть и уволили непонятно за что, но СЕО в другом сообщении уже обещал максимальный уровень поддержки: от компенсационных пакетов до привлечения кадровых агентств, чтобы следующий карьерный шаг уволенных был крутым и успешным.
Но осадочек какой-то все равно имеется, наверняка ведь никто не хотел выкладывать список уволенных в открытый доступ (который всё равно там оказался), чтобы никому репутацию не портить? Или это обиженный сотрудник всё слил? Что опять же нелогично, потому что данного сотрудника потом никто на работу не возьмет, по причине «нейронка сказала что ты лодырь и лентяй».
@hw_code
увольняет сотрудников пермский стартап «Xsolla». На фото скрин письма СЕО данной «шарашки» – Александра Агапитова. Таким образом уволили уже 150 человек. Компания кстати работает в 200 странах и делает по 67 млн $ в год. Данный скрин кстати уже поднял кучу говна в этих ваших интернетах, от Пикабу и до каналов в телеграме.
И вот вроде бы что такого то? Людей увольняют постоянно, а тут хоть и уволили непонятно за что, но СЕО в другом сообщении уже обещал максимальный уровень поддержки: от компенсационных пакетов до привлечения кадровых агентств, чтобы следующий карьерный шаг уволенных был крутым и успешным.
Но осадочек какой-то все равно имеется, наверняка ведь никто не хотел выкладывать список уволенных в открытый доступ (который всё равно там оказался), чтобы никому репутацию не портить? Или это обиженный сотрудник всё слил? Что опять же нелогично, потому что данного сотрудника потом никто на работу не возьмет, по причине «нейронка сказала что ты лодырь и лентяй».
@hw_code
Меня вынудили написать пост
Ну вынудили и вынудили... Так, о чем это я. А, вот. Помните тут недавно один иностранный ресурс стал доступен только по инвайтам. Многим в принципе всё равно на него, но я давно заметил что если хочешь нормально запускаться, то все эти ваши вц.ру или хабры это совсем не то что нужно.
Почему так? Главный минус ру комьюнити, а точнее их два, это неплатежеспособность и токсичность. Идею обосрут (даже, возможно, хорошую), да и смысла вообще покупать, если ломанут и выложат на какой нибудь 4пда. Стабильно, опять же, на канале со стартапами "тут" наблюдаю как минусуют питчи нормальных продуктов.
Я в принципе планировал там свои аппки продвигать ("когда" они выйдут, ха-ха), да и в целом никогда не знаешь потребуется ли тебе сообщество или нет, поэтому решил просто написать создателю на почту и попросить инвайт. И да, это работает, так просто. Вообще в принципе так и задумано, если ты адекватный, тебя пускают.
Поэтому вот совет, учите английский и постите свои продукты на нормальных площадках, реддит, индихакерс, продактхант и т.д. Там и советом помогут нормально, и позитивно встретят ваш продукт, а может даже и затраты окупите. И нервов будет меньше потрачено.
P.S. картинка просто в подтверждение моих слов, не хвастаюсь. Постов там все равно нет пока что.
by @hw_code
Ну вынудили и вынудили... Так, о чем это я. А, вот. Помните тут недавно один иностранный ресурс стал доступен только по инвайтам. Многим в принципе всё равно на него, но я давно заметил что если хочешь нормально запускаться, то все эти ваши вц.ру или хабры это совсем не то что нужно.
Почему так? Главный минус ру комьюнити, а точнее их два, это неплатежеспособность и токсичность. Идею обосрут (даже, возможно, хорошую), да и смысла вообще покупать, если ломанут и выложат на какой нибудь 4пда. Стабильно, опять же, на канале со стартапами "тут" наблюдаю как минусуют питчи нормальных продуктов.
Я в принципе планировал там свои аппки продвигать ("когда" они выйдут, ха-ха), да и в целом никогда не знаешь потребуется ли тебе сообщество или нет, поэтому решил просто написать создателю на почту и попросить инвайт. И да, это работает, так просто. Вообще в принципе так и задумано, если ты адекватный, тебя пускают.
Поэтому вот совет, учите английский и постите свои продукты на нормальных площадках, реддит, индихакерс, продактхант и т.д. Там и советом помогут нормально, и позитивно встретят ваш продукт, а может даже и затраты окупите. И нервов будет меньше потрачено.
P.S. картинка просто в подтверждение моих слов, не хвастаюсь. Постов там все равно нет пока что.
by @hw_code
Fileprivate vs private в Swift 5
Ключевые слова
Когда использовать fileprivate
Хотя данные ключевые слова практически идентичны, есть явная разница в вариантах их использования.
Когда использовать private
Ключевое слово
Как видно на картинке ниже, представление image view, объявленное
📝 Статья
@hw_code
Ключевые слова
fileprivate
и private
являются модификаторами доступа в Swift (наряду с internal
, public
, и open
). Эти ключевые слова позволяют ограничить доступ к частям вашего проекта из кода в других исходных файлах и модулях.Когда использовать fileprivate
Хотя данные ключевые слова практически идентичны, есть явная разница в вариантах их использования.
Fileprivate
ограничивает использование объекта в одном и том же исходном файле. Единственная причина, по которой вы будете использовать fileprivate
– это когда вам нужно получить доступ к своему объекту в одном файле из разных классов или структур.Когда использовать private
Ключевое слово
private
используется гораздо чаще и ограничивает использование объекта его объявлением и расширениями. Однако, расширения должны быть определены в одном файле. Другими словами, private
объекты не будут видны вне файла. Вы можете использовать это ключевое слово, чтобы предоставить минимальный код, необходимый для взаимодействия с объектом.Как видно на картинке ниже, представление image view, объявленное
fileprivate
, доступно в том же файле. Однако private
image view недоступен, поскольку он виден только внутри самого объекта.📝 Статья
@hw_code
Языки программирования, которые стоит рассмотреть к изучению в 2022 году
Можете конечно не соглашаться с автором, но статью почти наверняка будет полезно прочесть.
📌 Если кратко, то автор рекомендует следующие языки:
Javascript — Наиболее используемый, простой язык, имеет большое комьюнити.
(scripting, frontend, backend, ML)
Python — простой в изучении, имеет широкое применение.
(backend, ML, data science, visualization, scripting, hacking)
Dart — Используется в Android, iOS, Web App, Desktop/Laptop програмы, Linux, embedded. Flutter.
C# — Независимый от платформы, простой язык общего назначения, может использоваться для разработки приложений любого типа, разработки игр, VR, AR.
Go — Решает проблемы масштабируемости, простой элегантный код, легкий в освоении.
📝 Ссылка на статью
👋: 1К
@hw_code
Можете конечно не соглашаться с автором, но статью почти наверняка будет полезно прочесть.
📌 Если кратко, то автор рекомендует следующие языки:
Javascript — Наиболее используемый, простой язык, имеет большое комьюнити.
(scripting, frontend, backend, ML)
Python — простой в изучении, имеет широкое применение.
(backend, ML, data science, visualization, scripting, hacking)
Dart — Используется в Android, iOS, Web App, Desktop/Laptop програмы, Linux, embedded. Flutter.
C# — Независимый от платформы, простой язык общего назначения, может использоваться для разработки приложений любого типа, разработки игр, VR, AR.
Go — Решает проблемы масштабируемости, простой элегантный код, легкий в освоении.
📝 Ссылка на статью
👋: 1К
@hw_code
GitHub не будет блокировать российских разработчиков.
Решение мотивировано тем, что сервис хочет находится вне политки и конфликтов - «оставаться домом для разработчиков, где бы они не находились».
Сейчас GitHub запрещен в Крыму, Кубе, Иране, Северной Кореи и Сирии.
Решение мотивировано тем, что сервис хочет находится вне политки и конфликтов - «оставаться домом для разработчиков, где бы они не находились».
Сейчас GitHub запрещен в Крыму, Кубе, Иране, Северной Кореи и Сирии.
GitHub
Cut Russia from Github due to massive invasion of Ukraine · community · Discussion #12042
Russia launches massive invasion of Ukraine. Ukraine is a democratic sovereign country in Europe. ---added later--- https://twitter.com/nexta_tv/ https://twitter.com/hashtag/Ukraine?src=hashtag_cli...
Forwarded from Cosy Code
Привет! Админ сейчас занимается небольшим исследованием на тему этики ИИ автопилота автомобилей. Мы собираем данные о выборе, который должен сделать ИИ в момент, когда авария без жертв неизбежна.
Так что, кому не сложно, поучаствуйте в небольшом опросе из 14 простых вопросов в картинках о том, кого из кожаных мешков должен задавить сверхинтелект, и приоритету между категориями, кто наиболее важен, на ваш взгляд:)
https://docs.google.com/forms/d/e/1FAIpQLSfQOc2ThprVUH8-l4g00xBfmIfDJHln4X1BL9rsW03tVcS4cw/viewform
Если будут интересные результаты, естественно поделимся тут красивыми графиками)
Так что, кому не сложно, поучаствуйте в небольшом опросе из 14 простых вопросов в картинках о том, кого из кожаных мешков должен задавить сверхинтелект, и приоритету между категориями, кто наиболее важен, на ваш взгляд:)
https://docs.google.com/forms/d/e/1FAIpQLSfQOc2ThprVUH8-l4g00xBfmIfDJHln4X1BL9rsW03tVcS4cw/viewform
Если будут интересные результаты, естественно поделимся тут красивыми графиками)
Апдейты
Я тут подумал что возможно пора вернуться в телегу и что-нибудь сюда пописывать. Мне нравится в целом формат такого текстового блоггинга.
Собственно, к чему я. На днях я защитил докторскую, а еще меня взяли мидлом на Python разработку, поэтому я решил что можно будет в целом возобновить посты про всякие фишки языка и прочее.
Вас я попрошу накидать реактов каких-нибудь, чтобы я понял что вам это интересно да и в целом, остался ли кто-то в живых 😌
Я тут подумал что возможно пора вернуться в телегу и что-нибудь сюда пописывать. Мне нравится в целом формат такого текстового блоггинга.
Собственно, к чему я. На днях я защитил докторскую, а еще меня взяли мидлом на Python разработку, поэтому я решил что можно будет в целом возобновить посты про всякие фишки языка и прочее.
Вас я попрошу накидать реактов каких-нибудь, чтобы я понял что вам это интересно да и в целом, остался ли кто-то в живых 😌
Использование Enum вместо if-elif-else
Такой юзкейс, нужно принять строку, например X или Y или Z и вернуть 1 или 2 или 3. В таком случае, начинающий программист может написать что-то типа:
Программист с навыком повыше решил бы проблему так:
Да, можно было бы здесь и dict использовать. В принципе, не столь важно какому подходу вы следуете, если он работает. От себя замечу, что возможно я склонюсь в сторону классов, нежели словарей, по причине того, что классы проще контролировать, они более гибкие и лучше вписываются в объектно-ориентированный подход, который чаще всего используется на галерах.
@hw_code
Такой юзкейс, нужно принять строку, например X или Y или Z и вернуть 1 или 2 или 3. В таком случае, начинающий программист может написать что-то типа:
def points_per_shape(shape: str) -> int:
if shape == 'X':
return 1
elif shape == 'Y':
return 2
elif shape == 'Z':
return 3
else:
raise ValueError('Invalid shape')
Программист с навыком повыше решил бы проблему так:
from enum import Enum
class ShapePoints(Enum):
X = 1
Y = 2
Z = 3
def points_per_shape(shape: str) -> int:
return ShapePoints[shape].value
Да, можно было бы здесь и dict использовать. В принципе, не столь важно какому подходу вы следуете, если он работает. От себя замечу, что возможно я склонюсь в сторону классов, нежели словарей, по причине того, что классы проще контролировать, они более гибкие и лучше вписываются в объектно-ориентированный подход, который чаще всего используется на галерах.
@hw_code
Типа лонгрид вечерний, но скорее уже ночной.
Сегодня был первый день на галере, так называемый онбординг. Не думаю что в Европах работа программистом сильно отличается от того, что вы уже где то видели, хотя наверное и некоторые свои особенности тоже здесь присутствуют. Чтобы тебя приняли на работу тут, сперва нужно пройти собес (о чем я расскажу чуть позднее), потом присылают неформальный оффер, и начинается эпопея по сбору бумажек: мед. обследование, справка об обучении (законченном или текущем), диплом (если есть), справка с предыдущего места работы (тут нет понятия «трудовая книжка» в принципе), и еще чет по мелочи.
Меня заставили подписать кучу бумажек, прослушать кучу хрени на тему компании, её этики и правил, безопасности, и уже после поедания пиццы с будущими коллегами нас со вторым пайтон разрабом забрал ментор, а потом нам еще выдали служебный телефон на ведроиде и ноутбук hp, док станцию к нему и монитор. Как телефон так и ноут имеют миллион разных защит, в том числе например все шифруется, ничего ставить туда нельзя без разрешения айтишников, плюс в ноуте есть специальная дырка под карту с чипом (служащая как раз для шифрования, доступа к впн и электронной подписи документов), которая служит еще и пропуском в здание и в комнаты.
У меня прям какие то флешбэки со времен моей работы в гос. институте им. Духова в Москве (называемый еще ласковым словом «духовка»), хотя безусловно тут есть инет на рабочих компах и вообще гораздо больше свободы, но вот это ощущение мол «ты работаешь над тестированием ПО для секретного прототипа чего-то там» меня не то чтоб сильно радует. Ну да, ты работаешь за хорошую зп в прикольной фирме, но ноутбук все равно на винде 🤡. Видел я и сами железки, выглядят солидно и круто, может сфоткаю потом если разрешат. Еще у меня стол по высоте регулируется, можно например работать стоя. После академической работы это все вообще смотрится довольно бодро.
По факту, если отбросить все, то галера галере рознь. Гибкие условия работы означают что прийти можно ну прям в любое время… До 9 утра 🥲. Ну смотри, можно в 8. Или даже в 7. А переработки могут быть прямо включены в контракт. Типа да-да я согласен что руководство может попросить слегка задержаться на работе, и данные переработки могут быть «уже включены» в вашу зп. Ну, то есть, сверхурочная работа может не оплачиваться.
Завтра в общем поеду из Праги в Млада Болеслав за этой самой картой доступа, ибо тут они её не делают… Ну, хотя бы на машине отвезут и то радует. А впереди еще миллион тренингов. Чувствую себя ну прям как «кодер с токио». Или откуда он там. Тока из праги и без пиздежа школьника… Впрочем мем старый и наверное мало кто его уже помнит. Ну, как то так.
@hw_code
Сегодня был первый день на галере, так называемый онбординг. Не думаю что в Европах работа программистом сильно отличается от того, что вы уже где то видели, хотя наверное и некоторые свои особенности тоже здесь присутствуют. Чтобы тебя приняли на работу тут, сперва нужно пройти собес (о чем я расскажу чуть позднее), потом присылают неформальный оффер, и начинается эпопея по сбору бумажек: мед. обследование, справка об обучении (законченном или текущем), диплом (если есть), справка с предыдущего места работы (тут нет понятия «трудовая книжка» в принципе), и еще чет по мелочи.
Меня заставили подписать кучу бумажек, прослушать кучу хрени на тему компании, её этики и правил, безопасности, и уже после поедания пиццы с будущими коллегами нас со вторым пайтон разрабом забрал ментор, а потом нам еще выдали служебный телефон на ведроиде и ноутбук hp, док станцию к нему и монитор. Как телефон так и ноут имеют миллион разных защит, в том числе например все шифруется, ничего ставить туда нельзя без разрешения айтишников, плюс в ноуте есть специальная дырка под карту с чипом (служащая как раз для шифрования, доступа к впн и электронной подписи документов), которая служит еще и пропуском в здание и в комнаты.
У меня прям какие то флешбэки со времен моей работы в гос. институте им. Духова в Москве (называемый еще ласковым словом «духовка»), хотя безусловно тут есть инет на рабочих компах и вообще гораздо больше свободы, но вот это ощущение мол «ты работаешь над тестированием ПО для секретного прототипа чего-то там» меня не то чтоб сильно радует. Ну да, ты работаешь за хорошую зп в прикольной фирме, но ноутбук все равно на винде 🤡. Видел я и сами железки, выглядят солидно и круто, может сфоткаю потом если разрешат. Еще у меня стол по высоте регулируется, можно например работать стоя. После академической работы это все вообще смотрится довольно бодро.
По факту, если отбросить все, то галера галере рознь. Гибкие условия работы означают что прийти можно ну прям в любое время… До 9 утра 🥲. Ну смотри, можно в 8. Или даже в 7. А переработки могут быть прямо включены в контракт. Типа да-да я согласен что руководство может попросить слегка задержаться на работе, и данные переработки могут быть «уже включены» в вашу зп. Ну, то есть, сверхурочная работа может не оплачиваться.
Завтра в общем поеду из Праги в Млада Болеслав за этой самой картой доступа, ибо тут они её не делают… Ну, хотя бы на машине отвезут и то радует. А впереди еще миллион тренингов. Чувствую себя ну прям как «кодер с токио». Или откуда он там. Тока из праги и без пиздежа школьника… Впрочем мем старый и наверное мало кто его уже помнит. Ну, как то так.
@hw_code
Допустим, у вас есть 2ч в день после вашей 9-5 работы, как бы вы предпочли потратить это время?
P.S. множественные ответы отключил ибо, предполагается, что времени хватит только на что-то одно.
P.S. множественные ответы отключил ибо, предполагается, что времени хватит только на что-то одно.
Anonymous Poll
45%
Сторонние проекты: Saas, инди приложение, и т.д.
11%
Создание контента: Twitter, YouTube, Telegram и т.д.
11%
Фриланс
33%
Подготовка к будущему интервью на новую работу с большей зп
– А когда вы начали работать в этой компании?
– Когда мне пригрозили увольнением...
Сейчас я расскажу о том, как тут у меня обстоят дела. Неделю назад я получил карточку, и мы с командой начали спринт (у нас планирование обычно происходит по вторникам). Мой скрам мастер (не dungeon) выдал мне первые задачи 💁🏻♂️. Это включало получение доступов к разным сервисам, ознакомление с проектом и так далее. Оказалось, что просто знание Python недостаточно для работы программистом. Хотя на собеседованиях, кстати, обычно спрашивают именно про него. Но в работе в большой компании большую роль играют и софтскиллы.
Обычно мой рабочий день начинается с утреннего стэндапа 🤡 (он же дейли), затем общения с коллегами, различные дневные митинги, а также общение с коллегами и создание тикетов по необходимости.
Первый полноценный код можно написать через примерно три месяца работы. Но это не гарантировано. И это не так уж и плохо, если вы не ищете изнурительной работы с написанием огромного количества кода. Кстати, такое существует, обычно в маленьких фирмах или стартапах. Забавно, что даже моя компания продолжает набирать сотрудников, хотя мой коллега, который уже работает там более трёх месяцев, говорит, что до сих пор не писал ни строчки кода... Ну, что же, бывает.
Есть один нюанс. Как мне известно, сеньоры в нашей компании работают прям нонстопом. У них всегда много задач, созвонов, и им не хватает времени, чтобы что-то кому-то объяснять. Недавно мне дали задачу познакомиться с одним компонентом кода, я обратился к ответственному за него человеку, и он сказал, что он с коллегой недавно поняли, как переделать этот компонент, как нужно, и попросил подождать, пока оно находится в процессе разработки. Пояснять как оно работало раньше он не стал. 🤷🏻♂️
Что касается предыдущего опроса, я считаю, что везде есть свои нюансы, и сейчас не так просто попасть в нормальную разработку, хотя и создание собственного проекта (с надеждой на финансовый успех, конечно) тоже не просто. Если не хочется изобретать велосипед, проще, наверное, обучиться всему необходимому по нужному языку программирования, добавить парочку фреймворков, библиотек, внедрить асинхронность и мультипоточность, и тогда можно отправляться в плавание. Примерно 30% людей с этим согласны.
Если готовы рисковать, можно запастись деньгами, и попробовать создать что-нибудь свое. Риска конечно больше, но он оправдан попаданием в вожделенный "список" инди-хакеров, получением огромного количества денег и отказ от работы как таковой вообще.
P.S. как найду время, буду чистить канал от ботов. Также и кодинг мб обсудим.
@hw_code
– Когда мне пригрозили увольнением...
Сейчас я расскажу о том, как тут у меня обстоят дела. Неделю назад я получил карточку, и мы с командой начали спринт (у нас планирование обычно происходит по вторникам). Мой скрам мастер (не dungeon) выдал мне первые задачи 💁🏻♂️. Это включало получение доступов к разным сервисам, ознакомление с проектом и так далее. Оказалось, что просто знание Python недостаточно для работы программистом. Хотя на собеседованиях, кстати, обычно спрашивают именно про него. Но в работе в большой компании большую роль играют и софтскиллы.
Обычно мой рабочий день начинается с утреннего стэндапа 🤡 (он же дейли), затем общения с коллегами, различные дневные митинги, а также общение с коллегами и создание тикетов по необходимости.
Первый полноценный код можно написать через примерно три месяца работы. Но это не гарантировано. И это не так уж и плохо, если вы не ищете изнурительной работы с написанием огромного количества кода. Кстати, такое существует, обычно в маленьких фирмах или стартапах. Забавно, что даже моя компания продолжает набирать сотрудников, хотя мой коллега, который уже работает там более трёх месяцев, говорит, что до сих пор не писал ни строчки кода... Ну, что же, бывает.
Есть один нюанс. Как мне известно, сеньоры в нашей компании работают прям нонстопом. У них всегда много задач, созвонов, и им не хватает времени, чтобы что-то кому-то объяснять. Недавно мне дали задачу познакомиться с одним компонентом кода, я обратился к ответственному за него человеку, и он сказал, что он с коллегой недавно поняли, как переделать этот компонент, как нужно, и попросил подождать, пока оно находится в процессе разработки. Пояснять как оно работало раньше он не стал. 🤷🏻♂️
Что касается предыдущего опроса, я считаю, что везде есть свои нюансы, и сейчас не так просто попасть в нормальную разработку, хотя и создание собственного проекта (с надеждой на финансовый успех, конечно) тоже не просто. Если не хочется изобретать велосипед, проще, наверное, обучиться всему необходимому по нужному языку программирования, добавить парочку фреймворков, библиотек, внедрить асинхронность и мультипоточность, и тогда можно отправляться в плавание. Примерно 30% людей с этим согласны.
Если готовы рисковать, можно запастись деньгами, и попробовать создать что-нибудь свое. Риска конечно больше, но он оправдан попаданием в вожделенный "список" инди-хакеров, получением огромного количества денег и отказ от работы как таковой вообще.
P.S. как найду время, буду чистить канал от ботов. Также и кодинг мб обсудим.
@hw_code
Дрочим датаклассы 💅🏻
Долго мучился с вопросом, что делать с длинными постами. Не вижу смысла писать короткие примеры типа "почему плохо совать [] в дефолтный аргумент в функции". За годы тут я выработал отвращение к повторяющимся скучным постам в блогах, бесконечным вопросам в комментах вроде "бро, контент будет? или снова репост старого поста?" и т.д. Хорошо, что в тг теперь можно использовать нормальный inline code markdown. Поэтому здесь я заканчиваю предисловие, и мы начинаем.
Зачем нужны датаклассы?
Базовая фишка датаклассов - красивое представление объекта при выводе через
на экран вылезет что-то в духе:
Таким образом, нет необходимости писать самостоятельно
Создание датакласса.
При создании датакласса стоит отметить следующую вещь. Датаклассы в каком-то смысле абузят понятие классовой переменной (это которая обычно общая для всех инстансов), также добавляя необходимые нам классовые методы сравнения, и прочего.
Очевидно, что они потом добавляются в
Основные моменты.
Теперь кратко обсудим основные моменты. Можно добавлять дефолтные значения:
работает так только для простых типов. Для сложных вроде списков нам понадобится
поскольку мы хотим каждый раз создавать новый список, мы указываем функцию, которая будет создавать нам этот список. Если например мы захотим чтобы у каждого нового юзера автоматически создавался айди, мы снова вернемся к
ну и к имени тоже заодно докинул. Теперь например можно исключить список адресов из
Вывод с экрана:
Мы все еще можем использовать кастомные значения для параметров, указанных в аргументах:
Вывод:
Не буду сильно затягивать здесь. Если статьи не читают из-за их длины, то и длинные посты, возможно, читают с меньшим желанием. Предлагаю вам здесь навалить лойсов, и тогда ваши билды всегда будут успешными, 10 раз смерджитесь в мастер, а сеньор вам руку пожмет. Ну или сами себе руку пожмете, фигурально, как в том меме с Обамой. А я отчаливаю, но возможно, выложу и вторую версию. Посмотрим.
@hw_code
Долго мучился с вопросом, что делать с длинными постами. Не вижу смысла писать короткие примеры типа "почему плохо совать [] в дефолтный аргумент в функции". За годы тут я выработал отвращение к повторяющимся скучным постам в блогах, бесконечным вопросам в комментах вроде "бро, контент будет? или снова репост старого поста?" и т.д. Хорошо, что в тг теперь можно использовать нормальный inline code markdown. Поэтому здесь я заканчиваю предисловие, и мы начинаем.
Зачем нужны датаклассы?
Базовая фишка датаклассов - красивое представление объекта при выводе через
print
. Например, класс User
:class User:
def __init__(self, user_id: int, name: str) -> None:
self.user_id = user_id
self.name = name
user = User(user_id=1111, name="@hw_code")
print(user)
на экран вылезет что-то в духе:
<__main__.User object at 0x0000021492214BD0>
Таким образом, нет необходимости писать самостоятельно
__repr__
или __str__
(ну, по сути __repr__
, это легко проверить, если его перегрузить).Создание датакласса.
При создании датакласса стоит отметить следующую вещь. Датаклассы в каком-то смысле абузят понятие классовой переменной (это которая обычно общая для всех инстансов), также добавляя необходимые нам классовые методы сравнения, и прочего.
from dataclasses import dataclass
@dataclass
class User:
user_id: int
name: str
Очевидно, что они потом добавляются в
__init__
, следовательно данная запись аналогична предыдущей. Но теперь при вызове print
мы увидим что отрабатывает дефолтный __repr__
датакласса.Основные моменты.
Теперь кратко обсудим основные моменты. Можно добавлять дефолтные значения:
@dataclass
class User:
user_id: int
name: str
is_active: bool = True
работает так только для простых типов. Для сложных вроде списков нам понадобится
field
и default_factory
:@dataclass
class User:
user_id: int
name: str
is_active: bool = True
email_addresses: list[str] = field(default_factory=list)
поскольку мы хотим каждый раз создавать новый список, мы указываем функцию, которая будет создавать нам этот список. Если например мы захотим чтобы у каждого нового юзера автоматически создавался айди, мы снова вернемся к
default_factory
, но укажем внутри функцию, которая создаст нам этот айди:import random
def my_super_ultra_id_func() -> int:
return random.randint(0, 1000)
@dataclass
class User:
user_id: int = field(default_factory=my_super_ultra_id_func)
name: str = field(default="")
is_active: bool = True
email_addresses: list[str] = field(default_factory=list)
ну и к имени тоже заодно докинул. Теперь например можно исключить список адресов из
__repr__
, если мы не хотим показывать это пользователю (читай прикладному программисту, юзающему наш класс).@dataclass
class User:
user_id: int = field(default_factory=my_super_ultra_id_func)
name: str = field(default="")
is_active: bool = True
email_addresses: list[str] = field(default_factory=list, repr=False)
Вывод с экрана:
User(user_id=498, name='hw_code', is_active=True)
Мы все еще можем использовать кастомные значения для параметров, указанных в аргументах:
user = User(user_id=1, name="hw_code", is_active=False, email_addresses=["[email protected]"])
print(user)
Вывод:
User(user_id=1, name='hw_code', is_active=False)
Не буду сильно затягивать здесь. Если статьи не читают из-за их длины, то и длинные посты, возможно, читают с меньшим желанием. Предлагаю вам здесь навалить лойсов, и тогда ваши билды всегда будут успешными, 10 раз смерджитесь в мастер, а сеньор вам руку пожмет. Ну или сами себе руку пожмете, фигурально, как в том меме с Обамой. А я отчаливаю, но возможно, выложу и вторую версию. Посмотрим.
@hw_code