RSS

Sheet Music Practice Setup

This weekend, I completed a mini-project that I planned for a while now. I wanted a setup where I could practice my guitar following sheet music and tabs while also recording and playing back what I played!

Here is what I strung together to make it all happen:

Picture of actual setup and key components used
  1. For practicing and recording vocals, I used iRig Mic HD, a high quality condenser microphone that plugs directly in to an iPad.
  2. Musicnotes.com iPad app that can play downloaded sheet music. I needed some lead time, before I could follow the guitar tabs. This was to allow sufficient time to start the playback. The in-built screen recording feature of iOS 12 is what I used. First ‘play’ in music notes while recording. Then replay the recording…easy!
  3. Behringer Xenyx 802 analog mixer is a low cost device with pro mic pres. It is a compact 8 channel mixer. I plug my monitor headphones here. In the illustration above, you would notice that I use both an iPad mini and iPad Pro. The iPad Pro is where I play the sheet music. The playback audio is routed to the mixer’s channels 3 & 4 for stereo using a Hosa CMP-159 3.5 mm TRS to Dual 1/4″ TS Stereo Breakout Cable from the iPad Pro. On the iPad mini, I run AmpliTube Acoustic app. I use a 3.5mm to 2-Male RCA Adapter cable to connect the iPad mini to the mixer’s 2-Track inputs.
  4. The Donner bluetooth page turner comes in handy when practicing parts of the scoresheet and you want to move between pages or scroll up-down inside the music notes app.
  5. Any microphone stand could be used in this type of setup. I want to call out the microphones stands from Bespeco. I found the Bespeco MS11 to be a stable and well crafted mic stand, and hence it is part of my gear.
  6. I use a Sennheiser HD-201 for monitoring both what I play on the acoustic guitar and the playback coming from the iPad Pro simultaneously through the mixer.
  7. I use a Coolnut 20000mAh power bank for long practice sessions. I wire both ipads to it to keep them charging during the breaks.
  8. Finally, the magic device that gets the audio in to AmpliTube Acoustic and that is iRig Acoustic – a MEMS microphone that can be placed at the base of the guitar’s soundhole.

The AmpliTube Acoustic iOS app is the central application for recording and playing back tracks. I use one track for recording vocals, and three others for rhythm, leads and bass riffs. This setup let’s me match the professional tempo and timing of the playbook through the Musicnotes.com iPad app.

For vocals, an external music player such as the Sony NWE395/B 16GB Walkman MP3 Player or any other could be used. Connect this to the mixer’s two-track input using a 3.5mm to 2-Male RCA Adapter cable – Then sing along. What’s captured is only your voice.

The setup above is meant to help with my practice sessions, be it sight reading and playing the guitar leads of music scoresheets or singing along vocal tracks. This would help me get better at my playing and vocal style through learning from the performance of professionals.

 
1 Comment

Posted by on January 27, 2019 in Music Production

 

Tags: , ,

Niko-Niko Retro Mashup

The scrum guide describes the retrospective event as an opportunity for the whole team to inspect and create a plan for improvements going forwards. There are several techniques available to conduct a retrospective. Depending on the goal of the retrospective, a technique could be chosen for facilitation. The book Agile Retrospectives by Ester Derby and Diana Larsen is an excellent source of information on retrospective techniques. Irrespective of the technique used, a good retrospective generally follows the structure below:

  • Set the Stage – Set the mindset of looking at issues without assigning blame.
  • Gather Data – Get the viewpoints of all members of the team so that you can create a shared picture of what is happening.
  • Generate Insights – Unpack the data and analyse or look for the root causes.
  • Decide what to do – Make sure the team decides together and prioritizes what is the most important thing for them to do.
  • Close – Appreciate peoples time and get feedback in terms of how to get better at retrospectives, both you as facilitator and the team.

Niko-Niko Retro Mashup is a new technique, that I created, that leverages the structure described above for facilitating a retrospective. The word Niko comes from Japanese and means “Smile” and Niko-Niko relates more with the word smiley. The Niko-Niko calendar is often used by agile teams to record the mood of every agile team member at the end of the sprint day. Mashing-up this technique along with retrospectives, gives birth to the Niko-Niko Retro Mashup 🙂

Here is simple illustration of the retrospective board to “Set the Stage” and “Gather Data” initially.  

Niko-Niko Retro board mashup
Niko-Niko Retro board mashup

Setting up the Board

  • Draw two lines on a clear whiteboard or on a large chart paper that divides it into 3 sections. The whole retrospective will progress with activities corresponding to the three sections starting from left to right.
  • At the top of each column of the board, affix or draw stick figure images. These are meant to provide some visual clue on what is expected as an activity for that column. The left most column should have a standing figure with a pose of someone who is thinking. The central column should have a figure of a person that is standing and observing. The final stick figure on the right most column should have a figure of a person that is starting to run or sprint.
  • The central column has some clouds drawn into them. I’ll explain how to use these shortly. The bottom most cloud should have the word “ETHER” written inside it.
  • The right most column has three additional figures. Starting from left to right, there is a sketch of an upright flower plant in a pot, which is at its prime. Healthy and full of life. The figure to the right of this pot, is another flower pot with a slightly drooping flower, but still standing. The rightmost sketch is of a flower that is past its prime and drooping down the side of the pot. I will explain what these mean and how to use them shortly.
  • Fill the remaining clouds with some aspect of the process you want the retro to be focussed on. Topics could be as diverse as managing technical debt, sprint planning 2 and the team’s first experiment with practicing Acceptance Test Driven Development (ATDD).

Facilitating the Retro

  • Gather the participants around in a semi-circle in front of the board.
  • Start with a quick warm up exercise. I usually ask the participants to all clap their hands as loudly as possible for 10 seconds. This sets up a positive mood and gets everyone ready and focussed!
  • As the main facilitator, explain to everyone that the retro will be divided into 3 stages corresponding to the three sections on the board and that we are all getting into stage 1 shortly.
  • Talk about the rules to be followed. It is recommended to write these on the board as well : (1) Only 2 post-its to be used per person for the main activity. (2) 1 emoticon to be drawn per post-it and (3) Place the post-it closest to the cloud you associate your emotion with.
  • In stage one, people are given 5 minutes to write into the left most column or place post-its related to their thoughts, specifically on the items written in the clouds in the central section. The cloud called “ETHER” is the wildcard and represents anything or everything.
  • Stage 2 is about associating the Niko-Niko post-its with the clouds. Each participant gets two post-its each. Using these, they could draw one of three emotions on it. Closer a post-it is placed to a particular cloud, stronger the emotion associated with it.
Niko-Niko emoticons
Niko-Niko emoticons
  • Allow 5 minutes to complete the activity. Then, as a team, start looking at the post-its and their affinities towards the clouds. Inquire with the team on patterns observed. Are there a lot of smileys against the cloud depicting technical debt? If so, invite participants to share why they feel so. Are there many sad face post-its against sprint planning part 2 topic. Again, invite participants to share. This activity usually gets everyone talking and some great insights could be gleaned from these.
  • Now comes the final part, Stage 3 – which is associated with the right most column. This activity is timed for 5 minutes duration.
  • What do those three flower pots depict? The first pot on the left represents whether the retro has resulted in identification of actions that could make the next sprint better. These actions often come out consciously or sub-consciously from the discussions that were part of Stage 2. The second flower pot represents that fact that some actions were understood, but there is still some ambiguity. The flower pot on the extreme right represents no actions having come out of the retro that could be used to improve the next sprint.
  • Using only 1 post-it per participant, these can be placed along with the Niko-Niko emoticon drawn on it, following the same rules, under one of the three flower pots.
  • The team now reflects where most of the post-its have been placed. Some discussions could take place. Finally close the retro once everyone gets a shared understanding of the actions for the next sprint. A lot of smileys under the pot with the drooping flower could mean that the team has reached “Nirvana” state and is comfortable that it can’t identify anything to improve with respect to the previous sprint. Teams that have been working together for many years enjoying many successes could be at this state.

Conclusion

A good retrospective is one that follows that 5 stages mentioned in this article. It is the open conversations and group decisions to embark on trying out improvement experiments that over time would make the team perform to higher levels.

Niko-Niko retrospective mashup is one more tool you could use as an agile coach or scrum master to help teams get the best out of themselves. Its simplicity makes it easy for anyone to participate in it. It could be conducted within 30 minutes and has the flexibility to be applied in various contexts, including training classes and workshops. It sets the team culture.

As Jeff Patton would say: “Read it, try it and share what works!”

 
Leave a comment

Posted by on December 10, 2018 in Agile

 

Tags: ,

My Home Studio Experiment

It is all coming slowly together. I recently got together some equipment to get a setup at home to record webcasts for my blog. There are potentially hundreds of configurations out there. This first iteration involves some basic items that I’d like to share in this post. I’m looking to refine the setup further. At the end, I’m sharing a little recording with all the elements in place, as a demo.

Background

I use the ePhotoInc 5′ x 7′ PHOTO COLLAPSIBLE CHROMAKEY GREEN BLUE BACKGROUND 2 in 1 Backdrop Panel that I got from Amazon. This screen has a flexible frame that stretches the fabric out and can be collapsed and stored in the bag that comes along with it.

Video

For recording HD video, I use the Panasonic HC-V180K Full HD Camcorder which is an easy to use camera. It has a touch enabled LCD screen that can be rotated 360 degrees. This comes in handy as a monitor when recording myself, as I can see what’s in the frame.

Audio

While the Panasonic camera has an excellent built in mic, I prefer to experiment with the Blue snowball ICE condenser microphone. Using a lightning to USB 3 camera adapter, I can hook up this microphone to my iPad Pro. I use GarageBand to record the audio, as I’m recording.

Putting it all together

After sending the audio from my ipad pro to iMac, I use LogicPro X to work on the file. The equalizer and compressor are what I use to fine tune the audio and then take it into Final Cut Pro. Here’s where the real fun begins. Final Cut Pro is the best I’ve come across for video editing. I knock off the original audio and add the one from the GarageBand recording – which is much clearer after working it with LogicPro X. Using the Keyer in Final Cut Pro, I swap the background with a nice video animation. Compressor gets the final video into the right format and compression levels of the output.

What’s next?

Tweaking around with audio capture, to improve the quality of the recording even better. Additionally, finding ways to light up my background screen more uniformly. Once I get this right to my satisfaction, will start a series of video casts on my blog around my favourite topics.

Demos

Here are a few pictures of the simple setup that I have. Also as promised at the beginning of this post, sharing a demo video I made leveraging the setup. Till next time. Bye!

 
Leave a comment

Posted by on February 22, 2018 in Music Production

 

Tags:

Setting up a connection pool on Apache Tomcat 7.x – Part 2

In my previous blog post, I walked through the steps in setting up a tomcat jdbc connection pool. I created a simple spring MVC application to consume the pool. On start up of tomcat, the pool gets created with 10 idle connections. This number can be changed by setting the maxIdle attribute of the Resource tag in server.xml. The minimum idle connections is 10, even if you set this attribute to a lower value.

After tomcat is started, I can view the idle connections in Oracle Enterprise Manager (OEM). I search sessions on Module = “JDBC Thin Client”. I get to see the 10 idle connections as shown below:

Oracle Enterprise Manager screen of connections

Oracle Enterprise Manager screen of connections

When I shutdown tomcat and re-query for sessions, I will see none – as seen below. The tomcat jdbc connection pool gets cleanly closed upon tomcat shutdown:

Connection pool shutdown

Oracle Enterprise Manager screen of connections

What happens if the oracle database instance becomes un-available after the pool has been setup and the application makes use of the connection pool? We could get a stack trace similar to the one below:


INFO: Initialization processed in 2636 ms
Jul 1, 2013 10:06:31 AM org.apache.naming.NamingContext lookup
WARNING: Unexpected exception resolving reference
java.sql.SQLRecoverableException: IO Error: The Network Adapter could not establish the connection
	at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:419)
	at oracle.jdbc.driver.PhysicalConnection.(PhysicalConnection.java:536)
	at oracle.jdbc.driver.T4CConnection.(T4CConnection.java:228)
	at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
	at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:521)
	at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:278)
	at org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:182)
	at org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:702)
	at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:634)
	at org.apache.tomcat.jdbc.pool.ConnectionPool.init(ConnectionPool.java:488)
	at org.apache.tomcat.jdbc.pool.ConnectionPool.(ConnectionPool.java:144)
	at org.apache.tomcat.jdbc.pool.DataSourceProxy.pCreatePool(DataSourceProxy.java:116)
	at org.apache.tomcat.jdbc.pool.DataSourceProxy.createPool(DataSourceProxy.java:103)
	at org.apache.tomcat.jdbc.pool.DataSourceFactory.createDataSource(DataSourceFactory.java:539)
	at org.apache.tomcat.jdbc.pool.DataSourceFactory.getObjectInstance(DataSourceFactory.java:237)
	at org.apache.naming.factory.ResourceFactory.getObjectInstance(ResourceFactory.java:143)
	at javax.naming.spi.NamingManager.getObjectInstance(NamingManager.java:304)
	at org.apache.naming.NamingContext.lookup(NamingContext.java:843)
	at org.apache.naming.NamingContext.lookup(NamingContext.java:154)
	at org.apache.naming.NamingContext.lookup(NamingContext.java:831)
	at org.apache.naming.NamingContext.lookup(NamingContext.java:168)
	at org.apache.catalina.core.NamingContextListener.addResource(NamingContextListener.java:1093)
	at org.apache.catalina.core.NamingContextListener.createNamingContext(NamingContextListener.java:672)
	at org.apache.catalina.core.NamingContextListener.lifecycleEvent(NamingContextListener.java:271)
	at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
	at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
	at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:724)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
	at org.apache.catalina.startup.Catalina.start(Catalina.java:684)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:322)
	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:456)

However, when the oracle database instance gets available, to restore the pool tomcat server needs to be bounced. This would trigger to pool creation and then the application is able to perform its functionality. I’ve included the source code of the HROnline application. It reads a list of employee records from the HR database that comes pre-installed with the Oracle virtual box database application. When connected, the list of employees would appear on the page:

Employee list

HR Online employee list

Click here to download the source code.

 
Leave a comment

Posted by on July 1, 2013 in Open Source

 

Tags: , , ,

Setting up a connection pool on Apache Tomcat 7.x – Part 1

TopologyRecently I installed Apache Tomcat 7.0.41 on my Macbook Pro having Mountain Lion OS X. I wanted to explore the setup of connection pool and its usage. Tomcat 7.x introduces the tomcat jdbc pool, which is recommended instead of DBCP and provides several advantages over DBCP.

I wanted to use the connections in the connection pool with a Spring MVC application that it turn fetched rows from a table of an Oracle 11g R2 appliance running through Virtual box.

In order to set up the connection pool, here is a set of steps:

  1. Stop tomcat -My tomcat installation is located at /Library/apache-tomcat-7.0.41. The environment variable CATALINA_HOME is set to this path. Stop Tomcat with the command:
    $CATALINA_HOME/bin/catalina.sh stop
  2. Download 11g Release 2 (11.2.0.2.0) ojdbc6.jar or whichever version of the jar matches your Oracle database version. Copy this jar to directory:
     $CATALINA_HOME/lib
  3. Place the database login credentials in $CATALINA_HOME/conf/catalina.properties. Some may argue that it isn’t a good practice to keep passwords in plain text like this. There are techniques available to encrypt the password and decrypt it later. However, there are other ways to secure this file – such as applying file permissions.
    # Datasource connection login details
    db.user=hr
    db.password=hr
  4. Add the tag for JNDI resource link in $CATALINA_HOME/conf/context.xml. The connection pool would be referenced later through JNDI. Refer to this link for more details on configuring JNDI for tomcat
    <ResourceLink global="jdbc/oralocal" name="jdbc/oralocal"
    type="javax.sql.DataSource" />
  5. Add the entry below in $CATALINA_HOME/conf/server.xml. It has to be placed within the GlobalNamingResources tags. In this case, I’m using the SID orcl which comes with the Oracle developer days virtual database appliance. Refer to Apache Tomcat JDBC pool for details on the attributes used. Steps 2 to 5 are all that is needed to setup the connection pool:
       <Resource auth="Container" 
            driverClassName="oracle.jdbc.driver.OracleDriver" 
            factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" 
            maxActive="20" maxIdle="10" maxWait="10000" 
            name="jdbc/oralocal" 
            password="${db.password}" 
            removeAbandoned="true" 
            removeAbandonedTimeout="90" 
            type="javax.sql.DataSource" 
            url="jdbc:oracle:thin:@localhost:1521:orcl" 
            username="${db.user}" 
            testOnBorrow="true"         
            jdbcInterceptors=
    "org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;
            org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer;
            org.apache.tomcat.jdbc.pool.interceptor.SlowQueryReport" 
            validationQuery="SELECT SYSDATE FROM DUAL"/>
  6. Start tomcat – Start tomcat with the command:
    $CATALINA_HOME/bin/catalina.sh start
  7. In order to consume the connections in the connection pool in my Spring MVC application, I put a bean referring to the JNDI data source in my Spring Application context file:
        <bean id="dbDataSource"
            autowire="byName">
            <property name="jndiName" value="java:comp/env/jdbc/oralocal" />
            <property name="resourceRef" value="true" />
            <property name="lookupOnStartup" value="true" />
    
  8. Finally, in web.xml of my application I declared the spring context loader listener and specified the path of the application context file. This loads the application context:
    <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/spring/applicationContext.xml</param-value>
    </context-param>
    <listener>
    <listener-class>
    org.springframework.web.context.ContextLoaderListener
    </listener-class>
    </listener>

In part II of this post, I shall dive deeper into the connection pool by creating a Spring MVC application and use the connection pool.

 
Leave a comment

Posted by on June 13, 2013 in Open Source

 

Tags: ,

The three pillars of personal effectiveness – a reading I liked…

At any given time you should be motivated through the feeling that what you are doing right now is the most important thing you can think of, that your mind is stress-less and fully focused and you know your effort will be valuable. – Troels Richter

I came across an interesting minibook on InfoQ site. According to the author Troels Richter in his mini book “The 3 Pillars of Personal Effectiveness”, to become more effective you should keep in mind the below three pillars:

  1. Importance
  2. Focus
  3. Value

Do go through the book. Here’s what I pulled out from all that in a nutshell:

Importance
Invest time to Think. Use non-linear thinking techniques such as Mind mapping to brainstorm all activities that you think are important to achieving the desired outcome. Once the important activities have been identified, we need to prioritize them. Often, it is useful to track all activities that you are currently performing. Although this requires discipline, it does help to weigh these against the identified important activities. Slowly it becomes clear which activities to swap for more important ones. While prioritizing, it makes sense to factor in your personal goals and visualize how these could be realized while performing the activities. As the prioritized activities also involve working up on your personal goals, pay special attention to respecting your prioritization over others need of your time. Prepare a plan to act on the important activities and resolve to maintain focus while doing so.

Focus
Use a tool/technique to help you focus, such as the Pomodoro technique . Re-define your success criteria to mean – accomplishment … as the maximization of daily focussed time. While learning to focus, it is important to also learn how to handle external interruptions as well as internal interruptions (procrastinations). One exercise to better understand procrastination, is to write down whatever it is that distracts you during focussed time whenever it occurs and continue working. Later you can try to find out the root cause of what caused the distraction. It makes good sense to take some time out to plan each day by thinking ahead of what needs to be accomplished for the day. Having an overall view of the workflow involved helps to ensure that the right activities are attended to.

Value
In the end what matters is the value added as a result of the effort you have expended. A technique called Personal Kanban helps to visualize your workflow. You can practice Kaizen to bring improvements to your workflow and Heijunka to optimize your workflow. The emphasis is on continuous analysis of the stages of work in progress. The work in progress has three minimal stages – Doing, Waiting and Evaluation. Doing stage activities works well when timed and focussed using the Pomodoro technique – thus working in small iterations with a sustainable pace. For Evaluation stage, for every task that’s completed, one should reflect on whether that task added value and whether any more tasks are needed to be done before that activity could be considered as DONE. The rationale for limiting work in progress is on following through on started activities rather than starting new work which goes on to build up the backlog of even more items that are work in progress. The “boxing in” of activities into stages helps to identify where you are adding value, where value is not being added, where time is being wasted and helps to understand where effort results in value addition. It also helps to perform Heijunka, thereby attempting to reach the optimal level of work items in each stage. Using a tool such as a Kanban board along with a mind map tool and pomodoro timer can help you to use your time more effectively and become personally more effective.

 
Leave a comment

Posted by on December 28, 2012 in Self Improvement

 

Tags: , , , , ,

Video Diary

After much deliberation, I’ve finally decided to start my very first blog. I’m really excited with my decision, here goes!!!

Last Saturday, I watched what is perhaps the best sci-fi movie of all time – AVATAR directed by James Cameron. It was exciting to me because it was the first 3-D movie I watched in a theater. I was quite impressed by the video log used by Sam Washington, the main actor. I decided to look for such a software for use with my Mac Book pro. After a brief search, I came across TheVideoDiary which is a really neat and simple piece of software to use.

Once TheVideoDiary is started, the UI appears. There’s a calendar displayed on the top left, a + button to add an entry and – button to delete an entry towards the bottom left. The rest of the UI is empty, until the + button is clicked. I recorded my first video without much difficulty. After the + button is clicked, a window pops up in the empty area. The built in camera of the MacBook pro lights up and I see myself on the screen. I just click the record button and start talking. Once I’m done, I click the keep button. That’s it. Instant video diary log for the day.

I have started regularly using TheVideoLibrary at the end of the day to quickly record my diary entries. No typing, no pen/paper…just plain video and audio. Great software!

 
1 Comment

Posted by on January 6, 2010 in Personal Technology