HTML5 Video for BlogEngine

Добавил возможность загрузки видео в блоги на базе BlogEngine. Видео проигрывается при помощи новейшего HTML5 и скриптов техаского прогера MediaElementJS. Жаль что пока не работает для мобильных устройств, а то получилось бы очень удобная замена Youtube. Ниже видео танцующего медведя.

[video src="Medved.mp4" width="420" height="360"]


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


BlogEngine 2.8

Вышла новая версия популярного блогового движка под .Net - BlogEngine. Как и с прошлой версией я не понимаю чем занимаются эти индусы во главе челом из Чикаго. По факту очередная версия с незначительными улучшениями (Обновление TinyMCE полезно, так как теперь позволяет вставлять видео с youtube корректно), в которой сохранились все теже Deadlock'и, что и ранее. Поэтому использовать движок в голом виде крайне не рекомендую. Не смотря на это он включен в каталог WebSites и предлагается многим для установки автоматически.

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

Метки:   Категории:BlogEngine | BlogsCloud


Про Твиттер и BlogEngine.NET

Индус опубликовал переделанный виджет Твиттера для BlogEngine, Это обновление вызвано было тем, что 10 октября, как некоторые могут заметить, Твиттер отключил выдачу данных по RSS, в связи с постепенным переходом на API v1.1. Отключение RSS выдачи вызывает проблему в том, что согласно Twitterizer.NET ленту пользователя можно получать только через функцию UserTimeline, которая подразумевает передачу данных oauth, то есть с аутентификацией. Однако, как умно поступил индус, оказывается всю ленту пользователя Твиттера можно сгружать напрямую, только уже не в виде RSS, а в виде XML или JSON:
Старая ссылка на RSS - https://twitter.com/statuses/user_timeline/t30p.rss (Not Valid) Новая ссылка на XML - http://api.twitter.com/1/statuses/user_timeline/t30p.xml Новая ссылка на JSON - http://api.twitter.com/1/statuses/user_timeline/t30p.json
То есть данные благоразумно вынесены на отдельный домен и добавлена версионность в виде единички.

Завершить пост хотелось бы опусом разработчиков BlogEngine, которые на днях заявили о выходе следующей версии 2.7, в которой по сути ничего нового, кроме обновления внутренних скриптов написания постов. Да и предыдущая версия 2.6 - содержала единственно обновление в виде "Мультиблогов", фишка которая полностью содрана с wordpress'a и которая, на мой взгляд, внесла неразбериху и в код и саму работу блогодвижка. Когда общая лента одного блога может быть сформирована как совокупность блогов внутри базы. Очевидно, что это по логике дублирует мультипользовательность, когда к одному домену-блогу имеют доступ несколько пользователей и они дружно выкладывают материалы. То есть разработка BlogEngine полностью стагнировала, как и у wordpress, после того, как основные разработчики системы ушли работать в Микрософт, а на смену пришли индусы.

Чтобы не быть голословным озвучу основные проблемы для блогдвижков, которые также поставили себе разработчики ЖЖ и которые позволили бы двигаться дальше. Их всего 3.
  • Azure + Multi Roles - чтобы один блог обслуживало несколько инстансов, то есть чтобы была масштабируемость блога. По факту это было сделано для blogscloud.ru, а то что предлагается как NuGet Package - все таже ненадежная одноинстансовая установка и неможет называться полноценным переносом в облако.
  • Mobile - у BlogEngine есть нормальная мобильная версия, но никто так и не занялся нормальным масштабированием картинок на лету. Это сложная задача, и хотелось бы чтобы опытные индусы ее решили.
  • Комментарии - до сих пор нет нормального решения для большого количества комментариев к посту. Всякие централизованные системы типа DISQUS тоже не устраивают, и медленно грузятся, и хранят контент не у нас. Да и децентролизованные блогодвижки должны быть максимально независимыми.
Этот список можно продолжить, но даже эту малость никто не делает. И для поисковиков ссылка на инструкцию, как перейти с блога wordpress на блог BlogEngine.NET.


Метки:   Категории:Blogs | Twitter | BlogEngine


Syria and BlogEngine

Обнаружил, что один из пропагандистских ресурсов американцев против сирийского народа работает на движке BlogEngine. При этом в крупнейших западных изданиях идет ссылки, что независимые блогеры интернета против режима Асада. По этому случаю запустил блог про Войну в Сирии, куда копируется вся правда о происходящих там событиях. К слову, все работает на движке BlogEngine портированном в облако под именем BlogsCloud.ru.

Метки:   Категории:BlogEngine | BlogsCloud


BlogEngine 1.6

Обновил свой основной блог ya.topbot.ru до недавно вышедшей версии BlogEngine 1.6. За полторы недели продукт успели скачать 2500 раз, что и позволяет судить о количестве активных блогеров, ведущих блоги на этой платформе. Да, до популярности wordpress'a еще далеко, но будем продолжать клепать плагины для движка. В частности, мой плагин "MultiPost", по копированию постов во все места блогосферы, на базе BlogsApi работает без изменений кода.

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

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


Tag Cloud for ASP.NET by jQuery

Ниже я раскажу как написать простенький компонент для отображения облака тэгов в ASP.NET. Пост содержит много кода. Для начала нам потребуется jQuery, который нужно где-нить подключиться на странице. Если Вы не знаете, что такое jQuery - то в поиск. Далее на странице, где у нас будет облако тэгов, а их может быть несколько, подключаем CSS и JS: Далее...

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


BlogEngine - MultiPost v0.1.4

Обновил расширение для BlogEngine позволяющее постить одновременно сразу в несколько блогомест. Качать архив файлов тут. Архив содержит 3 вещи, которые нужно поместить в корень вашего блога заменив старое - 1) папку admin с измененным файлом Settings, я там исправил ошибку с редактированием настроек 2) папку App_Code - в ней содержится код расширения, который вы сможете поправить, если нужно 3) Папку bin, которая содержит библиотеку BlogsAPI, в которой реализована работа с основными(lj,liru,yaru,blogsmail) блогохостингами. Не забудте внести изменения в web.config, как я писал ранее, а то не будет работать с Яндексом. Сейчас там реализовано копирование постов на Лиру и Яру. Но если есть желание, то можно дописать свой класс для копирования постов куда угодно, который имеет интерфейс IBlogHosting и поместить его в namespace MultiPostExtension.Blogs:Далее...

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


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 ноября 15, 14:44
Сериал Into the Badlands по мотивам сказки Путешествие на запад http://dlvr.it/Q14jp3 https://twitter.com/f1ashr/status/930808635369721858/photo/1

Twitter ноября 11, 07:54
Telerik AppBuilder закрывается http://dlvr.it/Q0MtYQ

Twitter октября 31, 09:39
Схема происходящего в России http://dlvr.it/PyT5Ct https://twitter.com/f1ashr/status/925296063606546432/photo/1

Twitter октября 28, 05:53
Проблема монетизации на Ютубе http://dlvr.it/Py01hT https://twitter.com/f1ashr/status/924152017450295296/photo/1

Twitter октября 27, 15:18
От диалектики Гегеля до криптовалюты и криторубля http://dlvr.it/Pxtypc https://twitter.com/f1ashr/status/923931841089826816/photo/1

Twitter октября 20, 01:26
Beep-Beep Im a Sheep (go crazy now) http://dlvr.it/Pwcn4M https://twitter.com/f1ashr/status/921185716796760065/photo/1

Twitter октября 19, 11:48
Что американские военные забыли у берегов КНДР? http://dlvr.it/PwW4hN https://twitter.com/f1ashr/status/920980032536788993/photo/1

Twitter октября 19, 00:58
По случаю 8 марта погасили статую свободы http://dlvr.it/PwRD5W https://twitter.com/f1ashr/status/920816280277475328/photo/1

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

Twitter октября 18, 19:19
Разбор сериала "Мир Дикого Запада" http://dlvr.it/PwP3ls

Twitter октября 18, 18:45
Реклама Зомби-Апокалипсиса в Москве http://dlvr.it/PwNq0G https://twitter.com/f1ashr/status/920722540372180992/photo/1

Twitter октября 18, 18:13
Peace, Death! (Пиз Дец) http://dlvr.it/PwNY8d https://twitter.com/f1ashr/status/920714366315503616/photo/1

Twitter октября 18, 14:23
Бог благословил Китай на второй этап http://dlvr.it/PwLjnX

Twitter октября 18, 08:23
Про самолет Ту-154 и убийство посла http://dlvr.it/PwHw6C https://twitter.com/f1ashr/status/920566078681444354/photo/1

Twitter октября 18, 08:23
Фильм Ученик от МинКультуры http://dlvr.it/PwHw5p https://twitter.com/f1ashr/status/920566072800972800/photo/1

Twitter октября 17, 14:12
Британец прожил 3 дня козлом http://dlvr.it/Pw7r64 https://twitter.com/f1ashr/status/920291330399408128/photo/1

Twitter октября 17, 13:06
Рутин тутин Путин http://dlvr.it/Pw7B2f

Twitter октября 17, 10:53
Skype and Baidu links http://dlvr.it/Pw5xcN

Twitter октября 17, 10:21
TwitterFeed прощается с нами через 2 недели http://dlvr.it/Pw5fc2

Twitter октября 17, 09:49
Google публикует Новые правила в отношении согласия пользователей http://dlvr.it/Pw5M5t

Мой твиттер

Копирайт

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

© Copyright 2008
carzando . Ежемесячно реклама на квитанциях МГТС Вашу рекламу точно увидят. .