Pull to refresh
2
0
Данил @Nad73

User

Send message

Как выживают китайские магнаты майнинга биткоинов

Reading time14 min
Views22K

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




Мистер Гао говорит мне: «Только потому, что нечто в Китае не запрещено, не значит, что оно разрешено». Перед последним словом он делает небольшую паузу, подчёркивая его. Гао – майнер биткоинов, владелец множества устройств для майнинга, несколькими тысячами из которых он пользуется сам, а остальные сдаёт в аренду. На сегодня в его распоряжении находится 110 000 машин, распределённых по обширным западным провинциям Китая, Сычуань и Юньнань, а также на севере, в провинции Синцзян и во Внутренней Монголии. Иначе говоря, несмотря на стремительное падение стоимости биткоина за последние 18 месяцев, Гао планирует расширение бизнеса.
Читать дальше →
Total votes 28: ↑24 and ↓4+20
Comments29

Шейдеры растворения и исследования мира

Reading time9 min
Views25K

Часть 1: шейдер растворения


Шейдер растворения возвращает красивый эффект, к тому же его легко создать и понять; сегодня мы сделаем его в Unity Shader Graph, а также напишем на HLSL.

Вот пример того, что мы будем создавать:



Как это работает


Чтобы создать шейдер растворения (dissolve shader), нам придётся работать со значением AlphaClipThreshold в шейдере «Shader Graph» или воспользоваться функцией HLSL под названием clip.

По сути, мы прикажем шейдеру не рендерить пиксель на основании текстуры и переданного значения. Нам нужно знать следующее: белые части растворяются быстрее.
Читать дальше →
Total votes 47: ↑47 and ↓0+47
Comments3

Нестыдные вопросы про жизненный цикл

Reading time8 min
Views16K


Каждый разработчик сталкивался с вопросами про жизненный цикл Activity: что такое bind-сервис, как сохранить состояние интерфейса при повороте экрана и чем Fragment отличается от Activity.
У нас в FunCorp накопился список вопросов на похожие темы, но с определёнными нюансами. Некоторыми из них я и хочу с вами поделиться.

Читать дальше →
Total votes 28: ↑27 and ↓1+26
Comments8

Планетарный ландшафт

Reading time51 min
Views22K
Трудно поспорить, что ландшафт — неотъемлемая часть большинства компьютерных игр на открытых пространствах. Традиционный метод реализации изменения рельефа окружающей игрока поверхности следующий — берем сетку (Mesh), представляющую из себя плоскость и для каждого примитива в этой сетке производим смещение по нормали к этой плоскости на значение, конкретное для данного примитива. Говоря простыми словами, у нас есть одноканальная текстура размером 256 на 256 пикселей и сетка плоскости. Для каждого примитива по его координатам на плоскости берем значение из текстуры. Теперь просто смещаем по нормали к плоскости координаты примитива на полученное значение(рис.1)


Рис.1 карта высот + плоскость = ландшафт

Почему это работает? Если представить, что игрок находится на поверхности сферы, и радиус этой сферы чрезвычайно велик по отношению к размеру игрока, то искривлением поверхности можно пренебречь и использовать плоскость. Но что если не пренебрегать тем фактом, что мы находимся на сфере? Своим опытом построения такого рода ландшафтов я хочу поделиться с читателем в данной статье.
Читать дальше →
Total votes 82: ↑82 and ↓0+82
Comments16

О выборе структур данных для начинающих

Reading time18 min
Views177K
image

Часть 1. Линейные структуры


Массив


Когда вам нужен один объект, вы создаёте один объект. Когда нужно несколько объектов, тогда есть несколько вариантов на выбор. Я видел, как многие новички в коде пишут что-то типа такого:

// Таблица рекордов
int score1 = 0;
int score2 = 0;
int score3 = 0;
int score4 = 0;
int score5 = 0;

Это даёт нам значение пяти рекордов. Этот способ неплохо работает, пока вам не потребуется пятьдесят или сто объектов. Вместо создания отдельных объектов можно использовать массив.

// Таблица рекордов
const int NUM_HIGH_SCORES = 5;
int highScore[NUM_HIGH_SCORES] = {0};

Будет создан буфер из 5 элементов, вот такой:



Заметьте, что индекс массива начинается с нуля. Если в массиве пять элементов, то они будут иметь индексы от нуля до четырёх.
Читать дальше →
Total votes 42: ↑40 and ↓2+38
Comments32

25 микрочипов, потрясших мир

Reading time23 min
Views52K
image

В разработке микрочипов, как и в жизни, мелочи иногда складываются в значительные явления. Выдумайте хитрую микросхему, создайте её из полоски кремния, и ваше маленькое создание может привести к технологической революции. Так произошло с микропроцессором Intel 8088. И с Mostek MK4096 4-килобитной DRAM. И с Texas Instruments TMS32010 цифровым процессором сигналов.

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

Мы подготовили список из 25 ИС, заслуживающих, по нашему мнению, почётное место на каминной полке дома, который построили Джек Килби и Роберт Нойс [изобретатели интегральной схемы – прим. перев.]. Некоторые из них превратились в долгоиграющую икону поклонения любителей чипов: к примеру, таймер Signetics 555. Другие, например, операционный усилитель Fairchild 741, стали азбучными примерами схем. Некоторые, к примеру, микроконтроллеры PIC от Microchip Technology, продавались миллиардами, и до сих пор продаются. Несколько особых чипов, таких, как флэш-память от Toshiba, создали новые рынки. А по меньшей мере один стал символом гиков в поп-культуре. Вопрос: на каком процессоре работает Бендер, алкоголик, курильщик и достойный порицания робот из «Футурамы»? Ответ: MOS Technology 6502.
Читать дальше →
Total votes 47: ↑43 and ↓4+39
Comments56

Анализ исходного кода Doom 3

Reading time32 min
Views55K
image

23 ноября 2011 года id Software поддержала собственную традицию и опубликовала исходный код своего предыдущего движка.

На сей раз настало время idTech4, который использовался в Prey, в Quake 4 и, разумеется, в Doom 3. Всего за несколько часов было создано больше 400 форков репозитория на GitHub, люди начали исследовать внутренние механизмы игры или портировать её на другие платформы. Я тоже решил поучаствовать и создал Intel-версию для Mac OS X, которую Джон Кармак любезно прорекламировал.

С точки зрения чистоты и комментариев это самый лучший релиз кода id Software со времени кодовой базы Doom iPhone (которая была выпущена позже, а потому откомментирована лучше). Крайне рекомендую каждому изучить этот движок, собрать его и поэкспериментировать.

Вот мои заметки о том, что я понял. Как обычно, я подчистил их, надеюсь, они сэкономят кому-нибудь пару часов и сподвигнут кого-нибудь на изучение кода для усовершенствования своих навыков программиста.
Total votes 89: ↑89 and ↓0+89
Comments36

Введение в процедурную анимацию

Reading time11 min
Views52K
image

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

GIF

Серия будет состоять из следующих частей:

Total votes 48: ↑46 and ↓2+44
Comments3

Отладчик за копейки: делаем ST-Link из Maple Mini

Reading time2 min
Views75K


Начав свое знакомство с STM32 с китайских клонов Leaf Maple Mini (потому что самый дешевый вариант, 4$), я столкнулся с неудобством. Поскольку на Maple IDE рассчитывать не стоит, значит, приходится работать с «голым» STM32. А раз ST-Link у меня нет, заливать программу я могу только по UART, что неудобно (и нет возможности отладки).

Но хабраюзер imwode ровно через 9 часов после моей публикации написал ответный материал, из которого я узнал прекрасное: отладчик ST-Link основан на том же микроконтроллере STM. При этом, прошивка отладчика умельцами вытащена и готова к загрузке на неродные устройства. Maple Mini подходит идеально: ничего лишнего, USB распаян, надо только несколько резисторов подключить.

Читать дальше →
Total votes 21: ↑20 and ↓1+19
Comments7

MakiseGUI — бесплатная библиотека графического интерфейса для микроконтроллеров

Reading time6 min
Views33K

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


Назвал я её MakiseGui.


Total votes 66: ↑65 and ↓1+64
Comments57

Шаблоны проектирования с человеческим лицом

Reading time32 min
Views511K

image


Шаблоны проектирования — это способ решения периодически возникающих проблем. Точнее, это руководства по решению конкретных проблем. Это не классы, пакеты или библиотеки, которые вы можете вставить в своё приложение и ожидать волшебства.


Как сказано в Википедии:


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

image Будьте осторожны


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

В статье приведены примеры на PHP 7, но пусть вас это не смущает, ведь заложенные в шаблонах принципы неизменны. Кроме того, внедряется поддержка других языков.

Читать дальше →
Total votes 148: ↑134 and ↓14+120
Comments98

Однопиксельную камеру с активной подсветкой ускорили в 50 раз

Reading time4 min
Views24K

Образцы фотоснимков, сделанных новой однопиксельной камерой с подсветкой всего по 50 шаблонам из случайного распределения Бернулли (M=50)

В традиционной цифровой фотосъёмке принято использовать объектив, который формирует световой поток и направляет его на матрицу светочувствительных элементов — ПЗС или КМОП сенсор цифровой камеры. Считается, что чем больше элементов в матрице, тем лучше фотография: 20 миллионов элементов лучше, чем 13 миллионов. Это один из основных показателей качества фотографии, вместе со светосилой объектива и плотностью самих элементов (чем меньше плотность, тем больше физический размер матрицы, тем меньше искажений и наводок дают элементы).

Но что если у фотоаппарата вообще нет объектива, а светочувствительная матрица состоит из 1 (одного) пикселя? Современные цифровые технологии обработки сигналов действительно позволяют очень быстро собрать и обработать световой поток одним-единственным светочувствительным элементом. В этом случае фотоаппарату не нужны не объектив, ни большая матрица. То есть фотоаппаратура заменяется на компьютерные вычисления.
Читать дальше →
Total votes 27: ↑20 and ↓7+13
Comments52

Основы SQL на примере задачи

Reading time6 min
Views685K
В этом руководстве мы рассмотрим основные sql команды на примере небольшой задачи. При прочтении желательно сидеть за консолью mysql и вводить все запросы для большей наглядности.

Постановка задачи


Дана база данных, в ней 3 таблицы следующего вида:




table1: user_id (INT(5), PRIMARY KEY), username (VARCHAR(50), INDEX)
table2: phone_id (INT(5), PRIMARY KEY), user_id (INT(5), INDEX), phone_number (INT(10), INDEX)
table3: room_id (INT(5), PRIMARY KEY), phone_id (INT(5), INDEX), room_number(INT(4) INDEX)

Необходимо выбрать номер комнаты в которой сидит пользователь с ником qux…
Читать дальше →
Total votes 72: ↑42 and ↓30+12
Comments42

Что в имени тебе моем: как качественно «пробить» человека в сети Интернет?

Reading time5 min
Views201K
Мы постоянно встречаемся в своей жизни с новыми людьми, и стоит констатировать, что помимо хороших друзей нам попадаются мутные товарищи, а иногда и отъявленные мошенники. Любовь наших сограждан оставить свой след в интернете и старания наших ИТ-компаний по автоматизации всего и вся позволяют нам довольно оперативно собирать интересующую информацию о конкретных персонах по открытым источникам. Чтобы это делать быстро и качественно, нам нужно владеть простой методологией разведывательной работы и знать, где и какую информацию о человеке можно добыть в интернете.
Читать дальше →
Total votes 90: ↑70 and ↓20+50
Comments56

Сглаживание цифровых сигналов

Reading time12 min
Views94K

Введение


Данную статью меня заставил написать пост habrahabr.ru/post/183986, где не совсем правильно используется некоторый алгоритм сглаживания изображения.

Сразу перейдём к сути дела.

Математические модели цифровых сигналов — вектора и матрицы, элементами которых являются числа. Числа могут быть двоичными (бинарный сигнал), десятичными («обычный» сигнал) и так далее. Любой звук, любое изображение и видео могут быть преобразованы в цифровой сигнал1: звук — в вектор, изображение — в матрицу, а видео — в последовательный набор матриц. Поэтому цифровой сигнал — это, можно сказать, универсальный объект для представления информации.

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

Задача сглаживания может использоваться при прореживании сигналов, то есть когда, например, необходимо отобразить большую картинку на небольшой экран. Или когда частота дискретизации звука снижается, например, с 48000 Гц до 44100 Гц. Понижение частоты выборок — коварная операция, требующая предварительной обработки сигнала (низкочастотной фильтрации), но это — тема отдельного разговора…

Приведём пример «плохого» сглаживания


Казалось бы, обычное усреднение и сигнал на выходе должен быть «гладким». Но как определить, насколько он стал «глаже»? Не переборщили ли мы? А может быть некоторые коэффициенты выбрать не по 1/3? А может быть усреднить по пяти точкам? Как определить насколько ослабляются частотные составляющие в сигнале? Как найти свой (то есть для конкретной задачи) оптимум?
На эти и некоторые другие вопросы я постараюсь ответить так, чтобы «обычный» программист смог обосновать свой алгоритм, — надеюсь, не только алгоритм на тему «Сглаживание», так как идеи будут излагаться весьма общие, заставляющие думать самому
Читать дальше →
Total votes 38: ↑36 and ↓2+34
Comments32

Маленькие секреты трассировки плат с операционными и инструментальными усилителями

Reading time4 min
Views45K
При проектировании плат
Ничто не обходится так дёшево,
И не ценится так высоко,
Как правильная трассировка.



В век интернета вещей и доступности изготовления печатных плат, причём не только по ЛУТ технологии, их проектированием часто занимаются люди, вся деятельность которых связана с цифровой техникой.

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

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

Рекомендации очень просты и многим известны, тем не менее, как показала моя практика, далеко не всегда даже специалисты с опытом их придерживаются.
Бесплатные советы живут под катом
Total votes 38: ↑36 and ↓2+34
Comments88

Белым по чёрному. Разгружаем глаза

Reading time12 min
Views180K
Все слышали выражение “чёрным по белому написано”. Пришло оно к нам из бумажного мира и как-бы утверждает, что именно это сочетание цветов для текста и фона дает наилучший контраст и читабельность. Предлагаю опровергнуть это предположение и чаще пользоваться противоположной цветовой схемой. В этой статье я не буду убеждать в целесообразности цветового решения “белым по чёрному” (и некоторые утверждения могут быть спорными). Цель этой статьи сделать обзор инструментов, которые позволяют быстро и удобно инвертировать яркие цвета в часто используемых приложениях с целью уменьшить нагрузку на глаза. А также предлагаю инвертировать упомянутое выражение и в эпоху ЖК дисплеев говорить “белым по чёрному написано напечатано”.
разгрузить...
Total votes 34: ↑30 and ↓4+26
Comments45

Google testing framework (gtest)

Reading time6 min
Views185K
Когда вставал вопрос о тестировании кода, я не задумываясь использовал boost::test. Для расширения кругозора попробовал Google Test Framework. Помимо всяких имеющихся в нем плюшек, в отличии от boost::test проект бурно развивается. Хотел бы поделиться приобретенными знаниями. Всем кому интересно прошу
под кат.
Total votes 62: ↑56 and ↓6+50
Comments23

Правило чтения по спирали

Reading time6 min
Views15K
Техника, известная как «Чтение по спирали/по часовой стрелке» (“Clockwise/Spiral Rule”) позволяет любому программисту разобрать любое объявление языка Си.

Следуйте этим простым шагам:
Читать дальше →
Total votes 145: ↑132 and ↓13+119
Comments42

Простейший делегат на C++

Reading time7 min
Views86K
logoВ C# есть делегаты. В python есть делегаты. В javascript есть делегаты. В Java есть выполняющую их роль замыкания. А в C++ делегатов нет O_O. Многие талантливые программисты успешно борются с этим недостатком, разрабатывая и используя sigslots, boost::function и другие ценные и нужные библиотеки. К сожалению, большинство реализаций отличаются не только методом использования, но также эпической сложностью применяемой шаблонной магии. Дабы при изучении исходников boost::function волосы не вставали дыбом, я написал эту небольшую статью, показывающую как самым простым и топорным способом реализовать делегат на C++. Описанная реализация является иллюстративной, имеет множество недостатков и ее вряд ли можно применить в серьезных проектах — зато она максимально простая и позволяет ознакомиться с предметной областью не разбирая трехэтажные шаблоны sigslots :).

Посмотреть схему велосипеда - много текста и картинок
Total votes 50: ↑43 and ↓7+36
Comments45
1

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity