Как стать автором
Обновить
13
0

Software Developer

Отправить сообщение

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

Уровень сложностиПростой
Время на прочтение9 мин
Количество просмотров17K

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

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

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

Читать далее
Всего голосов 15: ↑11 и ↓4+7
Комментарии10

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

Уровень сложностиПростой
Время на прочтение14 мин
Количество просмотров4.6K

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


Алгоритм Гровера представляет собой обобщённый, независящей от конкретной задачи поиск, функция которого представляет "чёрный ящик" 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. Забираем нужное решение из регистра (с большой долей вероятности, что оно правильное)

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


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

Читать дальше →
Всего голосов 9: ↑7 и ↓2+5
Комментарии4

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

Время на прочтение7 мин
Количество просмотров33K

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

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

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

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

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

Читать далее
Всего голосов 14: ↑11 и ↓3+8
Комментарии56

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

Уровень сложностиПростой
Время на прочтение8 мин
Количество просмотров8.6K

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

Читать далее
Всего голосов 7: ↑7 и ↓0+7
Комментарии7

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

Уровень сложностиПростой
Время на прочтение8 мин
Количество просмотров12K


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

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

Уровень сложностиПростой
Время на прочтение9 мин
Количество просмотров23K

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

Читать далее
Всего голосов 117: ↑111 и ↓6+105
Комментарии27

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

Уровень сложностиПростой
Время на прочтение8 мин
Количество просмотров5.5K

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

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

Читать далее
Всего голосов 11: ↑9 и ↓2+7
Комментарии8

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

Уровень сложностиСредний
Время на прочтение16 мин
Количество просмотров6.4K

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

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

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

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

Читать далее
Всего голосов 6: ↑5 и ↓1+4
Комментарии17

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

Уровень сложностиПростой
Время на прочтение8 мин
Количество просмотров66K

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

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

Читать далее
Всего голосов 246: ↑226 и ↓20+206
Комментарии410

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

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров65K

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

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

Читать далее
Всего голосов 174: ↑170 и ↓4+166
Комментарии112

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

Время на прочтение7 мин
Количество просмотров36K

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

Читать далее
Всего голосов 52: ↑47 и ↓5+42
Комментарии93

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

Время на прочтение9 мин
Количество просмотров11K

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

Читать далее
Всего голосов 50: ↑48 и ↓2+46
Комментарии18

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

Время на прочтение24 мин
Количество просмотров18K

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

Читать далее
Всего голосов 51: ↑46 и ↓5+41
Комментарии55

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

Время на прочтение4 мин
Количество просмотров15K
1. Пролог

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

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

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

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

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

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

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

Время на прочтение5 мин
Количество просмотров66K
Наверняка на хабре уже немало постов на эту тему. Тем не менее, я попытаюсь рассказать свою точку зрения на всё это…

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

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

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

Время на прочтение10 мин
Количество просмотров20K

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

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

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

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

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

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

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

Читать далее
Всего голосов 71: ↑66 и ↓5+61
Комментарии125

О развитии навыка говорения

Время на прочтение8 мин
Количество просмотров26K

«ЗНАТЬ иностранный язык» и «УМЕТЬ на нём разговаривать» — это очень разные вещи. Письменные переводчики знают язык глубоко, но разговаривают некоторые из них хуже девочки-секретаря, которая ловко оперирует двумя-тремя сотнями заученных фраз. У них разные задачи: переводчик имеет дело со сложными текстами, а работа секретаря — короткие типовые разговоры.

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

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

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

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

Читать далее
Всего голосов 44: ↑40 и ↓4+36
Комментарии76

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

Время на прочтение6 мин
Количество просмотров18K

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

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

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

Читать далее
Всего голосов 9: ↑8 и ↓1+7
Комментарии17

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

Время на прочтение13 мин
Количество просмотров18K

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

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

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

Читать далее
Всего голосов 9: ↑5 и ↓4+1
Комментарии10
1
23 ...

Информация

В рейтинге
Не участвует
Откуда
Россия
Зарегистрирован
Активность