Summer of 2019 - trip to the City of the Big Shoulders



The summer of 2019 was right there and my family didn’t have any plan yet. We didn’t want it to slip just like that without doing any fun stuff or visiting any fun place. By the end of July, we finally came up with a grand idea of visiting the funniest city in America, the city of the Big Shoulders, the Chicago. My research located an article published in 2014 in chicagotribune.com that cited a study by the University of Colorado at Boulder which ranked Chicago as America’s funniest city. (Here is the link to the Article).On top of that my nephew and his wife lived there and invited us. He told us, "Chicago boasts the iconic architecture, littered across the skyline, reflecting in the glistening Lake Michigan. Tourists from all around the world come to take a glimpse of this wondrous metropolis and enjoy the Chicago Blues." We thought, Awesome. It's an opportunity of summer time :).So, finally, by the end of July, we decided to visit Chicago, the Windy city for a week, and have fun. Question remained - fly or drive? We decided to drive from Toronto, Canada to Chicago, USA and have a fun-filled family road trip. Why drive? well! because it provided an opportunity for the entire family to talk and laugh, and bond while consuming the alarming amounts of chips purchased from the nearest convenience store. Road trip is fun, but it also requires waking up before the crack of dawn, which I only seem to enjoy out of my family members. Anyways, I was able to convince my children to wake up at 5:00 AM, because I reminded them about the famous Chicago Pizza, and they were ready to hit the road early morning. You might ask “why is it necessary to wake up that early”? Well, our trip involved crossing the busy Canada-USA border and it would become the the trail to the hell if we were late.



Chicago, glistering in night light, Buckingham Fountain in Grant Park 

We were on our way. Google Map showed estimated driving duration around 8 hours and 20 minutes. But, we knew that trips were full of surprises and additionally, we needed some extra hours to relax on road side eatery or the border crossing, or the Immigration etc.
And as guessed, it took us almost 12 hours to make the trip. We reached Chicago around 6:00 PM, just in time to catch the rush hour climax. 
That evening we were all pretty tired. Actually I didn't quite understand why my kids were tired? They were basically talking, laughing, sight-seeing while crunching the chips or sleeping the whole way!

Little bit of tiredness because of drive fatigue did not stop us venturing out that evening. After dinner, we walked along the Chicago’s scenic Lakefront Trail that followed the Lake Michigan shoreline. We're amazed how Chicago was able to keep Lake Michigan clean and tidy. For being one of the largest cities in the U.S, it was surprisingly in great condition. Lake Michigan really did frame the city, giving it dimension that other cities lack. The lakeshore trail was an amazing place to take an evening stroll. The city's skyline was basked in a fuchsia glow, and the skies pink ombre was the perfect background for the windy city. The lake complimented the setting sky beautifully by reflecting the vibrant hues on the rolling waves. One evening was obviously not enough to walk the entire Lakefront Trail (around 29.77 km), we only walked from the Shedd aquarium to the Buckingham Fountain in Grant Park.



A glimpse of Lakefront trail and City of Chicago

Day two:
We decided to hit the popular spots in the city. The first destination was the world famous Shedd Aquarium.


Outside view of the JOHN G. SHEDD AQUARIUM IN CHICAGO

The next stop was the “bean” or the cloud gate, a true masterpiece, in Grant Park . It was crowded, because of being a very popular tourist spot. We also enjoyed walking around the gardens and soaked our feet in the basins. We found the garden a quiet environment, in contrast to the bustling city that surrounded it.



Cloud Gate, the Bean at Millennium Park in Chicago

The final spot for the evening was the most anticipated one - The Willis Tower (formerly known as the Sears Tower ), the tallest building in Chicago and the 2nd tallest in America. We decided to go in the evening to catch the sunset and a glimpse of the transitional sun. It was very crowded, but the view from above was worth the wait.
Note: The skydeck is one of the main attraction of the Willis Tower, which is is like a glass box that sticks-out of the building.
It truly was mesmerizing to see the busy streets below our own feet, however, the time allowed on the glass floor was very limited, no more than 30 seconds. I felt that wasn't enough time to grasp the beauty of the city from 100 floors above. The time was just good enough to get some quick pictures. We still enjoyed the view from the large windows that surrounded the building. Through them, we were able to see how the city came to life in the night.


Night view of Chicago From Willis Tower 
View of Chicago before dusk

Day 3:
Our 3rd day in Chicago was actioned packed and filled with adventure. The first stop was the Adler Planetarium, located right next to the shore. The planetarium was a great learning experience and made us appreciate our universe. We also watched two shows there. One was about the solar system and the other was about stargazing. We also found that it was a great place to sit and gaze at the lake with the skyline in the background and to take pictures.
Next stop was Navy Pier. How could one visit Chicago , and not stop by the Navy Pier? As soon as we stepped onto the Pier, I were overcome with some sort of emotion. The emotion of hunger. So we stopped to eat lunch at Giordano’s for Chicago’s famous deep dish pizza. It was delicious.
The next stop for us was an architecture cruise. We really enjoyed watching each uniquely designed skyscrapers with own history and inspiration while cruising for 75 minutes. The tour guide was very knowledgeable and didn't miss any bit of information and even inserted some Chicago style jokes in between.


 
River Cruise - ultimate Chicago architecture experience. 

In the evening, we came back to the Navy Pier. Surrounded by Lake Michigan , the Pier was a great place to spend the evening, we found the atmosphere very up-lifting. We went on the Centennial wheel, and Chicago became ten times more breathtaking. The view provided us a new perspective of the city. My kids also had few other rides while I was wondering around.


The Centennial Wheel at Navy Pier - a signature attraction in Chicago. 

Day 4:
We woke up bright and early and headed towards Wisconsin. We were planning for three hours drive, it took more like 4 hours for us, because we took a little detour on the way. Instead of taking the highway, we took lovely country roads. Once we got to Wisconsin, our first stop was The House on the Rock, designed by architect Aex Jordan Jr. No suitable words to describe it, I'd simply say a piece of heaven on earth - just wonderful, unique, and so expertly made.
Note: I am not be able to show any inside artifacts of this place in the picture. Here is one (taken outside) that provides a quick glimpse of this magnificent place. But pictures don't do this place justice. You have to see it with your own eyes. You can really see Mr. Jordan’s passion integrated into his designs. I can go on and on about his intelligence and the years of work that have been put into this project, but the only way to fully experience it, is to see it yourself.


An outdoor glimpse of The House On The Rock

That night we stayed at the Ramada hotel located in the city of Wisconsin Dells. We found that the hotel was well maintained and service was fine. They also provided us the pass to Noah's waterpark as part of the deal.

Day 5:
We went to America’s largest waterpark, the Noah’s Ark Waterpark and we had a blast, a good one. What a great place it was for the whole family with over 80 family activities like The Scorpion’s Tail, Black Anaconda, Tadpole Bay Kiddie Play Area and Noah's 4-D Dive-In Theater. In 2018, they also brought "Raja - The World's Largest King Cobra" waterslide, into operation.
Note:
The city of Wisconsin Dells has number of theme parks and entertainment centers including Noah's Ark Water Park, and Mt. Olympus Water and Theme Park and others.

 
 


Few Pictures taken while driving through the Wisconsin Dells. 

The same night we drove back to Chicago. It was 2 AM when we arrived back to my nephew's apartment.

Day 6:
We decided to take complete rest and just enjoy each other's company. We also had a family visitor. Later in the afternoon I went outside with my nephew to go around the neighbourhood and guess what I saw there? The Chicago White Sox's Guaranteed Rate Field. I wished I had chance to go see the game.


Guaranteed Rate Field located in the South Side of Chicago, home ballpark for Chicago White Sox.


Day 7:
7th Day was a shopping day. We spent some time shopping in and around Water Tower place in Chicago. Later in the afternoon, we decided to go to nearby waterfront beach. To our surprise, the water was clean. Amazing to see the long sandy beaches with number of activities right in the middle of the city. I Enjoyed some swimming and sitting on the beach and have small family picnic. There were lots of snack/food options as well as bike rentals.



 
A glimpse of a beach and view from Waterfront lake. 
Day 7:
We didn't want to drive home just yet, but we had to. We woke up at around 5 AM, said thank you and good bye and headed home to Canada. Spent another 12 hours for estimated 8 hours of drive but we fully enjoyed it.

Hope this blog helps you to plan your next trip to Chicago and enjoy to its fullest. See you next time.


Happy 18th Birthday My Princess!



On the special occasion of my elder daughter's 18th Birthday!


Below is a textual form

Dear Princess 
and respected young Ladies (by the way, you girls look stunningly beautiful this evening.) 

    Thank you for coming here today and be part of this important event. 
    Oh sorry, I forgot to formally introduce myself. I'm the father of the princess, but I'm still trying to  figure out my own title. The princes is not helpful, because she sometimes calls me 'bro' or a 'man' or even "queen!". So, I'm having difficult time. Please somebody help! 
     Okay, enough about me. It's her day. She's the princess - a fine young lady, very kind hearted, funny (obviously, when she's not mad) and genuinely smart. Yes, baby, we (I meant your mom, sister, and I) are really proud of you. Being your father has been the most meaningful achievement of my life and I constantly see my success through you.  
     When you were small, I used to carry you around on my arms and shoulders, which I may not be able to do anymore (because I stopped going to gym - because of coronavirus lockdown), but I'll always carry you on my heart. 
     Looks like aeroplanes do not fly these days (because the covid-19 pandemic has closed the borders), However, the time still flies. I thought, it was just yesterday, you were a little girl - playing dress up, or hide and seek with your younger sister and today, look at you, you're eighteen, an independent (you can at least drive now, right?) and going to university, ready to fly away. I'm little sad (sorry, I'm little bit selfish, sometimes I wished you were still little), but no worries, I'm mostly happy and grateful to have a daughter like you. Happy birthday my princess! May you forever shine like the star (the one - remember twinkle twinkle little star...?) 
     I still remember, how sad you're when you couldn't make to ICDC1 last year. This year were able to make it but could not go because of Covid-19. It's the way the life is. There will be so many more highs and lows in life, but stay the course. As long as you have the dream and the goal, one day you will achieve it no matter what - one way or the other. Always be optimistic, always be happy. Happy birthday my little star!!
     As we all know, great friends are the most important part of any body's life, and you are lucky, you are surrounded by them. Thank you you young ladies, we really appreciate your presence here today. Just relax, and enjoy the evening. Russians say 'Tanchui poka molodoi"- meaning "dance while you are still young", (because when you are old and break your bone while dancing, it's very hard to patch). 
     Finally, I'd like to repeat that we are really proud of not for only your accomplishments but for the person who you truly are becoming. We love you baby and God bless you. Happy 18th birthday!!! 

Lots of Love,
Dad

--------------------------------------------------------------------------------------------------------------------------------
Sharing here so that it remains eternal forever. 

Notes:
1 - ICDC - International Career Development Conference

SonarQube issue - Could not find branches



SonarQube allows branch level (for example, if you are using Git, you may want to scan your feature branch and fix identified issues before creating a Pull/Merge Request to the develop branch) analysis. In order to do branch level analysis, you need to specify your branch using SonarQube parameter 'sonar.branch.name' and optionally 'sonar.branch.target' (the name of the branch into which the temporary branch specified with 'sonar.branch.name' will be merged.
However, if SonarQube project does not exist for the given source code repository yet and you are scanning your source code repository for the first time and you specified your branch name using 'sonar.branch.name', you'll get the following error:
[ERROR] Failed to execute goal org.sonarsource.scanner.maven:sonar-maven-plugin:3.6.0.1398:sonar (default-cli) on project web-mywebapps: Could not find branches. A regular analysis is required before creating branches. -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:

As you can see from the error message, it says "...could not find branches. A regular analysis is required...". So, for the first scan whatever branch you are scanning, do not use parameter 'sonar.branch.name' One way to tackle this issue is to write some conditional logic in your SonarQube job. Below is a kind of a pseudo code example. Here the -Dsonar.branch.name property and value is passed to Maven goal only if the variable 'FIRST_TIME_BUILD' is false.
Note: 'FIRST_TIME_BUILD' is not a SonarQube built in variable, I've used it as an example to specify the condition.

<goals>clean install sonar:sonar -Dsonar.host.url=\$SONAR_HOST_URL <% if(!FIRST_BASELINE_BUILD) {%> -Dsonar.branch.name=<%= sonarBranchName%> <%}%> -Dorg.xml.sax.driver=com.sun.org.apache.xerces.internal.parsers.SAXParser -U</goals>

Hope it helps. For details on SonarQube branch analysis, visit https://docs.sonarqube.org/latest/branches/overview/

My First C.N. Tower Climb for United Way

Thank you All who supported me to raise funds for United Way. With your support and contribution, I was able to raise $331 and proudly climbed the CN Tower’s 1,776 steps yesterday. As per United Way, "all funds raised for the 2015 CN Tower Climb for United Way go directly toward the work of United Way Toronto & York Region, supporting a network of roughly 240 agencies across the region. Your time, efforts and generosity are moving people from poverty to possibility, building strong communities, and helping kids be all that they can be. Together, we are creating opportunities for a better life for everyone in our region." 
My wife and I climbed together and it took us 34 minute and 19 seconds. We raised $531  (combined total) together. Below is my T-shirt generously given by United Way!


Winter Festival of Lights in Dufferin Islands

Some beautiful pictures I captured while visiting "Winter Festival of Lights" in around Dufferin Islands (Niagara Falls, Ontario, Canada) on January 23, 2016. If interested see more pictures from official site http://www.wfol.com/the-lights/dufferin-islands






My First 10K Run

   Today, I was one of the runners participating in 10 KM race at beautiful Tommy Thompson Park, Toronto (http://www.tommythompsonpark.ca/) organised by MEC Toronto. The weather was fantastic around 22℃ and I fully enjoyed the race. My wife and two daughters were there from early morning to support and cheer for me. It was the first race in my life, so I was little nervous as well as thrilled and I completed the 10 KM distance in 58 minute 22 seconds. Not bad for me :)






Jenkins Job Chain and How to Resolve Issue with Parameter Passing

You can trigger a dependent (or other) job in Jenkins automatically from your current job. This way you can have multi-step builds or job chain. One of the use case scenarios for this is - let's say you have a parent build that creates a EAR file which relies on the successful completion of the child build(s) which creates some jar files.
In some situation, you also need to pass the parameters and their values while triggering the other build. But what to do, if you pass the parameter when triggering a job, but the parameter is not available in the triggered job?

Here we will examine the these situations and possible resolutions:

1) Triggering the other job without passing the parameter(s):

If you don't need to pass the parameters, then it's easy. You can just use either the <<Build Other Projects>> as a  Post Build Action for your current job or <<Build after other projects are built>> as a Build Triggers for the other job.

Let's say, if I have a build job called  <<build_jars_no_param>>, it compiles source code and creates bunch of Jars files, which will be used by a EAR file created by <<build_ear>> job. So, as soon as the <<build_jars_no_param>> job is completed, I want <<build_ear>> job is kicked off.
In this case, I just need to define following in the Post Build Action of <<build_jars_no_param>> job as follows:
Post Build Action - Build Other Projects

This triggers the <<build_ear>> job once the <<build_jars_no_param>> job is successfully completed. Multiple projects can be specified delimited by comma in the "Projects to build" input field.
Other than building the other projects that have a dependency on the current project, this can also be used to split a long build process into multiple jobs.

2) Triggering the other job with parameter(s) and their value(s)

If you need to pass the parameters along with triggering the other job, you can use Parameterized Trigger Plugin (https://wiki.jenkins.io/display/JENKINS/Parameterized+Trigger+Plugin) and this can be used both as a Pre Steps or as a Post Steps. This call also provides option to block the current job until the completion of the triggered builds.  

However, there is a security related catch with the use of Parameterized Trigger Plugin. This is one of the Plugins affected by fix for SECURITY-170/CVE-2016-3721. After this fix, Jenkins only allows build parameters that have been explicitly defined in a job's configuration. Any other arbitrary parameters added to a build by plugins will not be available by default.
So, your triggered job (with parameters passing), which might have worked in the prior version (the fix was first included in Jenkins versions 1.651.2 and Jenkins 2.3) is not working in the newer version of Jenkins. 
Here are three ways to resolve:
  1. Work-around #1: restore the previous behavior by setting the system property:
    -Dhudson.model.ParametersAction.keepUndefinedParameters=true
    Example: java -Dhudson.model.ParametersAction.keepUndefinedParameters=true -jar jenkins.war
    This could be a security risk, so use it just as a short-term workaround only.

  2. Work-around #2: white-list parameters by setting system property
    -Dhudson.model.ParametersAction.safeParameters=<comma-separated list of safe parameter names>
    Example: java -Dhudson.model.ParametersAction.safeParameters=FOO,BAR,ref_release_number -jar jenkins.war

  3. Convert/define the other job (the job to be triggered from your current job) with parameters using option "This project is parameterized" in the General section of the job definition. 
From the security point of view, the 3rd option is the preferred option. However, if you have legacy jobs and looking for short term work-around before (re) defining a triggered jobs to be a parameterized projects, you can use option #1 or #2. Option #2 is better than #1, because option #1, just blindly restores the previous behavior.   

Let's look through an example:
1) I've a project  called <<build_ear>> which calls <<build_jars_with_params>> job. Below diagram shows the Pre Steps setting of <<build_ear>> project, and as you can see it defines parameter ref_release_number=2.1.0.${BUILD_NUMBER} to be passed to the triggered job.

Pre Steps - defining a job to be triggered from this project.

On the other hand, here is how I'm testing the the value of the passed parameters in the <<build_jars_with_params>> downstream/triggered project.
Triggered job - testing the passed parameter. 


I'm using Jenkins ver. 2.150.1, which means it includes the fix for SECURITY-170, and I don't see the value of the passed parameter. 

Passed parameter is not available in downstream job

Now, let me use the above mentioned resolution options:

1st option (work-around), I'll have to start the Jenkins with '-Dhudson.model.ParametersAction.keepUndefinedParameters=true'option:


And here, the triggered job, shows the value of ${ref_release_number}

Passed parameter (from upstream job) is available in triggered job.

Use 2nd option. Here I'm starting Jenkins with '-Dhudson.model.ParametersAction.safeParameters=ref_release_number' system property so that 'ref_release_number' is considered as a safe parameter.
Define all parameters to be passed to triggered job as safe parameters using system property.

And here, the triggered job, shows the value of ${ref_release_number}
Passed parameter (from upstream job) is available in triggered job.


Now, here is how to use the 3rd (preferred) option. For this, I have to redefine the <<build_jars_with_params>> as a parameterized project and add 'ref_release_number' as an input parameter.

Define triggered job as a parameterized project.

When my triggered (downstream) job is defined as a parameterized project and I define the parameter 'ref_release_number' here, my upstream job can safely pass this parameter when triggering this job and Jenkins will allow it, no more work-around.
So, here I'm starting Jenkins without any system properties:


And my triggered job still correctly displays the value of the paramter passed from upstream job:


You may be interested reading the following Jenkins related blog:
How to Retrieve Info Using Jenkins Remote Access API
Jenkins Pipeline - Few Troubleshooting Tips