tag:blogger.com,1999:blog-5105947739153776102024-03-14T00:35:42.586-07:00potatoes and carrots no bonesbenbai123http://www.blogger.com/profile/02710053250987444028noreply@blogger.comBlogger235125tag:blogger.com,1999:blog-510594773915377610.post-81917937994481637382019-11-17T04:10:00.000-08:002019-11-17T04:10:05.925-08:00Docker Compose Getting Started with JAVA RocketMQ<br />
<span style="font-size: large;"><b>Motivation</b></span><br />
<br />
Just want to try Docker Compose...<br />
<br />
<b><span style="font-size: large;">Prerequisites</span></b><br />
<br />
Install Docker Compose on Ubuntu 18.04<br />
<a href="https://ben-bai.blogspot.com/2019/11/install-docker-compose-on-ubuntu-1804.html" target="_blank">https://ben-bai.blogspot.com/2019/11/install-docker-compose-on-ubuntu-1804.html</a><br />
<br />
JAVA JMS: RocketMQ NameServer Broker Cluster<br />
<a href="https://ben-bai.blogspot.com/2019/10/java-jms-rocketmq-nameserver-broker.html" target="_blank">https://ben-bai.blogspot.com/2019/10/java-jms-rocketmq-nameserver-broker.html</a><br />
<br />
<br />
<b><span style="font-size: large;">Simple Note</span></b><br />
<br />
Go to Dockerfile folder,<br />
<br />
Add the docker-compose.yml below into it<br />
<a href="https://github.com/benbai123/JSP_Servlet_Practice/blob/master/Practice/JAVA/JMS/RocketMQ/RocketMQCluster/docker-compose.yml" target="_blank">https://github.com/benbai123/JSP_Servlet_Practice/blob/master/Practice/JAVA/JMS/RocketMQ/RocketMQCluster/docker-compose.yml</a><br />
<br />
then run docker-compose up<br />
<br />
Docker Compose will build image and run container with specified config value<br />
<br />
Testing Video<br />
<a href="https://youtu.be/QHQEacrtU9k" target="_blank">https://youtu.be/QHQEacrtU9k</a><br />
<br />
Shortly,<br />
<br />
Dockerfile define "how to create the container"<br />
<br />
docker-compose.yml describe "how to config/run containers"<br />
<br />
<br />
<span style="font-size: large;"><b>References</b></span><br />
<br />
Get started with Docker Compose<br />
<a href="https://docs.docker.com/compose/gettingstarted/" target="_blank">https://docs.docker.com/compose/gettingstarted/</a><br />
<br />
Compose file version 3 reference<br />
<a href="https://docs.docker.com/compose/compose-file/" target="_blank">https://docs.docker.com/compose/compose-file/</a><br />
<div>
<br /></div>
benbai123http://www.blogger.com/profile/02710053250987444028noreply@blogger.com2tag:blogger.com,1999:blog-510594773915377610.post-67185878863294452892019-11-14T22:00:00.000-08:002019-11-14T22:00:39.030-08:00Install Docker Compose on Ubuntu 18.04<br />
<span style="font-size: large;"><b>Simple Note</b></span><br />
<br />
Just several lines of commands<br />
<br />
<pre style="background-color: #222222; border: 1px dashed #999999; font-family: Arial; font-size: 14px; line-height: 16px; overflow: auto; padding: 5px; width: 100%;"><code style="word-wrap: normal;"><span style="color: #6fa8dc;"># Run this command to download the current stable release of Docker Compose</span>
<span style="color: #6fa8dc;"># To install a different version of Compose, substitute 1.24.1 with the version of Compose you want to use.</span>
sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
<span style="color: #6fa8dc;"># Apply executable permissions to the binary:</span>
sudo chmod +x /usr/local/bin/docker-compose
<span style="color: #6fa8dc;"># Test the installation.</span>
docker-compose --version
<span style="color: #6fa8dc;"># done</span>
</code></pre>
<br />
<br />
<b><span style="font-size: large;">Reference</span></b><br />
<br />
<a href="https://docs.docker.com/compose/install/" target="_blank">Install Docker Compose</a>benbai123http://www.blogger.com/profile/02710053250987444028noreply@blogger.com0tag:blogger.com,1999:blog-510594773915377610.post-79373643463566957352019-11-12T23:11:00.000-08:002019-11-12T23:11:22.130-08:00JAVA Selenium Visual Testing<br />
<b><span style="font-size: large;">Motivation</span></b><br />
<br />
Visual Testing is convenient, let you find any change of a web page in one line.<br />
<br />
<span style="font-size: large;"><b>Prerequisites</b></span><br />
<br />
You probably will want to view the articles in this blog below before reading this article<br />
<br />
<a href="https://ben-bai.blogspot.com/2019/10/java-selenium-browser-automation.html" target="_blank">JAVA Selenium Browser Automation Getting Started</a><br />
<br />
<a href="https://ben-bai.blogspot.com/2019/11/java-selenium-commands-testing.html" target="_blank">JAVA Selenium Commands Testing</a><br />
<br />
<a href="https://ben-bai.blogspot.com/2019/11/java-image-basic-operations.html" target="_blank">JAVA Image Basic Operations</a><br />
<br />
<a href="https://ben-bai.blogspot.com/2019/11/java-diff-image-and-highlight.html" target="_blank">Java Diff Image and Highlight Differences</a><br />
<br />
<b><span style="font-size: large;">Simple Note</span></b><br />
<br />
Testing file <a href="https://github.com/benbai123/JSP_Servlet_Practice/blob/master/Practice/JAVA/Automation/Browser/Selenium/VisualTesting/src/com/blogspot/benbai123/selenium/visualtesting/VisualTessting.java" target="_blank">VisualTessting.java</a><br />
<br />
Visual Testing Implementation <a href="https://github.com/benbai123/JSP_Servlet_Practice/blob/master/Practice/JAVA/Automation/Browser/Selenium/VisualTesting/src/com/blogspot/benbai123/selenium/visualtesting/VisualTestingImpl.java" target="_blank">VisualTestingImpl.java</a><br />
<br />
After the testing file is executed, you should find some images in the folder selenium/visualTesting/123456 under your project folder.<br />
<br />
<b><span style="font-size: large;">References</span></b><br />
<br />
<a href="https://stackoverflow.com/questions/29301838/converting-bufferedimage-to-bytebuffer" target="_blank">Converting BufferedImage to ByteBuffer</a><br />
<br />
<a href="https://stackoverflow.com/questions/33219638/how-to-make-a-hashcodeinteger-value-positive" target="_blank">How to make a hashcode(integer value) positive</a><br />
<br />
<a href="https://stackoverflow.com/questions/45905027/how-to-take-re-entrant-lock-on-string-value" target="_blank">How to take Re-entrant lock on String value?</a><br />
<br />benbai123http://www.blogger.com/profile/02710053250987444028noreply@blogger.com0tag:blogger.com,1999:blog-510594773915377610.post-32124352366724967472019-11-07T22:57:00.000-08:002019-11-07T22:57:33.552-08:00Java Diff Image and Highlight Differences<br />
<span style="font-size: large;"><b>Motivation</b></span><br />
<br />
I want to implement visual testing with Selenium.<br />
<br />
There is already a library <a href="https://github.com/romankh3/image-comparison" target="_blank">romankh3/image-comparison</a><br />
<br />
but it says "with the same sizes" so probably not suitable in some cases.<br />
<br />
<span style="font-size: large;"><b>Simple Note</b></span><br />
<br />
Test file <a href="https://github.com/benbai123/JSP_Servlet_Practice/blob/master/Practice/JAVA/Image/DiffImage/src/com/blogspot/benbai123/image/diff/ImageDiff.java" target="_blank">ImageDiff.java</a><br />
<br />
Diff implementation <a href="https://github.com/benbai123/JSP_Servlet_Practice/blob/master/Practice/JAVA/Image/DiffImage/src/com/blogspot/benbai123/image/diff/ImageDiffImpl.java" target="_blank">ImageDiffImpl.java</a><br />
<br />
Assume expected image <a href="https://github.com/benbai123/JSP_Servlet_Practice/blob/master/Practice/JAVA/Image/DiffImage/aa.png" target="_blank">aa.png</a> and actual image <a href="https://github.com/benbai123/JSP_Servlet_Practice/blob/master/Practice/JAVA/Image/DiffImage/cc.png" target="_blank">cc.png</a><br />
the diff result will be <a href="https://github.com/benbai123/JSP_Servlet_Practice/blob/master/Practice/JAVA/Image/DiffImage/output_image.png" target="_blank">output_image.png</a><br />
<br />
<span style="font-size: large;"><b>References</b></span><br />
<br />
<a href="https://stackoverflow.com/questions/3514158/how-do-you-clone-a-bufferedimage" target="_blank">How do you clone a BufferedImage</a><br />
<br />
<a href="https://stackoverflow.com/questions/5254838/calculating-distance-between-a-point-and-a-rectangular-box-nearest-point" target="_blank">calculating distance between a point and a rectangular box</a><br />
<br />
<a href="https://stackoverflow.com/questions/26050530/filling-a-multidimensional-array-using-a-stream/26979389" target="_blank">Filling a Multidimensional Array using a Stream</a><br />
<br />
<div>
<br /></div>
benbai123http://www.blogger.com/profile/02710053250987444028noreply@blogger.com0tag:blogger.com,1999:blog-510594773915377610.post-32105149965828783242019-11-03T23:45:00.001-08:002019-11-03T23:45:23.619-08:00JAVA Image Basic Operations<br />
<span style="font-size: large;"><b>Motivation</b></span><br />
<br />
I want to implement visual testing with Selenium screenshot so need to know basic operations of Image in JAVA.<br />
<br />
<b><span style="font-size: large;">Simple Note</span></b><br />
<br />
Testing file <a href="https://github.com/benbai123/JSP_Servlet_Practice/blob/master/Practice/JAVA/Image/BasicOperations/src/com/blogspot/benbai123/image/TestBasicOperations.java" target="_blank">TestBasicOperations.java</a><br />
Including read image file, get information of each pixel, draw rectangle on loaded image then save it.<br />
<br />
Pixel class <a href="https://github.com/benbai123/JSP_Servlet_Practice/blob/master/Practice/JAVA/Image/BasicOperations/src/com/blogspot/benbai123/image/Pixel.java" target="_blank">Pixel.java</a><br />
for store information of each pixel<br />
<br />
<span style="font-size: large;"><b>References</b></span><br />
<br />
<a href="https://stackoverflow.com/questions/6524196/java-get-pixel-array-from-image" target="_blank">Java - get pixel array from image</a><br />
<br />
<a href="https://www.deadcoderising.com/2015-05-19-java-8-replace-traditional-for-loops-with-intstreams/" target="_blank">Java 8: Replace traditional for loops with IntStreams</a><br />
<br />benbai123http://www.blogger.com/profile/02710053250987444028noreply@blogger.com0tag:blogger.com,1999:blog-510594773915377610.post-43258818803020793222019-11-02T05:02:00.000-07:002019-11-02T05:02:06.402-07:00JAVA Selenium Commands Testing<br />
<span style="font-size: large;"><b>Motivation</b></span><br />
<br />
Create a testing file for reference.<br />
<br />
<span style="font-size: large;"><b>Simple Note</b></span><br />
<br />
Testing file: <a href="https://github.com/benbai123/JSP_Servlet_Practice/blob/master/Practice/JAVA/Automation/Browser/Selenium/CommandsTesting/src/com/blogspot/benbai123/selenium/commandstesting/CommandsTesting.java" target="_blank">CommandsTesting.java</a><br />
<br />
Basically, can do everything that can be done in JavaScript<br />
<br />
<span style="font-size: large;"><b>References</b></span><br />
<br />
<a href="https://www.javatpoint.com/selenium-webdriver-commands" target="_blank">Selenium WebDriver- Commands</a><br />
<br />
<a href="https://stackoverflow.com/questions/12729265/switch-tabs-using-selenium-webdriver-with-java" target="_blank">Switch tabs using Selenium WebDriver with Java</a><br />
<br />
<a href="https://stackoverflow.com/questions/11736027/webdriver-wait-for-element-using-java" target="_blank">WebDriver - wait for element using Java</a><br />
<br />
<a href="https://stackoverflow.com/questions/20903231/how-to-wait-until-an-element-is-present-in-selenium" target="_blank">How to wait until an element is present in Selenium?</a><br />
<br />
<br />
<br />
<br />benbai123http://www.blogger.com/profile/02710053250987444028noreply@blogger.com0tag:blogger.com,1999:blog-510594773915377610.post-63939719082309879882019-10-17T00:42:00.000-07:002019-10-17T00:49:40.295-07:00JAVA Selenium Browser Automation Getting Started<br />
<span style="font-size: large;"><b>Simple Note</b></span><br />
<br />
Two versions,<br />
<br />
use io.github.bonigarcia WebDriverManager to set up ChromeDriver<br />
<a href="https://github.com/benbai123/JSP_Servlet_Practice/blob/master/Practice/JAVA/Automation/Browser/Selenium/GettingStarted/src/com/blogspot/benbai123/selenium/gettingstarted/GettingStartedWithDriverManager.java" target="_blank">GettingStartedWithDriverManager.java</a><br />
<br />
manually download chromedriver.exe and specify path<br />
<a href="https://github.com/benbai123/JSP_Servlet_Practice/blob/master/Practice/JAVA/Automation/Browser/Selenium/GettingStarted/src/com/blogspot/benbai123/selenium/gettingstarted/GettingStartedWithDownloadedChromeDriver.java" target="_blank">GettingStartedWithDownloadedChromeDriver.java</a><br />
<br />
and this is a Maven Project so<br />
<a href="https://github.com/benbai123/JSP_Servlet_Practice/blob/master/Practice/JAVA/Automation/Browser/Selenium/GettingStarted/pom.xml" target="_blank">pom.xml</a><br />
<br />
<span style="font-size: large;"><b>Related Resources</b></span><br />
<br />
Download ChromeDriver here:<br />
<a href="https://chromedriver.chromium.org/downloads" target="_blank">https://chromedriver.chromium.org/downloads</a><br />
<br />
Check what version of Chrome do you have<br />
<a href="https://www.whatismybrowser.com/detect/what-version-of-chrome-do-i-have" target="_blank">https://www.whatismybrowser.com/detect/what-version-of-chrome-do-i-have</a><br />
<br />
<b><span style="font-size: large;">References</span></b><br />
<br />
<a href="https://stackoverflow.com/questions/14957692/example-maven-pom-xml-for-java-based-selenium-webdriver-project-for-firefox" target="_blank">Example Maven pom.xml for Java based Selenium WebDriver project for Firefox</a><br />
<br />
<a href="https://stackoverflow.com/questions/21320837/release-selenium-chromedriver-exe-from-memory" target="_blank">release Selenium chromedriver.exe from memory</a><br />
<br />benbai123http://www.blogger.com/profile/02710053250987444028noreply@blogger.com2tag:blogger.com,1999:blog-510594773915377610.post-19352719399603132472019-10-15T21:41:00.003-07:002019-10-15T21:51:04.525-07:00JAVA Dynamic Compile Class From Text<br />
<span style="font-size: large;"><b>Simple Note</b></span><br />
<br />
Test File: <a href="https://github.com/benbai123/JSP_Servlet_Practice/blob/master/Practice/JAVAX/tools/JavaCompiler/DynamicCompileClass/src/com/blogspot/benbai123/dynamiccompileclass/gettingstarted/TestDynamicCompile.java" target="_blank">TestDynamicCompile.java</a><br />
<br />
Note: Should use JDK as System Library, not JRE<br />
<br />
<span style="font-size: large;"><b>Reference</b></span><br />
<br />
<a href="https://stackoverflow.com/a/2946402/1042731" target="_blank">How do I programmatically compile and instantiate a Java class?</a>benbai123http://www.blogger.com/profile/02710053250987444028noreply@blogger.com1tag:blogger.com,1999:blog-510594773915377610.post-67800321059095246982019-10-14T23:18:00.005-07:002019-10-15T19:39:02.020-07:00JAVA JMS: RocketMQ NameServer Broker Cluster<br />
<span style="font-size: large;"><b>Simple Note</b></span><br />
<br />
After bind necessary ports<br />
(see <a href="https://ben-bai.blogspot.com/2019/10/connect-to-virtualbox-guest-machine.html" target="_blank">Connect to VirtualBox Guest Machine from Host OS with NAT Port Forwarding</a>)<br />
<br />
Creat Docker Image with Dockerfile<br />
(see <a href="https://ben-bai.blogspot.com/2019/10/create-dockerfile-for-docker-image-of.html" target="_blank">Create Dockerfile for Docker Image of RocketMQ NameServer</a>)<br />
<br />
Can give it a try finally...<br />
<br />
<span style="font-size: large;"><b>Testing Video</b></span><br />
<br />
<a href="https://youtu.be/mHuEyVh0eUk" target="_blank">https://youtu.be/mHuEyVh0eUk</a><br />
<br />
The command for start broker is slightly different, add -c to use specific config and specify multiple nameServer address<br />
<br />
e.g.<br />
<br />
<pre style="background-color: #222222; border: 1px dashed #999999; font-family: Arial; font-size: 14px; line-height: 16px; overflow: auto; padding: 5px; width: 100%;"><code style="word-wrap: normal;">mqbroker.cmd -c ../conf/2m-2s-sync/broker-a.properties -n localhost:9487;localhost:9478 autoCreateTopicEnable=true</code></pre>
<br />
<br />
<span style="font-size: large;"><b>All files in the test project</b></span><br />
<br />
<a href="https://github.com/benbai123/JSP_Servlet_Practice/tree/master/Practice/JAVA/JMS/RocketMQ/RocketMQCluster">RocketMQCluster</a><br />
<br />
<div>
<br /></div>
benbai123http://www.blogger.com/profile/02710053250987444028noreply@blogger.com0tag:blogger.com,1999:blog-510594773915377610.post-15247115070720653442019-10-12T02:08:00.005-07:002019-10-14T18:57:39.119-07:00Create Dockerfile for Docker Image of RocketMQ NameServer<br />
<span style="font-size: large;"><b>Simple Note</b></span><br />
<br />
Please refer to this <a href="https://github.com/benbai123/JSP_Servlet_Practice/blob/master/Practice/JAVA/JMS/RocketMQ/RocketMQCluster/Dockerfile">Dockerfile</a> and <a href="https://github.com/benbai123/JSP_Servlet_Practice/blob/master/Practice/JAVA/JMS/RocketMQ/RocketMQCluster/README.md">README.md</a><br />
<br />
<span style="font-size: large;"><b>References</b></span><br />
<br />
<a href="https://docs.docker.com/v17.12/edge/engine/reference/run/">Docker run reference</a><br />
<br />
<a href="https://docs.docker.com/v17.12/edge/engine/reference/commandline/build/">docker build</a><br />
<br />benbai123http://www.blogger.com/profile/02710053250987444028noreply@blogger.com0tag:blogger.com,1999:blog-510594773915377610.post-78842288997488517302019-10-12T00:34:00.000-07:002019-10-12T01:02:41.645-07:00Connect to VirtualBox Guest Machine from Host OS with NAT Port Forwarding<br />
<span style="font-size: large;"><b>Motivation</b></span><br />
<br />
I want to connect to NameServers in Docker Containers,<br />
and the Docker installed on Ubuntu 18.04,<br />
and the Ubuntu 18.04 running in VirtualBox on my Windows Host OS,<br />
<br />
... so this is required.<br />
<div>
<br /></div>
<br />
<span style="font-size: large;"><b>Simple Notes</b></span><br />
<br />
Step 1: Right click on stopped (power off) machine, click "Settings..."<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-O_gAeXATgDM/XaGBhTK8S6I/AAAAAAAAAvM/T38IzL5AJGkJIap738VguuB50KWnkix5ACLcBGAsYHQ/s1600/001.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="716" data-original-width="718" height="319" src="https://1.bp.blogspot.com/-O_gAeXATgDM/XaGBhTK8S6I/AAAAAAAAAvM/T38IzL5AJGkJIap738VguuB50KWnkix5ACLcBGAsYHQ/s320/001.png" width="320" /></a></div>
<br />
<br />
Step 2: Click Network -> Advanced -> Port Forwarding<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-inZbyeCg-KU/XaGBmTynypI/AAAAAAAAAvQ/WbNfY6d6lQw1wsLsDsZxKtSuQdCm6LXGACLcBGAsYHQ/s1600/002.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="502" data-original-width="714" height="224" src="https://1.bp.blogspot.com/-inZbyeCg-KU/XaGBmTynypI/AAAAAAAAAvQ/WbNfY6d6lQw1wsLsDsZxKtSuQdCm6LXGACLcBGAsYHQ/s320/002.png" width="320" /></a></div>
<br />
<br />
Step 3: Click the add Sign, input Host Port and Guest Port, click OK<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-IMYDBKV-0uQ/XaGBsEV_5NI/AAAAAAAAAvU/cMe42w7qEV0WrF1OsUZWJKpToOQMMlnQgCLcBGAsYHQ/s1600/003.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="522" data-original-width="714" height="233" src="https://1.bp.blogspot.com/-IMYDBKV-0uQ/XaGBsEV_5NI/AAAAAAAAAvU/cMe42w7qEV0WrF1OsUZWJKpToOQMMlnQgCLcBGAsYHQ/s320/003.png" width="320" /></a></div>
<br />
<br />
Now the request to localhost:9487 will be forwarded to the Guest Machine<br />
<br />
<span style="font-size: large;"><b>Reference</b></span><br />
<br />
<a href="https://www.howtogeek.com/122641/how-to-forward-ports-to-a-virtual-machine-and-use-it-as-a-server/">How to Forward Ports to a Virtual Machine and Use It as a Server</a><br />
<br />benbai123http://www.blogger.com/profile/02710053250987444028noreply@blogger.com0tag:blogger.com,1999:blog-510594773915377610.post-38067723591708733762019-10-07T22:58:00.001-07:002019-10-07T22:59:28.493-07:00Install Docker on Ubuntu 18.04<br />
<span style="font-size: large;"><b>Motivation</b></span><br />
<br />
I want to try RocketMQ Cluster with Multi-NameServers/Brokers, but it seems change port of NameServer is not supported...<br />
<br />
So want to run 2 NameServers in 2 Docker Containers and bind to different ports for testing.<br />
<br />
<span style="font-size: large;"><b>Simple Note</b></span><br />
<br />
Install Docker on Ubuntu 18.04 running in VirtualBox<br />
<br />
<pre style="background-color: #222222; border: 1px dashed #999999; font-family: Arial; font-size: 14px; line-height: 16px; overflow: auto; padding: 5px; width: 100%;"><code style="word-wrap: normal;"><span style="color: #6fa8dc;"># Uninstall old versions</span>
sudo apt-get remove docker docker-engine docker.io containerd runc
<span style="color: #6fa8dc;"># SET UP THE REPOSITORY</span>
<span style="color: #6fa8dc;">## Update the apt package index</span>
sudo apt-get update
<span style="color: #6fa8dc;">## Install packages to allow apt to use a repository over HTTPS</span>
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common
<span style="color: #6fa8dc;">## Add Docker’s official GPG key</span>
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
<span style="color: #6fa8dc;">## Verify that you now have the key with the fingerprint 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88, by searching for the last 8 characters of the fingerprint.</span>
sudo apt-key fingerprint 0EBFCD88
<span style="color: #6fa8dc;">## Use the following command to set up the stable repository</span>
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
<span style="color: #6fa8dc;"># INSTALL DOCKER ENGINE - COMMUNITY</span>
<span style="color: #6fa8dc;">## Update the apt package index.</span>
sudo apt-get update
<span style="color: #6fa8dc;">## Install the latest version of Docker Engine - Community and containerd, or go to the next step to install a specific version:</span>
sudo apt-get install docker-ce docker-ce-cli containerd.io
<span style="color: #6fa8dc;">## Verify that Docker Engine - Community is installed correctly by running the hello-world image.</span>
sudo docker run hello-world
</code></pre>
<br />
<br />
<br />
<br />
<span style="font-size: large;"><b>Reference</b></span><br />
<br />
<a href="https://docs.docker.com/install/linux/docker-ce/ubuntu/">Get Docker Engine - Community for Ubuntu</a><br />
<br />
<a href="https://stackoverflow.com/a/52069233/1042731">RocketMQ not support modify nameServer port</a>benbai123http://www.blogger.com/profile/02710053250987444028noreply@blogger.com0tag:blogger.com,1999:blog-510594773915377610.post-88862395543321359392019-10-04T20:29:00.004-07:002019-10-14T19:09:01.226-07:00JAVA JMS: RocketMQ Getting Started<br />
<span style="font-size: large;"><b>Simple Notes</b></span><br />
<br />
1. Download NameServer and Broker<br />
Go to <a href="http://archive.apache.org/dist/rocketmq/">archive.apache.org</a><br />
Download release zip file<br />
(I choose 4.5.2/rocketmq-all-4.5.2-bin-release.zip)<br />
<br />
2. Extract it<br />
Assume I extract it to<br />
D:\things\Downloads\rocketmq\rocketmq-all-4.5.2-bin-release<br />
<br />
3. Start NameServer<br />
Open cmd, run commands below<br />
<pre style="background-color: #222222; border: 1px dashed #999999; font-family: Arial; font-size: 14px; line-height: 16px; overflow: auto; padding: 5px; width: 100%;"><code style="word-wrap: normal;"> cd D:\things\Downloads\rocketmq\rocketmq-all-4.5.2-bin-release\bin
D:
set JAVA_HOME=D:\things\programs\Java\jdk1.8.0_221
set ROCKETMQ_HOME=D:\things\Downloads\rocketmq\rocketmq-all-4.5.2-bin-release\
mqnamesrv.cmd -n localhost:9876</code></pre>
<br />
<br />
4. Start Broker<br />
Open cmd, run commands below<br />
<pre style="background-color: #222222; border: 1px dashed #999999; font-family: Arial; font-size: 14px; line-height: 16px; overflow: auto; padding: 5px; width: 100%;"><code style="word-wrap: normal;"> cd D:\things\Downloads\rocketmq\rocketmq-all-4.5.2-bin-release\bin
D:
set JAVA_HOME=D:\things\programs\Java\jdk1.8.0_221
set ROCKETMQ_HOME=D:\things\Downloads\rocketmq\rocketmq-all-4.5.2-bin-release\
mqbroker.cmd -n localhost:9876 autoCreateTopicEnable=true</code></pre>
<br />
<br />
5. Write Consumer and Producer for test<br />
<br />
<a href="https://github.com/benbai123/JSP_Servlet_Practice/blob/master/Practice/JAVA/JMS/RocketMQ/GettingStarted/src/com/blogspot/benbai123/rocketmq/gettingstarted/TestConsumer.java">TestConsumer.java</a> ; <a href="https://github.com/benbai123/JSP_Servlet_Practice/blob/master/Practice/JAVA/JMS/RocketMQ/GettingStarted/src/com/blogspot/benbai123/rocketmq/gettingstarted/TestProducer.java">TestProducer.java</a> ; and this is a maven project, so <a href="https://github.com/benbai123/JSP_Servlet_Practice/blob/master/Practice/JAVA/JMS/RocketMQ/GettingStarted/pom.xml">pom.xml</a><br />
Run TestConsumer and TestProducer, you will see something in the console.<br />
<br />
<b><span style="font-size: large;">References</span></b><br />
<br />
Quick Start<br />
<a href="https://rocketmq.apache.org/docs/quick-start/">https://rocketmq.apache.org/docs/quick-start/</a><br />
<br />
Simple Message Example<br />
<a href="https://rocketmq.apache.org/docs/simple-example/">https://rocketmq.apache.org/docs/simple-example/</a><br />
<div>
<br /></div>
benbai123http://www.blogger.com/profile/02710053250987444028noreply@blogger.com0tag:blogger.com,1999:blog-510594773915377610.post-63039839015178550202019-10-03T02:36:00.002-07:002019-10-03T02:36:55.793-07:00JAVA RSA Sign Data and Verify<br />
<span style="font-size: large;"><b>Simple Note</b></span><br />
<br />
Add Sign data by Signature with Private Key and verify data by Signature with Public Key<br />
<br />
<a href="https://github.com/benbai123/JSP_Servlet_Practice/blob/master/Practice/JAVA/Crypto/src/crypto/utils/RSAUtils.java">RSAUtils.java</a><br />
<br />
Also add Test Cases and Performance Testing<br />
<br />
<a href="https://github.com/benbai123/JSP_Servlet_Practice/blob/master/Practice/JAVA/Crypto/src/crypto/test/TestRSAUtils.java">TestRSAUtils.java</a><br />
<br />
<a href="https://github.com/benbai123/JSP_Servlet_Practice/blob/master/Practice/JAVA/Crypto/src/crypto/test/TestRSAPerformance.java">TestRSAPerformance.java</a><br />
<br />
and update the Performance Testing google sheet<br />
<br />
<a href="https://docs.google.com/spreadsheets/d/1QHR2Pi7Cb6CW1kFnQWancTVVXJUON47jNdYABYHFZp4/edit?usp=sharing">JAVA RSA Performance Testing</a><br />
<br />
<b><span style="font-size: large;">Reference</span></b><br />
<br />
Java Cryptography Architecture (JCA) Reference Guide<br />
Generating and Verifying a Signature Using Generated Keys<br />
<a href="https://docs.oracle.com/javase/8/docs/technotes/guides/security/crypto/CryptoSpec.html#SigEx">https://docs.oracle.com/javase/8/docs/technotes/guides/security/crypto/CryptoSpec.html#SigEx</a><br />
<br />
Java Doc of Signature<br />
<a href="https://docs.oracle.com/javase/7/docs/api/java/security/Signature.html">https://docs.oracle.com/javase/7/docs/api/java/security/Signature.html</a><br />
<br />benbai123http://www.blogger.com/profile/02710053250987444028noreply@blogger.com0tag:blogger.com,1999:blog-510594773915377610.post-28044020155344052212019-09-29T17:52:00.000-07:002019-09-29T17:52:03.673-07:00JAVA RSA Generate KeyPair, Encryption, Decryption and Performance Testing<br />
<span style="font-size: large;"><b>Motivation</b></span><br />
<br />
To try RSA Enc/Dec and check its performance.<br />
<br />
<span style="font-size: large;"><b>Simple Note</b></span><br />
<br />
Test file <a href="https://github.com/benbai123/JSP_Servlet_Practice/blob/master/Practice/JAVA/Crypto/src/crypto/test/TestRSAUtils.java">TestRSAUtils.java</a><br />
<br />
Implementation <a href="https://github.com/benbai123/JSP_Servlet_Practice/blob/master/Practice/JAVA/Crypto/src/crypto/utils/RSAUtils.java">RSAUtils.java</a><br />
<br />
Performance testing <a href="https://github.com/benbai123/JSP_Servlet_Practice/blob/master/Practice/JAVA/Crypto/src/crypto/test/TestRSAPerformance.java">TestRSAPerformance.java</a><br />
<br />
<b><span style="font-size: large;">Refactoring</span></b><br />
<br />
Move AESUtils.encrypt and AESUtils.decrypt to CryptoUtils since they are no different from RSA encrypt/decrypt.<br />
<br />
Still wrap them in AESUtils/RSAUtils for convenience.<br />
(Can import less class) (Just one class less)<br />
<br />
Hmm...<br />
<br />
<br />
<span style="font-size: large;"><b>Performance Testing</b></span><br />
<br />
Test over<br />
PublicKey/PrivateKey, Encryption/Decryption,<br />
Create Cipher each time/Reuse Cipher,<br />
Key Size 1024/2048/4096/8192 bits<br />
total 32 cases, 100 runs each<br />
<br />
Results listed in the google sheet<br />
<a href="https://docs.google.com/spreadsheets/d/1QHR2Pi7Cb6CW1kFnQWancTVVXJUON47jNdYABYHFZp4/edit?usp=sharing">JAVA RSA Performance Testing</a><br />
<br />
Not very accurate but...<br />
<br />
<span style="font-size: large;"><b>Summary</b></span><br />
<br />
1. PublicKey Enc/Dec is faster than PrivateKey Enc/Dec<br />
<br />
2. Key Size affects, the longer the slower.<br />
<br />
3. Reuse Cipher similar to create Cipher each time, sometimes even slower.<br />
<br />
<span style="font-size: large;"><b>Conclusions</b></span><br />
<br />
1. Use proper Key Size, 2048 probably a good choice.<br />
<br />
2. Can create Cipher each time, no need to cache it.<br />
<br />
3. Can also cache and reuse Cipher, will slightly increase performance in most cases.<br />
<br />
<span style="font-size: large;"><b>References</b></span><br />
<br />
<a href="https://stackoverflow.com/questions/34454531/java-how-can-i-generate-privatekey-from-a-string">Java: How can I generate PrivateKey from a string?</a><br />
<br />
<a href="https://stackoverflow.com/questions/11410770/load-rsa-public-key-from-file">Load RSA public key from file</a><br />
<br />benbai123http://www.blogger.com/profile/02710053250987444028noreply@blogger.com0tag:blogger.com,1999:blog-510594773915377610.post-73361218928219406902019-09-27T00:20:00.000-07:002019-09-29T18:18:29.947-07:00JAVA AES Performance Testing<br />
<span style="font-size: large;"><b>Motivation</b></span><br />
<br />
Want to know the better choice of coding.<br />
<br />
<span style="font-size: large;"><b>Simple Note</b></span><br />
<br />
Test functions in<br />
<a href="https://github.com/benbai123/JSP_Servlet_Practice/blob/master/Practice/JAVA/Crypto/src/crypto/test/TestAESPerformance.java">TestAESPerformance.java</a><br />
<br />
Also use a simple helper class for performance testing<br />
<a href="https://github.com/benbai123/JSP_Servlet_Practice/blob/master/Practice/JAVA/Crypto/src/crypto/test/helper/PerformanceTestHelper.java">PerformanceTestHelper.java</a><br />
<br />
<br />
<span style="font-size: large;"><b>Test Cases</b></span><br />
<br />
100 runs each<br />
<br />
1. testCreateInstanceEachTimeCommon: Simple AES with pre-generated key, no salt, create Cipher each time<br />
<br />
2. testReuseInstanceCommon: Simple AES with pre-generated key, no salt, reuse Cipher<br />
<br />
3. testCreateInstanceEachTimePBK: Use SecretKeyFactory and PBEKeySpec to generate SecretKey with PBKDF2WithHmacSHA256 algorithm, generate key and create Cipher each time<br />
<br />
4. testReuseInstancePBK: Use SecretKeyFactory and PBEKeySpec to generate SecretKey with PBKDF2WithHmacSHA256 algorithm, reuse Cipher<br />
<br />
<span style="font-size: large;"><b>Results</b></span><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://1.bp.blogspot.com/-ZJllY_JQf2M/XY21VLNI--I/AAAAAAAAAu4/yaA4vRULZzAoIzhlzhRJFVklAVo019dfwCLcBGAsYHQ/s1600/AESPerf.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="140" data-original-width="766" height="106" src="https://1.bp.blogspot.com/-ZJllY_JQf2M/XY21VLNI--I/AAAAAAAAAu4/yaA4vRULZzAoIzhlzhRJFVklAVo019dfwCLcBGAsYHQ/s640/AESPerf.png" width="580" /></a></div>
<br />
<br />
<span style="font-size: large;"><b>Summary</b></span><br />
<br />
1. Use pre-generated key is much faster<br />
(testCreateInstanceEachTimeCommon is much faster than testCreateInstanceEachTimePBK).<br />
<br />
2. Reuse Cipher is much faster.<br />
<br />
3. Once the Cipher is created, the speed of Encryption are similar between Common and PBK<br />
(the 90% time of testReuseInstancePBK even faster than testReuseInstanceCommon)<br />
<br />
<span style="font-size: large;"><b>Conclusion</b></span><br />
<br />
Do not create Cipher each time, try to reuse it.<br />
<br />
<span style="font-size: large;"><b>References</b></span><br />
<br />
Round double<br />
<a href="https://stackoverflow.com/questions/2808535/round-a-double-to-2-decimal-places">Round a double to 2 decimal places</a><br />
<br />
List Initial Size (need to get the fastest 90% so...)<br />
<a href="https://stackoverflow.com/questions/8896758/initial-size-for-the-arraylist">Initial size for the ArrayList</a><br />
<br />
<br />benbai123http://www.blogger.com/profile/02710053250987444028noreply@blogger.com0tag:blogger.com,1999:blog-510594773915377610.post-50036099130165458152019-09-26T01:13:00.002-07:002019-09-26T01:13:23.217-07:00JAVA AES Encrypt Decrypt with Any Key, IV and Salt<br />
<span style="font-size: large;"><b>Motivation</b></span><br />
<br />
Convenient, that's all<br />
<br />
<span style="font-size: large;"><b>Simple Note</b></span><br />
<br />
Test File:<br />
<a href="https://github.com/benbai123/JSP_Servlet_Practice/blob/master/Practice/JAVA/Crypto/src/crypto/test/TestAESImpl.java">TestAESImpl.java</a><br />
<br />
<br />
Implementation:<br />
<a href="https://github.com/benbai123/JSP_Servlet_Practice/blob/master/Practice/JAVA/Crypto/src/crypto/impl/AESImpl.java">AESImpl.java</a><br />
<br />
<br />
<span style="font-size: large;"><b>References</b></span><br />
<br />
Java MessageDigest supported algorithms? MD5, SHA-1, SHA-256<br />
<a href="https://docs.oracle.com/javase/8/docs/api/java/security/MessageDigest.html">Class MessageDigest</a><br />
<br />
How to Dupe a char array<br />
<a href="https://stackoverflow.com/questions/5821851/does-calling-clone-on-an-array-also-clone-its-contents">Does calling clone() on an array also clone its contents?</a><br />
<br />benbai123http://www.blogger.com/profile/02710053250987444028noreply@blogger.com0tag:blogger.com,1999:blog-510594773915377610.post-52748965242259211592019-09-25T20:24:00.000-07:002019-09-25T20:24:21.842-07:00JAVA AES Encryption Decryption with IV, Salt and any length of Key<br />
<span style="font-size: large;"><b>Simple Note</b></span><br />
<br />
See the method TestEncryptDecryptWithKeyIvSalt in <a href="https://github.com/benbai123/JSP_Servlet_Practice/blob/master/Practice/JAVA/Crypto/src/crypto/test/TestAESUtils.java">TestAESUtils.java</a><br />
<br />
and getCipher(int mode, char[] key, byte[] ivBytes, byte[] saltBytes) in <a href="https://github.com/benbai123/JSP_Servlet_Practice/blob/master/Practice/JAVA/Crypto/src/crypto/utils/AESUtils.java">AESUtils.java</a><br />
<br />
<span style="font-size: large;"><b>References</b></span><br />
<br />
<a href="https://stackoverflow.com/questions/992019/java-256-bit-aes-password-based-encryption">Java 256-bit AES Password-Based Encryption</a><br />
<br />
<br />
<a href="https://stackoverflow.com/questions/3451670/java-aes-and-using-my-own-key">Java AES and using my own Key</a><br />
<br />
<div>
<br /></div>
benbai123http://www.blogger.com/profile/02710053250987444028noreply@blogger.com0tag:blogger.com,1999:blog-510594773915377610.post-56324858402655988352019-09-25T02:55:00.000-07:002019-09-25T02:55:21.786-07:00Java AES Key Generation, Encryption and Decryption<br />
<span style="font-size: large;"><b>Simple Note</b></span><br />
<br />
Test File:<br />
<a href="https://github.com/benbai123/JSP_Servlet_Practice/blob/master/Practice/JAVA/Crypto/src/crypto/test/TestAESUtils.java">TestAESUtils.java</a><br />
<br />
Utils Implementation<br />
<a href="https://github.com/benbai123/JSP_Servlet_Practice/blob/master/Practice/JAVA/Crypto/src/crypto/utils/AESUtils.java">AESUtils.java</a><br />
<a href="https://github.com/benbai123/JSP_Servlet_Practice/blob/master/Practice/JAVA/Crypto/src/crypto/utils/CryptoUtils.java">CryptoUtils.java</a><br />
<br />
If you get Illegal key size error, probably need to download JCE Jars, please refer to<br />
<br />
<a href="https://stackoverflow.com/questions/3862800/invalidkeyexception-illegal-key-size">InvalidKeyException Illegal key size</a><br />
<br />
and<br />
<br />
<a href="https://stackoverflow.com/questions/6481627/java-security-illegal-key-size-or-default-parameters">Java Security: Illegal key size or default parameters?</a><br />
<br />
<br />
<span style="font-size: large;"><b>Other References</b></span><br />
<br />
The article teach me use char[] over String<br />
<a href="https://stackoverflow.com/questions/8881291/why-is-char-preferred-over-string-for-passwords">Why is char[] preferred over String for passwords?</a><br />
<br />
This one teach me basic Encryption and Decryption<br />
<a href="https://stackoverflow.com/questions/15554296/initial-bytes-incorrect-after-java-aes-cbc-decryption">Initial bytes incorrect after Java AES/CBC decryption</a><br />
<br />
How to convert between char[] and byte[]<br />
<a href="https://stackoverflow.com/a/9670279">Converting char[] to byte[]</a><br />
<div>
<br /></div>
benbai123http://www.blogger.com/profile/02710053250987444028noreply@blogger.com0tag:blogger.com,1999:blog-510594773915377610.post-84598455643280336742019-09-23T01:48:00.002-07:002019-09-23T01:48:47.363-07:00Use ExecutorService to Run Multiple Callable and Get Results In Order<span style="font-size: large;">Motivation</span><br />
<br />
ExecutorService can run multiple Runnable/Callable, but there is no method for get their Results / Exception in order<br />
(Similar to Promise.all in JavaScript)<br />
<br />
So try to build a simple solution.<br />
<br />
<span style="font-size: large;">Simple Note</span><br />
<br />
Test / Sample<br />
<a href="https://github.com/benbai123/JSP_Servlet_Practice/blob/master/Practice/JAVA/Concurrent/src/concurrent/ConcurrentParallel.java">ConcurrentParallel.java</a><br />
Implementation to Run Multiple Callable<br />
<a href="https://github.com/benbai123/JSP_Servlet_Practice/blob/master/Practice/JAVA/Concurrent/src/concurrent/ext/CallableParallelExecutor.java">CallableParallelExecutor.java</a><br />
Wrapper Class to wrap Callable<br />
<a href="https://github.com/benbai123/JSP_Servlet_Practice/blob/master/Practice/JAVA/Concurrent/src/concurrent/ext/CallableWrapper.java">CallableWrapper.java</a><br />
<br />
<br />
<br />benbai123http://www.blogger.com/profile/02710053250987444028noreply@blogger.com1tag:blogger.com,1999:blog-510594773915377610.post-20469352155931990782019-09-19T00:19:00.003-07:002019-09-19T10:24:26.191-07:00JAVA Thread Debounce and Throttle<br />
<span style="font-size: large;">Simple Note</span><br />
<br />
Most basic practice of Thread at <a href="https://github.com/benbai123/JSP_Servlet_Practice/blob/master/Practice/JAVA/Concurrent/src/basic/thread/MultiThread.java">MultiThread.java</a><br />
<br />
Implement, test Debounce and Throttle Thread at <a href="https://github.com/benbai123/JSP_Servlet_Practice/blob/master/Practice/JAVA/Concurrent/src/basic/thread/MultiThreadDebounceThrottle.java">MultiThreadDebounceThrottle.java</a>, <a href="https://github.com/benbai123/JSP_Servlet_Practice/blob/master/Practice/JAVA/Concurrent/src/basic/thread/utils/ThreadUtils.java">ThreadUtils.java</a><br />
<br />
<br />benbai123http://www.blogger.com/profile/02710053250987444028noreply@blogger.com0tag:blogger.com,1999:blog-510594773915377610.post-79562077515284057262016-03-15T02:04:00.006-07:002016-03-15T02:12:42.536-07:00Run a Simple App with Spark<b><span style="font-size: large;">Steps</span></b><br />
<br />
<b>1. Install sbt</b><br />
<br />
<pre class="brush: shell">#
echo "deb https://dl.bintray.com/sbt/debian /" | sudo tee -a /etc/apt/sources.list.d/sbt.list
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 642AC823
sudo apt-get update
# the line below could be failed, I tried it several times
sudo apt-get install sbt
</pre>
<br />
<br />
<b>2. Prepare a simple project</b><br />
<br />
as <a href="https://github.com/benbai123/Spark/tree/master/projects/SimplTesteApp">this one at my repo</a><br />
<br />
<b>3. Package the project</b><br />
<br />
<pre class="brush: shell">#
# go to the project folder, package it
# note it may failed several times
# saying cound not resolve dependency sbt 0.13.11
# for me it succeed after I viewed the error log and
# empty the error log file
# not sure whether this is a required step...
cd /home/benbai/Things/github/Spark/projects/SimplTesteApp
sbt package
</pre>
<br />
<br />
<b>4. run application by spark-submit</b><br />
<br />
It will display lots of spark log, if you want to turn off the info logged by Spark you can add <a href="https://github.com/benbai123/Spark/blob/master/conf/log4j.properties">this log4j.properties</a> into your SPARK_HOME/conf folder<br />
<br />
<pre class="brush: shell">#
$ YOUR_SPARK_HOME/bin/spark-submit \
--class "SimpleApp" \
--master local[4] \
target/scala-2.10/simple-project_2.10-1.0.jar
##
##
##
##
Lines with a: 58, Lines with b: 26
##
##
##
##
</pre>
<br />
<br />
<b><span style="font-size: large;">References</span></b>:<br />
<br />
<br />
<a href="http://www.scala-sbt.org/0.13/docs/Installing-sbt-on-Linux.html">Installing sbt on Linux</a><br />
<br />
<a href="http://spark.apache.org/docs/latest/quick-start.html">Spark Quick Start</a><br />
<br />
<br />benbai123http://www.blogger.com/profile/02710053250987444028noreply@blogger.com1tag:blogger.com,1999:blog-510594773915377610.post-44467611834914366392016-03-14T03:41:00.001-07:002016-03-14T03:42:36.887-07:00Install Spark 1.6.0 on Ubuntu 14.04<br />
<b><span style="font-size: large;">Environment</span></b>:<br />
<br />
Ubuntu 14.04 installed in VirtualBox<br />
<br />
<b><span style="font-size: large;">Steps</span></b>:<br />
<br />
1. <b>Install JDK 8</b><br />
<br />
<pre class="brush: shell">###
# install oracle jdk 8
###
sudo apt-get -y install python-software-properties
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get -y update
sudo apt-get -y install oracle-java8-installer
# find out the path of your Java installation:
sudo update-alternatives --config java
# for me it returns
# There is only one alternative in link group java (providing /usr/bin/java): /usr/lib/jvm/java-8-oracle/jre/bin/java
# edit /etc/environment
sudo gedit /etc/environment
# add this line into it, save and close
# JAVA_HOME="/usr/lib/jvm/java-8-oracle/jre/bin/java"
#
# then reload /etc/environment
source /etc/environment
</pre>
<br />
<br />
2. <b>Install scala 2.10</b><br />
<br />
download scala 2.10.6 from <a href="http://www.scala-lang.org/download/2.10.6.html">http://www.scala-lang.org/download/2.10.6.html</a><br />
<br />
extract it somewhere (I extract it to ~/Things/scala/scala-2.10.6)<br />
<br />
again edit /etc/environment<br />
<br />
add SCALA_HOME and PATH<br />
<br />
after this the /etc/environment as below<br />
<br />
<pre class="brush: shell">PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/benbai/Things/scala/scala-2.10.6/bin"
JAVA_HOME="/usr/lib/jvm/java-8-oracle/jre/bin/java"
SCALA_HOME="/home/benbai/Things/scala/scala-2.10.6"
</pre>
<br />
<br />
reload /etc/environment and check scala<br />
<br />
<pre class="brush: shell">source /etc/environment
scala -version
# for me it returns
# Scala code runner version 2.10.6 -- Copyright 2002-2013, LAMP/EPFL
</pre>
<br />
<br />
3. <b>Get Spark 1.6.0</b><br />
<br />
download spark from <a href="http://spark.apache.org/downloads.html">http://spark.apache.org/downloads.html</a><br />
<br />
I choose 1.6.0 pre-build for hadoop 2.6 and later<br />
<br />
extract it somewhere (I extract it to ~/Things/spark/spark-1.6.0-bin-hadoop2.6)<br />
<br />
go to spark directory and test it<br />
<br />
<pre class="brush: shell">cd ~/Things/spark/spark-1.6.0-bin-hadoop2.6
./bin/spark-shell
# then test some command
</pre>
<br />
<br />
Testing result:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://i.imgur.com/vAUxIu8.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://i.imgur.com/vAUxIu8.jpg" height="86" width="400" /></a></div>
<br />
<br />
<b><span style="font-size: large;">References</span></b>:<br />
<br />
<a href="https://www.digitalocean.com/community/tutorials/how-to-install-java-on-ubuntu-with-apt-get">How To Install Java on Ubuntu with Apt-Get</a><br />
<br />
<a href="http://www.scala-lang.org/download/2.10.6.html">Scala Download Page</a><br />
<br />
<a href="http://www.scala-lang.org/documentation/getting-started.html">Scala Getting Started</a><br />
<br />
<a href="http://spark.apache.org/docs/latest/quick-start.html">Spark Quick Start</a><br />
<br />benbai123http://www.blogger.com/profile/02710053250987444028noreply@blogger.com0tag:blogger.com,1999:blog-510594773915377610.post-8390637563754212932016-03-13T20:38:00.000-07:002016-03-13T20:38:36.827-07:00Front-End Interview Questions and Answers<br />
I have finished answering the <a href="https://github.com/h5bp/Front-end-Developer-Interview-Questions">Front-end-Developer-Interview-Questions</a>, please refer to <a href="https://github.com/benbai123/Front-end-Developer-Interview-Questions/tree/master/answer">the answers at my git repo</a>.<br />
<br />
In my opinion, not only for interview, they really contains useful information/knowledge for Front-End/Full-Stack developers.<br />
<br />
Hope this helps.benbai123http://www.blogger.com/profile/02710053250987444028noreply@blogger.com0tag:blogger.com,1999:blog-510594773915377610.post-55580913030498127172016-03-07T02:50:00.001-08:002016-03-07T03:04:50.669-08:00I've joined ZK Programmers Network at toptal dot com<br />
As title, I was a developer/consultant of ZK at <a href="https://www.zkoss.org/">zkoss.org</a> (2012 ~ 2015), I have joined <a href="https://www.toptal.com/zk">ZK Programmers Network</a> as a freelancer at <a href="https://www.toptal.com/">toptal.com</a>, hope I can help people who currently using ZK and make ZK more famous.<br />
<br />
Honestly, it is because I have so much free time with current job so need to find something to do, currently I am answering the <a href="https://github.com/benbai123/Front-end-Developer-Interview-Questions">Front-end-Developer-Interview-Questions</a> but almost done, so....<br />
<br />
I am able to help with customize ZK Components, build new components, build app/environment architecture, debug or performance tuning.<br />
<br />
Grab me if needed, I believe I can give you a powerful hand :Dbenbai123http://www.blogger.com/profile/02710053250987444028noreply@blogger.com0