IDempiere/FullMeeting20120328

From WikiQSS

Table of Contents | Full Meeting Minutes | Full Meeting 2012-03-21

Nicolas__: Hi
CarlosRuiz: Hi Nicolas
a42niem: hi all
CarlosRuiz: Hi Dirk
tbayen: Hi all
CarlosRuiz: our weekly meeting start in 30 minutes
CarlosRuiz: Hi Thomas
tbayen: OK - let's talk about time zones in idempiere. ;-)
a42niem: sure - summertime here - i forgot
a42niem: hallo Thomas
tbayen: Hi Carlos, Hi Dirk (Hi to the baker).
a42niem: :)
CarlosRuiz: :-) second sunday of march? DST?
a42niem: last sunday of march CET -> CEST
a42niem: nobody needs it...
tbayen: The idempiere team timezone seems to be Bogota time. (honor to whom honor is due)
CarlosRuiz: we have had this problem always - worldwide project - so we decided to always call for meetings in GMT or UTC
CarlosRuiz: http://demo.idempiere.com updated to latest changes
mzuniga_ergio: hi everyone!
CarlosRuiz: Hi Marcos
andygraybeal: is the install for idempiere the same for adempiere? or is there difference?
CarlosRuiz: do you mean the installation instructions? there are differences
CarlosRuiz: Hi everybody
red1: we have to change daylight time.. to follow Bogota 8am i think as 7am for Bogota is too early
CarlosRuiz: Hengsin - you proposed some dates to achieve the may-day release - when is the freeze going to start?
red1: so it should be GMT 2pm now?
CarlosRuiz: ah, I found the doc - april 2 feature freeze
CarlosRuiz: so, we're very close to the feature freeze
CarlosRuiz: I would like to see in this first version some jira tickets that we have talked on previous meetings:
CarlosRuiz: Nicolas__, do you want to restart the idea of IDEMPIERE-129?
Nicolas__: Yes, i could find some time to work on it
CarlosRuiz: I would like to complete and integrate also IDEMPIERE-177
a42niem: ok
andygraybeal: i know it doesn't matter in this channel, but i'm installing (or tryign to install) SmartPOS as we speak (hooray for me and such niceness things)
CarlosRuiz: :D
andygraybeal: :)
CarlosRuiz: those two are my preferred to integrate before the feature freeze
CarlosRuiz: any other candidate (meaning new feature, not bugs)
andygraybeal: CarlosRuiz thank you for answering about the difference in installation
CarlosRuiz: Nicolas__, last time we talked about IDEMPIERE-129 I was going to create a table for you - right?
Nicolas__: yes
CarlosRuiz: so, I'll try to do it right now - let me check - and we'll restart from here
Nicolas__: fine
red1: Carlos, do you want me to change the meeting time to suit yours better?
CarlosRuiz: red1 - GMT doesn't have summer time - or must we refer to it as UTC?
red1: as long as it suits your time better.. you are they key person here
tbayen: Hmmm... "universal daylight saving time" - an interesing philosophical concept.
red1: tbayen: we want a time that stays put
CarlosRuiz: my comment is -> Time: 13:00 GMT is fine - as I understand GMT timezone doesn't imply DST - if it implies, then we can express it as Time: 13:00 UTC
red1: Does the European times recalculated today to one hour earlier for GMT 1pm?
red1: ok.. if UTC is more clearer.
tbayen: In winter the meeting is at 14, now it is at 15 o'clock. Did you mean that information?
tbayen: (in german time)
red1: yes tbayen
red1: so what time is it there 32 mins ago?
red1: so is expressing in UTC clear?
tbayen: Yes, it is clear. For europeans it is a comfortable time.
a42niem: <nit-picking comment> i don't think, UTC has the concept of am and pm</nit-picking comment>
red1: nit picking accepted
red1: do i need to add the 'hrs' word?
CarlosRuiz: :-) I like the xml notation for the nit-picking - very geek :-D
CarlosRuiz: Nicolas__, revisiting IDEMPIERE-129 I think we're complicating too much the idea
Nicolas__: why ?
tbayen: red1, this is nice.
CarlosRuiz: maybe we can adopt a lazy notation to name restrictions on the restriction table - for example - ClassName.objectName - if there is a record in the restrict table for such class/object then it's restricted
CarlosRuiz: my thinking is that making it strict (compelling to create one record in such table per each visual component added in toolbars, forms, etc) - creates too much burden on dev shoulders
CarlosRuiz: making it lazy doesn't add workload - but of course open the doors for other problems - but also allows more flexibility to use it even on customized classes
CarlosRuiz: so - I'm thinking back to your original idea of having just one table AD_ToolbarMenuRestrict - but, instead of the columns Action+Restriction - we can have two open text columns for classname and objectname
CarlosRuiz: WDYT?
Nicolas__: why don't we have both ?
Nicolas__: why can't we have both ?
Nicolas__: A pre configured list, and some open text to allow customization ?
CarlosRuiz: reading your doc I suppose your idea of Action and Restriction is based on a dictionary List
Nicolas__: there could be 2 levels : the first one where users can't broke anything because they just make a selection in list; and a second one (for advanced users)
Nicolas__: yes, a reference, which contains all buttons
CarlosRuiz: ah - but this functionality is very harmless - adding wrong records there doesn't make harm
CarlosRuiz: just the user won't get the expected results (hiding a button) - but it won't make harm
Nicolas__: By now, there is 28 items in the list
Nicolas__: in the code, i got for every one :
Nicolas__: else if (ToolbarAndMenuType.equals(X_ToolbarMenuRestrict.TOOLBARANDMENURESTRICTTYPE_Menu_Help)) menuBar.remove(menuHelp);
Nicolas__: you have some code to add buttons ; and new code to remove
CarlosRuiz: yep - if we make it lazy - you just need to change the code in one point
andygraybeal: why do you think that pedro put everything into /apps/java intead of /opt ?
andygraybeal: in his demo
Nicolas__: at least 2 : APanel and Viewer
CarlosRuiz: I mean - you could just make the validation on APanel.addAction
CarlosRuiz: and for zk in CWindowToolbar.createButton
Nicolas__: don't think you can do it in addAction, because you don't get the Window_ID
Nicolas__: my methode updateToolBarAndMenuWithRestriction is called from stateChanged just once
Nicolas__: this feature is not yet emplanted in Web
Nicolas__: Don't forget Viewer ; sometime you may want to hide some buttons to user (like customizations, create new print format, ...)
CarlosRuiz: yep - same principle - you search for class / button in the restriction table
Nicolas__: for one record in the table, i can fill : role, then 'Window/Form/Viewer'
Nicolas__: if i select 'Window', i can select only one
Nicolas__: and then, i pick the restriction (eg : Button New, Save, ... Info Product, ...)
CarlosRuiz: do you mean you can restrict one button on the toolbar for "Product" window - but not for "BPartner" ?
Nicolas__: Yep
CarlosRuiz: ah - sorry - that was not clear in the doc
Nicolas__: Either your restrictions is applied for one particular window or every window
CarlosRuiz: but I think it still can work - window (optional) and class+object (lazy - not list)
CarlosRuiz: even if you don't select a window can mean that you restrict in every window
Nicolas__: Yep, both can coexist
Nicolas__: that's right
CarlosRuiz: yes - the problem is that we make the table maintainable for technicals - not for end-users
CarlosRuiz: let's go back to your first original idea
Nicolas__: If we create the table with a reference list that covers every button of the toolbar, every user can use it.
CarlosRuiz: you have Action (Window/Form/Report)
Nicolas__: We can add later those 'open' text fields
Nicolas__: Yes, i have Action
CarlosRuiz: when user selects Window you have a field called window (optional)
Nicolas__: yes
CarlosRuiz: and you have this Restriction list
Nicolas__: yes
CarlosRuiz: maybe is simpler
CarlosRuiz: we convert the restriction list to a restriction table
CarlosRuiz: and the restriction table is maintained by System
CarlosRuiz: and it has the restriction name (as you have it there) and the class+object names
Nicolas__: Yep, it's more more evolutive
CarlosRuiz: System is maintained by technical people - by us indeed - and users could add customized things there if needed
Nicolas__: Sounds good to me :-)
CarlosRuiz: and the implementor won't need to know classes - he just select from a list
CarlosRuiz: and our class looks for the existance of restrictions by classname+object
CarlosRuiz: so, I think in your APanel - instead of the method updateToolBarAndMenuWithRestriction
CarlosRuiz: you can change the approach to check restriction table on addAction or something like that
Nicolas__: that's not possible
Nicolas__: my first though was to do it in createMenu
Nicolas__: but at this time, AD_Window_ID = 0
Nicolas__: and addACtion is called from createMenu (or correct me if i'm wrong)
CarlosRuiz: you have windowNo
Nicolas__: which seems to be equal to 0 when createMenu is called
CarlosRuiz: no - windowNo is assigned sequentially when creating the windows
CarlosRuiz: the problem I'm checking is how to get the AD_Window_ID based on the windowNo
CarlosRuiz: I think I did that somewhere
Nicolas__: ah ok i see what you want to do
Nicolas__: IMHO, the window is built (panel, statusbar, menu) the same way regardless AD_Window_ID ; and then after, tab and fields are added
CarlosRuiz: I see what you mean - AD_Window_ID = 0 initially
CarlosRuiz: yes - just in initWindow is set the AD_Window_ID
Nicolas__: and the menu is already built
CarlosRuiz: yes - we could iterate in the toolbar and menu components looking for restriction
CarlosRuiz: like you did - but in a generic way
Nicolas__: what do you mean by 'a generic way' ?
CarlosRuiz: instead of this
CarlosRuiz: if (restrict.equals(X_ToolbarMenuRestrict.TOOLBARANDMENURESTRICTTYPE_Archive))
CarlosRuiz: something like
CarlosRuiz: for each component in the menu
CarlosRuiz: if (existsRestriction ( AD_Window_ID , this.getClass.this.getClass().getCanonicalName() , component.getName) ;
CarlosRuiz: for each component in the toolbar
CarlosRuiz: if (existsRestriction ( AD_Window_ID , this.getClass.this.getClass().getCanonicalName() , component.getName) ;
Nicolas__: i'm doing the opposite
CarlosRuiz: sorry for the this.getClass duplicated - just writing very fast without too much care on the syntax :-)
Nicolas__: at he beginning of the method, i call
Nicolas__: restrictionList = MToolbarMenuRestrict.getOf(m_ctx, MRole.getDefault().getAD_Role_ID(), "W", m_window.getAD_Window_ID(), null);
CarlosRuiz: ah - yes - that's even better for performance
Nicolas__: and can gather every restrictions linked to a particular window (those with AD_System_ID = 0, those which applied to every window, and those applied for the Window_ID)
Nicolas__: and then for (int i = 0; i < restrictionList.size(); i++) {
Nicolas__: i test every restriction
tbayen: CarlosRuiz, I lost my password to jira.idempiere.com and I do not get the rescue mail. The webpage tells me to ask the administrator. Can you help me?
CarlosRuiz: sure Thomas - I can
Nicolas__: Do you want i upload my classes, it could be more simple ?
CarlosRuiz: Nicolas__, to make it generic - you could iterate on toolbar.getComponents() to get a component with the name and remove it
tbayen: Would you send me a new password?
Nicolas__: toolBar.getComponent don't have string parameter, only integer
CarlosRuiz: yes - can you please log in and change your password ? I sent your pwd in a private IRC window
CarlosRuiz: yep - you need toolbar.getComponents() and check the name for each one
Nicolas__: ok, but for removing, you have to find the menu (for instance File, Edit, Go, ...)
Nicolas__: this can be recover by this method ,
Nicolas__: ?
andygraybeal: how can i tell if a binary file is 32bit?
CarlosRuiz: not checked - but I think the menu Name - sounds like menuBar has some JMenus and each JMenu has JMenuItems - so maybe is more tricky - but feasible
CarlosRuiz: andygraybeal -> "file" command in ubuntu
andygraybeal: CarlosRuiz, awesome thank you
andygraybeal: gah, it is 32bit
CarlosRuiz: ok Nicolas
CarlosRuiz: do you have centralized ID password?
Nicolas__: Sorry, i was mistaken... y ou have two things to remove : buttons and menu ;
Nicolas__: button don't need the menu to be removed ; menu needs it
Nicolas__: no, don't have centralized password
CarlosRuiz: yep - JMenu and JToolBar
Nicolas__: Correct !
Nicolas__: I will try to enhance my method to make it more 'generic' and give you result ; but do you want i upload them by now ?
CarlosRuiz: sure
CarlosRuiz: I'll create the tables / windows we have chatted with centralized ID - and some entries - and if you want I'll assign you centralized ID password to complete the entries on restriction table
CarlosRuiz: right?
tbayen: Nicolas__, where will you upload? I would like to have a look at it.
Nicolas__: Don't know where to upload ; any suggestion ?
Nicolas__: ok CArlos, sounds ok to me
CarlosRuiz: nmicoud is your user - right?
Nicolas__: yep
tbayen: Nicolas__, I wanted to do my own "fork" in the next days. I thought about using my sourceforge project. CarlosRuiz, do you have a better idea?
CarlosRuiz: ready Nicolas__, sent you an email with the pwd
Nicolas__: email received
CarlosRuiz: tbayen, easier to fork on bitbucket
CarlosRuiz: just pushing one button
tbayen: My work is still based on adempiere361. I don't know if it is the right time to migrate. Is it worth the extra work?
Nicolas__: (this customization is also based on 361)
tbayen: But bitbucket is the new OSGI idempiere version. So it is not "just pushing one button" for us, isn't it?
CarlosRuiz: transition version is also on bitbucket
CarlosRuiz: https://bitbucket.org/CarlosRuiz_globalqss/adempiere361
tbayen: OK. I did not do a upgrade up to now. How can I find out how to upgrade my database? Do I have to start migration scripts one by one or is there an automatic upgrade?
CarlosRuiz: for linux there are migrate_postgresql.sh script
Nicolas__: If everyone agree, i will send classes to tbayen ; so they will be integrated in his fork
tbayen: Some months ago your version was restricted. Is this "transition" the same branch we talked about?
CarlosRuiz: no - was never restricted - just open on request - now is fully open
tbayen: Yes, that's what I meant. I did not request because my other work was enough for the moment. But slowly there are things I want to give back so I want to do my own repository.
CarlosRuiz: yes - bitbucket is very easy to work with - you fork it on bitbucket - integrate your contributions on your own repository and then ask for a pull request
tbayen: Nicolas__, If I did this it will be no big deal to integrate some of your code if we both do not work in the same part of adempiere. But I think in the sense of distributed versioning systems it should even be no big deal for you to do your own repo. Perhaps I will write a documentation if I did it.
Nicolas__: yes, you'er right, that will be more simple ; i can create my own repo and testing your documentation
tbayen: Nicolas__, I am really interested in you thoughts about toolbars and menus. I would like to talk about that deeper but I have too much work and I need first to do some organization for myself. The repo is part of this. But I would like to test your code if I can get it.
Nicolas__: no problem, i will put it in my repo and sent them to you
claudio_cth: good afternoon
Nicolas__: Sorry guys, i have to go :-( ; i wait for Carlos to create table and then create my own repo so i can put my classes. And then i will ask for a 'pull request' ?
CarlosRuiz: I'll upload the scripts to the JIRA ticket
CarlosRuiz: thanks for the meeting
tbayen: Bye, I will send you the documentation for the repo when I did it.
Nicolas__: Ok thanks; bye bye
banym: Hi all
CarlosRuiz: Hi Dominik
banym: CarlosRuiz: how work going with idempiere
CarlosRuiz: very well - thanks
banym: CarlosRuiz: so you have a roadmap for release? i see alot of tickets in jira and alot of work done around the code
CarlosRuiz: basically we are planning a 1.0 release for may 1
CarlosRuiz: another may-day :-)
CarlosRuiz: there will be a feature freeze on april 2 - to focus on stabilization
banym: CarlosRuiz: if you think it's a good idea I can create a virtual machine image for vmware and virtualbox like there was the ava in the past.
CarlosRuiz: I never used it - but I think it worked for many
banym: just for evaluation but very often the installation process was a source of alot of frustration and questions in the past
tbayen: As a sort of newbie I appreciated the ava. It took my fear away. But it was very old and so worthless in the end.
banym: easy way for people without linux or postgres or java knowledge
banym: think about it and maybe 2 weeks before releas i can build such a new quick try solution. only for testing and evaluation but easy to use.
tbayen: With a bit scripting it should be possible to automate the process of creating it so it will be actual. Perhaps red1 can integrate it within his test server (or we do testing while automatic building the ava image).
CarlosRuiz: yes - I see the value of the AVA - just that I don't use it
CarlosRuiz: I'll think about it for 2 weeks :-D
CarlosRuiz: just joking ;-)
tbayen: I was very angry when I tried the old AVA and saw that it had big differences to the actual version. So if we offer it we should keep it actual at least two times a year.
banym: tbayen: if there is a auto update functionality it would be nice.
tbayen: In theory it is not more than a script logging into the VM, upgrading via Mercurial, starting the migration script and shutting down the VM. In practice I think it will be not as easy...
banym: no it's not so easy
banym: but even if we have a ava for each official release we have a better situation for newbies
tbayen: If you want this you have at least to document what you do. If you want I will proof-read it and create a second one. This will be a good idempiere installation example anyways.