Pull to refresh
0
0
Send message

Rust хорош

Reading time5 min
Views15K

Как известно, html-разработчики скучают по многопоточке. Читая на днях шикарную книгу Mara Bos oб "атомиках и локах", наткнулся на упоминание одного интересного языка программирования: rust lang. Согласно интернетам, learning curve раста стремится к бесконечности, но для многопоточного программирования выбор кажется нормуль. Тут вопрос - можно и, главное, удобно ли юзать раст для бизнес-логики (ну то есть для продакшна).

Краткое содержание: макросы, компилятор-враг, компилятор-друг, unsafe и miri, многопоточка, options, iters, match.

Будем честны, фичи тестировались на учебном проекте, но как бывает со всеми пет прожектами (учебными проектами), переписывались они десятки раз.

Читать далее
Total votes 50: ↑27 and ↓23+4
Comments15

Сценарий для игры

Reading time3 min
Views1.3K

Где-то в Европе. Цель игры: из пункта А попасть в пункт Б и затем вернуться в пункт А.

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

Читать далее
Total votes 9: ↑3 and ↓6-3
Comments2

Одна задачка на литкоде

Reading time2 min
Views9K

Иногда хочется решить задачу просто потому что решение легко проверить, прям сразу для множество вариантов. Взяли список из 25 элементов, отсортировали его, и применили искомую функцию 25 раз, профит. Плюс задачка напоминает обложку тетрадки по арифметике за пятый класс, там где табличка произведений, ну та где находим пятый столбец и седьмой ряд и на пересечений их будет произведение. Там же в табличке видно что 6x6 - это квадрат, а 9x4 это совсем не квадрат (скорее ближе к прямоугольнику) хотя площадь у них равная. Так вот, "литкод" хочет чтобы мы нашли n-ый элемент в данной табличке по возрастанию.

Читать далее
Total votes 23: ↑2 and ↓21-19
Comments31

Если не использовать «React»

Reading time2 min
Views13K

Коллеги со стороны бакэнда иногда любезно спрашивают: "а нафига вам тут реакт"? Будем честны и ответим, что без него можно написать довольно приличный код, отдать его на ревью коллеге-фулстеку и получить аппрув после 15 секунд (так быстро не потому, что коллега не беспокоится за качество кода, а просто код весьма компактен, cмотрите ниже). Если подумать чуть-чуть дольше (например, за время заварки чая, которое, как все знают, равно трем минутам), можно найти не менее шести ошибок, а может и больше. Любая ошибка, конечно, весьма субъективна, но я постараюсь объективно объяснить каждую из них.

Читать далее
Total votes 16: ↑4 and ↓12-8
Comments27

Еще один пересказ «туториала» Джека Креншоу

Reading time5 min
Views3.6K
Иногда более-менее не тривиальную задачку приятно решить с чувством легкого базиса под ногами. Базис как бы уже есть, и мы как нечто среднее между художником и архитектором, ловим себя (в данный момент времени) на перекладывании пустого в порожнее, готовя нечто яркое и крепкое (почти как красное полусухое 🙂. Яркое — потому что без йоты красоты легко сойти на полпути, а крепкое — профессия обязывает. Чтобы было еще ярче, призовем в помощь замечательные серии Jack Crenshaw compilers.iecc.com/crenshaw (non-technical introduction to compiler construction) и начнем, пожалуй, с построения маленького, но вполне достойного линтера en.wikipedia.org/wiki/Lint_(software) (Честно говоря, так как ниже будет имплементен разбор яваскрипт кода, вполне допустимо, но только временно, переименовать линтер в парсер и думать дальше в новых терминах)

Сначала хотелось продекларировать базис как есть, но подумав немного, можно неутешительно прийти к выводу — что четко определенный базис не будет иметь всякого смысла, так как находясь в данной точке пространства, в данный момент времени будущее, как и прошлое, весьма туманны.
Читать дальше →
Total votes 4: ↑3 and ↓1+2
Comments1

Концепты и модули cpp. Взгляд сo стороны undefined разработчика

Reading time5 min
Views3.3K

В 2002 году Алекс А. Степанов проводит лекцию в адоби: STL and Its Design Principles - где упоминает кейворд concept (там прям целый слайд про концепты). В 2009 году в свет выходит книга Elements of programming (Stepanov, McJones) и где по-моему нет ни одного алгоритма без концептов. В 2011 новый стандарт языка с++11, где в отложенных (прям очень жаль) фичах фигурируют концепты. В 2014 мир видит творенье Страуструпа - Tour of C++, где глава 5.4 названа Concepts and Generic Programming, хотя язык не поддерживает кейворд concept. Годом ранее, в 2013, Андрю Саттон публикует бумагу Concepts Lite. В стандарте с++14 появляется новая фича digit separators, но нет концептов. В 2017 на реддите обсуждают c++17 и предлагают отдохнуть еще три года.

Через три года сочувствующий html разработчик захочет попробовать язык с чистого листа, заюзав и концепты, и модули. Модули привносят важное свойство - уменьшение времени компиляции. Идея в шаг за шагом написании небольших компонентов и комбинировании их после в нечто осознаное, например, линтер.

Читать далее
Total votes 17: ↑8 and ↓9-1
Comments6

Первые 255 задач на «‎литкоде»‎

Reading time3 min
Views27K
Были годные статьи об аргументированной пользе алгоритмов (например, habr.com/ru/company/geekfactor/blog/597035), тут хочется поделиться личным опытом.

На всякий случай, не стоит переоценивать пользу алгоритмов: если вы на одном уровне зп и при этом коллега крутил на всем подряд биг О нотэйшн, скорее всего софт скилы у него развиты лучше.

Что дано: фронтэнд с элементами nodejs разработки. Знаю javascript, взял java из-за общего префикса и Брюса Эккеля. Язык годный, легко читать, осознал что надо оч много писать после 175 задачек на ресурсе под именем leetcode. Попробовал язык мобилок, язык прекрасный, но не для мобилок. Swift прекрасен и будет еще прекраснее в будущем. До наступления прекрасного будущего решил юзать питон: легко и мало писать, но трудно читать — да и пофиг, так как каждый день новая задачка.
Читать дальше →
Total votes 13: ↑7 and ↓6+1
Comments16

Три истории и один вопрос

Reading time1 min
Views1.7K
Один из криминальных персонажей популярного фильма:
Не мы такие — жизнь такая

Бывает, компания открывает новый офис. Старый офис — прекрасный и в центре, а новому везет меньше: стулья скромнее, кофемашина не та, да и теснее, если честно. В разработке программного обеспечения на заказ обычно не брезгают и перевозят команды целиком. Как вы догадались, кому-то не повезло, и Регина написала в паблик (клиенту тоже не забыв сообщить). Клиент попросил отложить переезд, но начальство написало прохладное письмо команде: «Давайте решать такие вопросы приватно и не сообщать сообществу, и тем более клиенту».
Читать дальше →
Total votes 12: ↑7 and ↓5+2
Comments11

Об эстимейтах-2

Reading time2 min
Views2.6K
Из известного мультфильма:
— я хочу измерить свой рост!
— два слоненка
— пять мартышек
— 38 попугаев и одно попугайское крылышко


Иногда прям хочется угодить менеджерам, высказав более-менее точные эстимейты. Сделать это бывает приятно — типа, братух, все под контролем, мы сделаем — правда после этого приходится сжать покрепче и педалить, педалить, педалить.

Что ж, чтоб не горело, там где сидело, предлагаю разработать некую систему оценок

Дано:
1) многие менеджеры не любят диапазоны в оценках
2) [ходят слухи] на задачу тратится все отведенное время
3) слишком много вариантов для оценки (1 час, 2 часа, 3, 4, 5,… n)
4) роль тимлида не учтена
Читать дальше →
Total votes 6: ↑3 and ↓30
Comments4

About integration tests

Reading time2 min
Views2.1K
[Previously] I was talking about combinatorial complexity of integration tests in multicomponent systems, so let me remind. Let's build a simple system with only 3 components inside. It can be three independent modules and we want to provide some communication between them (message passing good enough for the purpose of the example) So we have 3! = 6 possible configuration to test. Before going deeper lets see how Quicksort fights a combinatorial complexity.

[Quicksort] reduces complexity on each pass of a given input. So far so good. Let's imagine example with 10 elements. How many possible permutations do we have? you are right: 10! ~= 3,6 * 10^6. So on the first pass the complexity will be reduced: 5!*5!, on the next pass it will be further reduced till 2!*3!*2!*3!… after logn times we will have 1!*1!*1!...1! = 1 possible position, and our given input is sorted. Gotcha. (attentive reader can mention about worst case scenario of quicksort, but lets discuss it someday) Coming back to our example…
Read more →
Total votes 3: ↑3 and ↓0+3
Comments0

About Testing

Reading time2 min
Views1.5K
Let's talk about Testing, about unit and integration tests which everyone here, i hope, likes to write.

Despite of lots of benefits, tests have two fundamental problems: there is no architecture at all (quality), nobody knows what is the meaning of the quantity.

Tests have a cost. Lets imagine dialog between manager and developer:
— John, how many hours does it take to implement?
— Approximately one week: 1,5 day for task and 3,5 days to write tests

So why people write tests? Let's try to build a mental model: we delivered a component, our beta testers found a bug, we wrote tests scenario. So, next time we try to deliver the same component, we already know about bad scenario and have automation to check it. So far so good. Next, we are trying to predict future bugs by writing lot's of tests and cover bad scenarios. Next, we deliver better components, users are happy. Profit. (Despite of all pros, the solution is not scalable — with every new component we will face a reality).
Read more →
Total votes 6: ↑4 and ↓2+2
Comments2

Об эстимейтах

Reading time2 min
Views6.9K
Тренер дает наставление перед игрой:
— Вот ты, Иванов, сколько забьешь бразильцам? Ты же старший ответственный нападающий, мне нужна точная цифра!

Верстаешь экран, и как-то лого не так в правом нижнем углу, начинаешь двигать его вправо-влево-вниз, фигак — уже на обед зовут, два часа улетели куда-то. Или вот сложный таск, разбил его на части: библиотечный и клиентский код; пилишь скромную библиотечку, прям хорошо! Тестами обложил, но в душе знаешь, что будут изменения под клиентский код (а там и тесты нужно будет править :(

И тут приходит «плэнинг» покер, фразы типа фибоначчи «намберс» или стори «поинтс». Напланировали задач на тридцать с половиной часов, и команда разрабов из пяти человек всю неделю пилит и пилит и пилит.

И потом оправдываешься: но вы же знаете, есть три стадии написания кода: 1) сделай, чтоб работало; 2) сделай, чтоб работало правильно; 3) сделай, чтоб работало быстро. Ну ok, до третьей стадии редкий фронтэнд-разработчик допишет, но все же — код был переписан дважды. Или так подробно разъясняешь: любой html разработчик решает задачу: a) просто и неправильно; затем б) сложно и неправильно; затем в) сложно и правильно; затем г) просто и правильно. И это не так просто — многие начинают с пункта «б», да там и остаются.
Читать дальше →
Total votes 27: ↑16 and ↓11+5
Comments26

Возможно ли без Redux?

Reading time3 min
Views8.9K
На сегодняшний день можно найти уйму позиций, где требуется react/redux. React прекрасен, вопросов нет. Вопрос к Redux — возможно ли без него. Если погуглить чуть-чуть, найдется добротная статья на Хабре, где автор задается таким же вопросом. В статье на простом примере (todoList) метод this.updateViews() вызывается слишком часто (семь-восемь раз) и кажется, что можно сделать проще.

Основная идея тут observable models, react отвечает за observable, дело осталось за малым — создать model.

Перед созданием модели пару слов о дизайне (архитектуре) клиента:

index — raw data
history — array[model]
observer — model
view — errors, focus, flags

index.jsx — точка входа программы для экрана пользователя. Index отрисовывает все компоненты с данными по умолчанию, делает асинхронные запросы, перерисовывает компоненты с новыми данными.

// index.jsx

<History>
  <Observer>
     <HeaderView />
     <MainView />
  </Observer>
</History>
Читать дальше →
Total votes 16: ↑13 and ↓3+10
Comments39

Кратко с реализацией о AES 128 ECB

Reading time5 min
Views10K

Если вбить в яндекс 'aes 128 ecb mode', найдутся хорошие статьи ребят на "хабре": раз и два — толковые и одновременно слишком подробные.


Рассказ об алгоритме в картинках находится здесь (который также можно найти по ссылкам в одной из статей ребят выше).


Кратко об алгоритме: 1) создаем объект с 16-байтным state и массивом 16-байтных ключей; 2) пишем примитивы для объекта (они же трансформации); 3) запускаем n раз (где n — кол-во раундов). Все трансформации делаем симметричными — для зашифровки и расшифровки одновременно. Расшифровка в терминах алгоритма — это зашифровка наоборот.


Структура:


using byte_t = unsigned char;
struct aes128 {
  aes128(const std::string& text, const std::string& cipher, bool decrypt = false)
    : state({begin(text), end(text)}), keys({{begin(cipher), end(cipher)}}), decrypt(decrypt) {}
  aes128() = default;
  aes128(const aes128&) = default;

  std::vector<byte_t> state;
  std::vector<std::vector<byte_t>> keys;
  bool decrypt;
}
Читать дальше →
Total votes 24: ↑19 and ↓5+14
Comments8

Information

Rating
Does not participate
Registered
Activity