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

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

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


icq: war is not over

Сегодня перестали работать вне не родные клиенты ICQ. Вываливается следующее сообщение:
=============================
Системное сообщение
=============================
ICQ не поддерживает используемую вами версию. Скачайте бесплатную авторизованную версию ICQ с официального web-сайта ICQ.
=============================
System Message
=============================
The version you are using is not supported by ICQ. Download a free authorized ICQ version from ICQ's official website.

Способов побороть это пока не найдено. Родного клиента я уж точно ставить не буду. На Хабре уже 5 тем и до сих пор решения нет.
PS: Поэтому прошелся по ним и проминусовал карму =).

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


Дополненая Реальность: Еще 2 года

Сегодня хочу поделиться мыслями возникшими по прочтению большого и познавательного интервью с Robert Rice'ом, который руководит фирмой Neogence, занимающейся разработкой программного сопровождения(SDK, tools) для дополненной реальности. Кроме того, я просмотрел уже половину киберпанковского аниме Denno Coil (subbed NOT dubbed как и рекомендуют) и включил в пост, некоторые "истинные знания" вынесенные из мультика.
1) Во-первых, порадовало, что Роберт считает, что до прорыва в области AR осталось менее 2х лет, то есть в 2010 году мы - простые пользователи - что-то обретем или увидим. Сам же Роберт планирует примерно через 6 месяцев выложить на YouTube демонстрацию ихнего прототипа.
2) Во-вторых, построение AR должна возглавить одна фирма, в задачи, которой станет реализация инфраструктуры доступности и работоспособности очков AR в большой части города. Частично эта фирма будет строить сеть своих точек доступа частично покупая или арендуя сети у уже имеющихся операторов того же WiFi или сотовой связи. Все зависит от нужной пропускной способности. Далее вся территория покрытая AR сдается в аренду различным фирмам, которым предоставляется заранее разработанный SDK и tools для создания виртуальных объектов.
3) Роберт называет одной из основных проблем - спам. Поэтому все приложения, которые становятся доступны пользователям проходят предварительную модерацию перед помещением в каталог, на подобии AppleStore. Иначе, по улицам у нас будут летать виртуальные члены.
4) Из аниме я понял, что обязательно, чтобы на очках была внешняя лампочка, которая бы сигнализировала пользователю или окружающим его людям, что есть виртуальные объекты, с которыми идет взаимодействие или требуется пользовательское действие. Это нужно для выведения пользователя из AFK'a, а также для уменьшения недопонимания между людьми без очков и людьми с очками. Это как с BlueTooth наушником для телефона, окружающим может показаться, что вы говорите сами с собою, свет светодиода может их остановить от вызова скорой.
5) Сомнительным видится возможность управления очками при помощи глаз (Например, два моргания обоими глазами как Enter). Для взаимодействия с AR объектами придется одеть трехпальцевые перчатки с сенсорами на концах пальцев. В частности перемещение по осям должно быть по аналогии с увеличением изображений на iPhone. С учетом правила буравчика, соединение среднего с большим пальцем должно давать перемещение изображение по оси Z и т.п. А если сильно повезет, то поднесение буквы V из двух пальцев ко лбу позволит стрелять лучем виртуального света =).
6) Как AR будет монетизирована? Роберт назвал 3 способа, я добавлю еще 2: Микротранзакции (очки - фактически электронный кошелек, который всегда с вами, замена телефона и КПК, позволит его использовать для платежей); Виртуальное представительства компаний (это замена созданию сайтов); Реклама(все рекламные щиты сквозь очки вы будете видеть по особому, вам будет крутиться другая реклама, более интерактивная); Продажа виртуальных вещей и услуг(не все способны создавать виртуальные вещи, поэтому появятся целые бизнесы по их производству, как в Second Life)
7) Как будет зваться новый виртуальный мир? Роберт отвергает примитивные варианты “augmented reality”, “mixed reality”, “matrix”, “metaverse”. Кроме того все доменные имена с metaverse уже заняты. Я бы предложил имя “RealmA“, просто нравится как звучит. Но сам, между делом, занял доменное имя - a-r.me, как сокращение от Augmented-Reality(for)ME. Может года через 4 буду там торговать виртуальной кармой для хабралюдей со скидкой. =).
8) Как привлечь в виртуальный мир пользователей? Наиболее простой способ - раздача виртуальных питомцем. А за хорошее поведение в виртуальном миру и за помощь в его развитие выдавать дополнительные бонусы. Это должно выглядеть как игра - хочешь играй, а хочешь нет. При этом таких ловушек разума нужно создать несколько.

И в завершение видео одного из уже существующих в Японии "петов" - Гейша. Рекомендую отключить звук, а то анимешные крики заполнят вашу комнату:

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


.Net: Программная печать документов MS Office

На днях решил поменять в одной программе печать документов с простого "webBrowser.ShowPrintDialog();" в браузере, на полноценное открытие MS Word с дальнейшей печатью. Но речь пойдет не о создании простого процесса winword.exe с передачей ему в качестве параметра нужного документа, а о библиотеках, которые созданы для разработчиков предусмотрительным Microsoft'ом. Заявлено, что решение работает под Office2003/2007, WinXP+, MSVS2005+. Краткое описание по работе с библиотекой приводит один из индийских девелоперов, номинированный как MVP (Microsoft Most Valuable Professional). Однако после строчек кода:
Copy Source | Copy HTML
  1. Object true = true;
  2. Object false = false;
...я почувствовал, что все шутки на баше про индийских программистов не были надуманными.
Далее я приведу шаги, с помощью которых, мне удалось осуществить задуманное и кусок кода. Итак, скачайте указанный выше архив с библиотеками. Внутри него будет также инструкция по интеграции этих библиотек в MSVS, но я рекомендую просто подключить нужную библиотеку, в моем случае это "Microsoft.Office.Interop.Word.dll", потому как я работаю только с MSWord, как Refference в проект. Далее, так как я хочу выводить на печать содержимое окна браузера, то я создал наследника от класса WebBrowser. Обратите внимание на функцию OpenInWord. Она создает вначале приложение офиса Application, потом сам документ, с которым работаем, загружая его из файла. Когда загрузка завершена, то делаем отображение самого офиса, выставляя значение Visible в true, так как по умолчанию офис будет работать спрятан:
Copy Source | Copy HTML
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Drawing;
  5. using System.Data;
  6. using System.Text;
  7. using System.Windows.Forms;
  8. using System.Text.RegularExpressions;// регулярные выражения
  9. using System.IO;//работа с файлами
  10.  
  11. namespace BestApplicationEvah
  12. {
  13.     public partial class WebBrowser_I : WebBrowser
  14.     {
  15.         public WebBrowser_I()
  16.         {
  17.             InitializeComponent();
  18.         }
  19.  
  20.         /// <summary>
  21.         /// Временная директория в которую складываются все файлы отправляемые на печать.
  22.         /// </summary>
  23.         private string printdirectory = "Rprint";
  24.  
  25.         /// <summary> Временная директория в которую складываются все файлы отправляемые на печать. </summary>
  26.         public string PrintDir { get { return printdirectory; } set { printdirectory = value; } }
  27.  
  28.         /// <summary>
  29.         /// Функция преобразования html в правильный формат для показа в doc
  30.         /// </summary>
  31.         /// <param name="file">Название файла. Желательно с расширением doc</param>
  32.         /// <param name="HTML">Html для преобразований</param>
  33.         /// <returns></returns>
  34.         private string HtmlToDocFile(ref string file, string HTML)
  35.         {
  36.             /*** много кода ***/
  37.         }
  38.  
  39.         /// <summary>
  40.         /// Функция сохраняет текущую страницу, как указанный файл и открывает его
  41.         /// </summary>
  42.         /// <param name="file">Имя создаваемого файла, должно иметь расширение DOC</param>
  43.         public void OpenAsDoc(string file)
  44.         {
  45.             this.OpenAsDoc(file, false);
  46.         }
  47.  
  48.         /// <summary>
  49.         /// Функция сохраняет текущую страницу, как указанный файл и открывает его
  50.         /// </summary>
  51.         /// <param name="file">Имя создаваемого файла, должно иметь расширение DOC</param>
  52.         /// <param name="newWindow">Открыть файл в новом окне?</param>
  53.         public void OpenAsDoc(string file, bool newWindow)
  54.         {
  55.             string err = this.HtmlToDocFile(ref file, this.DocumentText);
  56.             if (!String.IsNullOrEmpty(err))
  57.             {
  58.                 //вывод сообщения об ошибке
  59.                 MessageBox.Show(err, "Ошибка");
  60.             }
  61.  
  62.             //и отображаем доковский файл в браузере
  63.             this.Navigate(Directory.GetCurrentDirectory() + "/"+ this.printdirectory + "/" + file,newWindow);
  64.         }
  65.  
  66.         /// <summary>
  67.         /// Открытие HTML в MS Word...
  68.         /// </summary>
  69.         /// <param name="file">Название файла для сохранения информации</param>
  70.         public void OpenInWord(string file){
  71.             //создадим из контента файл
  72.             string err = this.HtmlToDocFile(ref file, this.DocumentText);
  73.             if (!String.IsNullOrEmpty(err))
  74.             {
  75.                 //вывод сообщения об ошибке
  76.                 MessageBox.Show(err, "Ошибка");
  77.             }
  78.  
  79.             try
  80.             {
  81.                 //Create an object for missing values. This will be passed whenever we don’t want to pass value
  82.                 Object missing = System.Reflection.Missing.Value;
  83.                 //Objects for true and false to be used in the word document for passing true or false.
  84.                 //Object true = true;
  85.                 //Object false = false;
  86.                 //Creating objects of word and document
  87.                 Microsoft.Office.Interop.Word.Application oWord = new Microsoft.Office.Interop.Word.Application();
  88.                 Microsoft.Office.Interop.Word.Document oWordDoc = new Microsoft.Office.Interop.Word.Document();
  89.                 object fileName = Directory.GetCurrentDirectory() + "/" + this.printdirectory + "/" + file;
  90.                 // You can keep it true if you want to open the file in readonly mode
  91.                 object readOnly = false;
  92.                 // we can keep it false if you want to open the file but not make it invisible
  93.                 object isVisible = true;
  94.                 //открытие файла
  95.                 oWordDoc = oWord.Documents.Open(ref fileName, ref missing, ref
  96.                   readOnly, ref missing, ref missing, ref missing, ref
  97.                   missing, ref missing, ref missing, ref missing, ref
  98.                   missing, ref isVisible, ref missing, ref missing, ref
  99.                   missing);
  100.                 //делаемся видимыми
  101.                 oWord.Application.Visible = true;
  102.                 //oWord.ShowMe();//смысл функции остался неизвестным
  103.                 //автопечать
  104.                 //oWord.PrintOut(ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,
  105.                 // ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,
  106.                 // ref missing, ref missing);
  107.             }
  108.             catch(Exception WordExc)
  109.             {
  110.                 MessageBox.Show(WordExc.Message, "Ошибка при работа с MS Word");
  111.             }
  112.         }
  113.     }
  114. }
И когда мы всетаки завершим работать с офисом, важно закрыть объекты, иначе процесс winword может остаться висеть:
Copy Source | Copy HTML
  1. //Closing the file
  2. oWordDoc.Close(ref oFalse, ref missing, ref missing);
  3. //Quitting the word application to release the memory.
  4. oWord.Quit(ref missing, ref missing, ref missing);

Остальные возможности работы в документами содержаться в многочисленных методах объекта oWord и требуют дополнительных экспериментов.

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


Философия микроблогинга

Настали времена, когда на западе почти каждый продвинутый гик имеет аккаунт на Twitter. А я вот до сих пор не обзавелся и не вижу смысла в нем. Однако, это заставило меня в очередной раз задуматься над некоторыми трендовыми особенностями микроблогинга, а также выдвинуть небольшую идею для проекта.

1) Ты туда не ходи, снег бошка попадет, совсем мертвым будешь
Популярность микроблогинга показывает, что любому информационному сообщению нужна рецензия или анонс. Нет времени осмыслять весь текст целиком.
2) Все, кроме мыслей
Выкладывать короткие сообщения модно было и раньше, и это делали в виде указания локации, настроений, музыки и т.п. При этом для этого выделялись специальные поля в блогдвижке. Однако микроблогинг стал обобщением всего этого одной системой с ограничением в 140 символов.
3) Нам не нужны комментарии
Полгода назад я говорил, что скоро исчезнут анонимные комментарии, сейчас скажу, на примере твитера, что комментарии вообще не нужны. Любой ваш комментарий должен быть как полноценный пост, который могут просматривать ваши друзья и тот чье сообщение сподвигло Вас на этот пост. Как пример реализации - посты на Яндекс, где есть опция "ответить комментарием в своем дневнике".
4) Общение тэгами
Когда есть мало места, то тщательнее выбираешь слова. Используя, во-первых более короткие, а во-вторых более выразительные слова. Именно такие слова, которые лучше всего подошли бы на роль тэгов. Как идею можно было бы реализовать проект ("nothing2tweet.com"), где бы проанализировать все слова из словаря по наличию в твитере и по частоте упоминания. Используя для этого стандартный поиск твитера. Это позволит составить 1) "справочник тэгов" 2) придать словам, имеющим одинаковые склонения веса по частоте употребления (нужно для морфологического анализатора) 3) найти неиспользуемые слова, а значит имеющие более удобный и очевидный синоним или форму сокращения. В итоге хотелось бы видеть графики упоминаний по аналогии с "пульсом блогосферы", только для твитера, но это скорее пожелание к ихним разработчикам.
5) Умных мало
Наглядная демонстрация параметров подписки(Follows и Followed by) показывает, что большинство идей мы берем у других, а тех, кто приносит что-то новое из жизни в интернет - мало. Поэтому было бы интересно построить ориентированный граф и посмотреть из кого больше вытекает сообщений, нежели втекает.
5) Часть целого
Для меня мог бы оказаться полезным только как средство обновления какой-то части чего-то большего. Поэтому уже появились многочисленные плагины для интеграции твитера во многие блогсистемы. Но мешать блоги с блогами как-то глупо. Другое дело, если по твитеру я буду обновлять, например, свой OpenID профиль. Одно сообщение = одна команда. Для этого надо стандартизировать формат, определив команды для извлечения, добавления, удаления и правки полей профиля.
Это, конечно же, не все тренды, а только те, которые мне хотелось бы затронуть.

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


few-words

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

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

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


YandexUtility 2009 reviewed

С наступлением нового года устарела лицензия на написанной мною 2 года назад программе YandexUtility, поэтому я обновил программу.
Что это? Это программа, написанная на Csharp, для анализа блогосферы на основе данных, получаемых из яндекса.
Что изменено? Исправлено большинство регулярных выражений, которые успели устареть, а также обновлена лицензия на морфологический анализатор до конца года.
Что делает? Позволяет отслеживать рейтинги виртуалов; читать ТОП; читать баш =); анализировать частотное упоминание слов в конкретной ленте, в комментариях к ней и в заданной теме дня; анализировать упоминание слов в темах, на которые выбранный блогер чаще всего пишет комментарии; убирать некоторые известные банеры(реклама в жж) путем автоматического редактирования hosts; делать вставки в блог с результатами анализа;
Есть ли руководство пользователя? Нет. Но внутри программы есть некоторые комментарии. Умные люди должны разобраться.
Установщик последней версии можно взять тут - YandexUtility1.1beta_setup.exe
Пример некоторой аналитики, с использованием программы, под катом:
Для начала я посмотрел упоминания слов в постах Самизнаетекого за текущий год, то есть за последние 10 дней:
Top30 самых используемых слов в ленте tema.livejournal.com/data/rss

БЫТЬ:8 ЕСТЬ:7 СМОТРЕТЬ:6 TEMALEBEDEV@GMAIL.COM:6 ХОРОШИЙ:5 СДЕЛАТЬ:5 ДЕЛАТЬ:5 БЛЯТЬ:4 ОДИН:4 РАННИЙ:4 РАБОТАТЬ:4 WWW:4 ПИЗДЕЦ:4 НАПИСАТЬ:4 УЗКИЙ:4 СТАТЬ:3 СОВЕРШЕННЫЙ:3 ПРИСЛАТЬ:3 ЗАПОМНИТЬ:3 ЧИТАТЬ:3 МОЧЬ:3 ПИСАТЬ:3 ПЕРЕТЬ:3 ПЕРВЫЙ:3 НАЧАТЬ:3 СЛУШАТЬ:2 ЛЮБИТЬ:2 ИНТЕРЕСНЫЙ:2 ПРИЕЗЖАТЬ:2 ЗНАТЬ:2

Всего обработано 26 постов, найдено 846 слов из них уникально 602
Длина поста(слов): 5(Минимальная),1015(Максимальная),115,5769(Средняя)
(c) flashr и его программа YandexUtility

Потом хотел было проанализировать комментарии в его жжурнале, но, как оказалось, Яндекс забил на комментарии оставляемые в журнале Темы. А Единственная запись, на которую отреагировал согласно Яндексу СамВеликий содержала следующие слова: Оптимус, говноджип, Дэнги. Но так как запись всего одна то и анализировать нечего.

И в завершение разбор слов в теме про газовый конфликт:
Top30 самых используемых слов в ленте 'Газовый конфликт с Украиной'

БЫТЬ:106 ГАЗОВЫЙ:103 МОЧЬ:86 УЗКИЙ:69 ХОТЕТЬ:66 ЕСТЬ:62 СКАЗАТЬ:45 ГОВОРИТЬ:42 ЗНАТЬ:41 ДОЛЖНЫЙ:39 ЮЩЕНКО:37 КОНЕЧНЫЙ:37 ДЕТЬ:36 ПОНИМАТЬ:35 ИДТИ:34 СЧИТАТЬ:33 ИМЕТЬ:33 ОДИН:33 СДЕЛАТЬ:32 ЯВЛЯТЬСЯ:32 ДЕЛАТЬ:32 ДУМАТЬ:31 РОССИЙСКИЙ:31 МНОГО:30 СТАТЬ:30 РОСУКРЭНЕРГО:30 ЭТОТ:29 ВИДЕТЬ:29 ПЛАТИТЬ:28 СВОЙ:28

Всего обработано 200 постов, найдено 14423 слов из них уникально 4793
Длина поста(слов): 6(Минимальная),2588(Максимальная),294,52(Средняя)
(c) flashr и его программа YandexUtility

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


Пару слов про опросы

Был на хабре один человек, который хотел за дорма получить идею к реализации. Я ему тоже написал мини идейку основанную на парадаксе, что F*Connect построенный на базе социальныз сетей, не будет использваться большинством пользователей соц. сетей, так как создан для автономных сайтов:
Считаю перспективным создание и развитие сервисов, реализующих функционал смежный с поставляемым в гаджетах F*Connect. Отмечу, что эти гаджеты ориентированы в первую очередь на социализацию простых сайтов. Однако же, как мы знаем, большая аудитория обитает на привычных соц.сетях. Поэтому, как идею, можно реазизовать сервис, позволяющий простому блогеру создать "голосование" и поместить в любой свой блог, как html блог. Главная особенность такого сервиса в том, что голосующий пользователь будет логинится по OpenID(*ID) и в настройках можно будет ограничить голосующий по OpenIdProvider'u. То есть функциональная прослойка между пользователями и блогохостингом, но ориентированная на пользователей всех социальных сетей. Тесты и голосовалки всегда были и будут популярны в блогосфере. Кроме того, компании проводящие в блогосфере рекламные акции будут заинтересованы в дополнительном платном функционале, это еще стоит обсуждать.
Основное направление предлагалось голосовалки. И что я вижу читая новости за праздники? Даже для "неполноценного" твитера создан проект http://twtpoll.com/. Красиво и просто. Осталось только понять, что твитером жизнь не ограничмвается и расширить этот проект на всю блогосферу.

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


Шаг в будущее

Наверное многие из вас знают, что такое Augmented Reality - "дополненная реальность" или, как ее зовут некоторые старички в этой области, "расширенная реальность". Но не многие знают, что на проходящей сейчас в Лас Вегасе выставке (8-11января), компания Vuzix продемонстрировала устройство Wrap 920AV. Дада, это очки, которые скоро станут ассоциироваться у обывателя с дополненной реальность, а не телефон. Но это лишь мое мнение. Скорее всего эти очки будут соединяться с телефоном для выхода в сеть интернет и доступа к гпэсу. Замечу, что в детальном описании заявлено 6 часов работы от батареек, что уже круто. Очки должны появится в продаже к октябрю этого года. И если взглянуть на их предшественника AV310, то он стоил порядка 300баксов и был быстро раскуплен. Новую партию обещают 15 января, но думаю нет смысла заказывать, дождемся новых.

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

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


2009+

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

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


Blogs: Current State

Вот и завершился год, многое было сделано для развития интернета, но пожалуй самое важное, что из-за кризиса в новом году остануться лишь наиболее перспективные направления развития. (На меня же до сих пор давят, чтобы я выработал некоторые из них, ну да ладно, что-нить придумаю.)

А пока давайте взглянем, как выглядит наша блогосфера на конец года. Для это я нарисовал маленькую схемку, с общим посылом "Место аналитики в блогосфере". См. прик. vsd файл.

Метки:   Категории:Semantic Web | Analytics | trend


технические предновогодние мысли

1) Сейчас развелось куча различных openid-like систем, и как очевидно, каждый идентификатор в таких системах должен включать следующее: "точку вызова" (в общем случае service-host url), реальный идентификатор (сейчас это имя, в дальнейшем мы можем прийти на уровень национального гос.номера человка), графическое изображение(аватарка и/или фотография) и последнее xml описание в произвольной схеме для объекта в зависимости от используемой системы. Такие вот 4 свойства и их бы было бы достаточно, если бы поток информации шел в одном направлении от Openid провайдера к некоторому порталу. Однако, основываясь на опыте FacebookId - можно видеть, что OpenID Provider заинтересован знать о тех действиях, которые выполняются, с выдаваемым openid. Поэтому можно говорить еще и о 5м свойстве (делегате) для идентификаторов - webmethod - для обработки всех уведомлений о действиях выполняемых с openid идентификатором. То есть делегат типа
  1. Boolean BackIdPing(XmlDocument xml);
где схему для xml еще предстоит определить. Но базу очень легко построить из набора стандартных действий, которые доступны пользователям виджетов F*Connect.

2) Многие уже называют FriendConnect как FriendSense, подчеркивая тем самым, что скоро за размещение этих гаджетов вебмастерам будут доплачивать по аналогии с рекламой сетью AdSense. Такой шаг должен стать ответным ходом на появление промежеточных проектов типа Motion, желающих интегрировать в одном месте разные возможности от разных гигантов.

3) При чтении новостей мы часто разворачиваем браузер на весь экран и т.п. Очень часто большую часть новости занимают сопровождающие ее картинки. Мне кажется логичным добавить в RSS-читалки уничтожение картинок по двойному клику мышки, а не увеличение, как это сделано во многих новостных лентах. А ссылку на просмотр всех картинок, связанных с новостью помещать отдельно после новости.


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


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


Spam

В первый день зимы в Израиле вступил новый закон о спаме, о котором пишет долбоеб, добавляя интересные комментарий, что в нашей стране, в которой много интернетчиков(Костя Рыков, Илья Пономарёв и Роберт Шлегель) пришли в Думу и видеоблогер стал президентом, до сих пор нет закона о спаме.

Не долго думая я полез с таким вопросом к окружению вышеназванных людей и достаточно быстро получил исчерпывающий на мой взгляд ответ. Отрывки беседы (Я) привожу ниже:
-(Д) У нас нет определения спама.
-(Я) Да это просто, счас держи: "Рассылка нежелательных сообщений большому числу людей (более 1000) с целью донести до них информацию о товаре или услуге". "Нежелательных" подразумевает, что человек не был подписан. Многие почтовики, такие как gmail не позволяют отсылать более 500 писем с одного аккаунта.
-(Д) Как проверять будем? скольким он разослал?
-(Я) Ну так МВД уже следит за всем! По факту на стороне получателя - то есть на стороне крупных почтовых сервисов, таких как mail.ru
-(Д) А кто мониторить будет?
-(Я) Админы - почтовиков - обязать их мониторить спам и регистрировать случаи так, чтобы потом это имело силу
-(Д) У, брат... ты представляшь насколько сие сложно? должно быть унифицированное и сертифицированное ПО, которым необходимо будет фиксировать факт спама, почтовики должны будут получать дотации от гос-ва на хранение информации о наличествующем спаме. а денежки фед. бюжета? далее. вот идит у тебя мэйл. ру - почтовик и фиксируеит, что тысячи человек на его почте пришла тысяча писем с одного адреса? содержание писем является конфеденциальной информауцией. то есть. необходимо, чтобы человенк, которому пришло письмо обратился в соотвествующие органы или администарцию сервера с письменным заявлением (причем не по электронке) с тем, что против него совершено противоправное деяние, называемое СПАМ! и это должно быть сделано 1000 раз минимум, а если спамер ограничился 999 штук - то хрен!!!!
-(Я) А чем электронное заявление о том, что притив меня совершен "спам" не пойдет?
-(Д) Потому, что электронный документооборот в россии не имеет силы, в качесте заявления в органы
-(Я) Понятно, то есть наша "система решения проблем" работает так, чтобы не создавать для себя лишней работы.
-(Д) Надо менять всю систему, безусловно... в рамках пакета законов об электронном документо обороте правоохранительных органов. Но какие будут траты на все это - мне пиздец страшно представить. Да и траты на любую фигню - это ещё и откат и распил.


ЗЫ: Вспомнился недавно вышедший фильм про терористов смертников, зовется Traitor, на руском его пока нет вроде. Так как в США вся почта мониториться, то там смертникам инструкции передавались письмом в виде драфта, то есть кто-то заходил в почтовик, писал письмо, сохранял как черновик и выходил, заходил следующий и смотрел черновик. Задумка хорошая, но я уверен, что в гугле и драфты автоматически мониторятся.

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


Winter

Кстати, с началом Зимы всех! Может, наконец-то эта слякоть закончится и выпадет нормальный белый снег.

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


Best Blogs 2008

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

В номинации самый необычный блог на мой взгляд заслуженно победил Мараточка. Блог прикольный, но быстро надоедает вся эта затея с рисованием точек. Однако автор немало усилий приложил, чтобы заспамить этими картинками ЖЖ, что и привело его к успеху.

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

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

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


SMSCost?

Если ты не лох, то отправь SMS на короткий номер ****
Давно известная шутка, которая не теряет актуальности судя по блогам. А уж после перехода однокласников на платные СМСки для регистрации, в нашей стране не осталось интернетчиков незнакомых с таким способом оплаты услуг.

Сегодня столкнулся с сайтом SMSCost.ru, описание которого размещено тут. Сервис позволяет зная короткий номер, на который Вам предлагают отправить СМС, узнать, сколько это будет стоить. Поигравшись с разными номерами, я к сожалению, пришел к выводу, что про большинство номеров ничего не известно (вводил номера со всяких благотворительных акций типа сбора средств или покупки музыки, где каждая смска должна стоить по баксу). В то время как при вводе номеров от известных в интернете мошенников, система нормально отображала суммы.

Все это подозрительно прежде всего тем, что непонятно как этот сервис устроен. То ли он берет информацию у самих операторов, то ли реально сидит человек который собирает информацию из интернета, то ли они сами проверяют стоимость СМС сообщения отправляя СМСки на разные номера =).

А может это и сами мошенники создали сайт, чтобы убедить Вас не верить разным сообщениям в интернете. Например сервис утверждает, что берет 50р, сайт будет говорить, что берет 40р до 100р в зависимости от оператора, а на самом деле будет всегда брать 100р и т.п.

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


Маленький холивар

На хабре один умеелец опубликовал статью на 5-7 экранов, с громким названием "Закат Веба?". В этой статье он не только попытался показать свою крутость осведомленность в техническом плане, но и прошелся по многим технологиям с однозначной оценкой. Одного первого было достаточно, чтобы народ навалился комментариями и подключился к засиранию темы. А смысл всей статьи, если отбросить все громкие слова написанные автором, в том, что выразительности стандарта HTML4 недостаточно для современных сайтов и, что скоро будет HTML5 и мы должны радоваться.

Я же, от лица asp.net разработчика прокомментирую статью так: 1) Нет такого слова "веб", если только "web", и если первому слову прийдет конец, то оно и к лучшему.
2) Для меня Html во всех его проявлениях давно умер, вся физическая модель заканчивается на XML и XMLShema, а поверх строятся логические объекты. А всякие цвета и красивости, благодаря MVC модели никак не затрагивают разработчика. Думаю для большинства ежедневных посетителей интернета HTML тоже давно умер, есть только красивый внешний вид сайта.
3) Да, asp.net - это офигенный язык, абстрагирующий от проблемы физического представления данных, но большинство рускоязычных кодеров этого еще не осознали. Даже блоги у нас в России предпочитают делать на WordPress'e, так как не знают других движков.
4) В конце упоминается язык запросов в семантическом вебе SPARQL. В задачи подобных языков ставится абстракция уже пользователя(а не программиста) интернета от источников данных. Но до этого всего еще очень далеко.

Что-то я записался, пора убегать с работы...

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


Развлекательный пост.

Решил Вас поразвлечь и в этот важный для всего российского интернета день написать про трусы. Про женские трусы, которые смогут удивить любого отсутствием завязочек. Как они носятся можно видеть на фотографиях ниже. Думаю на щетине лобка будут вполне крепко держаться =).Каждая снегурочка еще успеет научиться их носить до НовогоГода, чтобы порадовать своего деда мороза. Стоимость такого "прикола" примерно 1500р, подробнее по ссылкам.

ЗЫ: специально потратил 20 минут поисков во френдленте, чтобы раскопать пост Монста, у которого я эту тему и подсмотрел.

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


Кто я?

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

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

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

Topbot at FeedsBurner

Мои Твиты

Twitter апреля 29, 22:26
Папа Римский выступил на TED http://dlvr.it/P1Zxm9

Twitter апреля 24, 20:08
Категории роликов Ютуба http://dlvr.it/Nz9cM7 https://twitter.com/f1ashr/status/856600659302375424/photo/1

Twitter апреля 22, 15:40
Очередной летающий электро-автомобиль http://dlvr.it/NyGMJT https://twitter.com/f1ashr/status/855808436012851201/photo/1

Twitter апреля 19, 21:31
Реклама Зомби-Апокалипсиса в Москве http://dlvr.it/Nx0rsc https://twitter.com/f1ashr/status/854809726076440576/photo/1

Twitter апреля 18, 07:18
Спустя 18 лет в ЖЖ запустили поиск по постам http://dlvr.it/NwBWxp

Twitter апреля 17, 14:10
Почему в окружности 360 градусов? http://dlvr.it/NvtC6F https://twitter.com/f1ashr/status/853973973616312320/photo/1

Twitter апреля 16, 01:06
Итоги 2016 года в Живом Журнале http://dlvr.it/NvHvXk https://twitter.com/f1ashr/status/853414154534662144/photo/1

Twitter апреля 16, 00:34
3 февраля стартует год огненного Петуха http://dlvr.it/NvHZw0

Twitter апреля 16, 00:34
Дед Мороз похищает бизнес-женщин на НГ http://dlvr.it/NvHZr0

Twitter апреля 16, 00:01
Про самолет Ту-154 и убийство посла http://dlvr.it/NvHC8m https://twitter.com/f1ashr/status/853397930811637761/photo/1

Twitter апреля 15, 23:29
Идеальное решение для Курильских островов http://dlvr.it/NvGs8Q

Twitter апреля 15, 21:51
Планета обезьян в американской армии http://dlvr.it/NvFjBV https://twitter.com/f1ashr/status/853365093144252416/photo/1

Twitter апреля 15, 19:42
Вирусный ролик из Канады http://dlvr.it/NvD5wt https://twitter.com/f1ashr/status/853332744771780608/photo/1

Twitter апреля 15, 19:10
Главное противоречие косметологии http://dlvr.it/NvCdbf

Twitter апреля 15, 18:38
Разбор фильма Варкрафт (Warcraft: The Beginning) http://dlvr.it/NvCC2s https://twitter.com/f1ashr/status/853316527776448512/photo/1

Twitter апреля 15, 18:06
Что американские военные забыли у берегов КНДР? http://dlvr.it/NvBkb7 https://twitter.com/f1ashr/status/853308470224764929/photo/1

Twitter апреля 15, 17:52
Атака на Интернет продолжается - kill internet 5 http://dlvr.it/NvBXkV

Twitter апреля 15, 16:13
Памятник крестителю Владимиру http://dlvr.it/Nv95XM https://twitter.com/f1ashr/status/853280061830578176/photo/1

Twitter апреля 15, 16:13
Насколько инновационен Микрософт http://dlvr.it/Nv95QP

Twitter апреля 15, 15:39
Непонятные конкурсы в Твиттере http://dlvr.it/Nv8Zkw https://twitter.com/f1ashr/status/853271473045118976/photo/1

Мой твиттер

Копирайт

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

© Copyright 2008