Общее·количество·просмотров·страницы

Java Dev Notes - разработка на Java (а также на JavaScript/Python/Flex и др), факты, события из АйТи

среда, 28 апреля 2010 г.

Консоль Firebug не показывает свойство next у объектов

Обнаружил интересный косяк Firebug: почему-то в консоли Firebug не отображается свойство next у объекта.

Вводим следующий код:

var o = {};
o.next = 'suxxx';
o.next1 = '111';
console.debug(o);
 


Смотрим скриншот - не показывается свойство next:



Но в то же время, можно вывести в консоль значение этого свойства:

var o = {};
o.next = 'suxxx';
o.next1 = '111';
console.debug(o.next);
 


Скриншот:



Firefox:

Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3

Firebug: 1.5.3.


Вот такие интересные дела творятся в датском королевстве...

вторник, 20 апреля 2010 г.

Дистрибутивы ExtJS

Выкладываю дистрибутивы ExtJS, начиная с версии 3.0.0. На офсайте ExtJS нет ссылок на архивы (по крайней мере, для бесплатных юзеров). А иногда нужно обратиться к старой версии ExtJS. Сейчас выложено 4 версии: 3.0.0, 3.0.3, 3.1.0, 3.2.0.

ExtJS 3.0.0

ExtJS 3.0.3

ExtJS 3.1.0

ExtJS 3.2.0

UPDATE 10 Мая 2010 года: ExtJS 3.2.1

UPDATE 12 Октября 2010 года: ExtJS 3.3.0

Обрезание ExtJS

Рассмотрим, что можно выкинуть из библиотеки ExtJS, когда кладем ее в продакшн-версию приложения. Из-коробки ExtJS приходит со множеством файлов/папок, которые совсем не нужны для работы приложения. Сюда входят документация, примеры, тесты, темы и др. Вот мы и разберем, что можно выкинуть, а что можно оставить.

Вот структура каталогов ExtJS 3.2.0 (содержимое корневого каталога ExtJS):

adapter
docs
examples
pkgs
resources
src
test
welcome

+ файлы:

ext.jb2
ext-all.js
ext-all-debug.js
gpl-3.0.txt
INCLUDE_ORDER.txt
index.html
license.txt

Сразу удаляем каталоги:

docs
examples
pkgs
src
test
welcome

и все файлы в корневом каталоге, кроме ext-all.js. Так что из каталогов у нас остается только adapter, resources. Дальше правим их.

Заходим в adapter. Видим каталоги


ext
jquery
prototype
yui


Удаляем все, кроме ext. В ext есть два файла: ext-base.js, ext-base-debug.js. Файл ext-base-debug.js удаляем, он нам не нужен. На этом с каталогом adapter закончили.

Теперь переходим в resources. В нем есть каталоги css, images и несколько файлов: charts.swf, expressinstall.swf и resources.jsb. Файлы не трогаем. Переходим в css. В нем несколько каталогов, которые содержат различные темы оформления и прочее. Как правило, это все не нужно. В css удаляем все, оставляем только файл ext-all.css. Теперь идем в images. Там есть несколько каталогов с изображениями для разных тем оформления. Нам нужна только тема default. Поэтому удаляем все каталоги, кроме default.

На этом все. В результате этих действий ExtJS похудел с 44 472 007 байт (42 Мб) до 1 390 373 байт (1.32 Мб). Happy coding!

четверг, 15 апреля 2010 г.

Мартовская статистика CTR для рекламных показов на мобильных телефонах, версия от Smaato

Источник: ТехКранч, Symbian Still Leading In Mobile Ad Click-Through Rates, Android Dropping Fast.

Итак, рекламная сеть Smaato зарелизила мартовскую статистику (Март 2010 года) по CTR для показов рекламных объявлений на мобильных телефонах.



Самый высокий CTR на Symbian - 156, затем идут feature phones (телефоны с проприетарной ОС от производителя), затем WinMo, iPhone и Android. Ниже Андроида только RIM, Palm. Причем Андроид скатился со второго места в Январе-Феврале 2010 на пятое в марте.

Финалисты The Next Web Paypal X Startup Rally 2010

TheNextWeb представляет европейские стартапы.

Announcing the finalists of The Next Web Paypal X Startup Rally 2010

ТехКранч вторит им: 25 Startups That Will Be Shaping The Next Web

Мы рассмотрим их вкратце, все 25 проектов:


  1. Tribe of Noise - коммьюнити, пытающееся соединить музыкантов и лейблы. А может, попытка взять часть функционала Last.FM и ILike.com и примешать что-то новое?

  2. Inbox2 - почта + социальные контакты + документы + календарь - и все в одном месте =)

  3. Fashiolista - что-то про моду, не разобрал =) Не мое

  4. MailSuite - почтовая система

  5. pipio - система для организации разговоров (conversations)

  6. Distimo - система аналитики по app store

  7. Twittercounter - система статистики по Твиттеру

  8. ecwid - российский проект. Позволяет прикрутить SaaS-hosted интернет-магазин для любого сайта за пару минут

  9. DoubleDutch - гео-социальноый проект. Позволяет пользователям включать в свою социальную активность гео-составляющую

  10. English Attack! - обучение англискому, entertainment-based метод

  11. Fits.me - примерочная интернет-комната для одежды

  12. Next Widgets - виджеты, вирусный маркетинг

  13. Feest.je - опять гео-социальный сервис

  14. 22tracks - музыкальный сервис. Позволяет пользователям открывать новых исполнителей, новые жанры и т.д. Что прикольно - не надо никакой регистрации. Сейчас, когда я это пишу - у меня как раз играет композиция из 22tracks

  15. Sogeo Сcompany - позволяет бизнесу строить коммьюнити потребителей на основе местоположения. В общем, еще один геосоциальный сервис

  16. Peecho - cloud printing as a serice. Вот так-то вот... =) Пошел относить свой лазерник на помойку =)

  17. PressDoc - быстрые и интерактивные онлайн пресс-релизы. Социальные медиа.

  18. next2news - рекламная платформа, размещающая рекламу в новостях. Но - только на голландском.

  19. Buildor - cloud-hosted ПО для создания сайтов, редактирования HTML/CSS

  20. submate - социальный сервис - узнай своих попутчиков по метро

  21. rapportive - социальная CRM-система, встроенная в GMail

  22. shutl - почти мгновенная доставка покупок из онлайн-магазинов. Хм, интересно!

  23. brainient - помогает паблишерам видео-контента зарабатывать путем приаттачивания ссылок на продукты, упомянутые в их видео-роликах. Тоже неплохо, имхо!



Вот такие они, европейские стартапы! Мне несколько идей очень понравились!!

Twitter нашел свою бизнес-модель: promoted twits and more

На ТехКранче написали, что Твиттер приоткрывает детали своей бизес-модели: Twitter CEO Ev Williams: Revenue Is A Feature.

Рекламная платформа Твиттера называется Promoted Tweets. Она будет доступна каждому, у кого есть аккаунт на твиттере. Распределение прибыли будет 50/50 между рекламодателем и твиттерянином.

CEO Twitter Evan Williams говорит, что есть множество путей монетизировать трафик, особенно, когда его много. Мы знаем, что у Твиттера трафика не просто много, а очень много. Однако, в Твиттере хотят, чтобы их рекламный продукт был органической частью их сервиса. Promoted Tweets будут действовать также, как и обычные твиты, их можно будет ретвитить, отвечать на них, добавлять в закладки и т.п.

Сначала они будут оплачиваться cost-per-impression-базисе (CPM), но Твиттер обещает скоро ввести новую метрику - которая будет оценивать "резонанс" - и дальнейшая оплата таких твитов будет происходить на базе этой метрики. Резонансная метрика будет учитывать такие факторы, как то, как часто просматривается твит, добавляется в закладки, ретвитится и т.п. Если Твиттер соберяется изменять резонанс, то модель оплаты, видимо, очень скоро уйдет от классической CPM-модели.

Успех Promoted Tweets будет определяться тем, как пользователи воспримут их и насколько будут с ними взаимодействовать. Если они не будут восприниматься как твиты, то эта затея выродится просто в еще один вид встраиваемой рекламы.

среда, 14 апреля 2010 г.

Студенческий день Яндекса

Не могу не записать: Студенческий день Яндекса. Много хороших презентаций!!

Настройка Google App Engine Launcher

Поговорим о настройках GAE лончера. Лончер используется для того, чтобы запускать GAE-приложения на локальной машине. При запуске, по умолчанию, лончер привязывается на адрес локалхоста, т.е. на 127.0.0.1 - так называемый loopback. А что, если нам надо его привязать к внешнему адресу (в нашей локальной сети), например, на 192.168.1.100 ?

Это делается очень просто. Выделяем в лончере приложение, которое хотим привязать к внешнему IP, нажимаем Ctrl+I (или выбираем пункт меню Edit->Application Settings). Открывается окошко с настройками.



В блок Extra Command Line Flags записываем следующее:
--address=192.168.1.100
нажимаем ОК - и вуаля - приложение привязано к IP 192.168.1.100.

Единственно, что надо добавить - так это то, что эти настройки надо делать при выключенном приложении.

Помимо флага --address есть еще множество других настроек:


--help, -h View this helpful message.
--debug, -d Use debug logging. (Default false)
--clear_datastore, -c Clear the Datastore on startup.
--address=ADDRESS, -a Server binding address
--port=PORT, -p PORT Port for the server to run on.
--datastore_path=PATH Path to use for storing Datastore
file stub data
--history_path=PATH Path to use for storing Datastore
history
--require_indexes Disallows queries requiring composite
indexes not defined in index.yaml.
--smtp_host=HOSTNAME SMTP host to send test mail to.
--smtp_port=PORT SMTP port to send test mail to.
--smtp_user=USER SMTP user to connect as.
--smtp_password=PASSWORD Password for SMTP server.
--enable_sendmail Enable sendmail when SMTP is not
configured.
--show_mail_body Log the body of emails in mail stub.
--auth_domain Authorization domain



Прочитать про это можно также здесь: Google App Engine Launcher Options

пятница, 9 апреля 2010 г.

Захват видео во флеше

Рассмотрим, как показывать видео, захваченное с веб-камеры пользователя во флешке.
Перейдем сразу к коду.

Файл camtest_min.mxml:


<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="horizontal"
verticalAlign="middle"
backgroundColor="white">
 
<mx:Script>
<![CDATA[
private function videoDisplay_creationComplete():void {
trace('[camtest.videoDisplay_creationComplete]');
var camera:Camera = Camera.getCamera();
if (camera) {
trace('[camtest.videoDisplay_creationComplete] camera is OK');
videoDisplay.attachCamera(camera);
camera.addEventListener(ActivityEvent.ACTIVITY, camera_activity);
camera.addEventListener(StatusEvent.STATUS, camera_status);
} else {
trace('[camtest.videoDisplay_creationComplete] perhaps there is no camera on this computer');
}
}
 
private function camera_activity(evt:ActivityEvent):void {
trace('[camtest.camera_activity], evt.type='+evt.type+', evt.activating='+evt.activating);
}
 
private function camera_status(evt:StatusEvent):void {
trace('[camtest.camera_status], evt.code='+evt.code);
switch (evt.code) {
case "Camera.Muted":
// do smth
break;
case "Camera.Unmuted":
// do smth
break;
}
}
]]>
</mx:Script>
 
<mx:VideoDisplay id="videoDisplay"
creationComplete="videoDisplay_creationComplete();"
width="320"
height="240" />
 
</mx:Application>
 


Скомпилируем код следующей командой:


%SDKDIR%\bin\mxmlc -optimize=true -o camtest_min.swf camtest_min.mxml


После этого, открыв файл в браузере, получим изображение с камеры.
Во флешке вылезет окошечко с запросом на разрешение доступа к микрофону и камере.
Это окошко появляется в момент, когда камера аттачится к VideoDisplay.

Чуть более подробно можно посмотреть по ссылке Detecting changes in a camera’s activity and status in a Flex VideoDisplay control

Постоянные читатели