Many times there are some Java linkage errors and I have to find out in which jar files the class files are located. So this has lead me to find out tools which can do this job for me. I usually get the job done by using this excellent open source tools named Jar Explorer inside Github. It is basically a platform independent Swing based utility which allows you to recursively search inside Jar files located inside a folder for any class name String. So it is possible for me to search for a class named “LoggingEvent” inside a folder containing lots of jars and it outputs the list of all the jar files where it found classes containing the text “LoggingEvent”.
However when you are connected to Linux consoles using ssh and don’t have access to X Windowing system then you have to rely on either text based java program or pure vanilla shell scripting. For this situation I use the following snippets of code which I found from a Stackoverflow article.
for i in *.jar; do jar -tvf "$i" | grep -Hsi ClassName && echo "$i"; done
for /R %G in (*.jar) do @jar -tvf "%G" | find "ClassName" > NUL && echo %G
I have to work with Windows, Linux and Macbook environment and with time I have no issues working with all of these environments simultaneously. What used to irk me the most was the need to physically use multiple keyboards and mouse and control my Windows laptop and Macbook. Doing VNC / Remote Desktop into another computer didn’t cut it. So I found out about Synergy project long time ago. This is a free and open source keyboard/mouse sharing solution.
Basically the computer whose keyboard/mouse you want to use becomes the Synergy server and all other laptops / computer would become Synergy client. It is very easy to setup and once it is done I can use the keyboard / mouse of of my Macbook to control my windows laptop as well as Linux laptop simultaneously.
We can use the jps command that is part of JDK to find out which Java processes are running in the current user’s session. We can further find out which network ports have been opened by a particular java process.
Use the follwing command to list all java processes:
If you want more details about a process you can execute the following command:
jps -v | findstr <process id>
The following variant of netstat command lists all the listening as well as established socket connection in a system:
This command can be further used to find out what sockets are opened by a specific process
netstat -ano | findstr <process id>
In this world of multi-tabbed browsing I find it inconvenient that Windows Explorer has no multi tabbed support. I did some search and found out Clover. I downloaded and installed this tool and voila my Windows Explorer has got tabs. The tool itself is simple and integrates seamlessly with Windows Explorer in Windows 8. I have not had time to check it on my Windows 7 laptop, maybe sometime soon I will post an update.
Being a hard core java programmer the Windows console is only one step away from me. In Windows 7 I use a nifty inbuilt feature which allows me to open a command window and switch to a given directory in a single step.
- Using My Computer / Windows Explorer navigate to the relevant folder.
- Press Shift and do a Right Click either on the folder name.
- You will get a popup menu with the option “Open Command Window Here”.
- Clicking on this option will open the console / terminal window with this folder as the current directory.
- You can Right Click on an empty area as well to open the console/terminal for the current folder.
This facility is a time saver and I really like using it every now and then.
If you are like me you might have multiple user accounts on the target windows box and you might want to switch the network credentials used to login by the Windows. One thing which I have found extremely annoying is the tendency of Windows Explorer to remember your last credential even when you have kept the “remember credentials” checkbox unchecked. I am not talking about credentials which you ask Windows to “remember” but about credentials which you don’t want Windows to remember so that if I closed explorer and re-opened the explorer and tried to access a remote computer’s file share I should be asked for the credentials again. I don’t know if this is a Windows 7 specific behavior or not but I am facing this issue on Windows 7. This logon is basically cached for your convenience. But what if you don’t want your credentials to be cached, what if you want to switch your credentials rapidly. This might sound stupid to some but it is helpful once in a while.
Well I found a workaround which is clunky but works great. Open a command prompt in administrator mode and execute the following command.
net use \\your_remote_computer\share /delete
This command basically terminates the connection to your remote computer if it’s not already terminated. If you want to terminate all your connections then execute the following command instead of the above command.
net use * /delete
The above command ensures that all connections to any remote computers are terminated. This command might ask you for confirmation in the command prompt. Answer “yes” for all connections. Now follow up with the following command:
This command basically terminates the Kerberos Ticket for the credential you had for your remote computer if it has not already been done. Please note you need to ensure that the connection to the remote computer has been terminated and then purge the outdated kerberos tickets for closed connections so you need to execute the 2 commands in sequence. This will ideally solve this little problem.
Windows somehow gives LAN cable connection priority for connecting to internet. This was a mystery which has boggled me for quite some time. Recently I landed in a scenario where on my laptop I had a LAN cable connection as well as a WiFi connection. Now in this situation both Ethernet and WiFi adapter have got internet access via different ISP and the gateway for both are different. Now I wanted my FTP client to download stuffs via my LAN cable and I wanted my Dropbox client to upload files via my WiFi connection. After spending some time on internet I found out that the only solution that guarantees result is to take control over the metrics of the network adapters. If the metrics of WiFi is made lower than the metrics of Ethernet then Windows OS routes all internet traffic via WiFi. After changing the metrics I checked and confirmed that my Browser and Dropbox applications were using WiFi instead of Ethernet. This seems to be working reliably for now. I performed the following steps:
- Open command prompt (type cmd.exe in Start Menu in Win 7 or in Run dialog in Win XP).
- Type ncpa.cpl (This will open the network connections windows)
- Right click on your Wireless Network Connection adapter (WiFi).
- Click on “Properties” in the popup. This will open the properties dialog.
- In the properties dialog choose “Internet Protocol Version 4 (TCP/IPv4)”.
- Click on “Properties” button. This will open the “Internet Protocol Version 4 (TCP/IPv4) Properties”.
- Click on the “Advanced” button. This will open the “Advanced TCP/IP Settings”.
- In this dialog uncheck the “Automatic Metric” checkbox.
- Type ‘1’ without quotes in the “Interface metric” text field.
- Click on OK in this dialog and the underlying dialog to save your changes. Click on “Close” in the properties dialog to conclude this task.
- Now in the Network Connections window select your “Local Area Connection” (Ethernet Adapter).
- Repeat steps 4 through 10 with the only difference that in step 9 type ‘2’ instead of ‘1’.
- That’s it you are done.
The idea is that if you provide a lower metrics to your WiFi and a higher metrics to your LAN/Ethernet adapter then Windows OS will always use your WiFi connection for all Internet traffic. This worked well for me.