Friday, April 27, 2018

Scrum and Jeff Sutherland


Priorities

"He who will defend everything defends nothing." -- Frederick the Great of Prussia

Product Development

Whenever you're making something, you want to put in in the hands of those who are actually going to use it as fast as possible. You want to do this even before you make 20 percent of the features. You want to do this with something that delivers at least a tiny bit of value. I call this a "Minimum Viable Product," or MVP.

Risk

The three most common types are market risk, technical risk and financial risk. Or, to put it another way : Do people want what we're building? Can we actually build it? Can we really sell what we build?

Medco case study (Pg 114) :

It took the company nearly six months to figure out that they couldn't do it in time. Their calculations showed that, in the best-scenario, they'd deliver the system at least one year late. Probably more.

Why it took them six months to figure out that they couldn't do it in time is something that bears examination. It wasn't that they weren't smart, or didn't have the right teams in place, or even the right tech. It wasn't that they weren't working hard or being competitive. You don't get to be the biggest company in your sector without doing all that.

It was because they made a very basic mistake. They thought they could plan everything ahead of time. They spent months of effort making the sort of detailed plans that seem plausible - that are laid out in pretty charts and include carefully precise steps and almost always describe a fictional reality.

As I've said before, the very act of planning is so seductive, so alluring, that planning itself becomes more important than the actual plan. And the plan becomes more important than reality.

Wednesday, April 25, 2018

How Can I Go To A Sharepoint Directory Through the Cygwin Terminal (konsole)?

First, like a good person, map the Sharepoint site to a network drive like so :


  1. Open a File Explorer (aka Windows Explorer).
  2. Right click on "This PC" and select Map Network Drive..
  3. On the resulting dialog, click the underlined link for "Connect to a Web site that you can use to store your documents and pictures." This pops up a new dialog "Add Network Location".
  4. On this new dialog, click Next.
  5. You'll see an option (that may be already selected; if not, select it) that says "Choose a custom network location". Click Next.
  6. Now, paste the "https://whatever.sharepoint.com.." and click Next.
  7. Now, it asks you to name your new network location. Give it a name. You'll be able to go here easily from the File Explorer from now on.

Excellent.


  1. Now, right click on the new folder name you'll see under This PC in File Explorer.
  2. You'll notice that the Target shows you the familiar URL while the "Comment" shows you the real deal : \\whatever.sharepoint.com@SSL\DavWWWRoot\whatever..
  3. Believe it or not, you can click here, then do Home to go to the beginning and do Shift+End to select all of it and then, in a command prompt, just do :


net use r: \\whatever.sharepoint.com@SSL\...

(you get the idea - you can just do a right-click to paste from clipboard)

Verdict - Cygwin is *the* best - easily whacks Windows Subsystem for L / Ubuntu and Git Bash as well. All you get with Git bash is some cute colouring. What you get with Cygwin/xterm that you don't get with the others :

easy font re-size with CTRL+/-. Of course, you have to put up with the annoying /cygdrive thing, but hey, pick your poison :)

Thursday, April 19, 2018

How Can I Find the Path to the File in the Sharepoint Search Result?

Ans : In the browser, you can't. Yes, thank you M$ :)

What you can do (not with Chrome, sorry :) (Thank you M$) is open Sharepoint in Internet Explorer and then, open the folder you're in in File Explorer ("Open with Explorer" or "View in File Explorer")

And, voila!

Now, in File Explorer (aka Windows Explorer), when you search, and get results, you also get the path - just hover on one of the results with your mouse pointer and you're done :)

So easy right? :)

Wednesday, April 18, 2018

Why is My Binary Search Taking So Long?

Are you sending a new list with each recursive call?

Better to have just that one original list and keep passing the reference.

If you have to compute the length of the list just to do the basic comparisons, that will hit you..

Tuesday, April 17, 2018

Pandas and XlsxWriter

Can you add an Excel table using a pandas dataframe to an existing worksheet?

No. What you can do is use pandas.dataframe.to_excel to create the sheet with the dataframe inserted to start from a certain row, and then you can use

pandas.ExcelWriter to capture the book and sheet and then use

sheet.write to insert values..

Thursday, April 05, 2018

Developer Self-Assessment aus Greg Wilson (SW Carpentry)

1. Do you use version control?

2. Can you rebuild with one command?

3. Do you write your tests before your code?

4. Do you run your tests before checking in?

5. Do you know how much of your code they cover?

6. Do you have a bug database?

7. Do you use assertions and other defensive programming techniques?

8. Do you use a symbolic debugger?

9. Can you trace everything you release back to its origins?

10. Do you document as you program?

11. Can you set up a development environment without heroic effort?

12. is there a searchable archive of discussions about the project?

13. Do you use a style checker to maintain code quality?

14. Do you write small tools to automate recurring tasks?

And from Bill Sourour, how you can claim your code is good - if these adjectives apply :

  1. Debuggable
  2. Loggable - for those times when it breaks on some platform and you need to figure out what happened
  3. Testable (note that procedural code is not testable, Misko Hevery)
  4. Fast-failable
  5. Idempotent 
  6. Immutable
  7. Intelligible
  8. Modifiable
  9. Documentable
  10. Modular
  11. Buildable (where most open-source stuff fails - at least for me :) because of dependencies )

Sunday, April 01, 2018

Why Is Stanford Everyone's Dream School

https://www.youtube.com/watch?v=ajFq31OV9Bk

John Ouserhout : Creating Great Programmers with a Software Design Studio

What are the Secrets?

o A few (somewhat vague) overall concepts

- “Working" isn’t good enough: must minimize complexity

- Complexity comes from dependencies and obscurity

- Classes should be thick

- Generic is simpler than special-purpose

- Comments should describe things that are not obvious from the code

- Define errors out of existence

- The Martyr Principle

0 Only constructive in the context of code reviews
0 Course is more about red flags than recipes

He recommends the Parnas paper (CMU) on decomposition.
The point? Don't decompose the problem based on a flow-chart - you'll end up up with something that's not maintainable. Rather, start with a list of difficult design decisions which are likely to change. Then, design your modules to hide these decisions from each other.