• 10 типов структур данных, которые нужно знать + видео и упражнения

    Екатерина Малахова, редактор-фрилансер, специально для блога Нетологии адаптировала статью Beau Carnes об основных типах структур данных.

    «Плохие программисты думают о коде. Хорошие программисты думают о структурах данных и их взаимосвязях», — Линус Торвальдс, создатель Linux.

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

    В этой статье я покажу вам 10 самых распространенных структур данных.
    Читать дальше →
  • Firefox легко обходит защиту в новом интерфейсе Gmail



      Недавно компания Google представила новый дизайн Gmail. При желании каждый пользователь может перейти на него, а скоро всех пользователей G Suite переведут принудительно.

      В этом дизайне реализовано несколько новых функций безопасности, в том числе так называемый конфиденциальный режим. Здесь отправитель устанавливает срок действия письма, после которого оно «исчезает». По крайней мере, так должно работать. На самом деле есть несколько способов обойти эту защиту, сохранить полученное сообщение, скопировать или распечатать.
      Читать дальше →
    • Фракталы в простых числах



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

      Эксперимент можно провести на обычном листке в клеточку из школьной тетради.
      Читать дальше →
    • Лайфхаки изготовления двухслойных плат (ЛУТ)

        Потребность делать железо периодически возникает у многих технарей. Иногда задача позволяет нафигачить всё проводами на макетке, а иногда, к сожалению, нужно нечто посерьёзнее. Вот и меня однажды настигла потребность делать печатные платы… Лазерно-утюжная технология кустарного изготовления плат по началу сильно отталкивает своей рандомностью (на чём печатать, как греть, с какой силой давить, как отдирать, и т.д.), но друзья поделились опытом, и оказалось, что это действительно не так уж сложно. ЛУТ бесспорно дешевле любого другого варианта, и (внезапно) вполне подходит для двухслойных плат.


        Кому интересно посложнее, подороже и поточнее, можно делать фоторезистом, но наша методика (основным элементом которой является особая бумага) позволяет стабильно прорабатывать шины 0.3/0.3 мм, так что в нашем сообществе бытует мнение что тян фоторезисты не нужны.


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


        Под катом я поделюсь детерминированной методикой изготовления двухслойных печатных плат по технологии ЛУТ с различными резервными схемами на случай косяков. От идеи до включения. Будем работать с KiCad, Inkscape, наждачкой, утюгом, персульфатом аммония и гравёром.


        Читать дальше →
      • О декомпозии кода замолвим слово: контекстное программирование

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

          Читать дальше →
        • Марвин Мински «The Emotion Machine»: Глава 5 «Уровни Психической Деятельности»

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

          image

          Глава 5. Уровни Психической Деятельности


          «Мы, очевидно, являемся уникальным видом благодаря способности создавать символы, а также способности контролировать условия нашего существования, используя эти символы. Наша способность представлять и моделировать реальность подразумевает, что мы можем приблизительно оценивать различные порядки (разрядности) бытия и… дает нам ощущение управления собственным опытом».
          — Хайнц Паджелс, «Мечты Разума» (The Dreams of Reason)
          Ни один человек не обладает силой вола, скрытностью кошки или скоростью антилопы, но наш вид превосходит всех остальных в способности изобретать новые способы мыслить. Мы изготавливаем оружие, одежду и жилища. Мы постоянно развиваем новые формы искусства. Мы непревзойдены в создании новых социальных соглашений, создании сложных законов, которые изначально применяем, а затем ищем всевозможные способы уклониться от них.

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

          image

          Начиная с просты инстинктивных реакций, каждый последующий уровень строится на предыдущем уровне до тех пор, пока они не будут охватывать процессы, которые задействуют наши самые высокие идеи и личные цели. Для того, чтобы понять зачем нам нужно столь много уровней, давайте вновь рассмотрим пример, который был введён в §4-2.
          Читать дальше →
        • Практические приёмы работы в Wireshark

          • Перевод
          Джулия Эванс, автор материала, перевод которого мы сегодня публикуем, решила рассказать об одном из своих любимых сетевых инструментов, который называется Wireshark. Это — мощная и сложная программа, оснащённая графическим интерфейсом, предназначенная для анализа трафика в компьютерных сетях. Джулия говорит, что на практике пользуется лишь немногими возможностями Wireshark, но они обычно оказываются очень кстати. Здесь она хочет поделиться со всеми желающими рассказом о самых полезных приёмах работы с программой и надеется, что они пригодятся не только ей, но и всем, кому приходится решать сетевые проблемы.


          Читать дальше →
        • Blender: 3D-модель микросхемы для подключения в библиотеке KiCad

          • Tutorial
          Когда проектируешь печатные платы, часто возникает потребность добавить трёхмерную модель электронного компонента на плату. Но не всегда получается найти готовый файл в интернете. Нарисовать такую модель с помощью CAD-программы труда не составляет: задать параметры корпуса и выводов дело десяти минут, если, конечно, нужна габаритная модель а не фотореалистичная картинка.

          Но есть проблема: профессиональный CAD-редактор стоит не дёшево, а свободно распространяемые не всегда удобны в использовании.

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

          Читать дальше →
        • Использвание Blender и FreeCad для импорта 3D-моделей компонентов в KiCad

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

          Есть лишь одно неудобство: KiCad не поддерживает широкораспространенный формат step. Многие производители электронных компонентов предоставляют 3D-модели своих изделий именно в этом виде. И, чтобы воспользоваться этими файлами, приходится конвертировать их в формат vrml, понимаемый KiCad’ом.

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


          В этой статье я расскажу, как без регистрации и смс преобразовать 3D-модель объекта для подключения его к посадочной площадке в библиотеке KiCad.
          Читать дальше →
        • Если вместо оформления на работу предлагают открыть ИП

          Я сейчас в поисках работы программиста в Москве. И мне звонят некоторые кадровые агентства и интересуются есть ли у меня ИП, так как их клиент-работодатель вместо трудового договора с работниками заключает договоры оказания услуг или субподряда с ИП или ООО с одним учредителем, я их буду называть ИП в дальнейшем. ИП у меня нет, но есть не приносящее дохода ООО, где я веду бухучет самостоятельно. Поэтому и знаю, что это такое, какие именно налоги нужно платить и почему эта схема в России не законна и чем все это грозить горе-работнику, который на это согласился. Еще раз повторяю, я не юрист, а программист; то, что я опишу ниже, вполне могло устареть, измениться и т.п., и, если в комментариях укажут действующую норму, я не буду против.
          Читать дальше →
        • Курс о Deep Learning на пальцах

            Я все еще не до конца понял, как так получилось, но в прошлом году я слово за слово подписался прочитать курс по Deep Learning и вот, на удивление, прочитал. Обещал — выкладываю!

            Курс не претендует на полноту, скорее это способ поиграться руками с основными областями, где deep learning устоялся как практический инструмент, и получить достаточную базу, чтобы свободно читать и понимать современные статьи.

            Материалы курса были опробованы на студентах кафедры АФТИ Новосибирского Государственного Университета, поэтому есть шанс, что по ним действительно можно чему-то научиться.


            Читать дальше →
          • Makefile для самых маленьких

            • Tutorial
            Не очень строгий перевод материала mrbook.org/tutorials/make Мне в свое время очень не хватило подобной методички для понимания базовых вещей о make. Думаю, будет хоть кому-нибудь интересно. Хотя эта технология и отмирает, но все равно используется в очень многих проектах. Кармы на хаб «Переводы» не хватило, как только появится возможность — добавлю и туда. Добавил в Переводы. Если есть ошибки в оформлении, то прошу указать на них. Буду исправлять.

            Статья будет интересная прежде всего изучающим программирование на C/C++ в UNIX-подобных системах от самых корней, без использования IDE.

            Компилировать проект ручками — занятие весьма утомительное, особенно когда исходных файлов становится больше одного, и для каждого из них надо каждый раз набивать команды компиляции и линковки. Но не все так плохо. Сейчас мы будем учиться создавать и использовать Мейкфайлы. Makefile — это набор инструкций для программы make, которая помогает собирать программный проект буквально в одно касание.
            Читать дальше →
          • Алан Кей: крутым концепциям тоже нужна любовь

            • Перевод
            image

            Позвольте мне начать с показа видео, записанного Национальным научным фондом (National Science Foundation, далее NSF) на недавно прошедшей церемонии вручения дипломов в Гарварде, в котором они просили некоторых выпускников и их преподавателей ответить на несколько простых вопросов о том, что является причиной смены времен года и фаз Луны. Все были уверены в своих ответах, но пояснения приблизительно 95% опрошенных даже и близко не были похожи на научное обоснование.

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

            Моя реакция была немного иной. Я все ждал «других вопросов», которые должен был задать NSF, но они так их и не задали. Такой шанс мне выпал через несколько недель после выступления в UCLA. Я задал некоторым старшеклассникам, аспирантам первого курса, и нескольким профессорам те же самые вопросы про смену сезонов и фазы Луны, и получил очень похожие результаты: около 95% опрошенных давали фиктивные объяснения, обосновываясь на том же самом, что и студенты и профессора Гарварда, Но теперь я должен задать следующие вопросы.
            Читать дальше →
          • Сколько стоит компилятор?

            • Перевод
            Компилирующий тулчейн является одним из самых больших и самых сложных компонентов любой системы, и, как правило, основан на опенсорсном коде, либо GCC, либо LLVM. На Linux-системе, только ядро операционной системы и браузер имеют больше строк кода. Для коммерческих систем, компилятор должен быть абсолютно надёжным, каким бы ни был исходный код, он должен генерировать надёжный, высокопроизводительный бинарный код.

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


            Читать дальше →
          • Mesh-роутер — это просто

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

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

              Читать дальше →
            • Безопасный SOCKS5 прокси для Telegram за 1 Евро и 10 минут

              Не все прокси одинаково полезны. На волне новостей о блокировке мессенджера Телеграмм стало актуально поднимать свой SOCKS5 прокси, так как чужой использовать не безопасно — неизвестно, кому принадлежат серверы, какое ПО на них используется, и какие в нем присутствуют уязвимости. Кроме того, публичные прокси часто очень медленные, поскольку большое число клиентов одновременно «пытаются» его использовать, перегружая ресурсы сервера. Под катом инструкция по быстрой настройке приватного SOCKS5 прокси с аутентификацией за 1 евро и 10 минут времени и возможностью в дальнейшем расширить защиту сервера при помощи усиленной аутентификации.
              Читать дальше →
            • Цвет: от шестнадцатеричных кодов до глаза

              • Перевод


              Почему мы воспринимаем background-color: #9B51E0 как этот конкретный фиолетовый цвет?



              Долгое время я думал, что знаю ответ на этот вопрос. Но хорошенько поразмыслив, осознал значительные пробелы в своих знаниях.
              Читать дальше →
            • Docker: запуск графических приложений в контейнерах

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

                Это небольшой обзор способов запуска графических приложений в контейнерах Docker.
                ну-ка, что там
              • Как запустить программу без операционной системы


                  Так вышло, что в нашей статье, описывающей механизм опроса PCI шины, не было достаточно подробно описано самого главного: как же запустить этот код на реальном железе? Как создать собственный загрузочный диск? В этой статье мы подробно ответим на все эти вопросы (частично данные вопросы разбирались в предыдущей статье, но для удобства чтения позволим себе небольшое дублирование материала).

                  В интернете существует огромное количество описаний и туториалов о для того как написать собственную мини-ОС, даже существуют сотни готовых маленьких хобби-ОС. Один из наиболее достойных ресурсов по этой тематике, который хотелось бы особо выделить, это портал osdev.org. Для дополнения предыдущей статьи про PCI (и возможности писать последующие статьи о различных функциях, которые присутствуют в любой современной ОС), мы опишем пошаговые инструкции по созданию загрузочного диска с привычной программой на языке С. Мы старались писать максимально подробно, чтобы во всем можно было разобраться самостоятельно.

                  Итак, цель: затратив как можно меньше усилий, создать собственную загрузочную флешку, которая всего-навсего печатает на экране компьютера классический “Hello World”.

                  Читать дальше →
                • Common Lisp SDL2 туториал

                  • Tutorial
                  SDL2 — отличная библиотека, но туториалов по ней не очень много.
                  Common Lisp — отличный язык, но статей по нему катастрофически мало.
                  Думаю этого вполне достаточно, для того чтобы написать этот цикл статей.

                  Почему я выбрал общелисп? Что ж, на вкус и цвет как говорится.
                  Впрочем, причины есть:

                  Читать дальше →