Мои мысли про ЕГЭ

С ЕГЭ все просто. Государству надо включится в единый европейский рынок труда, чтобы нас за людей начали считать. Основной минус, на мой взгляд, в том, что теперь люди с техническим складом ума будут иметь возможность "валить" из страны не после сдачи диплома, как сейчас можно, а сразу после школы. Но может оно и к лучшему, ведь если человек решил свалить, то рано или поздно свалит, пусть уж лучше не задерживается, не занимает бюджетные места.

Эхе-хех, у меня вот из университетских знакомых очень много уехало забугор. Странно, что я забыл в этой Московии...

Метки:   Категории:life


кибориф

только на киборифе я понял, что не только блогами живет рунет ,но и прочей еще большей фигней

Метки:   Категории:life


ЖуЖе президента быть

Все написали и я напишу свое мнение про открытие официальной трансляции блога Медведена на ЖЖ.
  • Трансляции блога медведева на ЖЖ не миновать, если не официально, то так троли бы сделали.
  • Если Вам хочется обсуждать новости от президента в ЖЖ, то лучше зафрендить эту трансляцию, нежели официальную, которая модерируется.
  • Если Вам важно не обсуждение, а просто узнавать о новых сообщениях от президента, то Вам стоит зафолоувить твиттер ru_medvedev, в который скоро тоже будут копироваться посты от президента.
  • Почему выбран именно ЖЖ, а не чтолибо еще ? Ответ очевиден, во-первых так исторически сложилось, в во-вторых, благодаря стараниям газет, типа коммерсанта и ведомостей, которые позволяют комментировать свои публикации только пользователям ЖЖ - все политически активные интернетчики обитают в ЖЖ.

Метки:   Категории:Twitter | news | life


Яндекс + футболка, кружка, ручка

Посетил Яндекс, посмотрел презентацию, о которой писал ранее.
Из интересного отмечу
  • Со слов Романа - любой, даже удаленный комментарий на ЖЖ теперь попадает в Яндекс, всегда.
  • На следующей неделе Яндекс обещает большой отчет по ситуации в Рунете. В частности напишут о том, что число блогов уже почти не растет, а вот комментариев становится все больше и больше за счет интеграции с новыми системами.
  • Антон обещает, что у ТОП30 появится выдача RSS... ыыы. Кроме того, судя по всему, он единственный человек, кто имеет право править(и правит) ТОП30 ручками в целях исключения ошибок роботов и матных постов.
  • Вся информация FOAF собранная Яндексом доступна по API.


Негативных сторон тоже не мало. Я заметил, что в команде Яндекса витают "мифы", которые видимо не скоро будут развенчаны. Вот то, что я заметил
  • По мнению представителя Яндекс.Новостей "новостное издание" отличается от "блога" тем, что последние пишут только гавно. В то время как, главное отличие блога от новостного источника заключается в том, что там может содержаться описание неактуальных событий.
  • Роман, как заклинание повторяет фразу "мы не медиа", думая, что это его спасет от вопросов, связанных с влиянием Яндекса на население. Но это влияние как не назовись есть, недаром оппозиция завалила вопросами о качестве автоматически выдаваемой информации и значимости частицы "НЕ" в выдаче.
  • Антон уверяет, что ТОП30 работает как положено. Одновременно с его словами в ТОП попадает запись http://deep-water.ru/?http://stanislav-mikov.livejournal.com/372390.html, чего по его уверению быть не может.

Вот такие дела. Фунболка не понравилась, кстати.

Метки:   Категории:topbot | Yandex | life


Happy 10 years!

Ктобы мог подумать, а ЖЖ(livejournal.com) сегодня исполнилось уже 10 лет. 10 лет флуда и троллинга...ужс.

Метки:   Категории:Livejournal | life


Мировые события в Интернете и вообще

Мои комментарии на то, что бударажит интернет:
  • Множество Интернет идентификаторов было пополнено сайтом CHI.MP, отличительной особенностью которого является предоставление домена второго уровня для размещения ващей информации (поэтому все имена быстро расхватали), а также мне понравилась реализация многопрофильности. Разработчики продумали не только, что каждый пользователь может иметь несколько профилей, но и возможнось по различному комбинированию уже созданных профилей для формирования объединенного. Дополнительно можно почитать обсуждение проекта в Детском хабрасаду", где я охватил -10 к карме.
  • На машабле обсуждают отключение на твитере автоматического following'a(back friending). Делая это с такой серьезностью, что смешно. Эффект обратной реакции пользователей известен в Рунете , как Тостер и прекрасно существует на простой тупизне пользователей. Поэтому количество спама врядли уменьшится.
  • После просмотра встречи G20 понял одну простую вещь, что замены доллару нет и не будет в ближайшие 20 лет не потому, что мы к нему слишком привязались или американская эконосика надежна, а потому, что эти смешные бумашки уже напечатаны и уже розданы на руки. А в условиях кризиса никто не станет тратить средства, которых и так не хватает, на печать триллиона цветных бумажек и заниматься их распространением. Куда уж проще нарисовать на банковском счете виртуальные 5трл.баксов и разделить их среди нуждающихся. Но мы то знает, что это не поможет...
  • Система web2.0 новостей - Digg объявила о создании собственного тулбара для просмотра страниц интернета. Как показано в презентации, он будет заменять любую страницу на короткую ссылку, чтобы вам было удобнее ее передать кому-нить. Если бы речь шла о "1 сайт = 1 короткая ссылка", как это сделано для chat.ru, то я бы поверил, что такое возможно. Но вот с "любой" страницей я сильно сомневаюсь. Из-за большого числа страниц эта короткая ссылка быстро станет такой же длинной. Кроме того немало пользователей изнают, что фиксированная ссылка на страницу не гарантирует, что контент на ней изменится через 10 минут. Дополнительно тулбар позволяет узнать Вам сколько еще хомячков пожевали попкорн на этой странице... А вам не пофиг? Такая информация важна не пользователю, а системам статистики.

Метки:   Категории:news | life


one more week

Соберу отрывочно некоторые моменты прошедшей дели:
  1. Прошел слух, что в апреле в МВД пройдут массовые сокращения. Вызвано это тем, что бюджет правоохранительных органов привысил бюджет военных в нашей стране, а сейчас кризис, вот и решили экономить. Боюсь, что к лету мы станем свидетелями массовый демонстраций с участием бывших омоновцев.
  2. Появилось 2 класные идеи для интернет проектов, одну видимо я буду реализовывать лично, для второй нужно бы найти хорошего программиста под iPhone. Может у кого есть желание заработать?
  3. Очень интересная новость про появление вируса в банкоматах, которая по сути означает, что группа лиц, ответственная за обслуживание банкоматов, решили заработать в лоб. Я почти уверен, что они зарабатывали и ранее, просто, продавая внутренюю информацию о ваших кредитках "кардерам". Кардеры же перепродавали эту инфу тем, что был в состояниии изготовить копию кредитки, потом кредитки продавались разным просто плохим парням, которые в зависимости от совести и страха попалиться, регулярно снимали с них мелкие суммы по 1000т.р. с каждой кредитки, что очень часто остается незаметным. Но видимо недавно эта схема накрылась, толи тех кто выпускал фиктивные кридитки поймали, толи кардерам стало выгоднее покупать пинкоды у других электронных мошенников (виртуальные казино, порноресурсы и т.д. принимающие оплаты кредитками). Вообщем невезучие работники банкоматов пошли на крайность. Надеюсь их поймают.
  4. Не забудте на этих выходных перевести часы на 1 час вперед.

Метки:   Категории:news | life


MySql - обработка поточных данных.

Пост в продолжение обсуждения на Хабре (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`;
 
end

Метки:   Категории:Code | life


This week - summary

Небольшой обзорчик интересных на мой взгляд вещей за текущую неделю.
  1. Вышел DotNetOpenAuth 3.0 Beta 2 released - на днях планирую потестировать
  2. Обновилась главная страница Facebook'a, чтобы отвечать новым тенденциям в сфере Web2.0, а именно скорости и актуальности отображаемой информации.
  3. Также на фейсбуке появились таргетированные объявления, по дизайну и формату сервис совпадает с тем, что ввели ранее на Вконтакте. Видимо американский гигант долго откладывал нововведение, занимаясь рекламой главной страницы, а у вконтакта всюду шпионы, лтбо просто широко не аннонсировали в блогах.
  4. Alfresco выложил некоторые мысли про дополненную реальность (думаю микрософтовский текст голосовой ридер достаточно похож на Бората). В частности говорится, что нужно новую технологию делать под потребности 10летних детей, а уж те когда вырастут и не смогут без нее жить, тогда и создатут то, что станет повседневностью. Иными словами, Секай-камера еще не актуальна, надо делать виртуальных петов.
  5. У меня появились новые идеи для проекта, которому почти нет еще аналогов в интернете. Как зарегистрирую домен, так выложу мысли. А чтобы зарегить домен, который еще свободен надо, чтобы мне вернули мои WMZ... ох уж эти заемщики...

Метки:   Категории:trend | life


Про счастье.

Сегодня видел по телевизору занимательную передачу, где рассказывалось из чего, по мнению ученых, состоит счастье. Они составили рейтинг стран по уровню счастья населения, и оказалось, что Россия на последних местах с коэффициентом счастья 4 из 10.
Итак, счастье состоит из 5 составляющих, которые я прикинул их на себе и выяснил, что я глубоко несчастный человек:
1. Друзья. 99% моего общения вынесено в интернет, поэтому те ники, те виртуальные персонажи, с которыми я общаюсь, назвать полноценными друзьями все сложнеее и сложнее.
2. Деньги. Деньги, как было сказано, дают счастье только на уровне бедноты. Значит мне они счастья не дают и, как и 98% населения нашей страны, неотносящимися к богатеям, мне хотелось бы денег еще побольше, хоть и счастья мне этого не даст.
3. Спорт. Да уж, в этом году еще спортом не занимался - холодно, лень, мало смысла. Да и зачем? Телки и так должны вешаться на малопьющего и некурящего здорового человека, но правда компьютерный гик. А пивной живот, как мне сказал один депутат, хоть ты занимайся спортом, хоть нет, всеравно к 30 годам появится =).
4. Здоровый регулярный сон. Пост пишу в 4м часу ночи, так что тут все понятно, идем дальше.
5. Общественная деятельность Кризис, денег нет и общественной деятельности нет. Это только на западе без денег от государства могут организровываться молодежные организации, но не у нас. Так что и тут со счастьем придеться подождать.

Метки:   Категории:life


Back to blogging

Давно не писал, поэтому пробегусь кратко по основным техническим событиям интернета
  1. На днях почти полдня был недоступен Gmail. Примечательно, что это вызвало меньше паники в Рунете, чем недоступность ICQ в январе.
  2. Добавил виджет комментирования от FriendsConnect на проект s-c.me - все работает и мне нравится. А вот точно такойже код для ya.topbot.ru почему-то не пашет, придется еще подумать.
  3. Появились подробности Gazelle - нового браузера от Микрософта, который они планируют выпускать независимо от InternetExplorer'a. А также новый скрины от MicrosotftVisualStudio2010
  4. Из юмора рекомендую почитать темку про Китайскую социальную сеть, которая круче Facebook
  5. Сегодня вечером иду на секретное обсуждение "Плана Обамы" и "Плана Путина", если что умного узнаю, то поделюсь. Отмечу лишь, что я продал баксы, закупился йеной и жду обвала Европы =).
  6. 1го марта пройдет 7я встреча стартаперов от StartupPoint.ru . Пользы думаю будет мало, но сходить погулять не помешает.

Метки:   Категории:S-c.me | news | life


Социореклама

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

Но с другой стороны, зная специфику русского офисного планктона, да и по собственным чувствам, когда смотришь ролик, то про себя произносишь "Да", после каждого вопроса =). Получается примерно так: "Тебе нужны только деньги? - Ага, а все остальное куплю. Тебе плеваь на страну? - Ага, поэтому сбережения в валюте. Ты тупая скотина? - Ага, пойду напишу об этом в блоге."
Другой интересный пример - антиалкогольная реклама, что крутят по телевизору. Показывают кишки и говорят, что все кто пьет - скоро умрут. На это смотрящий отвечает Да я гавно, да я скоро сдохну, но что мне еще остается на зарплату учителя при такой инфляции? Лучше уж выпью и забуду, что я гавно.
Такое вот неправильное отношение к людям проявляется в России повсеместно. Подход "Ты гавно - иди работай!" изжил себя с падением монархии. Правильный подход капитализма: "Стань лучше - сделай то-то!". Для той же антиалкогольной компании это звучало бы так: "Хочешь здоровую семью, понимания на работе и хорошей жизни - откажись от выпивки!".


Метки:   Категории:news | life


1tv - пропаганда

На выходных имел возможность убить часть времи перед телевизором. Поразило, что в одной передаче ведущая очередного тупого шоу произнесла слово "Негр" и это не отфильтровали защитники толлерантности. Видимо даже на толлерантность деньги кончились.
Заценил еще новейший российский фильм "20 сигарет". Весь фильм - нарезка сцен, где герои курят в перемешку с короткими диалогами, а иногда на экране показывается компьютер с mail.ru. Герои не выпускают сигарет ни на крыше дома, ни в машине, ни в туалете, ни во время секса. Сплошная реклама нездорового образа жизни, несчитая mail.ru. С такой открытой пропогандой по основным каналам мне становится понятно, почему у нас 63% россиян заядлые курильщики.

Мое отношение к курению весьма негативное. Поговоришь с курящим человеком, а потом вся одежда воняет, как будто в течении разговора тебя обхаркали какой-то гадостью. Да и во время разговора, говоришь что-то, а собеседник не зная что ответить делает вид, что занят курением. Курильщики перестают не пользуются духами и одеколонали - зачем им, если запах курева все убивает! И т.д. и т.п. можно долго продолжать.

Offtopic:
  1. Интересная инструкция по созданию сообществ на Твитере
  2. Добавил в профиле больше информации

Метки: , ,   Категории:news | life


Завершая месяц

1) Несколько дней буду недоступен в связи с отъездами и пропавшим дома интернетом.
2) Начинаю разбираюсь с библиотекой полнетекстового поиска портированную на Csharp: lucene.net. Очень много разработано для этой библиотеки, почти что полноценный десктопный поисковик написать можно. Очень волнует скорость добавления информации в индекс - может у кого есть опыт работы с ней? Надеюсь с помощью библиотеки покрыть часть функционала тематического поиска, как у продаваемого IBM решения для корпораций, где одна лицензия стоит под 100килобаксов.
3) Опробовал по совету Mads'a плагин для VisialStudio StyleCop 4.3, правда восторга, как у него у меня не появилось. Плагин позволяет следить за правильным оформлением вашего кода. Из полезного могу отметить только возможность проверки правильности составления документации, что все параметры функций описаны и не пусты. Остальное, как проверка на отсутствие двойных пробелов, на наличие копирайтов и т.п. - черезчур.
4) Интересное решение спам проблемы в ЖЖ предлагает Лугастик - как бы лично выступая в роли абуз теам и инспектируя ботов. Проблемой может стать ограничение на размер бан листа в ЖЖ =), а также то, что число ботов в ЖЖ регистрируется за день примерно в 1000раз больше, чем автор успевает просматривать.

Метки:   Категории:Code | life


Widgets или про воскресенье

В выходные посетил многообещающее мероприятие, организованное StartupPoint, и посвященное некоторым интернет проектам ищущим инвестиций второго круга. Еще раз убедился, что основной способ монетизации стартапа - это привлечение инвестора =) и так далее по принципу пирамиды. Далее отмечу лишь заслужившее моего внимания:

1) liveexperts.ru - мне кажеться у них есть шансы продвинуться дальше, чем Ашманов или Гугл-вопросы. Последние достаточно долго пытались повторить успех проекта топового сайта about.com в части предоставления пользователям человеческих ответов на жизненные вопросы, но оказались нежизнеспособными. Отчасти провал был вызван бесконечными попытками собрать "экспертов во всем". Хорошо было бы реализовать liveexperts.ru на базе видео-чатов(видео-виджет), которые продвигает компания Spirit. А также им стоит подумать над технологией API для того, чтобы каждое уже сформировавшееся в интернете тематическое сообщество могло интегрироваться с их экспертной системе без переманивания пользователей, что было бы грубой ошибкой.

2) toolwi.com . Огорчило, что не удалось узнать относительно их дальнейших планов по разработке виджетов для блогов, скрывают. Единственное, что говорят, так это сделают бесполезную публикацию настроений (likes), а в дальнейшем планируют просто "лечь" под крупный блогохостинг и заняться выполнением задач под конкретные потребности, что поставит на сервисе крест, но даст им денег. Еще раз повторюсь, что я считаю крайне важным создание для блогосферы виджетов тупо дублирующих функционал F*Connect (например, опросы), и в перспективе универсальный виджет для публикации профиля блогера. Но тут, как всегда, хромает монетизация.

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


Метки: ,   Категории:trend | life


Идеи для фантастической книги

Сидел, пил кофе и думал - "а чтобы мне не подойти к кофейному автомату и не разломать его, чтобы больше не пить кофе такого плохого качества?". Так родилась идея, что было бы прикольно, если бы у нас у всех было 2 жизни. Проживаешь первую, начинается вторая, кончается вторая - все смерть. То есть после первой смерти из тела уходит какой-то дух, который не позволяет пережить вторую смерть. И каждый делает выбор как ему жить, толи вначале вести безбашенную жизнь, а потом тихо мирно работать и растить потомство, толи наоборот. Как бы Вы выбрали? Можно конечно 2 раза прохить одинаково, но я сомневаюсь, что кто-нить так сделал.
И весь мир таким образом делился бы на тех, кто хочет жить подольше и тех кто хочет жить повеселее.
Как раз хватит на трилогию. В первой книге герой вел простой образ жизни, но какой-то урод его убивает, он становится плохим и познает плохие стороны жизни пытаясь найти убийцу (но так и не находит). Во второй книге, героиня пресытившись плохой жизнью долго думает как лучше умереть, потом умирает и пытается вести хорошую жизнь, но ей все мешают. А в третьей книге нужно написать что-нить про книгу судьбы, в которой предначертано какой путь человек выберет в первой жизни и за эту книгу будут весьти борьбу хорошие и плохие.
Может уже кто-то реализовал подобное в какой-нить фантастике, думаю было бы занятно почитать.

Метки:   Категории:idea | life


few-words

Еще до НовогоГода мне довелось побывать на докладе, где вкратце расказывалось как были распилены потрачены выделяемые бюджетом деньги на научные иследования. Мое внимание привлекли некоторые технологии, о которых стоит рассказать, пока не зыбыл.
Во-первых, это исследования передачи энергии при помощи лазера. Это нужно, чтобы в ближайшее время запустить на орбиту спутники, которые бы собирали солнечную энегрию и передавать ее на землю, тем самым решая проблему альтернативных источников энергии.
Далее было что-то интересное сказано про спутник, который можно запустить с целью освещения заполярных станций отраженным от солндца светом. Мне трудно представить каких же размеров должны быть отражающая поверхность спутника, чтобы это имело яркость, заметную для звездного заполярного неба.
А еще мне понравились очевидное военное применение самоорганизующихся роботов. Разрабатывается группа мини-роботов, которые, попав в здание, уничтожали или обезвреживали бы всю живую массу внутри помещения, то есть людей. Сейчас таким средством выступает простая граната, забросил ее в помещение с террористами, она всех и положит вместе со зданием. А хотят, чтобы забрасывали(скажем через окно) в помещение нечто, оно бы разделялось на автономные части, быстренько уничтожало все двигающееся и выключалось, оставляя здание неповрежденным.
Еще интересное применение самооргинизующимся роботам - мониторинг нетральных вод. То есть есть группа роботов, каждый из которых держит связь только с ближайшими, но все вместе они мониторят большую территорию. Правда тут оговаривалось, что разработки ведуться военным ведомством США.
В итоге должно получиться как в фильме "День, когда Земля остановилась", когда есть куча мелких роботов, уничтожающих все на своем пути. Главное только их правильно запрограммировать =).

PS: Тяжело вживаюсь в новый режим сна, с 12ти часового в праздники, до 4х часового... Дожить бы до выходных.

Метки:   Категории:trend | life


2009+

-Сколько будет ДедМороза заказать?
-200у.е.
-Хорошо, а когда он прийдет?
-Он не прийдет, потомучто Вы его заказали.
---------------
Так выпьем же за тех, кто шлет нам поздравления с неизвестных номеров!
Кажется я возвращаюсь к жизни.
1) Под новый год заменил себе первую жену как планировал на Dell 1535 C2D 2,5Гц, 4Gb memory в целом доволен. Также на удивление оказался довелен WindowsVista, которая просто летает на этой малышке.
2) Еще радует, что завтра мне не работать, в отличии от разных неудачников, поэтому кто хотел встретится может меня попробовать подловить.
3) Также мне сообщили, что YandexUtility перестал работать, как перекомпилю, так выложу новую версию.

Метки:   Категории:life


Source-Code.ME - HightLight

В предыдущем посте я активно использовал вставки кусков кода в текст поста. Как вы могли видеть, текст был подсвечен и красиво оформлен. Это было сделано не спомощью стандартных средств, а с помощью самописного проекта Source-Code.ME (s-c.me).
При его написании использовалось: ASP.NET,IIS,ASP AJAX Toolkit,Log4net(логирование),URLRewriter(перезапись обращений), inettuts(Перемещаемые виджеты), jQuery(работа с куками), ManoliCode HighLighter(основа для подсветки кода).
Времени потрачено: 4 вечера.
Что нового сделано: Автоматическое определение механизма подсветки в зависимости от куска кода; PHP подсветка; Улучшенный алгоритм подсветки объектов для Csharp кода; Интегрирован inettuts в качестве компонента и виджетов; Возможность подсветки как чистым HTML'ом так и в виде CSS вставки; Добавлено выравнивание по левому краю; Возможность копирования как кода, так и конечного HTML'a по одному клику.
Что в планах: Автоматическое проставление тэгов для кода и поиск по тегам; Обсуждение куска кода при помощи F*Connect; Проверка орфографии(рус-анг) в куске кода с предложением возможных правильных вариантов; Мобильная версия =), позиционированная как Spell-Check.ME с возможностью перевода слов-фраз; Может еще какие мысли прийдут в голову.

Пример подсветки класса URLRewriter под катом, кому не влом - тестируйте =)
Copy Source | Copy HTML
  1. using System.Configuration;
  2. using System.Diagnostics;
  3. using System.Text.RegularExpressions;
  4. using System.Web;
  5. using System.Xml;
  6.  
  7. // nicked from http://www.codeproject.com/aspnet/URLRewriter.asp
  8.     public class URLRewriter : IConfigurationSectionHandler {
  9.         public static log4net.ILog Logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
  10.         protected XmlNode _oRules = null;
  11.  
  12.         protected URLRewriter() { }
  13.  
  14.         public string GetSubstitution(string zPath) {
  15.             Regex oReg;
  16.  
  17.             foreach (XmlNode oNode in _oRules.SelectNodes("rule")) {
  18.                 // get the url and rewrite nodes
  19.                 XmlNode oUrlNode = oNode.SelectSingleNode("url");
  20.                 XmlNode oRewriteNode = oNode.SelectSingleNode("rewrite");
  21.  
  22.                 // check validity of the values
  23.                 if (oUrlNode == null || string.IsNullOrEmpty(oUrlNode.InnerText)
  24.                     || oRewriteNode == null || string.IsNullOrEmpty(oRewriteNode.InnerText)) {
  25.                     Logger.Warn("Invalid urlrewrites rule discovered in web.config file.");
  26.                     continue;
  27.                 }
  28.  
  29.                 oReg = new Regex(oUrlNode.InnerText, RegexOptions.IgnoreCase);
  30.  
  31.                 // if match, return the substitution
  32.                 Match oMatch = oReg.Match(zPath);
  33.                 if (oMatch.Success) {
  34.                     return oReg.Replace(zPath, oRewriteNode.InnerText);
  35.                 }
  36.             }
  37.  
  38.             return null; // no rewrite
  39.         }
  40.  
  41.         public static void Process() {
  42.             URLRewriter oRewriter = (URLRewriter)System.Configuration.ConfigurationManager.GetSection("urlrewrites");
  43.  
  44.             string zSubst = oRewriter.GetSubstitution(HttpContext.Current.Request.Path);
  45.  
  46.             if (!string.IsNullOrEmpty(zSubst)) {
  47.                 Logger.InfoFormat("Rewriting url '{0}' to '{1}' ", HttpContext.Current.Request.Path, zSubst);
  48.                 HttpContext.Current.RewritePath(zSubst);
  49.             }
  50.         }
  51.  
  52.         #region Implementation of IConfigurationSectionHandler
  53.         public object Create(object parent, object configContext, XmlNode section) {
  54.             _oRules = section;
  55.  
  56.             return this;
  57.         }
  58.         #endregion
  59.     }
PS: Исходники с http://source.virtser.net/ не использовались.

Метки:   Категории:news | Code | life


BlogEngine - MultiPost

Как вы знаете, я транслирую свои записи в несколько популярных блогомест в интернете (за исключением ЖЖ). И это я делаю не с помощью встроенных средств копирования постов, а с помощью самописного модуля (Extension) для движка BlogEngine.Net, работающем под ASP.NET. Почему так? Да потому, что часто при задании копирования постов с помощью сторонних средств, таких как трансляции на Ya.ru, посты помещаемые в блог выпадают из поискового индекса и ссылки в них не учитываются.

1) Модуль получился расширяемый, что позволяет дописать копирование постов куда вам только захочется. В вышеуказанный архив я вложил только два класса, которые позволяют копировать посты на Хабр и на Ярушечку. Так как ярушечка имеет херовый интерфейс, и код выглядит очень сложным (и, кстати, не рабовает, если Вы недавно заходили под своим же аккаунтом с другой машины), а также придется добавить следующие строчки в web.config:
  1. <system.net>
  2.    <settings>
  3.      <httpWebRequest useUnsafeHeaderParsing="true" />
  4.      <servicePointManager expect100Continue="false"/>
  5.    </settings>
  6.  </system.net>


2) Далее, в настройках интерфейса у Вас появится такая вот картинка, позволяющая настроить копирование постов:
Отмечу, что все селективные значения прописываются вручную, так как в текущей версии BlogEngine нет возможностей задавать параметр группы настроек модуля в виде выбора из списка. Надеюсь это сделают в следующей версии, которую обещают в конце Января. Итак, первый параметр отвечает за копирование постов (bool=true/false). Второй за название категории, только из которой , если она указана, будут копироваться посты. Третий - BlogType - название класса отвечающего за копирование. Далее логин-пароль в удаленной системе. BlogParam - это дополнительный параметр, который может понадобиться для определенный систем. В частности для Яндекса я передаю номер моего блога, чтобы не извлекать его каждый раз. MaxAttempts(int) - количество попыток кпирования поста, если неуспех, то бросаем это дело. Последний - PostType(Public/Private/OnlyFriends) - тип записи. Как видим, для хабра стоит Private, что означает, что я планирую подредактировать запись и вставить в нее кат, прежде чем делать общедоступной хабрачанцам.

3) Из внутренностей работы модуля рассмотрю класс MultiPost:
  1. namespace MultiPost
  2. {
  3.     /// <summary>
  4.     /// Copy all your posts to blog at http://wow.ya.ru
  5.     /// You have to assign an login and password inside constructor
  6.     /// </summary>
  7.     /// <remarks>
  8.     /// Based on pure code - http://ya.topbot.ru
  9.     /// </remarks>
  10.     [Extension("Copy all your posts to blogs", "0.1.1", "http://ya.topbot.ru")]
  11.     public class MultiPost
  12.     {
  13.         /// <summary>
  14.         /// Name of Module
  15.         /// </summary>
  16.         private static String sExtensionName = "MultiPost";
  17.  
  18.         static protected ExtensionSettings _settings = null;
  19.         /*....*/
  20.     }
  21. }
Как видим к атрибутах класса задаются настройки модуля, чтобы BlogEngine его воспринял как расширение. Конструктор достаточно простой, подписываемся на событие о размещении нового поста:
  1. static MultiPost()
  2. {
  3.     // create settings object. You need to pass exactly your
  4.     // extension class name (case sencitive)
  5.     ExtensionSettings settings = new ExtensionSettings(sExtensionName);
  6.     /*.......*/
  7.     ExtensionManager.ImportSettings(settings);
  8.     _settings = ExtensionManager.GetSettings(sExtensionName);
  9.     Post.Saved += new EventHandler<SavedEventArgs>(Post_Saved);
  10. }
И кода происходит новый пост, то обрабатываем его создавая новый поток для этих целей
  1. /// <summary>
  2.  /// Occurs on new post
  3.  /// <remarks>
  4.  /// It opens a new thread and executes
  5.  /// because it takes some time to complete.
  6.  /// </remarks>
  7.  /// </summary>
  8.  private static void Post_Saved(object sender, SavedEventArgs e)
  9.  {
  10.      if (e.Action != SaveAction.Insert)
  11.          return;
  12.  
  13.      IPublishable item = (IPublishable)sender;
  14.  
  15.      //(HttpContext.Current == null || !HttpContext.Current.Request.IsLocal)
  16.      if (item.IsVisible)
  17.      {
  18.          //getting new thread to do all crap
  19.           ThreadPool.QueueUserWorkItem(delegate {
  20.               PostCycle(item);
  21.           });
  22.      }
  23.  }
  24.  
  25.  /// <summary>
  26.  /// Main process to post
  27.  /// </summary>
  28.  /// <param name="item"></param>
  29.  public static void PostCycle(IPublishable item){
  30.      //перечисляем все блоги, что активны...
  31.      DataTable dt = _settings.GetDataTable();
  32.      //pure code, coz i cant change Categories class
  33.      string catsline = "";
  34.      foreach (Category c in item.Categories)
  35.      {
  36.          catsline += c.Title + ",";
  37.      }
  38.      for (int i = dt.Rows.Count - 1; i >= 0; i--)
  39.      {
  40.          SettingsCollection sets = new SettingsCollection(dt.Rows[i].ItemArray);
  41.          if (!sets.Enabled ||
  42.              (!String.IsNullOrEmpty(sets.CopyOnTags.Trim())
  43.              && catsline.Contains(sets.CopyOnTags))
  44.              )
  45.          {//not allowed to post
  46.              dt.Rows.RemoveAt(i);
  47.          }
  48.      }
  49.      //lets finish the others
  50.      for (int i = dt.Rows.Count - 1; dt.Rows.Count > 0; i--)
  51.      {
  52.          Thread.Sleep(5000);
  53.          if (i < 0)//new cycle...bad...bad
  54.          {
  55.              i = dt.Rows.Count;
  56.          }
  57.          try
  58.          {
  59.              SettingsCollection sets = new SettingsCollection(dt.Rows[i].ItemArray);
  60.              Type tBlog = Type.GetType("MultiPost.Blogs."+sets.BlogType);
  61.              Object theBlog = Activator.CreateInstance(tBlog,
  62.                  new object[1] { sets });
  63.              Type[] paramTypes = {
  64.                      typeof(IPublishable)
  65.                        };
  66.              Object[] ps = new object[1] { item };
  67.              MethodInfo mDefaults = tBlog.GetMethod("ProcessItem", paramTypes);
  68.              if ((Boolean)mDefaults.Invoke(theBlog, ps))//if success
  69.              {
  70.                  dt.Rows.RemoveAt(i);
  71.              }
  72.              //failed, lets continue
  73.          }
  74.          catch(Exception e)//toomanyattempts
  75.          {
  76.              dt.Rows.RemoveAt(i);
  77.          }
  78.  
  79.      }
  80.  }
В основном цикле, мы создаем объект класса, и вызываем нужную функцию размещения поста, передавая ей настройки. Как видно попытка разместить пост происходит каждые 5 секунд. Обработка объектов идет на объекте Rows, что некрасиво, но просто. Остальное Вы можете найти внутри выложенного архива. PS: Чтобы иметь возможность править настройки рекомендую заменить компонент admin/Extension Manager/Settings.ascx.cs на файл, вложенный архив. Там исправлена некоторая ошибка в функции редактирования настроек.


Метки: ,   Категории:BlogEngine | Code | life


Кто я?

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

Последние комментарии

Не отображать

Topbot at FeedsBurner

Мои Твиты

Twitter января 14, 19:00
8 японок основали поп-группу для пропаганды криптовалют http://dlvr.it/QBC3cw https://twitter.com/f1ashr/status/952616326605938688/photo/1

Twitter января 7, 10:12
Белый шум защищен авторским правом на youtube http://dlvr.it/Q9DFXS

Twitter января 1, 20:52
Новогодние белки http://dlvr.it/Q8SyPZ https://twitter.com/f1ashr/status/947933468222152704/photo/1

Twitter января 1, 16:43
Популярные блогеры и посты за 2017 год http://dlvr.it/Q8RpTj https://twitter.com/f1ashr/status/947870931896082433/photo/1

Twitter января 1, 15:37
@true_policy @nickolas_vs @KremlinRussia @iremeslo Но Путин делает все, чтобы выборная система в глазах аборигенов стала нелегитимной.

Twitter января 1, 11:32
@true_policy @nickolas_vs @KremlinRussia @iremeslo Нужен не новый президент, а другой система. От демократии к респ… https://twitter.com/i/web/status/947792574697431040

Twitter декабря 31, 21:11
Самоуправляемые ездящие картошки http://dlvr.it/Q8MGMd

Twitter декабря 31, 13:34
Разбор сериала Медичи: Повелители Флоренции http://dlvr.it/Q8KDRt https://twitter.com/f1ashr/status/947460855972601857/photo/1

Twitter декабря 31, 11:32
Папа Римский выступил на TED http://dlvr.it/Q8Jjb5

Twitter декабря 31, 10:25
коломенский кремль: альтернативная история 2 http://dlvr.it/Q8JRYv https://twitter.com/f1ashr/status/947413453701971968/photo/1

Twitter декабря 31, 10:25
Суперлайки в Перископе http://dlvr.it/Q8JRYr

Twitter декабря 30, 15:16
Peace, Death! (Пиз Дец) http://dlvr.it/Q8Cv1S https://twitter.com/f1ashr/status/947124264259395584/photo/1

Twitter декабря 30, 15:16
Итоги 2016 года в Живом Журнале http://dlvr.it/Q8Ctw6 https://twitter.com/f1ashr/status/947124257149956096/photo/1

Twitter декабря 30, 13:39
Разбор сериала "Молодой папа" (теория общего знания, часть 22) http://dlvr.it/Q8CP7P https://twitter.com/f1ashr/status/947099721675370496/photo/1

Twitter декабря 30, 13:05
Механического медведя не починить - пятая песня FNAF http://dlvr.it/Q8CDG8 https://twitter.com/f1ashr/status/947091170844278784/photo/1

Twitter декабря 30, 10:55
Skype and Baidu links http://dlvr.it/Q8Bf03

Twitter декабря 30, 10:23
Яндекс атаковал Израиль http://dlvr.it/Q8BWKR

Twitter декабря 30, 10:23
По случаю 8 марта погасили статую свободы http://dlvr.it/Q8BW9V https://twitter.com/f1ashr/status/947050399160156161/photo/1

Twitter декабря 30, 10:23
Кто забанил робота? http://dlvr.it/Q8BW82

Twitter декабря 30, 10:23
Рутин тутин Путин http://dlvr.it/Q8BW8y

Мой твиттер

Копирайт

Все мысли, высказанные в блоге, являются моим мнением и за это мнение меня никто не забанит! Кроме того, никто не имеет право копировать материалы блога без использования ctrl+C/V!

© Copyright 2008