Кусок провода за 170 тысяч рублей

Итак, предмет: VALHALLA Reference от Nordost

Этот кабель настолько крут, что на официальном русском сайте не удосуживаются исправить ошибки в тексте(сигнальные потерЯ ; минимальнОЕ взаимодействиЕМ). Видно, это придает особый шарм вовлеченности в профессиональную область. От такой маркетологической тарабарщины Пушкин с Достоевским вращаются с легким посвистыванием. Странно, что остановило полет фантазии копирайтера добавить побасенку о том,  например, что только такие кабели используются NASA при выходе в открытый космос, или что такой кабель, спас жизнь какому-нибудь аудиофилу…

Самое смешное, что кабель не для передачи звука, а просто сетевой — на входе питания. Это не мешает ему «предлагать потрясающую звуковую сцену, огромный динамический диапазон и великолепную четкость звучания музыкального произведения.» Интересно, если с помощью этого кабеля включить миксер он тоже будет расширять границы кулинарных способностей или вдыхать душу в молочные коктейли?

Очень хорошая разоблачительная статья о наушниках на 3dnews.ru.

Продавцы поддержанных машин и пылесосов Kirby просто захлебываются от черной зависти. Буратины,  налетай!

Цитата с БашОрга на тему подобных «изделий»:

Коментарий к акустическому кабелю, ценой в 220 тыс рублей за метр.

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

Ссылки по теме:

Книга по требованию. Чукча не читатель — чукча-писатель

Просматривая описание книги Основы работы с технологией CUDA, заметил интересную приписку «Эта книга будет изготовлена в соответствии с Вашим заказом по технологии Print-on-Demand компанией ООО «Книга по Требованию».

Поиск приводит на сайт letmeprint.ru , на котором действительно можно напечатать свою книгу с тиражом от одного(sic!) экземпляра. Правда, при печати с твердой обложкой, тираж должен быть не менее 19 экземпляров. Двухсотстраничную книжку в мягкой обложке можно напечатать всего лишь за 120 рублей. Единственная бюрократическая вещь, как я понял, это необходимость получения ISBN, стоимость получения которого в 2011 году 1112,74р, судя по википедии.

*Всеобщее ликование общества графоманов 🙂

Intellisense для CUDA в Visual Studio

Для того, чтобы при редактировании исходного кода cu-файлов в Visual Studio 2008 заработало автодополнение, необходимо отредактировать ключ реестра:
HKEY_CURRENT_USERSoftwareMicrosoftVisualStudio9.0LanguagesLanguage ServicesNCB Default C/C++ Extensions. Можно просто дописать нужные расширения .cu и .cuh. Либо же просто применить изменения реестра из файла %CUDA_PATH%extrasvisual_studio_integrationgpucomputing_intellisense.reg

После перезапуска Visual Studio Intellisense будет работать.

Задача о назначениях — алгоритм Matlab

Часто может понадобиться решать задачу о назначениях. Например, при составлении расписания о наилучшем распределении работ между таким же числом исполнителей. При этом необходимо найти оптимальное назначение из условия максимума общей эффективности, которая равна сумме производительности исполнителей. Наиболее эффективным методом ее решения является Венгерский алгоритм. Понятно, что задача о назначениях имеет много интерпретаций: распределение груза по транспортным средствам, распределение задач для выполнения на нескольких компьютерах и т.д и т.п.Если необходимо решить такую задачу с использованием Matlab, можно воспользоваться готовой функцией munkres. Вычислительная сложность алгоритма O (n^3).

Ссылки по теме:

WordPress на IIS — автоматическое обновление плагинов

У WordPress, работающего на сервере с Windows и IIS, есть проблема автоматического обновления плагинов. По крайней мере так было у меня при установке PHP через Microsoft Web Platform Installer. WordPress после очистки содержимого папки плагина не может удалить папку plug-in и на этом обновление прерывается.

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

  • Скачать с SourceForge новую версию php_wincache.dll
  • Заменить php_wincache.dll в каталоге %ProgramFiles%PHPv5.2ext. Для этого необходимо остановить IIS Admin Service (хотя может быть, хватит и остановки World Wide Publishing Service). Так как службы запускаются и останавливаются медленно, то проще всего сделать перезапуск IIS Admin Service и после остановки World Wide Publishing Service заменить файл DLL.

Запустил новый сайт — AccordsAndNotes.ru

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

Месяц отпуска позволил допилить до ума минимальный каркас сайта. Использование SQLLite в ASP.NET пока идет успешно и не выкидывает серьезных сюрпризов. Автоматическая генерация модели Entity Framework работает прекрасно. В обратную сторону (экспорт из EF в SQLLite) сделать как-то не получилось, но и без этого можно отлично обойтись.

Теперь нужно наполнять сайт контентом, расширить возможности каталогизации и конечно, же, реализовать модуль аккордов. И раз уж такой тренд, добавить комментирование и расшаривание в Facebook и Вконтакте 🙂

Парсинг HTML в .NET приложении

Вопрос разбора данных HTML страниц для вытаскивания из них данных может встать перед любым разработчиком. Для того, чтобы уменьшить количество рутинной работы можно воспользоваться библиотекой Html Agility Pack

Например, на странице с аудио-записями Вконтакте альбомы хранятся в блоках div с атрибутом class= «audio_filter»

Пример:

<div id="album99999" class="audio_filter"
onmouseover="Audio.listOver(this)"
onmouseout="Audio.listOut(this)"
onclick="Audio.loadAlbum(11103462)">Trip-hop</div>

Код поиска таких блоков на C#:

      String page;
      //Получение содержимого html-страницы в строку page
      //...
      byte[] byteArray = Encoding.GetEncoding(1251).GetBytes(page);
      MemoryStream stream = new MemoryStream(byteArray);

      HtmlDocument doc = new HtmlDocument();

      doc.Load(stream);
      HtmlNode root = doc.DocumentNode;

      foreach (HtmlNode div in root.SelectNodes("//div"))
      {
        HtmlAttribute att = div.Attributes["class"];
        if ((att == null) || (att.Value == null) || (!att.Value.Equals("audio_filter")))
          continue;

        int index = div.Id.IndexOf("album");
        if (index != 0)
          continue;

        Album album = new Album() { Name = div.InnerText, ID = div.id };     //Новый альбом, где название содержимое блока

      }

Скачивание музыки из Вконтакте по альбомам — VKontakte Music Backuper

Vkontakte Music Backuper

Те, кому интересно конечное приложение для скачивания музыки из Вконтакте по альбомам, могут скачать его по ссылке. Для запуска требуется .Net Framework 3.5 — можно скачать с сайта Microsoft.com. Пользоваться очень просто — ввести электронную почту, пароль, авторизоваться. Если нужно, изменить ID пользователя для которого показан список аудио. Далее поставить галочки на альбомах, которые нужно скачать и нажать кнопку «скачать альбомы». Можно качать отдельные композиции. С теми же, кого интересуют буквы и реализация, продолжаем. Пользователи Linux и Mac Os могут воспользоваться приложением с помощью проекта Mono, в Ubuntu мне было достаточно выполнить полную установку Mono командой sudo apt-get install mono-complete. Далее можно запускать программу из консоли командой mono VkontakteMusicBackuper.exe либо обычным двойным кликом. Кроме того,можно воспользоваться сервисом Muzico.biz, чтобы слушать и скачивать и записи прямо с сайта.

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

Конечно же, ссылки на mp3-файлы доступны в исходном коде страницы. Кроме того, есть расширения в виде букмарклетов, такие как savefrom.net, которые отображают ссылку на скачивание прямо при воспроизведении музыки или видео. Существует очень удобное приложение для поиска и скачивания музыки из вконтакте под названием VKMusic. Хоть там и заявлена поддержка альбомов, те альбомы, что создает сам пользователь скачать нельзя.

Поэтому пишем свой велосипед. Знания о том на C# сделать скачивание файлов по http, парсить html  рано или поздно пригодятся. Правильнее было бы использовать Вконтакте API, но там все равно тоже нет возможности получения альбомов.

1. Авторизация

При авторизации пользователя в ответе возвращается ID пользователя, а так же remixsid — ключ, хранящийся в cookies браузера и передаваемый при последующих запросах к сайту. Повторяем авторизацию Вконтакте:

 public class VKUserInfo
  {
    public String SID { get; set; }
    public int UserID { get; set; }
  }

  public static class VKUtils
  {
    /// <summary> Авторизация к Vkontakte.ru с получением id и SID пользователя </summary>
    public static VKUserInfo LoginToVkontakte(String email, String password)
    {
      //создаем запрос
      HttpWebRequest wrGETURL = (HttpWebRequest)WebRequest.Create("http://vkontakte.ru/login.php?m=1&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;email=" + email + ";pass=" + password);

      //Запрещаем редирект
      wrGETURL.AllowAutoRedirect = false;
      //Выставляем таймаут
      wrGETURL.Timeout = 100000;

      //получаем весь ответ
      HttpWebResponse myHttpWebResponse = (HttpWebResponse)wrGETURL.GetResponse();

      //получаем Headers,пришедшие в ответе
      string headers = myHttpWebResponse.Headers.ToString();

      //записываем ответ в поток
      StreamReader myStreamReadermy = new StreamReader(myHttpWebResponse.GetResponseStream(), Encoding.GetEncoding(1251));
      //получаем строку с ответом
      string page = myStreamReadermy.ReadToEnd();

      //это регулярное выражение,которое выдирает из переменной headers(а ее мы получили выше) значение sid
      Regex sidregex = new Regex("sid=([a-z0-9]+); exp");
      Match ssid = sidregex.Match(headers);
      String sid = ssid.Groups[1].Value;

      //Получение ID пользователя
      int id = 0;
      String location = myHttpWebResponse.Headers["Location"];
      if ( (location != null ) &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp; (location.Length>3))
      {
        location = location.Substring(3);
        Int32.TryParse(location, out id);
      }

      VKUserInfo info = new VKUserInfo(){ SID =  sid, UserID  = id};
      return info;
    }
}

2.Получение списка аудио-записей

Читать далее Скачивание музыки из Вконтакте по альбомам — VKontakte Music Backuper

Библиотека транслитерации для .Net

Одно из возможных решений для транслитерации в приложении на C# — это  библиотека Unidecode. Единственным недостатком является большой размер библиотеки (660Кб) из-за того, что библиотека позволяет транслитерировать весь юникод(почти весь).

Использовать библиотеку очень просто:

using BinaryAnalysis.UnidecodeSharp;
String translit = "Русский текст".Unidecode();

Здесь можно найти более лаконичное решение только для русского языка.

 

 

Удобный выбор цвета из палитры System.Drawing.Color

Microsoft позаботился  о программистах, создав очень качественную стандартную палитру цветов в структуре System.Drawing.Color. Чтобы легче выбрать подходящий цвет лучшего всего пользоваться следующей картинкой(кликабельно):

В этом топике рассказано, как построить подобную табличку самому  и приводится еще одно представление с упорядочением по близости цвета: