Two months ago I've decided to start planning for Concept 4.0, just after CAS 3.0 was updated to most of my users. I skipped any intermediated version because is an entire new server and client. The main feature of the CAS 4 is the scalability. For this, the new server is written entirely in Concept (dropping the C/C++ server), and is a single-thread, polling server. It relays on green threads and non-blocking IO for performance.
Here you can see a memory usage comparison between Concept 3.0 (see the green line) and 4.0 (the blue line) for a small (mobile) application.
For an enterprise application (test was done for a real-world ERP application):
This means that a concept:// application has a very small footprint for each additional user. This is because now, you can choose to put all the users in the same process, sharing the same resources.
You could easily keep tens of thousands (possibly hundreds of thousands) of users on the same server.
This is only half of what CAS 4.0 brings. Concept 4.0 doesn't need a dedicated thin client anymore (you can still use it, but is optional). The new concept:// client is written in JavaScript and is based on web sockets and HTML5.
You can even do real-time communication applications:
Audio and video is supported directly in your browser (as long as it is Firefox, Chrome or Opera). All major browsers are running concept:// client, but Safari and Internet Explorer 11 still don't support microphone and webcam capture.
Now every GyroGears applications runs directly in browser with a very small footprint, being able to handle large amounts of simultaneous users.
I hope to have the first BETA version early January 2015.
Monday, October 27, 2014
Wednesday, July 30, 2014
10 years of Concept
Already 10 years since the first Concept 1.0 release... Countless white nights all for a passion. Is now the most complex project I've been working on. It was fun, sometimes frustrating, and fueled only by my passion. The Concept Book is now almost ready (I hope to find an editor in august).
Concept Client 3.0 is now finally released but available only on Windows. I hope that next week it will be available on Linux and Mac (64bit only).
Between tens of bug-fixes, I managed to add a nice feature to GyroGears: a form designer. Gyro automatically generates all the forms, but in some cases, a manual design may be needed.
Activating the marked link will open the form designer:
This is very useful for specific layout requests. However, I don't recommend using this feature, because it could provide an inconsistent layout through the application. GyroGears forms all identical in layout for a given application. When adding a custom form, it may interfere with the application usability.
Concept Client 3.0 is now finally released but available only on Windows. I hope that next week it will be available on Linux and Mac (64bit only).
Between tens of bug-fixes, I managed to add a nice feature to GyroGears: a form designer. Gyro automatically generates all the forms, but in some cases, a manual design may be needed.
Activating the marked link will open the form designer:
This is very useful for specific layout requests. However, I don't recommend using this feature, because it could provide an inconsistent layout through the application. GyroGears forms all identical in layout for a given application. When adding a custom form, it may interfere with the application usability.
Tuesday, July 15, 2014
Concept 3.0 developing tools
Concept 3.0 is now finally available. The server itself is stable (the engine is available since version 2.6), but now the also Concept Client 3.0 is available.
It comes with a brand new IDE, Concept IDE 2.0.
Glade was dropped in favor of RDesigner, a Concept-native UI designer that can handle both glade and the new Concept UI XML format.
I've started a face-lift for GyroGears. It will also include a "Custom form designer" based on RDesigner that will allow the developer to define specific forms when needed, replacing the gyro auto-generated forms.
The final release is planned on the 10th birthday of Concept, in about two weeks. It will include the Concept Client 3.0 deb package and OS X image.
It comes with a brand new IDE, Concept IDE 2.0.
Glade was dropped in favor of RDesigner, a Concept-native UI designer that can handle both glade and the new Concept UI XML format.
I've started a face-lift for GyroGears. It will also include a "Custom form designer" based on RDesigner that will allow the developer to define specific forms when needed, replacing the gyro auto-generated forms.
The final release is planned on the 10th birthday of Concept, in about two weeks. It will include the Concept Client 3.0 deb package and OS X image.
Saturday, June 14, 2014
Concept 3.0
A lot has happened since the last time I've posted. To start with, I finally written the Concept manual, a 600 pages book describing the Concept programming language and framework. Now I'm looking for an editor that I could afford. I hope that the book will be available in October 2014.
Let's start with the new stuff in Concept 3.0
Lets start with the GPU programming. It uses OpenCL and it automatically converts Concept bytecode to GPU bytecode, for example:
As you see, all the code is written in Concept (no OpenCL code). The Parallel framework may use both concept code and/or OpenCL code. As a note, for Concept functions, all parameters must be declared by type (see foo4 definition).
Now, the Profiler worked miracles for me, making Gyro faster than ever.
It will give you real-time information directly in the application (via ProfilerForm), or you could use the low-level APIs for background analytic:
Or even simpler, you could just choose "Profiler project" from the Concept IDE.
The green threads are a really cool toy:
These threads are scheduled directly by the Concept Core, not needing semaphores or any kind of synchronization. These threads are really fast, but are limited to one CPU core. You could combine native threads with green threads for maximum performance. Also, green threads run with the regular Concept Core (not needing the multi-threaded core).
The Concept Client was completely rewritten. I have hesitated in forcing the Gtk3 version due to stability problems on MS Windows. I've watched the Qt community, forums and list, and I was impressed by the passion of the developers, unlike the Gtk groups where there were mixed posts, both by professionals and "political" individuals involved in ego wars. So, I've rewritten Concept Client on Qt, I even made a converter from .glade files to Qt code. I like that Qt looks and performs better, supports a lot more platforms, and seems stabler. The only advantages of Gtk are the significantly lower memory usage (for the same test application, Concept Client Qt uses 102 MB of memory while Gtk 63 MB). Since I'm talking of a "Client" 40 MB difference is relatively low comparing to the advantages. Qt is faster, more responsive and behaves consistently on every platform. I find Gtk slightly more flexible on "exotic" operations, for example, adding custom controls in a tab header.
Perhaps the greatest advantage of Qt is the completeness of the framework. It includes webkit, audio, network and event webcam APIs, elements missing in Gtk (I've compiled webkit for gtk, and added OpenCV for webcam support). It also has a sheet control, that Gtk supported only with the additional GtkExtra package. However the GtkExtra developers don't seem to hurry the port to Gtk3.
It actually looks better:
I hope I will manage to post more often in the next month. In August this year, Concept will be 10 years old!
Let's start with the new stuff in Concept 3.0
- it comes with in .deb packages for i386 and amd64
- added support for GPU programming
- added support for libvirt
- added code profiler
- added SSH APIs
- added Modbus protocol support
- added tls/ssl support via OpenSSL
- added support for the netflow protocol
- added new compiler and run-time optimizations that makes Concept run up to two times faster
- added support for green threads (beside native threads). Note that I prefer calling green threads "cheap" threads.
- has a brand new client, Concept Client 3.0 that dropped GTK in favor of QT (see bellow)
Lets start with the GPU programming. It uses OpenCL and it automatically converts Concept bytecode to GPU bytecode, for example:
As you see, all the code is written in Concept (no OpenCL code). The Parallel framework may use both concept code and/or OpenCL code. As a note, for Concept functions, all parameters must be declared by type (see foo4 definition).
Now, the Profiler worked miracles for me, making Gyro faster than ever.
It will give you real-time information directly in the application (via ProfilerForm), or you could use the low-level APIs for background analytic:
Or even simpler, you could just choose "Profiler project" from the Concept IDE.
The green threads are a really cool toy:
These threads are scheduled directly by the Concept Core, not needing semaphores or any kind of synchronization. These threads are really fast, but are limited to one CPU core. You could combine native threads with green threads for maximum performance. Also, green threads run with the regular Concept Core (not needing the multi-threaded core).
The Concept Client was completely rewritten. I have hesitated in forcing the Gtk3 version due to stability problems on MS Windows. I've watched the Qt community, forums and list, and I was impressed by the passion of the developers, unlike the Gtk groups where there were mixed posts, both by professionals and "political" individuals involved in ego wars. So, I've rewritten Concept Client on Qt, I even made a converter from .glade files to Qt code. I like that Qt looks and performs better, supports a lot more platforms, and seems stabler. The only advantages of Gtk are the significantly lower memory usage (for the same test application, Concept Client Qt uses 102 MB of memory while Gtk 63 MB). Since I'm talking of a "Client" 40 MB difference is relatively low comparing to the advantages. Qt is faster, more responsive and behaves consistently on every platform. I find Gtk slightly more flexible on "exotic" operations, for example, adding custom controls in a tab header.
Perhaps the greatest advantage of Qt is the completeness of the framework. It includes webkit, audio, network and event webcam APIs, elements missing in Gtk (I've compiled webkit for gtk, and added OpenCV for webcam support). It also has a sheet control, that Gtk supported only with the additional GtkExtra package. However the GtkExtra developers don't seem to hurry the port to Gtk3.
It actually looks better:
I hope I will manage to post more often in the next month. In August this year, Concept will be 10 years old!
Sunday, September 22, 2013
9 years and one month of Concept Application Server
It's been 9 years since I've started this project. Now is mature, tested in high load environments, over a hundred end-user solutions implemented by myself. There's a lot of new stuff, both in Concept Application Server and GyroGears.
For start, Concept 3.0 is almost here, with lots of new features. The main star is the new Concept Client for iOS.
For start, Concept 3.0 is almost here, with lots of new features. The main star is the new Concept Client for iOS.
For Gyro, lots of bug fixes and a new UI model for child entities was added. Now, you can show all the info using the same window (without opening new child windows). It's a tab-bar style view.
Also, drag-and-drop of files/images is now cleaner.
Mobile applications generated by GyroGears are now read/write, and use the same source code and binary for both Android and iOS.
DRM API's are available in beta, as a new feature in Concept 3.0.
Concept Client for OS X 10.8 is now up-to-date, and soon a binary packet for Concept Application Server will be available for OS X.
Sunday, March 17, 2013
Concept 2.4
Concept 2.4 now available for download. As the main feature is the new JIT (sljit), and some basic code optimization (like dead-code elimination).
It almost tripled its speed since the first version with JIT. Here is an example for a basic benchmark for arrays + basic operations (lower the better):
About 6 times faster than PHP 5.4 and about the same speed with C (gcc, no optimizations).
I've also ran a Sieve benchmark (higher, the better):
The slight advantage for gcc comes from the fact that Concept core must call a function for accessing array elements, instead of a direct access (like in C/C++).
For now is fast enough for Concept to be a reasonable choice for CPU-intensive computations.
Average speed optimization for Concept/JIT is about 800%, but in some particular cases it is more than 2000%.
It almost tripled its speed since the first version with JIT. Here is an example for a basic benchmark for arrays + basic operations (lower the better):
About 6 times faster than PHP 5.4 and about the same speed with C (gcc, no optimizations).
I've also ran a Sieve benchmark (higher, the better):
The slight advantage for gcc comes from the fact that Concept core must call a function for accessing array elements, instead of a direct access (like in C/C++).
For now is fast enough for Concept to be a reasonable choice for CPU-intensive computations.
Average speed optimization for Concept/JIT is about 800%, but in some particular cases it is more than 2000%.
Wednesday, February 27, 2013
Concept Application Server 2.4 with 3.0 core
I've made a few tests with various programming and scripting languages (C/C++, IonMonkey, Chrome V8, Java, PHP 5.4). I've used an implementation for the sieve of Eratosthenes algorithm for the benchmark. As an unexpected result, IonMonkey (Firefox 18 javascript engine) was insanely fast (around C speed).
As a result, Concept now has a JIT compiler, that fully compiles a function upon the second run. For the standard benchmark (strings + arrays + arithmetic operations + objects) some impressive improvements were noticed. For example, arithmetic operations are about 2000% faster. Function call (context create and free) about 50% faster. Array operations are slightly faster for numbers, the same for strings. String operations already optimized remain the same. Object method call (including constructor call) about 25% faster by reusing memory (instead of freeing the memory, is conserved for the next call, same with objects). So, for the Sieve of Erathostenes repeated 900 times, these are the results (lower, the better):
As you can see, the benefits for using JIT are massive. I've chosen to use an existing JIT (Stack-less JIT compiler). It's incredibly simple and clean, and it took me about 2 days to link it to the Concept Core.
As a note, for PHP, if the Sieve interval is extended from 8193 to 1,000,000 primes, the execution time raises exponentially (v5.4 about 580 seconds, Concept with JIT about 30 seconds). A low interval was chosen as representative for real-life situations.
For GyroGears, bug fixes and a new feature: import from CSV for related members and export to Excel.
For now, Concept 2.4 with JIT compiler is available for download.
As a result, Concept now has a JIT compiler, that fully compiles a function upon the second run. For the standard benchmark (strings + arrays + arithmetic operations + objects) some impressive improvements were noticed. For example, arithmetic operations are about 2000% faster. Function call (context create and free) about 50% faster. Array operations are slightly faster for numbers, the same for strings. String operations already optimized remain the same. Object method call (including constructor call) about 25% faster by reusing memory (instead of freeing the memory, is conserved for the next call, same with objects). So, for the Sieve of Erathostenes repeated 900 times, these are the results (lower, the better):
As you can see, the benefits for using JIT are massive. I've chosen to use an existing JIT (Stack-less JIT compiler). It's incredibly simple and clean, and it took me about 2 days to link it to the Concept Core.
As a note, for PHP, if the Sieve interval is extended from 8193 to 1,000,000 primes, the execution time raises exponentially (v5.4 about 580 seconds, Concept with JIT about 30 seconds). A low interval was chosen as representative for real-life situations.
For GyroGears, bug fixes and a new feature: import from CSV for related members and export to Excel.
For now, Concept 2.4 with JIT compiler is available for download.
Tuesday, January 29, 2013
GyroGears and new driver
A new "old" database server is supported (without ODBC) both by Concept Application Server and GyroGears: Firebird. It's been a while since I've tested Firebird (and then, it was 1.5 I think) and there were some problems, especially with the "hard-to-use" driver. Now, 2.5 it works great. It still has some limitations, for example maximum column and table name length is only 31. That's now fine with Gyro (it automatically removes characters from the table names).
Now, Gyro has lots of goodies for the end-user:
For example, the nagging "You forgot to enter Name, Email, etc." window, has been replaced with a red ribbon and highlighting the field. A "switch to fullscreen" button was added that enables you to hide the toolbar. You can also see the new "Single pane" layout, that enables you to use the same space for views and actual forms avoiding opening a new window.
A feature search panel eases the menu access. The use can just search all the features in an application.
In Gyro, in all numeric members (integer and decimal) you can now enter formulas, for example, if you enter: 2+2*2 it will be automatically evaluated to 6.
The server now compiles on Windows 64-bit. Due to some differences, it didn't compile on 64bit Windows. However, on FreeBSD 64 and Linux 64 worked just fine.
Now, Gyro has lots of goodies for the end-user:
For example, the nagging "You forgot to enter Name, Email, etc." window, has been replaced with a red ribbon and highlighting the field. A "switch to fullscreen" button was added that enables you to hide the toolbar. You can also see the new "Single pane" layout, that enables you to use the same space for views and actual forms avoiding opening a new window.
A feature search panel eases the menu access. The use can just search all the features in an application.
In Gyro, in all numeric members (integer and decimal) you can now enter formulas, for example, if you enter: 2+2*2 it will be automatically evaluated to 6.
The server now compiles on Windows 64-bit. Due to some differences, it didn't compile on 64bit Windows. However, on FreeBSD 64 and Linux 64 worked just fine.
Monday, December 10, 2012
Usability++
I've added hunspell wrappers in Concept Framework (http://www.radgs.com/docs/help/standard.lib.hunspell.html).
Also, I've added into standard.lib.str Soundes, Metaphone and DoubleMetaphone functions.
I've added a few new gadgets in GyroGears applications.
1. Autocorrect in search fields (works for almost every language - defaults comes with English (US+GB) and Romanian.
2. Spell checker in text views.
3. Shortcuts for adding in relation members (see the above screenshots).
4. Beautify solution for GyroGears. This beautifies your app (aligns labels, chose which columns to be visible by default in views and so on).
Also, I've added into standard.lib.str Soundes, Metaphone and DoubleMetaphone functions.
I've added a few new gadgets in GyroGears applications.
1. Autocorrect in search fields (works for almost every language - defaults comes with English (US+GB) and Romanian.
2. Spell checker in text views.
3. Shortcuts for adding in relation members (see the above screenshots).
4. Beautify solution for GyroGears. This beautifies your app (aligns labels, chose which columns to be visible by default in views and so on).
Tags:
autocorrect,
gyrogears,
hunspell,
spell checker,
usability
Sunday, December 2, 2012
GyroGears and usability
I've had some crazy requests in the last few months. The users (end-users) complained about the usability of Gyro applications, and in some aspects they were right.
1. Latest complaint: interfaces are ugly, so I'm working at new ones.
This is the new main applications screen:
If you think it looks like something, rest assured it is not.
2. The calendar is useless.
I redesigned the calendar. Now it looks like a classic calendar widget, with drag and drop (you can now reschedule an event by moving it to another day/hour).
3. Database search - redesigned
Pattern search now applies to spaces. So, if somebody looks for "Mikey Mouse", "Mickey The Mouse" will be also returned.
Three new options for entities in GyroGears:
- search by parent
- show parent as a chain
- child search level
Let's consider a client who has contracts. In the contracts master view, I can now type the client's name, and it will return all of its contracts. Same logic for child search level. For example, in the client list, I can enter a contract number and see the client with that contract number.
A few version ago I added "Show parent" options. This way, in a master view, on the first column the parent entity representative member will be shown. But, if parent level was 2 or more, only the final parent shall be shown. When the "show parent as chain", all the parents will be shown. For example, a client, has contracts and on every contract has a service. This way, on the service view, in the parent column, both the contract number and client name will be shown.
4. Horrible Glade for UI design (developers).
Until now I used glade-window as a method for embedding Glade into CIDE (Concept IDE). This meant that on every new Glade version I had to modify the sources.
So, I've wrote my own "glade-window.
Also GTK3 is now used on Windows too.
5. Editable ComboBoxes for many to one relations
For many to one relations you could set in GyroGears "use a combo". Now, you can also set "editable combo box". This way the user can perform a quick look-up for the given member.
6. Too many "Save" buttons for modifying a child object
When you check "enable send to" for a relation, now you get this cool context menu.
This enables the used to add a child object, without editing the parent (and so, avoiding a lock).
7. Localization and international support.
A company in Jordan has Arab employees and Romanian management. So, for the same application, two different languages were needed. This was already fine with Gyro. Now is perfect.
Also, date and time can now be formatted. (Eg: %d/%m/%Y %H:%M).
8. Telephony integration
I've added a SIPPhone class in the Concept Framework. This allows you to initiate a call, answer one and talk using a high level interface.
This is somehow cool if we talk about a CRM, and the client calls in. Then, the application automatically detects the client and opens his or her records.
9. Button press feedback for image buttons on mobile client
A friend of mine tried Concept Client Mobile. He complained about the lack of feedback when he pressed an image button. So, I've added a gray tint when the button was pressed.
10. Flash in WKB (Concept Webkit Browser) on Windows (thanks to Midori)
WebKitGtk finally works as it should on Windows. Also, the left key doesn't hang up the WYSIWYG editors.
This week I will modify the data input interface and add keyboard shortcuts for various operations.
1. Latest complaint: interfaces are ugly, so I'm working at new ones.
This is the new main applications screen:
If you think it looks like something, rest assured it is not.
2. The calendar is useless.
I redesigned the calendar. Now it looks like a classic calendar widget, with drag and drop (you can now reschedule an event by moving it to another day/hour).
3. Database search - redesigned
Pattern search now applies to spaces. So, if somebody looks for "Mikey Mouse", "Mickey The Mouse" will be also returned.
Three new options for entities in GyroGears:
- search by parent
- show parent as a chain
- child search level
Let's consider a client who has contracts. In the contracts master view, I can now type the client's name, and it will return all of its contracts. Same logic for child search level. For example, in the client list, I can enter a contract number and see the client with that contract number.
A few version ago I added "Show parent" options. This way, in a master view, on the first column the parent entity representative member will be shown. But, if parent level was 2 or more, only the final parent shall be shown. When the "show parent as chain", all the parents will be shown. For example, a client, has contracts and on every contract has a service. This way, on the service view, in the parent column, both the contract number and client name will be shown.
4. Horrible Glade for UI design (developers).
Until now I used glade-window as a method for embedding Glade into CIDE (Concept IDE). This meant that on every new Glade version I had to modify the sources.
So, I've wrote my own "glade-window.
Also GTK3 is now used on Windows too.
5. Editable ComboBoxes for many to one relations
For many to one relations you could set in GyroGears "use a combo". Now, you can also set "editable combo box". This way the user can perform a quick look-up for the given member.
6. Too many "Save" buttons for modifying a child object
When you check "enable send to" for a relation, now you get this cool context menu.
This enables the used to add a child object, without editing the parent (and so, avoiding a lock).
7. Localization and international support.
A company in Jordan has Arab employees and Romanian management. So, for the same application, two different languages were needed. This was already fine with Gyro. Now is perfect.
Also, date and time can now be formatted. (Eg: %d/%m/%Y %H:%M).
8. Telephony integration
I've added a SIPPhone class in the Concept Framework. This allows you to initiate a call, answer one and talk using a high level interface.
This is somehow cool if we talk about a CRM, and the client calls in. Then, the application automatically detects the client and opens his or her records.
9. Button press feedback for image buttons on mobile client
A friend of mine tried Concept Client Mobile. He complained about the lack of feedback when he pressed an image button. So, I've added a gray tint when the button was pressed.
10. Flash in WKB (Concept Webkit Browser) on Windows (thanks to Midori)
WebKitGtk finally works as it should on Windows. Also, the left key doesn't hang up the WYSIWYG editors.
This week I will modify the data input interface and add keyboard shortcuts for various operations.
Subscribe to:
Posts (Atom)








































