tag:blogger.com,1999:blog-86161696641469174502024-02-18T18:35:40.907-08:00Мысли об AndroidМои мысли о разработке под AndroidAKhttp://www.blogger.com/profile/06260079966243851946noreply@blogger.comBlogger97125tag:blogger.com,1999:blog-8616169664146917450.post-90983079006249502532018-01-24T04:13:00.002-08:002018-01-24T10:40:52.064-08:00Kotlin убивает Android Studio<div dir="ltr" style="text-align: left;" trbidi="on">
Решил сегодня создать новый проект на основе "Basic Activity". С помощью мастера шаблона прохожу все шаги, нажимаю кнопку "Finish" и студия генерирует дефектный проект с кучей ошибок и отсутствующими некоторыми файлами.<br />
Безобразие. Начинаю искать информацию в интернете. Оказалось, причина в очередном обновлении Kotlin под номером версии 1.2.20.<br />
В качестве решения можно отключить Kotlin - Files | Settings | Plugins | снять флажок Kotlin.<br />
Далее попробуйте перезапустить студию.<br />
Если вам нужен Kotlin, то тогда удалите новую версию и установите предыдущую 1.20.10 - она вроде рабочая и не ломает студию.<br />
Вообще, такие косяки в студии происходят постоянно. Недавно вышла очередная предварительная версия студии 3.1, но буквально через несколько часов попросили всех откатиться назад. Несколько лет назад такое было и с релизной версией.<br />
Жизнь - это боль. Не обращаем внимания, работаем дальше.<br />
Upd. Мне подсказали, что вышло обновление. Действительно, вручную обновил до версии 1.2.21 и проект запустился. Странно, что студия не предложила обновиться сама. Версия вышла вчера, может студия не успела узнать об этом. Будем ждать следующих багов.<br />
<br />
<span style="background-color: #f2f6fc; color: #1a1a1a; font-family: "helvetica neue" , "arial" , sans-serif; font-size: 12.96px;"><br /></span></div>
AKhttp://www.blogger.com/profile/06260079966243851946noreply@blogger.com1tag:blogger.com,1999:blog-8616169664146917450.post-60618975688087298642017-01-28T06:54:00.001-08:002017-01-28T06:55:15.930-08:00Прощай, Parse.com<div dir="ltr" style="text-align: left;" trbidi="on">
Ровно год назад облако-сайт Parse.com заявил о своём закрытии, их купил Facebook. Послезавтра сервера должны окончательно выключить.<br />
Я использовал сайт в своих проектах, но это не носило глубокий характер, поэтому я легко пережил эту новость. За год у меня не было потребностей использовать облачные возможности, поэтому я не спешил куда-то мигрировать и оставался на сайте до последнего.<br />
Буквально недельку назад я решил попробовать другой сайт для пуш-уведомлений - это OneSignal, А пару дней назад я перенес данные с Parse.com на сайт Back4App.com.<br />
Миграция прошла просто - регистрация, указание учетки с Parse, нажатие на волшебную кнопку "Мигрировать".<br />
Так как продукт Parse.com сделали с открытыми исходниками, то на новом сайте практически всё тоже самое. Я даже открыл несколько своих учебных примеров из своих курсов и проверил. Все работает как прежде. Нужно только заменить пару строк кода.<br />
Единственно, что у Back4App для пуш-уведомлений используется решение от Firebase, Поэтому не вижу смысла делать пуши с этого сайта, можно обойтись без посредника и самому настроить консоль в Firebase, Это дело предпочтений.<br />
Прощай, Parse.com. Ты мне нравился.</div>
AKhttp://www.blogger.com/profile/06260079966243851946noreply@blogger.com0tag:blogger.com,1999:blog-8616169664146917450.post-42152316316203920432016-10-04T08:04:00.000-07:002016-10-04T08:04:18.413-07:00Работает на эмуляторе, не работает на устройстве<div dir="ltr" style="text-align: left;" trbidi="on">
На прошлой неделе пришло сразу два письма с просьбой помочь с проблемой - любая программа запускалась на эмуляторе, но отказывалась запускаться на реальном устройстве.<br />
Вообще я стараюсь не отвечать на такие письма. Причины неработоспособности приложения могут быть самыми разными, универсального ответа не существует, а я не экстрасенс.<br />
Но тут был очень странный случай. Строго говоря, причину ошибки можно узнать, если запустить приложение из студии и почитать сообщения об ошибках в Android Monitor.<br />
Но у одного из пользователя была и другая проблема - студия не видела его телефон, поэтому он не мог прочитать логи ошибок.<br />
Здесь надо сделать отступление. На мой взгляд, любой разработчик должен добиться того, чтобы студия умела замечать реальное устройство. Искать драйвера, спрашивать на форумах и т.д. Никакой эмулятор не заменит устройство. Можно даже купить самое дешевый китайский телефон и проверять программы на нем. Заодно решите и другую проблему - проверите работоспособность программы на слабом устройстве с ограниченной памятью, маленьким экраном, слабым процессором.<br />
Вернемся к проблеме. Прошу прислать APK мне на почту, устанавливаю на своё устройство и запускаю. Действительно, приложение валится с ошибкой. Тогда запускаю студию, подключаю устройство к компьютеру. Студия выводит различные сообщения. Копирую их и начинаю искать в интернете. Натыкаюсь на любопытную информацию - телефоны с версией Android 4.x некорректно работают с InstantRun. Для решения проблемы советуют отключить его.<br />
Для начала устанавливаю программу на другом устройстве под Android 5.0. Действительно, на этом устройстве приложение нормально запускается. Отписываюсь и жду ответа. Через некоторое время получаю ответ, что все получилось. При отключенном InstantRun программа стала запускаться на его телефоне.<br />
Никогда бы не поверил, что такое возможно. Но чудеса происходят. Как отключить InstantRun ищите самостоятельно.</div>
AKhttp://www.blogger.com/profile/06260079966243851946noreply@blogger.com0tag:blogger.com,1999:blog-8616169664146917450.post-38729838419397240132016-09-20T00:06:00.001-07:002017-02-25T00:31:37.414-08:00Android Studio 2.2<div dir="ltr" style="text-align: left;" trbidi="on">
Вчера 19 сентября наконец-то вышла новая стабильная версия 2.2. До этого её долго мурыжили в бете-версиях, постоянно что-то допиливая. Казалось бы, после такой кропотливой работы должен выйти идеальный продукт. Да нет-то было.<br />
Обновившись из предыдущей версии, запускаю новый проект. Вылезает ошибка<br />
<br />
<span style="font-family: "verdana" , sans-serif;">Error:CreateProcess error=216, This version of %1 is not compatible with the version of Windows that you're running. Check your computer's system information and then contact the software publisher</span><br />
<span style="font-family: "verdana" , sans-serif;"><br /></span>
<span style="font-family: inherit;">Время близится к ночи. Но хочется хоть немного поработать с новой версией. Начинаю искать решение проблемы. Нажимаю на кнопки, меняю настройки. Ничего не помогает. И тут я решаюсь на радикальные меры. Удаляю вообще эту студию и SDK. За несколько лет в компьютере скопилось мусора на несколько гигабайт(!) от предыдущих версий студий ветки 1.хх, 1.5х, 2.х, которые были несовместимы с новыми выходящими версиями, но почему-то не удалялись автоматически. Видимо, разработчики Гугла не привыкли убираться за собой. Я на всякий случай старые файлы не трогал. Но всякому терпению приходит конец.</span><br />
<span style="font-family: inherit;">Устанавливаю студию с чистого листа. Впрочем, это не помогло. Та же ошибка. Сочувствую новичкам, которые начинают первое знакомство с программированием под Android. Если у них вылезет такая же ошибка, то такое неприветливое знакомство может и отбить охоту изучать написание программ.</span><br />
<span style="font-family: inherit;">А я продолжаю искать решение проблемы. Время перевалило за полночь. Наконец-то какое-то действие сдвинуло проблему с мёртвой точки. Ошибка исчезла. Правда появилась другая. А потом и третья. Но эти ошибки были уже знакомы по предыдущим версиям и меня уже не пугали. В конце концов я победил проблему и студия стала запускаться.</span><br />
<span style="font-family: inherit;">Так как мои действия были спонтанными, описать решение проблемы не смогу. Честно говоря, ошибки при запуске новых версий студии (а раньше и в Eclipse) не являлись единичными случаями. На моей памяти такое происходило не раз на моём компьютере. А также я получал письма от других пользователей с проблемами с установкой, когда у меня таких проблем не было. Это как лотерея - кому-то повезёт и всё заработает с первого раза, а кто-то постоянно будет мучиться, меняя различные настройки. Рекомендую купить бубен шамана. Говорят, танцы с бубнами очень помогают.</span><br />
<span style="font-family: inherit;">Сама студия сильно изменилась. Я бы даже сказал, революционно изменилась, странно что ей дали версию 2.2, а не 3.0</span><br />
<span style="font-family: inherit;">Новый редактор разметки экрана, новые значки, новые диалоги добавления классов, новые пункты меню и многое другое. А значит, скоро снова придётся переписывать уроки на сайте. </span></div>
AKhttp://www.blogger.com/profile/06260079966243851946noreply@blogger.com2tag:blogger.com,1999:blog-8616169664146917450.post-45347953895016510052016-07-04T08:58:00.001-07:002016-07-04T09:08:43.076-07:00Пробелы в строковых ресурсах<div dir="ltr" style="text-align: left;" trbidi="on">
На моём форуме читатель поделился проблемой, с которой я сам не сталкивался. Оказывается, если в строковых ресурсах строка начинается или заканчивается символом пробела, то пробел обрезается. Чем это чревато? Допустим, мы хотим соединить две строки.<br />
<br />
<pre><code>
<string name="cat">Моему коту </string>
<string name="catAge">5 лет</string>
String firstMessage = getResources().getString(R.string.cat);
String secondMessage = getResources().getString(R.string.catAge);
mTextView.setText(firstMessage + secondMessage);
</code></pre>
Несмотря на пробел после слова <b>коту</b>, на экране мы увидим предложение без пробела.
Старайтесь избегать таких вариантов с пробелами, как правило такой надобности нет. Пробел всегда можно вставить в коде программно.
<pre><code>
// вставляем пробел между двумя словами
mTextView.setText(firstMessage + " " + secondMessage);
</code></pre>
Но если по каким-то причинам, вам нужны именно такие строковые ресурсы с пробелами в начале или в конце слов, то самый простой способ - использовать кавычки.
<br />
<pre><code>
<string name="cat">"Моему коту "</string>
</code></pre>
Можно использовать также управляющие символы или код Unicode для символа пробела. Но вряд ли вы их будете держать в голове. Поэтому просто используйте кавычки и будет вам счастье.
</div>
AKhttp://www.blogger.com/profile/06260079966243851946noreply@blogger.com0tag:blogger.com,1999:blog-8616169664146917450.post-11097171007530442992016-04-15T08:28:00.001-07:002016-04-16T00:04:15.877-07:00Error launching Android Studio<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-family: "arial" , "helvetica" , sans-serif;">После установки Android Studio 2.0 столкнулся с неприятной проблемой. Иногда, запуская студию, получаю диалоговое окно с ошибкой. К сожалению, скриншот не сделал. Но я сделал текстовую копию (Кстати, если вы не знали - в диалоговом окне вы можете нажать клавиши Ctrl+C и получить текст из окна)</span><br />
<br />
<span style="font-family: "courier new" , "courier" , monospace;">---------------------------</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">Error launching Android Studio</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">---------------------------</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">Failed to create JVM: error code -4.</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">JVM Path: C:\Program Files\Java\jdk1.7.0_45\jre</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">If you already have a 32-bit JDK installed, define a JAVA_HOME variable in </span><br />
<span style="font-family: "courier new" , "courier" , monospace;">Computer > System Properties > System Settings > Environment Variables.</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">---------------------------</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">OK </span><br />
<span style="font-family: "courier new" , "courier" , monospace;">---------------------------</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;">Если в следующий раз появится такая ошибка, то постараюсь не забыть о скриншоте.</span><br />
<span style="font-family: arial, helvetica, sans-serif;">Upd. Сделал скриншот сегодня. Студия запустилась со второго раза.</span><br />
<span style="font-family: arial, helvetica, sans-serif;"><br /></span>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixXCwZBRHANp5KpknXeLNVcuXw6JGCK3s6ssGqHAKSyypoEQKK1ZKDAfiwQiBXF9W_N2TPywzvKQW9pHlvUZtCVMjKLJrX7u3BMppm5BidmLgizswAJwnTHXQmwlHXt3-Mb-omPtn5z9Hl/s1600/error_as.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="134" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixXCwZBRHANp5KpknXeLNVcuXw6JGCK3s6ssGqHAKSyypoEQKK1ZKDAfiwQiBXF9W_N2TPywzvKQW9pHlvUZtCVMjKLJrX7u3BMppm5BidmLgizswAJwnTHXQmwlHXt3-Mb-omPtn5z9Hl/s320/error_as.png" width="320" /></a></div>
<span style="font-family: arial, helvetica, sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;"><br /></span>
<span style="font-family: "arial" , "helvetica" , sans-serif;">Проблема появилась на ровном месте. Вчера запускалось, сегодня нет. Если попробовать поискать решение в ваших интернетах, то можно встретить ответы аж за 2010 год для Эклипса. Эти ошибки связаны с тем, что не прописаны пути к файлам Java и даются советы, как это сделать.</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">Но у меня все давно прописано, вчера работало и я ничего не менял. Перезагрузка студии и самой системы тоже не помогало. </span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">А потом вдруг на пятый или шестой раз загрузка пошла. Магия!</span><br />
<span style="font-family: "arial" , "helvetica" , sans-serif;">Впервые такая история произошла вчера. Сегодня тоже самое. На пятый-шестой раз студия загрузилась. Фигня какая-то. Может, это Обама? Кто-то должен ведь ответить за это безобразие.</span></div>
AKhttp://www.blogger.com/profile/06260079966243851946noreply@blogger.com0tag:blogger.com,1999:blog-8616169664146917450.post-47813841208784248862016-03-02T04:46:00.001-08:002016-03-02T04:46:47.732-08:00Нужно ли изучать Kotlin<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-size: x-large;">Те, кто интересуется разработкой под Android, наверняка, в курсе, что вышла версия Kotlin 1.0. Сразу встал вопрос - нужно ли его изучать?</span><br />
<span style="font-size: x-large;">Я почитал несколько статей от разработчиков языка, послушал их выступления на конференциях и решил поделиться своим мнением.</span><br />
<span style="font-size: x-large;">Во-первых, мне нравится название - первые три буквы нового языка намекают на кота. Это плюс. Больше никаких преимуществ не вижу. Это была шутка.</span><br />
<span style="font-size: x-large;">Взлетит или не взлетит новый язык зависит от многих факторов. Но мне представляется следующее. Kotlin разрабатывался не компанией Google, а компанией JetBrains, которая имеет непосредственное отношение к Android Studio. Но одно дело - инструмент разработки, и совсем другое дело - язык программирования. Google и так имеет проблемы с Oracle по поводу Java и постоянно бодается с ним в судах. Поддерживать чужой для них язык им тоже не с руки. Насколько я понял, Google просто наблюдает за развитием ситуации, но никак не комментирует события. Она никак не мешает использовать новый язык, если кому-то нравится.</span><br />
<span style="font-size: x-large;">JetBrains заявила, что переписала часть своих проектов на Kotlin. Мне кажется, это и есть ответ на вопрос. Язык Kotlin вполне может использоваться в корпоративной среде у компаний, которые пишут серьёзные и сложные приложения. Если вы мечтаете работать в JetBrains, то изучение Kotlin вам пригодится.</span><br />
<span style="font-size: x-large;">Если вы экспериментатор, любитель всего нового, а также планируете работать в серьёзных компаниях, то знание Kotlin лишним не будет.</span><br />
<span style="font-size: x-large;">Для обычных разработчиков изучать новый язык смысла не вижу. Не забывайте, что хотя Kotlin является эволюционным ответвлением от Java, его синтаксис и другие вещи очень сильно разнятся. Кода на Java и для Android написано очень много. Если вы только изучаете Android, то всегда есть вероятность, что найдёте ответ на свою проблему на форумах. С Kotlin всё будет значительнее сложнее. </span><br />
<span style="font-size: x-large;">Решайте сами.</span><br />
<span style="font-size: x-large;"><br /></span></div>
AKhttp://www.blogger.com/profile/06260079966243851946noreply@blogger.com2tag:blogger.com,1999:blog-8616169664146917450.post-3727158211648888902016-02-11T11:59:00.002-08:002016-02-11T11:59:56.937-08:00Head First. Программирование для Android<div dir="ltr" style="text-align: left;" trbidi="on">
После небольшого затишья в книжных магазинах появилась новинка - "Head First. Программирование для Android"<br />
<img src="http://static1.ozone.ru/multimedia/books_covers/1014061622.jpg" height="320" width="276" /><br />
<br />
Это первая книга в 2016 о разработке под Android. Хотя на самом деле американское издание вышло в прошлом году. Тем не менее, эта хорошая новость. Вроде это первая книга, где уже полноценно описывается процесс создания приложений в Android Studio, а также рассказываются о новинках - Material Design, RecyclerView, CardView и других полезных вещах.<br />
Отдельно порадовало, что термин Activity перевели как активность. Помните мой пост на эту тему?<br />
На этот раз я не стал покупать себе бумажное издание, а купил электронную версию на сайте издательства "Питер". На самом деле там нет ничего принципиально нового для меня, но хочется поддержать издательство, которое продолжает переводить зарубежных авторов.<br />
Книга содержит хорошие и полезные примеры, которые будут интересны разработчикам, которые хотят повысить свой уровень.<br />
Если вы предпочитаете бумажную версию, то можете заказать на сайте издательства или на Озоне - <a href="http://www.ozon.ru/context/detail/id/135330880/?partner=visual">Head First. Программирование для Android</a></div>
AKhttp://www.blogger.com/profile/06260079966243851946noreply@blogger.com2tag:blogger.com,1999:blog-8616169664146917450.post-20860349569923427922016-01-22T12:12:00.001-08:002016-01-22T12:13:47.108-08:00Как не нужно задавать вопросы<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-size: large;">Мне на почту приходят вопросы. Ещё на мой форум приходят вопросы. Иногда я читаю вопросы на других русскоязычных форумах о разработке под Android. И часто наблюдаю ситуацию, когда вопрошающий не может толком сформировать свою мысль. Ему кажется, что он всё обстоятельно объяснил, но на самом деле это не так. Вопрос понятен только ему одному, а для других это выглядит как поток незамутненного сознания. Читаешь такой вопрос и думаешь, а что сказать-то хотел? Вывод - учитесь формировать свои мысли. Иначе ответа не дождётесь. Порой даже не хочется переспрашивать и задавать наводящие вопросы, понимая, что переписка затянется надолго.</span><br />
<span style="font-size: large;"><br /></span>
<span style="font-size: large;">Вторая часть читателей не стесняясь задаёт вопросы, даже не потрудившись самостоятельно поискать ответ. Можно вставить задаваемый вопрос в строку поиска любого поисковика и получить ответ в первых ссылках. Но странные люди предпочитают, чтобы это сделали за них. Я этого делать точно не буду.</span><br />
<span style="font-size: large;"><br /></span>
<span style="font-size: large;">Третья часть считает меня экстрасенсом. Приходит такое письмо: "Я всё делал по описанию на вашем сайте, а у меня ничего не работает. Почему?" К сожалению, после окончания Хогвартса с отличием, я дал обязательство не использовать полученные знания на территории России и не могу использовать свои волшебные способности для ответа на ваш вопрос. Теперь я буду удалять подобные вопросы с форума, а письма удалять с почтового сервера.</span><br />
<span style="font-size: large;"><br /></span>
<span style="font-size: large;">В общем, моё состояние после получения подобных вопросов похоже на одного кота-мема. Обычно, этот мем сопровождается текстом, который начинается со слов: "Честно сказать я ...". Продолжать не буду, гугл вам в помощь.</span><br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJre9I2UaBhKPGa3kJsqI33iO7KcE3_XZQ9CO_GI54sSsiTq8Pk4AbQ-8pCb03z-3ZrdBqJsmWZQSxDcOENK89FBQX6D9IY-sK96Hase9WO9N_0TKoffNslJU-OdE1o-BXQ8wI199SDFMu/s1600/truecat.jpg" imageanchor="1"><img border="0" height="239" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJre9I2UaBhKPGa3kJsqI33iO7KcE3_XZQ9CO_GI54sSsiTq8Pk4AbQ-8pCb03z-3ZrdBqJsmWZQSxDcOENK89FBQX6D9IY-sK96Hase9WO9N_0TKoffNslJU-OdE1o-BXQ8wI199SDFMu/s320/truecat.jpg" width="320" /></a></div>
AKhttp://www.blogger.com/profile/06260079966243851946noreply@blogger.com10tag:blogger.com,1999:blog-8616169664146917450.post-84863003458491062782015-11-04T07:42:00.000-08:002015-11-04T08:10:02.953-08:00Активность или активити?<div dir="ltr" style="text-align: left;" trbidi="on">
В рунете термину activity не повезло. На русский язык слово переводится, как "активность", большинство разработчиков под Android игнорируют нормальное русское слово и использует кальку с английского - "активити". Попробуем разобраться.<br />
Начнём с простого. Есть термин Class - повезло, в русском языке есть слово Класс. Менять ничего не будем.<br />
Есть термин Form (например, в Visual Studio) - термин Форм не очень удобен для выговаривания, благо есть похожее слово Форма. Будем говорить по-русски.<br />
Есть тип String - неужели, стринги? о_О<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhupDlSLKlkI2bmOuCLZ-1_DfHejFA6ZxFeLVljwNUtS-eVl0y53TO0XiH7A-EJi3fyDjDce4xeMIxu93Ovf_mNCGe0ewZ9oIOJWsYGHEfobVuiuqgUZxpyMVvRayMx2sz5t2uYx2Kz1DwN/s1600/stringi.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhupDlSLKlkI2bmOuCLZ-1_DfHejFA6ZxFeLVljwNUtS-eVl0y53TO0XiH7A-EJi3fyDjDce4xeMIxu93Ovf_mNCGe0ewZ9oIOJWsYGHEfobVuiuqgUZxpyMVvRayMx2sz5t2uYx2Kz1DwN/s1600/stringi.jpg" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
Нет, конечно. Мы этот тип назовём строковым. Строка, она и в Африке строка.</div>
<div class="separator" style="clear: both; text-align: left;">
А теперь (барабанная дробь) - Activity. Люди испугались нового термина. Какая ещё активность? Не понятно. А раз непонятно, давайте назовём непонятную фигню непонятным словом, чтобы всех запутать. Может уважать будут, "яжпрограммист".</div>
<div class="separator" style="clear: both; text-align: left;">
Откроем страницу документации для android-разработчика <a href="https://developers.google.com/android/reference/com/google/android/gms/location/ActivityRecognitionApi">https://developers.google.com/android/reference/com/google/android/gms/location/ActivityRecognitionApi</a>, в которой рассказывается об ActivityRecognitionApi. В тексте много раз встречается слово Activity - 31 раз. Если вчитаться в текст, то будет понятно, что речь идёт о физической активности - бег, езда на велосипеде и т.д. Вы можете себе представить фразу в разговоре - физическая активити? </div>
<div class="separator" style="clear: both; text-align: left;">
Как видите, американцы не видят разницы между физической активностью и активностью на экране, называя это всё одним словом. И только у русскоговорящих свой особый путь.</div>
<div class="separator" style="clear: both; text-align: left;">
Вот почему на моём сайте вы нигде не увидите этого уродца. Активность и только активность. Я слишком сильно уважаю свой родной русский язык.</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhNaThMz7xe_8sQjzuZGLdKdqrDDcHqLuEBCBdY6yCD2WgURlbISoCPbayQ9v_-HFDdAt79yZyN-MmYB0rNLE9aktrgz3QVRRVS_GuYz7hyzbGrpoZJoCpuz5HFF4dW-oVNF_WLP2zNcuQ/s1600/43613-kot-pidrila.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="266" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhNaThMz7xe_8sQjzuZGLdKdqrDDcHqLuEBCBdY6yCD2WgURlbISoCPbayQ9v_-HFDdAt79yZyN-MmYB0rNLE9aktrgz3QVRRVS_GuYz7hyzbGrpoZJoCpuz5HFF4dW-oVNF_WLP2zNcuQ/s320/43613-kot-pidrila.jpg" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
Upd. Мне тут оперативно подсказали, что на сайте developer.android.com локализовали часть статей и Activity перевели, вы не поверите, как операция. Операция, Карл!<br />
Подозреваю, что наняли студентов-филологов. Сразу вспоминается фраза - Не читайте советских газет...<br />
<br /></div>
AKhttp://www.blogger.com/profile/06260079966243851946noreply@blogger.com0tag:blogger.com,1999:blog-8616169664146917450.post-75848163495149493952015-10-02T05:59:00.002-07:002015-10-02T06:01:24.072-07:00Покой нам только снится<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="font-size: large;">Первая версия статьи <a href="http://developer.alexanderklimov.ru/android/android2.php" target="_blank">Hello World</a> была написана ещё в 2012 году, когда все пользовались устройствами Android 2.3 и средой разработки Eclipse.</span><br />
<span style="font-size: large;">Затем статья много раз переписывалась. Менялся внешний вид экранов приложения, шаблоны, код, версии устройств. Приходилось делать новые скриншоты и делать новые пояснения по коду. После пришла очередь Androd Studio - и всё по новой.</span><br />
<span style="font-size: large;">Но и студия не стояла на месте. Постоянно в новых версиях появлялись и исчезали различные прибамбасы.</span><br />
<span style="font-size: large;">Буквально вчера я запустил новый проект под версией Android Studio 1.4. И опять многое поменялось. Появились новые шаблоны с использованием Material Design. Кстати, простейший шаблон теперь называется Empty Activity и вдобавок из него убрали код для меню.</span><br />
<span style="font-size: large;">А в шаблоне с старым названием Blank Activity теперь используется плавающая кнопка Floating Action Button из библиотеки Android Design Support Library.</span><br />
<span style="font-size: large;">Вот так и живём. Сегодня очередной раз отредактировал урок <b>Hello World</b>.</span><br />
<span style="font-size: large;">В ближайшие дни надо пробежаться по другим статьям и посмотреть, нужно ли что-то там менять. А то новички завалят письмами, почему у них выходит совсем другое.</span></div>
AKhttp://www.blogger.com/profile/06260079966243851946noreply@blogger.com4tag:blogger.com,1999:blog-8616169664146917450.post-27768767530584654742015-10-02T00:46:00.002-07:002015-10-02T00:46:55.664-07:00Воскрешение<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="color: #333333; font-family: inherit; font-size: 20px; font-style: inherit; font-weight: inherit; line-height: 30px; white-space: nowrap;">Меняемся...</span><br />
<span style="color: #333333; font-family: inherit; font-size: 20px; font-style: inherit; font-weight: inherit; line-height: 30px; white-space: nowrap;">Раньше блог имел название</span> <span style="color: #333333; font-family: inherit; font-size: 20px; font-style: inherit; line-height: 30px; white-space: nowrap;"><b>Русский .NET Framework</b></span><span style="color: #333333; font-family: inherit; font-size: 20px; font-style: inherit; font-weight: inherit; line-height: 30px; white-space: nowrap;">, </span><br />
<span style="color: #333333; font-family: inherit; font-size: 20px; font-style: inherit; font-weight: inherit; line-height: 30px; white-space: nowrap;">показывая моё старое увлечение .Net-платформой.</span><br />
<span style="color: #333333; font-family: inherit; font-size: 20px; font-style: inherit; font-weight: inherit; line-height: 30px; white-space: nowrap;">Блог четыре года назад был заброшен, </span><br />
<span style="color: #333333; font-family: inherit; font-size: 20px; font-style: inherit; font-weight: inherit; line-height: 30px; white-space: nowrap;">так как я полностью перешёл на разработку под Android.</span><br />
<span style="color: #333333; font-family: inherit; font-size: 20px; font-style: inherit; font-weight: inherit; line-height: 30px; white-space: nowrap;">Соответственно, поменял адрес сайта (раньше был rusnetframework.blogspot.com)</span><br />
<span style="color: #333333; font-family: inherit; font-size: 20px; font-style: inherit; font-weight: inherit; line-height: 30px; white-space: nowrap;"> и его описание.</span><br />
<span style="color: #333333; font-family: inherit; font-size: 20px; font-style: inherit; font-weight: inherit; line-height: 30px; white-space: nowrap;">Здесь я буду выкладывать небольшие заметки, размышления и прочие мысли, </span><br />
<span style="color: #333333; font-family: inherit; font-size: 20px; font-style: inherit; font-weight: inherit; line-height: 30px; white-space: nowrap;">которые не подходят по формату для сайта <a href="http://developer.alexanderklimov.ru/android/" target="_blank">Освой программирование играючи</a></span><br />
<br />
<br /></div>
AKhttp://www.blogger.com/profile/06260079966243851946noreply@blogger.com0tag:blogger.com,1999:blog-8616169664146917450.post-20087286861898347422011-10-12T11:06:00.000-07:002011-10-12T11:16:24.291-07:00SetComputerNameДобавил в <a href="http://developer.alexanderklimov.ru/guide.php">справочник по функциям Windows API</a> описание для функции <b>SetComputerName</b>. Кстати, я не нашел, как можно эту операцию сделать с помощью управляемого кода. Кто-нибудь знает?<br /><br /><pre>[DllImport("kernel32.dll")]<br />static extern bool SetComputerName(string lpComputerName);<br /></pre><br />SetComputerName устанавливает новое имя компьютера пользователя. Имя помещено в строковую переменную lpComputerName. Чтобы изменения вступили в силу, требуется перезагрузка компьютера. Имя компьютера можно изменить также с помощью компонента Панели управления <b>Система</b>.<br /><h3>Параметры</h3><dl><dt>lpComputerName</dt><dd>Строка, достаточно большая для хранения имени компьютера</dd><h3>Пример</h3><pre>' Устанавливаем новое имя компьютера<br />bool done = SetComputerName("NewName");<br /><br />if (done)<br />{<br /> MessageBox.Show("Перезагрузите компьютер, чтобы изменения вступили в силу");<br />}<br /></pre><br />Зарегистрированные пользователи скоро получат новую версию электронного справочника.<br /></dl>AKhttp://www.blogger.com/profile/06260079966243851946noreply@blogger.com0tag:blogger.com,1999:blog-8616169664146917450.post-62179800848200185332011-04-03T07:33:00.000-07:002011-04-03T07:53:38.156-07:00ClipCursorНедавно редактировал страницы описаний функций Windows API для Visual Basic 6.0 (<a href="http://rusproject.narod.ru/api/winapi.htm">http://rusproject.narod.ru/api/winapi.htm</a>) и обратил внимание, что не написал аналога функции ClipCursor для другого Справочника по функциям Windows API для .NET Framework. Решил восполнить пробел. Сама функция интересна тем, что с ее помощью можно запереть курсор мыши в замкнутом пространстве. Это дает простор для создания различных шуток и розыгрышей (эх, 1 апреля пропустил). Только учтите, что даже при закрытии приложения мышь будет метаться в заданном вами прямоугольнике! Поэтому необходимо предусмотреть возможность восстановить работоспособность бедной мышки. По секрету скажу, что комбинации клавиш Ctrl+Alt+Del или Alt+Tab позволяют освободить мышь из плена. Теперь сам пример.<br /><pre class="brush: csharp"><br />// Временно ограничим перемещения курсора областью формы Form1<br />[DllImport("user32.dll")]<br />static extern bool ClipCursor(ref RECT lpRect);<br /><br />[DllImport("user32.dll")]<br />public static extern int GetWindowRect(IntPtr hwnd, ref RECT lpRect);<br /><br />[DllImport("user32.dll", EntryPoint = "GetDesktopWindow")]<br />public static extern IntPtr GetDesktopWindow();<br /><br />[StructLayout(LayoutKind.Sequential)]<br />public struct RECT<br />{<br /> public int left;<br /> public int top;<br /> public int right;<br /> public int bottom;<br />}<br /><br />private void button1_Click(object sender, EventArgs e)<br />{<br /> RECT rc = new RECT(); // прямоугольник ограничения<br /> GetWindowRect(this.Handle, ref rc); // помещаем координаты окна в прямоугольник<br /> ClipCursor(ref rc); // ограничиваем перемещения курсора<br />}<br /><br />private void button2_Click(object sender, EventArgs e)<br />{<br /> //код для "освобождения" курсора.<br /> RECT rc = new RECT(); // прямоугольник ограничения<br /> IntPtr hWind = GetDesktopWindow(); // получаем описатель рабочего стола<br /> GetWindowRect(hWind, ref rc); // помещаем координаты рабочего стола в прямоугольник<br /> ClipCursor(ref rc); // "ограничиваем" курсор целым экраном<br />}<br /></pre>AKhttp://www.blogger.com/profile/06260079966243851946noreply@blogger.com1tag:blogger.com,1999:blog-8616169664146917450.post-87076688824712628942011-02-13T01:13:00.000-08:002011-02-13T02:09:51.914-08:00Microsoft+Nokia: В одну кучку гоп!<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoqspiwWrohkmQNGTHGxiJq8y2PFx7j0F68RqES_WbjnQBE_qMWkbm0wQGnzXltm7nchiQm0QNeiVHCiKpRJcWG8hT49HmPWoQm_VWP_kiXvmzb9M72qYR303MHRxxvbgI6UxSnzgxN7sV/s1600/3310wp7.jpg"><img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 400px; height: 218px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoqspiwWrohkmQNGTHGxiJq8y2PFx7j0F68RqES_WbjnQBE_qMWkbm0wQGnzXltm7nchiQm0QNeiVHCiKpRJcWG8hT49HmPWoQm_VWP_kiXvmzb9M72qYR303MHRxxvbgI6UxSnzgxN7sV/s400/3310wp7.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5573100232330353858" /></a>В последние дни очень активно обсуждается тема будущего совместного сотрудничества между компаниями Nokia и Microsoft. Мнения по этому поводу разделились диаметрально противоположным образом. Я тоже решил высказать здесь свое мнение, чтобы спустя некоторое время проверить, насколько был прав.<div>Во-первых, для меня очевидно, что и Nokia и Microsoft переживают трудные времена в области мобильных телефонов. Рынок телефонов сейчас является лакомым кусочком для многих компаний, и поэтому таким гигантам очень обидно проигрывать на этом участке, учитывая их амбиции.</div><div>Примечательно, что сами компании вслух отрицают, что дела у них плохо. И стараются делать хорошую мину при плохой игре. Например, просто замалчивают результаты своих продаж, или составляют статистику немного хитрым образом. Но независимые аналитики доказывают, что доля Nokia и Microsoft на рынке падает. А потребитель выбирает iPhone и телефоны на базе Android. </div><div>В конце концов Nokia сдалась и призналась, что они стали аутсайдерами в гонке. Это признание сделал новый главный руководитель Nokia в закрытом письме для сотрудников. Позже он подтвердил свое авторство письма, когда оно стало достоянием общественности.</div><div>Microsoft пока держится и не делает никаких признаний. Но косвенные улики указывают на плачевное состояние дел. Во-первых, компания упорно не раскрывает статистику продаж. Особенно смешно это выглядит на фоне парадных рапортов о рекордных продажах Windows 7, MS Office, Kinect. Далее стали просачиваться осторожные высказывания некоторых партнеров MS, которые сетуют на то, что они рассчитывали на более высокие продажи, но при этом быстро добавляли, что сама система им очень-очень нравится (правда, правда). Видимо, чтобы не вызвать праведного гнева корпорации.</div><div>Я долго ждал, кто же первым произнесет слово <b>Провал</b> в отношении Windows Phone 7. И, наконец-то, дождался. Первым смельчаком оказался известный аналитик Эльдар Муртазин.</div><div>Так что же нам ждать от объединения Nokia и Microsoft? А никто не знает. Во-первых, было произнесено слишком много общих слов. Во-вторых, две компании с богатыми потенциальными возможностями не всегда могут составить идеальную пару, даже став союзниками. Лично я скептически отношусь к новообразованному союзу. И вот почему. Nokia собирается переходить на систему Windows Phone 7, которая и так уже ничем не удивила пользователя. Да, число владельцев Windows Phone 7 увеличится, но оно увеличится только за счет уменьшения доли Symbian. А часть поклонников Nokia также перейдут на Android и iPhone.</div><div>Но на самом деле, для меня не так важно, какую часть рынка займут телефоны Windows Phone 7. Например, несмотря на растущую популярность Android и iPhone, я до сих пор пользуюсь Windows Mobile 6.5. Причина моего выбора была проста - я мог писать программы для себя на Visual Studio 2008. Но Microsoft сама обрубила сук, на котором сидела. Во-первых, она прекратила без объяснения причин поддержку Windows Mobile в Visual Studio 2010. Во-вторых, она решила полностью скопировать поведение Apple и ввела систему членства и ограничений. Теперь, чтобы написать программу и поделиться с другом, нужно заплатить 99 долларов в год и разместить ее в MarketPlace. Объединение с Nokia ничего не изменит в этой политике. Естественно, на фоне этих событий мне придется переходить на Android с ее более демократичным подходом.</div><div>Это очень обидно, так как программировать в Visual Studio для Windows Phone 7 гораздо приятнее, чем в Eclipse для Android. Например, приступая к изучению основ программирования под Windows Phone 7, совершенно не знал Silverlight и XNA. Но вхождение в новые технологии было очень простым и понятным. Для Android все немного сложнее и запутаннее. </div><div>Остается маленькая надежда, что в Microsoft будут сделаны кадровые перестановки и придет очень хороший руководитель, который сможет убедить руководство изменить систему в лучшую сторону. То, что мы видим сейчас - это, простите, убожество. Чем дальше я смотрю на дизайн Windows Phone, тем больше в нем разочаровываюсь. Уже все знают о черной полоске со стрелкой на главном окне телефона и несимметричном расположении плиток. Но меня также удивляет и стиль Metro, который выдают за оригинальное дизайнерское решение. Я не дизайнер, и поэтому принимал данное утверждение на веру. А теперь выскажу свое скромное мнение. Посмотрим на эту ситуацию с такой стороны. На сегодняшний день все продающиеся телефоны с Windows Phone 7 можно отнести к дорогой ценовой категории от 500 долларов и выше. А теперь представьте, подобный телефон покупает состоятельный человек, который видит простенький интерфейс Metro без градиентов, округлостей, теней. Но состоятельный человек на метро не катается, зачем ему убогий интерфейс, если он привык к красивым блестящим машинам, ноутбукам, хрустальным бокалам и так далее. Красивые сайты в стиле Web 2.0 тоже еще не потеряли своей привлекательности. Сюда же можно добавить победное распространение HTML5 и CCS3, которые позволяют делать очень симпатичные вещи. На этом фоне интерфейс Windows Phone 7 выглядит шагом назад, а его функциональные возможности сравнимы с первыми моделями iPhone. </div><div>Таким образом, мой прогноз относительно будущего Windows Phone 7: в 2011 году будет полный провал по всем фронтам. Далее возможны варианты. Microsoft признает свое поражение и начнет кардинально улучшать систему. Либо компания упорно будет гнуть свою линию и делать косметические изменения, накапливая силы на другой проект, чтобы выстрелить в 2012 году.</div><div>Тем не менее, альянсу хочется пожелать удачи. Во-первых, это заставит шевелиться конкурентов, во-вторых у пользователя будет больше выбора, в-третьих, это просто интересно, что получится если скрестить ежа с колючей проволокой (шутка).</div>AKhttp://www.blogger.com/profile/06260079966243851946noreply@blogger.com1tag:blogger.com,1999:blog-8616169664146917450.post-56608158671123061112010-10-31T11:22:00.000-07:002010-10-31T11:35:22.098-07:00ExtractAssociatedIconC помощью системной функции Windows API <strong>ExtractAssociatedIcon</strong> можно извлечь значок, ассоциированный с файлом. Значки возвращаются с размером 32х32. <br /><pre><br />[C#]<br />[DllImport("shell32.dll")]<br />static extern IntPtr ExtractAssociatedIcon(IntPtr hInst, StringBuilder lpIconPath,<br /> out ushort lpiIcon);<br /> <br />или<br /><br />[DllImport("shell32.dll")]<br />static extern IntPtr ExtractIcon(IntPtr hInst, string lpszExeFileName, int nIconIndex);<br /></pre><br /><br /><h3>Пример</h3><br /><pre><br />// Отобразим значок какого-нибудь файла<br />// Добавим в проект элемент OpenFileDialog, кнопку и PictureBox<br /><br />openFileDialog1.ShowDialog();<br /><br />ushort uicon;<br />StringBuilder strB = new StringBuilder(openFileDialog1.FileName);<br />IntPtr handle = <b>ExtractAssociatedIcon</b>(this.Handle, strB, out uicon);<br />Icon ico = Icon.FromHandle(handle);<br /><br />pictureBox1.Image = ico.ToBitmap();<br /></pre><br /><br />Запустите проект и выберите любой файл на диске. На форме в PictureBox отобразится значок, который используется для выбранного файла (как это мы видим в Проводники).<br /><br />Описание функции и ее параметров добавлено в <a href="http://developer.alexanderklimov.ru/guide.php">справочник по функциям Windows API для .NET Framework</a>.<br /><br /><p>К слову сказать, совсем не обязательно использовать неуправлямый код. В .NET Framework есть метод <b>Icon.ExtractAssociatedIcon</b> пространства имен System.Drawing, который делает ту же работу.</p><br /><br />Добавьте в проект еще одну кнопку и напишите следующий код:<br /><pre><br />if (openFileDialog1.ShowDialog() == DialogResult.OK)<br />{<br /> Icon icon = Icon.ExtractAssociatedIcon(openFileDialog1.FileName);<br /> this.Icon = icon;<br /> pictureBox1.Image = icon.ToBitmap();<br />}<br /></pre><br /><br />Удачного вам программирования!AKhttp://www.blogger.com/profile/06260079966243851946noreply@blogger.com1tag:blogger.com,1999:blog-8616169664146917450.post-79291993470232196462010-10-30T04:53:00.000-07:002010-10-30T08:25:30.646-07:00Разлочка эмулятора Windows Phone 7Эмулятор Windows Phone 7, который входит в состав Windows Phone Developer Tools, какой-то обрезанный. Непонятно, зачем Микрософт пошла на такой шаг. Доступен только Internet Explorer и собственные приложения, создаваемые в Visual Studio. К счастью, нашлись умельцы, которые сумели разлочить эмулятор, отредактировав его файл. Файл можно найти в интернете по слову <b>WM70C1.en-US.unlocked</b>. Я скачивал <a href="http://depositfiles.com/files/t8k28hugd">отсюда</a>.<br />Скачайте файл и перенесите его в папку <b>%programfiles%\Microsoft SDKs\Windows Phone\v7.0\Emulation\Images\</b>. В этой папке вы найдет образ оригинального эмулятора (файл WM70C1.en-US.bin). Далее переименуйте оригинальный файл эмулятора и сохраните его на всякий случай. Теперь переименуйте ваш скачанный файл, чтобы он имел нужное имя. Запустите какой-нибуль проект на Visual Studio. Ваше приложение запустится в новом эмуляторе.<br />Закройте свое приложение и просмотрите новый вид разлоченного эмулятора. Небо и земля. Естественно, вы все делаете на свой страх и риск. Я никаких сбоев не заметил, все работает.<br /><br /><h3>Скриншоты</h3><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_iaOeRqXXfwQ/TMw0koLjaQI/AAAAAAAAAH0/IA75f8_mCHM/s1600/unlockedemulator4.JPG"><img style="cursor:pointer; cursor:hand;width: 215px; height: 400px;" src="http://4.bp.blogspot.com/_iaOeRqXXfwQ/TMw0koLjaQI/AAAAAAAAAH0/IA75f8_mCHM/s400/unlockedemulator4.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5533855845997308162" /></a><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_iaOeRqXXfwQ/TMw0kgx7gsI/AAAAAAAAAHs/ZDUfGMGxEPo/s1600/unlockedemulator3.JPG"><img style="cursor:pointer; cursor:hand;width: 213px; height: 400px;" src="http://4.bp.blogspot.com/_iaOeRqXXfwQ/TMw0kgx7gsI/AAAAAAAAAHs/ZDUfGMGxEPo/s400/unlockedemulator3.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5533855844010787522" /></a><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_iaOeRqXXfwQ/TMw0kdUyRPI/AAAAAAAAAHk/FR4zsMxc1lc/s1600/unlockedemulator2.JPG"><img style="cursor:pointer; cursor:hand;width: 215px; height: 400px;" src="http://2.bp.blogspot.com/_iaOeRqXXfwQ/TMw0kdUyRPI/AAAAAAAAAHk/FR4zsMxc1lc/s400/unlockedemulator2.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5533855843083240690" /></a><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_iaOeRqXXfwQ/TMw0kbMLBXI/AAAAAAAAAHc/u5JuEa3ui5k/s1600/unlockedemulator1.JPG"><img style="cursor:pointer; cursor:hand;width: 217px; height: 400px;" src="http://3.bp.blogspot.com/_iaOeRqXXfwQ/TMw0kbMLBXI/AAAAAAAAAHc/u5JuEa3ui5k/s400/unlockedemulator1.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5533855842510243186" /></a><br /><h3>Видео</h3><br /><object width="480" height="385"><param name="movie" value="http://www.youtube.com/v/KLBY1h1o6ds?fs=1&hl=ru_RU&rel=0"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/KLBY1h1o6ds?fs=1&hl=ru_RU&rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object><br /><br />Пользуйтесь на здоровье.AKhttp://www.blogger.com/profile/06260079966243851946noreply@blogger.com0tag:blogger.com,1999:blog-8616169664146917450.post-63206866507812414312010-09-12T01:31:00.000-07:002010-09-12T04:32:02.406-07:00Изучайте XAML, WPF и SilverlightВ наше время происходит какой-то бум в языках программирования. Кажется, совсем недавно в ходу были C++, Visual Basic, Delphi, Java. Сейчас лидерами становятся совсем другие языки и технологии. И программистам очень трудно угнаться за этой гонкой.<br />Я сам в свое время очень долго не мог соскочить с Visual Basic 5.0 на Visual Basic 6.0, хотя, казалось, это всего лишь обновление номера версии. Но, я настолько привык к привычному окружению, что просто боялся все поломать. Спустя некоторое время уже сам удивлялся другим коллегам, которые не собирались переходить на VB 6.0, объясняя тем, что VB5.0 гораздо быстрее и занимает меньше места. А изменения не настолько существенны, чтобы обновляться.<br />Еще большим шоком стало появление .NET Framework со своей новой идеологией и полным отсутствием совместимости со старыми программами. Первые версии фреймворка благополучно пролетели мимо меня. Но Microsoft упорно гнула свою линию и убеждала переходить на новые языки. И я купил на Озоне Visual Basic.NET 2003. Но большу часть времени я все равно программировал на старом добром VB6.0.<br />В какой-то момент времени я вдруг понял, что пока не поздно, лучше начать изучение .NET Framework на C#. Сейчас я понимаю, что тогда я сделал правильный выбор. И, хотя, Microsoft пытается параллельно поддерживать все языки, большинство материлов в сети базируется именно на C#.<br />Но, успокаиваться было рано. Неожиданно на горизонте появилась новая технология XAML. Но, к тому времени я очень интенсивно изучал программирование для мобильной платформы Windows Mobile. Поэтому слова XAML, Silverlight, WPF были для меня пустым звуком, так как они не поддерживались мобильными телефонами. К сожалению, это был мой стратегический просчет. Технология XAML окрепла и стала завоевывать сердца разработчиков. Я пытался оттянуть тот момент, когда придется изучать XAML, жизнь внесла свои коррективы.<br />Когда Microsoft в очередной раз поменяла правила игры и объявила, что следующая платформа Windows Phone 7 будет базироваться на Silverlight, я понял, что мне придется снова переучиваться.<br />И чем больше я погружаюсь в этот неведомый мир, тем больше он мне нравится. Знаю, что многие программисты находятся в похожем состоянии и еще не приняли решения о переходе на новые технологии. На мой взгляд, на сегодняшний день в сети или в магазинах нет хороших материалов для начинающих, которые бы с самых азов объяснили возможности XAML. Как правило, все учебные материалы уже предполагают базовое знакомство с языком C# и имеют высокий порог вхождения.<br />Но, на самом деле, язык XAML очень прост и элегантен. Сейчас я попытаюсь очень популярно объяснить, как пишется код на XAML, чтобы даже самые отъявленные новички поняли суть материала.<br />Если у вас есть опыт работы с HTML, то вам будут понятны основные понятия. По-существу, XAML - это язык разметки, как и HTML. (Обязательно найдется зануда, который скажет, что это язык разметки XML). Код состоит из тегов: начальный, конечный, или укороченный вариант самозакрывающего тега.<br />Предположим, нам для работы нужна кнопка. Достаточно написать следующее<br /><br /><pre><Button Foreground="LightSeaGreen" FontSize="24pt" Width="200" Height="50"><br />Привет, XAML<br /></Button></pre><br />Как видите, все очень просто. Есть тег Button с параметрами цвета, шрифта, размеров. Также обстоят дела и с другими элементами. Нужно только запомнить, что существует самый главный единственный корневой тег (в HTML таким тегом можно считать <html>), внутри которого находятся дочерние элементы. Таким образом выстраивается целое дерево родительских и дочерних элементов. <br />Обратите внимание, что код XAML можно написать даже в Блокноте и запустить из Проводника. Более подробно я описал этот материал в статье <a href="http://developer.alexanderklimov.ru/wpf/aboutxaml.php">Что такое XAML</a>.<br />Рекомендую первое время писать код вручную, хотя в Visual Studio 2010 появился свой GUI-редактор, позволяющий визуально размещать элементы, как это делалось в Windows Forms.<br />Когда вы наберетесь небольшого опыта, вы заметите, что некоторые вещи делать гораздо проще в WPF и Silverlight, которые тесно завязаны на XAML (но это не одно и то же).<br />Даже, если вам еще не приходилось работать с WPF, все равно прочитайте другую мою статью <a href="http://developer.alexanderklimov.ru/wpf/round-and-dropshadow.php">Закругляем углы и отбрасываем тень</a>. Код настолько простой и понятный, что вы удивитесь, как легко создать различные эффекты отбрасывающей тени или закругления уголков. Причем, возможности XAML гораздо выше. Наверняка, вы слышали, что Silverlight считают конкурентом Flash. Так вот, XAML обладает широким арсеналом анимационных эффектов и других рюшечек.<br />Просматривая свои старые проекты, написанные традиционным способом на WinForms, я все чаше испытываю соблазн переписать их на WPF. И, хотя я не волшебник, а только учусь, но XAML теперь стоит у меня на первом месте в плане изучения.<br />Присоединяйтесь!AKhttp://www.blogger.com/profile/06260079966243851946noreply@blogger.com6tag:blogger.com,1999:blog-8616169664146917450.post-56913756196394000782010-06-06T10:03:00.000-07:002010-06-06T10:13:44.662-07:00ShowThumbnailsOnNavigation<p>Хочу поделиться с вами одним трюком, который был описан в одном блоге MSDN.</p><p>В IDE-редакторе Visual Studio 2010 при нажатии Ctrl+Tab вы можете перемещаться между открытыми активными файлами. Менеджер окон выглядит следующим образом.</p><a href="http://3.bp.blogspot.com/_iaOeRqXXfwQ/TAvVJDbd6oI/AAAAAAAAAGc/yrJB-pphOhE/s1600/showthubnail1.png"><img style="WIDTH: 400px; HEIGHT: 300px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5479707723142392450" border="0" alt="" src="http://3.bp.blogspot.com/_iaOeRqXXfwQ/TAvVJDbd6oI/AAAAAAAAAGc/yrJB-pphOhE/s400/showthubnail1.png" /></a><br /><br /><p>При помощи небольшого трюка можно добавить в это окно эскизы файлов. Откройте редактор реестра и в разделе <b>HKCU\Software\Microsoft\VisualStudio\10.0\General</b> добавьте параметр DWORD <b>ShowThumbnailsOnNavigation</b> со значением 1. Перезапустите Visual Studio и вы увидите, что теперь появились эскизы.</p><a href="http://1.bp.blogspot.com/_iaOeRqXXfwQ/TAvVJ0a8A0I/AAAAAAAAAGk/Xp3ocyJXyxI/s1600/showthubnail2.png"><img style="WIDTH: 400px; HEIGHT: 203px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5479707736293507906" border="0" alt="" src="http://1.bp.blogspot.com/_iaOeRqXXfwQ/TAvVJ0a8A0I/AAAAAAAAAGk/Xp3ocyJXyxI/s400/showthubnail2.png" /></a><br /><br /><p>Интересно отметить, что данные эскизы были доступны в Visual Studio 2008 и Visual Studio 2010beta, но затем эту функциональность убрали.</p><p>Примечание: большой сборник настроек реестра Windows вы можете найти в <a href="http://user.alexanderklimov.ru/">справочнике по реестру Windows</a>.</p>AKhttp://www.blogger.com/profile/06260079966243851946noreply@blogger.com0tag:blogger.com,1999:blog-8616169664146917450.post-41227843819201996622010-05-03T05:07:00.000-07:002010-05-03T05:33:29.174-07:00Windows Phone Developer Tools CTPНа прошлой неделе на нашей улице наступил праздник и имя ему Апрельский фрэш Windows Phone Developer Tools CTP April Refresh. Объясню, почему праздник. Когда вышла финальная версия Visual Studio 2010, я снес предыдущую Visual Studio 2008 и остался у разбитого корыта. В новой версии напрочь отсутствует поддержка Windows Mobile 6 и я теперь не могу поддерживать свои старые проекты. А бету-версия Windows Phone Developer Tools нельзя было ставить на финальный релиз VS2010.<br />Я плевался и ругался, потому что так нельзя работать. Все пошло коту под хвост. К счастью, ребята из Microsoft подсуетились и выпустили в свет упомянутый выше пакет разработки под Windows Phone.<br />В состав пакета входит Visual Studio 2010 Express for Windows Phone и эмулятор. Если у вас уже стояла профессиональная версия VS2010, то у вас также появятся новые шаблоны для проектов под Windows Phone.<br />Теперь можно более предметно изучать примеры под новую платформу. Несмотря на то, что теперь нет никакой совместимости со старым .NET Compact Framework, я не сильно переживаю по этому поводу. Как известно, теперь требуется программировать под Silverlight и XNA. Давно собирался вплотную заняться изучением этих технологий, но стимула не было. Теперь такой стимул появился.<br />Сама технология интенсивно развивается, и, наверняка, много к концу года поменяется. Тем не менее можно уже сейчас создавать интересные примеры. Кстати, если вы не боитесь экспериментов, то можете разлочить эмулятор, чтобы увидеть скрытые возможности. Подробнее можете почитать на Хабре (<a href="http://habrahabr.ru/blogs/mobiledev/92600/">http://habrahabr.ru/blogs/mobiledev/92600/</a>).<br />А для новичков я собираюсь подготовить учебный курс, который будет располагаться по адресу <a href="http://developer.alexanderklimov.ru/winmobile/wp7/wp7-tutorial.php">http://developer.alexanderklimov.ru/winmobile/wp7/wp7-tutorial.php</a><br />Не обещаю, что наполнение курса новыми материалами будет идти быстрыми темами, но одну-две статьи в неделю, я надеюсь, разместить смогу.<br />Присоединяйтесь!AKhttp://www.blogger.com/profile/06260079966243851946noreply@blogger.com0tag:blogger.com,1999:blog-8616169664146917450.post-24714760774887050922010-03-14T08:14:00.001-07:002010-03-14T08:38:57.823-07:00Small BasicНекоторое время назад я установил на свой компьютер программу Small Basic версии 0.7. Сама программа предназначена для совсем юных программеров, которые хотели бы приобщиться к программированию. Программа получилась очень красивая и легкая и похожа на забаву. В Small Basic всего 15 (!) ключевых слов, но энтузиасты уже написали на этом языке тетрис, пинг-понг, удав и многое другое.<br />Small Basic базируется на .NET Framework и полученные знания не пропадут впустую - можно затем перейти на Visual Basic или C#.<br />Кроме того, программа позволяет создавать исполняемые файлы - достаточно сохранить исходники программы на диске и при следующем запуске программы в Small Basic в папке рядом с файлом-исходником *.SB появится EXE-файл.<br />Также можно написать расширение для Small Basic на любом языке .NET Framework, например, C#.<br />Особенно, мне понравился встроенный объект черепашка (Turtle). С ее помощью можно вычерчивать различные красивые узоры, используя команды поворота.<br />Приятно отметить, что Small Basic локализован для многих стран, в том числе и для России. Если у вас в первых раз загрузилась неправильная версия (например, у меня почему-то загрузилась французская версия), то зайдите в Пуск/Все программы/Small Basic/Localized и выберите свою версию.<br />Я немного поигрался с этой программой и забросил ее. Но сегодня узнал интересную новость - появилась новая версия 0.8, в которой появилась интересная функциональность - теперь вы можете размещать свои программы в интернете в виде Silverlight-приложения. Все, что вам нужно сделать - это нажать на кнопку <strong>Опубликовать</strong>. Копия вашей программы будет загружена на сайт smallbasic.com и ей будет присвоен идентификатор. Также вам дадут ссылку на программу, и вы можете похвастаться перед своими знакомыми своей гениальной программой. Более того, на странице программы вы можете скопировать код для использования его в блогах. Попробую это сделать в этом посте, но возможно, в Blogger.com пока это будет недоступно, поэтому я сделаю копию на своей странице (см.дальше). Я скопировал один из примеров документации и добавил одну строчку кода, которая раскрашивает круги, которые наматывает черепашка.<br />Я решил поглубше изучить эту среду разработки и завел для себя специальную страничку по адресу <a href="http://developer.alexanderklimov.ru/smallbasic/smallbasic.php">http://developer.alexanderklimov.ru/smallbasic/smallbasic.php</a> Пока не буду афишировать эту страницу на своем сайте, но если среди читателей блога будет интерес к этому продукту, то сделаю страницу доступной для публики.<br />Удачного вам программирования!<br /><br /><object id="sbapp" data="data:application/x-oleobject;base64,QfXq3+HzJEysrJnDBxUISgAIAADYEwAA2BMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=" width="640" height="480" type="application/x-silverlight-2"><br /> <br /> <br /> <br /> <br /> <br /> <br /></object>AKhttp://www.blogger.com/profile/06260079966243851946noreply@blogger.com1tag:blogger.com,1999:blog-8616169664146917450.post-55277027696576552812010-02-28T05:47:00.000-08:002010-02-28T06:21:10.765-08:00Windows Mobile 6.5.3 DTK<div><div>Совсем Microsoft недавно представила в Барселоне новую платформу Windows Phone 7 Series, которая привлекла к себе внимание специалистов и простых пользователей. На фоне этого ажиотажа, как-то незаметно прошла новость о выходе новой версии Windows Mobile 6.5.3 DTK. А ведь там тоже есть несколько интересных новинок, которые уже доступны для разбработчиков Windows Mobile. Дальнейшие описания действительны для Visual Studio 2008 (для Visual Studio 2005 есть небольшие отличия).<br /><br />Сначала несколько общих слов. В новом релизе Windows Mobile 6.5.3 DTK было добавлена новая документация, новые примеры, заголовки файлов и библиотеки и утилиты. А также добавлены новые образы эмуляторов под Windows Mobile 6.5.3. Не забывайте, что Windows Mobile 6.5.3 DTK необходимо устанавливать <b>после</b> установки Windows Mobile 6 SDK Refresh. При установке DTK ничего из состава SDK не удаляется и вы можете спокойно разрабатывать приложения как для Windows Mobile 6, так и для Windows Mobile 6.5.<br /><br /><h3>Документация</h3>Как и прежде, вся необходимая документация доступна на сайте MSDN. Но, с установкой Windows Mobile 6.5.3 DTK, вы получаете доступ к документации по Windows Mobile в виде локальной отдельной версии справки (<strong>Пуск</strong> <strong>Все программы</strong> <strong>Windows Mobile 6.5.3 DTK</strong> <strong>Documentation</strong> <strong>Windows Mobile 6.5.3 DTK Help</strong>). Это достаточно удобное решение, если у вас нет соединения с интернетом.<br /><br /><h3>Пример Mobile Mapping Framework</h3>В пакет Windows Mobile 6.5.3 DTK был добавлен новый пример, использующий Mobile Mapping Framework (папка ...\Samples\Common\CS\MMF). Что это такое и с чем его едят, я, честно говоря, не знаю. Если кто-то владеет информацией, то поделитесь, плиз.<br /><br /><h3>Новый тип проекта - Widgets for Window Mobile</h3>В Visual Studio 2008 появился новый тип проекта - Widgets for Window Mobile, позволяющий быстро создавать виджеты для Windows Mobile 6.5. О нем чуть ниже.<br /><br /><h3>Образы эмуляторов</h3>Вкусная новость - в состав Windows Mobile 6.5.3 DTK входят несколько новых эмуляторов для Windows Mobile 6.5.3. Я перечислю образы только для профессиональной версии (серия Standard мне не интересна, да и в продаже практически их нет):<br /><br /><ul><li>Windows Mobile 6.5.3 Professional Emulator</li><li>Windows Mobile 6.5.3 Professional Square QVGA Emulator</li><li>Windows Mobile 6.5.3 Professional Square VGA Emulator</li><li>Windows Mobile 6.5.3 Professional VGA Emulator</li><li>Windows Mobile 6.5.3 Professional WQVGA Emulator</li><li>Windows Mobile 6.5.3 Professional WVGA Emulator</li></ul><h3>Новые сертификаты</h3>Также были добавлены новые сертификаты, которые заменяют устаревшие сертификаты, у который сроки истекли в 2009 году. Новые сертификаты будут действительны до 2015 года и доступны в папке ...\Tools\Security\SDK Development Certificates. Так как я не пользуюсь сертификатами, то мне от этого ни горячо, ни холодно.<br /><br /><h3>Новая утилита xHopper</h3>Опытные разработчики знают о программе Hopper, помогающей тестировать приложения в стрессовых ситуациях. Теперь появилась еще одна утилита <b>xHopper</b>. По описанию, новой утилитой пользоваться стало еще удобнее. В ближайшее время я планирую изучить работу утилиты. Также вы можете найти дополнительную информацию о xHopper в документации к Windows Mobile 6.5.3 DTK, о которой говорилось выше.<br /><br /><h3>Новый вид Windows Mobile 6.5.3</h3>Посмотрим, что изменилось в Windows Mobile 6.5.3 по сравнению с Windows Mobile 6.5. Сразу хочу предупредить, что запустить отладку своей программы в Windows Mobile 6.5.3 не получится - в окне выбора эмуляторов при запуске отладки программы нужных версий эмуляторов вы не увидите. Поэтому, чтобы увидеть новую платформу, необходимо запустить менеджер эмуляторов (<strong>Tools Device Emulator Manager...</strong>) и в диалоговом окне выбрать нужный эмулятор.<br /><a href="http://2.bp.blogspot.com/_iaOeRqXXfwQ/S4p3IAf9otI/AAAAAAAAAFc/w03Dxv2p17Y/s1600-h/devemulator.jpg"><img style="WIDTH: 272px; HEIGHT: 400px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5443294079087387346" border="0" alt="" src="http://2.bp.blogspot.com/_iaOeRqXXfwQ/S4p3IAf9otI/AAAAAAAAAFc/w03Dxv2p17Y/s400/devemulator.jpg" /></a><br />Например, выберем <strong>Windows Mobile 6.5.3 Professional VGA Emulator</strong> (<strong>Actions</strong> <strong>Connect</strong>). Чтобы было легче сравнивать, запустим также эмулятор <strong>Windows Mobile 6.5 Professional VGA Emulator</strong>.<br /><a href="http://2.bp.blogspot.com/_iaOeRqXXfwQ/S4p31VbY8QI/AAAAAAAAAFk/NTW-plevs2w/s1600-h/devemulator2.jpg"><img style="WIDTH: 400px; HEIGHT: 321px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5443294857799463170" border="0" alt="" src="http://2.bp.blogspot.com/_iaOeRqXXfwQ/S4p31VbY8QI/AAAAAAAAAFk/NTW-plevs2w/s400/devemulator2.jpg" /></a><br />Первое, что бросается в глаза - кнопка Пуск стала большой и круглой и находится в нижней части экрана, как на десктопных Windows и напоминает кнопку Пуск в Windows 7, только в черно-белом варианте. Соответственно, и панель задач тоже находится внизу. Если вы запустите какую-нибудь программу, то увидите, что кнопка закрытия (крестик Х) тоже стала большой и круглой. Эти изменения очень удобны для пользователя, которому теперь проще дотянуться пальцами одной руки до часто используемых кнопок. Также я заметил, что в Windows Mobile 6.5.3 исчезла игра Bubble Breaker. Могу только предположить, что игра расчитана на использование пера, а это теперь считается дурным тоном (к сожалению).<br /><br /><a href="http://4.bp.blogspot.com/_iaOeRqXXfwQ/S4p5JrK5TsI/AAAAAAAAAFs/Ollr1DnR8l8/s1600-h/devemulator3.jpg"><img style="WIDTH: 400px; HEIGHT: 328px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5443296306744872642" border="0" alt="" src="http://4.bp.blogspot.com/_iaOeRqXXfwQ/S4p5JrK5TsI/AAAAAAAAAFs/Ollr1DnR8l8/s400/devemulator3.jpg" /></a><br /><br /><br /><h3>Разработка виджетов</h3>Теперь поговорим о разработке виджетов в Windows Mobile 6.5.3. Я уже затрагивал эту тему на своем сайте (<a href="http://developer.alexanderklimov.ru/winmobile/widget.php">http://developer.alexanderklimov.ru/winmobile/widget.php</a>), а также на <a href="http://www.xakep.ru/post/48996/default.asp">страницах Хакера</a>. Тогда речь шла о ручном создании виджетов в текстовом редакторе. Теперь можно заниматься разработкой в привычной среде Visual Studio. После установки Windows Mobile 6.5.3 DTK в шаблонах проектов появится новый тип проекта - <strong>Widgets for Window Mobile</strong>. Я не сразу нашел этот тип на своем компьютере. По привычке я искал новый тип в разделе Smart Device, но там ничего нового не было. Сначала подумал, что DTK криво встала и хотел уже переставлять все заново. Но, к счастью, я вовремя заметил, что новый тип проекта находится в корневом разделе. Не повторяйте моих ошибок. Для примера я выбрал шаблон <strong>SimpleWidget</strong>, который содержит все необходимые файлы для создания простого виджета.<br /><a href="http://1.bp.blogspot.com/_iaOeRqXXfwQ/S4p5hIjIgzI/AAAAAAAAAF0/KPuah3-cLb8/s1600-h/widgetType1.jpg"><img style="WIDTH: 400px; HEIGHT: 330px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5443296709768151858" border="0" alt="" src="http://1.bp.blogspot.com/_iaOeRqXXfwQ/S4p5hIjIgzI/AAAAAAAAAF0/KPuah3-cLb8/s400/widgetType1.jpg" /></a><br /><br />Когда проект загрузился в Visual Studio, то стало видно, что проект содержит значок в формате PNG, веб-страницу, конфигурационный файл XML, а также папки с сценариями JavaScript и стилями CSS.<br /><a href="http://1.bp.blogspot.com/_iaOeRqXXfwQ/S4p5wgt-wwI/AAAAAAAAAF8/hFQeNdvycUw/s1600-h/widgetType2.jpg"><img style="WIDTH: 311px; HEIGHT: 275px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5443296973954138882" border="0" alt="" src="http://1.bp.blogspot.com/_iaOeRqXXfwQ/S4p5wgt-wwI/AAAAAAAAAF8/hFQeNdvycUw/s400/widgetType2.jpg" /></a><br />Я стал щелкать по всем файлам, чтобы просмотреть их содержимое. И тут меня ждал приятный сюрприз - когда я щелкнул на файле <strong>config.xml</strong>, то открылось окно редактора <strong>Manifest Editor</strong>. Заполнить все поля в таком редакторе - дело нескольких секунд. Впрочем, вы можете выбрать из контекстного меню файла пункт <strong>View Source</strong> и вручную прописать все необходимые данные.<br /><a href="http://4.bp.blogspot.com/_iaOeRqXXfwQ/S4p7XQdihLI/AAAAAAAAAGU/VERnh7edvTM/s1600-h/widgetType3.jpg"><img style="WIDTH: 361px; HEIGHT: 400px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5443298739116737714" border="0" alt="" src="http://4.bp.blogspot.com/_iaOeRqXXfwQ/S4p7XQdihLI/AAAAAAAAAGU/VERnh7edvTM/s400/widgetType3.jpg" /></a><br /><br />Второй сюрприз меня ждал, когда я решил запустить проект. Нажав на зеленый треугольник, я ожидал увидеть запуск стандартного эмулятора. Как бы не так! У меня запустился Internet Explorer с встроенным <strong>Widget Debugger for Windows Mobile 6.5</strong>.<br /><a href="http://4.bp.blogspot.com/_iaOeRqXXfwQ/S4p6WQQ-EmI/AAAAAAAAAGM/Fh9zgX8eJw8/s1600-h/widgetType4.jpg"><img style="WIDTH: 400px; HEIGHT: 342px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5443297622372520546" border="0" alt="" src="http://4.bp.blogspot.com/_iaOeRqXXfwQ/S4p6WQQ-EmI/AAAAAAAAAGM/Fh9zgX8eJw8/s400/widgetType4.jpg" /></a><br />В окне дебаггера можно поиграться с некоторыми настройками.<br /><br />И, напоследок, даю бесплатный совет. Когда я попытался в сценарии JavaScript добавить для кнопок меню и сообщений слова на русском, то на выходе получил кракозябры. К моему удивлению, файл сценария хранился в ANSI-кодировке. Инструментов для настройки кодировки я не нашел, поэтому я просто открыл JS-файл в блокноте и пересохранил его в UTF-8. Visual Studio заметил, что файл был изменен во внешнем редакторе и спросил, нужно ли его открыть заново (да, нужно). После этого русские символы стали отображаться корректно.<br /><br />Таким образом, используя новинки, пришедшие к нам с Windows Mobile 6.5.3 DTK, мы можем создавать и тестировать приложения для Windows Mobile 6.5.3. А также мы ждем новостей, как будет происходить разработка приложениий для Windows Phone 7 Series. Ждать осталось недолго.</div></div>AKhttp://www.blogger.com/profile/06260079966243851946noreply@blogger.com0tag:blogger.com,1999:blog-8616169664146917450.post-77944043246242725922010-02-09T12:39:00.000-08:002010-02-09T13:53:39.891-08:00Получить информацию о BMP-файле<p>Если вам приходится работать с графическими файлами, то, возможно, у вас появится задача получить дополнительную информацию - узнать размеры файла, глубину цвета и т.п. Безусловно, вы можете загрузить картинку из файла на форму или подходящий элемент управления (PictureBox) и получить требуемую информацию. Но, предположим, ваш проект предназначен только для сбора информации о файлах. В этом случае загружать 10-мегапиксельный рисунок в форму неоправданно - получается слишком большой расход памяти. Есть другой способ получения нужной информации. О нем и пойдет речь сегодня.</p><p>Графические файлы являются бинарными файлами с определенной структурой. Так вот, в файле уже содержатся необходимые нам данные. Наша задача - уметь извлечь данную информацию. Не будем углубляться в технические детали форматов графических файлов. Достаточно знать, что, например, ширина картинки записана всегда в строго определенном месте от начала файла. Поэтому, нам нужно только открыть файл для считывания байтов, отсчитать нужное количество байт и получить необходимое число. Кстати, по такому принципу устроены не только графические файлы, но и многие другие файлы, например, музыкальные.</p><p>Но, вернемся к файлам BMP. В начале каждого файла в формате BMP идет так называемый заголовок файла. В документации он описывается структурой <b>BITMAPFILEHEADER</b>, которая имеет общую длину 14 байтов: три UInt16 и два UInt32. Нас не интересует данный заголовок, поэтому вы его должны просто проигнорировать. Таким образом в коде нам нужно открыть файл и пропустить 14 байт:</p><pre>reader.ReadBytes(14);<br /></pre><p>Обратите внимание, что функцию sizeof в данном случае использовать нельзя. Функция sizeof работает только с неуправляемыми ресурсами. После структуры BITMAPFILEHEADER идет структура <b>BITMAPINFOHEADER</b>. Именно, в этой структуре хранится необходимая информация, которую необходимо извлечь (кстати, описание структуры можно найти в <a href="http://rusproject.narod.ru/guide.htm">справочнике по функциям Windows API для Visual Basic</a>). Вот как будет выглядеть код извлечения информации из файла:</p><pre>private void ShowBMPInfo(String file)<br />{<br /> FileStream fs = new FileStream(file, FileMode.Open);<br /> BinaryReader reader = new BinaryReader(fs);<br /><br /> // Пропускаем заголовок файла (14 байтов)<br /> reader.ReadBytes(14);<br /><br /> // Пропускаем размер структуры BITMAPINFOHEADER<br /> reader.ReadUInt32();<br /><br /> // Получаем ширину и высоту<br /> int width = reader.ReadInt32();<br /> int height = reader.ReadInt32();<br /><br /> // опять пропускаем часть байтов<br /> reader.ReadInt16();<br /><br /> // Получаем глубину цвета (битов на пиксел)<br /> Int16 bitsPerPixel = reader.ReadInt16();<br /><br /> // Освобождаем ресурсы<br /> reader.Close();<br /> fs.Close();<br /><br /> // Выводим информацию<br /> MessageBox.Show(width + " x " + height + " x " + bitsPerPixel);<br />}<br /><br />private void button1_Click(object sender, EventArgs e)<br />{<br /> ShowBMPInfo(textBox1.Text); // подставляем путь к файлу<br />}<br /></pre><p>Тут есть одна тонкость. Пропускаемые в коде байты на самом деле все равно считываются. Чтобы действительно перепрыгнуть через заданное число байтов, вы должны использовать методы и свойства объекта потока (stream object). Например, получить текущий поток через свойство BaseStream и пропустить первые 14 байтов можно так:</p><br /><pre>reader.BaseStream.Seek(14, SeekOrigin.Begin);<br /></pre><p>Кроме того, можно передвинуть внутренний указатель на заданное смещение от конца потока или от текущей позиции. Вот как пропустить короткое целое (2 байта):</p><br /><pre>reader.BaseStream.Seek(2, SeekOrigin.Current);<br /></pre><p>С учетом этих особенностей я написал второй вариант извлечения данных из файла.</p><br /><pre>private void ShowBMPInfo2(String file)<br />{<br /> FileStream fs = new FileStream(file, FileMode.Open);<br /> BinaryReader reader = new BinaryReader(fs);<br /><br /> // Пропускаем заголовок файла (14 байтов) без считывания<br /> reader.BaseStream.Seek(14, SeekOrigin.Begin);<br /><br /> // Пропускаем размер структуры без считывания<br /> reader.BaseStream.Seek(4, SeekOrigin.Current);<br /><br /> // Получаем ширину и высоту<br /> int width = reader.ReadInt32();<br /> int height = reader.ReadInt32();<br /><br /> // Пропускаем<br /> reader.ReadInt16();<br /><br /> // Получаем глубину цвета (битов на пиксел)<br /> Int16 bitsPerPixel = reader.ReadInt16();<br /><br /> reader.Close();<br /> fs.Close();<br /><br /> // Выводим информацию<br /> MessageBox.Show(width + " x " + height + " x " + bitsPerPixel * planes);<br />}<br /><br />private void button2_Click(object sender, EventArgs e)<br />{<br /> ShowBMPInfo2(textBox1.Text);<br />}<br /></pre><p>Толчком к написаню данного топика послужила статья из <a href="http://netsources.narod.ru/msdnmag.htm">журнала MSDN за август 2002 года</a>. Там же вы можете найти код для Visual Basic.NET.</p><p>Данный совет также будет помещен в раздел <a href="http://developer.alexanderklimov.ru/graphics.php">Графика</a> на моем сайте.</p><p>Удачного вам программирования!</p>AKhttp://www.blogger.com/profile/06260079966243851946noreply@blogger.com0tag:blogger.com,1999:blog-8616169664146917450.post-89747397875472467732010-01-31T05:26:00.000-08:002010-01-31T06:08:40.765-08:00Установка шкурок (skin) к эмулятору в Visual Studio для коммуникаторов Samsung<p>На Новый год я купил себе новый телефон Samsung GT-i8000 Omnia 2 с Windows Mobile 6.5 и экраном 800х480 на борту. Естественно, разрабатывая программы для своего мобильника в Visual Studio, хочется видеть, как будет выглядеть программа не в абстрактном эмуляторе, а в своем телефоне. К счастью, разработчики из компании Samsung Mobile сделали собственные шкурки для моделей GT-B7300 Omnia Lite, GT-B7330 Omnia Pro, GT-B7620 Armani, GT-i8000 Omnia 2, SPH-i350 Intrepid. Вы можете скачать файлы шкурок и внедрить их в Visual Studio. Я расскажу, как это делается на одном примере для своей модели GT-i8000.</p><p>Следует предупредить вас о некоторых особенностях шкурок: </p><ul><li>Установленные шкурки от Samsung не изменяют функциональность эмулятора Microsoft. То есть, он будет работать как прежде, и никаких новых предустановленных программ, идущих в комплекте к телефонам Samsung, вы не увидите. </li><li>Некоторые кнопки на устройстве в эмуляторе могут работать некорректно. Поэтому рекомендуется нажимать на эти кнопки не в эмуляторе мышкой, а через обычную настольную клавиатуру. </li><li>Собственные кнопки устройств от Samsung, такие как кнопка камеры, в эмуляторе не поддерживаются.</li><li>Размеры самого устройства в эмуляторе нельзя изменять. Некоторые модели настолько большие, что могут не помещаться полностью на экране вашего монитора. Попробуйте увеличить разрешение вашего монитора.</li></ul><h3>Системные требования</h3><p>Чтобы использовать эмуляторы для Samsung-телефонов, необходимо иметь Windows 7, Visual Studio 2008 Professional (и выше), Windows Mobile 6 SDK Refresh и Windows Mobile 6.5 Developer Tool Kit.</p><h3>Установка</h3><p>Дальше пошагово расскажу процесс установки шкурки.</p><ol><li>Скачиваем <a href="http://depositfiles.com/files/j9rylqguc">пакет эмуляторов</a> (около 6 мб), в котором содержатся все вышеперечисленные эмуляторы телефонов. Сами шкурки для эмуляторов состоят из нескольких файлов XML и PNG. В файле XML содержится информация о размерах экрана, раскладке клавиатуры и другие конфигурационные данные. Картинки в формате PNG содержат изображения самого телефона в различных состояниях. </li><li>Распаковываем файл DeviceSkins.zip и копируем файлы в удобное для вас место. По умолчанию, стандартные шкурки телефонов хранятся в папке C:\Program Files\Windows Mobile 6 SDK\PocketPC\DeviceemulationV650 или C:\Program<br />Files\Windows Mobile 6 SDK\Smartphone\DeviceemulationV650. Но вы можете выбрать свою папку, например, на диске D:\.</li><li>Запускаем Visual Studio и открываем меню Tools Options. В диалоговом окне <b>Options</b> открываем раздел <b>Device Tools</b> <b>Devices</b>. В списке <b>Devices</b> выбираем подходящую модель для нашего телефоноа. В моем случае мне подходит модель <b>USA Windows Mobile 6.5 Professional WVGA</b>. Для модели GT-B7330 Omnia Pro следует выбрать <b>USA Windows Mobile 6.5 Standard Square Emulator</b>. <img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 400px; DISPLAY: block; HEIGHT: 268px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5432899028016231378" border="0" alt="" src="http://1.bp.blogspot.com/_iaOeRqXXfwQ/S2WI4Zl489I/AAAAAAAAAEU/58miIzBF5bY/s400/samsungemulator1.png" /></li><br /><li>Выделив нужную модель, щелкните на кнопке <b>Save As</b> и введите имя для сохраняемой модели, например, Samsung GT-i8000 Omnia 2.<br /><a href="http://1.bp.blogspot.com/_iaOeRqXXfwQ/S2WJcxSSMdI/AAAAAAAAAEc/MULQhH6Dh9U/s1600-h/samsungemulator2.png"><img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 400px; DISPLAY: block; HEIGHT: 140px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5432899652851741138" border="0" alt="" src="http://1.bp.blogspot.com/_iaOeRqXXfwQ/S2WJcxSSMdI/AAAAAAAAAEc/MULQhH6Dh9U/s400/samsungemulator2.png" /></a> </li><br /><li>После сохранения в списке появится ваш телефон. Выделите его и нажмите на кнопку <b>Properties</b>. У вас откроется новое диалоговое окно.<br /><a href="http://4.bp.blogspot.com/_iaOeRqXXfwQ/S2WJ4Ydn-qI/AAAAAAAAAEk/siPgETmbtu8/s1600-h/samsungemulator3.png"><img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 400px; DISPLAY: block; HEIGHT: 319px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5432900127224756898" border="0" alt="" src="http://4.bp.blogspot.com/_iaOeRqXXfwQ/S2WJ4Ydn-qI/AAAAAAAAAEk/siPgETmbtu8/s400/samsungemulator3.png" /></a><br /></li><br /><li>Щелкните на кнопке <b>Emulator Options</b>, чтобы открыть еще одно диалоговое окно. </li><li>Перейдите на вкладку <strong>Display</strong> и для переключателя <strong>Skin</strong> укажите местоположение XML-файла, который хранится в папке шкурок вашего телефона. Щелкните кнопку <strong>OK</strong>.<br /><a href="http://4.bp.blogspot.com/_iaOeRqXXfwQ/S2WKXx4lGHI/AAAAAAAAAEs/zv2J7-4QN58/s1600-h/samsungemulator4.png"><img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 400px; DISPLAY: block; HEIGHT: 329px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5432900666624645234" border="0" alt="" src="http://4.bp.blogspot.com/_iaOeRqXXfwQ/S2WKXx4lGHI/AAAAAAAAAEs/zv2J7-4QN58/s400/samsungemulator4.png" /></a><br /></li><br /><li>Возвращаемся к диалоговому окну <strong>Options</strong> и выбираем раздел <strong>Device Tools Form Factors</strong>.</li><li>В списке <strong>Form factors</strong> выбираем опять подходящую модель эмулятора, как мы это уже делали несколько шагов назад и сохраняем через кнопку <b>Save As</b> под тем же именем, под которым вы собираетесь работать.<br /><a href="http://1.bp.blogspot.com/_iaOeRqXXfwQ/S2WKYA1pBGI/AAAAAAAAAE0/LGApon83GRA/s1600-h/samsungemulator5.png"><img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 400px; DISPLAY: block; HEIGHT: 268px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5432900670638851170" border="0" alt="" src="http://1.bp.blogspot.com/_iaOeRqXXfwQ/S2WKYA1pBGI/AAAAAAAAAE0/LGApon83GRA/s400/samsungemulator5.png" /></a> </li><br /><li>Выбираем свой телефон в списке и щелкаем на кнопке <strong>Properties</strong>. </li><li>Снова указывем местоположение XML-файла, в котором содержится информация о шкурке.</li></ol><p>Для моделей Omnia II, Omnia Lite, and Armani необходимо временно снять флажок <strong>Show skin</strong>, ввести новые значения ширины и высоты экрана устройств (480x800 для Omnia II and Armani; 240x400 для Omnia Lite) и установить обратно флажок <strong>Show skin</strong>. Нажмите кнопку <strong>OK</strong>, чтобы закрыть окно.</p><br /><a href="http://3.bp.blogspot.com/_iaOeRqXXfwQ/S2WKYcmWIlI/AAAAAAAAAE8/frcpPa6lVn8/s1600-h/samsungemulator6.png"><img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 400px; DISPLAY: block; HEIGHT: 394px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5432900678090891858" border="0" alt="" src="http://3.bp.blogspot.com/_iaOeRqXXfwQ/S2WKYcmWIlI/AAAAAAAAAE8/frcpPa6lVn8/s400/samsungemulator6.png" /></a><br /><p>Совет: Если вы собираетесь постоянно работать с эмулятором Samsung, то можете в окне настроек выбрать из списка <strong>Default form factor</strong> свою модель. В этом случае во время разработки программ в дизайнере форм у вас будет выводиться изображение вашего телефона (об этом чуть позже).</p><p>Если у вас возникнет задача удаления установленного эмулятора, то достаточно снова вызвать окно настроек <b>Options</b>, выбрать нужную модель и нажать на кнопку <strong>Delete</strong>.</p><h3>Использование шкурки в Device Emulator</h3><p>С настройками закончено. Теперь мы можем использовать шкурки в эмуляторе при отладке собственных программ. У вас есть два варианта - залить программу на стандартный Device Emulator или запустить эмулятор через Device Emulator Manager. Рассмотрим первый вариант:</p><ol><br /><li>Выберите меню <strong>Debug</strong> <strong>Start Debugging</strong>.</li><br /><li>Выберите из списка нужный вам телефон и щелкните кнопку <strong>Deploy</strong>.<br /><a href="http://2.bp.blogspot.com/_iaOeRqXXfwQ/S2WKYipYQ8I/AAAAAAAAAFE/6M3vQhSlEKk/s1600-h/samsungemulator7.png"><img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 400px; DISPLAY: block; HEIGHT: 293px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5432900679714227138" border="0" alt="" src="http://2.bp.blogspot.com/_iaOeRqXXfwQ/S2WKYipYQ8I/AAAAAAAAAFE/6M3vQhSlEKk/s400/samsungemulator7.png" /></a><br /><br /></li></ol><p>Ваша программа запустится в эмуляторе Samsung. Так как даже на моем 22-дюймовом мониторе не помещается полностью эмулятор, я развернул его в горизонтальное положение.</p><br /><a href="http://1.bp.blogspot.com/_iaOeRqXXfwQ/S2WKY47mzJI/AAAAAAAAAFM/E9nkm4BsFfM/s1600-h/samsungemulator8.png"><img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 400px; DISPLAY: block; HEIGHT: 222px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5432900685696257170" border="0" alt="" src="http://1.bp.blogspot.com/_iaOeRqXXfwQ/S2WKY47mzJI/AAAAAAAAAFM/E9nkm4BsFfM/s400/samsungemulator8.png" /></a><br /><h3>Использование шкурки во время разработки</h3><p>Вы можете использовать внешний вид телефона не только во время запуска программы, но и во время разработки в дизайнере форм. Когда мы устанавливали шкурку, то уже сделали необходимые настройки (настройка Form Factors). Поэтому вам достаточно открыть дизайнер форм, щелкнуть правой кнопкой мыши на самой форме и выбрать пункт <strong>Properties</strong>. В окне свойств найдите параметр <b>FormFactor</b> и выберите нужный пункт. В данном случае я опять развернул устройство на 90 градусов, чтобы показать, как выглядит устройство в дизайнере форм. <p><br /><a href="http://2.bp.blogspot.com/_iaOeRqXXfwQ/S2WMdOt-bHI/AAAAAAAAAFU/8watgv99hw4/s1600-h/samsungemulator9.png"><img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 400px; DISPLAY: block; HEIGHT: 156px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5432902959287397490" border="0" alt="" src="http://2.bp.blogspot.com/_iaOeRqXXfwQ/S2WMdOt-bHI/AAAAAAAAAFU/8watgv99hw4/s400/samsungemulator9.png" /></a><br /><p>Как видите, после несложной настройки, у вас появилась возможность увидеть свой телефон в Visual Studio. Следующим шагом будет использование SDK от Samsung, чтобы использовать возможности устройства в своих программах, например, акселерометр. Чем я и собираюсь заняться в ближайшее время.</p>AKhttp://www.blogger.com/profile/06260079966243851946noreply@blogger.com0tag:blogger.com,1999:blog-8616169664146917450.post-51264723388561810252009-11-06T09:12:00.000-08:002010-05-03T05:36:56.322-07:00Coding4FunЕсли сегодня зайти в книжный магазин и подойти к полке, где выставлены книги по C# или Visual Basic.NET, то глаза... нет, не разбегаются от изобилия названий. Да откуда взяться этому изобилию. Создается впечатление, что издатели тасуют некую колоду, состоящую из карт с подписанными словами. И мы видим на полках книги-близнецы: Полное-руководство-шаг за шагом-самоучитель-за 21 день-неделю-по 15 минут-для профессионалов-новичков-с примерами. Даже обложки одинаковы и выдержаны в одной цветовой гамме. А примеры в книгах для профессионалов на 70% совпадают с примерами в книгах для новичков. Спрашивается, какая между ними разница?<br />И, как гром среди ясного неба, для меня стало известие, что издательство Символ и его интернет-магазин <a href="http://www.books.ru/">Books.ru</a> выпустили книгу <strong>Coding4Fun.Программируем для удовольствия</strong>.<br />Честно говоря, не ожидал, что в России напечатают эту книгу (и достаточно оперативно).<br />Сам я давно являюсь постоянным читателем блога <a href="http://blogs.msdn.com/coding4fun/default.aspx">Coding4Fun</a>, начиная с самых первых выпусков 2005 года. Уже тогда статьи из блога привлекали меня своей нестандартностью. Несколько раз я не удержался и разместил на <a href="http://developer.alexanderklimov.ru/">своем сайте</a> статьи в вольном переводе. К счастью, недавно появилось русскоязычное зеркало блога, где достаточно оперативно выкладываются новые материалы. Но, к сожалению, по словам координатора русской версии, старые материалы переводиться не будут. А жаль, там встречаются интересные проекты.<br />Вернемся к книге. В ней представлено 10 проектов из тех примеров, которые были описаны в блоге. Кто-то может спросить, а зачем читать эту книгу. Разве нельзя почитать эти же материалы в блоге? Конечно, можно. Но, иногда чтение книги более продуктивнее и удобнее. Возможно, это дело привычки. Лично мне было приятно держать бумажный вариант на руках и читать главу за главой об интересных примерах.<br />Примеры поражают своей широтой - здесь есть примеры для Windows, Xbox, ASP.NET, Wiimote, светомузыки и т.д.<br />Кстати, пусть вас не вводит в заблуждение малое количество проектов. Возьмем, для примера проект InnerTube. В этом проекте описывается процесс взаимодействия с популярным онлайн-сервисом YouTube. Авторы знакомят нас с YouTube API, при помощи которых мы можем скачать нужный ролик. Но это еще не все. Попутно, мы узнаем, как можно сконвертировать скачанный ролик в нужный нам формат, а также синхронизировать полученные материалы с iTunes и Zune. Фактически, в одном проекте описываются три разных задачи, каждая из которых вполне может потянуть на отдельный проект.<br />Также мне порадовало наличие примеров для Wiimote, так как я являюсь счастливым обладателем <a href="http://user.alexanderklimov.ru/wii/wii.php">приставки Wii</a>. Надеюсь, что у меня дойдут руки для подробного изучения примеров, и я напишу какое-нибудь приложение, использующее возможности Wiimote.<br />Теперь добавлю ложку дегтя в бочку меда, чтобы не перехвалить книгу. Откровенно говоря, меня удивило, что в текстах книги используется слово <em>броузер</em>. Мне это напомнило далекие 90-е, когда половина людей использовала это слово, а другая половина говорила - <em>браузер</em>. Мне кажется, что на данный момент больше прижился термин <strong>браузер</strong>. Я даже не поленился, и во время написания этих строчек, запустил поиск в справочной системе Windows 7. По слову броузер было найдено 0 документов.<br />Второй момент, который мне не понравился - это обложка. Оригинальная обложка американского издания мне нравится больше. Возможно, это дело вкуса. Не будем спорить.<br />Если вы интересуетесь программированием под .NET Framework как хобби, то эта книга для вас из категории <em>Must Have</em>. Советую вам поторопиться с приобретением книги. Тираж у книги небольшой и, есть предположение, что до книжных прилавков он не дойдет. Самый удобный способ - приобрести через интернет-магазины, например, <a href="http://www.ozon.ru/context/detail/id/4839452/?partner=visual">ОЗОН</a>.<br />Приятного вам чтения!AKhttp://www.blogger.com/profile/06260079966243851946noreply@blogger.com0