Skip to content
gerold kathan edited this page Jan 25, 2015 · 4 revisions

20140404

kanban_metrics

  • added intervalStart, intervalEnd Dates ** mark the interval for which the metric is for
  • removed date field
  • renamed baseDate to forecastDate (represents the date when a forcast was mad)

20140408

initiatives:

  • added new field "onKanban" (INT) => to select which items are shown and which not => to keep items and not delete them

  • implemented new state "killed" => own symbol (item_killed) => no delay lines => greyed out

targets:

  • changed reference to agile (former "skywalker"
  • removed target 9 (reg markets consolidation)

20140409

  • fixed subheadlines of metric timelines

20140418

  • ideas to switch easily between single lanes

=> just play with values in FILTER

ITEMDATA_FILTER = {"name":"lane", "operator":"==", "value":"bwin"}; CONTEXT=ITEMDATA_FILTER.value; drawAll()

=> has an error currently - looks like in targets rendering...

20140422

=> on csv import => skip first line in phpmyadmin

ALTER TABLE initiatives AUTO_INCREMENT=1000

20140424

v1sync:

  • first version of insert, update delete WORKS :o)

mongo windows service install

sc.exe create MongoDB binPath= ""C:\mongodb\bin\mongod.exe" --dbpath="C:\mongodb\db" --config="C:\mongodb\mongod.cfg"" DisplayName= "MongoDB 2.6 Standard" start= "auto"

mongoimport items.json

mongoimport "c:\Users\gkathan\Dropbox\_work\d3\kanban\data\initiatives.json" --jsonArray

WOW :-)

node.js + mongodb

  • restify

https://www.openshift.com/blogs/day-27-restify-build-correct-rest-web-services-in-nodejs

=> built a REST server in 10 minutes

in work dir where source (mongo_gateway.js) sits => npm install restify => npm install mongojs

node mongo_gateway.js

http://localhost:9999/items

20140428

=> for row based compare on diff on update => application logic for something like an update trigger

function update (row){ var _old = db.initiatives.findOne(by row id); var _diff = compare (_old,row);

// update row

// insert diff into change trail

}


nodejs excel exporter https://www.npmjs.org/package/excel-export

npm install excel-export

=> styles.xml extracted froma a table excel ....hmmm not so awesome => what i am looking for is a json2excel converter

20140430

mongoimport c:\Users\gkathan\Dropbox_work\d3\kanban\data\json\themes.json --jsonArray --db kanban --collection themes mongoimport c:\Users\gkathan\Dropbox_work\d3\kanban\data\json\lanes.json --jsonArray --db kanban --collection lanes mongoimport c:\Users\gkathan\Dropbox_work\d3\kanban\data\json\sublanes.json --jsonArray --db kanban --collection sublanes mongoimport c:\Users\gkathan\Dropbox_work\d3\kanban\data\json\bm.json --jsonArray --db kanban --collection bm

mongodump --db kanban

===== v1 admin console from now on in PRODUCTION :-)

  • insert, update, delete OK

IDEA = daily / weekly auto generated report / pix / newly added items / changes / etc

20140502

mongo_gateway => CRUD

  • change trail
  • initiatives_trai npm install jsondiffpatch

recursion /asynch for loops

WORKS :-)))

=> kanban.js

  • switch between PERSTISTENCE_CONFIGS (mongo/mysql)

20140503 QUESTION?

  • is it better to store full trail of changed entities or just the diffs
  • or maybe just both ? =>just added both old and diff into the diff_trail and added a timestamp of insert

http://localhost:9999/initiatives_diff_trail

autoinc field

db.initiatives_counter.insert({_id:"initiativeId",seq:0})

=> implemented async if then => quite weird with "restOfTheFucntion" continuation callback...

NOT SURE whether i need this autoinc additional kanbanID at all => have anyhow the extId (as numeric unique ID) => in fact it is just about a more human readable ref for mappings etc... hmmm

uuh and initiatives.id still has semantic !!!!!

  • order for lane buildup and more NEEDS INVESTIGATION !!!!

  • sorting of lanes --> experimenting in kanban.js -> drawAll()

    initiativeData.sort(function(a,b){return (b.lane>a.lane) ?1 :-1}); https://github.com/Teun/thenBy.js

=> sorting behaves very strange !

  • not deterministic as if it runs async ....
  • needs to be called twice - then it works

[OK] application join between initiatives and lanes

  • for sorting
  • function joinInitiatives2LanesSort(){

20140504

mongodb csv export

  • WORKS :-)

example:

mongoexport --collection metrics --db kanban --fields id,dimension,class,lane,intervalStart,intervalEnd,forecastDate,number,scale,type,sustainable,reforecast,targets,direction --csv --out metrics.csv

mongo shell scripts

http://docs.mongodb.org/manual/tutorial/write-scripts-for-the-mongo-shell/

** easy to script via simple .js files :-)

e.g.

c:\mongodb\scripts> mongo kanban _mongofind.js

_mongofind.js

cursor = db.lanes.find(); while ( cursor.hasNext() ) { printjson( cursor.next() ); }

20140505

  • mongo data restore /setup on ubuntu

mongorestore --drop from above ..dump\ directory

when locale crah abort...

==> export LC_ALL=C

  • ok => collections missing
  1. lanes (not yet in mongodump....) on helix
  2. initiatives_counter

20140506

check nodejs / mongo environment on PROD system


update DEV in office

tools

  • install robomongo

(1) mongoDB

  • cd C:\Users\gkathan\Dropbox_work\d3\kanban\data\mongo

  • mongorestore --drop

  • mongoimport c:\Users\gkathan\Dropbox_work\d3\kanban\data\json\lanes.json --jsonArray --db kanban --collection lanes --drop

  • mongo => use kanban => db.initiatives_counter.insert({_id:"initiativeId",seq:1000})

new mongodump on DEV

  • mongodump --db kanban --out mongodump_DEV_20140506_0946

/**

==> ???? metrics not shown ==> something does not WORK ????

re-import from prod instance

mongoimport c:\Users\gkathan\Dropbox_work\d3\kanban\data\json\metrics_PROD_20140409_1900.json --jsonArray --db kanban --collection metrics --drop

===> does NOT HELP ????

==> ok reverting back to orgiginal dump version fixes

  • now checking what made the difference ....

  • mongodump --db kanban --out mongodump_DEV_20140506_1040

  • and restore again

mongorestore --drop mongodump_DEV_20140506_1040 ==> !!!! on restore it breaks .... ===> aha - metricData has only 200 elements ????

===> after manual drop -- ok also 200 ;-) => that was not the issue

**** so lets check the DIFF between the concrete metricData arrays as JSON.stringify

HAHAHAHAHAAAAAAAAAAAAAAAAAAAA !!! it was a .limit(200) in my findAll() mongo_gateway code FUUUCK !!! but works now !!!

*/

(2) start node mongo_gateway.js

OK - somehow i need to manually db.dropDatabase() before mongorestore !!!!

=> if i do twice a mongorestore => metrics break .-...

(3) howto run node server

http://stackoverflow.com/questions/4797050/how-to-run-process-as-background-and-never-die ??

nohup /opt/node/bin/node js/node/mongo_gateway.js </dev/null & [1] 3374

** to stop it kill 3374

  • added node nad mongo into my path
  • /home/gkathan/.bashrc
  • export PATH=$PATH:/opt/node/bin:/opt/mongodb/bin

=================

  • diff_trail

=> have working 0.0.1 REST endpoint http://localhost:9999/initiatives_diff_trail/5368f67f2940aa15bf4cd174

=> returns diff trails by refId

=> prototype with backside of the tooltip ;-)

in kanban_item.js

WORKS :-))))

==================

excel export from metrics WORkS

  • connected to mongoDB :o)

20140507

http://localhost:7777/excel => node/excel_metrics_exporter.js

  • playing with spreadsheetML

20140508

TESTRUN with PROD deploy of mongodb version

*) update of latest mysql initaiveData.json on DEV

  • mongoimport c:\Users\gkathan\Dropbox_work\d3\kanban\data\json\initiatives_PROD_20140423_1709.json --jsonArray --db kanban --collection initiatives --drop

*) create unique index on initiative.ExTId und id

in mongo shell:

  • db.initiatives.ensureIndex( { ExtId: 1 }, { unique: true, sparse:true } ) => ERROR ?? have to check later
  • db.initiatives.ensureIndex( { id: 1 }, { unique: true } )

*) how to transfer a mongoDB dump from DEV to PROD

  • first do a mongodump on DEV
  • mongodump --db kanban --out C:\Users\gkathan\Dropbox_work\d3\kanban\data\mongo\mongodump_DEV_20140508_0856
  • zip it

==> hack for now

  • winscp the dump folder ==> on ssh run
  • mongorestore --drop mongodump_DEV_20140508_0856/

[OK] now - had to fix some issues with data gateway URLS => went to localhost ;-)))

running mongoversion on PROD as test.....

basic auth kanbanmenu switch

  • change kanban.html to kanban.php

20140509

  • fixed auth stuff

    • included v1sync => now also a php file
  • some data cleansing => subLaneOffset has "Arr" ???? values => set them to null

    • db.initiatives.update( { sublaneOffset: "Arr" }, { $set: { sublaneOffset: null } }, { multi: true })

[OK] done on PROD

=> need to do ONE PROD dump and see whether i can get this dump into DEV... >via SSH on portfolio.ea>
+ mongodump --db kanban --out mongodump_PROD_20140509_1733 [OK] worked and created a DIR > tar it + tar -cvf mongodump_PROD_20140509_1733.tar mongodump_PROD_20140509_1733/ > and winscp it to kanban/data/mongo and extract it [OK] > and restore it locally on DEV (from kanban/data/mongo/ dir) + mongorestore --drop mongodump_PROD_20140509_1733 [OK]

=> and put into ant task "mongodumpPROD"

[OK]	

ISSUES

  • items NOT in V1 are NOT shown in V1sync (naturally) => what to do with those ? => e.g. premium phase 2 [TODO]

  • names too long [TODO] strip out the "[backlog/blah]" part when showing it in kanban_item.js str.replace(/\s*[.?]\s/g, '')

    [DONE]

  • sort joins are impliciely stored on v1admin CRD => interesting ....

  • adaptive config switch based on window.location.host

    => when on localhost => DEV => when on portfolio.ea.bwinparty.corp => PROD

[DONE in kanban_config.js] OK

20140510 *** IDEA

automatically do a daily PNG snapshit

  • calling form post save as png =

submit_download_form("png");

201400511

playing with phantomjs

  • login works
  • download attachement does not work

20140521 => peter needs excel initiative export => already started to implement this in a nodejs service

=> do NOT export HealthComment and Description field => CRASHES export !! +++ \n seems to be the root cause of excel failing

mongoexport --collection initiatives --db kanban --fields id,ExtId,name,name2,bm,theme,lane,themesl,sublane,sublaneOffset,startDate,planDate,state,actualDate,progress,health,status,size,Type,cost,Swag,benefit,dependsOn,accuracy,productOwner,businessOwner,programLead,createDate,changeDate --csv --out initiatives.csv

  • shell script "initiatives_csv_dump.sh"

=> [OK] created ant target

ant initiativesCsvPROD

  • exports initiative collection on PROD
  • downloads it (scp) locally into data/mongo/csv_export
  • and timestamps the file :-)

20140522

  • excel_kanban_exporter.js

fixing excel export of initiatives:

  • sorting of columns for row export
  • investigating what breaks the excel
  • it is the DoD field
  • experimenting with _stripCrap() method to clean out the shit -..

[OK] works now => isolated the shitty \u00xx shit

  • started a admin.php => for managing kanban data => concisoucly separated from the v1 sync

20140534

  • excel_kanban_exporter.js

=> finalized export for targets, metrics, initiatives => path is htpp://blabla/excel/metrics etc.

  • try to combine this to mongo_gateway.js => to just have one resitify server process ! => and deploy to PROD....

  • fixed date format handliung of SlickGrid Date Editor => put d3.formater in it..

target, metrics, lanetext need seqcounter collections

run in mongoDB:

!!!IMPORTANT befor deploying NEW VERSION TO PROD !!!

db.targets_counter.insert( { _id: "targetsId", seq: 100 } )

db.initiatives_counter.insert( { _id: "initiativesId", seq: 1029 } )

==> initiatives_counter on PROD is on 1001 ==> but some items had been synced => but have to date .... ==> 1019

sooo funzt alles - aber deploy next week => weekend ;-)

HINT:

  • when i add a new item for a new lane
  • current config (manual override in kanban.php / lane setup => add new lane there !

storing of v1 dates

  • v1plannedStart, v1plannedEnd, v1launchdate [OK] works

!!! URLS auf mongogateway sind hardcoded und zeigen auf localhost ....

18:17

  • deploy on PROD => ant deploy => restart mongo_gateway on SSH

ps ax |grep mongo_gateway.js => 5949 kill 5549 => [OK] down

start_mongo_gateway.sh

[OK] up and running

test: excel export NOPE => {"code":"InternalError","message":"ENOENT, no such file or directory 'styles.xml'"}

  • ok - styles.xml muss in dem dir liegen wo mongo_gateway gestart wird .... [TODO] fix => for now (as hack) styles.xml copied into home dir where the start script resides ....

last thing for today => fixing the seq for initiatives

db.initiatives_counter.drop()

db.initiatives_counter.insert( { _id: "initiativesId", seq: 1020 } )

[OK]

20140527

=> replaces old script (nohup /opt/node/bin/node portfolio/html/js/node/mongo_gateway.js </dev/null &)

  • snapshot of PROD mongo -> DEV ================================ ant mongodumpPROD

mongorestore --drop mongodump_PROD_TIMESTAMP

[OK} works fine

  • started DIFF indication in v1sync ==================================

20140528

  • v1 meta api

http://v1.bwinparty.corp/V1-Production/meta.v1/Epic http://v1.bwinparty.corp/V1-Production/meta.v1/Scope http://v1.bwinparty.corp/V1-Production/meta.v1/Schedule http://v1.bwinparty.corp/V1-Production/meta.v1/Team

  • beautification and small stuff onKanban..

20140604

together with peter K we did an online kanban admin session

  • v1 sync
  • kanban admin

=> in general basic functions worked as expected (CRUDS) => in specific many UX glitches and not thought through (yet) usecases

e.g.

  • edit from board - click on tooltip admin link => list / edit => here a details form (instead of a list and 1 row view) would be awesome

[TODO] we decided that v1.launchDate is the one to sync for kanbanPlan in case of prefill [TODO] sublaneOffset drag and drop would be awesome in admin mode [TODO] de-glitch the admin process

  • v1 sync new initiatives
  • search and filter [TODO] sublane select box (prefilter based on lane select) [

20140605

  • started to implement status based on peters list for target
  • RAG formatter

[TODO] rendering of status in corpkanban view

20140610

orgtree/radial experiemnts

=> need to disable formpost limit in tomcat .....

PI export refresh

  • this is right now a painful manual process
  1. get xls from HYD
  2. save as TAB delimited (.txt) from excel
  3. use org.js as base
  4. comment building root => will produced an error on org.html
  5. use chrome console to output JSON.stringify(orgData)
  6. copy paste into geany
  7. replace all weird characters
  8. save as json

20140611

mongo import of orgdata on DEV

mongoimport c:\Users\gkathan\Dropbox_work\d3\kanban\data\bpty_org_20140610.json --jsonArray --drop --db kanban --collection org [OK] imported 3449 rows

add endpoint in kanban_node_gateway

[ok] http://localhost:9999/org

mongo import of orgdata on PRDO

cd data/ mongoimport ./bpty_org_20140610.json --jsonArray --db kanban --collection org

[ok]

  • stop => kanban_node_gateway.sh
  • manually copy update kanban_gateway
  • restart node kanbangateway

20140613

  • refreshing my tree algorthimitc skills ;-)
  • until yet i implicietly implemented depth first traversal

PI export refresh - SIMPLIFIED :-)

  • this is right now a painful manual process
  1. get xls from HYD
  2. use node xlsx2json => edit code
  3. done :-)
  4. add endpoint in kanban_node_gateway.js import historic data

mongoimport ./bpty_org_20130429.json --jsonArray --db kanban --drop --collection org2013april

restore proddata on dev:

cd data/mongo mongorestore --drop mongodump_PROD_20140613_173813

20140617

  • convert excel to json via xlsx2json.js (node)
  • import into DEV
  • add nodegateway endpoint C:\Users\gkathan\Dropbox_work\d3\kanban\js\node>mongoimport ./x2011.json --jsonArray --drop --db kanban --collection org2011april

20140624

kanban_item

  • i need a "doneDate" which ideally should match the launchDate in v1

  • state sync => on hold => gray out the initiative

20140626

import latest PI snapshot

mongoimport ./x2014jun26.json --jsonArray --db kanban --drop --collection org2014jun26

voila

[TODO] => should be automated with ANT

  • convert excel to json

  • import json into mongo on DEV

  • upload json on PROD

  • import json on PROD

  • change shoudl be possible without touching node_gateway or other scripts

mongoimport ./x2014jul23.json --jsonArray --db kanban --drop --collection org2014jul23

20140724

experimented in knbnproxy

  • added EpicRootName + EpicRootNumber 3 places
  • model.Epic
  • service.V1Client
  • util.EpicAdapter

=> works => when i want to access Super.ID it crashes ;-)

20140725

scrum teams imported to mongodb

mongoimport ./scrumteams2014jul25.json --jsonArray --db kanban --drop --collection scrumteams

find teammembers

db.org2014jul23.find({"Scrum Team 1":"TEAMNAME"})


interesting orgchart library

http://librerias.logicas.org/lib_gg_orgchart/download.php

BRAIN FUCK for 6 MONTH

20150111

experimenting with drag drop

=> currently a specific dragdrop handler for items is implemented in kanban_utils => try to get lanes movable => experimental reuse of drag_item behaviour in kanban_lanes.drawLaneBox()

=> i am still not fully back with my brain but getting there ;-)

[STORY] = make laneboxtext inline editable via html overlay form => derzeit ist lanetext zeilenweise in mongodb

  • experimenting with console and my textarea helper class (in d3_util.js)

=> yet quite weird => braucht als erstes ein "text" element => und dann kann man damit ein textarea ding machen

textarea(svg.append("text"),"UBBA BAZOOKA | + list item1 | +list item2 | +list item3",0,-170,200);

=> " | " ist zeilenumbruch

  • setup kanban on HOME DEV WORKSTATION (bender)
  • install mongodb on WIN (a bit quirky .)
  • ant mongodumpPROD
  • restore manually C:\Program Files\MongoDB 2.6 Standard\bin>mongorestore --drop C:\Users\cactus\Dropbox_work\d3\kanban\data\mongo\mongodump_PROD_20150111_193900
  • SUCCESS

[EPIC]

  • migrate php webfiles (only used for session handling) to node.js express

[STORY]

  • selective filter view for ITEMS e.g. show only DONE items d3.select("#items").selectAll("g").filter(function(d){return d.state!="done"}).style("visibility","hidden")

=> check whether the DONE percentage count is accurate => seems currently not to be the case => only those which also have the planned End date in the visible kanban corridor are counted

20150113

[DONE] v1sync.php

  • checkInSync() method to include Status and Health

  • derive & map kanban state from v1 data

    • "done" => "Monitoring", "Done"
    • "killed" => "On Hold"
    • "planned" => "Implementation" "Conception" "New"

[TUTORIAL]

  • how to start kanban_node_gateway.js
  • in my home dir there is a start shell script
  • kanban_node_gateway.sh => start => stop

20150114

refactoring admin.php

=> extracting ajaxCall function into kanban_util => can be called from everywhere now

testing initiative on drop sublaneOffset save

  • works EASILY => just had to call the new ajaxCall() method on dragEnd and voila :-)

=> OK now also lane, sublane works BUT !!!!

the sublaneOffset Handling is broken as it takes the absolute moved pixels as offset !!!!!

=> OK fixed

  • drag & drop only in ISOLATIONMODE
  • sublaneoffset only within same sublane
  • crossing lanes possible

20140116

on PROD

/opt/mongodb/bin/mongoimport ./x2015jan15.json --jsonArray --db kanban --drop --collection org2015jan15

/opt/mongodb/bin/mongoimport ./scrumteams2014jul25.json --jsonArray --db kanban --drop --collection scrumteams

BIG REFACTORING of core hierachy / lane handling

[EPIC] rewrite tree stuff

=> refactor hardcoded theme,lane,sublane, fields to generic path like structure

from:

item.bm="b2c gaming" item.theme="topline" item.lane"bwin" item.sublane="mobile"

and then use _.nest("

http://stackoverflow.com/questions/8781983/build-a-json-tree-from-materialized-paths

to :

conceptually we are now just talking about "nested lanes" => lane in a lane in a lane .....

item.path="/b2c gaming/topline/bwin/mobile/"

  • decide whether items can only sit under leaf node of path or not

=> build tree based on path

step1:

  • encapsulate all calls / references to hardcoded item.lane, item.topline,... calls
  • generic format could be e.g. get

=> current implementation has more or less one hardcoded structure

bm = the board instance e.g. "b2c gaming" theme = first lane level lane = second lane level sublane = third lane level themeSl = experiment with alternative grouping => can be scrapped

all calls to _item.lane should be replaced with a getter/setter() method call


experiment

based on http://stackoverflow.com/questions/17140711/how-to-show-a-list-or-array-into-a-tree-structure-in-javascript

var items =[{item:"item1",path:"/b2cgaming/topline/bwin/touch"},{item:"item2",path:"/b2cgaming/topline/bwin/click"},{item:"item3",path:"/b2cgaming/topline/bwin/product"},{item:"item4",path:"/b2cgaming/topline/pp/market"},{item:"item5",path:"/b2cgaming/enabling/studios/agile"}];

items = items.map(function(d) { return d.path.split('/'); });

=> in kanban_util.js first experiment with function called

var items =[{item:"item1",lanePath:"/b2cgaming/topline/bwin/touch"},{item:"item2",lanePath:"/b2cgaming/topline/bwin/click"},{item:"item3",lanePath:"/b2cgaming/topline/bwin/product"},{item:"item4",lanePath:"/b2cgaming/topline/pp/market"},{item:"item5",lanePath:"/b2cgaming/enabling/studios/agile"}]; items = items.map(function(d) { return d.lanePath.split('/'); }); var t = buildTreeFromPathArray(items)


old way of building tree:

structure of initiativeData = array of item objects [item1,item2,..] item= {id:"id",name:"name",lane:"lane",.....]

  • in kanban_core.createLaneHierarchy()

in console:

  • ITEMDATA_NEST= ["theme","lane","sublane"];
  • var h = _.nest(initiativeData,ITEMDATA_NEST)
  • h

STEP1 = create new field in mongo.collection "initiatives" called "path" => should be automatically doable to take the bm+theme+lane+sublane and string it together

use kanban

// bulk update to create new field lanePath and prefill with existing data from hardcoded fields

db.initiatives.find().forEach(function (elem) {db.initiatives.update({_id: elem._id},{ $set: { lanePath: elem.bm + '/' + elem.theme + '/' + elem.lane + '/' + elem.sublane }});});

[OK]

  • in kanban console i can now already apply the new tree building based on lanePath field

var items = initiativeData.map(function(d) { return d.lanePath.split('/'); }); var t = buildTreeFromPathArray(items)

t[0] has the same structure needed for createLaneHierarchy() :o)

=> only thing missing is to put the concrete initiatives in the leaf nodes where the last "/" is !

=> HOLY SHIT => i do not even need to have the items in the leave path !!!! => works also without that !!! => experiment in kanban_core.createLaneHierarchy() works !!!!!

LEARNING = itemTree does NOT need to have items in leaf path ! => therefore it could/should be renamed to "laneTree" !

[OK]

  • added RUNMODE configuration to switch between "LEGACY" and "NG" mode

kanban current flow

  • itemTree is "only" needed for lanes
  • currently implicitly called in kanban.drawInitiatives() => drawLanes() is called in that function ...

=> all the kanban_util.getLanesNEW()... methods call the generic method

function getElementsByDepth(depth){ var _elements = new Array(); traverse(itemTree,0,depth,_elements); return _elements; }

=> which uses the itemTree !


  • das ist eh schon alles total richtig !
  • wenn ich die draItems() auskommentiere baut er mir im NG mode bereits fixfertig die lane structure auf !!!!

ABER das ganze ist ja leider immer noch auf basis der impliziten lanePath info von der summe aller initiatives ;-) => sprich das lane gerüst ist derzeit NICHT explizit definiert (unabhängig von den initiatives) sondern in den dingern drin ...


it looks like we have a 3 level lane default

level 0 = sublane ==> items level 1 = lane level 2 = theme (level 3 = bm ?) ==> board

how to map now calls like ?

check path depth

  • item.theme => item.lanePath.split("/").first()
  • item.lane => item.lanePath.split("/").middle()
  • item.sublane => item.lanePath.split("/").last()

remove theme,lane,sublane,themesl fields

db.initiatives.find().forEach(function (elem) {db.initiatives.update({_id: elem._id},{ $unset: { lane:"",theme:"",sublane:"",themesl:"" }});});

  • immerhin zeichnet er mir wieder die ganze lane structure

configurable FQ_DELIMITER => to either use "." as FQ path (LEGACY) => or use "/" for path (NG)

  • now works already nearly :-)

20150117

OK now we go into the core with lane, board , etc schema design !!!

=> added new field "path" in collection.lanes

contain the FQ path

=> mongoDEVdump

mongodump --db kanban --out mongodump_DEV_20150117

export LC_ALL="en_US.UTF-8"


  • copy inititives collection to initiativesOLD

mongo use kanban db.initiatives.copyTo("initiativesOLD");

  • remove non-initiative data fields to get a pure data collection
  • accuracy
  • bm
  • lanePath
  • onKanban
  • size
  • sublaneOffset

db.initiatives.find().forEach(function (elem) {db.initiatives.update({_id: elem._id},{ $unset: { accuracy:"",bm:"",lanePath:"",onKanban:"",size:"",sublaneOffset:"" }});});

  1. create new collection "boards"
  • will hold the instances of concrete kanbanboards => our current one will be called "b2c gaming" (formerly known as "bm" field)
  • name (string)

  • height (int)

  • width (int)

  • itemScale (float)

  • laneboxRightWidth (int)

  • kanbanStart (date)

  • kanbanEnd (date)

  • viewConfig (default visibility of layers,...)

  • itemsOnBoard (array of item references mixed with the view information per item (the ones stripped out above) [{_id:xxxxx,itemRef:_id from initiative,itemViemInfo:{lanePath:xx,size:xx,sublaneOffset:xx,accuracy,}

  • lanesOnBoard (array of lane references)

=> import of items as an example

console:

var _items = [] for (var i in filteredInitiativeData){var _f = filteredInitiativeData[i];_items.push({itemRef:_f._id,itemView:{sublaneOffset:_f.sublaneOffset,size:_f.size,lanePath:_f.lanePath,accuracy:_f.accuracy}})}

  1. application level join to "emulate" current needed initiativeData

[OK] have a version running "NG" mode

=> alle the filteredInititaive data becomes obsolete in "NG" !!

so i have now:

  • initiatives and boards split (mongo)
  • app level join in kanban.renderB2Cgaming()

UUUUUUUHH => das ganze admin v1sync save / remove handling muss adaptiert werden .....

split write and remove... = ganze menge TODO :o)

*** initiative becomes transient in NG mode *** just temporary data for rendering !!! *** needs to be refreshed on updates joinBoard2Initiatives


howto remove an element from array

  • search for item

var i =BOARD.items[100] BOARD.items.indexOf(i) => 100

BOARD.items.splice(100,1);


20150118

ideas:

  • lanes sollten auch referenzierbar in boards sein
  • einmal eine lane definieren - eg. bwin und je nach board in verschiedenen views anzeigen !
  • ähnlich wie mit items

lane (value stream):

  • name
  • description
  • swot ?
  • strategy pillars
  • logo
  • type (p&l, costcenter,...)
  • REF to metrics
  • REF to items ?

==> first experiment with a second board instance ..... board.id=2 board.name=studios

[IMPORTANT]

  • im boards.items.itemView => der path sollte NICHT den boardnamen drin haben sondern nur /lane1/lane2/lane3 !!

    => hab ich mal manuell im board (id=2,name="studios") gemacht und geht :-)

    => im legacy board (id=0, name="b2c gaming" sind die path noch mit "b2c gaming/lane/lane" drin...

  • switch boards without postback:

renderBoard(boardsData[1]); drawAll();


targets [TODO] refactoring

==> needs a REAL refactoring ==> raus aus items ==> bissi nachdenken

BMM

vision-> goals -> objectives

  • was sind da "targets" überhaupt ?
  • kpi / metrics

means <-> end

  • brauchen auch noch ein "path" feld !!
  • zuordnung wo sie sind analog zu items in boards

20150120

NODE express playfield

  • created in /express folder

  • npm install express --save

  • npm install -g nodemon => start apps now via nodemon !

  • doing some tutorial stuff

http://cwbuecheler.com/web/tutorials/2013/node-express-mongo/


kanbanexpress

  • fileupload working
  • login with bootstrap testing

20150121

kanbanexpress

  • session handling

  • login

  • base for kanban views / routes

  • update PROD kanban with portfolio changes => history.xlsx

[TODO] upload and checker for portfoliogate excel

=> only show items with v1 status = "Implemnetation" d3.select("#items").selectAll("g").filter(function(d){return ((d.status!="Implementation"))}).style("visibility","hidden")


further refactored

  • kanban_core

=> ITEMDATA_NEST no longer needed in "NG" !

20150123

start a new branch of kanban js package for the express version

=> includes all NG features => reomve all legacy features => v2.0 => directly edit out of kanbanexpress dir

refactor all GLOBAL js variables to be stored in one of the available HTML5 resources

  • sessionStorage

=> replace global var AUTH with getAUTH() call (in kanban_util.js)

=> started to get the save functions to work:

  • hidden form in kanban.jad

  • submit_download_form() function copied into kanban_util.js => might be better idea to introduce new "kanban_view.js" ??

  • manual call of submit_download_form("pdf"); => works but css is not handled correct

  • FIXED hack in css declaration for transcoder => in kanban_util.js

20150124


loading initiatives on the fly:

var d = $.getJSON(dataSourceFor("initiatives")); d.responseJSON = array of objects


adding bower

  • playing with bower clientside package manager
  • bower.json for kanban2.0 => wiki2html is not in github

=> added bower.json to app root http://stackoverflow.com/questions/14079833/how-to-change-bowers-default-components-folder => installs stuff into public/javascripts/components

adding grunt

http://gruntjs.com/getting-started

http://bocoup.com/weblog/introducing-grunt/

  • sudo npm install -g grunt
  • sudo npm install -g grunt-cli

[EPIC]

  • json schema
  • alpaca form
  • edit details for boards

[EPIC]

  • user / login management
  • passport node.js

[EPIC]

  • think about requireJS

[EPIC]

  • board lane handling
  • create empty board
  • add / remove / update lanes and store them in lanes

[EPIC]

  • drag drop initiatives onto new board handling

[EPIC]

  • isolate v1 initiatives
  • automated regular v1 sync

[EPIC]

  • alternative item renderer
  • whiteboard sketchy stlye vs. existing detailed planning stlye

[EPIC]

  • find a way fo kanban menu
  • refactor slidr

[EPIC]

[EPIC] package and deploy app

[EPIC] scrum tool

=> free versionone for a single project :-) https://www53.v1host.com/kathanat

learn howto work with modules in node

http://nodejs.org/docs/latest/api/modules.html

quite simple

  • create a file "module1.js"
  • is like a class => e.g. if you declare a var x in this file thsi will stay private
  • interfaces are exposed via "exports.myInterface()"

and the consumer just references the module with

  • var module1 = require ("module1.js")
  • module1.myInterface()

===================================================================

  • npm install jsdoc -g => does not work

  • sidr

$.sidr("close")