2012-09-16

2012-09-16 Sunday - NVIDIA’s CUDA programming framework


"CUDA™ is a parallel computing platform and programming model invented by NVIDIA. It enables dramatic increases in computing performance by harnessing the power of the graphics processing unit (GPU)."

CUDA Home

CUDA Developer Zone

CUDA Toolkit

CUDA downloads

CUDA documentation
CUDA training & education


NVIDIA NSIGHT Visual Studio Edition

NVIDIA NSIGHT Eclipse Edition

CUDA Language Solutions

Python: PyCUDA

CUDA Libraries:

2012-09-16 Sunday - One Week Until Strange Loop 2012

Next weekend I'm heading to St. Louis for the Strange Loop 2012 conference September 23-25. 

The conference feed on Twitter: @strangeloop_stl

In particular, there are two workshops I signed-up for on Sunday
the 23rd that look very interesting:

https://thestrangeloop.com/sessions/concurrent-programming-using-the-disruptor 
 
The Disruptor is an open source concurrent programming framework developed by LMAX Exchange, a financial exchange based in London.
The most interesting thing about it is how the Disruptor has promoted discussions about approaches to writing high performance code, and shown that Java is a serious contender in this space.

Contrary to the current trend of hiding multi-threaded concerns behind languages or frameworks, the Disruptor provides a way to do quite the opposite – to enable developers to think  about how to parallelise their architecture in a straightforward and easy to code fashion. In this workshop, Trisha Gee from LMAX Exchange will show examples of how to use the  Disruptor to share data between threads, and walk you through how to create your own application using the Disruptor.
 
https://thestrangeloop.com/sessions/gpu-programming-crash-course 
 
This course is for developers who want to learn how to program and utilize the parallel computing power of the Graphics Processing Unit (GPU) using NVIDIA’s CUDA programming framework  and, time permitting, OpenCL (although the many of the basic concepts are very similar).

The course will start by introducing the concepts of general purpose GPU programming and go into the process of installing and setting up the development environment on the 3 OS’s  that support CUDA. We will also talk about the different language bindings for languages like Java, Python and Ruby.

The main gist of the course will involve learning the concepts of CUDA memory management together with the hardware capability of the GPU we are developing on.

Once we are familiar with the core concepts, we will talk about interoperability of the CUDA library with rendering and also the use of atomic primitives to accomplish things which  are quite trivial in the traditional CPU case. Then we will talk about the concept of CUDA streams.

We will talk about the different external libraries both 3rd party as well as provided by NVIDIA optimized for the GPU, that implement many useful algorithms for applications ranging  from Finance to Medical Imaging and Machine Learning.

Finally we will end the course by talking about GPUs in the cloud as a service and multi-GPU APIs.
 
 
 
The Mon/Tue conference sessions are also full of interesting topics:
https://thestrangeloop.com/schedule
 
  
 

2012-09-12

2012-09-12 Wednesday - JavaOne 2012 Session Schedule



Sadly, my schedule is rather jammed this year - and I won't be able to attend JavaOne in San Francisco in September 30th - October 4th this year (2012)

However, I will look forward to checking back on the decks that may eventually be published for the various sessions:
http://glassfish.java.net/javaone2012/

2012-09-03

2012-09-02 Monday - Book Review: VIsual Models for Software Requirements



I review for the O'Reilly Blogger Review Program 


 

Book Review: Visual Models for Software Requirements 

by Joy Beatty, Anthony Chen
http://oreillynet.com/pub/reviewproduct/827

Summary:

I'll start-off by saying that if you have no process or discipline in your organization's approach to documenting and capturing software requirements - there are a lot of good suggestions covered in this book. Also, if your approach to documenting software requirements lacks an appreciation for the business concerns - the Business Objectives modeling discussions in the book may be helpful and/or useful for your software engineering team.  However, if your software requirements management processes are even moderately mature - and if already using Microsoft-centric tools to capture and manage software requirements - you will not find much that is new, novel, or of benefit in this book.

Positives:
  • An attempt to provide a comprehensive approach with an emphasis on business concerns
  • Coverage of the importance of Business Process modeling
  • Highlights the limitations of UML to capture business level concerns'
  • Focus on Business Objectives modeling
  • Discussion/coverage of Key Performance Indicator Models (KPIM)
  • 'Feature Trees' [although, for any moderately complex effort, the choice of a visual modeling tool for drawing a Feature Tree - that lacks zoom/collapse capability of nodes - is problematic]
  • Inclusion of helpful links to references and additional resources at the end of each chapter.

Negatives:
  • Lack of integrating the Business Objectives modeling concepts with other mature software engineering models (e.g. Zachman Framework,  Open Group TOGAF)
  • Microsoft-centric / bias in promoting tooling
  • Lack of any significant discussion of other possible software requirement tooling for visual modeling (i.e. non-Microsoft-centric tooling)
  • Lack of appreciation / coverage of how to minimize the manual maintenance of traceability across artifacts
  • Promoting a software requirements approach that relies on Sharepoint as a primary mechanism for publication/distribution is an abysmal experience as the size and duration of a project grows.
    • Link-rot: Over time, Sharepoint sites are renamed, restructured, reorganized.  This results in an untenable maintenance effort for most organizations.  Links embedded in MS Word, PowerPoint, Excel, and Visio documents are routinely broken - and identifying where to change all of the link references is also challenging..
    • Painful and labor intensive efforts to automate any generation of cross-references or matrices [when visual models and requirements are stored as MS Office documents across multiple SharePoint sites].

 In choosing this book to review - I was hoping to find some new insights to capturing requirements - via visual models that might eliminate some of the 'pain' that most often is found to exists in the requirements management processes (and tooling) adopted by most large organizations.  Since this book is written with a bias toward Microsoft(tm) technologies (e.g. SharePoint) - teams that attempt to adopt the suggested approach will eventually run into the same types of long-term problems and 'pain' that I have observed firsthand on many projects - across several different organizations.

At the end of the day - after having lived with the pain of an absence of integrated tooling for the capture and management of software requirements on too many projects - I must conclude that the authors lack of a integrated vision of tooling for visual software requirements management leads me to suggest avoiding this book for the majority of potential readers.


2012-10-09 Tuesday Update:

Tonight I received a follow-up question in response to my Amazon review for this book:

 Kelvin, 
I found your review of the book "Visual Models for Software Requirements" to be very helpful and intriguing. The negatives you list for the book touch on some items I am looking to find a solution for. I am not a programmer, yet I aspire to use the tools of programmers to manage information in the form of data files, Word documents, graphics, Excel spreadsheets, PDF, text, etc. I was thinking of looking into Sharepoint as a means to keep the information organized, cross-referenced, searchable, and shareable. Then I read your comments about the "absymal experience" that Sharepoint becomes when used as the primary mechanism for publication/distribution. Your description of the broken links embedded in Word, Powerpoint, Excel, etc. is exactly what I want to avoid.
So this brings me to my reason for writing to you. You mentioned that you have lived though the pain of an absence of integrated tooling for the capture and management of software requirements, which seems to imply that you now live relatively pain free. What tools do you use to capture, organize, maintain, and share requirements? I'm thinking what you have learned and are willing to recommend may provide me with ideas for something that may work for me.
Thank you for your time. 

xxxxx xxxxx




Here's my reply:

I'm happy to share with you my thoughts/recommendations - although it isn't a silver bullet. Even if I found the perfect tool - there are still challenges. For example, enabling collaborative editing of content with most visual modeling tools - doesn't scale well across organizational boundaries. In particular, for some industries that are very sensitive to a default security approach of 'nothing-shared' - the willingness of the organization to allow that cross-boundary access to information is often a battle that cannot be won.

Two approaches that I've used in the past:

1) Leveraging a wiki tool (such as wikmedia or TikiWiki)
 PROs
- Allows easy creation and editing of content - as well as deep linking of the content within a single application container.
- Content can be ported (or archived for a snapshot) by exporting data from the wiki database.
- No expensive application licensing
- Scales well - wiki content is easily searched
 CONs:
- requires organization discipline in how content is arrange and organized
- wiki page links can become orphaned [but most such tools have a feature to easily identify orphaned pages - try answering that same question with an organization containing many Sharepoint repositories - that exist as independent silos]
- wiki's don't have inherent modeling / diagramming capabilities [however, there are options for creating custom plug-ins - so that may be a surmountable challenge - with some investment upfront]
- requires some discipline (and establishment of organization / processes) for how to organize and manage externally generated content (that may be either linked to, or uploaded to a central folder - for reference in wiki pages)

2) Leveraging a modeling tool that supports a centralized repository (such as Sparx Enterprise Architect, or other similar commercial products)

PROs:
- Supports publishing easily navigated HTML content
- Models (and model elements) are logically connected - so moving an element or package up/down in the hierarchy maintains the physical links to the content
- Supports rich annotation and complex relationship associations
- Supports automated generation of traceability matrices
- Easily supports generation of comprehensive documentation
- Supports establishing traceability for multiple purposes (e.g. testing, requirements, use cases, used-by, uses, etc.)
- supports searching across the entire repository and filtering rules
- supports capturing knowledge in a single repository - across organization roles (business analysts, architects, developers, testers, data modelers, network/infrastructure

CONs:
- Per-seat (or floating) license costs can be a burden for large organizations
- Content published to HTML format must be round-trip updated/published to update the HTML content.
- diagrams that can be exported (e.g. .png,.jpg, .gif, etc) are not always of an optimal resolution for viewing in slide decks or word documents.
- [typically] requires connection to the repository to update content (although there are processes that can be established to bridge this - for example, leveraging version control for model check-in / check-out)

These are some of the trade-offs that immediately come to mind - and are all preferable to the nightmare of trying to locate information across multiple Sharepoint repositories - and links that may be broken due to sites being restructured, moved, or deleted.

2012-08-22

2012-08-22 Wednesday - Data Governance Tools

Today I'm researching tools that may support a portion of a Data Governance process.

The development/production environment includes both Oracle and Microsoft SQL Server databases.

Some of the challenges I'm seeking to address with a Data Governance process / tooling includes answering the following types of questions:
  • What changes occurred from the previous to the next version of the  schema?
  • How can we migrate data from one version of the schema to the next?
  • How can we migrate data from one environment to another?
  • If we need to migrate data from a Prod to a Dev environment, how can we ensure that data is reliably 'cleansed' or 'masked' to avoid Personally Identifiable Information (PII) from'leaking' out of a Prod environment.
  • How to avoid having to recreate large volumes of existing test data from scratch - when major schema and/or data changes result from application changes

 Some of the desired features in a schema comparison tool would include the following:
  • Command Line interface for automatic generation of reports
  • DDL import of the previous/next schema definition files
  • Generation of a report in PDF, HTML, RTF formats to document both schemas
  • Reports to identify the deltas between the two schemas
  • Generation of the DDL to alter the previous schema to look like the future schema
However, beyond the simple task of schema comparison - Data Governance also encompasses the  challenges of the following tasks:
  • Migrating data - and supplying the transformation rules as needed
    • Splitting data from 1:N fields
    • Combining data from N:1 fields
    • Populating new data fields (via default value, lookup value, etc.)
    • Computing new values f(x):y

My initial inclination is to suggest the Altova Database Schema Differencing Tool (DiffDog(R) 2012)

Other Resources to Consider

    WordCount

    Copyright

    © 2001-2026 International Technology Ventures, Inc., All Rights Reserved.