Author Archives: pgfeldman

Dong Shin 05.11.2010

  • charts for each dataset now displays $ figures only – removed % figures
  • InvoiceFormWindow changed to have individual items added to the list and manage items
  • removed all message Alerts when saving data….
  • To install the Java development tools in the standalone version of Flex Builder:
  1. Use the Help > Software Updates > Find and Install menu command to open the Install/Update dialog box
  2. Select Search for new features to install.
  3. Click Next.
  4. In the results, choose Europa Discovery Site.
  5. Click Finish.
  6. Select the Java Development package to install.
  7. Click Next.
  8. Accept the license.
  9. Click Finish.
  • trying to track down slow data retrieval

Dong Shin 05.10.2010

  • deployed ProjPortfolioMgr to Phil’s PC
    • created projportfolio user and grant permissions – make sure MySQL restarts!!!!!
  • The crash problem on Charts may only be in DEBUG….
  • checking out are building Visibility 2 for the IngestMgr trouble-shooting
  • Continue w/o Invoice added to InvoiceFormWindow
  • added $ Goals to the FinancialDataGrid – calculated from % and fundingAmount

Phil 5.10.2010

7:30 – 4:30

  • Prepping for demo
  • Got dong’s war file deployed on my machine. That works, rather than building. He’s going to ask Mike to try building and see where the problem lies
  • Problems with ie today – it can’t open multiple Flex programs.
  • Spent some time getting the projmanager user working in mySql
  • better pull for errors: SELECT p.title as project, f.name as funding, o.* FROM obligations_outlays o, fundings f, projects p;
  • IngestManager problems:
    • Can’t parse special characters into column names or the values can’t be inserted properly in the column. For example, ‘2/15/60’ won’t read in at all, ‘2-15-60’ won’t have any data in the columns, and ‘2_15_60’ is a date format that Actionscript can’t recognize
    • If the XML SOLR file has CRs in the text file, they are kept, which screws up VISIBILITY. They need to be stripped.

Script to look for decreasing values in outlays:

# Strip off a column based on its name
def stripColumn(headers, table, columnName):
    newRow = []
    for item in headers:
        if item != columnName:
            newRow.append(item)
    newTable = [];
    newTable.append(newRow)
    for row in table:
        newRow = []
        for i in xrange(len(headers)):
            if headers[i] != columnName:
                newRow.append(row[i])
        newTable.append(newRow)
    return newTable

# Find a month that is less than the previous
def errorsToSolrXml(doc, root, header, table):
    for row in table:
        for i in xrange(len(row)-1):
            if header[i].count("month_") > 0:
                cur = int(float(row[i]))
                next = int(float(row[i+1]))
                #print row[0]+": "+header[i]+" = "+str(cur)
                if(cur > next):
                    #print header[i]+" = "+str(cur)+" > ("+str(next)+")"

                    errorNode = doc.createElement('doc')
                    root.appendChild(errorNode)
                    fieldNode = doc.createElement('field')
                    fieldNode.setAttribute('name', 'type')
                    textNode = doc.createTextNode(str(row[0]))
                    fieldNode.appendChild(textNode)
                    errorNode.appendChild(fieldNode)

                    fieldNode = doc.createElement('field')
                    fieldNode.setAttribute('name', 'cur_month')
                    textNode = doc.createTextNode(header[i])
                    fieldNode.appendChild(textNode)
                    errorNode.appendChild(fieldNode)

                    fieldNode = doc.createElement('field')
                    fieldNode.setAttribute('name', 'next_month')
                    textNode = doc.createTextNode(header[i+1])
                    fieldNode.appendChild(textNode)
                    errorNode.appendChild(fieldNode)

                    fieldNode = doc.createElement('field')
                    fieldNode.setAttribute('name', 'value')
                    textNode = doc.createTextNode(str(cur - next))
                    fieldNode.appendChild(textNode)
                    errorNode.appendChild(fieldNode)

#################### 'main'

impl = getDOMImplementation()

jf = ScriptFacades()
table = jf.dbQuery('project_portfolio', 'SELECT * from obligations_outlays where project_id=1 and year=2010')
tableData = table.getTable()
newTable = stripColumn(tableData[:1][0], tableData[1:], 'uid')

errorDoc = impl.createDocument(None, "add", None)
root = errorDoc.documentElement
errorsToSolrXml(errorDoc, root, newTable[:1][0], newTable[1:])
#print errorDoc.toprettyxml()
jf.publishXml("/obligation_errors.xml", errorDoc.toxml())

Dong Shin 05.09.2010

  • chart for all obligation / overlay data added – crashes when mouse over at multiple points intersect…..
  • funding now supports to FY14
  • worked down the list from the meeting….. Project Creation works!!!!!!!!!!!!!

Dong Shin 05.08.2010

  • reworked calculation of the percent cells
  • order of rows organized by obligations and outlays
  • fixed bug caused by FORMAT (col, 2)…
  • Summary Panel reworked for the new data structure
  • Project Viewer is pretty much done!
  • started on Project Creation

Dong Shin 05.07.2010

  • financial data editing works
  • new obligation/overlay types
  • invoice data entry works – need to make it addable
  • DataGridFormWindow almost finished – need to customize for each entry type

Phil 5.7.2010

7:30 – 5:30

  • Working on writing a script that does something with Dong’s data

Inserting data for months – no invoice though

jf = ScriptFacades()

table = jf.dbQuery('project_portfolio', 'SELECT uid from obligations_outlays where project_id=1')
tableData = table.getTable()
print tableData[1:]

for uid in tableData[1:]:
    for month in xrange(1,25):
        monthName = 'month_'+str(month)
        query = 'UPDATE obligations_outlays set '+str(monthName)+' = '+str(random.randint(1000,2000)*month)+' where uid = '+str(uid[0])
        print query
        jf.dbQuery('project_portfolio', query)

Getting data and publishing

# This method converts a DbTable (A list of lists) into an Apache SOLR xml document
def solrXmlFromListList(doc, root, headers, table):
    for row in table:
        rowNode = doc.createElement('doc')
        root.appendChild(rowNode)
        #print row
        for i in xrange(len(headers)):
            #print str(headers[i])+" = "+str(row[i])
            fieldNode = doc.createElement('field')
            fieldNode.setAttribute('name', headers[i])
            textNode = doc.createTextNode(str(row[i]))
            fieldNode.appendChild(textNode)
            rowNode.appendChild(fieldNode)

# Strip off a column based on its name
def stripColumn(headers, table, columnName):
    newRow = []
    for item in headers:
        if item != columnName:
            newRow.append(item)
    newTable = [];
    newTable.append(newRow)
    for row in table:
        newRow = []
        for i in xrange(len(headers)):
            if headers[i] != columnName:
                newRow.append(row[i])
        newTable.append(newRow)
    return newTable

# Change month_xx to a year/date string
def mapDates(row, year):
    for i in xrange(len(row)):
        if row[i].count("month_") > 0:
            splits = row[i].split('_');
            month = (int(splits[1])-1)%12
            addYear = (int(splits[1])-1)/12
            row[i] = str(month+1)+"-1-"+str(year+addYear)
            #print row[i]

#################### 'main'

jf = ScriptFacades()
table = jf.dbQuery('project_portfolio', 'SELECT * from obligations_outlays where project_id=1 and year=2010')
tableData = table.getTable()
newTable = stripColumn(tableData[:1][0], tableData[1:], 'uid')

mapDates(newTable[:1][0], 2010)

impl = getDOMImplementation()
myDoc = impl.createDocument(None, "add", None)
rootElement = myDoc.documentElement
solrXmlFromListList(myDoc, rootElement, newTable[:1][0], newTable[1:])
#print myDoc.toprettyxml()
jf.publishXml("/obligation_outlays_proj_1_year_2010.xml", myDoc.toprettyxml())

Phil 5.6.2010

7:30 -4:30

  • Today, in 1862, the Mexican Army defeated the French at the battle of Puebla. In case you were wondering.
  • Richard M is getting Tomcat working better on the LDAT server. We will be ready to continue experimenting in a week or so.
  • While waiting for Dong to roll in his changes from yesterday, I’m going to try and fix the case where the JVM holding a jython instance dies from some fatal error. Wound up deleting the ScriptEntity instance from the static map of all script instances and loading a new instance. Seems to work, but we need to test on other servers.
  • Got Dong’s data, but the project will not build

Mike 5.6.2010

  • Created two new tables for storing slideshows and references to their slides, have sql update script for updating database
  • Implemented the following methods in UsersAndRoles for interacting with the DB:
    • addSlideShow
    • deleteSlideShow
    • getSlideShow
    • updateSlideShow
    • getSlideShowTree
  • Look at Phil’s comments:
    • will add create table script to… somewhere
    • will try putting slide controls in open space at the top and have them only appear once a slideshow is loaded
    • Transitions will be TOUGH, but hey, I need stuff to work on anyway

Dong Shin 05.06.2010

  • invoice table modified per Trisha’s email
  • funding add/remove working – add data upon funding add
  • FinancialDataViewer modified and working
  • checked in and tried deploying on Phil’s — not compiling.
  • reinstalled Flex Builder to clear out… need to reinstall SVN
    • Help -> Software Updates -> Find and install…
    • Click “Search for new features to install” then click Next
    • Add the following remote sites:
      • Name: (whatever you like, I used “Subclipse”)
      • URL: http://subclipse.tigris.org/update_1.6.x
      • Name: Mylyn
      • URL: http://download.eclipse.org/tools/mylyn/update-archive/3.2.1/v20090722-0200/e3.3
    • Check “Mylyn“, “Subclipse” and “Europa Discovery Site” then click “Finish”
    • Check the whole “Subclipse” tree
    • From the “Mylyn” tree select everything except “Java Development” and “Plug-in development
    • From the “Europa Discovery Site” group open the “Graphical Editor and Frameworks” tree and select “Graphical Editing Framework

Dong Shin 05.05.2010 – notes from meeting

 

Highest priority are to prep for demo.
  1. Fix invoice entry to be direct, with room to add comments
  2. Fix the math for summing FY projects instead of summing by funding sources
  3. Fix percentage math as a percent of total $$, rather than doing the math on the percentage value itself
Notes from the meeting in order they were taken.
  1. Revamp project creation to match notes on whiteboard (more detail below)
  2. project description should have 5k bytes
  3. Portfolio Managers, Financial Managers, and supervisors should be able to read/write any project or just see their projects
  4. Create a “pending” user, with an access level of NONE, that is then approved to their operational level
  5. Data needs to refresh better.
  6. Enter multiple invoices in a table (to be defined in an email soon) as a direct entry
  7. Check math on summing of % (sum by $ value, then calculate new % against total $)
  8. Sum within FY $, not by budget center/type
  9. Change GUI to reflect “new” format
  10. % rows should be based on the percent of the total $ allocated
  11. add comments to “invoice” table
Project Creation should now be Create/Edit project.
  1. When a user clicks on Create/Edit projects, he should see a list of current projects. If he does not see his project there, he clicks on a “create new project”
  2. The user enters a project name in a field if creating.
  3. Project Table consists of budget center, appropriation, type, and FY collumns. The user may insert as many FY columns as desired, which sort in order.
  4. Budget center is a dropdown. If the budget center is not in the list, The user can select “Add new”, which brings up the budget center table (Title -“NRL’, Number-“A6497”, Service-“Army”). Creating a new row here then adds the budget center to the Project Table
  5. Appropriation is a text field (though my bet is that they want the same dropdown as a described for budget center table)  – added as ComboBox
  6. Type can be PRIME, COFUND, or VFR
  7. FY Columns have the budget for that fiscal year. There may be zero or more columns. Columns are added by clicking an “add FY Column” button that has a (required) field for the FY. Columns are inserted into the table in order. Once added, the user can input the budget in a row.
  8. It would be nice if there was no “add row” button. A row is added once a user starts typing in a blank row? Regardless, rows will have to be validated for budget center, type, and appropriation before the project is created/updated
  9. Transition Table has Type, Start, Current, and End columns. The Start Column has the value at the beginning of the project, The Current Column has the current value (can be saved for trending but not required), and the End column contains the final value.
    1. Type can be Technology Readiness Level (Single), Transition Commitment Level (Single), or Transition Parner (Multiple).
    2. Technology Readiness Level has a 1 – 9 range, that apparantly maps to a worrd table.
    3. Transfer commitment Level has a 1 – 3 range
    4. Transition Partner is a string value. A partner may be copied across the entire row, or exist only in one column.
  10. There is a list of all th services that have a stake in this project – created CheckBoxes
  11. The is a priority value (0 – 999) for the project

Phil 5.5.2010

7:30 – 3:30

  • Some thoughts on Mike’s slideshows
    1. Make sure that the changes/additions to the db happen automatically when the class is first addressed (CREATE TABLE IF NOT EXIST foo()) doesn’t seem to take much overhead. That way, deployment will be easier.
    2. I was thinking that the slide show controls would be another Utils panel that could be hidden as needed.
    3. Selectable transitions (fade, slide vertical, slade horizontal, etc) would be a plus
    4. Maybe the slide controls can live in the top part of the display and be hidden unless needed?
  • Brought in EdgeUtils for Clift
  • Meeting with Jim M, Trish ? and Dong. Lots of changes, as can be seen is his log entry.

Dong 05.05.2010

  • checked out ProjPortfolioMgrServer, built, deployed – seems working fine
  • dbAdmin account created for rebuilding ProjectPortfolio database rebuild/initialization
  • meeting with Jim Murphy – lots of changes….

Mike 5.4.2010

  • Connected to new SVN, checked out and built everything after a little bit of work.  Haven’t tried committing anything yet.
  • Started working on slide shows:
    • Mapped out methods to save slide shows to database but haven’t decided on a table structure yet, probably going to add 2 new tables: one with all the slide show details similar to the dashboard table and a second containing several foreign keys (a slideshowID, dashboardID) and an int holding the order.  So there’d be one entry in the first table per slide show and an entry in the second table for every view in every slide show.
    • Started working on a slide show creation/edit screen.  It’s going to have a list of available views on the left which can be dragged to a list of included views on the right.  The order can then be changed by dragging as well.
    • Finally I’ve only started thinking about the slide show controls. It’s obviously going to need a next and previous button as well as some kind of timed auto next and probably a “jump to” drop-down since going from view to view will not be nearly as fast as say a powerpoint presentation.  It will also need to be compact and draggable (unless I put in in the empty space along the top near the logo).

Open to suggestions on any of this stuff.

Phil 5.4.2010

7:30 – 4:30

  • Svn is working, but the check in is not working in Eclipse. Attempting to update svn plugin, but things are hanging. May have to say goodby to svn integration. Dong has Subclipse working. Will switch to that later. Tortoise for now
  • Call Richard Martin – 443.479.8721
  • Got Visibility and VisibilityScripting checked out and running