Skip to content
gerold kathan edited this page Jul 2, 2015 · 14 revisions

20150212

V1Service

  • encapsulated services around V1Epics

learning to writer proper async functions

  function doSomething (inputParam,callback) {
  // do stuff
  callAnother asyncFunction(function(err , docs){
  		// do more stuff		
  		callback(returnObject);
  		// important to return after callback as control flow would continue
  		return;
  );
  }
  // do stuff
  return;
}

call it:

doSomething("my param",function(returnObject){
  // do something with my returnObject
});

portfoliogateview health snaphoting

[DONE] :-)

  • stores on import snapshots of Health and HealthComment
  • to track health changes over time

material design colors

http://www.materialui.co/colors

20150211

  • detached from dropbox
  • deleted dropbox dev folder "kanbanexpress"

material design

http://fezvrasta.github.io/bootstrap-material-design/bootstrap-elements.html

bower install bootstrap-material-design

phantomJS nodeJS integration

https://github.com/sgentle/phantomjs-node

=> experiment in routes/users.js => not working yet

remote killing and starting express nodeJS app

thänx to lukas

bash shell script

#Find the Process ID for www running instance
echo "....trying to kill running s2t instance"
PID=`ps -eaf | grep 'node ./bin/www' | grep -v grep | awk '{print $2}'`
if [[ "" !=  "$PID" ]]; then
echo "killing $PID"
kill -9 $PID
fi

cd s2t
. ~/.bash_profile
nohup npm start > /dev/null 2>&1 &

20150210

writing my first own express middleware

var addconfig = require('./services/middleware/addconfig.js'); app.use(addconfig());

[TODO] bpty mailrelay does not work

  • CERT UNTRUSTED ??

howto build robust nodejs apps

git tag tag 2.0.0

clean install

  • install git
  • install nodeJS
  • install mongodb ** what else to prepare
  • npm install -g bower
  • npm install -g grunt
  • npm install -g grunt-cli

checkout s2t from git

=> fixed some missing dependcies and files => now [OK]

git clone https://github.com/gkathan/strategy2tactics
cd strategy2tacics
npm install 
bower install (2 resolves: latest bootstrap + old other)
  1. eonasdan-bootstrap-datetimepicker#3.1.3

  2. bootstrap#~3.3.2 which resolved to 3.3.2 and is required by kanban

  • npm start

20150209

migrate from underscore.js to lodash.js

Grunt stuff

** https://github.com/kyrstenkelly/grunt-timestamp-release ** [STORY] migrate from Ant to GRUNT

** grunt zip = https://github.com/twolfson/grunt-zip npm install grunt-zip --save-dev ** grunt scp = https://github.com/spmjs/grunt-scp npm install grunt-scp --save-dev ** grunt ssh = https://github.com/chuckmo/grunt-ssh npm install grunt-ssh --save-dev ** grunt exec = https://github.com/jharding/grunt-exec npm install grunt-exec --save-dev

task DEPLOY

(1) init - create timestamp (2) zip deployment package + rename with timestamp (3) copy package to archive (4) deploy (4.1) scp file="${TARGET}" todir="gkathan@cloud.ea.bwinparty.corp:/home/gkathan/" password="***" port="22" trust="true" (4.2) sshexec host="cloud.ea.bwinparty.corp" username="" password="*******" command="./deployv2.sh" trust="true" port="22"

alpaca experiments

in test.html

phantomjs - capture multiple sites

v1 api ouath2

http://community.versionone.com/Developers/Developer-Library/Documentation/API_Authentication/Oauth_2.0_Authentication/Using_OAuth_2.0

http://v1.bwinparty.corp/V1-Production/oauth.v1/auth?response_type=code&client_id=client_fo8d2rsj&%20scope=apiv1%20query-api-1.0&redirect_uri=http://localhost:3000/

=> returns a code => code is valid 1 minutes

code needs to be sent to http://v1.bwinparty.corp/V1-Production/oauth.v1/token

?code=68ZP%21IAAAAEDMrHJUYFC4803T89ats6p_pNdxc4PNvGan8A54Oqwp8QAAAAGT7OoEzzgHcEVv61UszI4hQEJnIGeMWg8Nhlu-qgoLPZfadBNL3MdhXqvX9WsVCBlec_KDmxAtq9a2xun3HVR7DmGVifokOdqhBeUoC0o3hT8I26OIz4B-UxoovQV2a-pAiFVrTqAgZbq7qcCfSLys0tq99UjY2cPzL6APUnCHm-azlFQNouwtMMSEopZTVTWMvH7uM3kRX4npZWbWs-nF261wRkwqnlJbYmYdd7quyIN4wljN4md3sl80PTgTbFpaBaq3nHx2PO5GvW6xoTyGj0e3cxjswcEWv1c7XvyBxdD1n5yq7fGPDio24LWvhxE

v1 epic attachements

v1 api stuff

20150208

  • config ** expose config via REST API ** for client javascripts ** .../api/config

  • fixing excel exports and admin views

[EPIC]

  • passportauth + private boards as default
  • publish boards
  • connect login bpty user to targets etc..

20150206

how to monitor express app ?

sending emails from node

exporting modules / functions

environment specific config

  • https://github.com/lorenwest/node-config

  • yep works also on windows

  • requires a environemnet variable set to describe which environment we are on ** default ** stage ** production

  • in windows => advanced settings -> set environment variable NODE_ENV

  • in linux export NODE_ENV = production

20150205

  • start npm on PROD

ps aux |grep node kill -9 processID nohup /opt/node/bin/npm start &

  • mongo /opt/mongodb/bin/mongorestore --drop -d kanbanv2 kanbanv2

20150204

integrating employee data / pictures

=> there is a profile page per employee accessible on

https://my.bwinparty.com/People/H/HaasJefferyE7635.aspx

https://my.bwinparty.com/People/K/KathanGeroldE2988.aspx

https://my.bwinparty.com/~/media/651906AE6469400A9A55AD99426BE8FC.ashx?h=125&la=en&w=100

portfolio delta check

  • mark initiatives which have a different state compared to previous set

=> for every state for every item check item.STATE from previous date if (==) nothing if (!) mark and add previous state

20150203

  • learning Q (promises async handling)

  • https://github.com/bellbind/using-promise-q

  • and apply in phantomJS based image scraper ==> Q is quite weird ==> using async instead

  • fixed admin.js column filter ** is now checking that searchstring in column is part of ++ [works]

  • phantomJS 2.0 released ...

  • fixed plain excel upload/import ** implemented blank cell filler for excel

  • integrated incidents ** trying to enhance the REST API with filters ** e.g db.incidents.find({"Incident state":{$ne:"Closed"}})

[ok] took a while but here we go

  • now just included in generic findAll api method

e.g.

v...value o..operator n...name

http://localhost:3000/api/kanbanv2/rest/incidents?n=Incident%20state&o=$ne&v=Closed

[TODO] _handlePlain in upload

  • // !!!!!!!!!!!!! NEEDS some REFACTORING as it always fills up blanks now !!!! // also when i do NOT want it ;-)

fixed handling of upload

  • response and rendering of success
  • handling of "fillblanks" = now optional in xlsx filename (e.g. productcatalog)
  • and some other tweaks

different start scripts / nodemon

  • added additional script in package.json "startDEV" => calls nodemon instead of node
  • npm run-script startDEV

=> it is time to checkin the kanbanv2 to GIT

20150202

  • YEEES - rsvg transcoder works !!!!!

  • sorting in portfoliogate [done]

  • split & refactor kanban_items.js

  • split in 3 parts: ** kanban_items.js ** kanban_targets.js ** kanban_postits.js

20150201

learning jade

  • time for my first "mixin"
  • in menu_switch_visibility.jade

https://github.com/walling/node-rsvg

  • experiment to reimplent batik transcode in nodejs

  • sudo apt-get install librsvg2-dev

  • npm install rsvg

wui :-) works - but stylesheeet yet only working when inlind...

=> would need to embed and pump the kanbanv2.css into the CDATA section

<style type="text/css" > </style>
  • created new api/ endpoint to receive the POST data from kanban save/transcode form (submit_form_..) ** in api.js under new route /api/kanbanv2/transcode

20150130

http://jsonschema.net/#/

=> starting alpaca forms with NEW BOARD

http://www.alpacajs.org/demos/form-builder/form-builder.html

  • test deployment on PROD ** new domain = http://kanbanv2.ea.bwinparty.corp/ ** just copied kanbanexpress directory ** on npm start => i get ERROR npmlog not found ** upgrade node version on server [OK] now

deployment for kanbanv2

adapted build.xml and put it into kanbanv2/ express dir

ant deploy:

  • zips
  • scps
  • execute deployv2.sh on remote
  • stop app
  • unpacks
  • and starts app

D3 stuff

sticky force d3 https://github.com/mbostock/d3/wiki/Force-Layout

http://bl.ocks.org/mbostock/3750558

multi force http://bl.ocks.org/mbostock/1021953

directed: http://www.d3noob.org/2013/03/d3js-force-directed-graph-example-basic.html

20150129

  • successfully migrated firts org diagram to kanbanexpress ** org_tree [OK] and working

  • trying to fix/refactor the upload/import stuff ** currently hardcoded for pgates in app.js

** need to extract the multer handling somehow ** [OK] moved all multer and upload handling into routes/upload.js :-) ** and next comes the different handling of import based on a filename convention for the uploads

[OK] done

but some of the excels e.g. 2013-04-29 are not inserted .. ?????

v1epic syncer

  • scheduled task which every x minutes just writes current snapshot of v1 knbproxy list into mongoDB

  • create a REST API interface => /sync/v1/epics

  • [OK] works => now syncing every 5 minutes into v1epics colection => also used for join in portfoliogate view

[TODO] check diff between portfoliogates [TODO] check which boards an epic is on => join with boards[].items

[EPIC] global app config

  • e.g. config of v1_sync scheduler

  • global context variables .. =>

  • did some phantomJS screen capturing => in old kanban/js/phantomjs/capture.js :-)

20150128

  • bootstrap dropdown box in kanban_menu

!!!!! excel export crashing => it boiled down to a NEWER version of exccel-export module !!!! 0.4 instead 0.3.11 => fixed version my express package.json to 0.3.11

20150127

/routes/api.js

  • fixing admin remove handling

http://justinklemm.com/node-js-async-tutorial/ ** npm install async ** learming how to do a async.foreach()

[OK] works for remove :-)

  • migrating save handler ** ported legacy async code [OK] ** should be refactored with async.series()...

20150126

  • nodejs v1 experiment

=> in V1-> memberdetails -> permitted app management => got client_secret

{ "installed": { "client_id": "client_fo8d2rsj", "client_name": "v1nodegateway", "client_secret": "khyw6wf2e2cp2wd7dgqg", "redirect_uris": [ "urn:ietf:wg:oauth:2.0:oob" ], "auth_uri": "http://v1.bwinparty.corp/V1-Production/oauth.v1/auth", "token_uri": "http://v1.bwinparty.corp/V1-Production/oauth.v1/token", "server_base_uri": "http://v1.bwinparty.corp/V1-Production", "expires_on": "9999-12-31T23:59:59.9999999" } }

snow integration

https://snow.bwin.corp/cmdb_ci_service_list.do?JSON

https://snow.bwinparty.corp/incident_list.do?JSON

migration of admin and v1sync php files

  • bower install slickgrid => had to fiddle a bit to get the css sytles back => created admin.css and copied the inlined syles from admin.php & the slickgrid.example css together ;-)

=> handling for custom extensions of slickgrid.... ==> created folder "extensions" in /javascripts ==> slick.formatters have some extensions ==> !!! had to use a older version of bootstrap due to jquery 1.7 dependcy from slickgrid..

[OK] admin works now

[TODO] => looks like that v1sync can be merged into admin => most of the stuff is the same => just some sync and compare methods in addition...

adding collection in kanbanv2 - "v1epics"

  • direct sync from v1gateway/prxy

  • auto / scheduled sync of this data to have it locally in mongodb

  • initial import from json

=> can act as a local "mock" gateway fo v1data... => in /v1nodegateway/v1epics => changed in kanban_config.js V1_DATA_URL... ... took me 3 minutes :-)

[OK] boards admin (at least the flat attributes, the itemview sub config i need to think of...)

[STORY]

  • save, del in admin/

[STORY]

  • reorganize organization collections into one ** sub fields for date of import (ala pboard..)
  • excel import / upload (+ refactoring=

20150125

  • cleaning up javascripts / css

  • all (except wiki2html) now integrated via bower

  • cleaning up kanban js code ** remove all RUNMODE / LEGACY STUFF ** new v2.0 headers

  • copy mongoDB to "kanbanv2" and adapted all db calls ** kanban_node_gateway ** express controllers

[ok]

next refactoring - migrate restify based kanban_node_gateway into express app

  • goal is to have just one node.js process running hanling all server side stuff

=> explicit route

  • "api/"

[OK] step-1

  • findAllByName, FindById migrated from gateway to express/api

http://localhost:3000/api/kanbanv2/rest/ etc

  • board works with legacy MONGO_GATEWAY :-)

next step-2 write / save / delete for admin and syc => but first also admin un v1sync from php to nodejs...

20150124

loading initiatives on the fly:

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

npm install

always include --dev-save = adds into dev package.json

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

https://www.digitalocean.com/community/tutorials/how-to-setup-task-automation-with-grunt-and-node-js-on-a-vps

[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 => done 20150129

[EPIC]

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

[EPIC]

  • find a way fo kanban menu
  • refactor slidr
  • [done] 20150201

[EPIC]

[EPIC] package and deploy app

[EPIC] scrum tool

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

  • uid: *****
  • pwd: ***********

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")

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

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" !

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

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

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);


20150116

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 :-)

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

continuation from https://github.com/gkathan/kanban/

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