Pull to refresh
64
0
Павел Т @kefirr

Ignite.NET maintainer

Send message

Теория шести рукопожатий: еще одно подтверждение

Reading time4 min
Views78K
Однажды в студеную зимнюю пору я столкнулся с упоминанием того, что кто-то в Facebook пытается подтвердить теорию шести рукопожатий. Для тех кто не в курсе, эта теория заключается в том, что все жители земли в среднем знакомы друг с другом через цепочку из пяти друзей (т.е. шести рукопожатий). Подробнее об истории этой теории можно прочитать в википедии, там же можно узнать о том, что Майкрософт несколько лет назад пыталась подтвердить эту теорию на основе данных о контакт-листах мессенджера MSN — в результате у них получилось 6,6 рукопожатий, что вполне вписывается в теорию.

Очень мне захотелось эту теорию подтвердить самому, используя данные, которые есть под рукой — ВКонтакте. Для претворения моей странной идеи в жизнь надо было решить целый комплекс проблем:
  1. На каких данных это все расчитывать.
  2. Где эти данные взять.
  3. Как эти данные сохранять.
  4. Каким алгоритмом воспользоваться для расчетов.
подробнее о том, что получилось

Взаимодействие managed и unmanaged кода

Reading time4 min
Views7K
В данной статье рассматривается вызов управляемого кода (managed) из неуправлявляемого (unmanaged) и их взаимодействие (без использования COM и PInvoke).
Приведенный ниже способ можно рассматривать как альтернативу методу, описанному пользователем klsaymon.

Ситуация взята из личного опыта. Существует некое приложение (ArchiCAD), взаимодействие с которым осуществляется благодаря библиотекам (plugin'ам). Библиотеку (plugin) можно реализовать только на C\C++. Есть собственное приложение (WindowForms) с бизнес логикой и UI, написанное на C# (managed). Необходимо реализовать возможность запуска приложения (WindowsForms) из библиотеки (plugin'а) и их взаимодейсвия. В данном случае, библиотека на C\C++ (plugin) выступает в роли моста между сторонним приложением (ArchiCAD) и нашим (WindowsForms).
Читать дальше →

Барьеры памяти и неблокирующая синхронизация в .NET

Reading time7 min
Views62K

Введение


В этой статье я хочу рассказать об использовании некоторых конструкций, применяющихся для осуществления неблокирующей синхронизации. Речь пойдёт о ключевом слове volatile, функциях VolatileRead, VolatileWrite и MemoryBarrier. Мы рассмотрим, какие проблемы вынуждают нас воспользоваться этими языковыми конструкциями и варианты их решения. При обсуждении барьеров памяти вкратце рассмотрим модель памяти .NET.
Читать дальше →

Еще раз про IP-адреса, маски подсетей и вообще

Reading time7 min
Views1.5M
Чуточку ликбеза. Навеяно предшествующими копипастами разной чепухи на данную тему. Уж простите, носинг персонал.

IP-адрес (v4) состоит из 32-бит. Любой уважающий себя админ, да и вообще айтишник (про сетевых инженеров молчу) должен уметь, будучи разбуженным среди ночи или находясь в состоянии сильного алкогольного опьянения, правильно отвечать на вопрос «из скольки бит состоит IP-адрес». Желательно вообще-то и про IPv6 тоже: 128 бит.

Обстоятельство первое. Всего теоретически IPv4-адресов может быть:
232 = 210*210*210*22 = 1024*1024*1024*4 ≈ 1000*1000*1000*4 = 4 млрд.
Ниже мы увидим, что довольно много из них «съедается» под всякую фигню.


Записывают IPv4-адрес, думаю, все знают, как. Четыре октета (то же, что байта, но если вы хотите блеснуть, то говорите «октет» — сразу сойдете за своего) в десятичном представлении без начальных нулей, разделенные точками: «192.168.11.10».

В заголовке IP-пакета есть поля source IP и destination IP: адреса источника (кто посылает) и назначения (кому). Как на почтовом конверте. Внутри пакетов у IP-адресов нет никаких масок. Разделителей между октетами тоже нет. Просто 32-бита на адрес назначения и еще 32 на адрес источника.
Читать дальше →

Node.js — раковая опухоль

Reading time5 min
Views136K
Если и есть что-то, что веб-разработчики любят, так это знать что-то, что лучше традиционного. Но традиционное является таковым по одной причине: это дерьмо работает. Что-то давно беспокоило меня во всей этой шумихе вокруг Node.js, но у меня не было времени разобраться, что именно, пока я не прочитал полный боли в жопе пост от Райана Дала, создателя Node.js. Я бы забыл его, как любое очередное нытьё какого-то осла о том, что Unix слишком сложен. Но, как полицейскому, который, жопой чуя, что что-то не так с этой семьёй в микроавтобусе, останавливает его и находит пятьдесят килограммов героина, мне показалось, что что-то не так с этой слезливой историей, и возможно, просто возможно, он понятия не имеет, что делает, и много лет программирует, никем не контролируемый.

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

Быстрые знакомства в интернете

Reading time3 min
Views11K

Что такое экспресс-дэйтинг


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

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



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

Интеграция Last.fm с аудиопоиском Vkontakte и многое другое

Reading time1 min
Views1.4K
Представляю вашему вниманию плагин для Google Chrome облегчающий навигацию по любимому www.last.fm
Страница плагина

Главной функцией является интеграция с аудио базой www.vkontakte.ru, позволяющая бесплатно полноценно проигрывать большую часть музыки Last.fm.
image

Авторизация на Vkontakte и Last.fm для работы плагина НЕ требуется.

Внимание!
Всем спасибо, поравлено много багов, срочно обновляемся )
Читать дальше →

Работа с last.fm API на JavaScript

Reading time5 min
Views8.5K

С ходом времени автор понял, что ниженаписанное — полная глупость


Для тех, кому не хочется читать


Страничка, на которой всё нижепроделанное в примере (включайте alert).
Онлайн плеер, который и заставил меня дойти до этого топика.

Введение


Доброго времени суток! Не так давно затронул тему «Онлайн-плееров» и им подобных. Их много, очень я бы сказал. Я захотел сделать аналог, в первую очередь для себя. Захотел по стандарту — база vk.com, скробблинг last.fm (позже ласт), альбомы с него же, плейлисты, сердечки и так далее. Сразу вытекла проблема — мой хостинг очень плох для постоянных запросов на него. Ничего не оставалось, как перейти почти полностью на javascript (позже js). Итак, коль русского описания «Как работать с last.fm api javascript» я так и не нашёл, а потратил много нервов и времени на решение этой проблемы, то начнём, пожалуй.
Читать дальше →

Скромное руководство по прохождению интервью: часть 1

Reading time5 min
Views30K
Пост подготовлен с целью помочь программистам при подготовке к собеседованиям по программированию. Здесь рассматриваются все основные темы, которые, как минимум, желательно знать перед собеседованием. Использован собственный опыт, опыт и рассказы коллег, специализированная литература.
Некоторые рассмотренные здесь темы могут вообще не пригодиться некоторым программистам, а могут и быть обязательными, решать вам. Мой совет – старайтесь как можно больше изучать темы/разделы/аспекты указанные здесь.
И так, в качестве обязательных знаний:
  • Структуры данных
  • Алгоритмы и «концепции»
  • Язык программирования

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

App.Config и Custom Configuration Sections

Reading time5 min
Views127K
Данная статья может показаться банальной, но иногда что-то полезное забывается, а читать на импортном языке лень и книжки под рукой нет. Поэтому я, обратившись к гуглу, нашел хорошее описание процесса создания обработчика конфигурационной секции файла app.config в .net приложениях, перевел его, дополнил замечаниями (курсив) и комментариями и решил опубликовать.

Я уверен, что многим из вас приходилось использовать файл конфигурации App.Config для хранения инициализирующих или конфигурационных данных приложения. И я так же уверен в том, что многим из вас хотелось создать в данном файле свои собственные структуры для хранения настроек. Но в итоге приходилось использовать встроенные возможности секции <appSettings> и получать значения, используя конструкцию вида:


ConfigurationManager.AppSettings["MyKey"]


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

Итак, для того что бы загрузить свою структуру данных из файла App.Config нам потребуются следующие классы:
  1. ConfigurationSection — Этот объект вернет нам пользовательскую секцию.
  2. ConfigurationElementCollection — Это собственно коллекция элементов, которые мы определим в пользовательской секции.
  3. ConfigurationElement — Это сам элемент, описывающий какую-от определенную вами сущность.


Приступим к реализации.

Пара историй про отличия Release от Debug

Reading time5 min
Views27K
Все разработчики знают, что исполнение релизной версии может отличаться от отладочной. В этой статье я расскажу пару случаев из жизни, когда такие отличия приводили к ошибочному исполнению программы. Примеры не отличаются большой сложностью, но вполне могут уберечь от наступления на грабли.

История 1



Собственно, началось все с того, что пришел баг о том что при некоторых операциях приложение вылетает. Это бывает часто. Баг не захотел воспроизводиться в Debug-версии. Это порой бывает. Поскольку в приложении часть библиотек была написано на C++, то первой мыслью было что-то вроде «где-то забыли переменную проинициализировать или что-то в этом духе». Но на деле суть бага крылась в управляемом коде, хотя без неуправляемого тоже не обошлось.
Читать дальше →

Молодым программистам на заметку: Как правильно писать «Помоги»

Reading time3 min
Views9.2K
За те 9 лет, что я занимаюсь программированием, в мою асю пришло несколько сотен просьб о помощи, от менее опытных, начинающих программистов. И вот, когда сегодня, в очередной раз, незнакомый человек попросил помочь ему написать плагин для вордпресс (код которого, честно говоря, я в глаза ни разу не видел), я решил написать небольшой гайд, который бы помог начинающим программистам правильно обращаться за советом к более опытным.
Читать дальше →

Мигель де Икаса даёт советы по Unix

Reading time2 min
Views6.4K
Один из самых известных Unix-программистов Мигель де Икаса (основатель проектов GNOME и Mono) в своём блоге дал парочку советов, как повысить продуктивность работы в шелле Unix. Он говорит, что иногда встречает молодых хакеров и бывает поражён, насколько мало трюков они знают.

Мигель де Икаса рекомендует ликбез по-быстрому:

1. Прочитать «Unix. Программное окружение» Кернигана и Пайка [русское издание], займёт несколько дней, от силы неделю. Книжка очень старая (1984), но лучше всех разъясняет автоматизацию различных действий в консоли. Вторая книжка — UNIX for the Impatient, чтобы прокачать навыки.
Читать дальше →

Удобная отладка Windows служб

Reading time2 min
Views16K
Отладка Windows Service приложений не такая тривиальная задача как кажется. Проблема в том, что при отладке этого типа приложений нельзя воспользоваться стандартными средствами Visual Studio такими как точки останова (breakpoints) и прочими полезными инструментами. Всё из-за того, что Windows Service приложение не может быть зыпущено по F5 прямо из Visual Studio. Всё же, MSDN предлагает нам несколько способов для их отладки. Скорее всего многие разработчики даже и не сталкивались с ними до тех пор, пока не стали создавать свою первую службу. Это использование записей в журнал событий и подключение к процессу. Оба этих метода хорошо описаны в MSDN, но они позволяют произовдить отладку только уже запущенной службы. Из-за этого код, который производит сам запуск службы, в методе OnStart(), нельзя протестировать.

Ниже я хочу рассказать о способе которым можно обойти это ограничение, и тестировать свой сервис как обычное консольное приложение. И, следовательно, воспользоваться всем тем, что предлагает нам для этого Visual Studio.
Читать дальше →

Поисковик горящих туров FAN TRIP

Reading time5 min
Views15K
Путешествовать — это не всегда дорого, и многие знают это на личном опыте. Способы сэкономить существуют разные, но один из самых популярных сейчас — если вы не готовы жертвовать сервисом, путешествуя «дикарём» или скоростью, отправляясь в путь на машине, — является так называемый «чип трип» (от cheap trip – «недорогое путешествие»). Даже самые лучшие курорты редко бывают заполнены круглый год: серьезный поток посетителей приходится на праздники и сезон отпусков, в остальное же время в отелях остается много незанятых мест. В этот период номера сдаются со значительными скидками, и турагентства не упускают возможности предоставить своим клиентам «горячие» путевки по сильно сниженным ценам. Разумеется, это никак не сказывается на качестве предлагаемого сервиса. Отдых по таким путевкам и называется чип трипом. Спецификой таких туров являются ограниченные сроки, но, чем ближе дата отправления, тем дешевле обойдется путевка, поэтому клиент всегда остается в выигрыше.

Клуб путешественников


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


Отдых — он на самом деле рядом, только руку протяни

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

Что дает обычному человеку Федеральный Закон №152 О персональных данных?

Reading time5 min
Views123K
Об операторах персональных данных написано довольно много статей.
Операторы очень расстроены, что им приходится тратить средства на защиту персональной информации, что им всем тяжело живется и вообще все очень плохо.
С другой стороны есть сами владельцы персональных данных, и я предлагаю рассмотреть тему именно с этой стороны. Что же дает владельцу персональных данных ФЗ № 152 и каким способом он может защитить свои законные интересы?
В данном случае разговор пойдет о коммерческих организациях, вопрос относительно государственных органов – тема отдельной статьи.

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

Монтаж четвертушками

Reading time2 min
Views4K
Я прилично времени провожу в поездках. Ноутбук всегда с собой, но творчески работать удается не всегда. А вот заниматься монтажом оказывается самое то. В монтаже больше всего времени отнимает просмотр материала и проработка стыков сцен. Особенно это касается «сырого», «стихийного» материала. Когда много дублей, в дублях много брака и приходиться сшивать ролик буквально единственно возможным образом.

Вот незадача: мой ноутбук ASUS UL30A, не тащит хайресное видео в любимом Sony Vegas'e, при работе от батарей. Я молчу о FullHD.

Небольшой, но полезный трюк под катом.
Читать дальше →

О синглтонах и статических конструкторах

Reading time8 min
Views29K
Изначально автор хотел назвать эту статью следующим образом: «О синглтонах, статических конструкторах и инициализаторах статических полей, о флаге beforeFieldInit и о его влиянии на deadlock-и статических конструкторов при старте сервисов релизных билдов в .Net Framework 3.5», однако в связи с тем, что многострочные названия по неведомой автору причине так и не прижились в современном компьютерном сообществе, он (автор) решил сократить это название, чудовищным образом исказив его исходный смысл.

-------------------------

Любая реализация паттерна Синглтон в общем случае преследует две цели: во-первых, реализация должна быть потокобезопасной, чтобы предотвратить создание более одного экземпляра в многопоточном мире .Net; а во-вторых, эта реализация должна быть «отложенной» (lazy), чтобы не создавать экземпляр (потенциально) дорого объекта раньше времени или в тех случаях, когда он вообще может не понадобиться. Но поскольку основное внимание при прочтении любой статьи про реализацию Синглтона отводится многопоточности, то на «ленивость» зачастую не хватает ни времени не желания.

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

Версионная миграция структуры базы данных: основные подходы

Reading time15 min
Views139K
Проблемы контроля версий баз данных и миграций между версиями уже не раз поднимались как на Хабре (1, 2, 3 и др.), так и в Интернете (преимущественно, англоязычном).

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

Information

Rating
Does not participate
Registered
Activity