Pull to refresh
13
0

Software Developer

Send message

Проектирование архитектуры для микросервисов с использованием gRPC

Level of difficultyEasy
Reading time9 min
Views17K

Привет, Хабр!

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

gRPC – высокопроизводительный и мощный инструмент для построения микросервисных систем.

Читать далее
Total votes 13: ↑9 and ↓4+7
Comments10

Изучаем Q#. Алгоритм Гровера. Не будите спящего Цезаря

Level of difficultyEasy
Reading time14 min
Views4.7K

Криптохомячкам посвящается ...


Алгоритм Гровера представляет собой обобщённый, независящей от конкретной задачи поиск, функция которого представляет "чёрный ящик" f: {0,1}^n to {0,1}^n, для которой известно, что EXISTS!w:f(w)=a, где a — заданное значение.


Считаем, что для f и заданного a можно построить оракул Uf: { |w> to |1>, |x> to |0> if |x> != |w> }


Алгоритм Гровера достаточно прост


  1. Задаём в регистре (массиве кубитов) начальное значение H|0>
  2. Повторяем несколько раз (исходя из оценки) пару трансформаций над регистром
    • Отражение от решения Uw: { |w> to -|w>, |x> to |x> if |x> != |w> } или Uw = I-2|w><w|
    • Отражение от s=H|0> Us = 2|s><s|-I
  3. Забираем нужное решение из регистра (с большой долей вероятности, что оно правильное)

Не будите спящего Цезаря!


Применим этот алгоритм для решения задачи нахождения ключа шифра Цезаря ...

Читать дальше →
Total votes 7: ↑5 and ↓2+5
Comments4

Системные ошибки в преподавании иностранных языков

Reading time7 min
Views34K

__________На уровне системы

Много лет работаю со студентами московских вузов и представляю, как там преподают английский язык. Не жалуются (в силу очень специфических причин) студенты только трёх: МГЛУ, МГИМО и МФТИ.

В коридорах только и разговоров, что английский всем нужен. Но вот всё что‑нибудь неладно: то «языки — не моё», то «не могу сдвинуться с мёртвой точки», то «языковой барьер»... Что за атмосфера мистики вокруг иностранных языков? Почему до сих пор нет признанной технологии качественного учебного процесса и подготовки преподавателей?

В спорте давно поняли, что по чемпионским программам можно тренировать только суперодарённых детей. Остальных эти программы загонят, просто физически могут покалечить. Зато такое «равнение на лидеров» широко распространено за пределами спорта, поскольку не влечёт немедленного и явного физического ущерба. Постоянно вижу что‑нибудь вроде: «Как учить язык: советы полиглота». Полиглоты функционируют на другом уровне абстракции за счёт уже выученных языков, а при запоминании опираются на несопоставимо большее количество ассоциативных связей. И даже свой первый иностранный язык они учат с огромным преимуществом перед средним изучающим.

Советы и мнения по поводу изучения языков часто подкрепляются тем, что так сказал‑де переводчик‑синхронист, или профессор иняза. Люди, хорошо владеющие языками (в том числе преподаватели), обычно имеют несовместимые с реальностью представления о том, как их надо изучать. Это не парадокс: почти везде языки дают плохо, и реально выучивают их, как правило, довольно способные люди. Для них не нужно особого преподавательского мастерства или специальных приёмов — они воспримут любой способ подачи материала. Что‑то сами додумают. А потом всю жизнь рассказывают, как замечательно «это работает».

Читать далее
Total votes 13: ↑10 and ↓3+8
Comments56

Инструменты создания API клиента для .NET

Level of difficultyEasy
Reading time8 min
Views11K

При начале разработки нового проекта у моей команды всегда появлялся вопрос, какую библиотеку выбрать для межсервисного взаимодействия? А какую использовать для походов в сторонние сервисы? В этой статье я постарался вкратце осветить различные обёртки над HttpClient.

Читать далее
Total votes 7: ↑7 and ↓0+7
Comments7

Взлет и падение империи. История корпорации DEC

Level of difficultyEasy
Reading time8 min
Views13K


Эта IT-компания с названием, состоящим из трех латинских букв, считалась в 70-х и 80-х одним из лидеров мировой компьютерной индустрии. ЭВМ производства этой компании работали в вычислительных центрах крупнейших научных и коммерческих организаций, а многочисленные клоны этих машин выпускались по всему миру, в том числе, в СССР. Если вы думаете, что речь идет об IBM, то вы глубоко заблуждаетесь.
Читать дальше →
Total votes 70: ↑70 and ↓0+70
Comments51

Made at Intel. Окаянные дни – продолжение

Level of difficultyEasy
Reading time9 min
Views24K

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

Читать далее
Total votes 91: ↑85 and ↓6+105
Comments27

О контроле на удаленке: как совместить спокойствие бизнеса и доверие разработчикам

Level of difficultyEasy
Reading time8 min
Views5.6K

В продолжение темы о метаниях компаний между удаленным, офисным и гибридным форматами хочется поговорить о бизнес-процессах. Любой из форматов работы будет хорош, если нормально эти самые процессы выстроить. А сотрудники не станут возмущаться, если не менять правила игры прямо “в полете”. 

Мы в свое время настроили удаленный формат и работаем так уже почти семь лет. Продолжаем допиливать детали, но в общих чертах можем отчитаться о том, что “контроль без контроля” действительно работает. В этой статье рассказываем, как он устроен.

Читать далее
Total votes 10: ↑8 and ↓2+7
Comments8

Применение low-code платформ в энтерпрайзе

Level of difficultyMedium
Reading time16 min
Views6.7K

Мы в компании активно используем low-code платформы много лет. За время работы набрался опыт в преодолении проблем, связанных с этими платформами, и кристаллизовались подходы, которые хорошо себя показали.

В статье я разберу, что в low-code подходе помогает бизнесу, а что создаёт сложности. При рассмотрении проблем я предложу «лекарства», которые помогут вам нивелировать проблемы.

В конце статьи я составил чек-лист, по которому рекомендую проверять low-code платформу, прежде чем вы решитесь использовать её для решения своих бизнес-задач.

Статья состоит из шести разделов:

Читать далее
Total votes 6: ↑5 and ↓1+4
Comments17

Американская кровавая лотерея. Как работала мобилизация в США времён войны во Вьетнаме

Level of difficultyEasy
Reading time8 min
Views69K

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

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

Читать далее
Total votes 206: ↑186 and ↓20+206
Comments410

Самый плохой программист, которого я знаю

Level of difficultyEasy
Reading time3 min
Views65K

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

Несколько лет назад я написал в Twitter/X заметку о лучшем программисте, которого я знаю, её стоит переписать в виде поста в блоге. Мне кажется справедливым, чтобы я рассказал и о самом плохом. Его зовут Тим Маккиннон. Я хочу, чтобы мир знал, насколько он измеряемо непродуктивен.

Читать далее
Total votes 134: ↑130 and ↓4+166
Comments112

Импортозамещение, которое мы потеряли: советские языки программирования и их создатели — часть 1 (1950-е — 1960-е)

Reading time7 min
Views37K

Продолжаем наш ретроспективный цикл о тех советских разработках, которые стали историей и за которые, как принято говорить — “не стыдно”. В предыдущих постах цикла мы уже затрагивали разработку языков программирования в СССР и в этом посте хотели остановиться на ней подробнее. Несмотря на достаточно скромные достижения в этой области, разработчики языков и трансляторов знали моменты триумфа, а фундаментальный вклад советских ученых в развитие программирования ощутим и сегодня. Под катом немного о языках и трансляторах, разработанных в Стране Советов в 50-е — 60-е годы, а также об их создателях. 

Читать далее
Total votes 44: ↑39 and ↓5+42
Comments93

Импортозамещение, которое мы потеряли: Советские прообразы цифровой трансформации, ERP и DSS в 50-х — 60-х (часть 1)

Reading time9 min
Views11K

Импортозамещение в ИТ, локальный российский тренд последних лет. На протяжении последнего года — это слово многократно звучало из каждого “утюга”. Причины — крупные западные вендоры, в силу геополитических причин, ушли из России. Это болезненно отразилось на промышленности и крупных компаниях, они потеряли доступ к покупке лицензий, поддержке, обновлениям ect. Больно терять ERP, DSS, цифровая трансформация промышленности и бизнеса в России, очевидно, замедлится. Распространено мнение, что опыт цифровой трансформации и автоматизации, а также разработка систем управления процессами предприятий начались в России в девяностые, а 1С, Галактика и Монолит выросли на ровном месте, но это не совсем так...

Читать далее
Total votes 40: ↑38 and ↓2+46
Comments18

Тебе не нужно классическое ООП в твоём бэкенд микросервисе

Reading time24 min
Views19K

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

Читать далее
Total votes 46: ↑41 and ↓5+41
Comments55

Эмуляция троичной системы. Вариант концепции

Reading time4 min
Views15K
1. Пролог

Недавно я прочитал замечательную статью [1]. В ней автор рассказывает о том, что не всегда вычислительные машины были двоичными. На заре компьютерной эры существовали машины, которые использовали десятичную и троичную систему счисления.
Десятичная система удобна человеку, но ее достаточно сложно реализовать на существующей элементной базе. Кроме того, десятичная система подвержена ошибкам в результате искажения сигнала при передаче. Троичную систему реализовать не на много сложнее двоичной ([2]), но она способна дать как минимум три преимущества.
Читать дальше →
Total votes 39: ↑20 and ↓19+1
Comments24

Недвоичная логика

Reading time10 min
Views102K
В начале Второй мировой войны перед армией США остро встала проблема нехватки баллистических таблиц стрельбы, жизненно необходимых для работы артиллерии. Типичная баллистическая таблица представляет собой набор числовых данных траекторий полета снаряда, предварительно расчитанных для определенных условий стрельбы, ствола, снаряда, погодных условий и температуры воздуха. Ручной расчет лишь одной траектории занимал несколько дней, и каждая таблица обходилась в огромные количества человеко-часов.

В то время этими расчетами занимались лишь несколько высококвалифицированных специалистов, и даже увеличение штата лаборатории в 1942 году помогло незначительно. В июне этого же года был заключен контракт с Школой электротехники Мура Пенсильванского университета, которая располагала диффереренциальным анализатором конструкции Вэнивара Буша — механическим вычислителем той эпохи. Работой руководил лейтенант, а позже капитан Герман Голдстайн, получивший степень доктора математики в Чикагском университете. Именно он с профессором Брайнердом в 1943 году представил идею «электронного дифференциального анализатора» авторства Джона Мокли.

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

При общей своей примитивности (для задания программы необходимо было вручную перемещать узлы и коммутаторы) и технических трудностях эксплуатации, связанных с ненадежностью вакуумных ламп, ЭНИАК поражал своими возможностями и скоростью работы, которая не была ограничена наличием движущихся частей. В отличие от других электромеханических машин той эпохи, работавших на электрических реле, и своего преемника ЭДВАК, первый электронный цифровой компьютер общего назначения был не двоичным, а десятичным.
Читать дальше →
Total votes 109: ↑105 and ↓4+101
Comments39

Замена двоичной логики — увеличит ли это производительность?

Reading time5 min
Views66K
Наверняка на хабре уже немало постов на эту тему. Тем не менее, я попытаюсь рассказать свою точку зрения на всё это…

Однажды я прочитал в интернете про троичную систему счисления и заинтересовался. Меня мучил вопрос, а нельзя использовать в основе компьютера симметричную троичную систему счисления (СС), и даже вдруг это увеличит производительность компьютера? Мне казалось, что это возможно, и я жаждал это проверить.

Информация:
Троичная система счисления — позиционная система счисления с целочисленным основанием, равным 3. Существует в двух вариантах: несимметричная и симметричная.
В несимметричной троичной системе счисления чаще применяются цифры {0,1,2}, а в симметричной троичной системе счисления знаки {−,0,+}, {−1,0,+1}.
У некоторых людей эта логика вызывает затруднения. Они говорят, например, приведите пример подобной логики в жизни.
Человек, немного подумавший над этой логикой поймет, что она более жизненна чем двоичная. Обычный пример троичной логики в жизни связан с постоянным током: ток движется в одну сторону, в другую сторону, его нет.
Читать дальше →
Total votes 55: ↑34 and ↓21+13
Comments91

Про аудирование, или Из чего состоит знание иностранного языка

Reading time10 min
Views21K

Часто люди, отчаявшись добиться желаемого прогресса после многих лет нерационального изучения языка, делают вывод: «Учу-учу, ничего не получается… Что-то идёт не так. Наверно, сделать качественный рывок мне поможет только погружение в языковую среду».

Покупают курс в Лондоне. Возвращаются с отличными впечатлениями, почти без денег и растущей убеждённостью: «Мой случай уникален, нужен какой-то особый подход».

Ни черта уникального на самом деле нет, ситуация очень типичная. Всё это — от тотального повсеместного непонимания, из чего, собственно, состоит знание иностранного языка. Да и разобраться непросто — весь эфир забит рекламной демагогией. 9 из 10 жалуются: я плохо воспринимаю речь на слух… что делать… У рекламщиков ответ уже готов: «Улучшить восприятие на слух? — Не проблема! Приходите! Поможем!»

Ну приходят. Заканчивается всё очередным разочарованием и ещё более глубокой убеждённостью в «уникальности» своего случая. В общем, давайте разберёмся, из чего состоит «знание» иностранного языка.

Во-первых, не верьте знакомым, которые говорят, что хорошо понимают носителей на слух. Носители сами друг друга часто переспрашивают, даже понимая контекст разговора. И если ты не вырос в Англии, у тебя ВСЕГДА будут проблемы с восприятием речи британца. Сейчас расскажу, почему.

Вспомните ситуации, когда вы понимали носителя, пока он говорит с вами, но мгновенно переставали его понимать, когда он начинал говорить с другим носителем. Как так?

Реальные живые носители произносят не совсем те слова, которые мы ожидаем услышать, читая субтитры. Ни в одном словаре нет слова forya (ударение на первый слог), а оно, между тем, распространённое (в субтитрах будет написано for you). Не менее распространено слово whaddaya (в субтитрах пишут what do you). То же самое происходит в скоростной русской речи: вместо «он говорит» в реальной жизни мы обычно используем слово «онгрьт» с невнятной «н». Очсомневаюсь, что оно есть в словаре. Однажды при мне темнокожий парень объяснял посреди Москвы темнокожей девушке: «…and instead of “shto” they say “chyo” (вместо «што» они говорят «чё»). «Чё» даже не похоже на «что».

Читать далее
Total votes 57: ↑52 and ↓5+60
Comments125

Этапы и принципы развития навыка говорения

Reading time8 min
Views28K

«Гло́кая ку́здра ште́ко будлану́ла бо́кра и курдя́чит бокрёнка». Эту фразу из несуществующих слов предложил в начале XX века академик Л.В. Щерба. Из неё ясно, что «будлану́ла» — действие, которое ку́здра (ж.р.) совершила в отношении бо́кра (м.р.); бокрёнок, скорее всего, детёныш бокра. Для русского это очевидно сразу. Иностранцу придётся сначала выучить русский. Фраза показывает, что язык — это НЕ СЛОВА. Слова легко переходят из одного языка в другой. Язык  это принципы, по которым слова связываются друг с другом.

В том, чтобы научиться говорить, ничего сложного нет — проблема это придуманная. А основная причина частых неудач — это то, что люди, как говорится, put the cart before the horse, ставят телегу впереди лошади. Пытаются говорить, не разобравшись, как связываются слова в языке. Это как пытаться бегать, не научившись ходить.

Не будем обсуждать уровень руссо туристо, когда говорят наполовину инфинитивами, наполовину знаками — это вообще не язык, строго говоря. Под умением «говорить» подразумеваются три уровня:

1-й уровень: можем по-простому, но грамматически правильно выразить мысли. Например, не зная выражения «прикрой форточку», говорим проще: «закрой окно, но не до конца».

2-й уровень: говорим на конкретные темы именно теми фразами, которые используют носители языка («прикрой форточку»).

Есть реальная история про русского математика, который читал лекцию на английском в Оксфорде. Упоминал степени, корни, дроби и прочие математические штуки, которые не каждый переводчик сумеет описать без подготовки. После лекции к нему подошла студентка и обратилась с простой разговорной фразой. Математик улыбнулся: «Sorry, I don’t speak English». То есть говорил-то он неплохо, но только на одну тему — описание математических формул и действий.

Читать далее
Total votes 35: ↑31 and ↓4+36
Comments76

Луковичная архитектура в компоновке backend-приложения и куда в итоге класть маперы

Reading time6 min
Views21K

Как скомпоновать приложение? Какие в нём должны быть слои? Как назвать пакеты? Где расположить DTO, маперы, реализации интерфейсов? И нужны ли вообще интерфейсы? Когда новичок попадает в свою первую компанию, очень часто на эти вопросы у него нет однозначного ответа. Он смотрит код своих коллег, и тут уж как повезёт - если команда сильная, у новичка есть все шансы научиться писать хороший, чистый, код. Если же не повезёт, то новичок будет цепляться за то, что есть, нахватается плохих практик, и по прошествии года-двух он уже сам будет себе авторитетом, которого не так-то просто будет переубедить.

В посте ниже я описываю личный и командный опыт, под который я постарался подвести теоретическую базу, опираясь на "Чистую архитектуру" Роберта Мартина. Да, этот пост - для новичков, хотя, эта тема жива и среди устоявшихся программистов, поскольку споры о компоновке приложения не утихают и среди сениоров.

Зайду я немного издалека и напомню, что такое луковичная архитектура.

Читать далее
Total votes 8: ↑7 and ↓1+7
Comments17

Иммутабельность в C#

Reading time13 min
Views20K

В разработке программного обеспечения иммутабельным (immutable — неизменяемым) называется объект, который после своего создания не может быть изменен. Зачем вам может понадобиться такой объект? Чтобы ответить на этот вопрос, давайте проведем анализ проблем, которые могут возникнуть в результате мутации (изменения) объектов. Вернемся к основам того, что делает каждое приложение: создает, извлекает, обновляет и удаляет данные (CRUD-операции). Ядро любого приложения манипулирует объектами. Ответ на вопрос о том, работает ли приложение в соответствии со своей спецификацией, в первую очередь определяется правильностью обработки данных. Вам необходимо быть уверенными, что код работает правильно, каждый раз, когда он затрагивает какой-либо объект. 

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

Если ваше приложение является многопоточным, иммутабельность должна быть фундаментальной частью вашей архитектуры, поскольку неизменяемые объекты по своей природе являются потокобезопасными и невосприимчивыми к состояниям гонки. Если ваше приложение использует data transport objects (DTO — объекты передачи данных), вам также следует серьезно подойти к иммутабельности ваших объектов. Предметом дискуссий остается лишь то, как наиболее эффективно реализовать и работать с иммутабельными объектами, поскольку C# не предлагает встроенной поддержки таких объектов. Эта статья предлагает ответ на этот вопрос.

Читать далее
Total votes 7: ↑3 and ↓4+1
Comments10
1
23 ...

Information

Rating
Does not participate
Location
Россия
Registered
Activity