Gyroscope (software)
This article needs additional citations for verification. (February 2024) |
| Antradar Gyroscope | |
|---|---|
| Product logo of Gyroscope | |
| Developer | Antradar |
| Initial release | November 20, 2008[1] |
| Stable release | 16.7
/ May 17, 2020 |
| Repository |
|
| Written in | PHP and JavaScript |
| Engine | |
| Platform | Cross Platform |
| License | BSD License |
| Website | www |
Gyroscope is an open-source PHP framework and a code template system for building web backend systems. Gyroscope uses a specific and yet flexible user interaction model to reveal and explore the inner-relations of a database.
User Interaction Model
[edit | edit source]The Gyroscope UI represents typical data relations such as one-to-many, many-to-many and foreign-key-reference with application-level visual concepts. For example, tables are typically shown as "Entry Points". The most significant columns in a data table are used to display the records in a "List View". Each item in the list view opens the record in a Tab where the rest of the columns are displayed in a key-value format.
One-to-many (1-N) relations are shown in the form of "Related Records". For example, in a Company Directory application a company may have multiple contact persons. In the "Companies" list view, each item points to a Company record. In the tabbed company record view, the basic information such as company name and address are displayed in the main section of the details view. The "Related Contacts" are listed on the side. Click on a contact item will open the contact details in a separate tab.
Many-to-many (N-N) relations are displayed as two 1-N views mirroring each other. For example, in a Film-Actor database where a film may have multiple actors, and an actor can be in multiple films, the Film details view lists the actors on its "Related Records" section. Clicking on an actor would pivot the view, by displaying in a separate tab, the basic information of the actor, putting his/her related films on the side.
Tabs in Gyroscope are not browser tabs. They are logically tabs within the web application. Gyroscope's tab system ensures that no duplicate tabs can open for the same record.
Compatibility
[edit | edit source]The Gyroscope backend runs on all versions of PHP. Developer features such as the Code Generator requires PHP 5.4 and above because of the use of parent scoping in anonymous functions.
On the client side, Gyroscope supports all the XHR-enabled web browsers. This include legacy browsers as ancient as Internet Explorer 5.5. Features from modern browsers progressively enhance the Gyroscope user experience. For example, web socket, desktop notification, speech synthesis and voice recognition are used if they are available in the browser.
Gyroscope is agnostic of the data layer. Any data source that supports CRUD operations can drive a Gyroscope application. The default code generator uses MySQL syntax.
Architecture
[edit | edit source]Gyroscope uses the Loader-Content-Handler-Handler (LCHH) architecture instead of explicit Model-View-Controller (MVC). In the LCHH architecture, a Loader, or a "DIV" container with a unique identifier is populated with default Content. Visual affordances, also known as "triggers" that are included in the Content invoke client-side handlers. These JavaScript handlers then sends XmlHTTPRequestObject (or AJAX) requests to Server-side Handlers. The Server-side scripts then perform updating, insertion or deletion functions before piggybacking the updated View back to the original Loader via AJAX callback and DOM update. The benefit of the LCHH architecture is that its execution path is identical to the life cycle of an HTTP request. This design has both performance and debugging advantages.[2]
LCHH can be viewed as a subtle variant of MVC where the focus is on the View (Loader, Content) and Controller (Client-side Handler and Server-side Handler). The implementation of the data source, or the "Model" is largely left to developer's discretion.
Gyroscope release timeline
[edit | edit source]<timeline> DateFormat = dd/mm/yyyy ImageSize = width:1600 height:700 PlotArea = left:10 right:10 bottom:20 top:10 Colors =
id:canvas value:rgb(0.97,0.97,0.97) id:grid1 value:rgb(0.80,0.80,0.80) id:grid2 value:rgb(0.86,0.86,0.86) id:Timeperiod value:red id:Timeperiod2 value:rgb(0.86,0.56,0.56) id:gris value:gray(0.7) id:noir value:black id:blanc value:white id:classic value:rgb(0.9,0,0) id:babel value:rgb(0.99,0.95,0.32) id:codegen value:rgb(1,0.6,0) id:nova value:rgb(1,0.3,0.1) id:dexter value:rgb(0.66,0.04,0.4) id:aperture value:rgb(0.13,0.61,0.01) id:intel value:rgb(1,0,0.6) id:modules value:rgb(1,0.6,0.6) id:transit value:rgb(0.6,1,0.6)
Period = from:01/01/2007 till:19/03/2018 TimeAxis = orientation:horizontal format:dd/mm/yyyy ScaleMajor = unit:year increment:1 start:01/01/2007 gridcolor:grid1 ScaleMinor = unit:month increment:3 start:01/01/2007 gridcolor:grid2 AlignBars = justify BackgroundColors = canvas:canvas bars:canvas BarData =
bar:Timeperiod barset:Timeperiod2
PlotData =
- Top bar
width:18 fontsize:12 textcolor:noir align:center shift:(0,-6) bar:Timeperiod color:Timeperiod from:start till:end color:gris from:20/11/2008 till:19/04/2014 text:"Classic" color:classic textcolor:white from:19/04/2014 till:31/10/2014 text:"Codegen" color:codegen textcolor:white from:31/10/2014 till:11/12/2015 text:"Nova" color:nova textcolor:white from:11/12/2015 till:09/06/2016 text:"Babel" color:babel textcolor:black from:09/06/2016 till:10/10/2017 text:"Aperture" color:aperture textcolor:white from:10/10/2017 till:end text:"Dexter" color:dexter textcolor:white
- Main
width:12 fontsize:8 textcolor:codegen anchor:from align:left color:noir shift:(3,-5) barset:Timeperiod2 from:20/11/2008 till:07/12/2010 text:"1.x" from:09/01/2009 till:08/12/2009 text:"1.2" from:08/12/2009 till:07/01/2010 text:"1.4" from:07/01/2010 till:28/03/2010 text:"1.5" from:28/03/2010 till:27/06/2010 text:"1.6" from:27/06/2010 till:11/09/2010 text:"1.7" from:11/09/2010 till:08/10/2010 text:"1.8" from:08/10/2010 till:07/12/2010 text:"1.9"
from:07/12/2010 till:02/07/2013 text:"2.x" from:30/07/2011 till:29/10/2011 text:"2.1.7" from:29/10/2011 till:23/11/2011 text:"2.2" from:23/11/2011 till:21/12/2011 text:"2.3"
from:21/12/2011 till:02/07/2013 text:"2.4" from:09/04/2012 till:29/04/2012 text:"2.6.2" from:29/04/2012 till:29/01/2013 text:"2.7" from:29/01/2013 till:29/03/2013 text:"2.8.2" from:29/03/2013 till:02/07/2013 text:"2.9.4" barset:break from:02/07/2013 till:26/12/2013 text:"3.x" from:07/07/2013 till:11/07/2013 text:"3.2" from:11/07/2013 till:17/07/2013 text:"3.3" from:17/07/2013 till:18/07/2013 text:"3.5" from:18/07/2013 till:26/07/2013 text:"3.6" from:26/07/2013 till:06/12/2013 text:"3.7" from:06/12/2013 till:21/12/2013 text:"3.8.4" from:21/12/2013 till:26/12/2013 text:"3.9" from:26/12/2013 till:21/05/2014 text:"4.x" from:18/01/2014 till:22/02/2014 text:"4.1.2"
from:22/02/2014 till:07/03/2014 text:"4.2.2" from:07/03/2014 till:14/03/2014 text:"4.3.2" from:14/03/2014 till:01/04/2014 text:"4.4.1" from:01/04/2014 till:03/04/2014 text:"4.5.1" from:03/04/2014 till:09/04/2014 text:"4.6" from:09/04/2014 till:19/04/2014 text:"4.7" from:19/04/2014 till:14/05/2014 text:"4.8" from:14/05/2014 till:21/05/2014 text:"4.9" barset:break
from:21/05/2014 till:10/01/2015 text:"5.x" from:04/06/2014 till:10/06/2014 text:"5.2.1" from:10/06/2014 till:07/07/2014 text:"5.3" from:07/07/2014 till:25/07/2014 text:"5.3.1" from:25/07/2014 till:09/08/2014 text:"5.4" from:09/08/2014 till:10/08/2014 text:"5.4.2" from:10/08/2014 till:17/09/2014 text:"5.5" from:17/09/2014 till:19/10/2014 text:"5.6" from:19/10/2014 till:22/10/2014 text:"5.6.2" from:22/10/2014 till:28/10/2014 text:"5.8" from:28/10/2014 till:31/10/2014 text:"5.9" from:31/10/2014 till:09/11/2014 text:"5.9.1" from:09/11/2014 till:21/11/2014 text:"5.9.2" from:21/11/2014 till:05/12/2014 text:"5.9.3" from:05/12/2014 till:16/12/2014 text:"5.9.5" from:16/12/2014 till:22/12/2014 text:"5.9.7" from:22/12/2014 till:18/01/2015 text:"5.9.8" barset:break from:18/01/2015 till:05/07/2015 text:"6.x" from:22/02/2015 till:10/03/2015 text:"6.2" from:10/03/2015 till:20/03/2015 text:"6.3" from:20/03/2015 till:08/05/2015 text:"6.3.2" from:08/05/2015 till:22/05/2015 text:"6.4" from:22/05/2015 till:30/05/2015 text:"6.5" from:30/05/2015 till:02/06/2015 text:"6.5.1" from:02/06/2015 till:05/06/2015 text:"6.6" from:05/06/2015 till:14/06/2015 text:"6.7"
from:14/06/2015 till:17/06/2015 text:"6.7.1" from:17/06/2015 till:24/06/2015 text:"6.8" from:24/06/2015 till:02/07/2015 text:"6.8.1" from:02/07/2015 till:08/07/2015 text:"6.8.2" from:08/07/2015 till:13/07/2015 text:"6.9"
barset:break
from:22/07/2015 till:05/12/2015 text:"7.x" from:22/07/2015 till:11/08/2015 text:"7.0" from:11/08/2015 till:04/09/2015 text:"7.1" from:04/09/2015 till:18/09/2015 text:"7.2" from:18/09/2015 till:19/09/2015 text:"7.3" from:19/09/2015 till:30/09/2015 text:"7.4" from:30/09/2015 till:20/10/2015 text:"7.5" from:20/10/2015 till:29/10/2015 text:"7.6" from:29/10/2015 till:22/11/2015 text:"7.7" from:22/11/2015 till:05/12/2015 text:"7.8" from:05/12/2015 till:11/12/2015 text:"7.9"
barset:break
from:11/12/2015 till:09/06/2016 text:"8.x"
from:11/12/2015 till:31/12/2015 text:"8.0"
from:31/12/2015 till:14/01/2016 text:"8.2"
from:14/01/2016 till:08/02/2016 text:"8.3"
from:08/02/2016 till:11/03/2016 text:"8.4"
from:11/03/2016 till:07/04/2016 text:"8.5"
from:07/04/2016 till:12/04/2016 text:"8.6.1"
from:12/04/2016 till:17/04/2016 text:"8.7.1"
from:17/04/2016 till:16/05/2016 text:"8.8"
from:16/05/2016 till:09/06/2016 text:"8.9"
</timeline>
See also
[edit | edit source]Lua error in mw.title.lua at line 392: bad argument #2 to 'title.new' (unrecognized namespace name 'Portal').