Pull to refresh
11
0

Пользователь

Send message

Ищем музыку на z-music.org с помощью bash

Reading time3 min
Views1.2K
Понятно, что «жертвой» сегодняшнего эксперимента будет z-music.org. На этом сайте есть возможность найти песню, послушать и скачать её.
Цель — написать bash скрипт для поиска музыки, используя «джентльменский набор» sed, awk и grep. Ну и плюс немного curl или wget по вкусу.
Пишем bash script

Элиза

Reading time5 min
Views53K
Давным-давно, когда я был маленький, у меня не было друзей. Нет, правда, совсем-совсем не было. Я нуждался в общении, мечтал о ком-то близком, но понимания среди других людей найти не мог, и спасение находил лишь в книгах и компьютере. Вместе с первым CD-приводом появились мои первые компакт-диски с играми. Ты, наверное, помнишь такие: триста игр, пятьсот, семьсот… Кроме всяких аркад и шутеров, на одном из дисков была программа Диала — интерактивный собеседник.
Читать дальше →

Ускоренное расширение Вселенной: несколько популярных слов

Reading time8 min
Views9.2K
Некоторая ирония природы состоит в том, что наиболее изобильная форма энергии во Вселенной есть и наиболее загадочная. После ошеломляющего открытия ускоренного расширения Вселенной довольно быстро возникла согласованная картина, указывающая на то, что 2/3 космоса «сделаны» из «темной энергии» — некоторого сорта гравитационно отталкивающего материала. Но достаточно ли убедительны доказательства, подтверждающие новые экзотические законы природы? Может имеются более простые астрофизические объяснения этих результатов?
Читать дальше →

Фреймворки делают разработчиков тупыми?

Reading time3 min
Views17K
Предлагаю вам перевод записи блога, автор которой подметил глобальные тенденции современного программирования. Хотя речь идет о Java, с которым я никогда не работал, я нашел много до боли знакомого.

На прошлой неделе я проводил несколько интервью, чтобы нанять Senoir Java developers с опытом около пяти лет. После них я почувствовал, что фреймворки делают жизнь разработчиков проще, но в тоже время делают их тупее. Каждый указывает практически все новые фреймворки в своем резюме в виде «Мощный опыт работы с Spring, Hibernate, Web Services и так далее».

Вот как проходили собеседования.

Я: Вы использовали Spring в своем последнем проекте. Какие преимущества использования Spring?
Претендент: Мы можем настраивать beans в XML, а Spring возьмет на себя создание экземпляра и отдаст его нам.
Я: Если Spring только для создания объектов, зачем он вообще нужен – я могу напрямую создать экземпляр, используя «new». Почему мне стоит настраивать имена классов в XML и получать объект из Spring?
Читать дальше →

История языка Си

Reading time6 min
Views38K
Сейчас, наверно, невозможно найти в мире специалиста в IT-области, который бы не слышал о языке Си. Этот язык приобрёл огромную популярность во всём мире и оказал значительное влияние на многие другие языки программирования. Именно он является предшественником таких языков, как C++, C#, Java; менее известных (например J#). Компания Microsoft для разработки родного языка к своей платформе .Net выбрала именно Си-подобный синтаксис. Что ни говори, но язык Си серьезно изменил жизнь программистов прошлого века и стал де-факто в области низкоуровневого программирования, оставив ассемблеру только те места, где производительность имела критическое значение.

Многие помнят имена создателей языка — Кена Томпсона и Дениса Ритчи, но я решил копнуть глубже и вспомнить историю создания и развития языка. Всем кому интересна эта тема — добро пожаловать под кат.
Читать дальше →

OAuth: описание протокола простым и понятным языком

Reading time16 min
Views200K
OAuth — популярный протокол, который позволяет социальным сервисам интегрироваться между собой и дает безопасный способ обмена персональной информацией. OAuth может связать между собой 2 сервиса, каждый из которых имеет свою пользовательскую базу — именно их я в данном случае называю «социальными». Когда начинаешь работать с OAuth, первое ощущение — что протокол весьма сложен и избыточен. В этой статье я попытаюсь объяснить основы OAuth человеческим языком.

Пример кросс-авторизации


Вернемся в 2005-й год и представим, что мы пишем социальную сеть. В ней имеется форма импорта контактов из адресной книги GMail. Что нужно для доступа к контактам GMail? Конечно, логин и пароль от ящика. Но если мы попросим ввести их на нашем сайте, пользователь заподозрит неладное. Где гарантия, что мы не сохраняем на сервере введенные пароли? Поэтому нам хочется, чтобы пароль вводился только на сайте GMail, и после этого доступ к контактам через API GMail предоставлялся нашей социальной сети (возможно, на время).
Под катом - повествование с примерами

Краткое введение в SIM-карты

Reading time6 min
Views231K
Когда на вопрос «кем вы работаете?» я отвечал «разработчиком ПО для SIM-карт», даже технически подкованные люди частенько удивлялись. Многие думают, что SIM-карта это «что-то типа флешки».

В этой статье я постараюсь кратко рассказать что такое SIM-карта (и смарт-карты в общем), зачем она нужна и что у нее внутри.

На самом деле SIM-карта — это частный случай контактной смарт-карты с микропроцессором. По сути, представляет из себя достаточно защищенный микрокомпьютер с CPU, ROM (опционально), RAM и NVRAM (которая выступает в качестве аналога жесткого диска в PC), с аппаратными генераторами случайных чисел и аппаратной реализацией крипто-алгоритмов.

В некотором приближении архитектуру микропроцессорной смарт-карты можно представить так:
Архитектура смарт-карты

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

Тульпа — карманная шизофрения для гиков или реальный воображаемый друг

Reading time9 min
Views1.5M
Скажите, вы бы хотели иметь друга? Любого человека или другое существо, которое будет вашим самым лучшим другом, обладая той внешностью, которая вам нравится, и тем характером который вам необходим, которое не надо будет делить с ее или его друзьями, родителями, собачкой, игрушками или учебой.
А секретаря, который всегда с вами, имеет прямой доступ к вашей памяти, напомнит, подскажет, и подаст нужную идею, напарника для мозгового штурма?
Тогда добро пожаловать под кат.



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

Модель Random Forest для классификации, реализация на c#

Reading time18 min
Views51K
Доброго времени суток, читатель. Random Forest сегодня является одним из популярнейших и крайне эффективных методов решения задач машинного обучения, таких как классификация и регрессия. По эффективности он конкурирует с машинами опорных векторов, нейронными сетями и бустингом, хотя конечно не лишен своих недостатков. С виду алгоритм обучения крайне прост (в сравнении скажем с алгоритмом обучения машины опорных векторов, кому мало острых ощущений в жизни, крайне советую заняться этим на досуге). Мы же попробуем в доступной форме разобраться в основных идеях, заложенных в Random Forest (бинарное дерево решений, бутстреп аггрегирование или бэггинг, метод случайных подпространств и декорреляция) и понять почему все это вместе работает. Модель относительно своих конкурентов довольно таки молодая: началось все со статьи 1997 года в которой авторы предлагали способ построения одного дерева решений, используя метод случайных подпространств признаков при создании новых узлов дерева; затем был ряд статей, который завершился публикацией каноничной версии алгоритма в 2001 году, в котором строится ансамбль решающих деревьев на основе бутстреп агрегирования, или бэггинга. В конце будет приведен простой, совсем не шустрый, но крайне наглядный способ реализации этой модели на c#, а так же проведен ряд тестов. Кстати на фотке справа вы можете наблюдать настоящий случайный лес который произрастает у нас тут в Калининградской области на Куршской косе.

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

Как отправлять push уведомления из Вашего Rails приложения

Reading time3 min
Views16K
Один из наиболее популярных способов связи мобильного приложения с сервером — отправка push уведомлений пользователю. Если Вы уже сталкивались с реализацией push уведомлений, то для Вас открытия Америки не произойдет, однако, новичкам в данной теме приходиться туго — это связанно с огромной путаницей в информации (от переводчика: действительно довольно много противоречивой, а зачастую и вовсе бесполезной информации). Именно эта путаница стала причиной написания данной статьи для WellWithMe, где я опишу разработку серверной части push уведомлений.

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

Учимся думать и писать на Erlang (на примере двух комбинаторных задач)

Reading time12 min
Views36K
— … Тут я даю ему по морд… Нет, бить нельзя!
— В том-то и дело, что бить нельзя, — лицемерно вздохнул Паниковский. — Бендер не позволяет.
И.Ильф, Е.Петров. Золотой теленок.

Мозголомная Брага жила в прозрачном сосуде и была такая
крепкая, что даже ужас. Она не то что из живота — прямо изо рта
бросилась в голову и стала кидаться там из стороны в сторону,
ломая умственные подпорки и укрепы.
М.Успенский. Там, где нас нет.

Пожалуй каждый, кто впервые приступает к изучению Erlang, ощущает себя в положении Шуры Балаганова, которому запрещено было применение единственного доступного и понятного метода: «бить нельзя...». В Erlang отсутствуют такие привычные для большинства современных языков понятия, как повторное присвоение переменной и, соответственно, накопление результата в одной переменной. (Справедливости ради следует отметить, что поведение типа «глобальная многократно меняющаяся переменная» в Erlang все же можно реализовать. Для этого в каждом процессе имеется словарь хешей, хранящий определяемые программистом пары ключ — значение. Имеются встроенные функции put(Key, Value), get(Key) и еще несколько вспомогательных функций. Но использование такого словаря в приложениях считается плохим стилем и рекомендуется только в исключительных случаях (http://www.erlang.org/doc/man/erlang.html\#put-2)). Как следствие, итерации в цикле невозможно реализовать с помощью привычного наращивания значений итерационной переменной. Накопление результата осуществляется только через рекурсию, а организация циклов — через хвостовую рекурсию. (Конечно, и итерации, и накопление результата в цикле можно реализовать через библиотечные функции для списков lists:foreach(Function, List), lists:foldl(Function, StartValue, List), lists:foldr(Function, StartValue, List) (http://www.erlang.org/doc/man/lists.html) и их аналоги для наборов (http://www.erlang.org/doc/man/sets.html, http://www.erlang.org/doc/man/ordsets.html, http://www.erlang.org/doc/man/gb_sets.html) и массивов (http://www.erlang.org/doc/man/array.html). Но наша цель — научиться писать циклы, а не использовать готовые решения, поэтому здесь мы воздержимся от употребления подобных библиотек).

Таким образом, в Erlang приходится ломать привычные шаблоны мышления и заменять их новыми паттернами, характерными только для этого языка программирования. Конечно, идеальное средство — мозголомная брага, способная ломать все «умственные подпорки и укрепы». Но для нас это, пожалуй, слишком радикальное средство, и мы пойдем другим путем.

В житии святого Антония Великого есть рассказ об одном из его учеников. Ученик стоял в храме и слушал, как святой Антоний читал Псалтырь. Как только прозвучал первый стих первого псалма:
Блажен муж, который не ходит на совет нечестивых...
ученик вышел из храма. С тех пор его никто не видел почти 30 лет, а когда он вновь появился в храме, Антоний Великий спросил, почему он оставил их так надолго и куда исчез. Ученик ответил: «отче, я услышал слова псалма, и удалился в пустыню, чтобы постараться выполнить то, о чем говорится в этих словах, т.е. не ходить на совет нечестивых мыслей». Другими словами, он усвоил практический урок этих слов, и теперь пришел чтобы читать дальше. К сожалению, у нас нет такого резерва времени, да и цели наши не столь возвышенны. Но основной концепт можно перенять.
Мы рассмотрим две стандартные комбинаторные задачи:
  1. поиск всех возможных перестановок (permutations) из данного множества по N элементов
  2. поиск всех возможных сочетаний (combinations) из данного множества по N элементов

и разберем различные подходы и способы их решения средствами языка программирования Erlang, чтобы на конкретных примерах понять и освоить некоторые особенности программирования на этом языке.
Читать дальше →

Рендер Diablo3. Как это работает

Reading time7 min
Views117K
Как устроены графические движки популярных игр с мировым именем? Какие технологии применяют разработчики в самых крупных игровых компаниях? Действительно ли, чтобы сделать красивую игровую графику необходимо применять самые передовые технологии современной 3D графики? На эти вопросы мы попробуем ответить на примере рендер части игры Diablo3, от компании Blizzard Entertainment.
Читать дальше →

Пишем эмулятор Gameboy, часть 3

Reading time23 min
Views11K
Здравствуйте!

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

Пишем эмулятор Gameboy, часть 1
Пишем эмулятор Gameboy, часть 2
Пишем эмулятор Gameboy, часть 3
Читать дальше →

Алгоритмы и структуры данных — шпаргалка

Reading time1 min
Views200K
Пару недель назад, необходимо было освежить информацию в голове информацию по структурам данных и алгоритмам для собеседования. Первым делом полез на www.coursera.org, где хотел пробежаться по некоторым лекциям курса Алгоритмы, там же были две сводные таблички, которые в процессе изучения курса взял на заметку — отлично помогали запомнить сложность операций. Но, к моему удивлению, материалы пройденного курса стали недоступны. Быстрое гугление, в надежде, что кто-нибудь выложил лекции на торрентах, к сожалению, не дало результатов. В итоге, я нашел полную коллекцию слайдов по данному курсу. Спешу поделиться. Самое главное, что взял из этих слайдов, — это вышеупомянутые сводные таблички. Думаю многим пригодится.
Читать дальше →

Не зная брода, не лезь в воду. Часть третья

Reading time8 min
Views13K
Сдвиги
Продолжу рассказы о том, как программисты ходят по краю, даже не подозревая об этом. Поговорим об операциях сдвига <<, >>. Принципы работы операторов сдвига очевидны и многие программисты даже не знают, что их использование согласно стандарту Си/Си++ может приводить к неопределенному или к неуточненному поведению (undefined behaviour/unspecified behavior).
Читать дальше →

Не зная брода, не лезь в воду. Часть вторая

Reading time8 min
Views11K
Ужасный printf
В этот раз я хочу поговорить о функции printf. Все наслышаны об уязвимостях в программах, и что функции наподобие printf объявлены вне закона. Но одно дело знать, что лучше не использовать эти функции. А совсем другое — понять почему. В этой статье я опишу две классических уязвимости программ, связанных с printf. Хакером после этого вы не станете, но, возможно, по-новому взгляните на свой код. Вдруг, вы реализуете аналогичные уязвимые функции, даже не подозревая об этом.

СТОП. Подожди читатель, не проходи мимо. Я знаю, что ты увидел слово printf. И уверен, что автор статьи сейчас расскажет банальную историю о том, что функция не контролирует типы передаваемых аргументов. Нет! Статья будет не про это, а именно про уязвимости. Заходи почитать.
Читать дальше →

Не зная брода, не лезь в воду. Часть первая

Reading time3 min
Views4.1K
Не зная брода, не лезь в воду
Захотелось написать несколько небольших заметок о том, как программисты на Си/Си++ играют с огнем, не подозревая об этом. Первая заметка будет про попытки явно вызвать конструктор.
Читать дальше →

Подводные камни shell скриптинга

Reading time3 min
Views24K
Несмотря на повсеместное использование графики, shell не теряет своей актуальности и по сей день. А порой позволяет выполнять операции значительно быстрее и проще, нежели в графическом окружении. Однако есть множество вещей, о которых большинство даже не подозревает.
Я бы не хотел привязываться к какому-то определённому шеллу, тем не менее не каждая из рассмотренных ниже возможностей может быть POSIX совместима, однако гарантировано будет работать в ksh/bash/zsh.
Читать дальше →

Ещё раз об изучении языков (часть 2)

Reading time13 min
Views136K

Во второй части статьи (первая, в основном теоретическая часть, находится тут), посвященный моему личному опыту изучения иностранных языков и советам начинающим это не всегда простое дело, мы разберем первый этап освоения языка: он нулевого уровня до уровня продвинутого туриста, способного разговаривать на базовые темы и понимать тексты на данном языке при помощи томика словаря.
Я уверен, что многое из того, что я описываю, уже не раз писалось в том числе и на Хабре: в конце концов, я не изобрел ничего нового. Однако для полноты картины я стараюсь описывать все то, чем я сам пользуюсь при изучении языка в надежде, что подробное описание поможет заинтересованным читателям Хабрахабра более точно воспроизвести мой подход.
Читать дальше →

Находим код системного вызова mkdir

Reading time6 min
Views33K
Еще в первый год моего знакомства с Ubuntu, мне стало интересно, как же работает ядро этой ОС. Я решил со всей серъезностью во всем разобратся, скачал 80-мегабайтовый архив исходников, и… всё! Я не знал ни с чего начать, ни чем закончить. Открывал по очереди случайные файлы и тут же терялся. Думаю такое случалось с каждым бывалым линуксоидом. Сейчас же я набрался опыта и хотел бы им поделиться.

В этой статье я раскажу, как я искал код системного вызова mkdir.

Начнем с того, что функция mkdir определена в sys/stat.h. Прототип выглядит следующим образом:

/* Create a new directory named PATH, with permission bits MODE.  */
extern int mkdir (__const char *__path, __mode_t __mode)
     __THROW __nonnull ((1));


Этот заголовочный файл является частью стандарта POSIX. Linux является почти полностью POSIX-совместим, а значит должен реализовывать mkdir именно с такой сигнатурой.

Но даже зная сигнатуру, найти собственно код системного вызова вовсе не просто…
Читать дальше →

Information

Rating
Does not participate
Location
Россия
Registered
Activity