- Golang и горутины;
- JavaScript и его применимость для серьезных проектов;
- Java и Project Loom;
- олимпиадное программирование на Kotlin;
- как правильно обучаться программированию;
- и другие волнующие вещи.
Java-разработчик
RESTful API для сервера – делаем правильно (Часть 1)
Python — это медленно. Почему?
Спросите Итана: если масса искривляет пространство-время, как оно распрямляется обратно?
Кривизна пространства-времени вблизи любого массивного объекта определяется комбинацией массы и расстояния до центра масс. Необходимо учесть и другие параметры, такие, как скорость, ускорение и другие источники энергии.
Материя сообщает пространству, как искривляться, а искривлённое пространство сообщает материи, как двигаться. Это основной принцип ОТО Эйнштейна, впервые связавшей такое явление, как гравитация, с пространством-временем и относительностью. Поместите массу в любой точке Вселенной, и пространство вокруг неё отреагирует искривлением. Но если убрать массу или передвинуть её, что заставляет пространство-время «вставать на место», принимая неискривлённое положение? Такой вопрос задаёт наш читатель:
Нас учат, что масса деформирует пространство-время, а кривизна пространства-времени вокруг массы объясняет гравитацию – к примеру, объект на орбите вокруг Земли на самом деле движется по прямой, лежащей в искривлённом пространстве-времени. Допустим, это имеет смысл, но когда масса (вроде Земли) двигается через пространство-время и искривляет его, почему пространство-время не остаётся искривлённым? Какой механизм распрямляет этот участок пространства-времени, когда масса двигается дальше?
С этим вопросом связано много интересного, и ответ на самом деле может помочь вам понять, как работает гравитация.
Кривые развития программиста и немного об эффекте Даннинга — Крюгера
Существует два основных пути становления топ-менеджмента в IT-компаниях:
- Менеджерский — когда менеджер проекта начинает управлять другими менеджерами.
- Технарский — когда разработчик начинает управлять другими разработчиками и количество управляемого им персонала увеличивается.
Первый путь является более естественным, поскольку, подразумевает развитие основных качеств менеджера по мере его роста. По сути менеджер остается менеджером, только становится специалистом более высокого звена.
Второй путь является более долгим и не гарантирует успеха, так как является противоречащим сути интроверта-программиста. Однако, на этом пути я бы хотел заострить внимание и поделиться опытом и знаниями.
Про вероятности
(source)
Иногда мне приходится рассказывать другим людям как работает машинное обучение и, в частности, нейронные сети. Обычно я начинаю с градиентного спуска и линейной регрессии, постепенно переходя к многослойным перцептронам, автокодировщикам и свёрточным сетям. Все понимающе кивают головой, но в какой-то момент кто-нибудь прозорливый обязательно спрашивает:
А почему так важно, чтобы переменные в линейной регрессии были независимы?
или
А почему для изображений используются именно свёрточные сети, а не обычные полносвязные?
"О, это просто", — хочу ответить я. — "потому что если бы переменные были зависимыми, то нам пришлось бы моделировать условное распределение вероятностей между ними" или "потому что в небольшой локальной области гораздо проще выучить совместное распределение пикселей". Но вот проблема: мои слушатели ещё ничего не знают про распределения вероятностей и случайные переменные, поэтому приходится выкручиваться другими способами, объясняя сложнее, но с меньшим количеством понятий и терминов. А что делать, если попросят рассказать про батч нормализацию или генеративные модели, так вообще ума не приложу.
Так давайте не будем мучить себя и других и просто вспомним основные понятия теории вероятностей.
JavaParser. Корёжим код легко и непринуждённо
В мире существует множество клёвых маленьких библиотек, которые как бы и не знаменитые, но очень полезные. Идея в том, чтобы потихоньку знакомить Хабр с такими вещами. Сегодня расскажу о JavaParser.
JavaParser — это набор инструментов для парсинга, анализа, трансформации и генерации Java-кода. Иначе говоря, если нужно взять кусок джавакода и как-то его покорёжить подручными методами и без необходимости в особых знаниях, эта либа — самое то.
Где-то посреди статьи вы ВНЕЗАПНО можете осознать, какой кошмар и ужас можно сотворить этой либой, и никак не дождётесь дочитать текст и полить меня гневными комментариями. Не сдерживайтесь, не стоит — сразу скрольте до самого низу и изливайте душу :)
Лекции Технополиса. Проектирование высоконагруженных систем (осень 2017)
Мы начинаем публиковать курсы лекций Технополиса — образовательного проекта команды Одноклассников в Санкт-Петербургском Политехническом университете Петра Великого. Создание высоконагруженных приложений — это не только проектирование и написание кода, но и огромное количество других аспектов на всём протяжении жизненного цикла продукта. Мы пройдём по всему процессу создания и использования высоконагруженной системы. Особое внимание будет уделено особенностям эксплуатации, сетям, балансировке нагрузки, иерархии памяти, повседневным инструментам. Также поговорим о мониторинге, аудите и многом другом. Лекции курса читает команда экспертов под руководством ведущего разработчика в Одноклассниках Вадима Цесько.
Список лекций:
- Введение (Вадим Цесько incubos)
- Типовые архитектуры (Александр Христофоров)
- Эксплуатация (Илья Щаников)
- Сетевой стек (Дмитрий Самсонов dmitrysamsonov)
- Балансировка (Андрей Домась)
- Процессоры и память (Алексей Горбов)
- Хранилища данных (Сергей Егоричев)
- JVM (Андрей Паньгин apangin)
- Мониторинг (Сергей Шарапов Sharapoff)
- Облака (Леонид Талалаев)
Что действительно случилось с Vista: инсайдерская ретроспектива
Традиционно группа разработчиков Windows подписывает постер (в данном случае изображение DVD) с выпуском новой версии Windows. Ко времени окончания вечеринки по поводу релиза на нём будут сотни или тысячи подписей
«Опыт — это то, что ты получаешь только после того, как он тебе понадобится» — Стивен Райт
Мне понравился содержательный блог Терри Кроули («Что действительно случилось с Vista»). Терри работал в группе Office и проделал фантастическую работу, описывая сложные козни вокруг Windows Vista и связаного, но заброшенного проекта Longhorn — с точки зрения внешнего наблюдателя.
Он верно подметил многие из проблем, которые преследовали проект, и я не хочу повторять о них снова. Я только подумал, что будет честно изложить инсайдерский взгляд на те же события. Не рассчитываю на такое же красноречивое или исчерпывающее изложение, как у Терри, но надеюсь пролить некоторый свет на то, что пошло не так. Прошло десять лет с момента выхода первой версии Windows Vista, но эти уроки сейчас кажутся актуальными как никогда.
Миром всё ещё управляет язык С
Разработка базы данных Oracle началась в 1977 году (тоже на ассемблере) и тоже была переписана на С в 1983 году. К тому времени это был уже один из самых популярных языков в мире.
В 1985 году вышла Windows 1.0. Хотя код операционной системы Windows не является открытым, общеизвестно, что ядро в основном написано на С с небольшими вставками ассемблера. Разработка Linux началась в 1991 году и началась сразу на С. В следующем году она была опубликована под лицензией GPL и использована как часть GNU Operating System, которая и сама начиналась как проект на С и Lisp, так что многие компоненты были написаны на С.
Но проекты на С — это не только то, что стартовало десятилетия назад, когда выбор языков, скажем прямо, был достаточно ограничен. Много С-кода пишется и сейчас, на нём начинаются и новые проекты. Для этого есть причины.
Как именно язык С управляет миром?
Как именно работает Meltdown
Уже третий день у всех на слуху слова Meltdown и Spectre, свеженькие уязвимости в процессорах. К сожалению, сходу найти что либо про то, как именно работают данные уязвимости (для начала я сосредоточился на Meldown, она попроще), у меня не удалось, пришлось изучать оригинальные публикации и статьи: оригинальная статья, блок Google Project Zero, статья аж из лета 2017. Несмотря на то, что на хабре уже есть перевод введения из оригинальной публикации, хочется поделиться тем, что мне удалось прочитать и понять.
Перевод статьи основателя Debian Яна Мердока «Как я очутился в Linux»
Как я очутился в Linux
Cвою первую рабочую станцию компании Sun я увидел зимой 1992 года, будучи молодым студентом Университета Пурду. В то время, когда я еще был студентом Краннерсткой школы менеджмента и моя детская любовь к компьютерам была заново пробуждена обязательным курсом программирования, который я изучал во время осеннего семестра (нам дали на выбор языки COBOL и FORTRAN, оба даже в 1992 кажется уже сильно устарели — я выбрал COBOL, поскольку он казался более “рабочим” из этих двух языков).
Перформанс: что в имени тебе моём? — Алексей Шипилёв об оптимизации в крупных проектах
Под катом — расшифровка его доклада.
Как написать свой первый Linux device driver
Цель данной статьи — показать принцип реализации драйверов устройств в системе Linux, на примере простого символьного драйвера.
Для меня же, главной целью является подвести итог и сформировать базовые знания для написания будущих модулей ядра, а также получить опыт изложения технической литературы для публики, т.к. через полгода я буду выступать со своим дипломным проектом (да я студент).
Это моя первая статья, пожалуйста не судите строго!
P.S
Получилось слишком много букв, поэтому я принял решение разделить статью на три части:Часть 1 — Введение, инициализация и очистка модуля ядра.
Часть 2 — Функции open, read, write и trim.
Часть 3 — Пишем Makefile и тестируем устройство.
Перед вступлением, хочу сказать, что здесь будут изложены базовые вещи, более подробная информация будет изложена во второй и последней части данной статьи.
Итак, начнем.
Что там с JEP-303 или изобретаем invokedynamic
Блогеры и авторы, пытающиеся быть на передовой, уже немало писали про проект Amber в Java 10. В этих статьях обязательно упоминается вывод типов локальных переменных, улучшения enum и лямбд, иногда пишут про pattern matching и data-классы. Но при этом незаслуженно обходится стороной JEP 303: Intrinsics for the LDC and INVOKEDYNAMIC Instructions. Возможно, потому что мало кто понимает, к чему это вообще. Хотя любопытно, что именно об этой фиче ребята из NIX_Solutions фантазировали на Хабре год назад.
Широко известно, что в виртуальной машине Java, начиная с версии 7, есть интересная инструкция invokedynamic (она же indy). Про неё многие слышали, однако мало кто знает, что она делает на самом деле. Кто-то знает, что она используется при компиляции лямбда-выражений и ссылок на методы в Java 8. Некоторые слышали, что через неё реализована конкатенация строк в Java 9. Но хотя это полезные применения indy, изначальная цель всё же немного другая: делать динамический вызов, при котором вы можете вызывать разный код в одном и том же месте. Эта возможность не используется ни в лямбдах, ни в конкатенации строк: там поведение всегда генерируется при первом вызове и остаётся постоянным до конца работы программы (всегда используется ConstantCallSite). Давайте посмотрим, что можно сделать ещё.
Как не обломать мозг об пароли вроде eLkdC,lk#jB
Нормальный стойкий пароль фиг запомнишь. Почти аксиома. Еще и безопасники радостно подбрасывают дровишек в этот костер ужаса, заставляя раз в месяц учить чудовищный фарш из мешанины символов. Параноидальные меры безопасности в лучших традициях «Хакера в столовой» приводят лишь к тому, что пользователи заботливо царапают пароли на мониторе или складывают под клавиатуру. Нет, серьезно, ну кто из обычных пользователей в здравом уме будет соблюдать требования к паролю в духе:
- Длиннее 8 символов,
- Содержит прописные, строчные буквы, числа и специальные символы,
- Не повторяет ни один из предыдущих,
- Меняется ежемесячно.
Давайте вспомним классическую историю про скрепки, батарейку, корректных лошадей и заодно посмотрим на пару клевых оффлайновых генераторов человекочитаемых паролей. В свое время это сильно облегчило мне жизнь.
Транзакционная память: история и развитие
Определение
Параллельное программирование сложно. При использовании систем с общей памятью не обойтись без синхронизации доступа параллельных процессов/потоков к общему ресурсу (памяти). Для этого используются:
- блокировки (mutex);
- алгоритмы без блокировки (lockless, lock-free);
- транзакционная память.
Транзакционная память — технология синхронизации конкурентных потоков. Она упрощает параллельное программирование, выделяя группы инструкций в атомарные транзакции. Конкурентные потоки работают параллельно1, пока не начинают модифицировать один и тот же участок памяти. К примеру, операции добавления узлов в красно-чёрное дерево (анимация в заголовке) способны работать параллельно в нескольких потоках.
/* Move item from one list to another */
int move(list *from, list *to) {
__transaction_atomic {
node *n = pop(from);
push(to, n);
}
}
Более чем 80 средств мониторинга системы Linux
1. первый инструмент — top
Консольная команда top- удобный системный монитор, простой в использовании, с помощью которой выводится список работающих в системе процессов, информации о этих процессах. Данная команда в реальном времени сортирует их по нагрузке на процессор, инструмент предустановлен во многих системах UNIX.
Сертификация RHCSA: опыт подготовки и сдачи
Оставлю за рамками вопрос, зачем получать эту сертификацию, лично я сдавал потому что
- мой работодатель предоставил мне такую возможность,
- при мониторинге вакансий по своей специальности я часто встречаю пометку, что официальная сертификация будет преимуществом,
- ну и для собственного ЧСВ конечно.
Атомарные и неатомарные операции
Перевод статьи Джефа Прешинга Atomic vs. Non-Atomic Operations. Оригинальная статья: http://preshing.com/20130618/atomic-vs-non-atomic-operations/
В Сети уже очень много написано об атомарных операциях, но в основном авторы рассматривают операции чтения-модификации-записи. Однако, существуют и другие атомарные операции, например, атомарные операции загрузки (load) и сохранения (store), которые не менее важны. В этой статье я сравню атомарные загрузки и сохранения с их неатомарными аналогами на уровне процессора и компилятора C/C++. По ходу статьи мы также разберемся с концепцией «состояния гонок» с точки зрения стандарта C++11.
Information
- Rating
- Does not participate
- Location
- Москва, Москва и Московская обл., Россия
- Registered
- Activity