1. Inside chrome, use option + command + left to move tab by tab from left to right, use option + command + right to move tab by tab from right to left.
2. Inside chrome, right click then click inspect, then click network. Refresh the page to view the page loading process.
3. install chrome tools to handle json, xml etc.
jsonEditer to tidy and modify json string
https://chrome.google.com/webstore/search/jsonEdit?hl=en
ooxml tool to edit and compare xml files
https://chrome.google.com/webstore/detail/ooxml-tools/bjmmjfdegplhkefakjkccocjanekbapn?hl=en
4. install diffmerger to compare files side by side
https://sourcegear.com/diffmerge/downloads.php
5. use --color option to highlight text (good for your eye), use --text option to avoid searching missing in zip files with special characters.
>zgrep KEY --color --text demoClient.key
-----BEGIN RSA PRIVATE KEY-----
-----END RSA PRIVATE KEY-----
6. In xterm2, if you get a huge file which can not be displayed on one screen, click Session -> Edit Session -> Terminal -> then modify scroll back lines to a bigger number.
7. In xterm2, if you want to view several terminals side by side, type command + D to split horizontally, click command + shift + D to split vertically, then type command + shift + i to type in all the terminals. Type command + shift + i again to negate the effect.
This blog is about Ad-Hoc knowledge spreading to broad range of spectrum: software, electronics, computer hardware, wireless, system engineer, IoT, information security, NLP, Cloud, AI, ML, E-commerce, blog, search engine...Internet is ran by do good individuals, wish the knowledge be with you.
Wednesday, October 31, 2018
Wednesday, October 17, 2018
How to exit java ExecutorService without calling shutdown method
The java Executor framework encapsulated the thread lifecycle management under interface ExecutorService. By default, the ExecutorService implementation returned by Executors needs programmer to call shutdown() method to stop it. Forget to call shutdown for an ExecutorService will prevent the JVM to exit. The JVM won't exit if there are any non-daemon thread still running. The worker threads in the ExecutorService's thread pool won't exit unless you interrupt them, in another words, they will still be running after the main thread exits. These worker threads prevent JVM to exit.
For example, the following program will never finish.
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class TheadTester {
public static void main(String... args) {
TheadTester ts = new TheadTester();
ts.test();
}
private void test() {
ExecutorService exec = Executors.newSingleThreadExecutor();
exec.execute(() -> System.out.println("ok"));
//exec.shutdown();
}
}
You can override the default ThreadFactory, so that the worker thread in the thread pool will be daemon thread. Since daemon thread won't prevent JVM to exit, you don't have to call ExecutorService's shutdown() method. This approach has drawbacks, though. Once the main thread exits, the only threads remain are the worker daemon threads in the threadpool. When JVM exits, these threads may still have work to do. Since they are daemons, JVM won't wait them to finish. You need to give enough time for these daemon threads to finish the work and run to the last line so that they can exit normally instead of abruptly.
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class TheadTester {
public static void main(String... args) throws InterruptedException {
TheadTester ts = new TheadTester();
ts.test();
//give enough time for deamon thread to finish
Thread.sleep(2000);
}
private void test() {
ExecutorService exec = Executors.newSingleThreadExecutor(r -> {
Thread t = new Thread(r);
t.setDaemon(true);
return t;
});
exec.execute(() -> System.out.println("ok"));
//exec.shutdown();
}
}
This trick may be trivial, but it could be handy in big java project. For example, you need to add an ad-hoc threadpool in a class in a big project. If you use default ThreadFactory for the ExecutorService, you have to shutdown the ExecutorService somewhere. This "somewhere" might be in a thread that shutdown project level services before main thread exits, which you would rather not touch. You just want to create an ad-hoc threapool to handle events for a shot period of time, finish it, then exit. Next time, when new events come, you create a new threadpool to handle it. So on and so forth. The deamon worker strategy might be a good choice in this situation.
Tuesday, October 9, 2018
tools for handling multiple ssh on mac os x
If you ever worked in cooperate environment or be the network administrator, you sometimes need to login many servers and check stuff simultaneously.
On windows, you can use putty or smart putty to handle multiple ssh connections.
Here are some tools for mac os x equivalent.
On windows, you can use putty or smart putty to handle multiple ssh connections.
Here are some tools for mac os x equivalent.
csshx
installation:
brew install csshx
usage:
csshx --login username host1 host2 host3 host4
xterm
installation:
download the mac version from the xterm website www.iterm2.com
usage:
add a connection profiles:
click Profiles -> Open Profiles... -> Edit Profiles -> click the + sign to add a list of hostnames and ip addresses you would like to connect to -> when creating a host record, select command radio button then type in ssh command.
open multiple profiles simultaneously in tabs:
click Profiles -> Open Profiles... -> use shift or control key to hightlight a list of hosts you want to connect to -> click New Tab
The highlighted hosts will be connected and open in tabs.
send commands to multiple tabs:
click Shell -> Broadcast Input -> Broadcast Input to All Panels in All Tabs
Subscribe to:
Posts (Atom)
Why I stopped publishing blog posts as information provider
Now the AI can generate content. Does that mean the web publishing industry reaches the end? ChatGPT said: ChatGPT Not at all. While AI can ...
-
1. Digg 2. Twitter 3. FriendFeed 4. Reddit 5. Hacker News 6. Facebook 7. MySpace 8. LinkedIn 9. Flixster 10. Flickr
-
It is super easy. On the top-right hand of youtube page, there is a textbox labeled "embed". Just copy the content in the textbox,...
-
Show   Hide Here is the text you would like to show --------------------------------------------------------------------------- I f...