Архив за 14 марта 2013 - 3

Весёлые (сосисочные) рефакторинги

Привет, %habrausername%. Я хочу сыграть с тобой в игру.

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

От предыдущего разработчика осталась кучка кода и домашние тапочки. Ты осторожно кладёшь тапочки в мусорную корзину и начинаешь рефакторинг.

Этот код ужасен. Во-первых, нет никого, кто мог бы сказать, зачем этот код писался. Во-вторых, нет никакой документации. Нет даже комментариев, не говоря уже о юнит-тестах. В-третьих, код не структурирован, а имена классов и методов ни о чём не говорят. И, наконец, работать это должно начать не сегодня, и даже не вчера, а внезапно.
Ну как, %habrausername%, пробежал холодок по спине?Читать полностью »

Интернет для современного человека стал неотъемлемой частью повседневной жизни. Общение, развлечения, отдых, работа, хобби – всё это частично перенеслось на страницы всемирной паутины. Как эффективно организовать работу в сети, чтобы иметь постоянный доступ к важной информации, получать самую актуальную информацию. Использование разных онлайн инструментов и сервисов позволяет экономить самое ценное для современного человека – время.

image

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

Всем привет. Хочу поделиться своим опытом по настройке ограничений скорости на маршрутизаторах Cisco.
Итак, для начала немного расскажу о том, зачем это понадобилось. Скажем, построили мы небольшую Hub-and-Spoke сеть. Каналы связи у нас небольшие, например, 2 Мбит/c каждый. Сеть небольшого предприятия, которое со временем начинает разрастаться и трафик в этих каналах тоже увеличивается.
Пример из жизни. Есть центральный офис и несколько филиалов. Основной трафик — это ERP-системы и обновления софта. Каналы 2 Мбит/c не нагружены, все работает, всех устраивает. Тут в филиале появляется сервер видеонаблюдения, с которого идут видеопотоки на центральный офис, когда там служба безопасности просматривает камеры. При этом канал загружается под 100% и начинаются проблемы. То есть, необходимо весь трафик, идущий к видео серверу урезать.
Как это сделать. Сразу же приходят на ум два варианта:

  • rate-limit
  • traffic-shape

Чем эти два способа отличаются? Читать полностью »

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

Постановка задачи

В этой статье я опишу механизм создания DTO, реализованный в одном из проектов нашей компании. Проект состоит из серверной части и нескольких клиентов (Silverlight, Outlook, iPad). Сервер представляет собой ряд сервисов, реализованных на WCF. Раз есть сервисы, то надо обмениваться с ними какими-то данными. Вариант, когда клиенты знают о сущностях доменной области и получают их с сервера, отпал сразу по ряду причин:

  1. Не все клиенты реализованы на .NET
  2. Возможные проблемы сериализации сложных графов объектов
  3. Избыточность передаваемых данных

В принципе, все эти недостатки давно известны и для их устранения умные люди придумали паттерн Data Transfer Object (DTO). То есть, классы сущностей доменной области известны только серверу, клиенты же оперируют классами DTO и экземплярами этих же классов обмениваются с сервисами. В теории все прекрасно, на практике же среди прочих возникают вопросы создания DTO и записи в них данных из сущностей. В небольших проектах с этой работой отлично справится оператор "=". Но, когда размер проекта начинает расти и повышаются требования к производительности и сопровождаемости кода, возникает необходимость в более гибком решении. Ниже я опишу эволюцию механизма, который мы используем для создания и заполнения DTO.
Читать полностью »

Делаем гадости: незакрываемая вкладка в IE, Chrome и FirefoxПрограммист и хакер Егор Хомяков (блог, хабрreadonly), прославившийся год назад массовой публикацией CSRF, а также взломом сети GitHub, пару дней назад опубликовал в твиттере крайне интересный скрипт длиной всего в 92 символа. Ссылка на твит в конце статьи.

Этот самый скрипт позволяет «завесить» окно браузера в IE, в Google Chrome и частично в Firefox. Эффект от запуска виден справа – от этих диалоговых окон невозможно избавиться, они появляются снова и снова, блокируя доступ к главному окну браузера.
Читать полностью »

Давно и с недоверием присматриваюсь к некоторым функциям WinAPI ориентированным на повышение производительности приложения. Открыв MSDN, нашел описание интересующих меня функций:

BOOL WINAPI SetPriorityClass(
  _In_  HANDLE hProcess,
  _In_  DWORD dwPriorityClass
);

Sets the priority class for the specified process. This value together with the priority value of each thread of the process determines each thread's base priority level.

BOOL WINAPI SetProcessWorkingSetSize(
  _In_  HANDLE hProcess,
  _In_  SIZE_T dwMinimumWorkingSetSize,
  _In_  SIZE_T dwMaximumWorkingSetSize
);

Sets the minimum and maximum working set sizes for the specified process.

BOOL WINAPI SetProcessPriorityBoost(
  _In_  HANDLE hProcess,
  _In_  BOOL DisablePriorityBoost
);

Disables or enables the ability of the system to temporarily boost the priority of the threads of the specified process.
Читать полностью »

После успешно пройденного этапа «Hello World» под Android, решил написать для интереса простенькое приложение под Android, основной функционал которого сводился к хранению некоторого набора данных на устройстве. И очень мне не хотелось работать c SQL. Привык как-то уже работать с объектами. По-этому порыскав по интернету в поисках совместимых с Android решений нашёл только одно — Berkeley DB, встраиваемая БД.
Причём документация от Oracle показывала значительно лучшие показатели по производительности по сравнению с SQlite.По этому для своего приложения (дальше моего телефона оно так и не ушло) я выбрал этот формат хранения данных.
Класс являющийся ядром работы с БД сделан по шаблону Singleton, и получился следующим:
Читать полностью »

Позиции компании Nokia на американском рынке, который является одним из самых важных для любого производителя смартфонов (и не только), никогда не были сильны. С переходом финской компании на использование ОС Windows Phone, этот вопрос стал ещё острее. Операторскую версию нынешнего флагмана Nokia Lumia 920Читать полностью »

Оператор МТС в новости с оптимистичным заголовком «Мобильный Интернет от МТС на все случаи жизни!» предупредил своих абонентов о том, что с 18-го марта стоимость GPRS-трафика составит около 10 рублей за мегабайт. 9 рублей 90 копеек, если быть точным.

Сам способ представления информации об изменении тарификации достоин отдельного приза за «качество» корпоративной коммуникации:

Конец GPRS «по трафику»: МТС и Билайн подняли цену мегабайта до 10 рублей
(самое полезное спрятано в шестом абзаце)

Билайн похожие тарифы ввёл ещё раньше, но основной вопрос в другом:Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js