Saturday, August 15, 2015

Hibernate Discriminator Column Not Getting Auto-populated For InheritanceType.JOINED

I am new to Object Relational Mapping as I have developed database applications with plain JDBC all these years. So I am using Hibernate now and I wanted to have separate extension table for the new subclass that I have created. But I also wanted to treat existing superclass as a separate entity that can be queried without getting results from subclass too. Suppose I have Customer class. And I have created EliteCustomer subclass. I have a requirement that I can query Customer class that doesn't include results from EliteCustomer class. It's a bad example but I guess you got what I needed to do. So I thought of using InheritanceType.JOINED with discriminator column. Then by using discriminator value I can query only superclass objects. But while inserting data through Hibernate, discriminator column was not getting auto-populated and it was storing null value. And if I try to make discriminator column not null, insertion started failing. Now the fact is that Hibernate doesn't really require discriminator column for joined inheritance like some other JPA providers do. It just works fine if you don't mention any discriminator column. But for my case I needed to treat superclass as separate entity while querying, that's why I needed the discriminator column. And JPA spec does support discriminator column for joined inheritance type. So I thought it would be alright. Anyways I found out that some old versions of Hibernate don't support this legacy behaviour. Here is the Jira ticket details that was opened for this issue. As I was using Hibernate 3, I was facing the problem. If you want to turn on support for discriminator column for joined inheritance type, just upgrade to correct 4.2 or 4.3 version and set hibernate.discriminator.ignore_explicit_for_joined to false as mentioned in Jira details. Then Hibernate will start auto-populating value into your discriminator column.

Tuesday, July 14, 2015

A List Of Websites To Download Youtube Video Subtitles

If you want to download subtitles from Youtube videos, there are some software available. I tried Google2SRT. But when I installed it, it installed some additional software that changed my browser homepage and search settings. It happened for all the browsers including Firefox and Google Chrome. I didn't like it and uninstalled and cleaned up all these software.
And I went for second option. Use websites where you can download Youtube video subs online without installing any software in your computer. Below I have mentioned three such websites where you can download Youtube video subtitles for free. All of them are currently working. So if any of them is down for some reason at a particular time, you can always use the other alternatives.

Saturday, July 4, 2015

Google Chrome Update Now (Quick Search) Malware Fix

Recently whenever I tried to open any normal http website in my Google Chrome browser, I kept on getting a redirection showing message that Chrome needed to be updated:
Google Chrome browser has critical security update. Auto update is disabled, you need manually perform update browser.

You need to perform the update in order to continue your web navigation.
Google Chrome Update Now (Quick Search)
But Google Chrome was already updated to the latest version. This looked liked a malware. I tried uninstalling Chrome and then again installing from scratch. I also tried running some malware/spyware removal tools. But still Chrome was having same issue. Now today I just again did a complete reinstall & also ran Google Software Removal Tool. This tool checks for any unwanted program that might have affected your Google Chrome browser and resets the settings. After that now my Chrome is working fine. If you think Google Chrome is behaving weirdly for some reason, you can download and run this software to see if it can fix it.

Sunday, June 28, 2015

Why You Do Not Need IDM To Download Online


It's not like I hate Internet Download Manager. In my college days, I used to use it a lot for download acceleration and resume support for my slow internet connection. It was quite fast and reliable. Only glitch it seemed to have was that download would still go on indefinitely few times even after 100% was done. I don't know what was the exact issue that caused it. Anyways, I am pretty sure if there was any issue they would have fixed it by now as I last used it several years back.



So that's my point. Why haven't I used such a popular software like IDM? Reason is simple. I didn't need it as I have had a equally good free alternative for my download purpose. Nowadays I would mostly use direct browser download using Chrome or Firefox browser. And when I still feel a need for some acceleration or resume support, I will go with Free Download Manager. It's a popular open source software. And it does its job quite well. So unless you don't want something specific, then for your general purpose online downloads I don't see any point in buying paid license for IDM. Try out Free Download Manager first and check its feature list. Most likely you will find it good enough.

Thursday, May 21, 2015

Tomcat Not Accessible Outside Due To Blocked Port

You have installed Tomcat in your Linux machine. You can access it inside the machine using localhost:8080 or 127.0.0.1:8080. But when you try to connect to it remotely from another machine, socket connection is timing out and you are not able to access tomcat. That can be because of that specific port is blocked in Linux firewall. There's an easy way to check. Try to create a telnet connection to the specific host and port like:
telnet host-name 8080
If the connection is denied or you get a timeout, then the port is not open. So now question is how you can open the port from Linux firewall. To open a port for TCP connection is easy in Linux machine. You just have to use iptables program. Open a command line. Type below command:
iptables -I INPUT -p tcp --dport 8080 --syn -j ACCEPT
That's all. Now you can try to access tomcat on port 8080 remotely and it should work.
You may want to execute the following command after this:
service iptables save
This will persist the changes you made in iptables across system restarts.

Java Thread Interruption With join() Method Explained

This is an example how Java thread interrupt() works with join() method. Suppose there are two threads, t1 & t2. So t2 calls join method on t1 from a method like below:
try {
     t1.join();
} catch (InterruptedException e) {
      System.out.println("INTERUPPTED!");
}
Now the question is when will code enter into catch block. Do you need to call interrupt() method on the calling thread which in this case is t2? Or do you need to to call interrupt() on the thread on which join is called which in this case is t1?

I have written a simple program that will clarify this.


public class TestInterrupt {
   
    public static void main(String[] args) {
         R2 r2 = new R2();
         Thread t2 = new Thread(r2);
         t2.start();
    }
   
    private static class R1 implements Runnable {
        public void run() {
            while(true) {
                System.out.println("do nothing!");
            }
        }
    }
    private static class R2 implements Runnable {
        public void run() {
            R1 r1 = new R1();
            Thread t1 = new Thread(r1);
            t1.start();
            t1.interrupt();
            try {
                t1.join();
            } catch (InterruptedException e) {
                System.out.println("INTERUPPTED!");
                System.exit(0);
            }
        }
    }

}

If you look at the above code, basically t2 calls t1.join() method and before that it calls t1.interrupt() method. Now if you run it, it will keep on printing "do nothing" in the console. So that means using interrupt on the thread on which join() is called is not working. Otherwise it would have exited the program.
Now run the below code:


public class TestInterrupt {
   
    public static void main(String[] args) {
         R2 r2 = new R2();
         Thread t2 = new Thread(r2);
         t2.start();
    }
   
    private static class R1 implements Runnable {
        public void run() {
            while(true) {
                System.out.println("do nothing!");
            }
        }
    }
    private static class R2 implements Runnable {
        public void run() {
            R1 r1 = new R1();
            Thread t1 = new Thread(r1);
            t1.start();
            Thread t2 = Thread.currentThread();
            t2.interrupt();
            try {
                t1.join();
            } catch (InterruptedException e) {
                System.out.println("INTERUPPTED!");
                System.exit(0);
            }
        }
    }

}

It calls t2.join(). And if you execute it, the code would exit after a few seconds after printing "INTERUPPTED!". So that's how it works. You need to interrupt the thread that is calling join() method on another thread and it will throw InterruptedException.

Wednesday, May 6, 2015

How To Find Out How Many CPU Cores You Have In Windows

From command prompt, execute below command:
WMIC CPU Get /Format:List

Then check for NumberOfCores value. That will give total number of physical CPU cores that you have in you machine. And look for NumberOfLogicalProcessors value too. If Hyper-Threading is enabled, you will get double of total number of physical cores.
You can also go to Task Manager and check CPU Usage History under Performance tab. But the number of boxes there basically represents all the logical processors in your machine. My Windows laptop is dual core with Hyper-Threading enabled. So I will get four boxes there. But that doesn't represent the total number of physical CPU cores that I have which is 2. And there is no way to differentiate logical processors and physical cores there.


So it's better to use the above command. That will clearly display total number of physical cores and logical processors on a single screen.

Sunday, May 3, 2015

Take A Java Thread Dump With A Few Clicks

Using VisualVM, taking a thread dump can be a matter of few clicks. And not only local JVM, you can also connect to remote JVM irrespective of the underlying platform of the remote machine. It can be a Windows or a Linux machine, it doesn't matter as long as it has a JVM to connect to. You just need to specify the port to create a JMX connection to the remote host and that's it.





Check the above screenshot. It's a real time snapshot of local JVM threads in my Windows machine and at the right top corner you can see a button for thread dump. When you click on it, it will generate thread dump and will display it in ui console. Then you can copy or save it as you want. So no need to go to command line and type command to get thread dump in catalina.out or write it in a separate file. VisualVM will take care of it cleanly with a simple interface. VisualVM is shipped with Oracle JDK distribution by default. So you don't need to install it separately. Just go to JDK bin folder and click on jvisualvm.exe to start. It has other cool features. But today I just wanted to focus on taking a thread dump easily. I use it frequently in my Windows laptop to take a java thread dump from remote tomcat servers.

How To Find Java Installation Location In Linux

First run below command:
  • $ whereis -b java
The above command will search for Java binaries. And it will return some results like below:
java: /usr/bin/java /etc/java /usr/lib/java /usr/local/java

Next step would be to check whether the location returned is symbolic link or not. That can be easily found. Run below command:
  • $ ls -l /usr/bin/java
It returned something like below in my case:
lrwxrwxrwx. 1 root root 21 Dec 20  2013 /usr/bin/java -> /etc/alternatives/java

So the location was actually a symbolic link. Next run the following command using the above location:
  • $ ls -l /etc/alternatives/java
In my machine it returned result similar to below:
lrwxrwxrwx. 1 root root 46 Dec 20  2013 /etc/alternatives/java -> /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/java

That's my actual Java location. So basically you have go deeper through the symbolic links and you will find your actual JDK location.

Friday, April 24, 2015

Fixing Python Related Error While Installing Cassandra

Cassandra requires Python to be installed in your machine. So you might have downloaded and installed latest version of Python 3.x series. But still when you are trying to install setup.py from Cassandra pylib, you are getting errors. I tried to do it in my Windows machine and got error similar to below logs:
    byte-compiling D:\test\software\python\Lib\site-packages\cqlshlib\cqlhandling.py to cqlhandling.cpython-34.pyc

      File "D:\test\software\python\Lib\site-packages\cqlshlib\cqlhandling.py", line 240

        print "cql_complete(%r, partial=%r)" % (text, partial)

                                           ^

    SyntaxError: invalid syntax


    byte-compiling D:\test\software\python\Lib\site-packages\cqlshlib\displaying.py to displaying.cpython-34.pyc

    byte-compiling D:\test\software\python\Lib\site-packages\cqlshlib\formatting.py to formatting.cpython-34.pyc

    byte-compiling D:\test\software\python\Lib\site-packages\cqlshlib\helptopics.py to helptopics.cpython-34.pyc

      File "D:\test\software\python\Lib\site-packages\cqlshlib\helptopics.py", line 27

        print "\n        CQL types recognized by this version of cqlsh:\n"

                                                                         ^

    SyntaxError: Missing parentheses in call to 'print'


    byte-compiling D:\test\software\python\Lib\site-packages\cqlshlib\meter.py to meter.cpython-34.pyc

      File "D:\test\software\python\Lib\site-packages\cqlshlib\meter.py", line 57

        print ""

               ^

    SyntaxError: Missing parentheses in call to 'print'


    byte-compiling D:\test\software\python\Lib\site-packages\cqlshlib\pylexotron.py to pylexotron.cpython-34.pyc

      File "D:\test\software\python\Lib\site-packages\cqlshlib\pylexotron.py", line 131

        print "Trying completer %r with %r" % (completer, ctxt)

                                          ^

    SyntaxError: invalid syntax


    byte-compiling D:\test\software\python\Lib\site-packages\cqlshlib\saferscanner.py to saferscanner.cpython-34.pyc

    byte-compiling D:\test\software\python\Lib\site-packages\cqlshlib\sslhandling.py to sslhandling.cpython-34.pyc

    byte-compiling D:\test\software\python\Lib\site-packages\cqlshlib\tracing.py to tracing.cpython-34.pyc

    byte-compiling D:\test\software\python\Lib\site-packages\cqlshlib\util.py to util.cpython-34.pyc

    byte-compiling D:\test\software\python\Lib\site-packages\cqlshlib\wcwidth.py to wcwidth.cpython-34.pyc

      File "D:\test\software\python\Lib\site-packages\cqlshlib\wcwidth.py", line 367

        print 'tests pass.'

                          ^

    SyntaxError: Missing parentheses in call to 'print'


    byte-compiling D:\test\software\python\Lib\site-packages\cqlshlib\__init__.py to __init__.cpython-34.pyc

    running install_egg_info

    Writing D:\test\software\python\Lib\site-packages\cassandra_pylib-0.0.0-py3.4.egg-info
This is because Cassandra supports Python 2.x series. So uninstall Python 3 from your machine and install latest version of Python 2. Then try to run "python setup.py install" command again. It should run just fine without any errors.

Wednesday, April 22, 2015

What Does Java Thread State WAITING (parking) In Thread Dump Mean

If you are new to thread dump analysis, you might become confused with this Java thread state WAITING (parking). If a Java thread is in waiting state, that means it is waiting for another thread to call notify on the same object. And if you see too many threads waiting in your thread dump, you will assume there is some issue and that is causing your server to hang. But there is a common case where WAITING (parking) thread state might not be the actual issue. Look at below:
"pool-1-thread-22" prio=5 tid=101b4b000 nid=0x127122000 waiting on condition [127121000]
   java.lang.Thread.State: WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for  <6c340cee0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:156)
You will see same kind of pool threads with status waiting (parking). These are basically request worker threads on a tomcat sever. These are waiting on a blocking queue until a request comes. When a request comes, one thread will get permit and will run to execute the request.
Same thing will happen when you use your own Java ThreadPoolExecutor. It will create a pool of threads and those threads will wait on a blocking queue provided to the executor. Task executor uses this queue to push and pop tasks as and when they are submitted. So if no tasks are available these threads will wait (park) on the queue. When a task is available, one worker thread will get permit and become a running thread. It will execute the task.
So don't get overwhelmed with waiting (parking) threads. These threads still can cause issue if you have created too many threads in your thread pool and they are eating up your resource. Otherwise you are fine. Your threads are not locked on some object.

Sunday, April 12, 2015

Use NotePad++ As Offline JSON Viewer

Most of us use online JSON viewers like JSON Lint. But the issue creeps in when you have to parse and view somewhat big text file like 3-4 mb. Then JSON Lint page starts to hang and after some time your whole browser including other tabs goes into not responding mode whether it is Firefox or Google Chrome. At least that is the case that happens in my laptop. http://jsonviewer.stack.hu/ online viewer performs a lot better in handling big JSON files than JSON Lint. But I was also looking for an offline JSON viewer. And I found out that NotePad++ has a JSON viewer plugin. I installed it and it handles big files quite well. It will just try to parse the text and show it in tree view. And good thing is, you can keep on browsing when NotePad++ is busy in formatting your JSON. You don't have to worry about web browser crash.

Saturday, March 14, 2015

BeanFactory not initialized or already closed Error Fix For ActiveMQ In Windows

Are you getting same kind of exceptions as below while starting Apache ActiveMQ in Windows?
Caused by: java.io.IOException: Failed to bind to server socket: tcp://0.0.0.0:61616?maximumConnections=1000&wireformat.maxFrameSize=104857600 due to: java.net.BindException: Address already in use: JVM_Bind
        at org.apache.activemq.util.IOExceptionSupport.create(IOExceptionSupport.java:33)
        at org.apache.activemq.transport.tcp.TcpTransportServer.bind(TcpTransportServer.java:135)
        at org.apache.activemq.transport.tcp.TcpTransportFactory.doBind(TcpTransportFactory.java:56)
        at org.apache.activemq.transport.TransportFactorySupport.bind(TransportFactorySupport.java:40)
        at org.apache.activemq.broker.TransportConnector.createTransportServer(TransportConnector.java:307)
        at org.apache.activemq.broker.TransportConnector.getServer(TransportConnector.java:139)
        at org.apache.activemq.broker.TransportConnector.asManagedConnector(TransportConnector.java:106)
        at org.apache.activemq.broker.BrokerService.registerConnectorMBean(BrokerService.java:1965)

Caused by: java.lang.IllegalStateException: BeanFactory not initialized or already closed - call 'refresh' before accessing beans via the ApplicationContext
        at org.springframework.context.support.AbstractRefreshableApplicationContext.getBeanFactory(AbstractRefreshableApplicationContext.java:172)
        at org.springframework.context.support.AbstractApplicationContext.destroyBeans(AbstractApplicationContext.java:1078)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480)
        at org.apache.xbean.spring.context.ResourceXmlApplicationContext.<init>(ResourceXmlApplicationContext.java:64)
        at org.apache.xbean.spring.context.ResourceXmlApplicationContext.<init>(ResourceXmlApplicationContext.java:52)
        at org.apache.activemq.xbean.XBeanBrokerFactory$1.<init>(XBeanBrokerFactory.java:101)
        at org.apache.activemq.xbean.XBeanBrokerFactory.createApplicationContext(XBeanBrokerFactory.java:101)
        at org.apache.activemq.xbean.XBeanBrokerFactory.createBroker(XBeanBrokerFactory.java:65)
        at org.apache.activemq.broker.BrokerFactory.createBroker(BrokerFactory.java:71)
        at org.apache.activemq.broker.BrokerFactory.createBroker(BrokerFactory.java:54)
        at org.apache.activemq.console.command.StartCommand.startBroker(StartCommand.java:125)
        at org.apache.activemq.console.command.StartCommand.runTask(StartCommand.java:84)

That has most probably happened due to Internet Connection Sharing (ICS) service if you are using Windows 7. This service happens to run on same port as ActiveMQ. So if it starts before ActiveMQ launch, ActiveMQ will throw exception during start up. I used to get this error intermittently in my Windows Laptop because in one network adapter ICS was enabled. I disabled it as I didn't require it. From then on, I never had any issues.

Tuesday, March 10, 2015

Fix jre.msi Missing Issue While Uninstalling Java From Windows

While trying to uninstall java you are getting message like below:
The feature you are trying to use is on a
network resource that is unavailable.

Click OK to try again, or enter an alternate path to a
folder containing installation package 'jre.msi' in the
box below.
I got this message in Windows 7. I tried to uninstall Java 7 from my laptop. After uninstall, I got some message that a restart was required to complete the changes. I chose to do it later. After some time when I restarted Windows, I still saw Java 7 in installed programs list in Control Panel. And when I tried to uninstall it again I got above message and couldn't finish uninstall process.



I found a solution by using Microsoft Fix it utility software for programs that cannot be installed or uninstalled. I ran the program. It searched for all the programs that can be uninstalled. After I selected my corrupted Java installation from the list, it cleaned up the existing installation. This program fixed corrupted registries and also removed the program from Control Panel programs list.

Wednesday, February 25, 2015

A Cool Way To Identify Song Name From Tune Using PC Online

Few days back I heard a famous soundtrack while watching a Korean drama. I heard it before, but I didn't know the soundtrack name. I liked it so much that I thought this time I needed to find the track name and listened to the whole music. So I started looking for online music identifier. Top search results returned mainly IOS or Android apps. There were some services also that can be used in PC, but you need to sing the song or hum the tune in microphone to match the results with their online music databases. I am a terrible singer. And I didn't want to go through the trouble of configuring stereo mix to put music from my computer to microphone. So I was looking for a online music community where I can upload part of a song or tune and somebody can identify it. And I wanted a community that is active enough to get a quick response. Looks like WatZatSong is just like that.



I registered and uploaded the mp3 tune and it was identified within 15 minutes. The tune was a famous one Chariots Of Fire by Vangelis. So it may have been identified quickly. But I checked the community. Looks like they have enough active users who are willing to listen to tunes uploaded by other users and identify them. If the song you are looking for is kind of well-known, you can expect somewhat quick response. So if you are trying to find the original song or music name by a partial tune that you have got from some other medium like tv series or movie or advertisement, you can try this service.

Friday, February 20, 2015

How To Find Out Size Of A Key In Redis

Redis can do special encoding for some data types to save space while storing data in memory. So if you want to know the actual memory space occupied by a key value in redis server, use the following command:

DEBUG OBJECT <KEY>

For example, look at the following command and output:

redis localhost:6379> DEBUG OBJECT sample_key
Value at:0x7f36f2980900 refcount:1 encoding:raw serializedlength:4 
lru:582042 lru_seconds_idle:1423688

Here serializedlength is 4. That means the value is taking up 4 bytes of memory in redis server after it gets serialized and stored. This command can be pretty useful if you want to check some particular type of keys take up how much memory generally when their data gets stored in redis.
 

 

Sunday, February 15, 2015

How To Force Shutdown Samsung Galaxy Tab

I just faced this problem with my Samsung Galaxy Tab 3. I installed few Flash supported browsers for Android like Phantom Browser and Dolphin Browser. Then I opened several videos in multiple tabs. And my Galaxy Tab started hanging intermittently. I tried to shutdown my tab, but it didn't work. Generally you need to press and hold power button for about 3 seconds to get the shutdown menu. As it didn't work, I tried installing few Android Shutdown apps from Google Play Store to shut it down programmatically. But those apps needed root access that I don't have and don't know how to get that permission.
But there's a way around. Just press and hold the power button for about 10-15 seconds. Then Galaxy Tab will be rebooted. After rebooting, your Galaxy tab will start normally and you can try shutting it down by pressing power button for a few seconds. It should work now.

Saturday, February 7, 2015

How To Monitor Involuntary Context Switches In Linux

As you know, high involuntary context switches is a sign that your application has more threads to run than number of virtual processors available in your machine. Monitoring non voluntary context switches in Linux is easy. Just use "pidstat -w" command. You will see similar output as below:



Keep an eye on cswch/s and nvcswch/s columns. cswch/s indicates number voluntary context switches per second for a particular process, whereas nvcswch/s shows number of involuntary context switches per second for a process.

Friday, January 30, 2015

Remove Outdated Java Plugins From Firefox Web Browser

Currently I have two Java Deployment Toolkit Firefox plugins that have red exclamation mark against them. The error message is like they are "known to be vulnerable. Use with caution.". One refers to Java 6 Deployment Toolkit and another one from Java 7.



Moreover I have Java 6 SE plugin disabled with message "Java(TM) Platform SE 6 U 26 is known to cause security or stability issues.". All these messages are there because I still have older Java versions in my computer.



If I only had latest Java 8, I wouldn't have got these error messages in Firfox add-ons page. So if you don't really need, just uninstall older Java versions and you won't get these messages anymore. But if you need to use multiple Java versions for development at different times, you need to find an alternative. Enter "about:plugins" in Firefox address bar. The page will show you details of all the add-ons installed in your browser. Just search with the plugin name like "Java Deployment Toolkit 6.0.260.3". You will get the complete file path for that plugin. Just go there and delete .dll file like "C:\Program Files (x86)\Java\jre6\bin\new_plugin\npdeployJava1.dll" in this case.



So this way you can keep multiple versions of Java in your machine and still you won't see any error message in Firefox  add-ons page as you will use plugins only from latest Java version.

Friday, January 23, 2015

How To Monitor User CPU Utilization And Kernel CPU Utilization Through Windows Task Manager

When you open Task Manager in Windows 7 or some other Windows version, click on Performance tab. That is the place where you monitor CPU and Memory utilization in real time. Today I will just talk about CPU utilization statistics.



So CPU Usage box at top left side bar shows you overall CPU utilization at real time over all the cores. Under CPU Usage History, you will see CPU utilization graph moving along in real time. But that will be separate box for each core. My processor is Intel i7 2 core. But I still get to see four boxes. Why is it like that even when my multi-processor is just dual core? It's because of Intel's SMT technology, where due to hardware multi-threading each physical core behaves like 2 separate cores. So my machine basically have 4 logical processors. And Windows Task Manager shows separate box for each logical core. Now the graph that you see in the box displays the overall CPU utilization for a particular logical processor. You need to figure out User CPU utilization and Kernel CPU utilization separately. Time spent on the application code is basically User CPU utilization. And when application executes kernel code on behalf of the application, that constitutes your Kernel CPU utilization like doing disk I/O or allocating memory.



Click on View > Show Kernel Times. Now you will get a red line graph. That shows your Kernel or System CPU utilization. The portion between green line and red line is basically User CPU utilization.

Saturday, January 17, 2015

How to Change Windows Update Settings Bypassing Group Policy

When you are trying to change Windows Update settings, you are getting "Some settings are managed by your system administrator" message and drop-down box to change Windows Update settings is disabled.



This happens because your IT administrator has changed Windows Group Policy and set some deault settings for Windows Update. But suppose you sometimes use internet connection that has limited bandwidth pack. In that case you would probably like to save some bandwidth and download Windows Update files later. You would want to choose "Check for updates but let me choose whether to download and install them" option. Here is a quick solution to bypass Windows Group Policy and enable the drop-down options for Windows Update.
  • Open Registry Editor. You can do it by typing "regedit" in Start search box.
  • Go to HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows
  • Look for key WindowsUpdate under that. If it's not there, create one.
  • Look for AU key under WindowsUpdate. If it's not there, create it. Finally, path should look like HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU
  • Now select AU key. On right-side, create a new DWORD with name AUOptions and set value to 5 which will allow local admin to modify the settings.
It's done. Now you can go to Windows Update page and change the settings as you want.

Thursday, January 15, 2015

Download npower Test Series Flash Game For Free

This is about a flash cricket game that I used to play a lot. It's called npower Test Series. You have 10 wickets and 12 overs. You just stay there and press the arrow buttons when you see the ball coming. If your timing is right, you will hit the ball and based on that you will get runs like 2, 4 or 6 etc. It's simple and fun.



Recently I wanted to play it again. But this flash game file seems to be pretty hard to find and download online. After a lot of searching I was able to get it. So I thought of uploading it so that people like me who love this flash game can download and play. Here is the free download link for npower Test Series flash game.