Как стать автором
Обновить
1569.73
Timeweb Cloud
То самое облако
Сначала показывать

Применение чистой архитектуры в Go

Уровень сложностиСложный
Время на прочтение13 мин
Количество просмотров11K


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

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

Большинство этих инструментов – это частности, и выбор большинства из них (кроме языка программирования) можно на некоторое время отложить, пока проект не окрепнет. Поэтому на ранних этапах разработки проекта стоит уделить внимание не тому, при помощи каких инструментов пойдёт реализация. Лучше смоделировать предметную область проекта, а к вышеупомянутым инструментам подходить так, как следует — то есть, как к частностям. Разумеется, чтобы проект был реализован, с такими деталями тоже нужно определиться, но они могут оставаться в некоторой отдельной части кода, не относящейся к предметной области — там, где их будет легко менять, удалять или заменять по нашему усмотрению.

Для решения именно таких проблем с сильной связностью кода многоопытные инженеры создали ряд архитектурных паттернов. Таковы, в частности, чистая архитектура Роберта Мартина («дядюшки Боба»), гексагональная архитектура Алистера Кокбёрна и явная архитектура Герберто Грацы.
Читать дальше →
Всего голосов 24: ↑22 и ↓2+31
Комментарии5

Как айтишник Liebherr в Голландии чинил

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

В каждой стране есть свои особенности национального бытия, которые у иммигрантов могут вызывать непонимание. В Голландии такой особенностью для нас оказалась местная архитектура. Нет, не та что про фронтоны и антаблементы, в этом плане тут всё ок, а практическая её часть — размеры и планировки жилья, особенно съёмного. В паре слов эти инженерные решения можно описать как «узко, неудобно и жить негде». Довольно типичным явлением для арендной квартиры, счастливыми съёмщиками коей мы оказались, является миниатюрный подстольный холодильник без морозильного отделения. Местные, как правило, заполняют его пивом в жестянках (хотя как правильно назвать жестянку из алюминия?) и отлично проводят свободное время перед большим экраном с футболом. А нам, ишь ты, подавай хозяйство-домоводство… дичь какая-то, да и только. Учитывая дефицит пространства и трудности потенциального перевоза на другое место жительства (привет-привет Нидерландским лестницам), мы долго не решались купить себе нормальный холодильник. Но вот явился нам на барахолке Он — старенький и местами ржавенький Liebherr GP1466, низкая морозильная камера. При цене `всего лишь` 160 евро по неизвестным причинам это показалось мне супер-предложением. Наверное просто показалось, понял я потом. В своё оправдание могу сказать только две вещи. Во-первых, его габариты были одновременно минимально разумными с точки зрения практической полезности и максимальными в смысле возможности поднять по той самой лестнице. Во-вторых, на родине у нас Liebherr 30 лет работал, и ещё будет работать.
Читать дальше →
Всего голосов 64: ↑57 и ↓7+71
Комментарии36

Полигон для творчества за 1500 р. Часть 3. Экран, Малина, OpenOCD и бусики

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


Приветствую вас, друзья!

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

Сегодня поиграемся с экраном и векторным анализатором цепей ОСА 103, подружим OpenOCD с Малиной и немного покопаемся в прошивке.

Вперёд к экспериментам!
Читать дальше →
Всего голосов 29: ↑29 и ↓0+37
Комментарии0

Руководство по Next.js. 2/3

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


Hello world!


Представляю вашему вниманию вторую часть обновленного руководства по Next.js.



На мой взгляд, Next.js — это лучший на сегодняшний день инструмент для разработки веб-приложений.


Предполагается, что вы хорошо знаете JavaScript и React, а также хотя бы поверхностно знакомы с Node.js.


Обратите внимание: руководство актуально для Next.js версии 14.


При подготовке руководства я опирался в основном на официальную документацию, но в "отсебятине" мог и приврать (или просто очепятаться) 😁 При обнаружении подобного не стесняйтесь писать в личку 😉


Парочка полезных ссылок:


Читать дальше →
Всего голосов 12: ↑11 и ↓1+18
Комментарии3

Как собрать LTE-модем на базе SDR

Уровень сложностиСложный
Время на прочтение17 мин
Количество просмотров18K
Приветствую всех!
Пожалуй, самой закрытой технологией в пользовательском сегменте является сотовая связь. Очень немногие знают о том, как на самом деле работают телефоны и модемы, отчего им часто приписывают всякие мифические свойства. Как насчёт попробовать запустить полностью открытую реализацию модема стандарта 4G? Именно этим я и предлагаю заняться.



Итак, в сегодняшней статье поговорим о том, как взаимодействовать с мобильной сетью при помощи SDR. Попутно узнаем, какой софт для этого существует, и соберём самый дорогой 4G-модем в истории.

Традиционно будет много интересного.
Читать дальше →
Всего голосов 96: ↑96 и ↓0+108
Комментарии22

История создания Civilization IV: избавление от унылости

Уровень сложностиПростой
Время на прочтение8 мин
Количество просмотров9.9K
Историю четвёртой части «Цивилизации» можно начать с очередной смены владельца бренда Civilization: Atari (Infrogames) продала их 2К Games, дочерней компании Take-Two. Сумма сделки составила 22,3 миллиона долларов. На дворе стоял 2004-й год.



Хотя на самом деле к тому моменту разработка уже весьма активно велась, так что Сид Мейер и его студия Firaxis отнеслись к происходящему философски: смена издателя не сильно влияла на планы команды. Руководил проектом Сорен Джонсон, набравшийся опыта в работе над предыдущей частью серии.
Читать дальше →
Всего голосов 28: ↑27 и ↓1+32
Комментарии13

Как заново реализовать тетрис

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


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

Вне всяких сомнений, я наработал массу опыта и знаний, выполняя все эти вещи самостоятельно. Поэтому, на мой взгляд, вполне целесообразно и далее так делать, то есть, попробовать выполнить какой-то проект, уже реализованный ранее. Всё это — именно с целью самообучения. На этот раз я взялся самостоятельно перепроектировать «Тетрис». Чтобы было ещё интереснее, я решил всё сделать на C.

На самом деле, это не первая моя игра на C – немного ранее я уже успел написать на С клон сапёра. В блоге также об этом не писал, но, может быть, напишу в будущем, так как проект получился очень интересным. Пожалуй, этот опыт пригодился мне в работе над «Тетрисом».
Читать дальше →
Всего голосов 35: ↑28 и ↓7+35
Комментарии32

Оживляем неизвестный дисплей от японского поезда/автобуса

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров18K
Как-то раз, очередным томным субботним вечером, я в очередной раз листал от нефиг делать Yahoo! Auctions — одну из крупнейших японских сетевых барахолок. Внезапно, среди рекомендуемых лотов появился вот такой внушительных размеров электровакуумный дисплей:



Однако, рулить дисплеем, как правило, та ещё задача. «Особенно если динамическая индикация, да ну его, влом!» — подумал было я. Но у того же продавца обнаружилась и, судя по всему, управляющая плата:



На фотографии виднеется 8085 процессор, 8251 UART и ПЗУшка — казалось бы, дизассемблируй себе, разбирай протокол, да просто с ардуины выводи что угодно. Да ещё и за одну йену, это прям даром! После этого я решил всё же попытать удачу и выхватить этот дисплей. Тем более, что давно уже хотелось какие-нибудь красивые часики в комнату…
Читать дальше →
Всего голосов 179: ↑179 и ↓0+202
Комментарии43

«Невозможный» аудиокодек для Sega MD

Уровень сложностиСложный
Время на прочтение25 мин
Количество просмотров13K

Вступительный текст про легендарную консоль, вода, бла-бла-бла. Искрой для появления статьи послужил неожиданный факт: ЦАП мегадрайва способен воспроизводить звук с качеством 26 килогерц 8 бит. Что? Хочу такое! Но… Максимальный размер картриджа 4 Мб, этого хватит на 2.5 минуты такого звука, с распаковкой современных кодеков старый процессор не справится. Качество против количества. Нерешаемое противоречие, но если сильно хочется, то всё получается.
Читать дальше →
Всего голосов 111: ↑111 и ↓0+129
Комментарии29

Смартфон для джаваскриптера-олдфага: стоит ли гику брать дешманские девайсы на KaiOS? Смотрим на Nobby 240 LTE

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

Друзья! Много ли платформ вы знаете, где для написания пользовательских приложений используется стек… веб-технологий, причём это единственный нативный способ писать программы? Услышав о HTML5 + CSS + JS, на ум приходит разве что webOS — которая используется в современных телевизорах от LG (а ранее использовалась ещё и в Palm Pre — уникальный смартфон, единственный в своём роде), а олды вспомнят ещё и про FireFox OS, в которой вся оболочка (включая многозадачность, шторку уведомлений и все приложения) также была реализована на JS. Но ни webOS, ни FFOS в своё время не суждено было стать массовыми ОС на смартфонах: сказывались аппаратные ограничения устройств, да и проблемы с портированием уже существующих приложений с других платформ (например, игр). Однако несколько лет назад, проект FireFox OS был форкнут и на свет появилась новая система, предназначенная для… умных кнопочных телефонов с LTE! И имя ей — KaiOS. Вероятно, многие мои читатели слышали о ней и о новых умных кнопочниках от Nokia. Но что из себя представляет система под капотом и чем она может быть интересна гику? Читайте в новом материале!
Читать дальше →
Всего голосов 65: ↑64 и ↓1+74
Комментарии30

Руководство по Next.js. 1/3

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


Hello world!


Представляю вашему вниманию первую часть обновленного руководства по Next.js.



На мой взгляд, Next.js — это лучший на сегодняшний день инструмент для разработки веб-приложений.


Предполагается, что вы хорошо знаете JavaScript и React, а также хотя бы поверхностно знакомы с Node.js.


Обратите внимание: руководство актуально для Next.js версии 14.


При подготовке руководства я опирался в основном на официальную документацию, но в "отсебятине" мог и приврать (или просто очепятаться) 😁 При обнаружении подобного не стесняйтесь писать в личку 😉


Парочка полезных ссылок:


Читать дальше →
Всего голосов 16: ↑15 и ↓1+19
Комментарии2

Полигон для творчества за 1500 р. Часть 2. Структура платы, 256 UARTов и расширение спектра

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


Приветствую вас, друзья!

Продолжаем знакомство с платой SX100. Рассмотрим структуру и некоторые любопытные особенности платы, узнаем, как улучшить ЭМС с помощью расширения спектра. Сделаем пару сотен UARTов и доработаем плату.

Вперёд к экспериментам!
Читать дальше →
Всего голосов 31: ↑30 и ↓1+40
Комментарии10

Max Payne: хороша ли неонуарная классика сегодня?

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

Max Payne… как много в этих словах…
Если, вспоминая Fallout, ты сразу «слышишь» слова Рона Перлмана «War. War never changes», то при одной лишь мысли об истории Макса в голове тотчас начинает играть заглавная мелодия проекта – грустная, меланхоличная и цепляющая за живое. Любой из нас, заставший Max Payne в начале нулевых, помнит чувство восхищения от увиденного. Еще недавно Джон Кармак – создатель Doom – говорил, что сюжет в видеоиграх нужен не более, чем в порно. Но вот вышел Half-Life, о сюжете которого можно писать книгу, а за ним и Max Payne, который, подобно драматическому роману, цепляет своим повествование и стилем, не отпуская до финальных титров.

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

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

Сегодня я хочу рассказать про Max Payne и вспомнить, почему она смогла оставить такой след в индустрии и, что важнее, в сердцах игроков по всему миру.
Читать дальше →
Всего голосов 42: ↑40 и ↓2+54
Комментарии41

Тюнинг старого тетриса

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

Недавно я прикупил себе старенький и оригинальный — «тот самый» тетрис, а дальше меня затянуло. Собственно, нормальная ситуация. Однако, мне пришлось столкнуться с одной неприятной проблемой: если во время игры — скорость (ака сложность) повышается выше двух пунктов, то играть становится совершенно невозможно, а скоростей-то много…

Понятно, что идёт какая-то ошибка в подборе частоты задающего генератора в контроллере тетриса, и это даже слышно на слух, так как мелодия играет уж больно быстро. Потому, мне пришла в голову мысль, а возможно ли как-то внести аппаратные изменения в устройство, так чтобы понизить частоту контроллера для корректной игры? Сам спросил — сам ответил.
Читать дальше →
Всего голосов 77: ↑75 и ↓2+112
Комментарии53

Жизнь после отвала eMMC. Часть 2: даём новую жизнь устройствам с полностью мёртвой памятью. Загружаем Android с MicroSD

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

Отвал флэш-памяти типа eMMC — весьма частая болячка смартфонов и планшетов, которая массово преследует современные девайсы на протяжении вот уже более 10 лет. Симптомы проблемы знакомы многим читателям: смартфон виснет на заставке, системные приложения регулярно вылетают, или настройки системы внезапно перестают сохраняться. Сам процесс замены флэш-памяти требует навыков перекатки и пайки BGA-чипов, оборудования (трафареты для реболла, программатор с колодками, опционально подогрев) и понимания того, как работает загрузчик той или иной аппаратной платформы, поэтому в СЦ за эту процедуру могут взять достаточно большую сумму. На некоторых девайсах менять память уже совсем невыгодно, особенно когда другой такой-же аппарат стоит полторы тысячи рублей на барахолке, но воспоминания о любимом девайсе порой гораздо дороже, чем сумма за ремонт смартфона. Год назад я уже писал материал о загрузке Android с MicroSD при условии того, что eMMC ещё подает хоть какие-то признаки жизни, а сегодня я вам расскажу о способе загрузить систему с флэшки уже после того, как чип флэш-памяти отказал и ушёл в read-only. Сегодня мы с вами: узнаем о том, какие типы флэш-памяти существуют и причины их отказа, разметим MicroSD-флэшку и запишем на неё образ системы, пропатчим пути монтирования в boot.img, а также узнаем, как теперь запускать наш смартфон и посмотрим, сможет ли он работать достаточно шустро с MicroSD флэшки! Интересно узнать, как вернуть жизнь таким легендам, как Google Nexus? Тогда добро пожаловать под кат!
Читать дальше →
Всего голосов 75: ↑73 и ↓2+84
Комментарии72

Фильтр Блума

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



У каждого разработчика есть набор инструментов для решения различных задач. Однако со временем возникает необходимость расширять этот набор, чтобы эффективно справляться с более сложными задачами. В этой статье я хочу познакомить вас с инструментом, которым вы, скорее всего, раньше не пользовались. И хотя он подходит для решения узкого спектра задач, его использование может оказаться весьма полезным. Знакомьтесь — "фильтр Блума" (Bloom filter).

Читать дальше →
Всего голосов 44: ↑41 и ↓3+53
Комментарии16

Числа и байты: как работает память в Linux?

Уровень сложностиСложный
Время на прочтение27 мин
Количество просмотров14K
image

Часть первая: физическая память


При создании операционных систем всегда уделяется внимание работе с памятью. Память — это компонент компьютера, где хранятся программы и данные, и без нее современные компьютеры не могли бы функционировать. Важной единицей хранения данных в памяти является бит, который может принимать два значения: 0 или 1. Память состоит из ячеек, каждая из которых имеет свой адрес. Ячейки могут содержать различное количество битов, и количество адресуемых ячеек зависит от количества бит в адресе.

Также память включает в себя оперативное запоминающее устройство (ОЗУ) или RAM, где можно записывать и считывать информацию. Существует статическая ОЗУ (SRAM) и динамическая ОЗУ (DRAM), различающиеся в том, как хранится информация. В SRAM информация сохраняется до выключения питания, в то время как в DRAM используются транзисторы и конденсаторы, что позволяет хранить данные, но требует их периодического обновления. Разные типы ОЗУ имеют свои преимущества и недостатки, и выбор зависит от конкретных потребностей.

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

Но что такое физическая память, как она работает в Linux? Что такое сегментация, утечки памяти и некие «страницы»?

Все, что вы хотели знать, но боялись спросить о памяти пингвина — читайте здесь и сейчас!
Читать дальше →
Всего голосов 31: ↑31 и ↓0+35
Комментарии18

GPT-4, Claude 3, Gemini Pro или опенсорс — как выбрать LLM под свою задачу?

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

Несмотря на то, что сейчас из каждого утюга рекламируется доступ к ChatGPT и GPT-4, вообще говоря, в мире существует несколько больше разных поставщиков LLM (больших языковых моделей), и некоторые из которых могут гораааздо более эффективнее решать какие-то конкретные задачи.

Я уже полгода веду проект VseGPT.ru с доступом к разным LLM из России по OpenAI API (ну, и через вебчат). Львиная доля работы — подключение новых нейросетей. Сейчас их уже свыше 60, и каждую я попробовал хотя бы раз, ну, когда подключал.

Правда, сайт LLMExplorer, собирающий данные об опенсорс нейросетях с портала Hugging Face, говорит, что их там уже более 33 000 штук. М-да.

В общем, вероятно, я не знаю о текстовых сетках всё, но определенно знаю кое-что — хотя бы в пределах своего скромного опыта в 60 сеток. Так что кому интересно — прошу под кат.
Читать дальше →
Всего голосов 25: ↑24 и ↓1+31
Комментарии28

Лучшее время для инди-игр и скандал со Sweet Baby Inc: что происходит с игровой индустрией

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

В своей новогодней статье с итогами про видеоигры я сказал, что 2023 год стал лучшим годом в истории компьютерных игр. В статье вы могли прочесть небольшой обзор: 8 игр, которые, на мой субъективный взгляд, стали лучшими за 2023 год. Но в 2023 году вышло чуть больше, чем 8 игр. Точнее, вышло более 14 тысяч игр, согласно данным со Steam, то есть почти по 50 новых игр в день.

Даже при большом желании мне бы физически не удалось поиграть во все эти игры, не говоря уже о том, чтобы пройти их. За таким количеством игр не только не сможет угнаться ни один человек, но даже ни один игровой сайт. Даже крупнейшие сайты в отрасли не могут позволить себе редакционную команду, способную играть по 50 игр в день, чтобы найти и описать те, которые заслуживают внимания. Реально, это даже не десятая часть игр. И не в последнюю очередь потому, что из этих 50 игр 49 окажутся полным шлаком.


Если сравнивать с 2022 годом, то в 2023 году вышло на 2000 игр больше, и на целых 5000 игр больше, чем пять лет назад. Нет никаких оснований предполагать, что этот рост уменьшится в ближайшее время. И игры продолжают разрабатываться. Только на начало марта 2024 года уже выпущены 3300 игр. Это говорит о том, что в 2024 году будет не меньше игр, чем в 2023, если не больше.

В этой статье мне хочется поговорить об отличной возможности для независимых AA-игр и инди-разработчиков вырваться вперёд, оставив позади крупнобюджетные AAA-игры, и про скандал с нарративной консалтинговой компанией.
Читать дальше →
Всего голосов 27: ↑19 и ↓8+26
Комментарии33

Аппаратный антискиммер. Чёрная коробочка, защищающая банкоматы

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров12K
Приветствую всех!
Думаю, абсолютному большинству сидящих здесь знакомы такие устройства для кражи данных банковских карт как скиммеры. С ними активно боролись (где-то успешно, а где-то не очень), а к распространению бесконтактных карт они тихо и незаметно ушли в историю.



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

Итак, в сегодняшней статье поговорим про такой малоизвестный среди обывателей вид защиты банкоматов как активные антискиммеры. Попутно попробуем запустить имеющиеся у меня девайсы и узнаем, как они работают. Традиционно будет много интересного.
Читать дальше →
Всего голосов 70: ↑70 и ↓0+74
Комментарии14

Информация

Сайт
timeweb.cloud
Дата регистрации
Дата основания
Численность
201–500 человек
Местоположение
Россия
Представитель
Timeweb Cloud