July 11, 2014

 

WP8 - some troubles report

While releasing first commercial app for WP8 I had experienced following effects.

1. Beta app updates very unstable. Frequently the description is new, but xap itself is of previous version. I don't know workaround. Usually publish new version. You have to check version carefully on every launch.

2. If you have crashes (unhandled exceptions), these stack traces will be in dashboard only 4 (yes, four) days after exception happened. After all, not every crash is reported. Workaround: I ended up writing my own unhandled exception handler which sends reports to my own sever.

3. IAP logics is not so simple as it may be thought of when you use consumable products with your own server check. There's one pitfall: you must call CurrentApp.RequestProductPurchaseAsync() only from UI thread (or you will have and unhandled exception!), while LicenseInformation.IsActive IAP license testing calls must not be called from UI according to MSDN. So it seems good idea on "buy" click to show some "please wait" indicator and continue to work in new thread. But when time comes to make a purchase method call you don't have Dispatcher.Invoke() for synchronously executing in UI thread (I mean wait for result). Also, you have to deliver exceptions from UI thread to your own thread. Here's the way:

          //not UI thread. something like "new Thread(delegate(){ ...following code... }).Start();"
          AutoResetEvent waitHandle = new AutoResetEvent(false);
          Dispatcher.BeginInvoke(async () =>
          {
            try{
              await CurrentApp.RequestProductPurchaseAsync(productListing.ProductId, false);
            }
            catch (Exception e) {
              purchaseEx = e;
              log(print(e)); 
            }
            waitHandle.Set();
          });
          waitHandle.WaitOne();
Or course you have to handle exceptions from separate UI thread, otherwise you will have unhandled exception and crash.

4. RequestProductPurchaseAsync() leads to ProductLicense.IsActive = true. But nobody knows when. MSDN says ""

5. When user press Cancel (or Back button) during system purchase confirmation, CurrentApp.RequestProductPurchaseAsync() throws an exception. This is undocumented behaviour, so you have to catch general Exception (I've seen System.Runtime.InteropServices.COMException at 8.0, but nobody guarantees 8.1 have same). By the way, catching general Exception is called "no-go" by Microsoft. Very nice.

Actually, I did not found good code sample of working IAP for consumable and self-checking. I'm going to publish my code when I test it fully. See next post.

Labels: , , , , , , ,

July 8, 2010

 

Clipboard copy/paste in gnome terminal as in putty: solution parcellite

I don't know the formal side, but it seems that Gnome has two clipboards. One is for edit-copy/paste actions and another for mouse-select to copy and middle-mouse-click to paste.
Found today solution for this thing (which is not actually problem, of course. formally): The solution is Parcellite (to install type sudo aptitude install parcellite in term).
Of course (it's opensource, dude!) program does not have any adequate docs (just a man page there, f..k...). So one more action is required: when you run it (to run Accessories->Parcellite) from tray (it has standard windows 3.11 clipboard icon for those who remember) open Preferences, change options "Use primary selection" (turn it on) and "Synchronize clipboards" (turn on). That's all, now you have only one clipboard (But lots of items in clipboard history, so when you copy-paste your password... you understand me ;-) ).
By the way, parcellite 0.9.2 has bug (ha-ha, thought opensource could be without bugs?!): you cannot change option "Items in history" to 1. It just does not save option value "1". Silently. In the best tradition of opensource geek apps. Open options again - you see default 25 there.
You can also even disable "Save history" option. But it saves multiple items anyway. Opensource, dude...

Labels: , , , , , , , ,

October 3, 2009

 

Месяц с ASUS V6J: впечатления

После месяца пользования ноутбуком ASUS V6J (из V6X00 series), начали выстраиваться в систему впечатления. Некоторые факты заставляют меня предположить, что кое-какие описанные особенности являются общими для многих ноутбуков ASUS, но к этому я еще вернусь. Если кратко, то основные траблы такие: мигание подсветки экрана и нестабильная работа WiFi-адаптера.
0. Мелкая недоработка: после отключения экрана по таймауту (не standby даже), подсветка всегда будет на максимальной яркости (и ее придется регулировать, чтобы батарейка не выжиралась быстро), а не той, что была до выключения экрана.
1. Особенности работы WiFi и hibernating системы: после hibernate не можем подключиться к сети WiFi (известный профиль) со страной ошибкой "Authentication failed due to incorrect security password". Ну, вроде как понятное сообщение: неверный пароль; так ведь пароль-то верный :) Поскольку после перезагрузки тот же профиль подключается сразу после включения wifi адаптера. Не помогает и пересоздание профиля, и включения-выключения адаптера. Связь очень простая: был Hibernate - не будет сети. Поэтому, либо работаем НЕ через wifi, либо не пользуемся Hibernate. А я раньше удивлялся, почему товарищ с топовым ноутом асуса всегда его вырубает :) хотя ведь быстрее хибернейтить! :).
2. Эта проблема с вайфаем сподвигла меня на такую штуку, как Обновление драйверов (Внимание! Грабли! Don't do this!!! :) ). Драйвер wifi, кстати, был трехлетней давности. Изначально я ставил драйвера не с диска, а с сайта Support ASUS-а, так что у меня были наиболее обновленные драйвера, которые рекомендует к использованию ASUS. Собственно, в том, что касается драйверов, я придерживаюсь такой позиции: пока не ломается, не трогаем. Итак, обновляем драйвер wifi: на сайте производителя (intel) есть новенькие драйвера этого года. Тут же начинает ругаться Intel Proset wifi software - утилита, что контролирует подключения, хранит профили и т.д. - и рекомендует обновиться. Обновляем и ее (там же), после перезагрузки отключается Асусовские ATKOSD (допклавиши включения wifi/bluetooth, питания ноута (!) ), причем утилита вываливается при загрузке по Access violation (!!!). Откатываемся назад (К точке в System restore!! Когда уже %$%$% на линухах будет что-то подобное?!). В общем, обновлять драйвера на нерекомендованные асусом нельзя.
3. Низкая скорость загрузки системы и хибернейта: Dell D600 делает эти операции быстрее с более медленным винтом и памятью/системной шиной (!!!). Винт дефрагментирован, лишнего софта типа вирусов/антивирусов нет :). Я даже объяснить этот факт не могу. Хотя в общем, скорость работы после D600 конечно очень радует: стало возможным программировать на J2ME, и даже отлаживать(!), а не просто тратить свое время.
4. При нагреве до рабочей температуре начинает подмигивать подсветка при работе на яркости больше половины максимальной, особенно при работе от сети (я уверен в источнике питания - фильтр питания и не один, разные сети - везде одинаково; не уверен, правда, во внешнем блоке питания), по моим ощущениям из-за перегрева где-то начинется ионизация воздуха и пробой.
5. Я часто пишу тексты на русском с английскими названиями, что требует частого переключения между раскладками. Так вот, не переключается, зараза. Точнее, если идет набор в быстром темпе, без паузы после переключения, оно не происходит. Синтетические тесты подтвердили ощущения (раздражение от постоянных стираний и переключений заново). На Dell D600 и на десктопе такого поведения нет. Возможно дело в перехвате Асусовской утилитой (той самой из пункта 2; мы кстати уже знаем оттуда, что она кривущая ;) ) нажатий клавиш в поисках волшебных "FN + что-нибудь".

В целом - ноут неплохой, но из-за вышеописанного до уровня Dell Latitude D600 в плане надежности использования не дотягивает.

Labels: , , , , ,

This page is powered by Blogger. Isn't yours?