QetriX


QetriX

About QetriX

QetriX is a paradigm for creating web apps and websites.

We implemented the idea into several open source QetriX Frameworks, available for various languages and platforms, incl. C#, PHP, JavaScript and others. Their main focus is on HTML5, which has been popular in both online and offline solutions for the past few years.

With QetriX Framework you build apps in just-enough and low-effort manner, using as few as three components: QList, QForm and QView. Each component transforms data provided by datastores to a representation defined by converters.

The framework is robust and powerful, yet fairly simple, performant and lightweight. We used it for enough solutions to know it provides everything you'll ever need in most cases.

Products

Framework

Many platforms, single coding style. Quick and easy way how to make apps for various targets, using components, converters and datastores. Scriptable with Que language.

Qedy

JSON-based proprietary Framework extension for rapid development of rich HTML5 websites and applications. Offers data modeller, layout designer, process builder and more.

QPDB

Particle database schema for dynamically structured and interlinked semantic data. Also features geographical extension.

QB

Database for anything (and maybe one day of everything): people, food, songs, products, places, machines, software, movies, companies etc. QB allows to add, view, edit and compare them.

Qarate

Social network, where users can rate anything on a scale from 1 (worst) to 5 (best). Uses data from QB.

Quiky

Quick Wiki - easy to use online and offline personal wiki with QPDB support. It's decentralized and works also as a simple CMS for websites, blogs and galleries.

Quid

ERP for companies and individuals. Contains basic Project Management with Time Tracker (called Quo), CRM, Asset Management, Service Desk, CMDB and more.

Qui

Time tracker, tasks and to-dos. Standalone part of Quid.

Quo

Trip planner, flight log, travel diary and geo tracker. Works great in connection with Qarate and Quid. Online or offline usage.

Qik

Closed-circuit Smart Home information system and family hub to help you with day-to-day tasks, like shopping, cooking or fitness. Supports various devices and appliances.

Quac

Lightweight feed reader, e-mail client and messenger. Currently works best with RSS, Twitter and IMAP.

Quly

Cross-genre multiplatform videogame, where you can groom your family of Qules in an open world and in the real world.

QeX

Czech internet multiportal, featuring news, articles, discussion boards and forums, Q/A, games, blogs, reviews and more.

Showcase

Examples

Page in Java

public class PageInJava extends QModule
{
	public String main(Dict args)
	{
		var view = new QView("form");
		view.heading("Page in Java");
		view.add("This is a HTML page in Java.");
		return view.convert("page");
	}
}

Table in PHP

class TableInPHP extends QModule
{
	public function table(Dict $args)
	{
		$tbl = new QList(__METHOD__);
		$tbl->heading("Table in PHP");
		$tbl->add(QElem::create(ElemType::number, "id", "ID");
		$tbl->add(QElem::create(ElemType::text, "name", "Name");
		$tbl->data($this->ds()->getTableData());
		return $tbl->convert("table");
	}
}

Form in C#

public class FormInCS : QModule
{
	public String form(Dict args)
	{
		var frm = new QForm("form");
		frm.heading("Form in C#");
		frm.add(new QElem(ElemType.text, "email", "E-mail", "", 10));
		frm.add((new QElem(ElemType.button)).action("formSubmit"));
		return frm.convert();
	}
}

Module in JavaScript

class com.qetrix.modules.person extends QModule
{
	var _data = {};

	$public.main = function (args) // Default method for every Module
	{
		_data.name = args.get("name");
	}

	$public.name = function (args)
	{
		return _data.name;
	}

	return $public;
};

Module in ECMAScript 5

Older version of JavaScript, compatible with Internet Explorer 11

com.qetrix.modules.person = function($public)
{
	var _data = {};

	main(args) // Default method for every Module
	{
		_data.name = args.get("name");
	}

	get name()
	{
		return _data.name;
	}
};

Navigation in Python

class NavInPython(QModule):
	def nav()
		nav = QList("nav");
		nav.add({"text":"First", "action":"first.html"});
		nav.add({"text":"Second", "action":"second.html"});
		nav.add({"text":"third", "action":"third.html"});
		nav.actionBase(self.page().pathBase());
		nav.value(self.page().path());
		return nav.convert();

DataStore method in Ruby

class RubyOracleDs < DataStore
	def self.getTableData()
		return self.get("SELECT a, b, c FROM ".self.prefix()."qtable WHERE d = 1 ORDER BY a, b DESC");
	end
end

Converter in Kotlin

fun QList_Xml(list: QList): String {
	val sb = StringBuilder()
	sb.append("<").append(qlist.name()).append(">")
	// ...
	sb.append("</").append(qlist.name()).append(">")
	return sb.toString();
}

Module in Swift

func swiftMod(args: Dict) -> String {
	let str = "It works!"
	return str
}

DataStore method in Node.js

class NodeHttpDs extends DataStore
	def self.getTableData()
		return self.get("SELECT a, b, c FROM ".self.prefix()."table WHERE c = 1 ORDER BY a, b DESC");
	end
end

Form in TypeScript

class FormInTS extends QModule
{
	public form(Dict args): string
	{
		var frm = new QForm("form");
		frm.heading("Form in TypeScript");
		frm.add(new QElem(ElemType.text, "email", "E-mail", "", 10));
		frm.add((new QElem(ElemType.button)).action("formSubmit"));
		return frm.convert();
	}
}

Module in Que

qview:page	heading:Module in Que
#1.add	Lorem ipsum dolor sit amet
qform:search
#3.add:text
#3.add:button
#1.add	#3
#1.convert	html	page

DataStore method in Rust

fn rustmssqlds(x: Dict) -> string
{
	def self.getTableData()
	return self.get("SELECT a, b, c FROM ".self.prefix()."table WHERE c = 1 ORDER BY a, b DESC");
}

Converter in Go

func QList_Json(list QList) string
{
	var buffer bytes.Buffer
	buffer.WriteString("{")
	// ...
	buffer.WriteString("}")
	return buffer.String();
}

Navigation in Lua

function NavInLua(args)
	local nav = QList:create()
	nav.data(this.ds().nav()); // Load data from e.g. database
	nav.actionBase(this.page().pathBase());
	nav.value(this.page().path());
	return nav:convert()
end

Particle structure in MySQL

CREATE TABLE `p` (
	`p_pk` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'Primary Key (ID)',
	`pp_fk` INT(10) UNSIGNED NOT NULL COMMENT 'Entity (p.p_pk of a parent Particle)',
	`pt_fk` INT(10) UNSIGNED NOT NULL COMMENT 'Classification or Type (t.t_pk)',
	`pv` VARCHAR(200) NULL DEFAULT NULL COMMENT 'Value' COLLATE 'utf8_unicode_ci',
	`pr_fk` INT(10) UNSIGNED NULL DEFAULT NULL COMMENT 'Relation (p.p_pk of a foreign Particle)',
	`ps` INT(10) NOT NULL DEFAULT '0' COMMENT 'Sort order, significance',
	PRIMARY KEY (`p_pk`),
	INDEX `pt` (`pt_fk`),
	INDEX `pp` (`pp_fk`),
	INDEX `pr` (`pr_fk`)
)
COLLATE='utf8_unicode_ci';

Particle data in JSON

{
	"p_pk": 24,
	"pp_fk": 24,
	"pt_fk": 7,
	"pv": "QetriX",
	"pr_fk": null,
	"ps": 999
}

Downloads

  • QetriX.dll (19 kB, 2018-09-26, DLL MD5: 315ee6fd11e95a00cf640f81b683733c) - Class Library in .NET Standard 2.0.

You can also check source code for different languages on GitHub.

History

2018

  • Quac concieved.
  • Framework in .NET Standard 2.0 released.
  • Framework in JavaScript with UI extension released.
  • Qedy and Framework greatly enhanced.

2017

  • Qik conceived.
  • Qui became independent app inside Quid.
  • Qedy Mk. II released.
    • Layouter,
    • Processes with Actions between States,
    • QType and QListRow replaced by QElem.

2016

  • Qedy conceived.
  • Framework Mk. VI released.
    • Dict,
    • QApp replaced by QPage,
    • QType and QListRow replaced by QElem.
  • Added trip planner to Quo.

2015

  • Quo, Qarate and Quid conceived.
  • Quly conceived.

2014

  • Mravenci (Ants), running on cross platform QWebApp, released.
  • Framework Mk. V released.
    • Renderers replaced by converters,
    • multiplatform coding standards.
  • Quiky for iOS released.
  • Quiky for Windows reengineered.
    • WPF instead of WinForms,
    • using .NET Framework 4.0.
  • Framework Mk. IV released.
    • Modules instead of plugins,
    • components introduced,
    • renderers introduced.

2013

  • Quiky conceived.
  • G-Particle introduced with GeoEdit.
  • QB offers personal semantic databases.
  • Framework Mk. III released.
  • QB Mk. II released.

2012

  • Quiky conceived.
  • QetriX got a logo.
  • Framework Mk. II released.

2011

  • QB finished.
  • QB reengineered.
  • QetriX name developed.
    • QeX (2001-11-30) → Q3X → Q-tri-X → QetriX

2010

  • QB released.

2009

  • Data Particle was invented and QPDB was born.
  • Kilopedia shut down.
    • Articles were unsustainable, so we kept structured data only, which changed the concept.
  • Kilopedia received a geographical extension.

2008

  • Kilopedia moved to its own domain.

2007

  • Kilopedia released.
    • Mobile encyclopedia with short articles up to 1024 B per language,
    • each category has its own dataset for structured data.
  • Q3X App Beta released.
    • Single .exe, compatible with both Windows Mobile 2003 and Windows XP,
    • web app with the same interface and using the same XML files.
    • Used .NET Compact Framework 2.0 and PHP 5.2.
  • Q3X App Proof-Of-Concept, with XML Form and XML Data definitions.

2006

Contact

Social networks

Stay Tuned