QuteSound – SoundCloud client for symbian

After finished my work targets on one symbian^3 app, I start looking for something interesting to make. I just need to waste my time. Long ago, my friend suggested me to make simple SoundCloud client. According to Wikipedia, SoundCloud is an online audio distribution platform which allows musicians to collaborate, promote and distribute their music. In my opinion, SoundCloud is like twitter, but instead typing 140 characters, you submit your sounds. I called my app QuteSound and with my limited set of design skills, I managed to make a logo using Photoshop.

qutesound logo

qutesound logo

The app is still a work on progress. I use nice Qt examples RestaurantApp as design template so I need to change it to something original mine (If you have any design that you want to share, please contact me). As the proof of concept, I only implement 2 features: record – upload and get 20 latest tracks. It working well, I think, and I will add more features when I have time.

login pages

login pages

application pages - tracks, record and profile

application pages - tracks, record and profile

At current state, I downloaded whole mp3 file then play it using Qt phonon library. Documentation said phonon capable of streaming media. That will be my to do list. And yes, SoundCloud API generously provided waveform image for every tracks as shown above.

Advertisements

Run libphonenumber javascript version in blackberry app

So this is what happened, in my blackberry app, I want to recognize a country by parsing phone number. For example, from +8285659XXXXXX I expect to get country is South Korea and phone number is 85659XXXXXX. The challenge is to cover all 240 more country code and verify if the number is a valid one. My first thought is to compare all the first 1-4 number to list of country code as shown here. Lucky for us, google has release their phone number parsing library libphonenumber. This library is released in C++, java and javascript. Since blackberry development is in java, maybe we can use java version? Unfortunately not. Blackberry java is J2ME and to run libphonenumber you need whole deal of java. For example, java.util.Map and java.io.Serializable.

phone number validation

phone number validation

Then the options are either to port the code to J2ME compatible, or execute the javascript version. Yes, you can execute javascript code programmatically using BrowserField class from Blackberry JDE. If you use BlackBerry Java Plug-in for Eclipse, like me, you can find sample application that integrate java code with javascript.  You can test libphonenumber javascript demo here. And you can get the source code using svn.

So how do we do this ?

First, we need to modify libphonenumber  javascript demo code to get parameter from url and return string output. Because, user selected phone number from his contact list and we don’t want them to enter the number again to, say, a textbox. We will use parameter in url, for example

local:///index.html?phoneNumber=+82856XXXXXXXX&defaultCountry=ID

To get the parameter, we can use nice code to query url string from here.

Next, just pass the number we get from url to the javascript function inside our html code.

var result = "none";
function phoneNumberParser() {
var phoneNumber = gup( 'phoneNumber' );
...
try {
var phoneUtil = i18n.phonenumbers.PhoneNumberUtil.getInstance();
var number = phoneUtil.parseAndKeepRawInput(phoneNumber, regionCode);
...
}
return result;
}

Set the html and necessary javascript files from libphonenumber to our project resource.

Then in our blackberry java code, we execute javascript code.


public class ContactListScreen extends MainScreen
{
private BrowserField _browserField;
...

// screen constructor, set browserfield listener so we can execute our javascript code when html document loaded
public ContactListScreen(Country country)
{
BrowserFieldConfig config = new BrowserFieldConfig();
config.setProperty(BrowserFieldConfig.ALLOW_CS_XHR, Boolean.TRUE);
_browserField = new BrowserField(config);
BrowserFieldListener listener = new BrowserFieldListener()
{
public void documentLoaded(BrowserField browserField, org.w3c.dom.Document document) throws Exception
{
try
{
String strReturnValue = (String)browserField.executeScript("javascript:phoneNumberParser()");
Status.show(strReturnValue);
}
catch(Exception ex)
{
Status.show("Phonenumber validation error : " + ex.getMessage());
}
}
};
_browserField.addListener( listener );
add(_browserField);
}

// run number validation
private void validateNumber(String input)
{
BrowserFieldRequest request = new BrowserFieldRequest("local:///index.html?phoneNumber=" + input + "&defaultCountry=ID");
_browserField.requestContent(request);
}

...
}

That’s it. Note that you need to be always connected to internet, since libphonenumber use googles’s closure library. But I think you can run it locally, by copying all necessary files from closure into one folder and include those javascript file in your html. Have fun 🙂

MFC to Qt migration part 1

Last Monday, after spending weekend planning the development for my upcoming software, I realize something important. One big challenge in developing the software is GUI, and MFC, being my main GUI framework since my first application is not really developer friendly, and totally a nightmare (just like any other Microsoft developer’s tools, really). And after one month playing with Qt, I realize how easy to develop a GUI with it.

For those who still confused about what I do exactly, this is a screenshot of my MFC based application. It’s an application that can read handwritten character using ICR (Intelligent Character Recognition) engine.

icr reader

ICR-based document reader

I decided to give Qt a go. And after spending one day, creating the base UI , I started to integrate my previous project which mostly, developed using Visual Studio 200 and some of it using linked to MFC runtime. At this stage, I don’t want to rewrite all my libraries in Qt. And I used several C++ libraries in my work such as : boost, poco, pantheios and opencv. I am not aiming for cross-platform now, so I use Qt environment with Microsoft Visual C++ 2008 compiler and I can use my already compiled libraries in the new Qt-based application.

Here is some issue that I encounter during my attempt to integrate Qt with my VC++ libraries and how I fixed it.

  1. sigslot ’emit’ errors. in my projects, I used sigslot a lot. sigslot is a C++ signal/slot library, written to follow Qt signal/slot style. Using sigslot make code cleaner and modular, which is what you want in your code. Since ’emit’ is Qt keyword, all function named ’emit’ in sigslot.h must be replaced. In my case, I replace all ’emit’ words in sigslot.h into ‘semit’.
  2. implicit linking libraries path. boost, poco and pantheios use implicit linking. You don’t have to specify explicitly what lib file you want to use in your project, you just need to include the header in your code and specify the library’s lib folder in linking phase, then it will link automatically to libraries that use used. You have to use keyword QMAKE_LIBDIR in your Qt .pro file to add the path. For example : QMAKE_LIBDIR += $(BOOST_LIB). Note that BOOST_LIB is defined in environment path.
  3. If one of your library dynamically linked to MFC, you need to add MFC definition into qmake system. you can do this by adding DEFINES += _AFXDLL into your .pro file. Additionally, you might need to add DEFINES -= UNICODE, in case you have libraries that not build with unicode character (as in my case, pantheios).
  4. debug and release build. I spent three hours trying to figure out why release build always crash at startup. After googling, modify .pro and rebuild, I finally realized the release build use debug libs. This is how I did it wrong

This is in my .pro

debug {
LIBS += -L$(OPENCV)\lib -lcv210d -lcxcore210d -lhighgui210d -lml210d
}

release {
LIBS += -L$(OPENCV)\lib -lcv210 -lcxcore210 -lhighgui210 -lml210
}

I notice, that if I comment out the release libs part, I still compiled release build successfully, meaning that it uses debug libraries and resulted in crash. After googling, I found the solution. I change my .pro file :

CONFIG += debug_and_release

CONFIG(debug, debug|release) {
LIBS += -L$(OPENCV)\lib -lcv210d -lcxcore210d -lhighgui210d -lml210d
}

CONFIG(release, debug|release) {
LIBS += -L$(OPENCV)\lib -lcv210 -lcxcore210 -lhighgui210 -lml210
}

So to summarize, this is part of my .pro file

DEFINES -= UNICODE
DEFINES += _AFXDLL

CONFIG += debug_and_release

INCLUDEPATH += $(BOOST_INCLUDE)
INCLUDEPATH += $(OPENCV)\include

QMAKE_LIBDIR += $(BOOST_LIB)

CONFIG(debug, debug|release) {
    LIBS += -L$(OPENCV)\lib -lcv210d -lcxcore210d -lhighgui210d -lml210d
}

CONFIG(release, debug|release) {
    LIBS += -L$(OPENCV)\lib -lcv210 -lcxcore210 -lhighgui210 -lml210
}

And now my Qt GUI ready to use all my previous libraries. As you see below, the Qt based app is still far from MFC shown above in term on visual, but I can guarantee, the code is prettier. That’s what important, right ?

Qt based UI

Qt based UI

Some terms :
GUI : Graphical User Interface, and for those who don’t really understand this, it’s everything that you see in your PC or mac is GUI, except the command line.
MFC : Microsoft Foundation Classes, one of main developer framework from Microsoft, before .NET and now, WPF.
Qt : A cross-platform application and UI framework. It has two license, LGPL and commercial.  Developed by trolltech, now owned by Nokia, then Digia for the commercial licensing.

qt nokia apps part 2

Continue my latest post on qt apps that I wrote, there are more apps that I wrote to test new technique for handling page transition and another one just to have fun because I will install it if I have Nokia N8 (my company has, and if they feel I need it, they will let me abuse it)

Netflix Browser

My lead want me to write new code for page transition. Basically, what we have done is put all pages in a stack and show a page every time we change it. If you see previous part on tweeroo, it has 4 pages for home, timeline, single tweet and web. At the app initialization, all pages are created and then push into a stack. If you get confused by this, imagine putting four sheets of paper as a stack. If we need to show, for instance, timeline, then we move timeline to the top of the stack. Now we want to do another approach : only one page created at a time, no stack, If I want to show timeline page, I will create the page do transition and destroy previous page. Which one is better and efficient in term of memory usage and smooth user experience? I have to do more tests to see it.

Using netflix odata service, one can query movie list easily. And after one and a half day coding withQt and designing the look using Photoshop, this is what I got.

 

netflix

 

netflix

Anima

I always fascinated by animation world, name pixar, studio ghibli and many others who created great and amazing animation in 2D or 3D. I want to learn, but my art sense is below average. Regardless, I felt it would be nice if I have simple animation creator on Nokia smartphone. So I wrote Anima (short for animation, of course).

anima

anima

Anima is simple app where you can draw and then move to next frame and draw again, and then when you have enough frames, you can play your frames. Honestly, I thought paper and pencil is a great way to start learning animation. But we are living in digital age, or so they say, and I want to learn Qt, remember?

anima

anima : empty frame and onion skinning mode

Currently, save only for one document, so it will overwrite the old one, I need to create page and then do transition if I want to make document list, because using Qt file dialog will ruin the experience. Anima also has onion skinning mode, which let you see previous image so you have guide for current frame drawing. It only has one simple pen with black color. Currently Anima cannot create video, I still need to explore how to create video using Qt.

I have plan to make Anima into full featured application with more features such as layers, color, brush,  create video and also upload video into youtube.

qt nokia apps part 1

Starting from January this year, I started to work in mobile development using Nokia Qt SDK. My work primarily to test some new techniques because we already has one lead programmer. During the time, I have created several applications to learn Qt. I primarily worked with Qt C++ and maybe will explore QML in near future. These applications will not be released under the company that I work and if I have time or willingness to finish the basic feature and polish my ‘amateur’ software look, maybe I’ll publish one on Nokia Ovi store.

Someone might wonder why I still work on Qt, after Nokia and Microsoft partnership clearly stated that in the future, Nokia smartphones will use WP7, not current Symbian or Meego. Well, WP7 on Nokia maybe released on 2012, in the meantime, lets have fun with Qt !.

Tweeroo

My first work is on Twitter API. The task is to understand twitter oauth and RESTful API. Google and you will find open source library names kQOauth which just what I need to complete the task. After sometime browsing and coding to add list-style view, page transition and embedding webpage, this is what I’ve done.

tweeroo

tweeroo : home, authorise, timeline, tweet

tweeroo

tweeroo : single tweet, retweet, reply and open webpage from tweet.

As a note, Ray Wenderlich is a great iPhone/iOS developer and has a great website http://www.raywenderlich.com/ which contains lots of tutorials on how to make games for iOS using cocos2d engine. Yes, I am learning iOS too :). Check it out.

Nokinome

If I have Nokia N8, this is one utility that I will definitely install. A metronome (as I am learning how to play guitar, a metronome will be very handy). Simple and very useful and easy to make too. use timer to update the needle and then play a tick sound.

nokinome

nokinome

Why I use C++

“Just because very few people can fly a Space Shuttle doesn’t mean we shouldn’t have spacecraft. Some of us are big boys, and we can handle C++ just fine, thank you ” (Scott Robert Ladd, software engineer and writer)

Recently, after long year claiming myself to be C/C++ programmer, I worked with C# and found how easy it was. Like the world is not fair and somehow in programming world C++ turn out to be most difficult programming language ever. And after 8 years since I started programming on my third year of undergraduate school, I still unable to label myself a C++ expert. Should I continue down this road? I mean, you should  ‘teach yourself programming in 10 years’, right ?

For start, STL (Standard Template Library) components I always use are string and vector. STL Vector is nice, you can user any data type on it and it never complains, which shows how great STL is. STL string because I do not want messy C type string management. Well, STL is huge library and there is a lot of things you can do provided that you are comfortable with template programming. Yet, I still afraid marching toward that path. So I never touch boost, which is a huge beast of C++ libraries and guess what? most of it are templates. There is more, one of the standard book in defining C++ excellency is Andrei Alexandrescu’s Modern C++ Design: Generic Programming and Design Patterns Applied. And most of it related with template programming.

I start to learn C/C++ when a friend of mine sparked the idea that we should make a game. That was about 8 years ago. After using most of my 1st and 2nd year in college playing PS games on PC emulator, making a game is an interesting and great idea. You have great story which is mixed of Final Fantasy, Chrono Cross, Xenogears. You start designing characters and cool weapons. You start doodling your great medieval-modern stream-punk style city. But how to realize it into a game that you can play? A simple game editor (forget the name), just don’t fit your big vision. So you open the pandora box of game making. And there you find mixture of talents needed from programmer, artist, story and many more. So I chose toward programming since I have absolutely no talent in drawing, but I learn a little bit of Maya at that time. So why I chose C++? because you can’t make a ‘real’ game like Assassin’s Creed in other language. You just can’t.

Time is ticking and I kind of diverted my path toward programming for research and development. Now I am considered myself as a senior programmer. And the experience of C# and demand of skills in professional work just seems do not fit the C++ language path that I take. Java more favorable in enterprise work and C# is the next. C and C++, well, still holding great on OS, lower level stuffs, opensource projects and ‘real’ game development. Hell, my favorite IDE, Microsoft Visual Studio 2010 is completely written in WPF now. Most of younger taking programming course choose to work with simpler languages such as Delphi or VB for desktop development and php for web. And my job opening on C++ junior programmer returning null.

masterminds

Masterminds of programming, great reading where you can find why we have so many language now

This ranting seems just me trying to justify my path. That is true. Several days ago I read an article written by Paul Graham that Lisp (written in 1958, the 2nd oldest programming language after Fortran) is one great language that every mainstream language that we know today (java, C#, Phyton and others) are trying to approach Lisp. And another interesing paragraph from his other article “Historically, languages designed for other people to use have been bad: Cobol, PL/I, Pascal, Ada, C++. The good languages have been those that were designed for their own creators: C, Perl, Smalltalk, Lisp.”

C++ new standard is coming out now and I started to use poco, a great portable C++ class libraries and next, I will learn template and start using boost following the natural progression of this journey to be one of the big boys. Deep down I hope C++ will be better and better. And I think my reason toward C++ choice is still valid for now, and that make me happy.

That one month

Found a notes. Between writing thesis, Bioshock and Korean drama. Back in 2007 when myself looks more intelligent than now.

Writing a thesis involve many things, (to simplify) thats include yourself and the rest of the world. Yourself : your mood, your determination, your spirit, your body, your eyes etc. The rest of the world : Your computer and its contents, your programs, your Latex editor, your friends, your family, your Lab, the internet etc.

$ ======================================== $
Saturday, September 8th 2007, Gwangju, South Korea.
5:10 PM

@ flashnews
I just finished writing my bibtex entry. It’s about 118 papers or less and adding. I have started playing Bioshock and downloading some TV shows for distraction.


@ content
Based on my bibtex, basically it contains all things that I want to do, so depending on what I implement, maybe I will not include all of it. But what it is? that I will implement? My original intention is to put all what we’ve done during Samsung project but that will take credits of my team because most of the part, they develop it. not me. My contribution is just in the beginning phase. and the rest is them that’s include moving object detection, human detection and tracking. So none of my works there!

I really want to include this in my thesis
“This dissertation is the result of my own work and includes nothing which is
the outcome of work done in collaboration except where specifically indicated
in the text”

Programming wise, this is what we have from Samsung project.

I. Devices : handle camera to get images from sensor into IplImage
1. Camera. interface for prosilica camera that we use now

II. Vision : Several algorithms that processed input IplImage sequentially
1. Panorama. This class convert omnidirectional image into panoramic by using LUT
2. OpticalFlow. Estimate optical flow using Lucas-Kanade method
3. MovingObjectDetector. Detect moving object by using flow compensated frame differece
4. HumanDetector. Detect human is moving object area. This implementation use SvmClassifier and SvmUtil.
5. RegionTracker. Implement traking by using mean-shift based tracker


My thesis should improve the Samsung implementation :
That is in
1. Image enhancement part
2. Moving detection part -> automatic threshold or other methods
3. Human detector -> feature and classifier
4. Tracker -> feature and method.

Enhancement is standard procedure. for now I only have homomorphic and gamma correction. that should suffice. Illumination invariant which I like to solve but lowest priority.

Motion detector is based on x projection histogram of the compensated frame difference image. Compensated in sense that window motion estimated by optical flow is translated back into the initial position. and any independent motion will disrupt the compensation so we have dominant motion area caused by object or something else, thats include high reflectance surface and high clutter object. because basically, mostly detected motion based on above method is caused by edges. And that is really a problem in cluttered area where edges are everywhere. When it tested in lab sequence in detect motion almost everywhere!. I don’t care about robot motion here. Robot should move naturally and not engineered. maybe because I use big window (20×20) but I decided on that to make system faster. smaller window will have more points to evaluate and that will take a long time.

Despite the problems I really happy with how we compensate motion without any notion on geometric and whatsoever. I mean like many egomotion estimation. Although I felt that’s how you should do it. Lift the image into its original representation, like half sphere and then perform analysis in that representation. But that is too difficult.

Because it’s relied on segmentation on optical flow, one way is to segment optical flow vector. However, is the window is too big, maybe the result is not too good. However, this is one alternative and worth trying. Things like attention also interesting.

In my opinion, detector and tracker should use same feature. I like the idea of region covariance because in can be used for detection and tracking simultaneously and the result is convincingly good. I am thinking on orientation + intensity histogram + PCA + other stuff.

Like I always believe, no matter how good you’re idea is, without implementation is nothing. So better start working now.

@ writings
As for writing, is to use multibib package for multiple bibliography file in Latex.

Title :
Development of Omni directional Vision-Based Human Detection Module for Mobile Robot

The presentation structure : (tentative)
1. Introduction
2. Visual perception and omni directional vision : overview and related works
3. Where to Look? : visual attention by moving object detection
4. Is it human? : from moving object to human hypothesis verification
5. Where is he now? : tracking human
6. Evaluation
7. Conclusion and Remarks

$ ======================================== $
Sunday, September 9th 2007, Gwangju, South Korea.
2:47 AM

@ flashnews
I redo Medical Pavilion stage because apparently if you die while fighting the big daddy and you load your last save, then the little sister is vanished into thin air. So you have to fight the big daddy again and again. and also because I replace my electric plasmid which is a mistake because you cannot buy a electric shotgun rounds which is handful to kill the bigdaddy. So I redo all again. Damn it.

@ writings
screw multibib. I think it should worked. I made mistake by not enclosing the braces in of the bib entry and it screw it all. So I just include all bib entry in single file and forget the rest.

As I want to put some changes to make it more originally mine, I face a new challenge: make the programs. I think this should be the priority for two days or so before I can write something. Because the idea is not so clear now.
What is the spatio-temporal attention? how we can detect the not moving human? and not over do it when the human is moving?
What is the probabilistic bayesian machine for detecting and tracking?
What is the robust feature?

I think I should rethinking what I write. Be careful of what you wish for.

$ ======================================== $
Sunday, September 9th 2007, Gwangju, South Korea.
7:44 PM

@ flashnews
work all night and sleep all day. what a life

@ contents
There are several ideas that I want to implement
this includes
– orientation histogram shape backprojection image as saliency feature to reject all non-human shaped area
– Sooyeong simple saliency algorithm
– working with downsampled image
– optical flow grouping
$ ======================================== $
Sunday, September 9th 2007, Gwangju, South Korea.
11:37 PM

@ contents
down sampling is just great, by scale factor 2, reduced from 200 ms into 40 ms for optical flow!

backprojection is ok, but the orientation histogram of upper body  is really discriminative, so backprojection result still not significantly reduced spatial search space

based on my observation I think the best optical flow estimation is using window size twice the grid step
If grid step is 10, then winsize is 20. is smooth and less affected by noise. except the calculation jump as much as twice or three times in case it same.

$ ======================================== $
Tuesday, September 11th 2007, Gwangju, South Korea.
10:55 PM

@ flashnews
Doing good on Bioshock…. nice

@ contents
Saliency on one level on one kernel. not really good. maybe multiple scales will be better. But I have to understand the multi scale theory first.
And color saliency is just not soo good….
maybe it doesn’t have any effect…

$ ======================================== $
Thursday, September 13th 2007, Gwangju, South Korea.
4:02 PM

@ flashnews
Ramadhan mubarak.

Bioshock….. I think I will play again after this one

@ contents
Due to failure in saliency system, I decide to just put something that I can possibly do in one week or less term. that’s it give different bla..bla.., with images from the last samsung machine. Since this is just a draft. I think I’ll be able to do several changes.

@ writings
Proceed smoothly. I have my contents and now I have imagination of what I should write.
happy!!
done with chapter 1.
And beautifully rendered pdf from latex! really rewarding.

$ ======================================== $
Saturday, September 15th 2007, Gwangju, South Korea.
4:49 AM

@flashnews
sleeping behavior disorder? I slept yesterday from 00 until 12. and now I cannot sleep or pushing myself?

@ writings
Error in indexing image!!!!
I don’t know what’s wrong but I don’t like it wrong!!
memoir error? should I change my template?

And the new memoir is incompatible with subfigure? How I am gonna do that?

And the figure list is very-very wrong if the name is too long. How can they do that to me!

$ ======================================== $
Saturday, September 15th 2007, Gwangju, South Korea.
2:37 PM

@ writings
I’ve found several thesis template on the Internet. What can I say? it knows too much
I want to try the Cambridge template.

The main problem is image indexing!!
Now I know how to create long image caption without breaking the 1 line rule for generating the list!

@ contents
Multi resolution seems to come up several times. From LK flow, with somehow I cannot retrieve it clearly.
But…
Saliency – Human detection and tracking can make use of it !!
so it is really worth it!
I even list it in my ToC….

$ ========================================================================= $
Sunday, September 16th 2007, Gwangju, South Korea.
9:15 PM

@ writings
Damn, chapter three is done
so mush for the draft.

two more chapters to go and I can continue with improvements.

$ ======================================== $
Tuesday, September 18th 2007, Gwangju, South Korea.
5:00 AM

@ flashnews
why do this people wakes up all night lately? if not for this thesis, I will sleep peacefully now

@ writings
So this is not the draft?
What the hell…
since prof said the engineering committee close their eyes. just take advantage of it.

@ contents
Prof want to use another approach. Basically is similar to edgelet except that he want to use Gabor filter response trained on several part of upperbody : half circle of the head and double neck contour. The filter response yield feature vectors. Maybe will be similar to wavelets. Bable whatever you want. Implementation is one important parts of the process.

7:54 AM

Damn, arguments with prof always running in my head
I can’t concentrate.

Basically, I cannot agree with how you handle things. You seems to forget something that in computer vision practice, implementation is the most important. From what I understand, correct me if I wrong, you seems to underestimate time needed to build non-trivial and new approach into practice.

I have observed some famous researcher on computer vision field which give new and novel approach. The range between publication sometimes one year. In one year, they give a good working result and evaluation. Which shows consistency in research. This is what we hope to experience.

$ ======================================== $
Thursday, September 20th 2007, Gwangju, South Korea.
8:04 AM

@ writings
despite many issues. I think I am done with the draft.
my body can’t make it more. my hand can’t even type correctly.

I think flexor muscle is fatigue.
can’t event focus!!

I will continue after one or two weeks
ciao

$ ======================================== $
Thursday, October 08th 2007, Gwangju, South Korea.
3:03 PM

@ flashnews
I am back !!!
back to thesis writings.

Bioshock is done, tried world in conflict, but not enough chemistry between us to make us continue. watch a lot of Korean and Japan drama…. Que sera-sera, Ms. Kim one million dollars, My Husband, etc..


I think I should be ready to restart the whole things and make something!!

@ contents
Over the last week, I am interested to combine generative PCA and discriminative LDA in more principled way, rather than naively use PCA as pre-processing stage. Fidler works which note that truncated basis can severely affect performance and Grabner’s feature-based combination using Haar-boosted is interesting. But I am more interested in trying to fill the blanks. which combination still unnoticed so somehow I can make a original contribution to machine learning. So I try to find :
1. Kernel PCA + LDA (I think this is not exploited although somewhat direct from Fidler’s work)
2. Probabilistic PCA + LDA in linear gaussian (this already mentioned in Ioffe’s work but not evaluated yet)
3. Non Linear probabilistic PCA + LDA. This involves Gaussian processes as non linear kernel. Based on Lawrence’s Gaussian Process Latent Variable Model (GPLVM). The discriminative combination already explored.

My intuition is that by using Partial Hausdorff matching, we can use both generative and discriminative subspace approach (this is shown by Huttenlocher and Felzenszwalb), so combining them should not that hard and if I can add Kernel then it is a PAMI papers.

I might have to hold first for probabilistic settings, since the parameters finding involves optimization which I have to understand first and I think it will not fit to run real-time. Most of it just involve matrix inversion. I still do not have enough understanding to start on this.

+Just now I got the feeling that Felzenszwalb’s work on generalized Hausdorff actually both generative and discriminative. But the properties is still need to be evaluated in principled way. In Huttenlocher’s subspace Hausdorff, the subspace approximation is considered as binary correlation approximation.

@ writings
I want to change the template of thesis into cambridge template. This template, memoir, is suitable for books but not engineering ones.
write the journals….

@ 4:58 PM

Effort to understand machine learning theory takes more that I initially estimated. This is a bit hard.
Bayesian formulation and numerical optimization involves seems daunting for me. In the ends, all these methods involve finding parameters from set of training data.

I am interested particularly in
PCA+LDA
SVM
Boosting.

+ instead of focusing on machine learning, feature representation also can be exploited. But in the end, machine learning analysis of the feature is needed to exploit certain structure rising in the feature.

latent space, Gaussian process, kernels, whatever. these things mixed up in my head.

$ ======================================== $