Pull to refresh
0
0
Send message

Решение задачи с собеседования Middle of the Linked List [+ ВИДЕО]

Level of difficultyEasy
Reading time3 min
Views5.3K

Всем салют! Давайте решим задачу "Middle of the Linked List"

Дан указатель head на начало односвязного списка, нужно вернуть средний узел списка.

Если средних узлов два, нужно вернуть второй средний узел.

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

Управление личными делами на базовом уровне

Level of difficultyHard
Reading time35 min
Views33K

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

В статье будет показана базовая реализация системы по управлению делами. В ней будет также кратко объяснено, что делать с привычками, рассказано про планирование работы с источниками. Статья пройдётся по проблеме делегирования дел. Также будет показана важность комментариев к задачам. В конце будет предложен наиболее общий алгоритм работы с системой.

Будет нелишним, если вы прочитаете мою прошлую статью про основные принципы систем, которые помогают достигать поставленных целей.

Мне нужна система по управлению делами
Total votes 10: ↑9 and ↓1+10
Comments7

Управление личными делами в Obsidian (прототип)

Level of difficultyHard
Reading time28 min
Views9.5K

В статье будет показан прототип системы дел, который реализован в Obsidian. Система в основном будет базироваться на идеях GTD.

Задачи будут создаваться в дневнике/журнале и агрегироваться в отдельных заметках с использованием плагина Tasks.

Система будет адаптирована для телефонов.

Статья написана для продвинутых юзеров Obsidian. Новичкам, конечно, с ней будет тяжеловато разобраться.

Задачи и Obsidian? Звучит интересно!
Total votes 8: ↑6 and ↓2+6
Comments10

Почему аналоговая электроника такая сложная

Level of difficultyEasy
Reading time5 min
Views41K

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

На то есть причины.

Читать далее
Total votes 97: ↑86 and ↓11+90
Comments252

Панорама матричных расширений: от x86 до RISC-V

Reading time15 min
Views7.4K

Матричное расширение ISA CPU… Что это и что оно делает? Уже из названия понятно, что это расширение позволяет ускорять операции над матрицами на CPU. Но задумывались ли вы когда-нибудь, какие они бывают, когда появились, кто и как их создает?

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

Матричные расширения появились не так давно — чуть более трех лет назад. Несмотря на это, они есть у каждой уважающей себя процессорной архитектуры, в том числе и у относительно молодой открытой RISC-V. Почему их так много и чем они отличаются? Поддерживаются ли разреженные матрицы? Об этом и многом другом вы узнаете из статьи. Приготовьтесь, будет интересно и (спойлер!) без многоэтажных формул. 

Читать далее
Total votes 61: ↑60 and ↓1+76
Comments38

Винтон Серф – человек, который придумал интернет

Level of difficultyEasy
Reading time17 min
Views6.8K

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

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

Просто о make

Reading time6 min
Views457K
Меня всегда привлекал минимализм. Идея о том, что одна вещь должна выполнять одну функцию, но при этом выполнять ее как можно лучше, вылилась в создание UNIX. И хотя UNIX давно уже нельзя назвать простой системой, да и минимализм в ней узреть не так то просто, ее можно считать наглядным примером количество- качественной трансформации множества простых и понятных вещей в одну весьма непростую и не прозрачную. В своем развитии make прошел примерно такой же путь: простота и ясность, с ростом масштабов, превратилась в жуткого монстра (вспомните свои ощущения, когда впервые открыли мэйкфайл).

Мое упорное игнорирование make в течении долгого времени, было обусловлено удобством используемых IDE, и нежеланием разбираться в этом 'пережитке прошлого' (по сути — ленью). Однако, все эти надоедливые кнопочки, менюшки ит.п. атрибуты всевозможных студий, заставили меня искать альтернативу тому методу работы, который я практиковал до сих пор. Нет, я не стал гуру make, но полученных мною знаний вполне достаточно для моих небольших проектов. Данная статья предназначена для тех, кто так же как и я еще совсем недавно, желают вырваться из уютного оконного рабства в аскетичный, но свободный мир шелла.
Читать дальше →
Total votes 104: ↑98 and ↓6+92
Comments111

С чего начать, если вы решили ремонтировать ноутбуки? Оборудование и навыки — коротко о самом важном

Reading time4 min
Views13K

Продолжаю писать о ремонте ноутбуков. Сейчас стараюсь делиться полезной для начинающих информацией. Подумал, что могу поведать о своем начале ремонта лэптопов. В статье расскажу, что из оборудования может понадобиться на первых этапах и на что обращать внимание впоследствии.
Читать дальше →
Total votes 50: ↑46 and ↓4+56
Comments59

Динамическое программирование на Python

Reading time4 min
Views11K

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

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

Читать далее
Total votes 7: ↑6 and ↓1+9
Comments5

Миф о RAM и O(1)

Reading time7 min
Views55K


Городская библиотека Стокгольма. Фото minotauria.


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


Введение


Если вы изучали информатику и анализ алгоритмической сложности, то знаете, что проход по связному списку это O(N), двоичный поиск это O(log(N)), а поиск элемента в хеш-таблице это O(1). Что, если я скажу вам, что все это неправда? Что, если проход по связному списку на самом деле O(N√N), а поиск в хеш-таблице это O(√N)?


Не верите? Я вас сейчас буду убеждать. Я покажу, что доступ к памяти это не O(1), а O(√N). Этот результат справедлив и в теории, и на практике. Давайте начнем с практики.


Измеряем


Давайте сначала определимся с определениями. Нотация “О” большое применима ко многим вещам, от использования памяти до запущенных инструкций. В рамках этой статьи мы O(f(N)) будет означать, что f(N) — это верхняя граница (худший случай) по времени, которое необходимо для получения доступа к N байтов памяти (или, соответственно, N одинаковых по размеру элементов). Я использую Big O для анализа времени, но не операций, и это важно. Мы увидим, что центральный процессор подолгу ждет медленную память. Лично меня не волнует, что делает процессор пока ждет. Меня волнует лишь время, как долго выполняется та или иная задача, поэтому я ограничиваюсь определением выше.

Читать дальше →
Total votes 128: ↑107 and ↓21+86
Comments96

Разработка цифровой аппаратуры нетрадиционным методом: Yosys, SpinalHDL, VexRiscv (ч.1)

Level of difficultyHard
Reading time127 min
Views10K

Основная прелесть использования ПЛИС, на мой взгляд, состоит в том, что разработка аппаратуры превращается в программирование со всеми его свойствами: написание и отладка кода как текста на специализированных языках описания аппаратуры (HDL); код распространяется в виде параметризованных модулей (IP-блоков), что позволяет его легко переиспользовать в других проектах; распределенная разработка обширным коллективом разработчиков с системой контроля версий, такой же, как у программистов (Git); и, как и в программировании, ничтожно низкая стоимость ошибки.

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

В этой статье я хочу поделиться своим небольшим опытом «программирования» микросхем ПЛИС и тем, как я постепенно погружался в тему ПЛИСоводства. Изначально я собирался написать небольшую заметку про открытый тулчейн для синтеза Yosys. Потом — про язык SpinalHDL и синтезируемое микропроцессорное ядро VexRiscv, на нём написанное. Потом — про замену микроконтроллеров микросхемами ПЛИС на примере моей отладочной платы «Карно». Но в процессе я погрузился в историю появления Hardware Description Languages (HDL), и когда я начал писать, Остапа, как это часто бывает, понесло... В общем, получилось то, что получилось.

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

Погрузиться сполна
Total votes 42: ↑41 and ↓1+58
Comments65

25 полезных однострочников Python, которые вы должны знать

Reading time5 min
Views46K

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

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

Читать далее
Total votes 26: ↑5 and ↓21-14
Comments14

Нейроморфные процессоры как подвид акселераторов для нейросетей [part 2]

Reading time9 min
Views13K

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

Что такое «нейроморфость»

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

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

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

Математики обнаружили идеальный способ перемножения чисел

Reading time5 min
Views144K

Разбивая крупные числа на мелкие, исследователи превысили фундаментальное математическое ограничение скорости



Четыре тысячи лет назад жители Вавилонии изобрели умножение. А в марте этого года математики усовершенствовали его.

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

«Все думают, что метод умножения, который они учили в школе, наилучший, но на самом деле в этой области идут активные исследования», — говорит Йорис ван дер Хувен, математик из Французского национального центра научных исследований, один из соавторов работы.
Читать дальше →
Total votes 183: ↑173 and ↓10+163
Comments224

Ты — это то, как ты пишешь. Как расти через качество кода

Level of difficultyMedium
Reading time10 min
Views12K

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

Я Юрий Митус, фронтенд-разработчик в Сбере. Предлагаю поговорить о коде, который мы пишем, и практиках его улучшения. Расскажу, на что обращать внимание, покажу типичные ошибки, которые «портят» код и как их избегать. Научу писать код так, чтобы вас хотели нанять и перенять ваши практики.

Читать далее
Total votes 27: ↑20 and ↓7+20
Comments12

Это всё, что останется после меня: проблемы наследования кода и передачи прав на него

Level of difficultyEasy
Reading time14 min
Views1.7K

Привет, Хабр. Меня зовут Ирина, и я предлагаю поговорить о том, какие права у нас есть на наш код и об их передаче. Мы рассмотрим, что такое код с точки зрения законодательства РФ; о том, как мы можем передать права на код; что такое наследование кода и как его можно унаследовать.

Читать далее
Total votes 15: ↑12 and ↓3+18
Comments1

Энтропия на страже безопасности: эволюция генераторов случайных чисел

Level of difficultyEasy
Reading time7 min
Views3K

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

Может показаться что эта проблема была решена уже давно, но те же процессоры обзавелись модулями энтропии только в 2012-2014 годах. И на этом прогресс не останавливается: всё доступнее становятся квантовые генераторы энтропии, полностью лишённые изъяна детерминизма. Давайте посмотрим, как от ложного рандома мы пришли к недетерминированному.

Читать далее
Total votes 15: ↑14 and ↓1+22
Comments11

Как отключить цензуру в ChatGPT?

Level of difficultyEasy
Reading time3 min
Views38K

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

Читать далее
Total votes 45: ↑41 and ↓4+46
Comments43

Где скачать научную статью легко и доступно?

Reading time1 min
Views87K

Некоторые издательства журналов предлагают доступ к научным статьям сразу после публикации, а некоторые через какое-то время.

Однако стоимость одной статьи от платных издателей может составлять 150 долларов, что не так уж и мало по сравнению с размером стипендии студента.

Здесь собраны совершенно бесплатные ресурсы, где вы можете найти интересующую Вас научную статью.

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

Бинарные деревья поиска и рекурсия – это просто

Reading time8 min
Views602K
Существует множество книг и статей по данной теме. В этой статье я попробую понятно рассказать самое основное.

Бинарное дерево — это иерархическая структура данных, в которой каждый узел имеет значение (оно же является в данном случае и ключом) и ссылки на левого и правого потомка. Узел, находящийся на самом верхнем уровне (не являющийся чьим либо потомком) называется корнем. Узлы, не имеющие потомков (оба потомка которых равны NULL) называются листьями.

image
Рис. 1 Бинарное дерево
Читать дальше →
Total votes 43: ↑32 and ↓11+21
Comments9
1
23 ...

Information

Rating
Does not participate
Registered
Activity