Blog

  • Co-Inventing Model with Gephi

    I was curious who my frequent co-inventors were, so I downloaded Gephi. I downloaded my patent data from Google Patents and built a fun little model from CSV data (similar to the attached).

    SOURCE WEIGHT TARGET
    Matthew E. Broomhall 121 PAUL Bastide
    Robert E. Loredo 119 PAUL Bastide
    Fang Lu 60 PAUL Bastide
    Alaa Abou Mahmoud 43 PAUL Bastide
    Lisa Seacat Deluca 23 PAUL Bastide
    Lydia M. Do 17 PAUL Bastide
    Dale M. Schultz 13 PAUL Bastide
    Andrew E. Davis 7 PAUL Bastide
    Ralph E. LeBlanc 7 PAUL Bastide
    Sean Callanan 7 PAUL Bastide
    Donna K. Byron 5 PAUL Bastide
    Sandra L. Kogan 5 PAUL Bastide
    Asima Silva 4 PAUL Bastide
    Aaron J. Quirk 3 PAUL Bastide
    Aaron M. Cohen 3 PAUL Bastide
    Daniel B. Harris 3 PAUL Bastide
    Eric S. Portner 3 PAUL Bastide
    John M. Boyer 3 PAUL Bastide
    Michael L. Taylor 3 PAUL Bastide
    Alexander Pikovsky 2 PAUL Bastide
    Corville O. Allen 2 PAUL Bastide
    Dana L. Price 2 PAUL Bastide
    Eric M. Wilcox 2 PAUL Bastide
    Jeffrey R. Hoy 2 PAUL Bastide
    John A. Jacobson 2 PAUL Bastide
    Kulvir S. Bhogal 2 PAUL Bastide
    Liam Harpur 2 PAUL Bastide
    Marco A. Vicente 2 PAUL Bastide
    Patrick J. O’Sullivan 2 PAUL Bastide
    Scott J. Martin 2 PAUL Bastide
    Shane M. Kilmon 2 PAUL Bastide
    Stephen Crawford 2 PAUL Bastide
    Thomas J. Evans IV 2 PAUL Bastide
    Vijay Francis 2 PAUL Bastide
    Weisong Wang 2 PAUL Bastide
    Adam L. Cutler 1 PAUL Bastide
    Amanda N. Savitzky 1 PAUL Bastide
    Andrew L. Schirmer 1 PAUL Bastide
    Arun Vishwanath 1 PAUL Bastide
    Bernadette A. Carter 1 PAUL Bastide
    Beth Anne M. Collopy 1 PAUL Bastide
    Beth L. Hoffman 1 PAUL Bastide
    Bradley W. Hurley 1 PAUL Bastide
    Brenton P. Chasse 1 PAUL Bastide
    Brian M. Walsh 1 PAUL Bastide
    Carl J. Kraenzel 1 PAUL Bastide
    Christopher W. Desforges 1 PAUL Bastide
    Damian E.A. Garcia 1 PAUL Bastide
    Dan DUMONT 1 PAUL Bastide
    Dwarikanath Mahapatra 1 PAUL Bastide
    Fred Raguillat 1 PAUL Bastide
    Isabell Kiral-Kornek 1 PAUL Bastide
    Jaime M. Stockton 1 PAUL Bastide
    James A. Hart 1 PAUL Bastide
    Jennifer L. Vargus 1 PAUL Bastide
    Jodi RAJANIEMI 1 PAUL Bastide
    Jose L. Lopez 1 PAUL Bastide
    Juliana M. Leong 1 PAUL Bastide
    Katherine M. Parsons 1 PAUL Bastide
    Kelley L. ANDERS 1 PAUL Bastide
    King Shing K. Lui 1 PAUL Bastide
    Leah A. Lawrence 1 PAUL Bastide
    Leho Nigul 1 PAUL Bastide
    Lei Wang 1 PAUL Bastide
    Lorelei M. McCollum 1 PAUL Bastide
    Margo L. Ezekiel 1 PAUL Bastide
    Mark Gargan 1 PAUL Bastide
    Mary E. Miller 1 PAUL Bastide
    Matthew Stephen Rosno 1 PAUL Bastide
    Melissa A. Lord 1 PAUL Bastide
    Michael G. Alexander 1 PAUL Bastide
    Na Pei 1 PAUL Bastide
    Neal Fishman 1 PAUL Bastide
    Pei Sun 1 PAUL Bastide
    Richard Gorzela 1 PAUL Bastide
    Richard T. Bassemir 1 PAUL Bastide
    Shelbee D. Smith-Eigenbrode 1 PAUL Bastide
    Shu Qiang Li 1 PAUL Bastide
    Shunguo Yan 1 PAUL Bastide
    Stacy M. Cannon 1 PAUL Bastide
    Stanley K. Jerrard-Dunne 1 PAUL Bastide
    Stefan von Cavallar 1 PAUL Bastide
    Susmita Saha 1 PAUL Bastide
    Tamer E. Abuelsaad 1 PAUL Bastide
    Thomas J. Evans 1 PAUL Bastide
    Trudy L. Hewitt 1 PAUL Bastide
    Xujin Liu 1 PAUL Bastide
    Ying Mo 1 PAUL Bastide
    PAUL Bastide 0 PAUL Bastide

     

    Coinventing Graphic
  • When a value doesn’t exist?

    Recently, I ran into an issue with a resource referece in an Urban Code Deploy (UCD) resource that did not yet exist. When the value, that doesn’t yet exist I found this a great tip (UCD Documentation).

    Change from ${p:resource/value-not-yet-populated} to ${p?:resource/value-not-yet-populated}

    UCD replaces the missing value with an empty string. It saved my sanity and ease of use.

  • CURL and LDAPS – How to Search and Debug

    I hit an issue where I needed to Search LDAP from a machine I didn’t have access to install new RPMs on. I found this cool article on CURL and LDAP Search. I had to make some minor modifications to get it to work with a secure connection (–insecure ldaps:// and 636). I also added -v to diagnosis some connection problems.

    curl "ldaps://127.0.0.1:636/DC=IBM.COM?cn,objectClass?sub?(objectClass=)" -u "cn=user1,ou=test_org3,o=dr,DC=IBM.COM" --insecure -v
    Enter host password for user 'cn=user1,ou=test_org3,o=dr,DC=IBM.COM':
    * Trying 127.0.0.1...
    * Connected to 127.0.0.1 (127.0.0.1) port 636 (#0)
    * LDAP local: LDAP Vendor = OpenLDAP ; LDAP Version = 20428
    * LDAP local: ldaps://127.0.0.1:636/DC=IBM.COM?cn,objectClass?sub?(objectClass=
    )
    * LDAP local: trying to establish encrypted connection
    DN: dc=ibm.com
    objectClass: domain
    objectClass: top

    DN: o=dr,dc=ibm.com
    objectClass: organization
    objectClass: top

    DN: ou=test_org3,o=dr,dc=ibm.com
    objectClass: organizationalunit
    objectClass: top

    You can then find the userids you need quickly. I left them off the output intentionally.

    If you see connected, but no results, I suggest changing to the top level of the ldap, and using this string – ldaps://127.0.0.1:636/DC=IBM.COM?cn,objectClass?sub?(objectClass=*)

  • Maven and Ant

    I have been working on a project with IIB (IBM Integration Bus). If you are like me, you want to automate all those pesky build tasks. In IIB, I needed to package and build my project (BAR).

    I investigated scripting the build using the mqsipackagebar command . I noticed at the bottom a description of using it with ANT.

    I’ve used ANT in a few projects (in combination with Maven). I took the script as a starting point, added the jar files and property files (based on configuring environments without IIB). I configured the maven-antrun-plugin in order to integrate within my parent project’s maven build.

    Here is some sample code for you, I hope it helps you all get started:

  • ODBC and ESQL

    To setup ODBC bridge from IBM Integration Bus to Db2, download and install the ODBC bridge from the IBM Data Server Runtime Clients. It’s a 1.3 GB download, and you only need about a 40 MB file for your system.

    The installation is straight forward – Click Next, and Finish.

    The complexity and detailed steps are in the configuration of the ODBC Bridge and IIB.

    To setup the ODBC bridge and IIB, follow these directions:

    1. Start > Run

    2. Type ODBC

    3. Click on Data Sources

    4. Click on `Configure ODBC

    5. Enter the Connection Details

    Name Value
    Username db2admin
    Password fakepass!
    IP 9.32.18.166
    Port 50000
    Database name SAMPLE
    1. Name the alias as SAMPLE

    2. Launch a Command prompt

    3. Start > Run

    4. Enter cmd

    5. Change directory to server\bin

    6. Launch iib

    C:\Program Files\IBM\IIB\10.0.0.4\server\ 
    bin>mqsisetdbparms.exe TESTNODE_cheetah -n SAMPLE -u db2admin -p fakepass!
    
            BIP8071I: Successful command completion. 
            TESTNODE_cheetah should be your local node in Eclipse. 
    

    You want to restart the Node (you can look in the lower right of your toolkit)

    1. Right Click the Node

    2. Select Stop, Then Start

    Now, that it is setup, the steps to read the data, the ESQL is easy:

    You can then send a message using the IIB tests , and confirm using your database Db2 select * from DB2ADMIN.EMPLOYEE.

    To Write Data, create a New Input Message with

    {
    "EMPNO" : "2229",
    "FIRSTNME" : "Paul",
    "LASTNAME" : "B",
    "JOB" : "PRES",
    "EDLEVEL" : 18
    }
    
  • OAuth 2.0 Flow – A Metaphor

    The following video helps explain the OAuth 2.0 Flow and authorization. This video was originally shared as part of a prior project on Social Application Development.

  • Swagger Enumerations in YAML

    Recently, I have been spending time looking at the Swagger 2.0 Specification.  There XML representation and Enumerations are tricky.  Here is an example of a Swagger Enumeration in YAML.

    You can test the YAML at http://petstore.swagger.io/#!/default/get_demo

  • Raspberry Pi – Part IV – Simple Wiring Test

    I am plugging away working with my Pi. I went back to the Ada Fruit Site, and started working on one of the tutorials from the part I purchased – https://www.adafruit.com/products/2125   I want to be able to demonstrate a simple wiring with my Pi works.

    I selected Email Notifier. I read through it, and realized I needed to convert it to work for the B+ model. The pi4j website has a nice diagram for the pins http://pi4j.com/images/j8header-b-plus-large.png and I simplified the test a bit.

    I launched the simple python file

    pi@seconds ~ $ sudo python testPi.py

    Pi with a Green Light - Using Python
    Pi with a Green Light – Using Python

    I added the pi4j dependency to my maven pom

    <dependency>
        <groupId>com.pi4j</groupId>
        <artifactId>pi4j-core</artifactId>
       <version>1.0</version>
    </dependency>

    I create a servlet which replicated the same code from before (GPIO).

    I copied the war file to the local webapp directory, and restarted jetty

    pi@seconds /opt/jetty/web/bbq/webapps $ sudo cp ~/pi.webapp.war ./
    pi@seconds /opt/jetty/web/bbq/webapps $ sudo chown jetty:jetty pi.webapp.war
    pi@seconds /opt/jetty/web/bbq/webapps $ sudo /etc/init.d/jetty restart

    Refer to https://wiki.eclipse.org/Jetty/Howto/Deploy_Web_Applications  and I did have to add –module=jsp to the start.ini for my web configuration.

    I hit the servlet – http://192.168.1.200/pi.webapp/Control?status=true

    Exception
    Exception

    Which makes sense, since “Software using the Pi4J library must be run with ROOT level permissions.” (actually it doesn’t since I am running as root)…

    Issues remain.  I’ll tackle them on a different day 🙂   … Part 5 …

  • Raspberry Pi – Part III – Setting up Jetty

    The Raspberry Pi is a device that has so many options open: You can extend the hardware. You can extend the software. I choose to tackle extending the software to start, so I can get the experience that I want setup, and running on the device.  The experience I am after is the web interface to control my Raspberry Pi.

    For a Java developer, I conclude that a lightweight interface hosted on a Jetty server is probably easiest.  The Jetty server is a 12.9M download and 30M expanded. It’s also used frequently in devices, and why reinvent the wheel, use the approach that Industry is using.  Jetty is designed for a small memory footprint.   (I did consider using Tomcat Embedded, and came to the conclusion I’d probably want to many features.)

    I downloaded the Jetty archive to my local user’s directory. Note, since I want to just use jetty.zip I’m renaming the output file with wget -O.

    wget -O jetty.zip http://download.eclipse.org/jetty/stable-9/dist/jetty-distribution-9.2.10.v20150310.zip

    I make a directory for the application server, and move over jetty.zip to that directory.

    sudo mkdir -p /opt/jetty
    sudo mv jetty.zip /opt/jetty

    Next I launched into the sudoers root shell, and extract the Jetty archive.  I decided to move it into the runtime folder, so I can have an easy place to backup from.  (Remove the extra space from the .zip)

    sudo -s 
    cd /opt/jetty
    unzip jetty.zip
    mv jetty-distribution-9.2.10.v20150310/ runtime
    rm jetty.zip

    Next, I wanted to setup Jetty as a service, and check that Jetty starts

    cp runtime/bin/jetty.sh /etc/init.d/jetty
    echo JETTY_HOME=`pwd`/runtime > /etc/default/jetty
    service jetty start
    Starting Jetty: . . . OK Sun Apr 12 15:38:40 UTC 2015
    service jetty stop
    Stopping Jetty: OK

    Next, I want to automatically start Jetty with the right runlevels

    update-rc.d jetty defaults

    I want to configure Jetty to run with a set user jetty.

    mkdir -p /opt/jetty/web/bbq
    mkdir -p /opt/jetty/temp
    useradd --user-group --shell /bin/false --home-dir /opt/jetty/temp jetty

    There is a base configuration that needs to be setup the base site.

    cd /opt/jetty/web/bbq
    java -jar /opt/jetty/runtime/start.jar --add-to-start=deploy,http,logging

    Next, edit the default port value.

    vi start.ini
    
    ## HTTP port to listen on
    jetty.port=80

    Finally, I wrap the configuration of the jetty service and app.

    chown -R jetty:jetty /opt/jetty
    echo "JETTY_HOME=/opt/jetty/runtime" > /etc/default/jetty
    echo "JETTY_BASE=/opt/jetty/web/bbq" >> /etc/default/jetty
    echo "TMPDIR=/opt/jetty/temp" >> /etc/default/jetty

    A good check is to look at service jetty status, and confirm the settings, and then restart your Raspberry Pi. I did find that the startup time was significantly effected by the additional service.  ( +25 seconds from the original 15)

    Navigate to http://192.168.1.200/ (or whatever IP you have used) and confirm the page loads Jetty.  If you see a 404, you’re off and ready for the next phase. (as am I) 🙂

    Jetty Starting Point
    Jetty Starting Point

  • Configure WLAN0 on Raspberry Pi

    I  don’t know how I did it.  I lost wireless connectivity, so I was forced to plugin my Raspberry Pi to the Lan.  Once, plugged in I could find it via the DHCP table on my router.

    I first checked the iwlist wlan0 scan to see if my home network was listed.  The home network was listed.  It was.

    I checked the wpa_supplicant configuration ~ $ sudo vi /etc/wpa_supplicant/wpa_supplicant.conf  and confirmed it pointed to the right network. I also checked dmesg to see if there were any hints for wpa_supplicant.

    I looked at the /etc/network/interfaces and found

    iface wlan0 inet manual

    which I converted to

    iface wlan0 inet dhcp

     Also wpa-debug-level 3 was very helpful and must proceed the wpa-roam statement in the interfaces.

    Also running the wpa_supplicant command can result in some good details

    pi@seconds ~ $ sudo wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf

    I also found this link helpful. https://wiki.debian.org/WiFi/HowToUse It showed how to reset manual to dhcp in the /etc/network/interfaces file

    Finally, I used http://weworkweplay.com/play/automatically-connect-a-raspberry-pi-to-a-wifi-network/ to finally review, and finally I broke down and set a static ip. Not sure why it won’t automatically take a dhcp configuration.