This is a mirror of official site: http://jasper-net.blogspot.com/

Near Field Communication in Windows 8: Part 1

| Thursday, September 27, 2012
Near fied communication (NFC) is a breakthrough technology aimed at facilitating communication between two devices in close proximity, within a 4-cm distance. In Windows 8 the support for this technology has been included in a broader application scope that Microsoft named Near Field Proximity. This article will give you a general view of NFC explaining how Microsoft has reinterpreted it, and we will learn how to build an environment by using 2 virtual machines to test the classes contained in the namespace Windows.Networking.Proximity.

What is NFC?
In a nutshell NFC is a short range wireless communication system between two NFC enabled  devices. The communication occurs at a 13.56 Mhz frequency, the same as the Radio Frequency Identification (RFID). As opposed to RFID, NFC works only in conditions of proximity, i.e. few centimeters. 
The difference lies in the fact that NFC enabled devices can be mobile phones, tablets, PCs, NFC readers and NFC passive tags. This variety of devices opens the door to various applications and services like identification, access control, e-payment, e-ticketing, health data access and so on. In other words Near fied communication (NFC) is a technology with a potentially major impact on people’s economic and social life. It can be seen as something that simplifies the daily human life. 

Let me describe a possible scenario: imagine to wake up in the morning for another workday, take your NFC enabled mobile phone and go to the train station, and to open the turnstile just put your mobile phone close to a NFC reader. To enter your office building you simply use your mobile to punch the clock. In the morning you have a meeting with a new customer: you can swap your business cards by simply approaching your card to his/her NFC-enabled mobile. Then if you wish to offer him/her a coffee from a vending machine, simply approach your phone to the NFC symbol exposed on the machine and you can process the payment

One of the primary information source on NFC is the NFC Forum (http://www.nfc-forum.org).

Read more: Silverlight show

Posted via email from Jasper-net

Group Policy Settings Reference for Windows 8 and Windows Server 2012

| Monday, September 24, 2012
These spreadsheets list the policy settings for computer and user configurations that are included in the Administrative template files delivered with the Windows operating systems specified. You can configure these policy settings when you edit Group Policy Objects.

You can use the filtering capabilities that are included in this spreadsheet to view a specific subset of data, based on one value or a combination of values that are available in one or more of the columns. In addition, you can click Custom in the drop-down list of any of the column headings to add additional filtering criteria within that column. 
To view a specific subset of data, click the drop-down arrow in the column heading of cells that contain the value or combination of values on which you want to filter, and then click the desired value in the drop-down list. For example, to view policy settings that are available for Windows Server 2012 or Windows 8, in the Administrative Template worksheet, click the drop-down arrow next to Supported On, and then click At least Microsoft Windows Server 2012 or Windows 8.

What's New?

The Administrative Template spreadsheet contains three columns that provide more information about each policy setting's behavior related to reboots, logoffs, and schema extensions. These columns are the following:

Reboot Required: A "Yes" in this column means that the Windows operating systems requires a restart before it applies the described policy setting.
Logoff Required: A "Yes" in this column means that the Windows operating system requires the user to log off and log on again before it applies the described policy setting.

Read more: bink.nu
QR: Inline image 1

Posted via email from Jasper-net

VHDX Format Specification

|
This specification describes the VHDX virtual hard disk format that provides a disk-in-a-file abstraction. This specification assumes that you are familiar with hard disk technologies, including how hard disks interface with the operating system or a virtual machine and understand how data is accessed and laid out on the physical medium. This specification is released under the Microsoft Open Source Promise (OSP) initiative to help guide development of VHDX virtual hard disk format implementations that are compatible with those provided by Microsoft.

I'm just a spec junky.. sorry... :)

From the DocX;

1.1 Features and Benefits [of the VHDX Format]

VHDX format features provide features at the virtual hard disk as well as virtual hard disk file layers and is optimized to work well with modern storage hardware configurations and capabilities.

At the virtual hard disk layer, benefits include the ability to represent a large virtual disk size up to 64 TB, support larger logical sector sizes for a virtual disk up to 4 KB that facilitates the conversion of 4 KB sector physical disks to virtual disks, and support large block sizes for a virtual disk up to 256 MB that enables tuning block size to match the IO patterns of the application or system for optimal performance.

At the virtual hard disk file layer, the benefits include the use of a log to ensure resiliency of the VHDX file to corruptions from system power failure events and a mechanism that allows for small pieces of user generated data to be transported along with the VHDX file.

On modern storage platforms, the benefits include optimal performance on host disks that have physical sector sizes larger than 512 bytes through improved data alignment and capability to use the information from the UNMAP command, sent by the application or system using the virtual hard disk, to optimize the size of the VHDX file.

The format is designed so that additional features could be introduced in the future by Microsoft or extended by other parser implementations. The format provides parsers the ability to detect features in a VHDX file that a parser does not understand.

QR: Inline image 1

Posted via email from Jasper-net

C#/.NET Little Wonders: Interlocked CompareExchange()

|
Once again, in this series of posts I look at the parts of the .NET Framework that may seem trivial, but can help improve your code by making it easier to write and maintain. The index of all my past little wonders posts can be found here.

Two posts ago, I discussed the Interlocked Add(), Increment(), and Decrement() methods (here) for adding and subtracting values in a thread-safe, lightweight manner.  Then, last post I talked about the Interlocked Read() and Exchange() methods (here) for safely and efficiently reading and setting 32 or 64 bit values (or references). 

This week, we’ll round out the discussion by talking about the Interlocked CompareExchange() method and how it can be put to use to exchange a value if the current value is what you expected it to be.

Dirty reads can lead to bad results

Many of the uses of Interlocked that we’ve explored so far have centered around either reading, setting, or adding values.  But what happens if you want to do something more complex such as setting a value based on the previous value in some manner?

Perhaps you were creating an application that reads a current balance, applies a deposit, and then saves the new modified balance, where of course you’d want that to happen atomically.  If you read the balance, then go to save the new balance and between that time the previous balance has already changed, you’ll have an issue! 

Think about it, if we read the current balance as $400, and we are applying a new deposit of $50.75, but meanwhile someone else deposits $200 and sets the total to $600, but then we write a total of $450.75 we’ve lost $200!

Now, certainly for int and long values we can use Interlocked.Add() to handles these cases, and it works well for that.  But what if we want to work with doubles, for example? 

Let’s say we wanted to add the numbers from 0 to 99,999 in parallel.  We could do this by spawning several parallel tasks to continuously add to a total:

double total = 0;
Parallel.For(0, 10000, next =>
{
      total += next;
});

Were this run on one thread using a standard for loop, we’d expect an answer of 4,999,950,000 (the sum of all numbers from 0 to 99,999). 

But when we run this in parallel as written above, we’ll likely get something far off.  The result of one of my runs, for example, was 1,281,880,740.  That is way off!  If this were banking software we’d be in big trouble with our clients. 

Read more: James Michael Hare
QR: Inline image 1

Posted via email from Jasper-net

Tips and suggestions for troubleshooting and debugging WPF

|
This article covers many techniques you can use to troubleshoot and debug your WPF application, including binding errors, exception handling, inspecting the VisualTree and logging.

Table of Contents

Windows Presentation Foundation (WPF) is a joy to develop rich user experiences with. Animations, bindings, reskinnable codeless interfaces, all backed up with traditional .Net programming all make for a very rapid development cycle. However, when something goes wrong in that autogenerated super-sexy front-end, it is not always clear where the problem is. 
This article will cover some of the methods for analyzing your WPF application, troubleshooting issues, and debugging seemingly obscure errors.

QR: Inline image 1

Posted via email from Jasper-net

Introduction to MSMQ

|
Microsoft Messaging Queue (MSMQ) technology is used for asynchronous communication using messages. MSMQ also can be considered to be an Inter- process communication capability.

Whenever two processes want to communicate with each other in a "Fire and Forget" manner, MSMQ is very useful for that.

Usage

For example what if Billing software needs to process 1000 bills at midnight and must send mail to all those users. Such as when the operator runs the software he wants immediate notification. The operator can't wait for all the bills to be processed and gets email.

Here MSMQ plays an important role for communication by Billing software to send those 1000's of customer email information into the Queue and the Queue event handler will handle the requests. In this way the Operator gets instant notification of the processes instead of knowing the "Behind the Scene" process.

So let's have a code walkthrough of how to create the process behind the scenes:

Step 1: Need to ensure MSMQ is properly installed in the computer.

1. How to check?

Type "compmgmt.msc" in the Run window or right-click on MyComputer and select "Manage Computer".
The following screen shot shows the MSMQ installed in the computer, if its not listed then follow Step "c" else done.

Inline image 1

Go to the Control Panel and select "Add or remove programs" under "Programs and Features"

After clicking on "Add or remove programs" again click "Turn Windows features on or off" displayed on left side.
Check (as in the following screenshot) whether MSMQ is enabled or not; if not then select "Enable" and press "OK"; see:

Read more: DZone
QR: Inline image 2

Posted via email from Jasper-net

How can I implement SAFEARRAY.ToString() without going insane?

|
A colleague needed some help with manipulating SAFEARRAYs.

I have some generic code to execute WMI queries and store the result as strings. Normally, Variant­Change­Type(VT_BSTR) does the work, but Variant­Change­Type doesn't know how to convert arrays (e.g. VT_ARRAY | VT_INT). And there doesn't seem to be an easy way to convert the array element-by-element because Safe­Array­Get­Element expects a pointer to an object of the underlying type, so I'd have to write a switch statement for each variant type. Surely there's an easier way?
One suggestion was to use the ATL CComSafeArray template, but since it's a template, the underlying type of the array needs to be known at compile time, but we don't know the underlying type until run time, which is exactly the problem.

Let's start with the big switch statement and then do some optimization. All before we start typing, because after all the goal of this exercise is to avoid having to type out the massive switch statement. (Except that I have to actually type it so you have something to read.)

Here's the version we're trying to avoid having to type:

HRESULT SafeArrayGetElementAsString(
    SAFEARRAY *psa,
    long *rgIndices,
    LCID lcid, // controls conversion to string
    unsigned short wFlags, // controls conversion to string
    BSTR *pbstrOut)
{
  *pbstrOut = nullptr;
  VARTYPE vt;
  HRESULT hr = SafeArrayGetVartype(psa, &vt);
  if (SUCCEEDED(hr)) {
    switch (vt) {
    case VT_I2:
      {
        SHORT iVal;
        hr = SafeArrayGetElement(psa, rgIndices, &iVal);
        if (SUCCEEDED(hr)) {
          hr = VarBstrFromI2(iVal, lcid, wFlags, pbstrOut);
        }
      }
      break;
    case VT_I4:
      {
        LONG lVal;
        hr = SafeArrayGetElement(psa, rgIndices, &lVal);
        if (SUCCEEDED(hr)) {
          hr = VarBstrFromI4(lVal, lcid, wFlags, pbstrOut);
        }
      }
      break;

QR: Inline image 1

Posted via email from Jasper-net

Прошиваем AVR вручную

|
Представьте себе, что вы попали на необитаемый остров. И вам жизненно необходимо запрограммировать микроконтроллер. Зачем, спросите вы? Ну, допустим, чтобы починить аварийный радиомаяк, без которого шансы на спасение резко падают. 

Радуясь, что еще не забыли курс ассемблера, вы кое-как написали программу палочкой на песке. Среди уцелевших вещей каким-то чудом оказалась распечатка документации на контроллер (хорошо, что вы еще не успели пустить её на растопку!), и программу удалось перевести в машинные коды. Осталась самая ерунда — прошить её в контроллер. Но в радиусе 500 километров нет ни одного программатора, не говоря уже о компьютерах. У вас только источник питания (батарея из картошки кокосов) и пара кусков провода.

Как же прошить МК фактически голыми руками?

В качестве подопытного будет выступать МК ATtiny13 фирмы Atmel. Описанная методика работает практически с любым контроллером семейства AVR, разве что коды команд могут незначительно отличаться.

Интерфейс

Самым распространенным и удобным интерфейсом для прошивки AVR является SPI (Serial Peripheral Interface). Для подключения по SPI нужно всего четыре провода, не считая земли:

SCK — тактовый сигнал, синхронизирует все операции обмена данными;
MOSI (Master Out Slave In) — линия данных от ведущего устройства к ведомому;
MISO (Master In Slave Out) — линия данных, наоборот, от ведомого устройства к ведущему;
RESET — для разрешения прошивки по SPI нужно подать логический «0» на этот вывод.

Таким образом, нам необходимо сформировать три сигнала и (необязательно) прочитать один. Вот так выглядит простейшая схема для этого:

Inline image 1

Рис. 1. Простейшая схема подключения по SPI.

Для своего же удобства можно добавить индикацию входных сигналов. Схема усложняется, но не чрезмерно:

Inline image 2

Рис. 2. Схема с индикацией сигналов.

Защита от дребезга

К сожалению, просто используя кнопки для формированя сигналов SPI, хорошего результата мы не добьёмся. Причина этого — в неприятном явлении, которое называется дребезг контактов. При замыкании механические контакты соударяются, отскакивают друг от друга, и вместо одного импульса получается несколько. Для подавления дребезга придется собрать простую схему из пары логических элементов:

Read more: Habrahabr.ru
QR: Inline image 3

Posted via email from Jasper-net

Enumerate,Register,Scan,Get Nw list,Get BSS list using WLAN NATIVE API'S

|
Native Wifi

Purpose
The Native Wifi automatic configuration component configures, connects to, and disconnects from wireless networks. Native Wifi can store profiles on the networks it interacts with in the form of XML documents.

Developer audience
The Native Wifi API is designed for C/C++ developers. Programmers should be familiar with wireless networking concepts and terminology.

Run-time requirements
The Native Wifi component requires clients running Windows Vista, Windows XP with Service Pack 3 (SP3), or Wireless LAN API for Windows XP with Service Pack 2 (SP2).

Introduction

Sample application is used how to use WlanOpenHandle, WlanEnumInterfaces, WlanRegisterNotification, WlanScan, WlanGetNetworkBssList, WlanGetAvailableNetworkList. Parse the IES from last beacon and probe response from BSS network. Add the IE(Information Element) during WlanScan request. I have checked with (Intel(R) Centrino(R) Advanced-N 6205). This interface is not allowing to send reserved Information wifi IES(52-126 according IEEE 802.11 spec) but all other i am able to include in scan request. I hope this code will be usefull.

Background 

Using the code

Requirements:

1) Visual studio. 
2) WDK and SDK. 
3) Wireshark for verification for added IES in WlanScan request. 

// Open handle session and enumerate all wifi adapters. I have considered first adapter only if you 
// have more than one adapter u need to add logic which adapter u need.                       

int FuncWlanOpenAndEnum()
{
DWORD dwClientVersion=(IsVistaOrHigher() ? 2 : 1);

printf("######## FuncWlanOpenAndEnum--->######## \n\n");
//creating session handle for the client to connect to server.
hResult=WlanOpenHandle(dwClientVersion,NULL,&pdwNegotiatedVersion,&phClientHandle);
if(hResult!=ERROR_SUCCESS)
{
printf("failed WlanOpenHandle=%d \n",hResult);
return hResult;
}
else
{
printf("WlanOpenHandle is success=%d \n",hResult);

}

//Enumerates all the wifi adapters currently enabled on PC.
//Returns the list of interface list that are enabled on PC.
hResult=WlanEnumInterfaces(phClientHandle,NULL,&pIfList);
if(hResult!=ERROR_SUCCESS)
{
printf("failed WlanEnumInterfaces check adapter is on=%d \n",hResult);
return hResult;
}
else
{
printf("WlanEnumInterfaces is success=%d \n",hResult);

}

printf("######## FuncWlanOpenAndEnum<---######## \n \n");
return hResult;
}                                                                                              // prints the enumerated the interfaces add stores the interface in global variable            void FuncWlanPrintInterfaceNames()
{
WCHAR SGuid[256]={0};

printf("######## FuncWlanPrintInterfaceNames--->######## \n\n");

for(unsigned int i=0;(i < pIfList->dwNumberOfItems);i++)
{
printf("WIFI Adapter Description =%ws \n",pIfList->InterfaceInfo[pIfList->dwIndex].strInterfaceDescription);
StringFromGUID2(pIfList->InterfaceInfo[pIfList->dwIndex].InterfaceGuid,SGuid,256);
printf("WIFI Adapter GUID=%ws \n",SGuid);

}

Read more: Codeproject
QR: Inline image 1

Posted via email from Jasper-net

Task.WhenAll

| Sunday, September 23, 2012
When Task.WhenAll met the Task.WhenAny…
There are two methods which can be used for awaiting an array of tasks in non blocking manner: Task.WhenAll and Task.WhenAny.

It is quite obvious how they work:
  • WhenAll completes when every task is completed
  • WhenAny when any of the task is completed.

I needed today something which is a mix of those two and I’ve came up with something which completes when all is awaited but also provides hook for me to respond on awaits of individual tasks.

I’ve called my little extension: Task.WhileAll.

Extension method

Here's the complete implementation

public static class TaskExtensions 
{
    public static async Task<IList<T>> WhileAll<T>(this IList<Task<T>> tasks, IProgress<T> progress) 
    {
        var result = new List<T>(tasks.Count);
        var done = new List<Task<T>>(tasks);
        while(done.Count > 0) 
        {
            await Task.WhenAny(tasks);
            var spinning = new List<Task<T>>(done.Count - 1);
            for(int i = 0; i < done.Count; i++) 
            {
                if(done[i].IsCompleted) 
                {
                    result.Add(done[i].Result);
                    progress.Report(done[i].Result);
                } else {
                    spinning.Add(done[i]);
                }
            }
 
            done = spinning;
        }
 
        return result;
    }
}

Read more: .NET AND ME
QR: Inline image 1

Posted via email from Jasper-net

Awaitable task progress reporting

|
In my previous Task.WhileAll post I had a very fishy piece of code in sample where I put a Thread to sleep in order to give enough time for async composition to complete so the test could pass.

Well, every time I use a Thread.Sleep anywhere I know it is a bad thing so I've decided to get rid of it.

IProgressAsync<T>

The problem is related to the fact that IProgress<T> interface defines a void handler which can't be awaited and thus it ruins composition.

That's why I decided to define my own "true async" version of the interface which looks has the same report method but returning a Task I can await.

namespace WhileAllTests
{
    using System.Threading.Tasks;
 
    public interface IProgressAsync<in T>
    {
        Task ReportAsync(T value);
    }
}

Having a async version of reporting is VERY useful when the subscriber itself is awaiting further calls. I could get that with async void but using async void IMHO always turns to be bad solution so I choose to use the Task returning signature even I need a custom made interface for that.

And here's the implementation

using System;
using System.Threading.Tasks;
 
public class ProgressAsync<T> : IProgressAsync<T>
{
    private readonly Func<T, Task> handler;
 
    public ProgressAsync(Func<T, Task> handler)
    {
        this.handler = handler;
    }
 
    public async Task ReportAsync(T value)
    {
        await this.handler.Invoke(value);
    }
}

Read more: .NET AND ME
QR: Inline image 1

Posted via email from Jasper-net

Valgrind

|
Starting with MonoTouch 5.4 it is possible to use Valgrind on a MonoTouch project. In some cases Valgrind is invaluable in finding strange crashes, in particular when freed memory is accessed. 

This is what you need to do:

Download latest Valgrind (3.7.0 as of this writing). Extract somewhere, and compile:

./configure --enable-only32bit --prefix=/usr/local
make
sudo make install

Now open the project you want to valgrind, and set the VALGRIND environment variable to the command to execute to use valgrind:

Inline image 1

Run (not debug) your project. You will see this in the Application Output:

Inline image 2

QR: Inline image 3

Posted via email from Jasper-net

WPF TaskDialog Wrapper and Emulator

|
Inline image 2

The Short Version

Really quickly, here's what you need to know: 

Visual Studio 2010 solution in .NET 4.0 for WPF applications
Uses native TaskDialogIndirect calls when available (Vista/7)
Uses an emulated WPF version when not (XP)
Provides seamless fallback, lots of customizability, and detailed return results
Completely free to use or modify
Lots of improvements in v1.5+ — see below!
Introduction

I've been a big fan (and user) of Hedley Muscroft's WinForms emulator and wrapper for TaskDialogs. In that same spirit, I've taken part of his hard work (and, by succession, KevinGre's) and done something very similar, but this time for WPF (and .NET 4.0).

Background

There are tons of other WPF/WinForms TaskDialog implementations out there, either those that wrap the Win32 APIs, or just providing a custom WPF dialog to use. A quick web search will find you plenty. What they don't give you is a unified way to use the native dialog that still works on older versions of Windows. I go into more detail on the rationale and history of all this in a blog post here.

Hedley's work is great and I've used it plenty of times, but I wanted something very similar that worked for WPF apps. I also thought I might take the time to try to improve on it, mostly thanks to the power of WPF and .NET 4.0.

Using the Code

For the most part, you'll only care about the TaskDialog class' static methods for invoking a dialog. I wanted it to sort of mimic the ease of use that the traditional MessageBox class has always given us. There are two other major classes that you'll use with the static methods:

TaskDialogOptions
TaskDialogResult
For cases where you need complete control over the customization of the task dialog, you'll have to create an options object and pass it in to the Show method. This means you can't exactly do a one-line method call anymore, but it does give you the most control in cases where that is important.

Read more:  Codeproject
QR: Inline image 1

Posted via email from Jasper-net

Wondering if you could host your Silverlight App in Dropbox? Yep. Here's how..

|
You're new to Silverlight App development. After struggling for a long time, the time to show it to the world has finally come. But, you don't have any web hosting account. So, what will you do?

Don't worry about it (and don't commit suicide just because of it). I have a solution. You can use your dropbox account to host it. Curious how to do that? Just follow these following steps!

QR: Inline image 1

Posted via email from Jasper-net

Assembly Programming with Visual Studio 2010/2012

|
Introduction 

This article provides a simple example on how to write a small program in x86 assembly language. The technologies used will be MASM (the Microsoft Assembler now distributed with Visual Studio) and Microsoft Visual Studio 2010 or Visual Studio 2012. Assembly programs offer the advantage of speed and full control over things that in other programming languages you cannot even touch. The example is a very simple example of basic text encryption and entails all basic assembly commands that one can use to start dealing with the magical realm of low level programming. And knowing how the computer responds at that level is crucial for someone who wants to be a programmer. Again, the main advice is one: EXPERIMENT! Try various commands you find in MASM manuals, change commands on your own, play with the memory and the registers.

Programming in Assembly

Programming in Assembly means telling the computer how to do things in a much more detailed manner than you would do with a High Level Programming Language (like C++). I have written a small introduction to assembly here. Assembly has everything to do with memory. Most of the time, you will have to move data from one place (register) of the memory to another place in the memory. This is conducted with the mov command. For example, the command...

mov     AscChar, al

...moves the contents of the AL memory register to the memory segment representing variable AscChar (this is the variable which holds the character entered by the user).

...
...

How to Use VS2010 to Write Assembly

Using Visual Studio to write an assembly program may be tricky. Specific steps are to be followed in order to be able to create your first MASM x86 assembly program with VS2010 / VS2012 (images from the configuration steps mentioned below are taken from here):

Expand the ‘Other Project Types‘ tree, Select ‘Visual Studio Solutions‘, and create a new ‘Blank Solution‘.

Inline image 1

File | Add | New Project…

Expand the ‘Other Languages‘, ‘Visual C++‘, ‘General‘ section and create a new ‘Empty Project‘.

Inline image 2

Now right click on the Project in the Solution Explorer and select ‘Build Customizations…‘.

Read more: Codeproject
QR: Inline image 3

Posted via email from Jasper-net

.Net CLR Injection : Modify IL Codes on Run-time

|
Introduction 

Modifying .Net methods' MSIL codes during run-time is very cool, it helps to implement hooking, software protection and other amazing stuff. That's why I want it, but there is a big challenge on the road -- the MSIL code could have been complied to native code by JIT-complier before we have a chance to modify them; also the .Net CLR implantation is not documented and it changes during each version, we need a stable way. 

 Anyway, after more than one week research, finally I made it! 
Here is a simple method in the demo problem  

protected string CompareOneAndTwo()
{
    int a = 1;
    int b = 2;
    if (a < b)
    {
        return "Number 1 is less than 2";
    }
    else
    {
        return "Number 1 is greater than 2 (O_o)";
    }
}

Certainly it returns "Number 1  is less than 2"; let's try to make it returns the incorrect result "Number 1 is greater than 2 (O_o)"

Looking at the MSIL codes for this method, we can do it by changing the opcode from Bge_S to Blt_S. and then the jump works in a different logic which returns wrong result, that is what I need.

Inline image 2

And if you try in the demo application, it shows wrong answer as below.

Read more: Codeproject
QR: Inline image 1

Posted via email from Jasper-net

android-market-api

|
An open-source API for the Android Market
This is not an official api. I'm not afiliated to google in any way.

This library allow you to ask directly google's official android market servers for information, search for apps, ...

Main target is java but it can be easily adapted to other languages since it's Google ProtoBuf based.

There is a Ruby port by jberkel here and a PHP port by splitfeed here. These is also a crawler on top of this library by Raunak Gupta here.

For any help using this API please use the google group HERE, no direct help request please, i won't answer.

Requirement

No specific requirement, it use java.net.URL for communication with the google market server, that's all. So it should run without problem on Google App Engine or in an Android app. Include androidmarketapi-X.Y.jar and protobuf-java-X.Y.Z.jar in your classpath and you're good to go.

Current progress

You can browse market with any carrier or locale you want.
Search for apps using keywords or package name.
Retrieve an app info using an app ID.
Retrieve comments using an app ID.
Get PNG screenshots and icon

Version History

Version 0.6 : Fix corrupted session when exception occur. Change default android id and default sdk version
Version 0.5 : Fix random 400 errors, fields recentChanges and promotionalVideo added
Version 0.4 : Better error handling at login, default to android 2.2 (passion:8)
Version 0.3 : GetImage api added, now searching for android 2.0 apps

Read more: Google code
QR: Inline image 1

Posted via email from Jasper-net