bitl.y to T.CO

Сегодня Твиттер анонсировал, что скоро перейдет с Bit.ly на купленную ранее t.co, то есть 2 символа выигрыш. Смертью это Bitly не грозит, так как популярнейший сервис используется многими сайтами в том числе и под "выделенными" своими именами. Однако, видимо мне придется в т30п перейти тоже на t.co , чтобы более точно отслеживать количество кликов по топовому посту с учетом реакции микроблогов.
ЗЫ: следующим постом расскажу про google developers day 2011 и про google plus.

Метки:   


gdd2011

Небольшое видео мероприятия гугла ниже:

Из интересного расказали про goole plus, что скоро и там появятся страницы брендов. Также, что у них плотная интеграция с Chrome, поэтому если вы пользуетесь хромом, то вся информация о вас уже есть в Google plus хотите вы этого или нет.
На секции венчурных капиталистов "русские американцы" поделились, что основной минус ведения бизнеса в России - бюрократия, а основной плюс - можно легко людей увольнять.

Метки:   


Аналитика по соц.сетям 2011

Свежий аналитический обзор за 2011 в PDF пользования соц.сетями в Америке.
Из интересного
1) Почти вся молодежь - 98% - сидит в соцсетях, то есть дальнейшего взрывного роста уже можно не ожидать?
2) Половина - сидят в фейсбуке.
3) При этом проводят в фейсбуке и твиттере заметно больше времени чем в GooglePlus. (непонятна методика подсчета, ибо в том же фейсбуке много перегрузок страниц, а в гугле и твиттере преобладают подгрузки через AJAX)
4) При этом из соц.сети 16%(в лидерах) трафика - это переход в поисковики. То есть люди имеют не все, что хотят в соц.сетях. При этом только 4% - переходы на медиа и новости, и 3% - на телевизионные каналы. Тут выводов не сделаешь.

Метки: ,   


Azure news

Облачные вычисления микрософта продолжают идти в ногу со временем
Уже доступен AzureToolkit for Windows 8
Для стартапов сделана программа бесплатного Азура на год с экономией аж до 3500у.е., но не спешим радоваться, так как это как всегда не для России, а во вторых требуется оформление BizSpark и лицензионного MSVS+MSDN , что и есть дуриловом на примерно такие же деньги


Метки: ,   


bb AdSense

Выяснилась причина, по которой гугл втихаря крутил у меня в блоге рекламу 3 месяца, а показы незасчитывал. А вину этому стал пост http://t30p.livejournal.com/14701.html. В правилах гугла написано, что блокируются сайты, которые содержат либо 1) непристойные или провокационные изображения 2) материалы, содержащие грубую или ненормативную лексику, в том числе эротические рассказы 3) сексуальные советы или рекомендации 4) эротические игрушки и продукция и т.д. А именно этим наполнена блогосфера, особенно по пятницам. В общем 100 у.е. в год не стоят того, чтобы посетители видели объявления. Все, отключаю AdSense в блогах, а жаль, ведь планировал окупить платный аккаунт за год.

UPDATE: После публикации этой записи и отключения рекламы в AdSense, СУП тут же перевел мой блог t30p@lj в режим read-only за публикацию полгода назад поста про навального. Собственно текст разбирательства с конфликтной комиссией. И копия самого поста про навального.

Метки: ,   


BE Themes contest

Разработчики BlogEngine заинтересованы в улучшении дизайна для BE и проводят конкурс на лучшую тему оформления для БЕ. В призах Xbox 360, да WP7. Если у кого есть желание поучавствовать, то пишите мне, подкину идей и просто денег на создание тем оформления блогов. А пока с верстальщиками шаблонов одни проблемы. Как только слышат ASP.Net, то сразу пропадают.

Метки:   


Amazon Browser

Амазон изобрел Opera Turbo и продвигает под брендом Silk. Перво-предшественником всего этого является простой RDP(удаленный десктоп) на VPS(виртуальный выделенный сервер) с мобильного телефона. И уже на сервере открывается браузер с сайтом. Так как амазон крупнейший поставщик виртуальных EC2 (считай тоже VPS), то он решил найти им применение через мобильный интернет.

Метки:   


asp.net 4.5

Уже много хорошего было сказано про следующую версию asp.net , которая выйдет вместе с windows server 8.
Для тех кто пропустил. Вот видео про минимизацию и заметное ускорение открытия страниц. И вот еще общая концепция улучшений. Можно видеть, что большой упор сделан на асинхронные операции. В частности по получению ответов из WebResponse. Сейчас же приходится использовать много второстепенного кода для реализации асинхронного сичтывания. Ниже приведу фрагмент, который используется для асинхронной обработки ответов получаемых из ЖЖ. После нескольких ДДОС атак они стали параноидальными и включили в ответах chuncked, чтобы контролировать загруженность канала, поэтому синхронное считывание очень часто проваливается. Выход из этой проблемы реализуется следующим классом, который надеюсь станет неактуальным в 4.5:
Copy Source | Copy HTML
  1. #region Ассинхронное чтение из документации
  2.     public class RequestState
  3.     {
  4.         // This class stores the State of the request.
  5.         const int BUFFER_SIZE = 1024 * 256;
  6.         public StringBuilder requestData;
  7.         public byte[] BufferRead;
  8.         public HttpWebRequest request;
  9.         public HttpWebResponse response;
  10.         public Stream streamResponse;
  11.         public Encoding encoding;
  12.         public FileStream FileToWrite;
  13.         public RequestState()
  14.         {
  15.             BufferRead = new byte[BUFFER_SIZE];
  16.             requestData = new StringBuilder("");
  17.             request = null;
  18.             streamResponse = null;
  19.             encoding = Encoding.UTF8;
  20.             FileToWrite = null;
  21.         }
  22.     }
  23.  
  24.     class HttpWebRequest_BeginGetResponse
  25.     {
  26.         public ManualResetEvent allDone;
  27.         const int BUFFER_SIZE = 1024 * 256;
  28.         const int DefaultTimeout = 2 * 60 * 1000; // 2 minutes timeout
  29.  
  30.         // Abort the request if the timer fires.
  31.         private static void TimeoutCallback(object state, bool timedOut)
  32.         {
  33.             if (timedOut)
  34.             {
  35.                 HttpWebRequest request = state as HttpWebRequest;
  36.                 if (request != null)
  37.                 {
  38.                     request.Abort();
  39.                 }
  40.             }
  41.         }
  42.  
  43.         public RequestState ReadAsyncWebResp(HttpWebRequest myHttpWebRequest, string filepath)
  44.         {
  45.             // Create an instance of the RequestState and assign the previous myHttpWebRequest
  46.             // object to its request field.  
  47.             RequestState myRequestState = new RequestState();
  48.             allDone = new ManualResetEvent(false);
  49.             myRequestState.request = myHttpWebRequest;
  50.             //Open a file to write if needed
  51.             if (!String.IsNullOrEmpty(filepath))
  52.             {
  53.                 myRequestState.FileToWrite = File.Open(filepath, FileMode.OpenOrCreate);
  54.             }
  55.  
  56.             // Start the asynchronous request.
  57.             IAsyncResult result =
  58.               myHttpWebRequest.BeginGetResponse(RespCallback, myRequestState);
  59.  
  60.             // this line implements the timeout, if there is a timeout, the callback fires and the request becomes aborted
  61.             ThreadPool.RegisterWaitForSingleObject(result.AsyncWaitHandle, TimeoutCallback, myHttpWebRequest, DefaultTimeout, true);
  62.  
  63.             // The response came in the allowed time. The work processing will happen in the 
  64.             // callback function.
  65.             allDone.WaitOne();
  66.  
  67.             // Release the HttpWebResponse resource.
  68.             myRequestState.response.Close();
  69.             if (myRequestState.FileToWrite != null)
  70.             {
  71.                 myRequestState.FileToWrite.Close();
  72.             }
  73.             allDone.Close();
  74.             return myRequestState;
  75.         }
  76.  
  77.         private void RespCallback(IAsyncResult asynchronousResult)
  78.         {
  79.             try
  80.             {
  81.                 // State of request is asynchronous.
  82.                 RequestState myRequestState = (RequestState)asynchronousResult.AsyncState;
  83.                 HttpWebRequest myHttpWebRequest = myRequestState.request;
  84.                 myRequestState.response = (HttpWebResponse)myHttpWebRequest.EndGetResponse(asynchronousResult);
  85.  
  86.                 // Read the response into a Stream object.
  87.                 Stream responseStream = myRequestState.response.GetResponseStream();
  88.                 myRequestState.streamResponse = responseStream;
  89.  
  90.                 // Begin the Reading of the contents of the HTML page and print it to the console.
  91.                 IAsyncResult asynchronousInputRead = responseStream.BeginRead(myRequestState.BufferRead,  0, BUFFER_SIZE, new AsyncCallback(ReadCallBack), myRequestState);
  92.                 return;
  93.             }
  94.             catch (WebException e)
  95.             {
  96.             }
  97.             allDone.Set();
  98.         }
  99.         private void ReadCallBack(IAsyncResult asyncResult)
  100.         {
  101.             try
  102.             {
  103.  
  104.                 RequestState myRequestState = (RequestState)asyncResult.AsyncState;
  105.                 Stream responseStream = myRequestState.streamResponse;
  106.                 int read = responseStream.EndRead(asyncResult);
  107.                 // Read the HTML page and then print it to the console.
  108.                 if (read >  0)
  109.                 {
  110.                     if (myRequestState.FileToWrite != null)
  111.                     {
  112.                         myRequestState.FileToWrite.Write(myRequestState.BufferRead,  0, read);
  113.                     }
  114.                     myRequestState.requestData.Append(myRequestState.encoding.GetString(myRequestState.BufferRead,  0, read));
  115.                     IAsyncResult asynchronousResult = responseStream.BeginRead(myRequestState.BufferRead,  0, BUFFER_SIZE, new AsyncCallback(ReadCallBack), myRequestState);
  116.                     return;
  117.                 }
  118.                 else
  119.                 {
  120.                     responseStream.Close();
  121.                 }
  122.  
  123.             }
  124.             catch (WebException e)
  125.             {
  126.             }
  127.             catch (IOException eio)
  128.             {
  129.             }
  130.             //пофиг на ошибки. что скачалось, то скачалось
  131.             allDone.Set();
  132.         }
  133.     }
  134.     #endregion

Метки:   


WinAzure and PnP2011

На последней конференции микрософта PnP2011 пожалуй самым интересным было EntLib и WASABi для динамического масштабирования и вообще все что может потребоваться для логирования. Пока не пользовался, но выглядит внушительно.
В тему Windows Azure - выяснилось что есть важный параметр upgradeDomainCount в CSDEF, позволяющий поочередно обновлять инстансы, не пользуясь VIP опцией.
Другой важный параметр - <LocalStorage cleanOnRoleRecycle="true" sizeInMB="15000" /> - позволяющий выделить произольную папку для записи данных. Открытием стало, что пользоваться в asp.net, портированной в Azure папкой App_Data более нельзя, так как любая Role в Windows Azure имеет ограничение на 100Мб и это ограничение никак не поменять. Получить же путь к созданной папке, можно следующим образом:
Copy Source | Copy HTML
  1. if (RoleEnvironment.IsAvailable)
  2. {
  3.     return RoleEnvironment.GetLocalResource("MyStorage").RootPath;
  4. }

Метки:   


Like LJ?

По многочисленным просьбам убираю из блога ЖЖ (topbloger) в начале поста кнопки лайка (lj-like). Во-первых, ЖЖ не смогла за 2 месяца починить RSS выдачу, чтобы дурацкое слово Tweet не появлялося. Во-вторых, размещение рекламных блоков AdSense в блоге провалилось и мне рельно безразницы в денежном отношении расшаривают ТОПы или нет и растет посещаемость или нет. Проблема рекламных блоков AdSense в том, как я упомянал ранее, что после включения их в интерфейсе ЖЖ они успешно прокрутились 3 месяца, однако, ничего не было отражено в аккаунте AdSense по показам. Включение-выключение не помогло. Техподдержка Ж ответила, что ничем помочь не может. Ждем ответа гугла.

Но самая главная причина - это то, что эти дурацкие кнопки лайков действительно тормозят загрузку страницы. Ниже пример для кнопки гугла, которая добавляет 3 секунды. Прежде всего из-за того, что лезет к себе по httpS , но несмотря на все оптимизации обещанные гуглом, защищенное соединение нельзя закэшировать и оно заметно медленнее простого HTTP.

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


Метки: , , ,   


Кто я?

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

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

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

Topbot at FeedsBurner

Реклама

 

копирайт

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

© Copyright 2008