1. JavaScript / Говнокод #27631

    −1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    function* foo2() {
    	yield 2;
    	yield 3;
    }
    
    function* foo() {
       yield 1;
    
       yield* foo2();
    	
       yield 4;
    }
    
    function main() {
        for (const o of foo()) {
            print(o);
        }
    
        print("done.");
    }

    продолжаем "наговнокодить". Добавил "елдак" со "звездой". Где тут наши препроцессорописатели.. дайте аналог на C/C++.

    Запостил: ASD_77, 31 Августа 2021

    Комментарии (93) RSS

    • Сракер
      Ответить
    • А где дампик и SEO-пост?
      Ответить
    • И что этот "едлак" со "звездочкой" делает? Не заебало еще высирать по говнокоду на какую-то маловажную и малоинтересную хуйню?
      Ответить
      • >что
        https://learn.javascript.ru/generators
        Ответить
        • https://wandbox.org/permlink/aqmURbit8xUDzpzU

          И нахуя это? У меня в контроллере такой хуйни нет, и я не очень-то понимаю, нахуя это надо. Но намакроебить можно, да
          Ответить
          • Корутины в современных языках используются для ленивости или для написания последовательного кода без использования потоков
            Ответить
            • > последовательного кода без использования потоков

              Задачки в духе "собери 1000 семплов с АЦП, зожми их и отправь по UDP" и без корутин норм смотрятся. А для чего-то более сложного и длинного можно и тред поднять, контроллеру не надо обрабатывать тыщи клиентов.

              З.Ы. Я сварщица не настоящая, возможно j123123 приведёт реальные примеры задач, где корутины ему бы помогли.
              Ответить
              • Не могу таких реальных примеров привести. Любая задача для контроллера, где можно было бы применять корутины, решается без корутин. Какого-то заметного профита в плане читаемости я не вижу.

                Это конечно может и т.н. "парадокс Блаба", но надо бы придумать и "парадокс антиБлаба", когда какую-то хуйню, типа вот какой-то малозначительный синтаксиальный сахарок привозносят как какую-то мегаохуенную фичу, из-за которого всем резко надо валить на этот принципиально новый ЯП.
                Ответить
                • > Любая задача для контроллера, где можно было бы применять корутины, решается без корутин.

                  Не, ну это логично. Просто сахарок для стейтмашины или файбера (смотря какая реализация).
                  Ответить
                • https://habr.com/ru/post/275801/
                  > Rust и парадокс Блаба

                  > Будучи руководителем проектов по языкам в Microsoft, я работаю над TypeScript – типизированной версией Javascript. В обязательном порядке, когда я выступаю перед аудиторией преимущественно JavaScript разработчиков и пытаюсь донести мысль о том, как здорово было бы попробовать добавить немного строгой типизации в Javascript, на меня смотрят хмурые лица. Всякий раз. Даже если она не обязательна. Даже после того как я опишу полдюжины преимуществ. Как и говорил Пол, это выглядит просто «странно». Для JavaScript-программистов TypeScript выглядит в основном тем же что и JavaScript, плюс куча стремной и непонятной фигни.
                  Ответить
                  • А если жаваскриптушкам показать лисп с гомоиконностью, они тоже скажут про кучу стремной и непонятной фигни?
                    Ответить
                    • в лиспе нужны только две функции: car и cadr. ну ещё map
                      Ответить
                  • Верно-ли я понимаю, что большинство фронтэндеров настолько тупы и непрофессиональны, что не понимают зачем статически проверять сходимость типов?
                    Ответить
                  • Был ES4 с явным указанием типов. Вроде даже какой-то сборкой Mozilla Suite поддерживался (ещё до Фуррифокса), потом его поддержку прекратили. Явное указание типов задержалось в ActionScript, но к нему пропал интерес, потому что Адоб перестал поддерживать Флеш.

                    Кстати, где ещё применялся ActionScript? В AIR, про который знало полтора человека?
                    Ответить
                    • Во флексе. Это такой мощный довольно фреймворк под флеш для построения гуев. В конце нулевых просрал битву за RIA джаваскрипту, и был уничтожен. Останки покоятся на той же помойке, где JavaFX и сервелат

                      https://www.oreilly.com/library/view/flex-3-cookbook/9780596529857/ch01.html
                      Ответить
                      • Нормальный же язык был:
                        var btn:Button = new Button();


                        Сразу ясно, что в btn может лежать только объект типа Button, а не число, не строка, не массив.

                        Почему он уступил место тупому JS?
                        Ответить
                        • В смысле -- почему?

                          В айти всегда побеждает самое тупое тормозное неудобное решение, требующее максимальаное количество ручных проверок
                          Ответить
                        • Блядь слово new самая бысмысленная хуйня в языках с автоматическим управлением кучей.
                          Один макак-гавноед из Сана насрал, а тыщи макаков скопировали

                          Тупее только "->" в пхп
                          Ответить
                          • new не только выделяет место в куче, оно ещё зовёт конь-структор.

                            Но вообще согласен, в крестах и в Object Pascal (в старой модели object, не в новой дельфёвой class) объекты можно было создавать в глобальной области, на стеке и в куче. В первых двух случаях алло-катор звать не нужно. В этих случаях конь-структор вызывается спецсинтаксисом (C++) или по имени (Object Pascal, да, в нём можно иметь несколько конь-структоров с разными именами).

                            -> в ПХП после крестов выглядит тупо, ибо там не надо ничего разыменовывать, но точку взять было нельзя, ибо она уже занята под конь-катенацию (культ Перла). Пришлось брать что-то другое и, недолго думая, взяли ->
                            Ответить
                            • >new не только выделяет место в куче, оно ещё зовёт конь-структор.
                              да, но зачем этому отдельное ключслово?

                              А вот в ObjC есть два отдельных метода: `alloc` и `init`, и еще звездочка у типа, хотя и ежу ясно, что это указатель.

                              >культ Перла
                              У перла всё таки нету отличия строки от числа на уровне типов (и то и то скаляр), а в пыхе есть. И стрелочка в перле тоже есть, но только лишь потому, что там есть понятие указателя. Это чуть-ли не единственный скриптоязык, где понятие "указатиель" настолько базовое, что без него просто массив в функцию не передашь.
                              Ответить
                              • в obj c есть и new
                                Ответить
                                • Помоему new это алиас для `[[alloc]init]` обычно, не?
                                  Ответить
                                  • что значит обычно?
                                    Ответить
                                    • Значение слова «обычно»
                                      ОБЫ́ЧНО, нареч.


                                      Нареч. к обычный.

                                      1. Жизнь в приемной протекала обычно. Секретарша ставила сургучные печати на пакет, посетители ожидали своей очереди. С. Антонов, Анкета.

                                      2. Большей частью, постоянно, как правило. Днем он обычно спит. К вечеру оживляется. В. Кожевников, Бессонница. Гордей Андреевич со стиснутыми зубами метался в постели. Обычно терпеливый, --- на этот раз он изменил себе. Игишев, Шахтеры.
                                      Ответить
                                      • какой ты остроумный

                                        приведи реальный пример, когда new в obj c необычный, т.е., не является сочетанием alloc + init
                                        Ответить
                                        • Ты прав, такого быть не может
                                          https://developer.apple.com/documentation/objectivec/nsobject/1571948-new
                                          Ответить
                      • > В конце нулевых просрал битву за RIA джаваскрипту, и был уничтожен.

                        «Оригинал»: подвижные брови, миндалевидные глаза, обаятельные складки под глазами. Умер или уничтожен за кулисами публичного шоу в конце девяностых.
                        Ответить
                      • >Во флексе.
                        кто-то флексит
                        Ответить
                • > малозначительный синтаксиальный сахарок привозносят как какую-то мегаохуенную фичу

                  При том что она очень чисто заворачивается реализуется Сишным свитчом и заворачивается в макрос.
                  Ответить
                • > Это конечно может и т.н. "парадокс Блаба"

                  Да не, не думаю...

                  Корутины -- это довольно нишевая хуй-ня: когда длинный алгоритм должен ждать каких-то ответов в куче точек, но при этом его нельзя взять и закинуть в тред (к примеру, потому что разрабы языка побоялсь давать обезьяне гранату или потому что вся прога будет состоять из этих закидываний в тред).
                  Ответить
                  • Первое что приходит на ум: всякие там бесконечные ленивые списки, их кобенации и кокотенации.

                    Реально это можно сделать несколькими способами: функционушнёй, тем же паттерном «Итератор», а можно нагородить елдак.
                    Ответить
                    • Это всё делается продолжениями без специального синтаксиса и макроёбства.
                      Ответить
                      • > Это всё делается продолжениями

                        Доказано node.js
                        Ответить
                        • Доказано Олегом.
                          Ответить
                          • Кстати, а в эрланге функции в безстековый CPS поди конпелируются, поэтому "процессы" такие дешёвые? Или у них всё-таки есть стеки?
                            Ответить
                            • Они компилируются в байткод регистровой VM. При загрузке байткода он либо превращается в шитый код, либо JITится*. Процессы дешёвые, потому что зелёные: на каждом физическом ведре работает планировщик (на самом деле джва), который исполняет процессы последовательно, с вытеснением на основе I/O и количества редукций. При вытеснении состояние регистров остаётся в сишной структурке до следующего запуска.
                              Нормальную вытесняющую многозадачность с помощью CPS сделать трудно, поэтому она сделана на уровне рантайма.

                              * JIT очень простой, и он переиспользует регистры VM, поэтому его можно особо не рассматривать.
                              Ответить
                              • В общем акторы на корутинах, понятно.

                                А регистры у VM ограничены, или их стописот как у llvm?
                                Ответить
                    • Не... у этой хуйни стейт обычно слишком тривиальный.

                      Вот рекурсивный обход каких-то сложных и нерегулярных структур -- более менее реальный пример, когда мне реально хочется юзать генератор.
                      Ответить
                  • >нишевая

                    у нас в коко уже нет

                    Через корутины реализованы реактивные потоки (а-ля rxjs), аналоги акторов, и просто разные задачи, которые нужно делать параллельно, и при этом стопать их скопом или джойниться скором (g structural concurrency)

                    Треды нужны чтобы загрузить CPU. Делать 1000 тредов просто ради удобства обезъяны -- неудобно

                    Колбеками пусть мои враги пользуются и едят лапшу

                    Асинхронная питушня решает часть задач, но не все (ленивость и та же структурная конкранеси ей не подвласна)
                    Ответить
                • > но надо бы придумать и "парадокс антиБлаба", когда какую-то хуйню, типа вот какой-то малозначительный синтаксиальный сахарок привозносят как какую-то мегаохуенную фичу

                  Ещё раз отвечу. Идея отличная. Люди пишут на ЯВУ с кучей синтаксического блоата вроде c++/жабы/c#/ecma6, которые создают им больше проблем чем должны решать.

                  Возможно это тот случай когда
                  Антиблаболки считают «сахарок» важной, необходимой фичей.

                  Но в силу анскильности не понимают что их фича — всего-лишь частный случай какой-то более общей концепции.

                  Которая вполне реализуема в более простом языке.
                  Ответить
              • ну отправь мне в 10К сокетов по UDP что-то без корутин, а еще с делеем между каждой такой задачкой в 3 секунды

                чур не срать тыщу потоков и без ебли с еполоами и комплишен портами
                Ответить
                • > отправь

                  Эм, а что мне мешает захуйнуть 10к пакетов в сокеты и проспать оставшееся время?
                  Ответить
                  • Потому что тебе нужно послать пакет, поспать 3 сек, снова послать пакет в тот же сокет, итд

                    и сделать это с 10К сокетами
                    Ответить
                    • А какое условие в моём алгоритме нарушено? :)

                      Не, ну технически может получиться интервал чуть меньше 3с между отправками в один сокет. Это критично, надо прям гарантию что при лагах процесора можно больше 3с, но меньше -- никогда?
                      Ответить
                      • > чуть меньше
                        а можно не меньше 3с?

                        ну желательно не больше десяти

                        ах да, чуть не забыл: для одного из сокетов будет 8ск
                        Ответить
                        • Не, задача всё ещё тривиальна...

                          Я тупо возьму priority queue с сортировкой по времени и буду спать до head'а, а потом отправлять тех, чьё время пришло.

                          И хуй ты этот код побьёшь по пирфомансу своими корутинами.
                          Ответить
                          • Это усложнит код, а также если одна отправка воткнёт, то воткнут и все остальные, а это харам

                            А уж если мне придется одну из этих отправок кенсельнуть, то и вовсе придется петушить твою очередь
                            Ответить
                            • > если одна отправка воткнёт, то воткнут и все остальные

                              В котлине корутины на тредпуле что ли крутятся, как в asio, зависание одной из них не лочит остальные?
                              Ответить
                              • Корутины крутятся на том пуле, на каком скажешь

                                Работа с сетью идет через пакет ktor, а он использует под капотом асинхронные сокеты

                                Если ты не трогаешь в корутинах блокирующие операции типа обычных сокетов или IO файлов, то остальные и не лочатся
                                Ответить
                                • > Если ты не трогаешь

                                  Ну т.е. компайлтайм гарантий никаких нету? Тогда нечестно писать "если одна отправка воткнёт", у тебя ситуация ничем не отличается.

                                  Вы просто не зовите блокирующие функции и ничего не заблокируется.
                                  Ответить
                                  • Комплайл тайм нет, но можно наверное напирдолить систему эффектов какую-то, и явно запретить блокирующие операции из корутин

                                    Но это задача для докторов компьютерных наук, а не для обычных жабоёбов

                                    >нечестно
                                    почему?

                                    У тебя буфер заполнится, и отправка встанет.
                                    А в случае асинхронности тебя верно вежливо попросят EAGAIN или как-то так

                                    >Вы просто не зовите блокирующие функции и ничего не заблокируется.


                                    Борманд, ну разумеется корутины нельзя блокировать

                                    Это же кооперативная многозадачность
                                    Ответить
                                    • > У тебя буфер заполнится

                                      Так мы уже плавно на TCP перешли?

                                      Что мне мешает тоже переключить сокет (один! нахуя мне их 10000 для UDP?) в неблокирующий режим.
                                      Ответить
                                      • У сокета есть буфер размером в SO_SNDBUF.
                                        Оно опорожняет его в сетевую карту

                                        Если он не успел это сделать, то

                                        * There are only two reasons for sendto() to block:

                                        Your outgoing UDP buffer is full, and it needs to wait until space frees up

                                        вторая не важна



                                        что не так?


                                        >один! нахуя мне их 10000 для UDP?

                                        например чтобы слать нескольким клиентам

                                        UDP сокет можно "коннектить". На самом деле это не коннект, но гарантия, что ты получишь ICMP о недоступности удаленного питуха
                                        Ответить
                                        • > что не так?

                                          Х.з., это к тебе вопрос... Я так и не поняла, что за магия у вас там в "асинхронных сокетах" есть, которую я не могу настроить и обработать из няшной.

                                          > гарантия, что ты получишь ICMP

                                          Х.з., в UDP протоколах обычно хертбиты есть. Ну кто-то из нас получит таймаут если что-то со связью. Не вижу смысла коннектить сокет, усложнять логику и тратить ресурсы ядра на какую-то хуйню.

                                          Есть какая-то статья, где описаны реальные преимущества коннекта? Например, что так больше клиентов можно будет обработать или пирфоманс вырастет.
                                          Ответить
                                          • >Х.з., это к тебе вопрос...
                                            Ты триггернулся на буфер

                                            Я привел пример того, что в UDP тоже есть буфер)

                                            > Я так и не поняла, что за магия у вас там в "асинхронных сокетах" есть, которую я не могу настроить и обработать из няшной.

                                            В няшной ты можешь сделать что угодно, вопрос в количестве кода и его "высокоуровневости"

                                            Неблокирующие сокеты из няшной скорее всего вернуть тебе EAGAIN или что-то такое при заполнении буфера, и попросят тебя попробовать снова

                                            Ты должен будешь сам это обработать.

                                            Либо ты сможешь взять select/poll/epoll, и слушать, когда сокет станет доступным для записи.

                                            В корутинах же ты пишешь так, словно бы ты в своем потоке, живешь, и спокойно блокируешься на вызове send (или как оно там называется)

                                            Под капотом там разумеется или неблокирующие сокеты или epoll, мне (как высокоуровневому питуху) это не важно.

                                            >Есть какая-то статья, где описаны реальные преимущества коннекта?

                                            https://it.wikireading.ru/7156

                                            >>>
                                            3. Асинхронные ошибки возвращаются процессу только при операциях с присоединенным сокетом UDP. В результате, как мы уже говорили, неприсоединенный сокет UDP не получает никаких асинхронных ошибок.
                                            >>>


                                            ---------
                                            на самом деле мой пример можно перевести и на TCP, если тебе удобнее.

                                            И даже на обычные генераторы, которые должны подождать N секунд, и что-то сделать

                                            В няшной пришлось бы делать ALARM или вон ебаться с очередями или плодить треды

                                            В корутинах достаточно сахара, чтобы писать последовательно

                                            Неблокирующая функция `delay` передает управление другой корутине, но для программиста выглядит как slepp
                                            Ответить
                                            • > Ты должен будешь сам это обработать.

                                              Сделать вид, что всё ушло и забить? Я очень удивлюсь, если ваша либа задерживает отправку UDP пакета, а не просто выбрасывает его и возвращает корутине ошибку.

                                              Что касается connect'а -- это же чисто клиентская фишка. Я же не буду зашкваривать серверный сокет под конкретного клиента. И заводить новый под каждого тоже будет как-то странно.
                                              Ответить
                                              • >Сделать вид, что всё ушло и забить?
                                                нет, попробовать снова

                                                >Я очень удивлюсь, если ваша либа задерживает отправку UDP пакета,

                                                хм, а в чем проблема так делать?

                                                Если она умеет делать это для TCP, то почему не делать для UDP?

                                                >Что касается connect'а -- это же чисто клиентская фишка.
                                                > Я же не буду зашкваривать серверный сокет под
                                                > конкретного клиента.

                                                connect будет создавать новый сокет, конечно

                                                но не понятно, почему нашему гипотетическому серверу это не сделать

                                                архитектуры бывают разные)

                                                > И заводить новый под каждого тоже будет как-то >странно.

                                                Если ты хочешь получать ICMP о недоступности клиента то вполне можно так делать

                                                Но вообще мы ушли куда-то не туда кмк)

                                                Корутины позволяют тебе писать последовательный код, используя вместо настоящих блокирующих функций -- специальные не блокирующие

                                                Код выглядит последовательно, как если бы ты каждую корутину запускал в отдельном процессе

                                                Причем в котлине они образуют "дерево", где родитель неявно ждет всех своих детей, и можно стопнуть родителя с детями одновременно

                                                Открыл Activity в Андроиде -- запустилось 10050 корутин (на одном потоке), каждая инкапусилует какую-то задачу

                                                Закрыл активити -- все стопнулись
                                                Ответить
                                                • > почему не делать для UDP

                                                  Немножко испортит работу протоколов, в которых тайминги важнее тухлятины...

                                                  > connect будет создавать новый сокет, конечно

                                                  Шта?!
                                                  Ответить
                                                  • >Немножко испортит работу протоколов, в которых тайминги важнее тухлятины...


                                                    Ты же не знаешь что у нас за гипотетический протокол)

                                                    >Шта?!
                                                    ты не можешь присоединить сокет к двум адресам, так?

                                                    стало быть нужно создать по сокету на клиента и каждому сделать connect, не?

                                                    зы: я наверное написал так, что прочиталось будто `connect` создает сокет)))

                                                    Это не так, конечно. Сокет создает `socket`, и вероятно кишки `accept`
                                                    Ответить
                                                    • > Ты же не знаешь что у нас за гипотетический протокол)

                                                      Практика показывает, что на UDP все протоколы такие... Нет никакого смысла ретраить тухлятину и задерживать из-за неё все последующие пакеты. Не влезла в полосу -- значит не влезла.

                                                      > я наверное написал так, что прочиталось будто `connect` создает сокет)))

                                                      Ага.
                                                      Ответить
                                                      • А если я хочу реализовать последовательную гарантированную доставку, но TCP мне не нравится, и я пилю свое говно, как гугл?

                                                        Да и почему сразу тухлятину?
                                                        Если буфер заполнен, то почему я не могу подождать и послать еще?
                                                        Это же UDP, это же не у принимающей стороны буфер заполнен (мне похуй на нее, я может вообще мультикаст) это у меня буфер заполнен
                                                        Ответить
                                                        • > А если я хочу реализовать последовательную гарантированную доставку

                                                          Дык она у тебя уровнем выше будет. А кишки реактора не должны принимать это решение за тебя (если ты явно не попросил).
                                                          Ответить
                                                          • Ktor должен вести себя максимлано близко к блокирующим сокетам

                                                            Что будет если я пишу в сокет, а буфер забит?
                                                            Будет блокировка треда, верно?

                                                            Вот было бы логично ждать что и ktor сэмулирует такое поведение
                                                            Ответить
                                                            • > максимлано близко к блокирующим сокетам

                                                              Ну ок. А неблокирующие можно попросить?

                                                              > почему я не могу подождать и послать еще

                                                              Потому что у тебя на выходе уже огромная очередь, которая не успевает высираться в провод. И вместо того чтобы отдать приоритет свежим, актуальным пакетам, ты продолжаешь пытаться спасти старые, менее актуальные.
                                                              Ответить
                                                              • >Ну ок. А неблокирующие можно попросить?

                                                                Могу, но зачем мне тогда корутины?
                                                                Я тогда могу на одном треде срать в 1000 сокетов обычным циклом. Если запись вернет EGAIN, то я просто дальше пойду, и всё.
                                                                Корутины будут не нужны

                                                                >свежим, актуальным пакетам

                                                                Типа раз я взял UDP, то обязательно семантика такова, что проебать старый пакет не так страшно, как тормознуть новый?
                                                                Ответить
                                                                • > раз я взял UDP, то обязательно семантика такова, что проебать старый пакет не так страшно, как тормознуть новый

                                                                  Х.з., возможно у меня синдром утёнка. Можно Снаута спросить.
                                                                  Ответить
                                                                  • Что спросить? Ну да, UDP используется обычно либо как борманд предполагает, либо кем-то очень высоколобым, как база для запиливания своего царского транспортного протокола a la QUIC. На этом уровне использовать елды или нет — уже проблема десятая.
                                                                    Ответить
      • mootools
        Ответить
    • Если бы вам нужно было для своего по запилить сервер лицензий, то в какую сторону вы бы двигались?
      Ответить
      • Посмотрел бы как работают кетайские серверы для JetBrains и сделал бы так же.
        Ответить
      • швейцарии
        Ответить
      • Если совсем просто, то в софт встраивается публичный ключ сервера (только не строкой конечно), при запуске софт идет на указанный сревер, передает туда ID компа (это могут быть ID дисков, мак-адреса карт и пр все вместе) получает лицензию по ключу и ID компа

        Сам ключ лицензии может быть длинным симметричным ключом. Ну если с этой лицухой уже зарегился другой ID, то сервер шлет нахуй. Можно еще мультикастом искать в своей сети другие копии себя: хуже не будети

        Чтобы сломать схему, нужно либо спиздить приватный ключ сервера (что сложно) либо поломать твою программу. Вот тут уже надо при запуске считать хеш бинаря, детектить дебагер, детектить виртуалку и пр. Это довольно сложный и муторный процесс, конкретные решения зависят от языка и окружения. Если твои клиенты это копроративщики, то можно не запариваца
        Ответить
        • > считать хеш бинаря, детектить дебагер, детектить виртуалку и пр

          Если ключ могут вырезать, то такие проверки тем более?
          Ответить
          • Ну так это всегда тараканьи бега. Что угодно можно сломать.
            Ответить
            • А как работают китайские лиценз серверы? Там не нужно качать сломанное ПО. Нужно просто указать волшебный URL и всё работает! Они спиздили приватный ключ?
              Ответить
              • Я думаю что китайские серверы ломают только тех, кто позволяет устанавливать лицензионный сервер у себя в сети. Такого требования у Десктопа не было.
                Но точно я не знаю
                Ответить
        • > Можно еще мультикастом искать в своей сети другие копии себя: хуже не будети

          Это зачем?
          Ответить
          • Это бесплптный способ поимки школьника-пирата
            Ответить
      • чо нагуглил https://github.com/vslavik/ellipticlicense
        Ответить
    • Извращенец выебал осла в контактном зоопарке Донецка.
      В ночь на субботу неизвестный мужчина проник в зоопарк "Ослиное место". Преступник зашел в вольер к осликам и изнасиловал одно животное. После извращенец пытался осквернить еще двух животных, но его спугнул сторож.
      Ответить
      • Как Осетия протекла в Донецк?
        Ответить
        • по запаху шли в сторону ослиного места, и нашли

          Ксстати
          В соответствии с этими хадисами, запретным для мусульман является мясо домашних ослов, поскольку те питаются нечистотами. В то же время, мясо диких ослов, пасущихся на воле, считается халяльным.
          Ответить
        • В Донецке много кавказцев, кстати. Грузины, армяне и северокавказцы. И в соседних регионах тоже. Лия Ахеджакова родилась в Днепропетровске, у неё отец адыг.

          g: Землячество Алании ДНР
          Ответить
    • 4 дня на Ангуляр - это, знаете ли, мощно! Я на создание первого простенького приложения потратил 2 недели. Правда, я бэкендер и про фронт не знал почти ничего
      Ответить
      • Тут с опытом-то найти не очень получается, а у вас без опыта.

        А какой у вас оффер, не расскажете? Чё за компания?
        Ответить
        • Классная история! Как минимум развеивает иллюзии, что можно просто выучить язык за полгода-год и сразу найти работу)
          Ответить
    • Вы такое любите
      https://habr.com/ru/articles/756562/

      Личный опыт работы в IT и более 15 мест работы за 10 лет

      В 2010 сходил в армию, интересно отслужил, а дальше нужно было начинать работать.


      десятки команд, огромные опенспейсы, холодильники набитые едой на каждом этаже, соки, фрукты, сыры и колбаса в любом количестве на каждом этаже
      Ответить
      • > Эксперт по внедрению IT решений и услуг для Бизне
        https://habr.com/ru/articles/755970/

        Австралия является убедительным примером для DevOps, так как большая часть страны находится в одном часово
        Ответить
      • Это в хрюкни
        Ответить
    • Но у кого поднимется рука выключить компьютер с пятью годами аптайма? Это все равно что подвергнуть эвтаназии собственную бабушку.
      Ответить
      • Однажды я выключил Windows с годом аптайма. А потом включил. Следущий год прошел в установке апдейтов. Вот уже 33% завершено
        Ответить

    Добавить комментарий