---- = Weekly Meetings = ITERATION_03 * [http://asteasolutions.net/~boyan/sprint03_week1/ 1st Weekly Meeting] * [http://asteasolutions.net/~parlev/sprint03_week2/ 2nd Weekly Meeting] * [http://asteasolutions.net/~boyan/sprint03_week3/ 3rd Weekly Meeting] ITERATION_04 * [http://asteasolutions.net/videos/2009-01-27%20Weekly%20Meeting.avi (2009-01-27) 3rd Weekly Meeting] * [http://asteasolutions.net/videos/2009-02-03%20Weekly%20Meeting.avi (2009-02-03) 4th Weekly Meeting] * [http://asteasolutions.net/videos/2009-02-08%20Sprint%20Closing.avi (2009-02-08) Sprint Closing] ITERATION_05 * [http://asteasolutions.net/videos/2009-02-10%20Sprint%20Opening.avi (2009-02-10) 3rd Sprint Opening] * [http://asteasolutions.net/videos/2009-02-17%20Weekly%20Meeting.avi (2009-02-17 Weekly Meeting] * [http://asteasolutions.net/videos/2009-02-20%20MiniSprint%20Closing%20(Part%201).avi (2009-02-20) Mini Sprint Closing, part 1] * [http://asteasolutions.net/videos/2009-02-20%20MiniSprint%20Closing%20(Part%202).avi (2009-02-20) Mini Sprint Closing, part 2] * [http://asteasolutions.net/videos/2009-03-04%20Weekly%20Meeting.avi (2009-03-04) Weekly Meeting] * [http://asteasolutions.net/videos/2009-03-07%20Sprint%20Closing%20(Part%201).avi (2009-03-07) Sprint Closing (Part 1)] * [http://asteasolutions.net/videos/2009-03-07%20Sprint%20Closing%20(Part%202).avi (2009-03-07) Sprint Closing (Part 2)] ITERATION_06 * [http://asteasolutions.net/videos/2009-03-10%20Weekly%20Meeting.avi (2009-03-10) Sprint Opening] * [http://asteasolutions.net/videos/2009-03-17%20Weekly%20Meeting.avi (2009-03-17) Weekly Meeting] * [http://asteasolutions.net/videos/2009-03-21%20MiniSprint%20Closing%20(Part%201).avi (2009-03-21) MiniSprint Closing (Part 1)] * [http://asteasolutions.net/videos/2009-03-21%20MiniSprint%20Closing%20(Part%202).avi (2009-03-21) MiniSprint Closing (Part 2)] * [http://asteasolutions.net/videos/2009-03-21%20MiniSprint%20Closing%20(Part%203).avi (2009-03-21) MiniSprint Closing (Part 3)] * [http://asteasolutions.net/videos/2009-03-24%20MiniSprint%20Opening.avi (2009-03-24) MiniSprint Opening] * [http://asteasolutions.net/videos/2009-03-31%20Weekly%20Meeting.avi (2009-03-31) Weekly Meeting] * [http://asteasolutions.net/videos/2009-04-04%20Sprint%20Closing%20(Part%201).avi (2009-04-04) Sprint Closing (Part 1)] * [http://asteasolutions.net/videos/2009-04-04%20Sprint%20Closing%20(Part%202).avi (2009-04-04) Sprint Closing (Part 2)] * [http://asteasolutions.net/videos/2009-04-04%20Sprint%20Closing%20(Part%203).avi (2009-04-04) Sprint Closing (Part 3)] ITERATION_07 * [http://asteasolutions.net/videos/2009-04-07%20Weekly%20Meeting%20(Part%201).avi (2009-04-07) Mini Sprint 1 Opening (Part 1)] * [http://asteasolutions.net/videos/2009-04-07%20Weekly%20Meeting%20(Part%202).avi (2009-04-07) Mini Sprint 1 Opening (Part 2)] * [http://asteasolutions.net/videos/2009-04-14%20Weekly%20Meeting.avi (2009-04-14) Weekly Meeting] * [http://asteasolutions.net/videos/2009-04-17%20MiniSprint%20Closing%20(Part%201).avi (2009-04-17) MiniSprint Closing (Part 1)] * [http://asteasolutions.net/videos/2009-04-17%20MiniSprint%20Closing%20(Part%202).avi (2009-04-17) MiniSprint Closing (Part 2)] * [http://asteasolutions.net/videos/2009-04-21%20Weekly%20Meeting%20(Part%201).avi (2009-04-21) Mini Sprint 2 Opening, part 1] * [http://asteasolutions.net/videos/2009-04-21%20Weekly%20Meeting%20(Part%202).avi (2009-04-21) Mini Sprint 2 Opening, part 2] * [http://asteasolutions.net/videos/2009-04-21%20Weekly%20Meeting%20(Part%203).avi (2009-04-21) Mini Sprint 2 Opening, part 3] * [http://asteasolutions.net/videos/2009-04-21%20Weekly%20Meeting%20(Part%204).avi (2009-04-21) Mini Sprint 2 Opening, part 4] * [http://asteasolutions.net/videos/2009-04-28%20Weekly%20Meeting.avi (2009-04-28) Weekly Meeting] * [http://asteasolutions.net/videos/2009-05-09%20Sprint%207%20Closing%20(Part%201).avi (2009-05-09) Sprint Closing, part 1] * [http://asteasolutions.net/videos/2009-05-09%20Sprint%207%20Closing%20(Part%202).wmv (2009-05-09) Sprint Closing, part 2] ITERATION_08 * [http://asteasolutions.net/videos/2009-05-12%20Sprint%208%20Opening%20(Part%201).avi (2009-05-12) Sprint Opening, part 1] * [http://asteasolutions.net/videos/2009-05-12%20Sprint%208%20Opening%20(Part%202).avi (2009-05-12) Sprint Opening, part 2] * [http://asteasolutions.net/videos/2009-05-19%20Weekly%20Meeting.avi (2009-05-19) Weekly Meeting] * [http://asteasolutions.net/videos/2009-05-25%20Super%20Groups%20Discussion.avi (2009-05-25) Super Groups Discussion] * [http://asteasolutions.net/videos/2009-05-26%20Weekly%20Meeting%20(Part%201).avi (2009-05-26) Weekly Meeting (Part 1)] * [http://asteasolutions.net/videos/2009-05-26%20Weekly%20Meeting%20(Part%202).avi (2009-05-26) Weekly Meeting (Part 2)] * [http://asteasolutions.net/videos/2009-06-02%20Weekly%20Meeting.avi (2009-05-26) Weekly Meeting] * [http://asteasolutions.net/videos/2009-06-06%20Sprint%208%20Closing%20(Part%201).avi (2009-06-06) Sprint 8 Closing (Part 1)] * [http://asteasolutions.net/videos/2009-06-06%20Sprint%208%20Closing%20(Part%202).avi (2009-06-06) Sprint 8 Closing (Part 2)] ITERATION_09 * [http://asteasolutions.net/videos/2009-06-06%20Sprint%209%20Opening%20(Part%201).avi (2009-06-06) Sprint 9 Opening (Part 1)] * [http://asteasolutions.net/videos/2009-06-06%20Sprint%209%20Opening%20(Part%202).avi (2009-06-06) Sprint 9 Opening (Part 2)] * [http://asteasolutions.net/videos/2009-06-09%20Weekly%20Meeting.avi (2009-06-09) Weekly Meeting] * [http://asteasolutions.net/videos/2009-06-16%20Weekly%20Meeting.avi (2009-06-16) Weekly Meeting] * [http://asteasolutions.net/videos/2009-06-23%20Weekly%20Meeting%20(part%201).avi (2009-06-23) Weekly Meeting (part 1)] * [http://asteasolutions.net/videos/2009-06-23%20Weekly%20Meeting%20(part%202).avi (2009-06-23) Weekly Meeting (part 2)] * [http://asteasolutions.net/videos/2009-07-02%20Demo.avi (2009-07-02) Demo] * [http://asteasolutions.net/videos/2009-07-02%20Demo-VNC.avi (2009-07-02) Demo-VNC] * [http://asteasolutions.net/videos/2009-07-06%20Sprint%209%20Closing.avi (2009-07-06) Sprint 9 Closing] ITERATION_10 * [http://asteasolutions.net/videos/2009-07-06%20Sprint%2010%20Opening.avi (2009-07-06) Sprint 10 Opening] ---- = Discussions = * '''[http://asteasolutions.net/videos/2009-01-27%20General%20Discussion.avi (2009-01-27) General Discussion]''' In this video are explained our goals, what we strive to achieve, our challenges and how we shall proceed in order to create a product with high quality. It is recommended everyone to be familiar with this discussion. * [http://asteasolutions.net/videos/2009-01-20%20Design%20Discussion.avi (2009-01-20) Design Discussion] Detailed log of the discussion is included below. {{{ Topics: = pro_lib = - designed to help people! If they are not helping, either something should be fixed or people do not understand how to use it. * attibute - self responsible. * do not care about initializing order. * good practices: * defaulty constructors. * avoid final properties. * push updates - instead of updating things manually, provide these things the ability to auto-update. * avoid trying to use unconventionally the pro_lib since this is error prone. * Property improper use cases: * accessing an AutoProperty WILL NOT invoke its compute() method! * resource properties: * create method should depend on NOTHING => it is invoked once and will not update things. * setup methods are designed to keep things synchronized for people. @Setup may be put to split setup things in different methods, so that they are updated in groups. * destroy methods are not working. * List properties. = core_modularity = * extensions are now sortable by comparator. = base_visual = == layout == == menus == * this is a new module to split the layout and menus from the main.view things. = base_skins = * provides things to simplify things that are registered for a single skin => currently a map with (id, value) entries. = global things = * few people have a global vision about things. * people should get a better overall idea. * supercool model. * not only implement a great library but find a task to actually use it and also do that task. * this will improve the library. * things that are error prone will appear. * the "not my task/class" problem (people tend to do only things that are tracked and planned): * the code is owned by everyone! * fix things that need to fixed in order to implement you things, otherwise the next revision of the task will fail. * if the things are complicated to be fixed, ask the others, make discussions about it. }}} * AsteaCon 2008 * [http://asteasolutions.net/videos/2008-12-10%20Weekly%20Meeting%20(Part%201).avi 2008-11-19 1st Day Discussions (Part 1)] * [http://asteasolutions.net/videos/2008-12-10%20Weekly%20Meeting%20(Part%202).avi 2008-11-19 1st Day Discussions (Part 2)] * [http://sophie2.org/videos/AsteaCon2008/2008-11-20/ 2008-11-20 2nd Day Discussions] * [http://sophie2.org/videos/AsteaCon2008/2008-11-21/ 2008-11-21 3rd Day Discussions] During the three days of discussions at Sheraton Hotel between Astea Team and some of our oversea partners detailed information about all aspects of the project was given. * Branding discussions with Robert Abbott from ''Shift Global'' * [http://asteasolutions.net/videos/2009-01-30%20Milo%27s%20Project%20Overview.avi (2009-01-30) Milo's Project Overview] Project overview of Sophie 2.0 by the team leader which aims to introduce the product to Robert Abbott from Shift Global. * [http://asteasolutions.net/videos/2009-01-30%20Robert%27s%20Branding%20Discussion.avi (2009-01-30) Robert's Branding Discussion] Discussion between Robert Abbott and Astea Team on which they discussed Sophie 2.0 logo drafts and basic visual wireframes of the future product. * [http://asteasolutions.net/videos/2009-01-31%20Robert%27s%20UI%20Discussion.avi (2009-01-31) Robert's UI DIscussions] Discussion about Sophie 2.0 user interface and some internal aspects of the project. * [http://asteasolutions.net/videos/2009-01-31%20Sophie2%20Website%20Discussion.avi (2009-01-31) Sophie2 Website Discussion] Discussion between Astea team and Robert Abbott about the vision and functionality of Sophie 2 website. * [http://asteasolutions.net/videos/2009-02-03%20Milo%27s%20Refactoring%20Discussion.avi (2009-02-03) Milo's Refactoring Discussion] Milo gives details about the modules that he refactored, and explains his vision about improvement of the code quality. * [http://asteasolutions.net/videos/2009-02-17-Design%20Discussion%20(Part%201).avi (2009-02-17) Discussion about core.mvc] * common concept of mvc * model * view * controller * interactions among them * past attempts at integrating mvc in sophie2 * R1 * dark ages * pure MVC form * parallel model, view, controller hierarchies * R2 * ProLib * customized form of MVC pattern * nonparaller model, view, controlelr hierarchies * examples of bad code/design * R3 * model - same as R2 * view * view shouldn't modify the model directly, it should fire an event * controller * only single class * a set of operation * enum of operations * each operation has two methods * defineFilter * define what kind of events this operation processes * handleEvent * returns boolean * gets the actual event * try to process it, return wheter the event was processed * sortkey of each operation * event description * OO approach (Swing/AWT) * grouping of similar events * decomposing into class hierarchy * EventR3 * contextData * source - (component, etc.) * context - (a parent view for instance) * tip - (a corresponding model / bad design) * cause - other event (EventR3, Swing event etc.) * target / event specific data * eventId * Ids enum * @EventParams * Place enum * params * enum InputEventR3 * enum InputModifier * CTRL down, SHIFT down.. etc. * ModifierSet * immutable set of InputModifier fields * example: * @EventParams(ModifierSet.class) * [http://asteasolutions.net/videos/2009-02-17-Design%20Discussion%20(Part%202).avi (2009-02-17) Discussion about base.visual] {{{ G0gOv pR0d\/cT10nZ pR0uDLy pR3s3nTs: ================ PART 2 ================ * base.visual [interaction] * app structure / doc structure correspondence for visuals * interaction is put in skins * sample of what you usually put in a skin * sample of how you add interaction maps in a skin * interaction maps "string language" * skins are meant to be written to/read from human readable string configuration files * brief skin explanation * (input -> user events) map [continued in PART 3]... }}} * [http://asteasolutions.net/videos/2009-02-17-Design%20Discussion%20(Part%203).avi (2009-02-17) Discussion about base.skins, base.visual (continued), base.model.text] {{{ G0gOv pR0d\/cT10nZ pR0uDLy pR3s3nTs: ================ PART 3 ================ * base.skins * brief skins content description * brief value lookup scheme in skin hierarchy * each skin is consisted of SkinParts * @SkinPartDef * SkinPropId * @SkinElementId ...[continued from PART 2] * userEvents * events/operations/interaction maps relation * SwingEventAdapter * base.model.text * brief overview * HotText * list of HotUnit * HotPos * HotTextLayout * HotTextPane * HotStyleDef * HotStyle * sample use cases and solutions }}} * [http://asteasolutions.net/videos/2009-02-18%20Milo%27s%20Persistence%20Discussion.avi (2009-02-18) Discussion about base.persistence] * base.persistence * overall description * current format structure * different formats * different entities * resourses * immutables * Pro* * Storage * like XML DOM * used as an internal data format * attributes * children tags * PersistFormat * S - source type * T - destination type * converts between two types * general saving/loading overheads * SharedSaver * saves in Storage * T - Page, Frame... * single saver for each type * save scenario * traverse everything and save it * SharedLoader * multiple loaders for different instances of each type * load scenario * create "blank" objects for each loaded entity * fill in dependencies between objects * savers/loaders and extensions/extension points * @Persist * save this as something * could list multiple @Persist for same field for different target formats * content to be persisted/not persisted * saving/loading immutables * saving/loading Pro* * [http://asteasolutions.net/videos/2009-02-19%20Modularity%20Discussion%20(Part%201).avi (2009-02-19) Discussion about core.modularity, part 1] * core.modularity * modularization * modules * different understanding of modules, depending on context * classes, packages, source files, .jars, eclipse projects, maven projects, plugins, components * comparison * dependencies between modules * cyclic dependencies * target could be acyclic graph * sample scenario of registering a TetrisFrame * sample solution * works but could be better * uml notations * module * extension * extension point * TetrisFrame scenario adapter to these concepts * scenes examples * core.modularity module * content * SophieModule * SophieExtension * SophieExtensionPoint * comparison with OSGI * convention for such concept * hides OSGI complexity * FakeModule registry * can run in a fake environment * provides a simulation of what happens when app is deployed in an OSGI container * TrueModule registry * content * SophieModule * doStart(), doStop() - shouldn't have to be overriden * defineExtensions(), defineExtensionPoints() - should be overriden * SophieExtension * sortKeys (not present still, will be in the future) * SophieExtensionPoint * ProList of extensions, so it's tracked and easy to use * communication class/interface between extensions and extension points * extension which provides an Integer doesn't work with extension point which requires Number, should be exactly the same * matching extensions with extension points * currently each provided extension maps to each possible extension points which accepts it * Felix, Maven * terminology * pom.xml * module naming convention * accessibility of packages * embedding external modules * embedding vs depending * can have classes with the same name in different modules * example leading to runtime error * creating a module * use proto.project * remove .svn entries * fix pom.xml of module * fix pom.xml of parent module * documented in the wiki (continued in PART 2...) * [http://asteasolutions.net/videos/2009-02-19%20Modularity%20Discussion%20(Part%202).avi (2009-02-19) Discussion about core.modularity, part 2] ...(continued from PART 1) * the future * list of modules (for displaying in UI for instance) * mechanism of accessing resourses in the modules * platform structure * current structure (in Eclipse) * planned final structure * [http://asteasolutions.net/videos/2009-02-19%20Visual%20Discussion.avi (2009-02-19) Discussion about base.visual and some brief notes about base.scenes] * base.visual * VisualElement * parent * title * tooltip * VisualElement hierarchy * BaseVisualElement * getSkinValue() * computePropElement() * computeListProp() * findParent() * VisualProvider * SimpleVisualProvider * AutoVisualProvider * @VisualDef * could be used for multiple needs * @Related * tells the AutoVisualProvided which classes to scan for extensions to register * palette tracking current book example * short AutoProperty discussion * base.scenes * short description * starting and stopping needed modules * not enough time... * [http://asteasolutions.net/videos ... (2009-02-24)] * base.model.text * check the discussion from 2009-02-17, part 3, for introduction of base.model.text * HotStyleDef * push and pop * for example, push "bold" in some position and then pop it later * do not be misled - this is not like in HTML, where you can do things like (b)(i)(/b)(/i) * you can get the style for a given position * some languages are a challenge * example: right-to-left languages * some text in English, that is written left-to-right; then some text in Arabic, which is written right-to-left * visually this appears as: EnglishLetter1, EnglishLetter2, EnglishLetter3, ArabicLetter3, ArabicLetter2, ArabicLetter1 * if we select last two English letters and first two Arabic (ArabicLetter1 and ArabicLetter2), the selection is visually not continuous * some languages are more complex - Chinese characters are traditionally arranged in vertical columns, read from top to bottom down a column, and right to left across columns * even more complex: what if someone mixes English, Arabic and Chinese? * another challenge: the baseline is not always below the characters, even in horizontally written languages * text replacing * primitive: replaceText(HotPos from, HotPos to, List replacement) * steps: * fix positions * delete/undelete positions * fix styles * fix element nesting (begin paragraph, etc.) * actual replace * the replacement can have positions, but they can be nulls also * some considerations about the positions: * if you cut and then paste some text, the positions will remain the same * if you cut some text and then paste it twice, the second copy must not contain the same positions; instead, new positions should be generated * text layout * this is the hardest part * purpose: to find a position for each element of a text that has to be rendered in a shape * trees won't be used here too * generally the text should be displayed in a concave polygon. * thus some lines may be splitted in different segments (watch the video for an example) * sometimes we want a line to be slightly shrinked, thus not allowing a single short word on the next line * text layout algorithm * popular software uses greedy algorithm, which does not always produce good looking text; also they use plenty of if-then-else rules * in Sophie 2 the text layout problem will be reduced to finding a minimal path in directed acyclic graph * price function: badness of a layout; the algorithm has to generate a layout with minimal badness * for example, if a word has to be stretched two times, the badness would be high * another example: if a line has to shrinked slightly so the last word of the text fits on the same line, the badness would be low * one of the advantages using this algorithm is that finding path is well-known problem and there are many optimizations * we can use dynamic programming, A*, etc. * state (vertex in the graph) * each state has a range - start and end position * in the beginning they represent the whole text * after each step the start position is shifted right * each state can have several ancestors * for example, we can put a char on the current line, or we can break the line * for each choice the badness is calculated * the graph is virtual, because it is huge * number of states is decreased in we have breaks, for example page breaks * extra.pdf * this is related to PDF frames - the user can insert PDF content, the same way that he can insert an image * new module: extra.pdf * other layers, such as core, base and main, must not know anything about PDFs * if you have to modify these layers in order to integrate your extra functionality, then something is wrong in these layers * PdfFrameContent * PdfContentView, which is related to scenes * PdfResource extends (Book)Resource * may contain origin - the pdf file that is imported * this functionality is common for other resource, like images, audio and video, so we have to deal with this * Saver/Loader * GUI: the end user should be able to: * select a page * zoom a page and select which portion of it should be displayed (if the frame is smaller) * the same applies for images * base.scenes * SceneElement - base interface * extended by interfaces * ImageSceneElement * ShapeSceneElement * ContourSceneElement * AudioSceneElement * VideoSceneElement * CompositeSceneElement * SwingSceneElement * maybe other * in most cases this element is visible * scene - just a tree (in some cases - directed acyclic graph) * root element with properties and children, which also have children... * scene elements have no parent link * all coordinates in scenes are floating point numbers * example: page with two frames, one of them is an ImageFrame, with image, padding and border * in outline mode we have also margin bounds, padding bounds, middle of the border; margin is always invisible * we need thes in cases of transparent images * scene tree * first level: node for all frames and node for the page background (not the whole page) * each frame is ancestor of the frames node * each frame has the following children: * background * content * border * in outline mode - some other elements (ContourSceneElement) * the order of the children is important! It will determine the z-order - first the background is drawn, then the content, finally the border * properties: * subElements - not only for CompositeSceneElement; for example, ImageSceneElement has subelements... * space - transformation matrix * for most elements this will be the identity * for zoom - detect the root level and change its space, for instance scale with 0.5; only there, that's enough * from the root to the leaves the matrices are multiplied... * the coordinates are similar to CSS - (0,0) is the left-upper corner of the content; if we have a border, part of it will have negative coordinates * color * ImmColor - floating point Alpha-RGB; default - 1,1,1,1 (white) * can be fill color for a shape, can be color of contour, etc. * effects * for example - shadows * currently there are no effects * controller - not discussed, will be changed, for interaction? * clip() - for example, we have a big image element and we want to show only part of it; define clipping shape * scene elements has no names * ImageSceneElement has a reference to ImmImage * scene element implementation: override some methods: * setupElements() { subElements().clear(); add.... } * setupStatic() - for example - color * setupDynamic() - things that you expect to change; for example, color().set(isSelected ? HALF_BLUE : WHITE) * This is just a convention, but it is a good idea to separate things into different setup methods * currently there is one implementation - main.scene.simple * SceneVisualElement * SimpleSceneVisual * quite short implementation * implementation helpers - base.scene.model * visible area != responce area * changes (discussion in Bulgarian) * r2 = r1.getSpace().getRevision(13) - returns a new resource with new id, parent=null? * currently redo=register, but that's not good * History * Change * skip changes... * ChangeServer, LocalChangeServer * UndoManager * undo(resource) * redo * getUndoDescription * getRedoDescription ----