Tag Archives: Google

GDD2010Moscow – I was there… #gddru #kyivgtug

На прошедших выходных мне довелось побывать на одном из запоминающихся мероприятий уходящего года – Google Developer Day 2010. Это мероприятие организованное компанией Google для разработчиков и просто людей, влюбленных в эту компанию и использующих её сервисы.

Мероприятие поразило своей организацией, масштабностью и количеством участников. Честно, я первый раз на мероприятии такого уровня. Хотелось бы отметить отзывчивость и готовность ответить на любой поставленный вопрос сотрудников Google – докладчиков. Среди них Michael Mahemoff, Paul Kinlan, Roman Nurik и Fred Sauer, с ними мне удалось пообщаться, а с некоторыми и сфотографироваться.

Roman Nurik (Android Developer Advocate from Google) and me
Roman Nurik (Android Developer Advocate from Google) and me

Как результат общения, удалось услышать информацию о возможности разработки расширений для Chrome на GWT и GWT Dev Plugin for Chrome on Linux, Fred сказал, что он часто слышит этот вопрос, и поспособствует сдвигу в этом направлении, что касается же Dev Mode в Chrome на Linux, то оказывается большинство разработчиков GWT используют Linux… вывод напрашиывается сам. К стати, для особо интересующихся тут есть проектик, с помошью которого можно создавать расширения используя GWT http://github.com/webdizz/gwt4chrome, а тут пример использования http://github.com/webdizz/terciman, само же расширение можно установить отсюда https://chrome.google.com/extensions/detail/kalnlennobeikiffcdhdnjpnmmbjdigi.

С Paul Kinlan и Michael Mahemoff была дискуссия про приложения и возможности монетизации, Paul является автором ряда приложений для twitter, и Michael тоже имеет ряд, но ни кто не пытался продавать свои творения, в прочем как и я… пока;)

Было очень круто, побывать на сцене  – мы – Andrey Yasinetskiy и я учавствовали в секции демо-презентаций. Презентовалось насше расширение, написанное в соавторстве с Timur Porkuyan и занявшее первое место на хаккатоне 23.10.10 в Киевском GTUG.  Расширение можно установить отсюда https://chrome.google.com/extensions/detail/ahmidlokhademhclkbapnlokgdhijjgj, а исходный код лежит тут http://github.com/Yasik/mapemall.

Вобщем впечатлений было масса.

За день же до вышеуказанного события мы, комманда GTUG из Киева, успели поучавствовать в хаккатоне и еще занять призовые места. На этот раз мы с Andrey Yasinetskiy испытывали свои силы в написании приложения для Android, за что получили по симпатичной мягкой игрушке с одноименным названием.

Следующий же день обещал быть не менее интересным – нам повезло посетить новый офис Google в Москве. Компания переехала туда только две недели назад и еще не было официальной презентации, но мы с удовольствием совершили это открытие, правда, фотографиорвать нам не разрешили, но зато очень приятно пообщались с Alexey Shelestenko и приходящими и уходящими сотрудниками попить кофе и других напитков.

Был очень смешной инцидент – мне хотели подарить футболку с логотипом GTUG размера XS (я даже не знал, что такой существует) – было очень много хохота, когда я достал её и попытался примерить…

Затем последовали часы ожидания поезда до Киева, которые мы провели на Арбате.

P.S. Огромное спасибо всем, кто принимал участие во всех вышеперечисленных мероприятиях.

P.P.S. Обзор о случившемся вы так же можете почитать тут.

Kyiv GTUG HTML5 hackathon #chromekyiv.

Last saturday (23.10.10) I was a participant of the HTML5 hackathon day organized by Kyiv GTUG can be followed in twitter #chromekyiv . There were a lot of fun.

Excellent speech by Michael Mahemoff @mahemoff about HTML5 features and perfect talks at coffee-breaks and lunch. I’ve got a lot of good impressions and spent my day with a big pleasure.

After Michael’s speech we had a lunch, during that we (@yasik and @shooshpanchick and me aka @webdizz) were involved in discussions regarding different aspects of developer’s life and technologies and generating ideas for our demos.

From the beginning of idea generating period of the day we decided to build up an app that will show tweets on the Earth rotating with appropriate speed  from twitter . But after several attempts to get a developer key we’ve got stocked. dev.twitter.com was down:(. It was a really shame.

Then we decided to move to something another and again was in a stock.

And time gone on…

So at last we found out an idea to work with. We decided to build an extension for Google Chrome to grab addresses from current page and display those addresses on the Google Maps or on the Yandex Maps and dived in coding.

Our extension contains HTML5 elements tag “nav” in the menu to choose map to display found addresses on and tag “canvas” circles to highlight found and not found addresses on the Google Maps. Also there is a lot of JavaScript magic.

So, time again was against us and it blown out.

The time for demo begun. We were first to demonstrate our work and seems it was ok according to results.

There are following results, we took first place as a team and one girl between all participants Anna Shaban with CSS3 photo gallery and hard-to-describe visual effect involving your name being shown at a million angles and opacities.

All winners were awarded with great presents and invitation to GDD 2010 in Moscow.

I’d like to thank to people who organized such a great event from Kyiv GTUG and to Michael Mahemoff.

Medeniye loogat Google Chrome extension

Вот и настал этот долгожданный час:) Сегодня вышла первая версия расширения для Google Chrome.

Функциональность расширения заключается в обеспечении возможности поиска перевода для выбранного слова в словаре Medeniye loogat. Для поиска перевода необходимо нажать кнопку Ctrl и кликнуть 2 раза на интересующем слове для его выделения, затем отобразится найденный перевод либо похожие слова.

Описанный выше функционал пожалуй весь арсенал данного расширения, основной же особенностью является техническая сторона, а именно – оно написано полностью на GWT.

Расширение можно установить с этой страници: https://chrome.google.com/extensions/detail/kalnlennobeikiffcdhdnjpnmmbjdigi .

Build extension for Google Chrome with GWT

From time-to-time I’m coming back to do some coding to provide Chrome Extension with helping to translate and remember words.

From this repository http://github.com/webdizz/clt now you can download the source code of the extension, however it is in the pre-pre-alpha state. But the main reason of this post is to tell about implemented abilities to write ContentScript using GWT.

Initial code of the GWT linker for Chrome Extension was pulled from SpeedTracer extension, after that I’ve provide some enhancements to support additional features.

  • GWT Linker for Chrome Extension was extracted into separate subproject;
  • ComponentGenerator was refactored and provided with initial pack of tests;
  • ExtensionScript artifact was added – which provides you abilities to define external JavaScript file to be injected into the BackgroundPage and loaded on extension initialization. This is useful for example when you are working with Google Language API or another required JavaScript library which you cannot include as a static content;
  • ContentScript now support all_frames attribute;
  • GwtContentScript artifact was introduced – which provides you abilities to implement ContentScript code with GWT and include it as a static ContentScript into your extension. Example of this you can find in my extension. But there is an issue – I’m not able to resolve path to extracted war to copy generated JavaScript file from GWTContentScript module into extension module, but there is workaround for this – you need to define own launcher (for Eclipse) to build extension. Example launcher can be downloaded here http://github.com/webdizz/clt/blob/master/clt-crx/Build-clt-extension.launch.

That’s it for now, have a nice week.

Google AppEngine first look

С недавних пор свое свободное время посвящаю реализации одной затеи в качестве платформы мы решили испоьзовать Google AppEngine для Java. И как оно обычно бывает с новыми и относительно неизвестными технологиями, с GAE это как оказалось – не исклбючение, появилось много проблем.

Проблемы в основном заключаются в сыроватости предоставляемых интерфейсов и органиченности их возможностей, думаю пока.

Начиналось все довольно спокойно – я установил SDK, поколдовал над рабочим окружением, что бы стало удобно работать и пустился в кодинг.

В моих планах было исследовать возможность работы Spring Framework 3.0.x, в частности меня интересует Spring MVC, а в качестве View – обычные старые добрые JSP. Со “спрингом” проблем особых не было, завелся, как говориться с пол пинка;).

Далее  – в качестве слоя для работы с базой взор был остановлен на JPA. Почему – потому что знакома и относительно привык работать с этой технологией. Но вот тут-то и начались “приколы”. Да на первый взгляд все заработало, но. Перечень “па” с бубном:

  • если вы используете Flex или GWT (как я) и хотите работать с объектами на стороне клиента, то одним из возможных подходов есть использование DTO объектов. В качестве конвертера объектов модели и объектов для клиентов я использую Dozer. И как оказалось в моем случае, из-за ограниченности в вариациях типов PrimaryKey, мне пришлось настраивать кастомные мапперы. В качестве PrimaryKey я использую предоставляемы Datastore тип Key, а клиент хранит его в виде строкового представления. До этого момента я получал сообщения об ошибках различного рода, связанные с ClassLoader-ом, с отсутствием поддержки типов ключей и т.д;
  • отсутствие поддержки связей. То есть если вам необходимо создать отношение One-To-Many, Many-To-Many или Many-To-One – у вас не будет возможности это сделать стандартным подходом. Это делается путем сохранения в ссылки на объект через его Key и последующей выборкой в случае необходимости. Не очень удобно, но работает. Надеюсь этого будет не всегда;
  • интересный нюанс с EntityManager.persist() или EntityManager.merge() – пока не вызовешь EntityManager.flush(), объект не будет сохранен. То есть если мне сразу же нужно вернуть сохраненный объект как результат выполнения метода, то я получу только то, что передал, хотя объект будет сохранен, но после.
  • еще вылезла проблема с использованием Spring Forms тегов. Немного погуглив, нашел решение проблемы – добавить в декларацию JSP аттрибут isELIgnored=”false” и переопределить PropertyEditors для каждого типа, используемого в бине, представляющем форму.

Так же еще одной из задач, которую нужно было решить – это подъем локального GAE сервера (в качестве сервлет контейнера используется Jetty) совместно с запуском GWT в дебаг-режиме. Тут конечно пришлось попотеть, т.к. стандартный подход Google к структуре проектов и отсутствие нативной поддержки с помощью Maven вынуждает к этому. Проблемы в основном были опять же с определением что откуда должно грузиться и совмещение это с тем, как мне нужно. После продолжительных не замысловатых действий вида “добавить ресурс, удалить ресурс” у меня все получилось. Теперь мой проект стартует из распакованного war-ника, поднимает Spring-контекст и подтягивает изменения в GWT на лету без перекомпиляции – то, что надо. Правда еще бы хотелось править JSP , без необходимости их последующего копирования в дерево проекта, но тогда придется жертвовать “чистотой” исходников проекта. Далее привожу свой конфиг для запуска GWT приложения в GAE контейнере.

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
	<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
		<listEntry value="/webapp-ui" />
	</listAttribute>
	<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
		<listEntry value="4" />
	</listAttribute>
	<mapAttribute key="org.eclipse.debug.core.environmentVariables">
		<mapEntry key="JAVA_OPTS" value="-Xms128M -Xmx512M -XX:MaxPermSize=256M" />
		<mapEntry key="-Dappengine.sdk.root" value="D:\src\lib\gae-1.2.5" />
	</mapAttribute>
	<stringAttribute key="org.eclipse.debug.core.source_locator_id"
		value="org.eclipse.jdt.launching.sourceLocator.JavaSourceLookupDirector" />
	<stringAttribute key="org.eclipse.debug.core.source_locator_memento"
		value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;sourceLookupDirector&gt;&#13;&#10;&lt;sourceContainers duplicates=&quot;false&quot;&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;javaProject name=&amp;quot;restio&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.javaProject&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;javaProject name=&amp;quot;lib-controller&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.javaProject&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;javaProject name=&amp;quot;lib-domain&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.javaProject&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;javaProject name=&amp;quot;lib-model&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.javaProject&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;javaProject name=&amp;quot;lib-service&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.javaProject&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;javaProject name=&amp;quot;lib-service-impl&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.javaProject&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;javaProject name=&amp;quot;mvp4g&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.javaProject&quot;/&gt;&#13;&#10;&lt;container memento=&quot;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;no&amp;quot;?&amp;gt;&amp;#13;&amp;#10;&amp;lt;javaProject name=&amp;quot;webapp-ui&amp;quot;/&amp;gt;&amp;#13;&amp;#10;&quot; typeId=&quot;org.eclipse.jdt.launching.sourceContainer.javaProject&quot;/&gt;&#13;&#10;&lt;/sourceContainers&gt;&#13;&#10;&lt;/sourceLookupDirector&gt;&#13;&#10;" />
	<listAttribute key="org.eclipse.jdt.launching.CLASSPATH">
		<listEntry
			value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry containerPath=&quot;com.google.appengine.eclipse.core.GAE_CONTAINER&quot; path=&quot;3&quot; type=&quot;4&quot;/&gt;&#13;&#10;" />
		<!-- GWT 2.x feature - ability to start HostedMode within browser -->
		<listEntry
			value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry externalArchive=&quot;D:/src/repository/com/google/gwt/gwt-dev-oophm/2.0.0/gwt-dev-oophm-2.0.0.jar&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;" />
		<listEntry
			value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry externalArchive=&quot;D:/src/repository/commons-configuration/commons-configuration/1.6/commons-configuration-1.6.jar&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;" />
		<listEntry
			value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry containerPath=&quot;com.google.gwt.eclipse.core.GWT_CONTAINER&quot; path=&quot;3&quot; type=&quot;4&quot;/&gt;&#13;&#10;" />
		<listEntry
			value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry externalArchive=&quot;D:/src/repository/name/webdizz/rest/io/lib-service/0.0.1/lib-service-0.0.1.jar&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;" />
		<listEntry
			value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry externalArchive=&quot;D:/src/repository/com/mvp4g/mvp4g/1.0-SNAPSHOT/mvp4g-1.0-SNAPSHOT.jar&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;" />
		<listEntry
			value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/gwt-widget/src/main/java&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;" />
		<listEntry
			value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/lib-domain/src/main/java&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;" />
		<listEntry
			value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/lib-service/src/main/java&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;" />
		<listEntry
			value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/gwt-base/src/main/java&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;" />
		<listEntry
			value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/webapp-ui/src/main/resources&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;" />
		<listEntry
			value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/webapp-ui/src/main/java&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;" />
		<listEntry
			value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#13;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/webapp-ui/src/main/webapp&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#13;&#10;" />
	</listAttribute>
	<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER"
		value="org.maven.ide.eclipse.launchconfig.classpathProvider" />
	<booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH"
		value="false" />
	<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER"
		value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/1.6" />
	<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE"
		value="com.google.gwt.dev.HostedMode" />
	<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS"
		value="-startupUrl /view/&#13;&#10;-war D:\tmp\restio\webapp-ui\webapp-ui&#13;&#10;-server com.google.appengine.tools.development.gwt.AppEngineLauncher&#13;&#10;name.webdizz.rest.io.ui.Engine" />
	<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR"
		value="webapp-ui" />
	<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER"
		value="org.maven.ide.eclipse.launchconfig.sourcepathProvider" />
	<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS"
		value="-Xmx512M" />
	<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY"
		value="D:\tmp\restio\webapp-ui\webapp-ui" />
</launchConfiguration>

Хотел было прокомментировать код, но начав, понял – это не очень уместно т.к. названия он интуитивно понятен.
На это все, продолжим исследования…

Medeniye Loogat v0.2.0 notes

Решил немного доработать свой первый гаджет Medeniye Loogat и вот, что получилось.

Изменений коснулись следующие елементы гаджета:

  • при загрузке гаджета в области отображения перевода теперь загружаются 5 ссылки на последние сообщения с форума Alem-i Medeniye;
  • немного выравнена форма ввода слова и появилась кнопка для очистки результат перевода, после нажатия на которую появляются сообщения с форума (см. выше);
  • так же немного изменена область копирайта. Теперь ссылка на сайт и ссылки на используемые материалы находятся в невидимой области и открываются  после нажатия на “Alem-i Medeniye 2009” и добавлена ссылка на категорию Medeniye Loogat – это позволит проще узнавать об появившихся изменениях в гаджете.

Результат изменений доступен по прежнему адресу, а превью ниже.

Medeniye Loogat v0.2.0
Medeniye Loogat v0.2.0

4kGadget – Google Gadget для сервиса 4конверта

Сегодня будет повесть о еще одном маленьком проектике – 4kGadget.
Являясь постоянным читателем блога Макса Крайнова и прочитав вот это, возникла идея  создания гаджета, который бы позволил мне использовать сервис http://4konverta.com, как говориться, не отходя от кассы, а именно – на странице iGoogle.

Желание было и как только появилась возможность был создан проект на Google хостинге. В текущей реализации за версией v0.1.0 доступны следующие возможности (пока их не много)):

  • сохранение/сброс параметров доступа к учетной записе на сервисе;
  • простотр данных конверта текущей недели;
  • и возможность занесения/изменения трат текущего конверта по дням;
  • так же гаджет поддерживает отображение данных для нескольких персон в учетной записи.

How to

Установить гаджет можно, пройдя по этой ссылке (http://www.google.com/ig/adde?moduleurl=4kgadget.googlecode.com/svn/release/4kgadget.xml).

Add "4Konverta" to your iGoogle page.
Add "4Konverta" to your iGoogle page.

Далее нужно будет нажать на кнопку “Add to iGoogle” и вуаля – гаджет на вашей странице.

Первое, что вам нужно будет сделать после добавления гаджета – это ввести свои параметры доступа (логин и пароль) и нажать кнопку “Вход”.

Ввод данных для авторизации
Ввод данных для авторизации

Далее гаджет произведет загрузку данных из вашего конверта и отобразит их.

Состояние текущего конверта
Состояние текущего конверта

TODO

В следующих версиях планируется:

  • улучшить информативность гаджета, т.е. добавить отображение данных о размере конверта;
  • поработать над “читаемостью” – формат/способ отображения данных.

Этого, как мне кажется, пока достаточно для удобного ведения своего “конверта”, но предложения по улучшению весьма приветствуются.

Issues

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

P.S.

Пожелания и предложения можно оставить в комментах к этому посту либо пройти сюда.

Всем спасибо за внимание и использование;)

UPD

Для того, что бы быть постоянно в курсе о новшествах, появившихся в гаджете, переходите сюда.

UPD1

С недавнего времени описанная выше версия гаджета не развивается, в виду того, что вышла новая версия не совместимая с предыдущей. Рекомендуется использовать новую версию гаджета, который можно установить отсюда http://www.google.com/ig/adde?moduleurl=4kgadget.googlecode.com/svn/release/name.webdizz.gadget.four.envelope.Envelope.gadget.xml

Medeniye Loogat

Начало

Все началось с того, что нежданно негаданно появилось свободное время, которое хотелось бы да и стоит потратить с пользой. Польза бывает разной, в данном случае хотелось узнать для себя что-то новое и упростить тягу к познанию неизведанного. Часто возникает необходимость узнать перевод незнакомого слова с русского на крымскотатарский и наоборот для этого я использовал on-line словарь сайта Alem-i Medeniye. Но необходимость постоянного обращения к странице и держания дополнительной вкладки браузера немного создавало неудобство. И вот родилась идея – создать Google Gadget Medeniye Loogat, добавить который можно в ваш iGoogle, пройдя по этой ссылке Medeniye Loogat вы попадете на такую страницу

Clipboard03

Далее, нажав на “Add to iGoogle” гаджет появляется на вашей iGoogle странице.

Что может текущая версия

  • введя искомое слово и нажав на кнопку “Перевести” либо просто “наступив” на клавиатуре на клавишу “Enter“, получаете найденный перевод слова (если таковой существует);
  • если существуют несколько вариантов перевода, то появляются ссылки, пройдя по которым вы попадаете на соответсвующий перевод этого слова

Сделай сам

Если есть желание попробовать себя в создании что-нибудь подобного то вам сюда Google Gadgets Editor (GGE).

Google Gadgets Editor

На этом пока все.

To be continued….