• Взаимодействие между web-приложениями через Web Intents

    • Перевод
    Прим.: Обычно не занимаюсь переводами, но новость проскочила интересная.

    В сегодняшней браузерной экосистеме веб-приложения полностью изолированы друг от друга, и для того, чтобы, к примеру, отправить комментарий в твиттер через сторонний сервис со своего сайта, необходимо использование сложных (Прим.: ну я бы просто сказал «разнообразных») API. А что если бы мы могли дать сайтам возможность использовать подобные сервисы не зная, какой конкретно сервис мы будем использовать, а зная лишь о том, что он предоставляет некий функционал.

    В Android OS эта проблема решается при помощи Intents[1] — архитектуры, позволяющей взаимодействовать компонентам одного или нескольких различных приложений. По этой схеме, клиенсткое приложение создает запрос (к примеру, разослать что-нибудь) и задает параметры, которые будут переданы другому приложению-сервису. После этого пользователю предоставляется список приложений, которые регистрировали свою возможность обрабатывать данный тип intent-запроса. Затем выбранное пользователем приложение запускается в новом контексте, и ему передаются параметры, переданные клиентом в некоем, заранее определенном для конкретного типа intent, формате.

    На данный момент мы прилагаем большие усилия для создания аналогичной системы для шеЬ: Web Intents. Эта система предоставит те же удобства, что и Intents для Android, но будет адаптирована для web-приложений.

    Читать дальше →
  • Appcelerator покупает Aptana

      Компания Appcelerator, известная своим продуктом Appcelerator Titanium, приобрела компанию Aptana, которая разрабатывает Aptana Studio, IDE построенную на базе Eclipse, веб-сервер Jaxer, а также предоставляет услуги облачного хостинга.

      На данный момент, известно следующее :

      Читать дальше →
    • Синхронизация асинхронных вызовов. WaitSync

        Задача


        Допустим вы хотите выполнить два или более AJAX запроса на сервер и вызвать функцию после того, как все они будут закончены.

        Небольшая загвоздка в том, что вы не знаете, какой из этих запросов будет закончен первым и не знаете, на кого вешать callback.

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

        Собственно, этим и занимается мой небольшой класс WaitSync =)

        WaitSync.js


        Пользоваться элементарно просто:

        1. Создаем объект типа WaitSync, передав в конструктор callback функцию, которая будет вызвана после того, как отработают нужные задачи.
        	var vulture = new WaitSync(function () {
        		console.debug('Start eating: ', arguments);
        	});
        


        2. Вместо простого
        	$.getJSON(
        		'savannah/get_prey', 
        		function (data) {
        			console.log('... prey found: ' + data);
        		}
        	);
        	
        	$.getJSON(
        		'savannah/get_other_predators', 
        		function () {
        			console.log('... predators are done eating');
        		}
        	);
        


        «заворачиваем» задачи в метод .wrap
        	$.getJSON(
        		'savannah/get_prey', 
        		vulture.wrap( 
        			function (data) {
        				console.log('... prey found: ' + data);
        			}
        		)
        	);
        	
        	$.getJSON(
        		'savannah/get_other_predators', 
        		vulture.wrap(
        			function () {
        				console.log('... predators are done eating');
        			}
        		)
        	);
        


        3. Все =) Как только будут выполнены оба AJAX запроса, стервятник начнет есть.

        Как это работает?
      • Темная цветовая палитра Eclipse при помощи Compiz Color Filter



          Вот такая цветовая схема получилась у меня в конечном итоге.

          Лично я тяготею к белым буквам (ну и зеленым, конечно) на черном фоне. Особенно в темноте читать легче и не так бьет по глазам.

          К сожалению данное решение приемлимо лишь для тех, кто пользуется Gnu/Linux или другой ОС, к которой поставляется оконный менеджер Compiz.

          Читать дальше →
        • Женщина, попавшая в аварию, судится с Google

            Некая Лорен Розенберг (Lauren Rosenberg) судится с Google из-за того, что маршрут расчитанный Google Maps на ее смартфоне Blackberry вывел ее на автомагистраль, где ее сбила машина. Размер иска к интернет-гиганту должен покрыть ее медицинские расходы $100,000. С водителем сбившего ее автомобиля, как понимаете, она тоже судится. (Думаю, она и заявку на премию Дарвина тоже подала).

            И хотя Google Maps выводит предупреждение о том, что пешеходные маршруты находятся в стадии бета-тестирования и порой показывают маршруты без пешеходных переходов и тротуаров, оно не отображается на мобильных устройствах. Вряд ли бы это помогло, хотя и сняло бы ответственность с Гугла.

            Под катом кликабельная картинка с машрутом
          • XAMPP on Linux + Xdebug (Linux 64bit)

              Итак, сегодня мне удалось поставить XDebug на XAMPP for Linux. Если у вас 32-битный Линукс, можете не читать оставшийся текст, для вас есть простое решение, и не одно, которое можно с легкостью найти в Сети.

              О безумных благах дебаггера для ПХП даже не нужно рассказывать. На 64-битной висте/виндоус7 хдебаг никак не хотел работать (обваливалась виста; для семерки не было скомпиленной версии библиотеки)

              Для тех, кто не знает:
              XAMPP — пакет программ из apache+mysql+php+perl+proftpd+…
              XDebug — библиотека для РНР. Позволяет отчищать от лажи скрипты на РНР. (В основном используют вкупе с IDE, например Eclipse+PDT. Позволяет расставлять брейкпоинты, отлаживать пошагово и смотреть содержимое переменных)

              Если вы попали сюда из поиска, то вас мало интересуют мои приключения и поиски, поэтому сразу к делу.

              Update: Дорогие будущие читатели, эта статья для вас, если:
              * Вам часто нужно переключаться между разными конфигурациями веб-сервера (напирмер PHP4/5.2/5.3) или вы по другим причинам пользуетесь XAMPP под Линукс.
              * Вам нужен XDebug
              * У вас 64-битный Линух
              * К моменту когда вы начнете читать этот пост не существует 64битного ХАМРР.

              Остальные, можете не читать. Я не сравниваю ХАМРР с другими существующими решениями, просто он у меня есть, я с удовольствием пользуюсь. Я покопался в сети и не нашел решения для моей проблемы, поэтому решил поделиться с вами тут.

              Читать дальше →
            • Идет AJAX загрузка. Подождите…


                Обычно


                … для того, чтобы показать пользователю, что на фоне веб-приложения идет загрузка используется анимированная гифка вроде этой:

                image

                Типичный подход при этом:
                1. показать крутящуюся гифку в углу или где-нибудь на видном месте
                2. начать загрузку (XHttpRequest и Ко)
                3. когда загрузка заканчивается, убираем картинку.

                Идея


                Использовать анимацию курсора для отображения занятости приложения.

                Скажем, в jQuery для этого достаточно выполнить:
                $("*").css("cursor", "wait");

                Вернуть курсоры:
                $("*").css("cursor", "");

                Данный сниппет поменяет состояние курсора над всеми элементами. Однако, почему бы и не ограничиться каким-нибудь конкретным объектом?

                $(".элементы_которые_грузятся").css("cursor", "wait");



                Плюсы


                * Никаких изменений в структуре разметки
                * Не задействовано никаких внешних элементов (можно, правда, использовать собственные *.cur файлы. Достоверный источник сообщает, что эта фича поддерживается всеми современными браузерами)
                * Весьма интуитивно само по себе

                Минусы


                * Выглядит, как будто завис браузер (но если использовать нестандартный курсор, вполне отличимо)
                * В разных ОСях выглядит по-разному (кстати, это и минус и плюс)

                P.S.: пока искал прелоадер, случайно нашел сайт: www.loadinfo.net. Там можно сгенерить себе красивый прелоадер =)

                Edit:
                Вот, например, на подобной штуке, это выглядело бы очень уместно:
                www.extjs.com/deploy/dev/examples/desktop/desktop.html

                Edit2:
                Вот этот курсор, собственно, даже лучше подходит, чем «wait»:
                $("*").css("cursor", "progress");
              • PHP vs MySQL. У кого время быстрее?

                  Не-не, тут речь не о производительности, а о самых обыкновенных часах =)

                  Как-то раз увидел в PHP что-то вроде
                  $date = mysql_result(mysql_query("SELECT CURRENT_TIMESTAMP"), 0, 0);


                  Кажется, на говнокоде дело было…

                  Посмеялся и забыл. Потом перелез с винды на убунту и вот вчера произошло нечто интересное =) MySQL и PHP в XAMPP (LAMPP) вернули разное текущее время!

                  print(date('Y-m-d H:i:s'));
                  // 2009-06-20 8:00:00

                  print("\n", mysql_result(mysql_query("SELECT CURRENT_TIMESTAMP"), 0, 0));
                  // 2009-06-20 15:00:00


                  т.к. под виндой подобная проблема не наблюдалась, покопался в инете и узнал, что Линух и Винда по разному трактуют системное время. Винда выставляет системное время в соответствии с местным (причем делает она это постоянно при каждой загрузке и синхронизации), а Линукс считает системное время UTC и местное отсчитывает исходя из установленного часового пояса.

                  Выход 1. Подогнать системное время линукса под локальное


                  1. Установить время на текущее.

                  user@server:~$ sudo date -s 12:00

                  2. Сделать системное время локальным:

                  user@server:~$ sudo /sbin/hwclock --systohc --localtime

                  3. Синхронизировать локальное и системное время:

                  user@server:~$ sudo /sbin/hwclock --hctosys --localtime

                  4. Перезагрузить компьютер при необходимости. Ну в моем случае, нужно было просто перезагрузить XAMPP/LAMPP

                  user@server:~$ sudo /opt/lampp/lampp restart

                  Выход 2. Подогнать часовой пояс для MySQL


                  Предположительно (т.к. меня удовлетворило первое решение) здесь:
                  dev.mysql.com/doc/refman/5.1/en/time-zone-support.html

                  Выход 3. Переехать в Лондон


                  Но поскольку там есть летнее время, то данное решение работает лишь 6 месяцев в году. А вот у алжирских сисадминов такая проблема никогда, наверное, не возникала =)
                • JavaOne 2009, конференция

                    С 1 по 5 июня в Сан Франциско проходила конференция JavaOne.

                    Удивительно, что на Хабре об этом ни слова! Возможно это потому, что за Джавой с точки зрения веб-разработчиков закрепились сервлеты и JSP (а может просто потому, что на хабре Java не очень популярна).

                    А ведь там было на что посмотреть, было что послушать, было с кем поговорить и было что потыкать! Ну и разумеется, памятные сумки, майки и кепки =)

                    А еще можно было посмотреть на живых создателей и разработчиков платформ, технологий и просто интересных людей, которые собственноручно внесли огромный вклад в эволюцию джавы, интернета и всего-всего.

                    Если вам это было бы интересно, вы все еще можете зацепить небольшой кусочек:
                    java.sun.com/javaone
                    и посмотреть видеозаписи с основных заседаний (http://java.sun.com/javaone/2009/general_sessions.jsp)

                    На конференции много говорили о
                    Cloud platforms (облаках и всем что с ними связано)
                    Free & open (опенсорсе)
                    Mobile development (мобильниках)
                    Operating systems and platforms (операционках)
                    RIA and scripting ( небедных интернет приложениях и скриптинге)
                    и о будущем джавы и ее последователях

                    О модности cloud платформ можно узнать именно на таких конференциях. «Облака», символизирующие что-то большое белое и пушистое, но не гигантскую крысу-альбиноса, на слуху почти везде. Концепция замены датацентров на гибкие cloud-решения обсуждаются как минимум в двух аудиториях. В этом секторе в основном доминируют
                    • Amazon EC2 (их представителей не видел, хотя были другие ребята с Амазона)
                    • Google Apps
                    • Microsoft Azure
                    • Sun Cloud Platform

                    Мне удалось побывать на одной лабе по Sun Cloud Storage, где можно было самолично написать небольшую прогу, которая оперирует с файлами на Sun Cloud Storage (к слову, с точки зрения API, совместимому с Amazon S3).

                    Что касается «облачных» преимуществ для разработки веб-сервисов и приложений, основной упор ставится на
                    • гибкость (хочешь плюшку — возьми с полки),
                    • масштабируемость (плюшки уменьшаются и увеличиваются в размерах по требованию)
                    • и экономность (платите только за откушенную часть плюшки)


                    Как выяснилось, Джава идет на встречу и другим языкам программирования. Проект Da Vinci Machine позволил портировать другия языки программирования на платформу Java. Примечательно, что jRuby уступает по производительности лишь последней версии Ruby 1.9.

                    Кстати, если, как и я, считаете, что на Java нужно писать слишком много кода для выполения простых задач, попробуйте Groovy!

                    Ну а теперь самое интересное!

                    Если вы думаете, что под RIA платформами всегда будут подразумеваться Flash, Flex и Silverlight, а Java будет представлена лишь старыми «добрыми» апплетами, обломитесь! На этой конференции анонсировали релиз JavaFX 1.2.

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

                    Что такое JavaFX в двух словах без лишних терминов? Это платформа (язык + то, на чем она работает) с возможностью создания красивых графических приложений =) И поскольку он работает на той же JVM, можно использовать все доступные библиотеки Java. В итоге получается универсальная платформа для дестопов, веба, соток, блю-рей проигрывателей, двд-выигрывателей и всего, где есть JVM (надеюсь, в недалеком будущем)

                    По синтаксису JavaFX напоминает Java, ActionScript… и почему-то JSON (уж больно похож на него декларативный формат описания объектов)

                    На JavaFX можно создавать не только красочные цветастые интерактивные апплеты, но и совершенно безобразные и уродливые вещи, кои получились у меня в ходе лабы :D Ну, просто неудобно делать графические вещи без визуального редактора… зато межплатформенно…

                    Павильон
                    Ну и на последок, в огромном зале были размещены точки с представительствами самых разных именитых и не очень контор, названия которых я не помню, и возможно даже и не выговорю. Там тоже проводились небольшие семинарчики, демонстрации, розыгрыши и раздача халявы. У стенда JavaFX можно было поиграть в забавные игры на самых различных устройствах (перчатках-манипуляторах, сотках, блю-рейном проигрывателе).

                    Адоб демонстрировали PixelBender и взаимодествия Flex и BlazeDS с остальными. В другом отделе можно было попробовать установить openSolaris и получить фирменную майку и значок (пионерский подход). А в перерывах можно было поиграться в Quake и постучать на Rockband =D

                    У стойки Amazon можно было решить небольшую задачку и получить фигурку нинзя-кодера.

                    //Что делает эта функция?
                    int ninja_loop (int num ) {
                    if (num & num-1 == 0) return 0;

                    for (int arc = 1; (num &= num-1); arc++) {
                    // ninjas loop differently
                    }

                    return arc;
                    }

                    // Достоверность не гарантирую, так что можете сильно не париться =))


                    Среди всех прочих был и стенд некой фирмы, которая занималась защитой ПО и прочего от копирования (DRM и прочие). Возле стенда дежурил пожилой мужичок, который явно скучал от одиночества.

                    Некоторые пророчат, что эта конференция была последней в связи с недавним приобретением компании Sun конторой Oracle, с чем многие выступавшие там не согласны. Но как бы то ни было, я надеюсь, что в следующем году будет JavaOne 2010 и у меня будет повод написать еще один пост.

                    P.S.: Удивительно, но больше половины людей на лабах сидели с маками о_О
                    Еще там были общедоступные терминалы, которые работали по карточкам. Из Sun Virtual Box'a на выбор можно было загружать openSolaris, Ubuntu 9.04 или Windows-7.