"Story of the Floss" -- About a great life phrase



Yesterday at the discussion with my mentor Saptarshi, he mentioned a really nice phrase called "Story of the Floss" I studied more about it. Its a really great phrase and can learn lots of thing from it.

Simply it means: Keep it simple, Build an End to End solution, Most importantly take action(code) without thinking/talking too much and adding more and more fancy ideas into the problem.

Here's the related story. (Reference: https://wiki.openmrs.org/display/RES/The+Story+of+the+Floss)


Clem and another group are faced with the same challenge: build a bridge across a canyon.

The other group — like most of us would — gathers engineers, draws up specifications, and begins planning on how the bridge should be constructed properly.  Meanwhile, Clem pulls a box of dental floss out of his pocket, unwinds it, and throws it across the canyon. Almost immediately, he's got something across the canyon. It's only floss, but it's there — end to end.

The other group is arguing about whether the bridge should be a beam, suspension, truss, or arch bridge.  Clem starts layering paper mâché onto the floss.

The other group has finally decided on a suspension bridge and begins preparing the materials according to specifications.  Clem has people walking across his paper mâché bridge.

The other group realizes that they would probably be better off with a truss bridge, begins discussions on the new specifications, and then realizes that they are too far over budget and the project is shut down.  Clem has people driving across his bridge.

The other group finally creates their version of the bridge, only to realize it doesn't reach over to the other side where they initially intended it to!


The Lesson

Whenever possible, start with the floss. See the solution through end-to-end, since this is often the best way to understand the problem and often informs the next pass at the solution. In the end, it is rare that we fully understand the problem until the third iteration of the solution.
Be agile, open to corrections, and iterate on your solutions. But, most importantly, take action.
  

My Thoughts

In my words the lesson of this story is dont try to be so smart and keep expanding the idea of your project. Just start simply from sctratch and add lil by lil, But the goal should be to develop an end to end solution (that means a product which is something useful and usable in a practical scenario.) After getting accomplish the basic goals of the project you can proceed into your other fancy ideas. Note that those fancy ideas could take a longer time to develop (or might get failed) but if you have followed the floss way, you still have a basic product which is really a usable one!

Actually I think this phrase isn't only related to the open source software development, This is a truly awesome phrase which we can adopt in our life in general!


OpenShift Gear quick links


SSH into Open-Shift instances:

https://www.openshift.com/blogs/access-your-application-gear-using-ssh-with-putty

How to deploy WAR files inside Open-Shift:

http://whyjava.wordpress.com/2012/11/25/deploy-war-on-tomcat-running-on-openshift/

How to restart Open-Shift without Git pushes: 

ctl_app  : control your application (start, stop, restart, etc)
https://www.openshift.com/kb/kb-e1055-how-to-restart-an-application


[Tutorial] Simple Android Application which consumes C# ASP.net Web service


Whoever getting started to learn Web services - Android app interaction I hope this tutorial may be helpful, You can download the full source from here: https://github.com/harshadura/RDA-Android-ASP.WS-interact/archive/master.zip

Prerequisites: 
.NET framework, SQL server 2008, Android device/emulator
 
How to run.

  1. Attach the MDF file into your SQL server.
  2. Change the connection string at the C# project config according to your db connection.
  3. Change the 'Web service URL' on the Android Application.
Notes:
  1. You will need to use WIFI tether to get connect your device with PC/otherwise you will need a router, both connected into it.
  2. Sometimes you will need to configure the security restrictions of your IIS web server to get connect the device.

C# Web Service

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Data;
using System.Data.Sql;
using System.Data.SqlClient;

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
public class Service : System.Web.Services.WebService
{
    public Service () {

        //Uncomment the following line if using designed components 
        //InitializeComponent(); 
    }

    [WebMethod]
    public String GetEmployeeByID(String id) {
          
            DataSet2TableAdapters.EmployeeTableAdapter dt1 = new DataSet2TableAdapters.EmployeeTableAdapter();
            String ename = "" + dt1.getEmpByID(id);
            return ename;
    }

    [WebMethod]
    public Employee[] GetEmployees()
    {
        var employees = new List();

        try
        {
            string connect = @"Data Source=HARSHADURA-AZUS\SQLEXPRESS;Initial Catalog=RDA;Integrated Security=True";
            string query = "SELECT eid, ename FROM Employee";

                SqlConnection thisConnection = new SqlConnection(connect);
                thisConnection.Open();
                SqlCommand thisCommand = thisConnection.CreateCommand();
                thisCommand.CommandText = query;
                SqlDataReader thisReader = thisCommand.ExecuteReader();
                while (thisReader.Read())
                {
                    var emp = new Employee();
                    emp.eid = thisReader["eid"].ToString();
                    emp.ename = thisReader["ename"].ToString();
                    employees.Add(emp);
                }
                thisReader.Close();
                thisConnection.Close();
            }
            catch (SqlException e)
            {
                Console.WriteLine(e.Message);
            }
        return employees.ToArray();
    }
}


Android --SOAP Client

 private SoapObject result = null;

 private static String SOAP_ACTION = "http://tempuri.org/GetEmployeeByID";
 private static String NAMESPACE = "http://tempuri.org/";
 private static String METHOD_NAME = "GetEmployeeByID";
 private static String URL = "http://192.168.123.100:8080/Service.asmx?WSDL";

 public void connectSOAP(String empid) {
  SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
  request.addProperty("id", empid);

  SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
    SoapEnvelope.VER11);
  envelope.dotNet = true;
  envelope.setOutputSoapObject(request);
  HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
  try {
   androidHttpTransport.call(SOAP_ACTION, envelope);
  } catch (Exception e) {
   e.printStackTrace();
  }

  result = (SoapObject) envelope.bodyIn;
  
 }