Skip to main content

Posts

Android для клуба склеротиков

1. Для начала работы надо установить Android SDK. Это только базовые инструменты. Для полноценной разработки используем входящую в SDK утилиту SDK Manager. Там можно установить все остальное, включая SDK Tools. Компонент SDK Tools включает полный набор инструментов для разработки и отладки под android. Для Eclipse понадобится ADT плагин. 2. Создание Android проекта с Maven: Установить "Android Configurator for M2E" (Help->Eclipse Marketplace, искать по "android m2e"). Добавляет поддержку Maven в ADT. Создать в Eclipse обычный Maven Project. На странице с archetypes добавить новый: android-quickstart ( Описание с akquinet STAND ). Чтобы сгенерировать классы и apk выполним Run As -> Maven Install. Чтобы запустить приложение есть 2 пути: 1) Здесь  создают три конфигурации, выполняя Run As -> Maven Build... последовательно для трёх goals: android:emulator-start android:deploy android:run 2) По старинке можно пользоваться Run As -> An...

Adapter / decorator / proxy / wrapper

Очень похожи. Все создают "промежуточный" объект, который "более удобен" для клиента. Но еще интереснее то, что банда четырех и про Adapter и про Decorator говорит: "известен также под именем Wrapper". Так в чем же разница? 1. Adapter (Адаптер). Нужно использовать компоненты, интерфейс которых не совпадает с "нашими" интерфейсами. Нужен "переходник", который интерфейс компонента приведет к тому виду, с которым нам удобно работать. Например, есть сторонняя библиотека и есть наша система, работающая с иными интерфейсами. Изменить библиотеку мы не можем, менять свою реализацию не хотим (а вдруг потом будет другая библиотека, что тогда?). 2. Wrapper (Обёртка). Есть функциональность, которая не является объектом, например, библиотека. Хотим сделать из нее что-то объектное. 3. Decorator (Декоратор). Хотим добавить функциональность к объекту, но не наследовать. Похоже на servlet filter. Цель: добавить в класс новое поведение. 4...

Upload файла и заголовки запроса в IE8

Пытаемся отправить форму с файлом на сервер. То, что сработает в Chrome, в IE выдаст предупреждение: "Verifying application requirements. This may take a few moments." Но почему? В IE8 невозможно без дополнительных программ посмотреть, какие заголовки содержит request/response. Поэтому установим  Fiddler2 . Fiddler is a Web Debugging Proxy which logs all  HTTP(S)  traffic between your computer and the Internet. Fiddler allows you to inspect traffic, set breakpoints, and "fiddle" with incoming or outgoing data.  Как отследить запросы к локальному web серверу? Надо добавить в адрес символ ".": http://localhost:8080/ -> http://localhost . :8080/ Оказалось, что IE8 устанавливает заголовок запроса Content-Type в application/x-ms-application. Этот же заголовок возвращается в response. Необходимо установить заголовок ответа в text/html. Но, о ужас. @RequestMapping(value="/image", method=RequestMethod.POST) @ResponseBody public String upl...

Первые шаги в Selenium

Цель расплывчата: понять и сделать хоть что-нибудь =) Selenium Selenium - группа продуктов. Отличное описание в статье Что такое Selenium? Selenium IDE - плагин для Firefox, позволяет записать тест, выполняя действия в браузере. Казалось бы, Selenium WebDriver должен дать больше возможностей: всё таки не из графического интерфейса тесты пишем, а с помощью языка программирования, но интересная мысль в другой статье того же автора  Что такое Selenium WebDriver? : "... WebDriver не имеет прямого отношения к тестированию. Он всего лишь предоставляет автотестам доступ к браузеру. На этом его функции заканчиваются.Структурирование, группировку и запуск тестов, а также генерацию отчётов о тестировании, обеспечивает фреймворк тестирования, такой как JUnit или TestNG для Java, .."  Локаторы Выбрать элемент на странице можно используя локаторы. Локаторы (в Selenium IDE в поле target) используют DOM, XPath или CSS (или просто ищут по id/name). Полезное: XPath: XML Path La...

JSP & EL: доступ к данным

EL (expression language) - язык, упрощающий доступ к данным на странице.  Общее Выражения EL могут быть выполнены при первом отображении страницы (immediate evaluation). Тогда они имеют следующий (более привычный) вид: ${person.name} Или технология, которая использует EL, может вычислять их в какой-то другой момент жизненного цикла страницы (deferred evaluation). Тогда используется синтаксис   #{} .  Этот синтаксис более привычен тем, кто использует JSF. Первая переменная (если она переменная, а не, скажем, ${42}) всегда является либо атрибутом, либо неявным объектом: Доступ к полям Можно использовать квадратные скобки [] или точку . . используется как имя поля в бине или имя ключа в Map: [] кроме вышеперечисленного могут обращаться по индексу к элементу массива или списка: Да, индекс будет в кавычках. Картинки позаимствованы из O'Reilly. Head First. Servlets and JSP. Что почитать: 1) Коротко от Oracle:  http://docs.oracle.com...

Шпаргалка по MySQL

1. Создание базы и пользователя CREATE DATABASE testdb character set utf8; CREATE USER 'testdbuser'@'localhost' IDENTIFIED BY 'testpwd'; GRANT ALL PRIVILEGES ON testdb.* TO 'testdbuser'@'localhost' WITH GRANT OPTION; 2.  Какие пользователи существуют? Если у пользователя есть права на эту таблицу: SELECT * FROM mysql.user; 3. Использовать ключевое слово в качестве имени столбца можно, взяв его в одинарные обратные кавычки (над «ё», иногда называют «гравис»). 4. Визуально про JOIN:  Визуальное объяснение SQL Joins . В том числе ответ на вопрос, как найти строки левой таблицы, которых нет в правой таблице. 5. TODO

JavaScript

Многие могут что-то набросать на js, но, как мне кажется, уровень понимания языка у некоторых близок к моему :( В общем, сборник вопросов и ответов, которые иногда возникают: Определение функций Кто-то пишет так: var functionOne = function() { // Some code }; А кто-то так: function functionTwo() { // Some code } В чем разница? В том, что определением функции является только второе. Первое - объявление переменной, значением которой является анонимная функция. Соответственно, функция будет известна уже в parse-time, а вот переменная появится только при run-time: <script> // Error functionOne(); var functionOne = function() { } </script> <script> // No error functionTwo(); function functionTwo() { } </script> JSON и массивы Задача: сериализовать данные в json так, чтобы ключом был индекс. Должна получиться строка вида "{"0":{"name":"Имя1"},"1":{"name":"Имя2"}...