Максимальное число допустимых открытых соединений с клиентов - весьма важная настройка при создании веб-сервисов в .Net, о которой обычно все забывают. Причиной такой забывчивости является то, что по умолчанию разрешено 2 соединения с любого клиента и этого вполне достаточно для работы веб-сайта в сети Интернет, где куча пользователей с разных хостов по очереди обращаются к одному серверу. Но когда речь идет о взаимодействии двух серверов активно передающих между собой запросы, то полезно выставить число одновременно открытых соединений на побольше. Делается это следующими строчками в конфиге:
После некоторого гемора выложил новый сайт для тестирования, а точнее даже два: topbloger.ru и смежный ему top4blog.ru. Первый содержит информацию обо всех топовых блогерах, а второй просто набор постов, попавших в топ. Зато теперь информацию искать удобнее и выглядит красивее чем на моем же deep-water.ru. Для полной красоты не хватает возможности автоматически извлекать ссылку на кэшированную копию поста в Яндексе. Из приятных возможностей - RSS подписка на топовые записи определенного блогера, а также то, что можно давать ссылки на "карточки топблогеров" как со знаком вопроса, так и без, что упрошает запоминание адреса.
Монетизация проекта возможна через размещение платных ссылок на рекламные агенства или добавление(убирание) информации о платных постах блогера.
Ниже я раскажу как написать простенький компонент для отображения облака тэгов в ASP.NET. Пост содержит много кода. Для начала нам потребуется jQuery, который нужно где-нить подключиться на странице. Если Вы не знаете, что такое jQuery - то в поиск. Далее на странице, где у нас будет облако тэгов, а их может быть несколько, подключаем CSS и JS:
Все знают, что у твиттера есть API для разработчиков, но мало кто реально им пользуется. Обычно все находят программы уже созданные кем-то на западе. Если же у вас необходимость создать какое-то приложение для твиттера на .Net, то рекомендую достаточно молодой опен-сорс проект Twitterizer. Ниже много кода, демонстрирующие как просто я добавил возможности твиттера в библиотеку BlogsAPI (закрытый проект пока):
Что такое RSS большинство должно знать - это форма экспорта текстовых данных с сайта. Лично меня в RSS не устраивает то, что нельзя задать идентификатор сообщения уникальный для моего поста в рамках сегодняшнего дня, а не в рамках ресурса, за что отвечает поле guid. Это нужно для того, чтобы RSS агрегатор, типа reader.google.com, мог понять, что эти 3 новости перекопированные на разные сайты - есть одно и тоже. Например новости Яндекса копируются на хабр и на яру, а у меня из-за этого в 3 раза больше сообщений. Введение такого хэш-идентификатора "на день" вполне оправдано. И согласуется с тем, как работают сервисы сокращения ссылок, замещая старые короткие ссылки, новыми значениями, что позволяет короткой ссылке оставаться короткой.
Другая интересная несогласованность проявляется при попытке создания RSS выдачи при помощи сериализации объекта класса (рекомендую библиотеку RssToolKit 2.0 для этого). Как мы знаем все строки в CSharp храняться в виде UTF-16, поэтому при сериализации мы получаем XML в этой кодировке, жестко указанной в заголовке. Но, как оказалось, некоторые браузеры - FireFox, IE8 (в Opera все впорядке) - наотрез отказываются воспринимать такой XML, требуя UTF-8 и жесткого задания версии RSS, поэтому пришлось дописать RssToolKit, добавив преобразование кодировок следующим образом:
На хабре недавно проскакивал вопрос - есть ли отличие между Web разработкой и desktop разработкой?
Немало людей, если не большинство, ошибочно ответило, что разницы нет.
Это не удивительно, с учетом того, что весь девелоперский инструментарий и компании заинтересованы в универсальном программисте, решающем любые задачи.
Однако, я, как вовлеченный и в ту и в другую деятельность перечислю ниже основные отличия между web и desktop разработками:
В работе постоянно приходится тестировать с помощью NUnit различные web-службы. Но я делаю не банальный одиночный вызов или серию последовательных вызовов, а создаю серию потоков вплоть до максимально разрешенного на текущей машине, каждый из которых по команде начинает делать запрос в web-службу. В случае, если на сервере IIS разрешено более одного процесса, для обслуживания ApplicationPool, то это может выявить неожиданные блокировки ресурсов, которые нужно уметь отлавливать. Эмитация такого многопоточного обращения к одному сервису сделана как показано ниже:
Обновил расширение для BlogEngine позволяющее постить одновременно сразу в несколько блогомест. Качать архив файлов тут. Архив содержит 3 вещи, которые нужно поместить в корень вашего блога заменив старое - 1) папку admin с измененным файлом Settings, я там исправил ошибку с редактированием настроек 2) папку App_Code - в ней содержится код расширения, который вы сможете поправить, если нужно 3) Папку bin, которая содержит библиотеку BlogsAPI, в которой реализована работа с основными(lj,liru,yaru,blogsmail) блогохостингами.
Не забудте внести изменения в web.config, как я писал ранее, а то не будет работать с Яндексом.
Сейчас там реализовано копирование постов на Лиру и Яру. Но если есть желание, то можно дописать свой класс для копирования постов куда угодно, который имеет интерфейс IBlogHosting и поместить его в namespace MultiPostExtension.Blogs:
Месяц Май ознаменовался серией событий по микроблогингу в рунете и вообще. Толчек обсуждению был задан публикациями в журнале f5.ru - печатное издание обо всем в блогосфере. Скачать и почитать их в онлайне тут. (Статейки хорошие, молодцы, даже ссылку на меня печатают. Денег правда на раскрутку тратят некисло, сразу видно, что "двухбуквенник"). В журнале перечислены все сервисы по микроблогингу, которые бы могли заинтересовать рускоговорящих пользователей.
Однако, списоу из 8ми сервисов оказался не полным и буквально на днях мы узнали о проекте ljchat.ru и обновленный ЖЖ-мессенжер от Микрософта ljtalk. Последний еще не доступен для всех, но то, что мелкомяйкие решили приложить руку к ЖЖ - уже странно.
Примечательно, что у микроблогинга нет монетизации, а на горизонте уже маячит, объявленный GoogleWave, который должен стать объединением всего лучшего от F*Connect+Jabber+HTML5 - и должен убить микроблогинг.
Чтобы закрыть эту тему приведу код, который я использую в проекте подсветки кода, для формирования коротких ссылок и дальнейшей вставки в микроблоги. Для сжатия я выбрал 64х базу, дополнив строчный и прописной английский алвафит двумя знаками "_" и "-". В итоге получаем такие вот короткие ссылки на код - s-c.me/wX.
Как оказалось делать скриншоты сайтов не такая уж и простая задача. Но выход из нее можно найти создавая отдельным потоком скрытую форму с объектом WebBrowser и используя некоторые компоненты MS IE7 .
Ниже идет малокомментированный код, который подскажет Вам, как это правильнее всего сделать. Если есть вопросы, то гуглите и разбирайтесь в документации:
Оказывается придумали на свете день тупее чем 8е марта или 23е февраля и назвали его 1е апреля. Ужасный день, все кругом норовят тебя обмануть или изъебным способом постебаться. Даже звонят напрямую с одной единственной нехорошей целью. Даже сайты начинают работать не так, как положено. Они думают, что это смешно, а у кого-то нервы шатаются от очередной дурацкой шутки.
Поэтому напишу-ка я по делу краткую заметку о том, как запустить 32х битный русский LEMMATIZERLib (морфология) на 64х битной машине с английской виндой.
Простой запуск дает "Retrieving the COM class factory for component with CLSID {6B23250F-1816-11D3-9CC6-00105A68BAF2} failed due to the following error: 80040154", в этом случае важно не забыть сделать следующие шаги.
1) На 64х битной машине зарегистрировать компонент с консоли командой - "regsvr32 pathtodll"
2) В проекте MSVS, который использует компонент, указать 32х битную компиляцию заместо Any: Target CPU: from "Any CPU" to "x86"
3) Для работы русского языка - выставить в реестре ключи с CodePage (найдете точный путь в гугле) для 1250 и 1252 как "c_1251.nsl"
4) Перезагрузиться.
Надеюсь это поможет тем, кто найдет этот пост через поисковики
Пост в продолжение обсуждения на Хабре (http://habrahabr.ru/blogs/webdev/54964/). Если у Вас идет большой поток данных, которые нужно сохранять в таблице и потом отображать пользователям, то очень правильно будет разнести все это на 2 таблицы. Одна для выдачи самых частых запросов, другая для медленных. А также таблицы в которых бы были предварительно подсчитанные данные. После такого разнесения все процедуры принимают вид, как показано ниже, на примере для времени:
Copy Source | Copy HTML begin DECLARE `datatable` VARCHAR(20) DEFAULT '`data`'; DECLARE `xtab_query` VARCHAR(4096) DEFAULT '';
if(DATE(`dfrom`) > DATE_SUB(NOW(), interval 8 DAY)) then SET datatable := "`data_week`"; #last week else if(DATEDIFF(`dto`,`dfrom`)>60) then SET datatable := "`data_ms`";#months else if(DATEDIFF(`dto`,`dfrom`)>14) then SET datatable := "`data_ws`"; #weeks end if; end if; end if;
SET xtab_query := CONCAT("select * FROM ",`datatable`," d ........and 1 screen of query...");
PREPARE `xtab_query` FROM @xtab_query; EXECUTE `xtab_query`;
При индексировании архива офисных файлов мне понадобилось извлекать текстовую информацию из различных файлов таких как DOC или PDF.
Решение несложное, достаточно воспользоваться несколькими библиотеками. Для PDF - это PDFBox, портированный с Java на CSharp. Для DOC - это Microsoft.Office.Interop.Word.dll из набора OfficeAPI. Для удобства, необходимые библиотеки можно скачать одним архивов по ссылке
Под катом я приведу код, показывающего как с ними работать.