Pull to refresh
0
0
Юрий @YuZZ

User

Send message

Менеджмент памяти в .Net Framework от Redgate

Reading time1 min
Views6K

Недавно с рассылкой от компании Redgate (это та компания, которая выпустила всем известные тулы .Net Reflector, SmartAssembly и прочие) получил бесплатную книгу «Under the Hood of .NET Memory Management». Пока что доступна только первая ее часть, но она довольно объемная и раскрывает многие аспекты менеджмента памяти. Самое вкусное обещают во второй части. Приятного скачивания (краткое содержание под катом):



Бонусом по первой ссылке, в том же архиве, идет книга по ANTS Memory Profiler

Читать дальше →
Total votes 27: ↑26 and ↓1+25
Comments10

Автоматизация сборки на .Net с использованием NuGet

Reading time4 min
Views7.7K

Что имелось вначале


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

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

Поэтому было принято волевое решение создать инфраструктуру и настроить сценарии для автоматизации сборки проекта под разные плагины.

При решении задачи использовались следующие инструменты: NuGet, TeamCity, NAnt, Visual Studio 2010, SlowCheetah.
Читать дальше →
Total votes 24: ↑23 and ↓1+22
Comments11

Версионность и история данных

Reading time5 min
Views120K
При разработке баз данных зачастую требуется обеспечить поддержку версионности и хранения истории объектов. Например, у работника может изменяться должность, у должности в свою очередь может меняться оклад — в многомерном моделировании это называется Slowly changing dimensions(далее SCD) — редко изменяющиеся измерения, то есть измерения, не ключевые атрибуты которых имеют тенденцию со временем изменяться. Всего существует 6 основных типов(методов) SCD, которые определяют как история изменений может быть отражена в модели.

Подробнее...
Total votes 64: ↑62 and ↓2+60
Comments50

Как стреляет шутер

Reading time10 min
Views21K
image

[Статья Armin Ronacher о принципах вычисления коллизий в сетевых шутерах. Носит скорее обзорный и исследовательский, нежели технический характер. Здесь и далее в квадратных скобках примечание переводчика]

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

И еще – несмотря на все мои изыскания, я не выяснил достаточно для того, чтобы ясно представлять себе механику очень динамичных игр, вроде баттлфилда, так что я не выражаю претензий на бытие истиной в последней инстанции. И еще, очень многое из этого было действительно трудно раскопать.
Читать дальше →
Total votes 124: ↑115 and ↓9+106
Comments47

Снова о раскрытии IP-адреса собеседника в Skype

Reading time2 min
Views62K
Подготовил видео демонстрацию возможности раскрытия IP-адреса собеседника через Skype.


UPD: много вопросов на тему чем отличается данная статья от этой или вот этой.

Отвечаю:
1. Там речь шла только о звонке. Я показал, что в определённой ситуации можно раскрыть и без звонка, через чат.
2. Там была только теория. А здесь видео демонстрация.

Предыстория



А началось всё с прочтения вот этой статьи.

Цитата из статьи:

«Skype, оказывается, в большинстве случаев напрямую соединяется с собеседником.»

Но никаких доказательств этого приведено не было. Меня это сильно заинтересовало. И я провёл первые предварительные тестирования.

После чего обнаружилось, что многие люди не владеют достаточными знаниями относительно этой ситуации, но вовсю готовы хвастать своими сомнительными знаниями. Дальнейшие комментарии на эту тему тому подтверждение. Кто-то считал, что нужно смотреть UDP сокеты (хотя в статье автор использовал программу cports для просмотра TCP соединений). Ещё мнения были, что выяснить IP-адрес собеседника можно только в случае, если у него выделенный IP, а в случае использования NAT это невозможно. Третьи говорили, что можно только адрес супернода выявить, поэтому автор статьи злоумышленника не вычислил и т.д.

Поэтому я решил внести ясность в ситуацию.

Читать дальше →
Total votes 119: ↑86 and ↓33+53
Comments76

Делаем приватный монитор из старого LCD монитора

Reading time2 min
Views971K


Вы наконец-то можете сделать кое-что со своим старым LCD монитором, который завалялся у Вас в гараже. Превратите его в шпионский монитор! Для всех вокруг он будет выглядеть просто белым экраном, но не для Вас, потому что у Вас будут специальные «волшебные» очки.

Всё что Вам нужно – это пара старых очков, нож для бумаги и растворитель для краски.

Читать дальше →
Total votes 1486: ↑1468 and ↓18+1450
Comments327

Повышение качества javascript кода. JSLint

Reading time6 min
Views31K

Случилось так, что в последнее время мне пришлось читать и рефакторить очень много ужасного javascript-кода. Работа с таким кодом стоит очень многих нервов при сопровождении, да и писать/отлаживать такой код не приятно. Мысли о том, что заставляет людей писать плохой код и как с этим можно бороться заставили меня писать эту статью. Не претендую на сколь-нибудь полное раскрытие темы борьбы за качество кода, хочу рассмотреть лишь некоторые аспекты, доставляющие наибольшее количество проблем. В качестве основного инструмента оптимизации качества кода предлагаю использовать JSLint, который несмотря на все плюсы, не является панацеей и может служить лишь отправной точкой для дальнейшего улучшения кода.

Всех у кого хоть раз болела голова при написании/чтении javascript кода прошу под кат.
Читать дальше →
Total votes 94: ↑90 and ↓4+86
Comments107

Линейная алгебра для разработчиков игр

Reading time19 min
Views765K
Эта статья является переводом цикла из четырёх статей «Linear algebra for game developers», написанных David Rosen и посвящённых линейной алгебре и её применению в разработке игр. С оригинальными статьями можно ознакомиться тут: часть 1, часть 2, часть 3 и часть 4. Я не стал публиковать переводы отдельными топиками, а объединил все статьи в одну. Думаю, что так будет удобнее воспринимать материал и работать с ним. Итак приступим.
Читать дальше →
Total votes 314: ↑296 and ↓18+278
Comments61

Метод html-верстки кнопок с применением псевдоэлементов

Reading time7 min
Views8.9K
Появлению этой методики способствовала воистину монстрообразная вёрстка элементов страницы на нашем проекте. Подумать только, для отображения одной кнопки требовалось до семи тегов на один элемент.

Выглядело это примерно так:



html
<div class="large_button"><br>  <span class="buttons submit_v2-button clickable"><br>    <i class="left left2"></i><br>    <i class="body"><br>      <b>В архив</b><br>      <i class="end"><br>        <i></i><br>      </i><br>    </i><br>  </span><br></div>

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

Поэтому моей негласной задачей стало максимальное упрощение кода.
Читать дальше →
Total votes 74: ↑50 and ↓24+26
Comments93

Плагин для «живых» форм

Reading time4 min
Views15K
Статья посвящена плагину, который упрощающает жизнь client-side программиста.

При заполнении формы случается так, что учитывая введенные данные, форму нужно менять (прятать и показывать поля). Простейший пример: при заказе доставки товара пользователь выбрал «самовывоз», значит поля про адрес доставки можно спрятать, зато было бы здорово показать карту проезда для самовывоза.

И что дальше

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

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

Второй подход это писать «портянки» javascript'а который всю эту логику реализует на стороне клиента. Особенно грустно писать «каскадную» логику типа «если ввели a в поле A, показать B, если ввели c в поле B, то показать D. Если в A ввели что-то другое, спрятать B, а потом D».

Оба варианта нельзя назвать удобными. Прежде всего потому что логика реализуется императивным стилем вместо уместного для таких случаев декларативного. Но выход есть!
Читать дальше →
Total votes 114: ↑112 and ↓2+110
Comments67

10 способов улучшить свои навыки программирования

Reading time4 min
Views87K

1. Выучить новый язык программирования


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

Среди языков программирования отличный познавательный эффект и наверстывание опыта дают: Lisp (или Scheme), Форт, PostScript или Factor (стековые языки программирования), Haskell (строго типизированный, чистый функциональный язык) либо OCaml (объектно-ориентированный язык функционального программирования), Пролог (логическое программирование), Erlang (отличные паралельные вычисления).

Читать дальше →
Total votes 239: ↑227 and ↓12+215
Comments96

jQuery.waterfall. Небольшая полезняшка

Reading time2 min
Views7.2K
В текущем проекте возникла необходимость выполнить последовательную серию ajax запросов и, по завершении — что-то сделать со всеми их результатами.
Довольно типовая задача, паттерн ее решения обычно называют waterfall (водопад). Реализации этого паттерна есть для node.js, хотя некоторые работают и в браузере — async.
Но включать целый модуль ради одного метода не хотелось. Copy/paste тоже не стал делать, но по соображениям скорее эстетическим. В async в метод передается функция обратного вызова, у нас же везде используется jQuery.Deferred. Разницы, конечно, никакой, но «ломать» стиль проекта мое «чувство прекрасного» мне не позволило :)
В результате написал небольшую утилитку по аналогии с jQuery.when

и хочу поделиться ей с сообществом
Total votes 55: ↑54 and ↓1+53
Comments41

Какие единицы измерения выбирать при верстке

Reading time3 min
Views25K
В прошлой моей статье я затронул единицы измерения и тут же в комментариях начались на эту тему споры и обсуждения, поэтому я решил вынести этот вопрос в отдельный пост. Вот теперь и обсудим :)
Читать дальше →
Total votes 105: ↑94 and ↓11+83
Comments71

Дорога к свету

Reading time10 min
Views22K

Простейший робот из подручных средств



image
Наш простой робот

Многие, кто из нас сталкивался с вычислительной техникой, мечтали собрать своего робота. Чтобы это устройство выполняло какие-то обязанности по дому, к примеру, приносило пиво. Все сразу берутся за создание наисложнейшего робота, однако зачастую быстро обламываются в результатах. Своего первого робота, который должен был делать умищу фишек, мы так и не довёли до ума. По этому нужно начинать с простого, постепенно усложняя своего зверя. Сейчас мы поведаем тебе как из подручных средств, которые есть у каждого дома, можно создать простейшего робота, который будет самостоятельно передвигаться по твоей квартире.
Читать дальше →
Total votes 172: ↑165 and ↓7+158
Comments92

Учим bash-скрипты, пишем Sokoban

Reading time4 min
Views138K
Мне кажется, что на свете еще есть люди, которые хорошо знают несколько языков программирования, но при этом не пишут скриптов для bash, потому что скриптовый язык bash выглядит для них слишком странным. Чтобы доказать, что bash — это несложно, я написала игру Сокобан (или Грузчик, кому как нравится), и хочу рассказать, как она работает.
Краткая справка по bash, скриншот игры, исходный код и ссылка на файл - под катом
Total votes 170: ↑164 and ↓6+158
Comments67

Многопоточный сервер на C# за 15 минут

Reading time11 min
Views332K
C# довольно простой и гибкий язык. Вместе с .NET поставляется довольно много уже готовых классов, что делает его еще проще. Настолько, что вполне можно написать простой многопоточный HTTP-сервер для отдачи статического содержимого всего за 15 минут. Можно было бы использовать уже готовый класс HttpListener и управиться еще быстрее, но цель этой статьи — показать, как вообще можно сделать нечто подобное в C#.
Читать дальше →
Total votes 94: ↑77 and ↓17+60
Comments72

Пишем простой плагин к веб-браузеру используя FireBreath

Reading time3 min
Views8.4K
Как уже писали ранее на Хабре, FireBreath — это фреймворк для разработки кросс-платформенных плагинов, используя технологии NPAPI [1] и ActiveX Control hosts, что позволит использовать плагин в следующих браузерах: Gecko/Firefox, Google Chrome, Apple Safari, Opera, Microsoft Internet Explorer 6, 7, and 8.

Мне пригодился этот фреймворк для следующего: в проекте (веб-приложение) использовался Java-апплет для печати Pdf-файлов напрямую на принтер, но из-за различных проблем с Java Policy и правами, не удалось добиться стабильной работы апплета + различные мелкие баги, как-то захват апплетом фокуса после загрузки или зависание браузера во время печати. Возможно, просто руки кривые. В общем, печать то работала, то нет, и это никого не устраивало.

Как вариант было решено попытаться написать плагин, который позволит избавиться от апплета и печатать файлы быстро и надежно. Собственно, печать осуществляет теперь тот же Java код, переписанный в виде jar файла. Однако прослойкой, которая осуществляет взаимодействие между джавой и клиентским кодом, является плагин браузера.

Теперь напишем простой «считай, ничего не делающий» плагин, который будет писать данные в файла в локальной файловой системе.
Читать дальше →
Total votes 57: ↑53 and ↓4+49
Comments4

Делаем консоль чуточку удобнее

Reading time4 min
Views7.1K
Практически все Javascript-программисты пользуются консолью в браузерах. Консоль встроена в Хром, Оперу, IE и устанавливается с Firebug в Фоксе.
Но у неё есть пару неудобств, которые можно очень легко исправить. Это:
  • Ошибки, когда консоль не определена
  • Невозможность использовать вне контекста
  • Невозможность отключить во время production
  • некроссбраузерность

Исправим эти проблемы легко и быстро!

Читать дальше →
Total votes 97: ↑92 and ↓5+87
Comments35

Как создать свой сайт с нуля с помощью Orchard CMS. Часть 1. Введение в Orchard CMS (продолжение)

Reading time12 min
Views5.9K
это продолжение статьи, начало читайте по этому адресу
В первой части руководства по введению в систему управления контентом Orchard CMS мы познакомились с системой и за считанные минуты загрузили и запустили первый сайт. Мы познакомились с тем, как автоматически загрузить и развернуть Orchard с помощью средства разработки WebMatrix.

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

Напомню, что автоматическая загрузка Orchard доступна из галереи приложений с помощью средства быстрого доступа к веб-инструментам Web Platform Installer (нажмите на эту ссылку, чтобы начать установку).

Управление Orchard CMS

Загруженная страница базового проекта Orchard CMS представляет собой симпатичный легкий и простой сайт с заголовком, панелью навигации, четырьмя текстовыми блоками и «подвалом», в котором есть ссылка Dashboard на панель администрирования проекта.

Читать дальше →
Total votes 72: ↑51 and ↓21+30
Comments59

CSS спрайты из командной строки

Reading time3 min
Views4.2K
Да, инструменты для создания CSS спрайтов существуют. Я даже сделал один такой сервис. Но они время от времени ломаются (как сейчас, мой). Но и командная многого стоит, и imagemagick. Давайте посмотрим, как мы можем создавать CSS спрайты только из командной строки.

Создание картинки


Начнем с того, что у нас есть список отдельных файлов:
$ ls

1.png  2.gif  dot.png  phoney.gif  tw.gif

  • — 1.png
  • — 2.gif
  • — dot.png
  • — phoney.gif
  • — tw.gif

Сделаем из них спрайт:
$ convert *png *gif -append result/result-sprite.png

Да, это все. Смотрим результат.

Читать дальше →
Total votes 139: ↑129 and ↓10+119
Comments22

Information

Rating
Does not participate
Location
Пенза, Пензенская обл., Россия
Date of birth
Registered
Activity