Pull to refresh
0
0

Automotive QA

Send message

Concurrency: 6 способов жить с shared state

Reading time6 min
Views31K
concurrency

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

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

Все примеры приведены на Java, но содержат комментарии и я надеюсь будут понятны программистам не знакомым c Java. Данная статья носит обзорный характер и не претендует на полноту. В то же время она наполнена ссылками, которые дают более подробное объяснение терминам и утверждениям.

Читать дальше →
Total votes 52: ↑51 and ↓1+50
Comments20

Коллекции в Java: о чём многие забывают

Reading time6 min
Views141K
Из опыта code-review и ответов на StackOverflow набралось немало моментов, касающихся Java Collections API, которые мне казались очевидными, но другие разработчики о них почему-то не знали или знали, но не чувствовали уверенности их применять. В этой статье я собираю в общую кучу всё, что накопилось.

Содержание:


  1. List.subList
  2. PriorityQueue
  3. EnumSet и EnumMap
  4. Set.add(E) и Set.remove(E) возвращают булево значение
  5. Map.put(K, V), Map.remove(K), List.set(idx, E), List.remove(idx) возвращают предыдущий элемент
  6. Map.keySet() и Map.values()
  7. Arrays.asList может быть ключом
  8. Collections.max
  9. LinkedList, Stack, Vector, Hashtable
Читать дальше →
Total votes 58: ↑57 and ↓1+56
Comments37

Программирование многопользовательских игр

Reading time4 min
Views24K
Добрый день, Хабр!

Мы только что выпустили книгу по Юнити, и нам стало интересно насколько вообще актуальна тема программирования игр. Казалось бы книг на эту тему должно быть выпущено огромное множество, но это не так.

Только что вышла книга «Multiplayer Game Programming: Architecting Networked Games (Game Design)».

image

Насколько актуален ее перевод на русский язык? Подробности под катом. Ждем ваши комментарии.
Читать дальше →
Total votes 17: ↑16 and ↓1+15
Comments15

Интерактивный C#

Reading time3 min
Views37K


Обновление с номером 1 принесло в Visual Studio не только немного измененный значок, но и еще разные приятные нововведения. Кстати, вот так выглядит новый значок:



Одним из дополнений является «Интерактивный C#». Фактически это окошко REPL.
Подробнее о REPL и Интерактивном C#
Total votes 23: ↑22 and ↓1+21
Comments25

Основы безопасности операционной системы Android. Native user space, ч.1

Reading time8 min
Views97K

Вступление


В этой статье я попробую рассмотреть безопасность чуть-чуть повыше ядра, а именно: как работает безопасность в Native user space. Мы коснемся темы процесса загрузки операционной системы и рассмотрим структуру файловой системы Android. Как я уже говорил, я не очень силен в Linux, поэтому если заметите неточности, то исправляйте — меня научите и статью улучшите. Так как эта тема довольно обширная, я решил разбить её на две части. В первой части мы рассмотрим процесс загрузки операционной системы и особенности файловой системы. Всем кому интересно, добро пожаловать!
Читать дальше →
Total votes 46: ↑41 and ↓5+36
Comments29

Проектирование ПО для начинающих методом снежинки

Reading time3 min
Views21K
Публикация может быть полезной скорее начинающим программистам, чем тем, кто знаком с разработкой и проектированием ПО (не нужно знать каких либо продуктов для проектирования ПО).

Я думаю, знающие согласятся, что их первый опыт программирования реального приложения (не Hello World) свелся с простому вопросу: с чего, собственно, начать? Как начать проектирование программы? Что писать-то?!

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

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

И вот, однажды утром, мне пришла в голову простая мысль: а что, если программу проектировать по методу снежинки?
Читать дальше →
Total votes 9: ↑6 and ↓3+3
Comments6

Маленькие хитрости Java

Reading time4 min
Views270K
Я уже достаточно много лет занимаюсь разработкой на java и повидал довольно много чужого кода. Как это не странно, но постоянно от одного проекта к другому я вижу одни и те же проблемы. Этот топик — попытка ликбеза в наиболее часто используемых конструкциях языка. Часть описанного — это довольно банальные вещи, тем не менее, как показывает мой опыт, все эти банальности до сих пор актуальны. Надеюсь, статья пригодится многим java программистам. Итак, поехали:

new vs valueOf

//медленно
Integer i = new Integer(100);
Long l = new Long(100);
String s = new String("A");

//быстро
Integer i = Integer.valueOf(100);
Long l = 100L;//это тоже самое что Long.valueOf(100L);
String s = "A";


Старайтесь всегда использовать метод valueOf вместо конструктора в стандартных классах оболочках примитивных типов, кроме случаев, когда вам нужно конкретно выделить память под новое значение. Это связано с тем, что все они, кроме чисел с плавающей точкой, от Byte до Long имеют кеш. По умолчанию этот кеш содержит значения от -128 до 127. Следовательно, если ваше значение попадает в этот диапазон, то значение вернется из кеша. Значение из кеша достается в 3.5 раза быстрее чем при использовании конструктора + экономия памяти. Помимо этого, наиболее часто используемые значения могут также быть закэшированы компилятором и виртуальной машиной. В случае, если ваше приложение очень часто использует целые типы, можно увеличить кеш для Integer через системное свойство «java.lang.Integer.IntegerCache.high», а так же через параметр виртуальной машины -XX:AutoBoxCacheMax=<size>.
Читать дальше →
Total votes 141: ↑126 and ↓15+111
Comments166

Оптические волокна. Классификация

Reading time4 min
Views170K
Оптические волокно стандарт де-факто при построении магистральных сетей связи. Протяженность волоконно-оптических линий связи в России у крупных операторов связи достигает > 50 тыс.км.
Благодаря волокну мы имеем все те преимущества в связи, которых не было раньше.
Вот и попробуем рассмотреть виновника торжества — оптическое волокно.

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

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

Читать дальше →
Total votes 60: ↑56 and ↓4+52
Comments65

Моделирование дипольной антенны в openEMS

Reading time9 min
Views18K


В предыдущей части было рассказано как промоделировать распространение ЭМВ при помощи симулятора
openEMS. Теперь рассмотрим как рассчитать что-либо полезное. Промоделируем дипольную полуволновую антенну на частоту 500 МГц. Будет рассмотрено моделирование в частотной области и моделирование диаграммы направленности (ДН) антенны. Схема данной антенны показана на рисунке.



Дипольная антенна состоит из двух лучей, каждый из которых имеет длину равную 1/4 волны для резонансной частоты. Запитывается антенна из центра. Антенна имеет сопротивление на чатоте резонанса, равное приблизительно 75 Ом и дигарамму направленности в форме тора. Подробнее о теории работы дипольной антенны можно прочитать, например, в учебнике Айзенберга или Белоцерковского. Эти результаты мы и должны получить после моделирования.

Под катом приведён скрипт с моделью дипольной антенны с построчным разбором. Предполагается, что читатель знаком с основами Matlab/Octave, электротехники и теории антенн (знает что такое комплексное сопротивление, S-параметры и КСВ).
Читать дальше →
Total votes 20: ↑20 and ↓0+20
Comments11

Коды Рида-Соломона. Простой пример

Reading time9 min
Views119K
Гауссово котэБлагодаря кодам Рида-Соломона можно прочитать компакт-диск с множеством царапин, либо передать информацию в условиях связи с большим количеством помех. В среднем для компакт-диска избыточность кода (т.е. количество дополнительных символов, благодаря которым информацию можно восстанавливать) составляет примерно 25%. Восстановить при этом можно количество данных, равное половине избыточных. Если емкость диска 700 Мб, то, получается, теоретически можно восстановить до 87,5 Мб из 700. При этом нам не обязательно знать, какой именно символ передан с ошибкой. Также стоит отметить, что вместе с кодированием используется перемежевание, когда байты разных блоков перемешиваются в определенном порядке, что в результате позволяет читать диски с обширными повреждениями, локализированными близко друг к другу (например, глубокие царапины), так как после операции, обратной перемежеванию, обширное повреждение оборачивается единичными ошибками во множестве блоков кода, которые поддаются восстановлению.

Давайте возьмем простой пример и попробуем пройти весь путь – от кодирования до получения исходных данных на приемнике. Пусть нам нужно передать кодовое слово С, состоящее из двух чисел – 3 и 1 именно в такой последовательности, т.е. нам нужно передать вектор С=(3,1). Допустим, мы хотим исправить максимум две ошибки, не зная точно, где они могут появиться. Для этого нужно взять 2*2=4 избыточных символа. Запишем их нулями в нашем слове, т.е. С теперь равно (3,1,0,0,0,0). Далее необходимо немного разобраться с математическими особенностями.

Поля Галуа


Многие знают романтическую историю о молодом человеке, который прожил всего 20 лет и однажды ночью написал свою математическую теорию, а утром был убит на дуэли. Это Эварист Галуа. Также он несколько раз пытался поступить в университеты, однако экзаменаторы не понимали его решений, и он проваливал экзамены. Приходилось ему учиться самостоятельно. Ни Гаусс, ни Пуассон, которым он послал свои работы, также не поняли их, однако его теория отлично пригодилась в 60-х годах ХХ-го века, и активно используется в наше время как для теоретических вычислений в новых разделах математики, так и на практике.
Читать дальше →
Total votes 94: ↑90 and ↓4+86
Comments32

Стартовал онлайн курс «Введение в Linux» от Linux Foundation

Reading time3 min
Views54K

Сегодня открыли доступ к обучающим материалам курса «Введение в Linux».
Курс создан Linux Foundation и проходит на платформе edX.

О курсе:
Linux обеспечивает работу 94% суперкомпьютеров, большинства серверов в Интернете, основных финансовых сделок в мире и миллиардов Android устройств. Если коротко, то Linux везде. Он присутствует во множестве различных архитектур, от мэйнфреймов до серверов, настольных компьютеров, мобильных устройств и на ошеломляющем разнообразии железа.

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

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

UPD: Курс очень простой, он для пользователей, которые действительно первый раз запускаю Linux



От автора курса:
Этот курс создан на основе оригинального курса Linux Foundation «Introduction to Linux», который всегда преподавали с инструктором в классе или в виртуальном классе через Интернет. Linux Foundation верит, что задача изменения этого курса для его бесплатного использования сообществом была стоящей и будет хорошо оценена.
Читать дальше →
Total votes 49: ↑46 and ↓3+43
Comments24

Заметки о вращении вектора кватернионом

Reading time5 min
Views107K

Структура публикации


  • Получение кватерниона из вектора и величины угла разворота
  • Обратный кватернион
  • Умножение кватернионов
  • Поворот вектора
  • Рысканье, тангаж, крен
  • Серия поворотов


Получение кватерниона из вектора и величины угла разворота


Ещё раз – что такое кватернион? Для разработчика – это прежде всего инструмент, описывающий действие – поворот вокруг оси на заданный угол:

(w, vx, vy, vz),

где v – ось, выраженная вектором;
w – компонента, описывающая поворот (косинус половины угла).
Читать дальше →
Total votes 24: ↑19 and ↓5+14
Comments23

Переходим с STM32F103 на К1986ВЕ92QI. Или первое знакомство с российским микроконтроллером

Reading time8 min
Views171K

Введение


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

К этому моменту уже как несколько месяцев изучал работу микроконтроллеров STM32F100 и STM32F103, применяя их на практике в презентационном устройстве. От таких гигантов, как STM32F429, мне пришлось отказаться. Так как стоимость в 1800 рублей за корпус является заоблачной для «бюджетного» устройства, функционал которого только начал превосходить возможности AVR Atmega32.
Читать дальше →
Total votes 81: ↑72 and ↓9+63
Comments56

Прототип. От идеи до опытной партии. Литье в силикон

Reading time2 min
Views182K
В прошлой статье я описал мой путь по созданию опытной партии изделия, в ней я литье в силикон отдал на аутсорс. Пока я ждал выполнения моего заказа, потихоньку сам начал осваивать это ремесло. Статья будет полезна тем, у кого допустим есть плата какого-нибудь девайса, но нету красивого корпуса, 3д-печать не подходит по характеристикам, а делать сразу промышленную пресс-форму очень дорого.


Читать дальше →
Total votes 168: ↑166 and ↓2+164
Comments75

Как я заказывал и собирал PRUSA i3

Reading time6 min
Views162K
После того, как мне пришел распечатанный корпус для моих часов (еще раз спасибо bigbee), я загорелся идеей купить 3D принтер. Идея RepRap opensource принтеров мне понравилась, да и цена на них не так уж и кусалась. После многочисленных страниц форумов и кучи предложений на интернет площадках, я решил купить Prusa i3 (Прюша итерация 3). За подробностями прошу под кат.
Читать дальше →
Total votes 33: ↑31 and ↓2+29
Comments41

Wi-Fi сети: проникновение и защита. 1) Матчасть

Reading time9 min
Views622K


Синоптики предсказывают, что к 2016 году наступит второй ледниковый период трафик в беспроводных сетях на 10% превзойдёт трафик в проводном Ethernet. При этом от года в год частных точек доступа становится примерно на 20% больше.

При таком тренде не может не радовать то, что 80% владельцев сетей не меняют пароли доступа по умолчанию. В их число входят и сети компаний.

Этим циклом статей я хочу собрать воедино описания существующих технологии защит, их проблемы и способы обхода, таким образом, что в конце читатель сам сможет сказать, как сделать свою сеть непробиваемой, и даже наглядно продемонстрировать проблемы на примере незадачливого соседа (do not try this at home, kids). Практическая сторона взлома будет освещена с помощью Kali Linux (бывший Backtrack 5) в следующих частях.

Статья по мере написания выросла с 5 страниц до 40, поэтому я решил разбить её на части. Этот цикл — не просто инструкция, как нужно и не нужно делать, а подробное объяснение причин для этого. Ну, а кто хочет инструкций — они такие:
Используйте WPA2-PSK-CCMP с паролем от 12 символов a-z (2000+ лет перебора на ATI-кластере). Измените имя сети по умолчанию на нечто уникальное (защита от rainbow-таблиц). Отключите WPS (достаточно перебрать 10000 комбинаций PIN). Не полагайтесь на MAC-фильтрацию и скрытие SSID.

Оглавление:
1) Матчасть
2) Kali. Скрытие SSID. MAC-фильтрация. WPS
3) WPA. OpenCL/CUDA. Статистика подбора
Как работают WEP, WPA и WPS
Total votes 185: ↑176 and ↓9+167
Comments76

UART и с чем его едят

Reading time10 min
Views858K
После Vogue истерии появилось множество вопросов, как подключить плату к компьютеру. И многие люди даже не понимают, что же такое UART. И я решил рассказать здесь какой это мощный инструмент.

image
Роутер превращается в компьютер, если к нему по UART подключить клавиатуру и дисплей

От телеграфа к COM-порту


Протокол UART (Universal asynchronous receiver/transmitter) или, по-русски, УАПП (универсальный асинхронный приемопередатчик) — старейший и самый распространенный на сегодняшний день физический протокол передачи данных. Наиболее известен из семейства UART протокол RS-232 (в народе – COM-порт, тот самый который стоит у тебя в компе). Это, наверное, самый древний компьютерный интерфейс. Он дожил до наших дней и не потерял своей актуальности.

Надо сказать, что изначально интерфейс УАПП появился в США как средство для передачи телеграфных сообщений, и рабочих бит там было пять (как в азбуке Морзе). Для передачи использовались механические устройства. Потом появились компьютеры, и коды ASCII, которые потребовали семь бит. В начале 60-х на смену пришла всем известная 8-битная таблица ASCII, и тогда формат передачи стал занимать полноценный байт, плюс управляющие три бита.
Читать дальше →
Total votes 198: ↑192 and ↓6+186
Comments97

Основы BASH. Часть 1

Reading time5 min
Views1.4M
Безусловно, все те кто общается с ОС Linux хоть раз да имели дело(во всяком случае слышали точно) с командной оболочкой BASH. Но BASH не только командная оболочка, это еще и превосходный скриптовый язык программирования.
Цель этой статьи — познакомить поближе юзеров с bash, рассказать про синтаксис, основные приемы и фишки языка, для того чтобы даже обычный пользователь смог быстренько написать простой скрипт для выполнения ежедневной(-недельной, -месячной) рутинной работы или, скажем, «на коленке» наваять скриптик для бэкапа директории.
Читать дальше →
Total votes 146: ↑135 and ↓11+124
Comments114

Взломать Wi-Fi за 10 часов

Reading time12 min
Views1.5M
Еще не так давно казалось, что беспроводная сеть, защищенная с помощью технологии WPA2, вполне безопасна. Подобрать простой ключ для подключения действительно возможно. Но если установить по-настоящему длинный ключ, то сбрутить его не помогут ни радужные таблицы, ни даже ускорения за счет GPU. Но, как оказалось, подключиться к беспроводной сети можно и без этого — воспользовавшись недавно найденной уязвимостью в протоколе WPS.


Читать дальше →
Total votes 304: ↑294 and ↓10+284
Comments164

15 малоизвестных команд Linux

Reading time3 min
Views316K
Каждому разработчику в определенной степени следует овладеть навыками работы в терминале. Физически находиться у компьютера не всегда возможно, поэтому приходится подключаться удаленно. И действительно, GUI-программы вполне могут с этим с правиться, но зачастую они работают медленнее, чем получение доступа через тот же терминал (в конце концов, это лишь обмен текстом).
Читать дальше →
Total votes 333: ↑274 and ↓59+215
Comments224

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Registered
Activity