Sunday, 31 March 2013

HTC Wildfire Reset to Stock ROM


If you’re on cyanogenmod or some other rooted ROM and you’re missing the smoothness of HTC Sense J , worry not.

 If you didn’t take a Nandroid Backup of the stock ROM when rooting your phone, you’ll have to download and install the correct version of the stock HTC ROM for your model and region.

Some links to these ROMs are at


Generally, RUU's are named as


RUU_Buzz____Radio__release_.exe
 

 Note the EXE versions will UNROOT your phone and leave you with an original HTC ROM in case you need to claim a warranty fix on your phone.

 I prefer the ZIP versions which keep the phone with ROOT and you can then use Root Uninstaller from the Play Store to disable any system apps which you don’t want to use.

 For Wildfire S Asia India RUU this is the ZIP version of the ROM


 And for plain Wildfire i.e. A3333 use the download from here

In case the link is broken Search for “Buzz_Froyo_hTC_Asia_India_2.25.720.1-dannejo.zip”

Make sure you download the valid ROM for your REGION, and for your Device Model. The above link is only for ASIA_INDIA

Before you do anything else,

Take a Nandroid Backup of your working ROM.

If you use the wrong ROM, you will be stuck waiting on the HTC Logo screen for like ever.

If your phone is bricked in that manner, remove and then reinsert the battery and try to get into Recovery mode into one of the earlier Nandroid backups.

 Installation Method:

Take a Nandroid Backup of your Cyanogenmod ROM in case you want to revert to it later
  • Copy the ZIP to root of your SD card
  • Wipe Dalvik Cache
  • Factory Reset
  • Then flash the zip from SD card

First reboot takes a while – all else good after that

 

 

 

Monday, 19 November 2012

Configuring static resources for use within the application in JBoss AS 7




In previous versions of JBoss, you could link an external directory into the classpath and load static resources like images/CSS/JS into the application using the WEB-INF/context.xml

<Context allowLinking="true" cookies="true" crossContext="true" override="true"> 
<Resources allowLinking="true" homeDir="/mydomain/staticfiles" /> 
</Context>

In Weblogic servers, there is the virtual-directory-mapping to achieve this.

In Jboss 7 this no longer works, and you need to bundle the static files within the EAR or War. Note: If you need to serve these over the browser like a public web server as static files then you need a servlet method like this http://balusc.blogspot.com/2007/04/imageservlet.html

But if you want to load a static property file or other content into your webapp, the solution provided by Jboss is what this post is about. You can define a “module” within JBOSS_HOME and store the files there or extend that to any location on the filesystem.



The base reference for this solution is on the Jboss forums How to put an external file in the classpath




Please read that for the theory behind this. Actual steps to be used to store and load any static files or properties or config etc:



1. Create a new module for your configuration or static files - at this location



jboss-eap/modules/com/mycompany/main/module.xml


<?xml version="1.0" encoding="UTF-8"?> 
<module xmlns="urn:jboss:module:1.1" name="com.mycompany"> <resources> 
<resource-root path="."/> 
</resources> 
</module> 

2. Add your properties files or images to the module at this location



jboss-eap/

  modules/

    com/

      mycompany/

        main/

          module.xml

          settings.properties

          logo.jpg





3. Add your module to your application classpath in a jboss-deployment-structure.xml file

<?xml version="1.0" encoding="UTF-8"?> 
<jboss-deployment-structure> <deployment> <dependencies> 
<module name="com.mycompany" />
</dependencies> 
</deployment> 
</jboss-deployment-structure>

This file must be placed either in the META-INF directory of your EAR file or the WEB-INF directory of your WAR file. See Class Loading in AS7 for more information.

OR add your module to your application classpath using a MANIFEST.MF entry in the META-INF of the EAR



Manifest-Version: 1.0

Dependencies: com.mycompany





5. Load a properties file from the classloader in your application



URL imgUrl = this.getClass().getClassLoader().getResource("logo.jpg");





As you’ve noticed this sits within the JBOSS_HOME/modules directory. You can further change the location of this by editing the standalone.bat or standalone.sh files as follows



:RESTART

"%JAVA%" %JAVA_OPTS% ^

"-Dorg.jboss.boot.log.file=%JBOSS_LOG_DIR%\boot.log" ^

"-Dlogging.configuration=file:%JBOSS_CONFIG_DIR%/logging.properties" ^

-jar "%JBOSS_HOME%\jboss-modules.jar" ^

-mp "%JBOSS_MODULEPATH%;d:\mycustommodules" ^

-jaxpmodule "javax.xml.jaxp-provider" ^

org.jboss.as.standalone ^

-Djboss.home.dir="%JBOSS_HOME%" ^

%*

And the corresponding structure on Windows platform looks like this

mycustommodules/

  com/

    mycompany/

      main/

        module.xml

        settings.properties

        logo.jpg



In this way your static directory does not need to be within the JBOSS folder at all.

Friday, 26 October 2012

A Brief Encounter with Cyanogenmod 9 on the HTC Wildfire


I’ve been using CyanogenMod 7.2 quite happily since the last few months on Wildfire A3333. I recently tried to connect the stock Email application to a Microsoft Exchange 2010 server for my corporate Email.


When setting up the mailbox and accepting all SSL certificates and seting up a Password/PIN I still get the error

"This server requires security features your phone does not have"

This primarily seems to be because Android 2.x does not have this flavour of encryption – “full Storage card encryption”

This has been provided in Android 3.0 and in ICS 4.0 onwards for handsets

The relevant documentation is at http://code.google.com/p/cyanogenmod/issues/detail?id=3172



So I decided to upgrade to CM 9 for Wildfire and see where it takes me.

First and most importantly – do a Nandroid back up of the existing ROM and settings. You’ll revert to the backup many times. Also export phone contacts to a file which you will need to re-import later.

The version of CM 9 I used can be downloaded from here http://cm9-wildfire-s.googlecode.com/files/cm-9.0.0-RC2-CRYPTOMILK-ALPHA7-marvel.zip



After installing CM9 – the first impression was a neat boot logo which plays for the 3 minutes or so it takes to boot up the phone.


After that the phone was really really slow. The default launcher to show all apps and Dialer take over 5 seconds to respond.
Seems like the A3333 is just not cut for this ROM due to having only a single core CPU. Any reboot of the phone always takes over 3 minutes.

I tried using the Zend Launcher instead of the default Trebuchet and exDialer instead of the Stock dialer. This made these 2 functions much faster.

Also uninstalled some apps using the Solid Explorer. Some of the features were good - like longpressing an app allows it to send a shortcut to Home screen.

I tried encryption which I knew will slow down the phone even more. Most forums say this takes a long time, so I left it overnight with the charger plugged in.

I tried this process twice, and it still would always show the In Progress screen for encryption and not complete this even after taking 10 hours uninterrupted.

I followed the steps at How to encrypt


So finally I had to give up encryption, and revert the ROM to the backed-up CM 7.2

Using CM 9 gave me some neat apps which I now installed on 7.2

First, I didn’t like the Gallery app in 7.2 (it shows zoom buttons instead of pinch to zoom) so updated that with QuickPic
I also installed Solid Explorer which allows removal of apps even from /data/app and /system/app instead of File Manager.










Tuesday, 4 September 2012

Solution for Win XP 0xc0000218 {Registry File Failure} The registry cannot load the hive




So my 9 year old Dell Inspiron 510m laptop running Windows XP Service Pack 2 crashed last week with a Blue Screen of Death (BSOD) message.

Stop: 0xc0000218 {Registry File Failure} The registry cannot load the hive (file): \SystemRoot\System32\Config\System or its log or alternate. It is corrupt, absent, or not writable.

Rebooting in safe mode doesn’t work.

Rebooting after running Full Diagnostics doesn’t work, the laptop is always stuck with this failure.

The Microsoft link http://support.microsoft.com/kb/822705 is a good starting point but I tried many things to finally get it working, so actually this article is also a Solution (rather a Workaround) for the following other errors that you may face:

Windows XP not accepting the Administrator password in Recovery Console

Windows XP Setup stuck at License Agreement – F8 key not working

So the sequence of events, trials and failures are as follows – these may help you in the future.

 

Trial 1:  Run the Recovery Console from the Windows Setup CD to fix the system

If you have the setup CD, then rather than formatting the whole drive, you could attempt a recovery using the setup. In this way, you will still be left with your settings and files intact.

Now when you try this, you see a screen as below asking for the Administrator password.














But you don’t remember your Admin password – or like me you swear you never set an Admin password at all – so you leave it blank and press <Enter>.

You get a message saying the password is invalid. This goes on for 3 attempts and then you have to exit the recovery.

Some links state that Dell laptops are preloaded with sysprep which requires you to set a password on first usage, but it’s been so long I don’t remember doing that.

I also tried rebooting with F2 into the BIOS and scrolling to the page on which quite clearly it says

Administrator Password: DISABLED

So I ENABLE it and try setting one of those, save the settings and try the recovery again. And again. And again.

It still doesn’t work.

 

Trial 2: Attempt to recover the admin password as part of a Repair of Windows from the Installation CD.

This link http://en.kioskea.net/faq/4716-xp-recovery-console-admin-password-forgotten mentions a technique by which you can run the Setup and then choose Repair and then get access to User Accounts in the Control Panel.

So only one problem in this approach – while trying the Setup you reach this step.

When you get to the Welcome to Setup screen, press ENTER to Setup Windows now

The Licensing Agreement will come next - Press F8 to accept it

But when I try to press F8, nothing happens. It just stays there. All other keys work such as PageUp, PageDn and Esc to quit.

So the things to try at this point are use Function key Fn + F8 together. Doesn’t work.

Try all other F keys from F1 to F12, with and without Fn key. None of them work.

For good measure, try Fn + 8 rather than F8. Nope.

Try almost all other keys on the keyboard (except Esc).  Try all of them with Shift, Ctrl or Alt. Try all of them with NumLock on and off.

After all of these fail – try plugging in an external USB keyboard. Many sites says the PS/2 keyboard works, but of course this laptop does not have the PS/2 connector port.

Try BIOS options to change the F8 key, didn’t see any such options.

 

Trial 3: Recover the data from the hard disk first and overwrite the corrupted Hive files. [SOLUTION]

 

At this point, I got myself an IDE adapter casing with a USB cable. I removed the Hard drive from the laptop and was able to copy over all my data onto another PC.


Manual Recovery of Windows registry, c:\windows\system32\config\system - software, or corrupt hive file or hal.dll errors with no CD.

 

Now that I had the original hard disk connected as an external hard drive (connected as G:\) , I went into an earlier System Restore point using the cmd prompt.

From the snapshots available on the disk, back up and then copy the software, system, sam, security and default files over as per the Microsoft list at http://support.microsoft.com/kb/307545   
Note: G:\ is the original laptop hard drive now connected via USB

copy _registry_machine_software g:\windows\system32\config\software

copy _REGISTRY_USER_.DEFAULT g:\windows\system32\config\default

copy _REGISTRY_MACHINE_SECURITY g:\windows\system32\config\security

copy _REGISTRY_MACHINE_SYSTEM g:\windows\system32\config\system

copy _REGISTRY_MACHINE_SAM g:\windows\system32\config\sam

Once all the copies were done, I fitted the drive back into the laptop and it booted up normally.

 

Tuesday, 28 August 2012

How to check if HTC Wildfire is rooted

I noticed some posts asking to know if HTC A3333 is already rooted.


2 easy ways:

1. Presence of the Superuser app

Superuser comes pre-installed on any rooted ROM. In fact, without it, you don’t have a rooted device at all. You cannot uninstall it, it lives on the system partition with other apps that came pre-installed on your device.

2. Open the Terminal Emulator and type "su"

This will request for root access IF you are rooted

Another option is to download Root Checker from the market it will tell you if you have root

Friday, 24 August 2012

Identifying memory leaks using Eclipse MAT - Part 3





So back to finding out what this class weblogic.xml.query.xdbc.Context  was and how we could solve the memory leak.

A quick search in Eclipse showed this class gets loaded from com.bea.core.xquery_1.3.0.0.jar and the Eclipse calling trace showed a call to org.apache.xmlbeans.impl.store.XqrlImpl$CompiledQuery.

 

We knew we are using apache xmlbeans in our application and checked our Weblogic start classpath to see this jar had been added to the classpath since we had some runtime issues without it.

 /wls_domains/com.bea.core.xquery.xmlbeans-interop_1.3.0.0.jar:/wls_domains/com.bea.core.xquery_1.3.0.0.jar

 
But we did not want to use the weblogic version of xmlbeans, so only tried with the Apache one instead.

So the changes made were to remove the above jars from start classpath and add saxon jars instead. We also edited weblogic-application.xml to specify the package from Apache


<prefer-application-packages>
        <package-name>org.apache.xmlbeans.*</package-name>
    </prefer-application-packages>    
   


We then repeated our performance tests and monitored the heap dumps to verify the problem had gone away.

There was no instance of the weblogic.xml.query.xdbc.Context class at all which caused earlier heap block, so this indicates our fix is applied correctly

Thursday, 23 August 2012

Identifying memory leaks using Eclipse MAT - Part 2


As I wrote in Part 1, we identified that there was some sort of memory leak happening within our Java JEE application – so the next steps were to obtain a Heap Dump and run it through Eclipse MAT.

So what is a Heap Dump? From the Eclipse docs

A heap dump is a snapshot of the memory of a Java process at a certain point of time. There are different formats for persisting this data, and depending on the format it may contain different pieces of information, but in general the snapshot contains information about the java objects and classes in the heap at the moment the snapshot was triggered.
The Memory Analyzer is able to work with HPROF binary heap dumps, IBM system dumps (after preprocessing them), and IBM portable heap dumps (PHD) from a variety of platforms.

Typical information which can be found in heap dumps (once more - depending on the heap dump type) is:

  • All Objects
Class, fields, primitive values and references
  • All Classes
Classloader, name, super class, static fields
  • Garbage Collection Roots
Objects defined to be reachable by the JVM
  • Thread Stacks and Local Variables

How do we get a heap dump into a .hprof file?

Set the following flags to the java process

·        -XX:+HeapDumpOnOutOfMemoryError writes heap dump on OutOfMemoryError

·        -XX:+HeapDumpOnCtrlBreak writes heap dump together with thread dump on CTRL+BREAK

Or you can fire one via tools jmap or jconsole

·        Sun JMap: <jdkhome>/bin/jmap  -dump:format=b,file=HeapDumpFilename.hprof

 

Our idea was to take multiple heap dumps every 2 hours or so and observe the objects in the heap. As with a thread dump, a heap dump is a static view of the live objects in the heap at that time – so it’s not possible to make a definitive judgment on just viewing one heap dump – hence space it out over some time and observe if the same objects (sometimes these have the same memory address location) are growing and causing a possible leak.

Also remember – at the point of taking a heap dump, Java runs a full GC, so you are left with the live objects in the heap.

We took the first heap dumps every 2 hours, but nothing much was happening for the first 12 hours or so.

Once you have the hprof with you, and have installed Eclipse Memory Analyzer Tool (MAT) just open the hprof in Eclipse and wait for it to do it’s thing.

The page will open with an Overview.

This lists important stuff like the Size of the heap – so in our case, though we have a 2 GB heap the retained size after GC is 473.1 MB.

The graph of “Biggest Objects by Retained Size” will give you immediate clues and this is also reflected in tabular format in the “Dominator Tree” report.




Overview








But the best thing about MAT is the Leak Suspects report which points out clearly potential memory leaks.




 



 


 
So in our hprof, 55% of the heap was being retained by one instance of weblogic.xml.query.xdbc.Context i.e. if this object was reclaimed by GC, we could get back 273 MB of memory. This object was residing at memory location weblogic.xml.query.xdbc.Context @ 0xb2477930
The important thing to see in this view is the Retained Heap
In Memory Analyzer the term shallow size means the size of an object itself, without counting and accumulating the size of other objects referenced from it.
The retained heap is the total objects and memory which this object is holding onto.
 

 

We took the next snapshot after 2 hours of the first heap dump and it showed the same instance of weblogic.xml.query.Context@0x7c1642f8 had now grown to 301.6 MB with the total heap now at 524.7 MB


 
Our last snapshot in confirming our problem was after a further 2 hours, so a total of 4 hours since the first heap dump showed this object.

The heap had now grown to 616.5 MB with 54% of it occupied by the same object
 
 
So next we now found out from MAT what was causing the leak. We next had to analyze how this class weblogic.xml.query.xdbc.Context  was being used in the app and how we could prevent the leak. I will post that in Part 3.