Buttonmode для компонента Label

После долгих мучений и попыток установить курсор в виде пальца над лейблом – родилось такое решение:

useHandCursor = true;
mouseChildren = false;
buttonMode = true;

По-другому оно никак не хотело работать. Мудотатство.

Поддержка сжатия GZip Actionscript 3.0, Adobe AIR

Здравствуйте, уважаемые любители этого интересного. Сегодня мы разберем вопрос поддержки сжатия GZip флеш-плеером.
Дело в том, что при работе с большими объемами данных (приём-пересылка) бывает необходимо архивировать данные сервером при пересылке клиенту. На уровне HTML поддержка GZip браузерами реализована на 5 баллов.

Как это работает?
Клиент запрашивает у сервера данные. К примеру, сервер решил, что текстовых данных аж 2 мегабайта. Пока вы дождетесь пересылки их от сервера клиенту – яйца седыми станут. Поэтому сервер упаковывает их в формат GZip, пересылает клиенту 30 килобайт данных, а клиент за секунду разархивирует их в нужные нам 2 мегабайта текстовой информации.

Сразу оговорюсь как это работает в различных условиях.
Flash IDE – никак. Нужно подключать сторонние библиотеки для чтения GZip формата.
И постоянно слать заголовок ‘Accept-Encoding’:'gzip’. Принимаемые данные будут нечитаемыми.

При публикации и просмотре AIR или EXE файла – все работает на ура. Но! Длина принимаемых данных определяется неверно. То есть фактически длина принятых данных во много раз превышает общую длину данных. Поэтому в обработчике URLLoaderа ProgressEvent.PROGRESS можно получить и 400 и 1000% принимаемых данных.

Как это исправить? Серверу необходимо отправлять клиенту Air дополнительный заголовок.
К примеру назовём его: public static const AIR_CONTENT_LENGTH:String = ‘Air-Content-Length’;

Затем посмотрим что приходит от сервера:

myURLLoader.addEventListener(HTTPStatusEvent.HTTP_RESPONSE_STATUS, onHTTPResponseStatus);
private var total_response_length:Number = 0;

//получаем заголовки сервера
private function onHTTPResponseStatus(e:HTTPStatusEvent):void
{
  var isHeaderPresent:Boolean = false;
    
  for (var i:int = 0; i < HTTPStatusEvent(e).responseHeaders.length; i++)
  {
    //правильный подсчет длины респонза сервера
    if (HTTPStatusEvent(e).responseHeaders[i]['name'] == AIR_CONTENT_LENGTH)
    {
      total_response_length = Number(HTTPStatusEvent(e).responseHeaders[i]['value']);    isHeaderPresent = true;
    }
  }
  if (!isHeaderPresent)
  {
    total_response_length = 0;
  }
}

Теперь смотрим евент процесса загрузки:

//процент загрузки
public var persentage:int = 0;
  
private function onRequestProgress(e:ProgressEvent):void
{
  persentage = (total_response_length == 0)? int(e.bytesLoaded / e.bytesTotal * 100) : int(e.bytesLoaded / total_response_length * 100);
  var bt_total:Number = (total_response_length == 0) ? e.bytesTotal : total_response_length;
}

Короче. Есть хэдэр – берём общее значение длины ответа из него, нет хэдэра – берется стандартный Content-Length, передаваемый сервером.

Запись файла на диск через Adobe AIR и ByteArray в любой кодировке

Случается так, что файл нужно записать на диск в кодировке, отличной от кодировки проекта. Поскольку нормальным в РФ считается клепать сайты и ПО в UTF-8 – то работа с документами MS Office (excel, csv) становится проблематичным в виду того, что Excel понимает UTF-8 в виде кракозябр.

private var fileRef:FileReference;
    
//выбрать файл
private function selectHndl(e:Event = null):void
{
  var export_str:String = 'Здрасте-мордасте )) UTF-8 -> CP1251';
    fileRef = new FileReference();
            
  var ba:ByteArray = new ByteArray();
  ba.writeMultiByte(export_str, 'x-cp1251');
            
  fileRef.save(ba, "file.csv");
}


* This source code was highlighted with Source Code Highlighter.

Готово.

Скрипт для смс-шлюза для биллинга smsrent.ru

Цитата с блога партнёра:

Ссылка на оригинал.

Не так давно, для одного сайта, мне пришлось писать скрипт скачивания файлов с за смс, в качестве платформы для смс-биллинга использовался smsrent.ru. А для реализации задуманного, был выбран тип проекта – смс-шлюз, при использовании смс-шлюза вся логика находится на вашем сайте. Опишу, что необходимо сделать для подобного решения на вашем сайте.

После выбора проекта, необходимо настроить его, на странице настроек указать: адрес url-обработчика смс запросов (допустим http://www.yoursite/smsrenturl.php), выбрать метод запроса POST, ввести секретный ключ и поставить переключатель в положение “md5 подпись данных ключом (высокая степень защиты”. См. скриншот.

Теперь подробнее об url-обработчике, его суть и параметры, передаваемые ему описаны в руководстве разработчика. Здесь я приведу готовый обработчик.

Всё это можно найти на сайте http://www.usualblog.ru/2-script-sms-shluza-dlya-smsrent.html

Хабравиджет отслеживания кармы и рейтинга.

Здравствуйте, уважаемые любители “этого интересного”. Давно не писал сюда, решил обновиться. Пришла идея в голову написать небольшой виджет, который висит в трее и скучает, пока ваши данные в профиле Хабрахабра не изменятся.
Читать далее…

Визуализация звука во Flash.

Здравствуйте, уважаемые любители этого интересного. Сегодня поставил эксперимент по визуализации звука (music visualization). Под кат!
Читать далее…

JagaFLVPlayer обновился до версии 1.1

Здравствуйте, уважаемые любители этого интересного. Радостная новость! JagaFLVPlayer обновился до версии 1.1! Что же нового нас ждёт? Проёдемте-ка, под кат.
Читать далее…

JagaFLVPlayer v. 0.2. Проигрыватель flv-файлов.

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

JagaFLVPlayer. Проигрыватель FLV-файлов.

Здравствуйте, уважаемые любители этого интересного. Сегодня случилось чудо. Вышел в свет новый FLVPlayer. Он доступен для скачивания совершенно бесплатно.
Читать далее…

Вышел FlashDevelop RC3

Здравствуйте, уважаемые любители этого интересного. Вышла в свет новая версия моего любимого редактора AS-кода – FlashDevelop под маркой RC3.
Читать далее…

Follow

Get every new post delivered to your Inbox.