Pull to refresh
-4
0
Send message

Cжатие и улучшение рукописных конспектов

Reading time9 min
Views37K
Я написал программу для очистки отсканированных конспектов с одновременным уменьшением размера файла.

Исходное изображение и результат:


Слева: исходный скан на 300 DPI, 7,2 МБ PNG / 790 КБ JPG. Справа: результат с тем же разрешением, 121 КБ PNG [1]

Примечание: описанный здесь процесс более-менее совпадает с работой приложения Office Lens. Есть другие аналогичные программы. Я не утверждаю, что придумал нечто радикальное новое — это просто моя реализация полезного инструмента.

Если торопитесь, просто посмотрите репозиторий GitHub или перейдите в раздел результатов, где можно поиграться с интерактивными 3D-диаграммами цветовых кластеров.
Читать дальше →
Total votes 124: ↑124 and ↓0+124
Comments50

Выпуск#13: ITренировка — актуальные вопросы и задачи от ведущих компаний

Reading time4 min
Views6.5K
Мы отобрали вопросы и задачи, встречающиеся соискателям на собеседованиях в ведущие ИТ-компании мира.

КДПВ

В подборку попали задачи, задаваемые на собеседованиях должность инженера-разработчика. Задачи различного уровня сложности, начиная от простых. Предлагаем Вам попробовать свои силы и постараться решить задачи самостоятельно — тогда вопросы на собеседовании вряд ли застанут Вас врасплох.
Читать дальше →
Total votes 12: ↑12 and ↓0+12
Comments26

Зомби, которые съедают вашу память

Reading time8 min
Views72K
Что бы вы там себе не думали, а зомби существуют. И они действительно едят мозги. Не человеческие, правда, а компьютерные. Я говорю сейчас о зомби-процессах и потребляемых ими ресурсах. Это будет душераздирающая история о потерянных и снова найденных 32 ГБ оперативной памяти. Возможно, лишь некоторые из вас столкнутся с точно такой же проблемой, но если вдруг это произойдёт — у вас хотя бы будет шанс понять, что происходит.

Начнём с того, что компьютеры под управлением ОС Windows склонны со временем терять память. Ну, по крайней мере, у меня, при моём способе ими пользоваться. После пары недель без перезагрузок (или, например, всего одного уикэнда за который я 300 раз пересобрал Хром) я стал замечать, что диспетчер задач начинает показывать мне очень маленькое количество свободной оперативной памяти, но в то же время в системе нет никаких процессов, которые эту самую память активно используют. В том примере выше (с 300 сборками Хрома) диспетчер задач сказал мне, что в системе занято 49.8 ГБ плюс ещё 4.4 ГБ памяти сжато — но при этом запущено всего несколько процессов, и все они в сумме даже и близко не используют столько памяти:

image

В моём компьютере 96 ГБ оперативной памяти (да, я счастливчик) и когда у меня нет вообще никаких запущенных процессов — я, знаете ли, хотел бы видеть ну хотя бы половину этой памяти свободной. Я правда рассчитываю на это. Но иногда этого достичь не удаётся и мне приходится перезагружать ОС. Ядро Windows написано качественно и надёжно (без шуток), так что память не должна бы пропадать бесследно. Но всё же она пропадает.
Читать дальше →
Total votes 98: ↑98 and ↓0+98
Comments92

Как лучше разбираться в людях

Reading time31 min
Views102K
Рассказывать айтишникам про психологию то еще дело, некоторые читатели скажут: «Bullshit!», и вообще не поверят, потому что психологию, даже прикладную, нельзя назвать точной наукой. Тем не менее, задача этой статьи — показать и доказать вам, что некоторые модели действительно работают. В основе доклад Сергея Котырева из UMI на РИТ++ 2017, от его лица дальше и пойдет повествование.



Я — IT-предприниматель с 20 летним стажем. Так получилось, что с самого начала карьеры мне пришлось управлять людьми. Как выпускник технического вуза и айтишник, я изначально понял, что люди сложно поддаются алгоритмизации, и вообще осознанию, пониманию и прогнозированию.

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

Мне кажется, о поведении и предсказании поведения спиральных галактик мы знаем больше, чем о том, как поведет себя человек, например, моя жена, сотрудник, или особенно сотрудница моего отдела маркетинга, не говоря уже о пиарщицах. О том, что ближайшая к нам Галактика летит, и через сколько-то миллиардов лет столкнется с нашей, мы уже знаем точно.
Total votes 127: ↑113 and ↓14+99
Comments63

Релиз первой беты кросс-платформенного XAML UI-тулкита Avalonia

Reading time6 min
Views22K

Состоялся релиз первой бета-версии Авалонии.


Avalonia — кроссплатформенный .NET UI-тулкит, вдохновлённый технологиями WPF и распространяемый под лицензией MIT. Он полностью поддерживает .NET Core 2.0, XAML, дата-биндинги, lookless-контролы и многое другое. Avalonia позволяет писать на C# приложения под Windows, Linux и Mac OS X. Возможность запуска на iOS и Android находится в экспериментальном состоянии.



Данная версия стабильна и имеет полное право называться бетой: тулкит не разваливается в руках и имеет приличный базовый набор контролов (см. видео). На нём создано два достаточно больших приложения с открытым исходным кодом: AvalonStudio — кроссплатформенная IDE для разработки на C# и C++ и Core2D — редактор 2D-схем и диаграмм.

Total votes 100: ↑97 and ↓3+94
Comments77

Приватность: рождение и смерть. 3000 лет истории приватности в картинках

Reading time16 min
Views35K


В эпоху ИТ и быстрого развития технологий понятие «приватности» превратилось в фикцию. Глобальные информационные сети и множество сервисов незаметно собирают о пользователях терабайты данных, да и сами пользователи постоянно выкладывают свою жизнь на всеобщее обозрение в соцсетях. Но всё же многие из нас считают свои компьютеры, смартфоны и поведение в сети «приватными», или хотя бы стремятся к этому. А как вообще появилось понятие «приватности» в человеческой культуре?
Total votes 50: ↑46 and ↓4+42
Comments53

Проектирование пользовательского интерфейса Windows 95

Reading time19 min
Views44K
Три года назад мне попалась интересная научная статья сотрудника Microsoft Кента Салливана о процессе и результатах проектирования нового пользовательского интерфейса для Windows 95. С тех пор веб-страница исчезла — одна из причин, почему я такой цифровой Плюшкин.

Статья описывает некоторые общие проблемы оболочки Менеджера программ в Windows 3.1 и рассматривает варианты разработки отдельной оболочки для «новичков». Я склоняюсь к мнению, что она предположительно создавалась в духе программы At Ease от Apple, довольно популярной во времена System 7. Я хорошо помню, как мы запускали At Ease в начальной школе, так что детишкам не приходилось возиться с жёстким диском в Finder.

Итак, вот что Кент дословно написал в своей статье под названием «Пользовательский интерфейс Windows 95: конкретный пример проектирования функциональности» (The Windows 95 User Interface: A Case Study in Usability Engineering). Публикуем её, чтобы документ никогда не потерялся.
Читать дальше →
Total votes 45: ↑45 and ↓0+45
Comments137

Создание атмосферного викторианского города из модулей

Reading time7 min
Views24K
Майкл Эндрюс рассказал, как он использовал модульный подход при создании красивого фрагмента выдуманного города; интересная работа с освещением и архитектурой.


Введение


Привет, меня зовут Майкл Эндрюс. Мне двадцать лет, я студент из северного Нью-Джерси. Сейчас я учусь на третьем курсе колледжа Чемплейн по специальности «игровая графика и анимация». Я специализируюсь на моделировании твердотельных пропсов, текстурировании и графике окружений. До недавнего времени я работал только над учебными проектами, создавал различные пропсы и окружения для развития моих художественных и технических навыков. Программа колледжа дала мне инструменты, необходимые для успешной работы после выпуска. Я только что окончил семестр в Монреале, где учился у Винсента Джойала (Vincent Joyal), который помог мне понять графику окружений и научил создавать достойные работы.

Проект


В начале каждого проекта я в первую очередь смотрю на общую картину и решаю, какие основные аспекты я хочу передать. Нынешняя моя работа основывается на концепте Джиорджио Греку (Giorgio Grecu). С самого начала я знал, что хочу передать масштаб и атмосферу картины. Я осознавал, что для меня этот концепт выделился на фоне остальных своим освещением, архитектурой и дымом/туманом. Передача этих аспектов стала основной сложностью проекта. Ещё одной существенной сложностью была компоновка переднего плана. Я решил не использовать в этой работе людей, потому что они сильно отвлекали бы зрителя от композиции. Эта проблема решилась добавлением новых уровней на плоскости земли в виде лестниц. Также я добавил скамейки, фонтан, ещё одну арку, мелкие листья и другие детали, которые сделали пространство более заполненным. Кроме переднего плана, серьёзной задачей было создание большого количества модулей и масштабность самой архитектуры. Потребовались считанные часы, чтобы сделать моделирование интересным и в то же время по-прежнему правдоподобным.
Читать дальше →
Total votes 55: ↑53 and ↓2+51
Comments8

Я разработчик с 9 до 17 (и ты можешь стать таким)

Reading time4 min
Views64K
Этот конкретный твит от Сафьи Абдалла сподвиг меня на некоторые размышления:
Пожалуй, непопулярное мнение (и тут немного иронии от меня).

Чтобы быть способным и отличным инженером, вам не нужно писать статьи в блоге, участвовать в проектах open source, выступать с техническими лекциями или делать что-нибудь ещё.

Можете оставить свой код в офисе — и это вполне нормально.
Такая позиция близка и мила моему сердцу, хотя я тоже понимаю иронию. Одна из вещей, которые я говорю потенциальным работодателям с тех пор как меня уволили за отказ оставаться программировать после работы — это то, что я не согласен на овертайм. По крайней мере, не на регулярной основе. Я могу иногда поучаствовать в авралах, когда критически важно срочно накатить конкретное изменение или исправить баг, но за исключением таких случаев я буду появляться, вкалывать — и пойду домой.
Читать дальше →
Total votes 121: ↑105 and ↓16+89
Comments619

10 самых популярных сайтов для соревнований программистов на начало 2018 года

Reading time4 min
Views69K


В конце 2016 года была опубликована аналогичная статья. С тех пор список был обновлен на основе наблюдений и анализа нескольких ресурсов (постов в популярных блогах, обсуждений на Quora, поисковых запросов в Google и обсуждений на форумах, таких как reddit/learnprogramming и Hacker News).

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

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

Ричард Хэмминг: Глава 28. Системная Инженерия

Reading time17 min
Views25K
Первое правило системной инженерии: «Если оптимизировать компоненты, то, вероятнее всего, производительность системы будет испорчена.»

imageПривет, Хабр. Помните офигенную статью «Вы и ваша работа» (+219, 2146 в закладки, 339k прочтений)?

Так вот у Хэмминга (да, да, самоконтролирующиеся и самокорректирующиеся коды Хэмминга) есть целая книга, написанная по мотивам его лекций. Давайте ее переведем, ведь мужик дело говорит.

Это книга не просто про ИТ, это книга про стиль мышления невероятно крутых людей. «Это не просто заряд положительного мышления; в ней описаны условия, которые увеличивают шансы сделать великую работу.»

Мы уже перевели 4 главы.

Глава 28. Системная Инженерия


(За перевод спасибо Юлии Перуновской, которая откликнулась на мой призыв в «предыдущей главе».) Кто хочет помочь с переводом — пишите в личку или на почту magisterludi2016@yandex.ru

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

Если бы в обычном кампусе вы решили опросить некоторую выборку профессоров о том, что они собираются делать в следующий академический час, то услышали бы, что они будут: «преподавать наипростейшие дроби», «показывать, как найти момент нормального распределения», «объяснять модуль упругости и его измерение» и т.д. Я сомневаюсь, что вы бы часто слышали от профессора фразу «Я собираюсь обучить студентов и подготовить их к будущей карьере».
Читать дальше →
Total votes 18: ↑18 and ↓0+18
Comments3

Пожалуй, самая необычная головоломка на Google Play

Reading time7 min
Views68K
Это немного самонадеянно, но я решил озаглавить этот текст одним из отзывов о своей игре. На это есть две причины: первая — такая характеристика тешит мое самолюбие, признаюсь, чего уж скрывать. Вторая причина — мне бы хотелось, чтобы именно так воспринималась эта головоломка, а точнее целый набор, игроками.


Я недавно подсчитал, что уже 5 лет занимаюсь созданием игр в свободное от основной работы время. За этот период я сделал несколько игр, которые можно назвать успешными, если судить по количеству загрузок. Но по настоящему, я горжусь только последней, она изображена на картинке выше. Нет, это не игра про лутбоксы. Это набор головоломок, основная идея которого в том, чтобы объединить разноплановые головоломки одним сюжетом. Но главное, это должны быть головоломки с подвохом, такие, которые требуют от игрока нешаблонного, креативного мышления. Головоломки с простым, но при этом неожиданным решением. Под катом гифки, история создания и технические детали этой игры.
Читать дальше →
Total votes 109: ↑100 and ↓9+91
Comments68

ПО, железо, наушники и «только практика»: 30 материалов с рекомендациями для «аудиоманов»

Reading time7 min
Views17K
В сегодняшней подборке вы найдете статьи и подкасты с руководствами из нашего «Мира Hi-Fi».

В нее вошли материалы о ПО, железе, наушниках, усилителях — обо всем, что полезно знать о них меломану. Здесь мы собрали тексты о самых разных аспектах аудио: от специализированной аппаратуры до «компьютеров для Hi-Fi», и от винила до MP3.


Читать дальше →
Total votes 14: ↑13 and ↓1+12
Comments4

Как ошибку Spectre, способную сломать индустрию, держали в тайне семь месяцев

Reading time10 min
Views50K


Когда исследователь Майкл Шварц из Грацского технического университета впервые связался с компанией Intel, он думал, что расстроит её. Он нашёл проблему в их чипах, работая совместно с коллегами — ему помогали Дэниел Грасс, Мориц Лип и Стефан Мангард. Уязвимость была глубокой и легко используемой. Его команда закончила писать эксплоит 3-го декабря, воскресным днём. Оценив возможные последствия своей находки, они немедленно написали в Intel.

Ответ Шварц получил только через девять дней. Но когда ему позвонили из компании, Шварц удивился: компания уже знала о проблемах с ЦП, и отчаянно пыталась понять, как их исправить. Более того, компания делала всё возможное, чтобы гарантировать, что больше никто не узнает об этом. Они поблагодарили Шварца за его вклад, но сказали, что обнаруженная им информация совершенно секретна, и дали ему дату, после которой этот секрет можно было раскрывать.
Total votes 69: ↑63 and ↓6+57
Comments96

Выравнивание инструкций кода

Reading time7 min
Views22K
Насколько трудно может быть измерить производительность простой функции, вроде вот этой?

// func.cpp
void benchmark_func(int* a)
{
	for (int i = 0; i < 32; ++i)
		a[i] += 1;
}

Ну, давайте просто завернём её в какой-нибудь микробенчмарк, вызовем её много-много раз (для усреднения результатов) и посмотрим, что получится, да? Ну ладно, мы можем ещё посмотреть на сгенерированные инструкции просто чтобы убедиться, что компилятор чего-то там не «наоптимизировал». Мы можем также провести несколько разных тестов, чтобы убедиться, что именно цикл является узким местом. Ну и всё. Мы понимаем, что мы измеряем, да?

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

// func.cpp
void foo(int* a)
{
	for (int i = 0; i < 32; ++i)
		a[i] += 1;
}

void benchmark_func(int* a)
{
	for (int i = 0; i < 32; ++i)
		a[i] += 1;
}

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

Почему плохо быть отличником

Reading time7 min
Views131K
Я отличница. Конечно, не совсем та, которая со сложенными ручками, пятёркой по поведению и отглаженным воротничком. Но золотая медаль, олимпиады, красные дипломы в количестве трёх штук и прочая атрибутика «школьного» успеха налицо. Вот уже 11 лет я работаю в бизнесе — всё это время в ИТ: инженером по тестированию, инженером VoIP, коммерсом. Хорошо работаю, почти не придраться. Всё на «пять», часто с плюсом. И у меня, как у любой отличницы, много историй про одноклассниц, которые в 33 года и замужем, и на последних «мерсах», и со своим делом. «Харэ ныть, пора разобраться, какого, собственно, так происходит?» — в один из дней эта мысль плотно засела в голове. И вот он, разбор полётов — для нас, отличников, для будущего поколения и для родителей, которые «тянут» своих детей от пятёрки к пятёрке.


Читать дальше →
Total votes 163: ↑133 and ↓30+103
Comments468

Книга «Интерфейс. Основы проектирования взаимодействия. 4-е изд.»

Reading time11 min
Views54K
Привет, Хаброжители! Мы издали долгожданную книгу:

image Алан Купер начал работу над первым изданием этой книги 20 лет назад. Он убеждал программистов в том, что пришла пора шагнуть навстречу пользователям и начать писать программы, которые будут им нравиться. В наши дни сложилась совершенно иная ситуация — оцифровка всех видов информации заставила пользователей с головой окунуться в новые технологии. Четвертое издание книги учитывает все изменения в отрасли, произошедшие за последние семь лет, с сохранением всех идей из предыдущих изданий, не потерявших актуальности.
Проектирование взаимодействия — это ориентированный на человека подход проектирования интерактивных цифровых продуктов, сред, систем и сервисов. Много внимания уделено проектированию поведения — аспекту, которым традиционные дисциплины проектирования нередко пренебрегают.
В этой книге во главу угла ставится целеориентированный подход, при котором основное внимание проектировщиков концентрируется на целях пользователей (то есть на причинах, по которым те используют данный продукт), на их ожиданиях, мировоззрении и склонностях. Именно он позволяет создавать мощные решения, с которыми приятно работать.
Читать дальше →
Total votes 18: ↑14 and ↓4+10
Comments16

Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте

Reading time4 min
Views81K
..., даже если проект не планируется развивать и вы не собираетесь делиться исходными кодами, потому что через 20 лет какой-нибудь маньяк будет изучать и дорабатывать машинный код вашего продукта, и он может захотеть вас найти.

Разработка Need For Speed III Modern Patch

Вообще я достаточно редко играю в компьютерные игры. Бывало, не играл по несколько лет подряд. Но иногда во мне просыпается маленький реверс-инженер, который мотивирует меня забраться в машинный код какой-нибудь любимой игрушки из прошлого. В последний год я занимался доработкой Need For Speed III: Hot Pursuit (1998 года). Это моя любимая игра в жанре, но теперь я, к своему сожалению, знаю о том, насколько отвратительно она написана. Большое количество маленьких багов в самых неожиданных местах — прямое следствие низкого качества кода.
Читать дальше →
Total votes 159: ↑156 and ↓3+153
Comments87

«Магическая константа» 0x5f3759df

Reading time9 min
Views121K
В этой статье мы поговорим о «магической» константе 0x5f3759df, лежащей в основе элегантного алгоритмического трюка для быстрого вычисления обратного квадратного корня.

Вот полная реализация этого алгоритма:

float FastInvSqrt(float x) {
  float xhalf = 0.5f * x;
  int i = *(int*)&x;  // представим биты float в виде целого числа
  i = 0x5f3759df - (i >> 1);  // какого черта здесь происходит ?
  x = *(float*)&i;
  x = x*(1.5f-(xhalf*x*x));
  return x;
}

Этот код вычисляет некоторое (достаточно неплохое) приближение для формулы

image

Сегодня данная реализация уже хорошо известна, и стала она такой после появления в коде игры Quake III Arena в 2005 году. Её создание когда-то приписывали Джону Кармаку, но выяснилось, что корни уходят намного дальше – к Ardent Computer, где в середине 80-ых её написал Грег Уолш. Конкретно та версия кода, которая показана выше (с забавными комментариями), действительно из кода Quake.
В этой статье мы попробуем разобраться с данным хаком, математически вывести эту самую константу и попробовать обобщить данный метод для вычисления произвольных степеней от -1 до 1.

Да, понадобится немного математики, но школьного курса будет более, чем достаточно.
Читать дальше →
Total votes 212: ↑210 and ↓2+208
Comments188

Как я использую git

Reading time6 min
Views90K

Intro


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


  • git add <path>
  • git commit
  • git checkout <path/branch>
  • git checkout -b <new branch>

И дополнительно:


  • git push/pull
  • git merge <branch>
  • git rebase master (а что, можно еще и на другие ветки ребейзить? О_о)

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

Читать дальше →
Total votes 117: ↑106 and ↓11+95
Comments195

Information

Rating
Does not participate
Registered
Activity

Specialization

Software Developer, Backend Developer
Senior
Golang
Python
C++
C
Linux