Pull to refresh
28
0
Алексей @Priest512

Java-разработчик

Send message

«Мы даже не пытаемся запустить старый код, такой задачи у нас не стоит в принципе» — Роман Елизаров о разработке Kotlin

Reading time26 min
Views20K
Если хочешь в чем-то разобраться — учись сразу у лучших. Сегодня на мои вопросы отвечает бог корутин и concurrency, Рома elizarov Елизаров. Мы поговорили не только о Kotlin, как вы могли бы подумать, но ещё и о куче смежных тем:

  • Golang и горутины;
  • JavaScript и его применимость для серьезных проектов;
  • Java и Project Loom;
  • олимпиадное программирование на Kotlin;
  • как правильно обучаться программированию;
  • и другие волнующие вещи.


Читать дальше →
Total votes 59: ↑53 and ↓6+47
Comments108

RESTful API для сервера – делаем правильно (Часть 1)

Reading time13 min
Views333K
В 2007-м Стив Джобс представил iPhone, который произвел революцию в высокотехнологичной индустрии и изменил наш подход к работе и ведению бизнеса. Сейчас 2012-й и все больше и больше сайтов предлагают нативные iOS и Android клиенты для своих сервисов. Между тем не все стартапы обладают финансами для разработки приложений в дополнение к основному продукту. Для увеличения популярности своего продукта эти компании предлагают открытые API, которыми могут воспользоваться сторонние разработчики. Пожалуй Twitter был первым в этой сфере и теперь число компаний, последовавших этой стратегии, растет стремительно. Это действительно отличный способ создать привлекательную экосистему вокруг своего продукта.

Читать дальше →
Total votes 73: ↑70 and ↓3+67
Comments57

Python — это медленно. Почему?

Reading time9 min
Views86K
В последнее время можно наблюдать рост популярности языка программирования Python. Он используется в DevOps, в анализе данных, в веб-разработке, в сфере безопасности и в других областях. Но вот скорость… Здесь этому языку похвастаться нечем. Автор материала, перевод которого мы сегодня публикуем, решил выяснить причины медлительности Python и найти средства его ускорения.


Читать дальше →
Total votes 67: ↑59 and ↓8+51
Comments55

Спросите Итана: если масса искривляет пространство-время, как оно распрямляется обратно?

Reading time7 min
Views53K

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

Материя сообщает пространству, как искривляться, а искривлённое пространство сообщает материи, как двигаться. Это основной принцип ОТО Эйнштейна, впервые связавшей такое явление, как гравитация, с пространством-временем и относительностью. Поместите массу в любой точке Вселенной, и пространство вокруг неё отреагирует искривлением. Но если убрать массу или передвинуть её, что заставляет пространство-время «вставать на место», принимая неискривлённое положение? Такой вопрос задаёт наш читатель:
Нас учат, что масса деформирует пространство-время, а кривизна пространства-времени вокруг массы объясняет гравитацию – к примеру, объект на орбите вокруг Земли на самом деле движется по прямой, лежащей в искривлённом пространстве-времени. Допустим, это имеет смысл, но когда масса (вроде Земли) двигается через пространство-время и искривляет его, почему пространство-время не остаётся искривлённым? Какой механизм распрямляет этот участок пространства-времени, когда масса двигается дальше?

С этим вопросом связано много интересного, и ответ на самом деле может помочь вам понять, как работает гравитация.
Total votes 18: ↑15 and ↓3+12
Comments102

Кривые развития программиста и немного об эффекте Даннинга — Крюгера

Reading time9 min
Views54K
image

Существует два основных пути становления топ-менеджмента в IT-компаниях:

  1. Менеджерский — когда менеджер проекта начинает управлять другими менеджерами.
  2. Технарский — когда разработчик начинает управлять другими разработчиками и количество управляемого им персонала увеличивается.

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

Второй путь является более долгим и не гарантирует успеха, так как является противоречащим сути интроверта-программиста. Однако, на этом пути я бы хотел заострить внимание и поделиться опытом и знаниями.
Читать дальше →
Total votes 81: ↑71 and ↓10+61
Comments180

Про вероятности

Reading time11 min
Views42K

image
(source)


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


А почему так важно, чтобы переменные в линейной регрессии были независимы?

или


А почему для изображений используются именно свёрточные сети, а не обычные полносвязные?

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


Так давайте не будем мучить себя и других и просто вспомним основные понятия теории вероятностей.

Читать дальше →
Total votes 29: ↑29 and ↓0+29
Comments20

JavaParser. Корёжим код легко и непринуждённо

Reading time5 min
Views16K

В мире существует множество клёвых маленьких библиотек, которые как бы и не знаменитые, но очень полезные. Идея в том, чтобы потихоньку знакомить Хабр с такими вещами. Сегодня расскажу о JavaParser.


JavaParser — это набор инструментов для парсинга, анализа, трансформации и генерации Java-кода. Иначе говоря, если нужно взять кусок джавакода и как-то его покорёжить подручными методами и без необходимости в особых знаниях, эта либа — самое то.


Где-то посреди статьи вы ВНЕЗАПНО можете осознать, какой кошмар и ужас можно сотворить этой либой, и никак не дождётесь дочитать текст и полить меня гневными комментариями. Не сдерживайтесь, не стоит — сразу скрольте до самого низу и изливайте душу :)



Читать дальше →
Total votes 38: ↑35 and ↓3+32
Comments28

Лекции Технополиса. Проектирование высоконагруженных систем (осень 2017)

Reading time5 min
Views51K


Мы начинаем публиковать курсы лекций Технополиса — образовательного проекта команды Одноклассников в Санкт-Петербургском Политехническом университете Петра Великого. Создание высоконагруженных приложений — это не только проектирование и написание кода, но и огромное количество других аспектов на всём протяжении жизненного цикла продукта. Мы пройдём по всему процессу создания и использования высоконагруженной системы. Особое внимание будет уделено особенностям эксплуатации, сетям, балансировке нагрузки, иерархии памяти, повседневным инструментам. Также поговорим о мониторинге, аудите и многом другом. Лекции курса читает команда экспертов под руководством ведущего разработчика в Одноклассниках Вадима Цесько.

Список лекций:

  1. Введение (Вадим Цесько incubos)
  2. Типовые архитектуры (Александр Христофоров)
  3. Эксплуатация (Илья Щаников)
  4. Сетевой стек (Дмитрий Самсонов dmitrysamsonov)
  5. Балансировка (Андрей Домась)
  6. Процессоры и память (Алексей Горбов)
  7. Хранилища данных (Сергей Егоричев)
  8. JVM (Андрей Паньгин apangin)
  9. Мониторинг (Сергей Шарапов Sharapoff)
  10. Облака (Леонид Талалаев)

Total votes 77: ↑75 and ↓2+73
Comments14

Что действительно случилось с Vista: инсайдерская ретроспектива

Reading time12 min
Views94K

Традиционно группа разработчиков Windows подписывает постер (в данном случае изображение DVD) с выпуском новой версии Windows. Ко времени окончания вечеринки по поводу релиза на нём будут сотни или тысячи подписей

«Опыт — это то, что ты получаешь только после того, как он тебе понадобится» — Стивен Райт

Мне понравился содержательный блог Терри Кроули («Что действительно случилось с Vista»). Терри работал в группе Office и проделал фантастическую работу, описывая сложные козни вокруг Windows Vista и связаного, но заброшенного проекта Longhorn — с точки зрения внешнего наблюдателя.

Он верно подметил многие из проблем, которые преследовали проект, и я не хочу повторять о них снова. Я только подумал, что будет честно изложить инсайдерский взгляд на те же события. Не рассчитываю на такое же красноречивое или исчерпывающее изложение, как у Терри, но надеюсь пролить некоторый свет на то, что пошло не так. Прошло десять лет с момента выхода первой версии Windows Vista, но эти уроки сейчас кажутся актуальными как никогда.
Читать дальше →
Total votes 120: ↑119 and ↓1+118
Comments169

Миром всё ещё управляет язык С

Reading time8 min
Views34K
Многие из проектов на языке С, существующих сегодня, начинали разрабатываться ещё десятилетия назад. Операционная система UNIX стартовала 1969 году (и писалась на ассемблере), но уже в 1972 была переписана на С. Точнее, это язык С был создан для того, чтобы появилось что-то, на что было бы удобно переписать с ассемблера ядро UNIX и получить чуть более высокоуровневый код, менее зависимый от архитектуры и позволяющий выполнять больше полезной работы на каждую строчку написанного кода.

Разработка базы данных Oracle началась в 1977 году (тоже на ассемблере) и тоже была переписана на С в 1983 году. К тому времени это был уже один из самых популярных языков в мире.

В 1985 году вышла Windows 1.0. Хотя код операционной системы Windows не является открытым, общеизвестно, что ядро в основном написано на С с небольшими вставками ассемблера. Разработка Linux началась в 1991 году и началась сразу на С. В следующем году она была опубликована под лицензией GPL и использована как часть GNU Operating System, которая и сама начиналась как проект на С и Lisp, так что многие компоненты были написаны на С.

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

Как именно язык С управляет миром?

Читать дальше →
Total votes 91: ↑75 and ↓16+59
Comments143

Как именно работает Meltdown

Reading time4 min
Views97K

Уже третий день у всех на слуху слова Meltdown и Spectre, свеженькие уязвимости в процессорах. К сожалению, сходу найти что либо про то, как именно работают данные уязвимости (для начала я сосредоточился на Meldown, она попроще), у меня не удалось, пришлось изучать оригинальные публикации и статьи: оригинальная статья, блок Google Project Zero, статья аж из лета 2017. Несмотря на то, что на хабре уже есть перевод введения из оригинальной публикации, хочется поделиться тем, что мне удалось прочитать и понять.

Читать дальше →
Total votes 186: ↑184 and ↓2+182
Comments334

Перевод статьи основателя Debian Яна Мердока «Как я очутился в Linux»

Reading time11 min
Views17K
Привет! 28 декабря 2015 года при довольно странных обстоятельствах ушел из жизни Ян Мердок (Ian Murdock) — основатель проекта Debian. Как-то блуждая по Сети и выясняя причины этой весьма загадочной смерти, я наткнулся на блог Яна и пост в нем под названием «How I came to find Linux». Этот текст мне показался очень трогательным и интересным. Так как я не программист и не художник, я решил внести свой небольшой вклад в сообщество, сделав перевод его текста на русский язык. Я постарался, чтобы мой перевод был одновременно и максимально близким к тексту, и, все-таки, литературным, читаемым. Получилось или нет —судить не мне. Сам текст, как мне кажется, несмотря на его небольшой размер и простоту, очень важен. Важен для понимания того времени, той розовой эпохи, плодами которой мы пользуемся до сих пор, будь то iPhone, Android или сайт VK.com (powered by Debian, насколько мне известно). В завершении предисловия я хотел бы дать и практический смысл моему посту. Дело в том, что я так и не смог найти сервис для совместного перевода, который бы отличался простотой и ясностью в главном: в размещении английского оригинала и удобной совместной работы над переводом в идеале с учетом разных вариантов. Вот посмотрел с пяток и нужного не нашел. Так и переводил в google docs с разбивкой на строки-абзацы и две колонки: оригинал/перевод. Если знаете такой: отпишите в комментариях и, да, не судите строго. Приятного чтения!

Как я очутился в Linux



image

Cвою первую рабочую станцию компании Sun я увидел зимой 1992 года, будучи молодым студентом Университета Пурду. В то время, когда я еще был студентом Краннерсткой школы менеджмента и моя детская любовь к компьютерам была заново пробуждена обязательным курсом программирования, который я изучал во время осеннего семестра (нам дали на выбор языки COBOL и FORTRAN, оба даже в 1992 кажется уже сильно устарели — я выбрал COBOL, поскольку он казался более “рабочим” из этих двух языков).
Читать дальше →
Total votes 26: ↑23 and ↓3+20
Comments16

Перформанс: что в имени тебе моём? — Алексей Шипилёв об оптимизации в крупных проектах

Reading time26 min
Views33K
Оптимизация производительности издавна не даёт покоя разработчикам, представляясь своеобразным «золотым ключиком» к интересным решениям и хорошему послужном списку. Большую обзорную экскурсию по ключевым вехам оптимизации больших проектов  – от общих принципов до ловушек и противоречий —  на прошедшем JPoint 2017 провёл Алексей Шипилёв, эксперт по производительности.



Под катом — расшифровка его доклада.
Total votes 76: ↑73 and ↓3+70
Comments10

Как написать свой первый Linux device driver

Reading time7 min
Views60K
Здравствуйте, дорогие хабрачитатели.

Цель данной статьи — показать принцип реализации драйверов устройств в системе Linux, на примере простого символьного драйвера.

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

Это моя первая статья, пожалуйста не судите строго!

P.S

Получилось слишком много букв, поэтому я принял решение разделить статью на три части:

Часть 1 — Введение, инициализация и очистка модуля ядра.
Часть 2 — Функции open, read, write и trim.
Часть 3 — Пишем Makefile и тестируем устройство.

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

Итак, начнем.
Читать дальше →
Total votes 59: ↑52 and ↓7+45
Comments41

Что там с JEP-303 или изобретаем invokedynamic

Reading time8 min
Views11K

Блогеры и авторы, пытающиеся быть на передовой, уже немало писали про проект 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). Давайте посмотрим, что можно сделать ещё.

Читать дальше →
Total votes 31: ↑31 and ↓0+31
Comments15

Как не обломать мозг об пароли вроде eLkdC,lk#jB

Reading time6 min
Views36K
image

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

  1. Длиннее 8 символов,
  2. Содержит прописные, строчные буквы, числа и специальные символы,
  3. Не повторяет ни один из предыдущих,
  4. Меняется ежемесячно.

Давайте вспомним классическую историю про скрепки, батарейку, корректных лошадей и заодно посмотрим на пару клевых оффлайновых генераторов человекочитаемых паролей. В свое время это сильно облегчило мне жизнь.
Читать дальше →
Total votes 34: ↑33 and ↓1+32
Comments93

Транзакционная память: история и развитие

Reading time14 min
Views47K

Определение


Параллельное программирование сложно. При использовании систем с общей памятью не обойтись без синхронизации доступа параллельных процессов/потоков к общему ресурсу (памяти). Для этого используются:
  • блокировки (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);
    }
}

Читать дальше →
Total votes 79: ↑78 and ↓1+77
Comments34

Более чем 80 средств мониторинга системы Linux

Reading time12 min
Views319K
Ниже будет приведен список инструментов мониторинга. Есть как минимум 80 способов, с помощью которых ваша машинка будет под контролем.



1. первый инструмент — top

Консольная команда top- удобный системный монитор, простой в использовании, с помощью которой выводится список работающих в системе процессов, информации о этих процессах. Данная команда в реальном времени сортирует их по нагрузке на процессор, инструмент предустановлен во многих системах UNIX.
читать дальше
Total votes 94: ↑82 and ↓12+70
Comments68

Сертификация RHCSA: опыт подготовки и сдачи

Reading time5 min
Views83K
Недавно я прошел курс RedHat Rapid Track Course with Exam (RH200) и успешно сдал сертификацию RedHat Certified System Administrator (RHCSA). Это начальная сертификация в линейке сертификаций RedHat, и я решил, что рассказ о подготовке и сдаче этого экзамена будет полезен Хабрасообществу (подробных рассказов об этом на Хабре я не нашел). Сразу оговорюсь, что перед началом экзамена подписываешь документ, который запрещает разглашать информацию о том, что было на экзамене, однако не запрещено рассказывать, что было на официальном курсе подготовки к этому экзамену, что я и сделаю.

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

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

Атомарные и неатомарные операции

Reading time8 min
Views125K


Перевод статьи Джефа Прешинга Atomic vs. Non-Atomic Operations. Оригинальная статья: http://preshing.com/20130618/atomic-vs-non-atomic-operations/

В Сети уже очень много написано об атомарных операциях, но в основном авторы рассматривают операции чтения-модификации-записи. Однако, существуют и другие атомарные операции, например, атомарные операции загрузки (load) и сохранения (store), которые не менее важны. В этой статье я сравню атомарные загрузки и сохранения с их неатомарными аналогами на уровне процессора и компилятора C/C++. По ходу статьи мы также разберемся с концепцией «состояния гонок» с точки зрения стандарта C++11.
Читать дальше →
Total votes 44: ↑43 and ↓1+42
Comments10

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Registered
Activity