Pull to refresh
11
flashnik @flashnikread⁠-⁠only

Head of Data Science

Send message

Идеальная передача и универсальные ссылки в C++

Reading time9 min
Views158K
Недавно на isocpp.org была опубликована ссылка на статью Eli Bendersky «Perfect forwarding and universal references in C++». В этой небольшой статье есть простой ответ на простой вопрос — для решения каких задач и как нужно использовать rvalue-ссылки.
Узнать этот ответ
Total votes 56: ↑56 and ↓0+56
Comments28

Кэш в многопроцессорных системах. Когерентность кэша. Протокол MESI

Reading time3 min
Views18K
Привет, Хабр!

В свое время это тема показалась мне очень интересной, поэтому я решил поделиться своими скромными знаниями с вами. Данная статья не претендует на полное детальное описание, скорее это краткий обзор.

Введение


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

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

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

Было придумано множество протоколов когерентности, отличающиеся алгоритмами, количеством состояний и, как следствие скоростью работы и масштабируемостью. Большинство современных протоколов когерентности представляют вариации протокола MESI [1]. По этой причине мы его и рассмотрим.
Читать дальше →
Total votes 7: ↑7 and ↓0+7
Comments2

Автономное копирование данных в новый телефон на Android

Reading time2 min
Views113K
Сегодня я расскажу, как можно перенести данные из одного телефона на Android в другой без подключения к интернет.



С помощью этого метода удастся перенести:

• Контакты с фотографиями и привязкой к рингтонам
• Историю звонков
• СМС и ММС
• Все приложения
• Настройки рабочих столов (при условии, что вы пользуетесь GoLauncher EX)
• Пользовательские рингтоны
• Фотографии
• Музыку

Не удастся перенести:

• Настройки и данные большинства программ

Читать дальше →
Total votes 29: ↑11 and ↓18-7
Comments21

Граф интересов (Interest graph): новый принцип взаимодействия в сети

Reading time6 min
Views12K
Пару месяцев назад меня очень тронула публикация Идеальная социальная сеть. Автор этой публикации, arilou-campe, обозначил доминирующие принципы, по которым выстраивается большая часть социального взаимодействия в современной сети, а затем он попробовал предположить, на каких принципах будет выстраиваться это взаимодействие в ближайшем будущем.

Я хочу продолжить и уточнить его мысль, озвучить несколько важных и плодотворных, на мой взгляд, концептов («граф интересов» — один из них), вокруг которых сегодня ведётся дискуссия о будущем развитии сети, а также привести в качестве примера несколько проектов (над одним из которых я сам сейчас работаю), уже реализующих на практике новые принципы социального взаимодействия: те самые принципы, которые могут стать доминирующими в самом ближайшем будущем.
Читать дальше →
Total votes 56: ↑52 and ↓4+48
Comments67

Чему мы должны учить разработчиков нового программного обеспечения? Почему?

Reading time11 min
Views3.3K
Требуются существенные изменения в обучении компьютерной науке, для лучшего соответствия потребностям индустрии.

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

Проблема

Во многих местах существует разрыв между обучением компьютерной науке и потребностями индустрии. Взгляните на следующую ситуацию:
Знаменитый профессор компьютерной науки (с гордостью): «Мы не учим программированию; мы обучаем компьютерной науке.»
Производственный менеджер: «Они не способны программировать.»

Во многом они оба правы, и не только на поверхностном уровне. Задача научного сообщества состоит не в том, чтобы обучать посредственных программистов, а индустрия не требует только «всесторонне развитых, высокообразованных мыслителей» и «учёных».

Другой профессор компьютерной науки: «Я не написал ни одной строчки кода.»
Читать дальше →
Total votes 53: ↑40 and ↓13+27
Comments47

Альтернативные аллокаторы памяти

Reading time13 min
Views91K
Написал Стивен Тови в 2:29 утра по программированию (шутка юмора Google Translate)
Вступление от себя: эта заметка, прорекламированная Алёной C++, предназначена в основном разработчикам игр для консолей, но будет, наверное, полезна и всем, кому приходится сталкиваться с экстремальным аллоцированием динамической памяти. Возможно, любители посравнивать управление памятью в C++ и Java тоже найдут над чем задуматься.

Оригинал с небезынтересной дискуссией в комментариях: altdevblogaday.org/2011/02/12/alternatives-to-malloc-and-new


Обязательная вступительная басня

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

Сейчас объясню, почему...
Total votes 75: ↑72 and ↓3+69
Comments59

Экспериментальное определение характеристик кэш-памяти

Reading time6 min
Views5.1K
В ряде случаев (например, для тонкой оптимизации программы под конкретный компьютер) полезно знать характеристики кэш-подсистемы: количество уровней, время доступа к каждому уровню, их размер и ассоциативность, и т.п.
Для одноразовой оптимизации необходимые значения можно посмотреть в спецификации на компьютер, но когда требуется автоматическая оптимизация (например, во время сборки и установки программы), характеристики приходится определять косвенно, по результатам прогона специального набора тестов.
Удобная тестовая программа для Linux — lat_mem_rd из пакета тестов lmbench. Её работа заключается в том, что она выделяет в памяти массив и читает его элементы с заданным шагом, циклически проходя по массиву снова и снова. Затем выделяется массив большего размера, и т.д. Для каждого значения шага и размера массива подсчитывается среднее время доступа.
Пример графика, который был получен этой программой на реальной системе:

Как по полученным данным определить характеристики кэша?
Total votes 33: ↑33 and ↓0+33
Comments10

«Софт за пределами морали». Глава вторая «Типы скриптов»

Reading time4 min
Views1K
часть 1.1
часть 1.2

Я не буду писать здесь о вирусах и троянах, о связках сплойтов и сервисах продающих инсталлы.
Напишу лишь о том, с чем имел удовольствие познакомиться лично.
Я сознательно буду употреблять слово «скрипты», потому что в моей практике был только php5, да и отличий от системных приложений не так уж и много.

«Чекеры»
Назначение — проверка аккаунтов/имейлов/прокси на валидность.
Аккаунты также можно проверять на активированность по имейлу/наличие фото/баланса на счету и собирать прочую информацию.
Читать дальше →
Total votes 44: ↑33 and ↓11+22
Comments17

О смысле. Деревья синтаксического подчинения (деревья подчинения)

Reading time2 min
Views2.7K
В предыдущем посте я обмолвился о деревьях подчинения и использовал (возможно, зря) спорный пример с «туманностью».
Теперь просто необходимо объяснить, почему я интерпретировал данный текст таким образом. Хотя, как оказалось, по комментариям специалистов в творчестве Пушкина – неверно, но будем рассматривать данный пример не в аспекте исторической точности, а в аспекте способов интерпретации текста на естественном языке машиной.
Начнём с определения того, что же такое деревья синтаксического подчинения (в простонородье – деревья подчинения)? Это упорядоченный граф (т.е. дерево), где узлами являются слова предложения, а их иерархия и система подчинения определяет, какие слова являются главными в предложении и какие от каких зависят.
Для наглядности приведу пару снимков того, что я имею в виду:
Читать дальше →
Total votes 18: ↑15 and ↓3+12
Comments4

Использование скрытых Марковских моделей для снятия морфологической омонимии

Reading time3 min
Views2.2K
В предыдущем посте я писал о том, что такое морфологическая омонимия (пример со словом «стали») и упоминал о том, что для её разрешения используют скрытые Марковские модели (Hidden Markov Model, HMM).
Вначале немного о разметке теста (в английской литературе этот процесс называется «part-of-speech tagging» (POST)) – это ручной или автоматический процесс, в результате которого каждому слову текста приписывает атрибутивная информация (тэг), которая определяет какой частью речи является это слово: существительное, глагол, прилагательное, наречие, местоимение, частица, союз, междометие и т.д. Именно тут мы и наткнёмся на проблему «стали».
Читать дальше →
Total votes 13: ↑13 and ↓0+13
Comments4

Революционное богатство. Тоффлер

Reading time2 min
Views1.7K
Элвин Тоффлер — американский социолог и футуролог, один из авторов концепции «сверхиндустриальной цивилизации». В его основных работах проводится тезис о том, что человечество переходит к новой технологической революции, то есть на смену первой волне (аграрной цивилизации) и второй (индустриальной цивилизации) приходит новая, ведущая к созданию (сверхиндустриальной) информационной цивилизации.

Тоффлер предупреждает о новых сложностях, социальных конфликтах и глобальных проблемах, с которыми столкнётся человечество на стыке XX и XXI вв. Подробнее об авторе.

В книге «Революционное богатство» показан наш 21 век, в котором уже во всю идет переход в информационную эпоху. Рассматриваются США, Европа, Китай, Япония, Индия мельком Россия.

Революционное богатство. Тоффлер

В книге приводится аналогия трассы, по которой несутся автомобили: от машин под 100 миль в час до ползущих 10, 5 миль в час. Первые это современный бизнес и частные организации, последние — образование, государственные учреждения и политика. Все это на примере США.

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

Коренное изменение образования. Переход от школ, которые создавались для индустриальной волны, готовившие рабочих для фабрик, к индивидуальному образованию.
Читать дальше →
Total votes 62: ↑55 and ↓7+48
Comments31

Adobe Profiler Fail

Reading time3 min
Views19K
Доброго вечера всем хабравчанам. Я долго думал как назвать данный пост и решил назвать первым, что придет на ум. В принципе данное название почти полностью описывает то, о чем хочу рассказать. А расскажу я о том, как можно легко и просто вносить изменения в абсолютно любой просматриваемый вами swf файл без декомпиляции.


И так начнем. Нашим подопытным будет плеер YouTube.

Читать дальше →
Total votes 117: ↑106 and ↓11+95
Comments106

Заметки об NLP (часть 8)

Reading time5 min
Views3.4K
(Первые части: 1 2 3 4 5 6 7). В этой части я расскажу о синтактико-семантическом анализаторе — как я его вижу. Обратите, кстати, внимание на часть 7 — она до главной страницы не добралась, так что не уверен, что все интересующиеся её видели.
Читать дальше →
Total votes 54: ↑36 and ↓18+18
Comments45

Заметки об NLP (часть 4)

Reading time5 min
Views4.7K
(Начало: 1, 2, 3) На сей раз хочу немного отвлечься и порассуждать (а точнее, похоливарить) на тему статистических алгоритмов и вообще «обходных путей» компьютерной лингвистики.
В первых частях нашего разговора речь шла о «классическом пути» анализа текста — от слов к предложениям, от предложений к связному тексту. Но в наше безумное время появились и соблазны решить проблему «одним махом», найдя, если угодно, баг в системе или «царскую дорогу».
Читать дальше →
Total votes 47: ↑39 and ↓8+31
Comments52

Появилась возможность совместного использования сборок .Net 4 и Silverlight 4

Reading time2 min
Views789
imageimage

Сегодня многие разработчики пишут код, который должен выполняться как Silverlight так и .Net Runtime’мами. Хорошим примером является проверка данных, когда вы проверяете их сначала на стороне клиента используя Silverlight, а затем на стороне сервера используя .Net. До недавних пор нужно было компилировать один и тот же код в сборки для разных runtime’мов(Silverlight и .Net). Эта модель работоспособна, но не идеальна!
Читать дальше →
Total votes 45: ↑26 and ↓19+7
Comments5

Разделение Subversion репозитория на части

Reading time3 min
Views1.8K
Когда я узнал в первые про систему контроля версий, я решил, что обязательно надо попробовать этот инструмент для разработки. В то время я себе мало представлял что это такое. Поэтому просмотрев доступные предложения выбрал Subversion.
Почитав немного мануалы решил создать свой первый репозиторий. И вдруг я на минуту задумался, а как организовать структуру, если у меня будет несколько проектов… и для себя решил, что создам дерево, которое разделяется на проекты, а в каждом проекте будут всем до боли знакомые trunk, tags, branches. Шло время кол-во проектов увеличивалось (правда не особо много, но все же) и как-то грустно стало наблюдать сквозную нумерацию ревизий в проекте. Т.е. смотришь логи проекта, а там сначала 649 ревизия, а потом 700. Все таки программисты народ чистолюбивый, любит когда все разложено по полочкам, поэтому было решено разделить один большой репозиторий на несколько более мелких.
Читать дальше →
Total votes 12: ↑8 and ↓4+4
Comments5

50 цитат о программировании всех времён

Reading time6 min
Views161K
Перевёл после прочтения комментариев к статье «О ненависти к C++». В цитатах можно найти ответы на большинство возникших там вопросов.

50. Программирование сегодня — это гонка разработчиков программ, стремящихся писать программы больше и с лучшей идиотоустойчивостью, и вселенной, которая пытается создавать больших и лучших идиотов. Пока вселенная побеждает.
— Rick Cook

49. Lisp — это не язык, а строительный материал.
— Alan Kay

48. Ходить по воде и разрабатывать программы, следуя спецификации, очень просто… если они заморожены.
— Edward V Berard
Читать дальше →
Total votes 344: ↑336 and ↓8+328
Comments136

Continuous Delivery в Яндексе. Как разогнать свой цикл разработки, используя только Open Source решения

Reading time8 min
Views58K
Перед тестированием всегда стояли и стоят две задачи – помочь команде поддерживать высокий уровень качества разработки и делать это, не задерживая весь процесс. И это справедливо не только для наших проектов в Яндексе, где мы работаем над очень большим количеством сервисов. Часто основная задача и вовсе формулируется как увеличение скорости тестирования при сохранении должного уровня качества. Скорость процесса разработки, приверженность ценностям частых и быстрых релизов – это основополагающие факторы для успеха любого продукта. У команды больше возможностей маневра, команда быстрее находит и исправляет ошибки, быстрее получает фидбек. Как же ускоряться, не теряя качества, как достичь дзена непрерывной доставки изменений?



Сегодня мы покажем, что Continuous Delivery — это просто и весело! А пользу от него можно получить, встроив его даже частично. Мы в тестировании Яндекса уже несколько лет используем подобный подход для наших библиотек с открытым исходным кодом — Allure Framework или Yandex QATools. Процесс прост, значительно масштабируем и может применяться как для огромных команд из одного человека, так и для маленьких командочек из десятков человек. А самое главное — весь инструментарий доступен в Open Source!

Кстати, до 30 сентября можно подать заявку и поступить в нашу Школу автоматизации процессов разработки в Питере. Обучение в ней бесплатное и будет состоять не только из курса лекций — обязательным этапом станет командная работа над учебным проектом.

А теперь вернёмся к теме. Представьте картину: уютное рабочее место, вы пишете код, добавляете юнит-тесты и отправляете изменения в систему контроля версий, а через пару часов они «выезжают» на боевые сервера. И все при этом работает.
Читать дальше →
Total votes 85: ↑82 and ↓3+79
Comments25

Свободная литература или сказ про дружбу CoolReader c Tor

Reading time5 min
Views72K
Картинка для привлечения внимания

Живет у меня в доме соседка: очень хорошая женщина, пенсионерка, ветеран труда, бывший медицинский работник, отработавший всю жизнь медсестрой в больнице. В настоящее время на пенсии. Я ей помогаю, чем могу, но сказ не про соседку, а про то, что подарила ей дирекция больницы, где она раньше работала планшет. Все бы ничего в этом планшете (WIFI есть, 3G нету, диагональ экрана 7 дюймов, на алиэкспрессе такие по 45 долларов с доставкой), но вот что делать с этим планшетом, естественно, не объяснили. И пришлось мне отвечать на вопрос, что делаю со своим планшетом я, а я на планшете книжки читаю, в основном Ясинского и Эльтерруса.

Естественно я подключил планшет к своему ноутбуку и перекинул апкашку CoolReader, а также свою библиотеку. К сожалению, через два дня выяснилось, что литературные пристрастия у нас разные и мои книжки соседке неинтересны. Пришлось поделиться паролем от своего вайфая и настроить opds «Флибусты», так как что такое Интернет соседка знала весьма приблизительно и ни компьютера, ни интернет-соединения у нее нет и никогда не было.

После выходных меня огорошили тем фактом, что нужные книжки с Флибусты не скачиваются. Сказать, что я был в недоумении — ничего не сказать — вся интересующая меня литература всегда была в свободном доступе, но соседка хотела Дарью Донцову и «50 оттенков серого» и, к моему удивлению, они действительно не скачивались.
Это была присказка - сказка будет впереди.
Total votes 65: ↑64 and ↓1+63
Comments91

Автоматическое определение рубрики текста

Reading time5 min
Views24K

Введение


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

Подготовка данных рубрикатора


Для начала определимся с тем, в каком виде мы будем готовить данные для рубрикатора.
  • 1. Рубрикатор – это граф, а не дерево
  • 2. Текст, тематика которого определяется, может быть отнесен к нескольким рубрикам одновременно
  • 3. Для каждого соотнесения с рубрикой указывается коэффициент точности определения рубрики
  • 4. Тематика текста определяется для каждого текста отдельно, и не зависит от того как были определены рубрики других текстов ранее

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

Алгоритм определения тематики текста, кратко


Описываем рубрикатор. Извлекаем из исследуемого текста ключевые слова, описанные в рубрикаторе. В результате извлечения получаем кусочки разорванного и чаще всего несвязного графа. Используем волновой (или любой другой, по желанию) алгоритм для «дотягивания» извлеченных кусочков графа до вершины «всё». Анализируем и выводим результаты.
Читать дальше →
Total votes 35: ↑32 and ↓3+29
Comments4

Information

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

Specialization

Data Scientist, Head of Data Science