1
I Use This!
Activity Not Available

News

Analyzed 4 months ago. based on code collected about 2 years ago.
Posted almost 12 years ago
And here it is! After months of development and tests. After gallons of coffee (and some beers. But very few. I swear) After many arguments but also many hugs during meetings. After dozens of live presentations during conferences, meetups, all around ... [More] the world, and many webinars. After thousands of posts on the forum and after having reached our thousandth forum subscriber last week. After everything a team can live through from the idea to the final product. Here is ... in all its splendor: Wakanda First Production release ... Now available! We celebrated the new release with champagne, cupcakes... ...and everything, including new T-Shirts. Then we took a picture of us, inviting you to join the Wakanda World: Super Team, Happy with the Release!   On the website, you will find a lot of informations about Wakanda. Basically: Create your business web application using a full stack, from the server to the client. Use only JavaScript. Everywhere. E-ve-ry-whe-re: One single language to create the business logic server-side, and handle the user interface client-side, for desktop or mobile applications, using HTML5 and CSS3 (without needing to be an expert. Just check boxes and pick colors in the GUI Designer) Define your business logic and security layer in one single place, thanks to the model-driven development. Get your data with WakandaDB, the super fast NoSQL Object database, running in a JavaScript multi-threaded and highly scalable environment (based on JavaScriptCore, the JavaScript engine of the WebKit). With Wakanda, you code it as you think it. Use the studio and all its graphical editors to quickly build your application. Just have a look at the feature list. One full - and consistent - stack breaks the communication problems that have always existed between a front-end developer who wants data in JSON to display it asynchronously in widgets (the 100% Web 2.0 way), and a back-end developer who answers things about relations in a database, pages generated on the server (the good old Web 1.0 way - still working perfectly though), and XML. And because it's totally open and based on standards, there is no blackbox, no need for a plugin in the browser, nothing is hidden, all is text: .js files, .html files, .css files. Only the data file is binary for performance reasons (and the source code of the server is open and published on GitHub). It's so open that if you want to only use WakandaDB, you can: It provides a REST API that is fully documented. You can create your own client interface using the framework or the tool you're familiar with, just use the REST API. Become a Warrior Now, let's talk about another feature. Not a technical one, but something developers should definitely enjoy: Licensing and pricing. Basically, enjoy the Scout license to develop and deploy for free - we're talking about unlimited deployment - under an AGPLv3/GPLv3 license, which basically means you must opensource your code. If you don't want to provide your source, then get a Warrior license. Still unlimited deployment for no more than $35/month or $349/year. Take a breath, and read it again: Thirty-five dollars per month, three hundred and forty-nine dollars per year. No typo here. You're not dreaming. Isn't such price a major feature? The Documentation is Also a Feature There is another point I'd like to highlight: Wakanda's documentation. Our documentation is huge. Very huge. And it's not that common in the OpenSource world. You can find tutorials, examples and videos in the new Learning Center, and a full description of the APIs in the documentation. Download Wakanda today! Test drive it... and join our Wakanda tribe! [Less]
Posted almost 12 years ago
Today is IPv6 day (http://www.worldipv6launch.org/). And guess what? Wakanda Server supports IPv6, in its development branch. We are very excited about this feature. It’s the result of a lot of hard work by our developers in charge of the low-level ... [More] parts of the network layer, in the C++ code. And now it's ready for D-Day! Just a quick reminder about IPv4/IPv6: You may know that most of IP addresses in the world are currently IPv4 addresses. This means the address is coded with 32 bits, in 4 bytes. In "123.456.789.012" each set of numbers is a byte, each value is in the range of 0-255. At the end, there are about 4.3 billion IPv4 addresses available since the protocol was invented and began to be used, way back in the 1980s. But in the last 30 years, the internet has become something normal, beyond the realm of geeks. Omnipresent, even. And just about everybody can (and wants to) have their own Web site. The problem is, we’re about to reach the limit of available IP addresses. Source: http://en.wikipedia.org/wiki/IPv4_address_exhaustion The IPv6 protocol (http://en.wikipedia.org/wiki/IPv6) fixes this problem. An IPv6 address is coded in 128 bits. Which allows 2128 (3.4 x 1038) addresses. The good news is that the people in charge of addresses say everything will be fine. 96 More Bits, No Magic is a kind a baseline for this move. Using such long addresses has three main benefits: Easier address allocation, efficient route aggregation, and special addressing features. A cool side-effect of the new protocol is that we could even cover every person on the planet with several IP addresses! As of today, we have added IPv6 support in Wakanda’s development branch. Enjoy! [Less]
Posted almost 12 years ago
4D has announced Wakanda Beta 2, the newest beta version of its JavaScript development platform. With Wakanda, developers have a first-ever full stack JavaScript development platform for Web and mobile business applications. The new Wakanda ... [More] foundation relies on best-of-breed technology – Web and mobile applications, a development studio, client framework, NoSQL database, server and model-driven architecture. Both an Open Source community and commercial version of Wakanda will be offered, and Web applications developed with Wakanda are easily deployed on the Cloud. Wakanda can be used to develop the entire application stack with JavaScript, and its Model Driven Architecture (MDA) assures high levels of re-use and decreases in maintenance costs. Both the user interface and application data are designed with a powerful WYSIWYG designer from Wakanda Studio, and the Wakanda client framework and GUI designer leverages the full power of HTML5 and CSS3. The NoSQL object datastore natively speaks REST/HTTP and server-side JavaScript . Wakanda’s development environment can be extended with third-party widgets, libraries and server modules. In addition, while its open source environment supports developers in adding connectors to their preferred databases. The entire Wakanda solution supports industry standards including JSON, REST/HTTP, W3C, and CommonJS. Powerful JavaScript Programming Features Wakanda leverages existing libraries and third party solutions on both client and server, and is cloud-ready. A complete list of individual features of Wakanda Studio, Wakanda Server and Wakanda Framework grouped by functional areas of the platform can be found at http://www.wakanda.org/features/ and includes touch for mobile development, pure multi-threaded JavaScript, NoSQL Object Datastore and many other new features. Availability and Pricing Wakanda production release will be available in June in both community and commercial versions. The community version of Wakanda will be free. Monthly subscriptions for commercial licenses and developer support will start at $35 per month for one developer and will include royalty-free, unlimited deployment rights.   [Less]
Posted almost 12 years ago
You’ve probably read that two repositories have recently been published on the Wakanda GitHub page: wakanda-sampleapp wakanda-extensions These repositories are meant to reference Wakanda studio extensions, as well as Web ... [More] applications made with Wakanda, either by 4D or by members of the Wakanda community. Most professional JavaScript developers today have a GitHub account on which they publish their open source work. In this article, you will learn how to become as popular as them, and how to find potential contributors to enhance or debug your project. Note: Part of this process might be facilitated in the future by Wakanda, but it is always good to learn the basics of Git & GitHub. Becoming part of the GitHub family If you don’t already have one, create your GitHub account for free: https://github.com/signup/free Then download and install the latest Git version1: Windows Mac OS X Source Create an SSH key and register it in your GitHub account using the following tutorial: Windows: http://help.github.com/win-set-up-git/ MacOS: http://help.github.com/mac-set-up-git/ Linux: http://help.github.com/linux-set-up-git/ If you are on Mac OS, you can also download the dedicated GitHub client: http://mac.github.com/ Creating your first repository Create a repository on GitHub to host your public repository: https://github.com/repositories/new Include this .gitignore file in the folder of your Wakanda solution or Studio extension, so only relevant files will be included in your repositories. Don’t forget to add a README file in your repository to describe what your application is all about. Github will even display your README nicely if you format it using Markdown2 and add a .md or markdown extension to it. This file should include the version number required to use your application or extension. Inside the terminal, go to the folder for the Wakanda solution or Studio extension. Create a local Git repository for it on your computer using this simple command: git init You can now bind this repository to the remote one on GitHub:   git remote add origin git [at] github [dot] com:{GitHubUserName}/{repositoryName}.git Add your existing files in this local repository and do a commit to save them as a current version: git add . git commit -m ‘first commit’ Such actions will allow you to subsequently save many versions of your work while you are developing it. To publish your version on the public GitHub repository, use “push”: git push -u origin master You will now see it available in public on GitHub at this URL: https://github.com/{GitHubUserName}/{repositoryName} Congrats! You made it! Having your work referenced Go to “wakanda-sampleapps” or “wakanda-extensions” and create a “Fork”. You will have your own version of “wakanda-sampleapps” or “wakanda-extensions” (Ex: https://github.com/{GitHubUserName}/wakanda-extensions) Now you’ll have to create a “submodule” in the fork3. Clone your fork of wakanda-sampleapps or wakanda-extensions on your computer and go to the matching local folder using the Terminal. Then create submodule: git submodule add git://github.com/{GitHubUserName}/{repositoryName}.git {repositoryName} It will create a folder {repositoryName} referencing your application or extension repository Then go to this folder: cd {repositoryName} and reference the remote repository (the one on Github) git remote add push git [at] github [dot] com:{GitHubUserName}/{repositoryName}.git Initialize and load your project in the folder git submodule init git submodule update Come back to the fork folder cd .. And synchronize the remote fork repository git push You should now see a folder referencing your application or extension repository in your fork on GitHub and a .gitmodules file. The last step is to ask the Wakanda team to reference your work via a “pull request.” They will just check that you’ve respected the basic guidelines and should then accept it. If not, you'll receive a message explaining what might be wrong. Feel free to ask if you have any doubt! 1 Git tutorial: http://excess.org/article/2008/07/ogre-git-tutorial/ 2 Additional rich text features are supported: http://github.github.com/github-flavored-markdown/ 3 GitHub submodule tutorial: http://help.github.com/submodules/ [Less]
Posted almost 12 years ago
Very often, I'm using a bootstrap file to set up my application when it's launched. I typically warm up the WakandaDB cache with entities, so I can do some benchmarks in kind of a real life situation later. The WakandaDB cache is filled, as queries ... [More] are performed during the application life cycle. Basically, sequential queries (which means "queries performed on non-indexed attributes") load the entities into the cache, while indexed queries load only the index pages. Here's what I'm doing to fill the cache with entities: Check the cache size and change it if needed. I set the size of the cache to 1.5 times the size of the data and the index files (.waData and .waIndx, in the "data" folder) Then I perform sequential queries on the classes I want to benchmark, so the cache is filled when I start the chronometer. Here's the code of the bootstrap file doing this, with comments to explain the usage of some APIs. "initApp.js" is inside the "bootstraps" folder, which is not automatically created by Wakanda. "Bootstraps" is a required name, and all JavaScript files found in this folder will be executed at startup. You can also right click on file and select "Bootstrap" in the "Role" submenu (see the documentation for more details). // ============================== 1. Check/Change cache size var gb = 1024 *1024 * 1024, neededSize, currentSize, dsName, msg; // Get current value currentSize = db.getCacheSize(); // get the name of the application. For example "SuperWakCRM" dsName = ds.getName(); // Get the size of the .waData file. Using a File object, // built with the path to the appropriate file. Then we use // the size property. neededSize = File( ds.getDataFolder().path + dsName + ".waData" ).size; // Add the size of the index file neededSize += File( ds.getDataFolder().path + dsName + ".waIndx" ).size; // Need more because of the way the cache organizes its data neededSize *= 1.5; // Change value only if needed. Notice that you can't _decrease_ // the size of the cache once the server is running, you can only // increase it. // Using Math.round and dividing by 100 to get only 2 decimal numbers. console.log("Cache size: " + (Math.round((currentSize / gb) * 100) / 100) + " GB"); if(neededSize > currentSize) {   // With personal limits, actually ;-)   if(neededSize > (6 * gb)) {     msg = "Cache size required is too big (" + (needed / gb) + "GB). Ask your boss to change your computer.";     console.log(msg);     // Could also produce an error:     // throw msg;   } else {   db.setCacheSize(neededSize);   }   console.log("Increased cache size: " + (Math.round((db.getCacheSize / gb) * 100) / 100) + " GB"); } // ============================== 2. Fill cache with entities // Performing sequential queries on non-indexed attributes console.log('Loading the cache...'); ds.Employee.query('salary = 0'); ds.Company.query('postalCode = *'); ds.Country.query('isoCode = *'); // . . . other classes that will be used during the benchmarks console.log('Loading the cache...done'); This code works perfectly, really. The problem is that with a 3GB data file (millions of entities in this application), the first queries are done in several seconds (around 25 on my computer). And while the bootstrap file is executed, you can't do a lot with the server. (Obviously the Studio and its graphical designers are OK.) Actually, you can do very little. Ok. Let's say you can do nothing. Worse: You could even get the "Failed to reach server before timeout" alert. However, in my situation, it's not mandatory at all for this code to be run before any other. I'm just filling the cache. To speed up the startup of the application, I can use Shared Worker. A Shared Worker is run in a separate thread, so the current thread - running the bootstrap file - is not blocked during the queries. And even easier: As I just want the worker to fill the cache, I don't need to communicate with it, to exchange messages, nor to do all those wonderful things you can do with Shared Workers. I just need to launch it. So to speed up the initialization and to avoid funny alerts, here is what I am doing: Create a "loadCache.js' file that I put inside a "Workers" folder. Unlike the "bootstraps" folder, you can give whatever name you want to this folder. You can even put your JavaScript files anywhere you want in your project. You don't even have to be tidy. But I like when things are tidy. Freedom has a cost. Having tidy files is the limit. In this file, I cut and paste the code that warms up the cache. In initApp.js, I replace those queries with the launch of the Shared Worker: // . . . previous code that sets the size of the cache . . . // ============================== 2. Fill cache with entities var ignore = new SharedWorker('Workers/loadCache.js', 'Load cache'); That's all. Now, starting the server is way faster than it was before, and I won't this beloved "can't reach the server" alert anymore. Which is sad, actually. I kind of liked it. [Less]
Posted almost 12 years ago
PTO is all about Paid Time Off! Here at the 4D Inc. office in California, we are using PTO to manage our vacation requests. This application is a work in progress and we will be releasing updated versions periodically. But PTO is an example of a ... [More] secure, multi-user business application built with Wakanda that we are planning to use for our office. PTO consists of two applications: The main application (index.html) is used by employees to request time off from work, and for managers to authorize those requests. The second application (admin.html) is used to set up and configure the PTO application. This is where you add user accounts and company holidays. Of course, there are more features to come. There is one high-level user in the Wakanda directory – "admin" – with a password of "admin". Use this admin user to login to the Admin application. In the Admin application you will notice a user account has an "access level" field. Access level 4 is for a regular employee, and 3 is for a manager. You can assign each employee a manager. All accounts (regular and manager) are stored in the User dataclass. There is an example of a recursive relation attribute in the User dataclass named "myManager". So an employee User entity will point to their manager's User entity with this attribute. Wakanda makes handling recursive relation attributes super easy! In the Admin application, assign floating holidays and paid time off hours to the users. Each user's password is set to their last name. Go ahead and create a few company holidays. Next, launch the main PTO application (index.html) and sign in as one of the users. You will see their existing PTO requests in the grid on the left. Hit the "create" button to request some time off. Employees have floating holidays that can be used in one day increments and PTO hours that can be used in increments from one hour to eight hours. Go ahead and create some PTO requests. I have left the client-side wide open as I am locking down the security and business rules on the server. Have fun playing with PTO. I hope it helps you get started with your own Wakanda project. You can find the application here: http://github.com/Wakanda/wakanda-sampleapps Make sure you launch it with the latest "Go" version of Wakanda V2 Dev. If you have any questions, feel free to drop me a line at dave[at]wakanda.org. In my next blog post I will explain how I addressed security of the application. [Less]
Posted about 12 years ago
We are pleased to announce the availability of the Wakanda Live release. This release is a stable version that passed a high level of testing from our QA department, with a level of quality suitable for wide distribution and use by end users. This ... [More] version ensures that developers can safely get a head start in their development by building deployment-ready applications with Wakanda today. The Wakanda Live release is available for download on our downloads page, http://wakanda.org/downloads You can see Wakanda in action by checking out a new webinar, where you'll be shown how to create a live, multi-user application in just 30 minutes. Space is limited, so register now. [Less]
Posted about 12 years ago
The fact is, when I write my code, I can spend time to format it exactly as I want. Most of the time, though, I let the code editor do it for me, after having set up some preferences. Let's look at some examples: - For code indentation, I can use ... [More] a tab or whatever number of spaces I prefer. - I can add a space before opening parentheses and braces…   if (…) if (…) { …or not. I can add a space after opening parentheses and braces, and before closing parentheses and square brackets…   if ( doIt ( withParameter ) ) { …or not. Or sometimes, depending on conditions and internal naming conventions, I can add blank lines after an opening brace square bracket and before the closing one... if (doIt(withParameter)) { ...some code here } …or not. I can put the case statement at the same level of indentation of the switch statement (wherever the open square bracket is). ...or not. Whatever. You get my point. Because it's my code, it's good looking! It's how I want to read it, how I feel comfortable with it. Now, sometimes, I'm grabbing code from the internet. Utilities, frameworks, whatever, either to check what it does, or because I need it to save time and avoid reinventing the wheel. Notice that - and this has nothing to do with the current article - it's not always a bad thing to reinvent the wheel. It's even a good way to practice, improve your skills, and compare with others. But the point here is that very often, a downloaded .js file written by another developer is not formatted the way I want. Sometimes it even has some kind of minfying (variables and functions are not replaced by a, b, c, etc.), but still, everything is on a single line. And here is where Beautifier stands: It formats the code almost as you want. Just set up some parameters (size of indentation in tabs or spaces, position of braces, etc.), ask Beautifier to format it, and enjoy. Say you have this code (here, indentation is based on two spaces, and for compareDates:  "no space before opening braces" and "braces on own line")… function SuperJSFunction(p1, p2, p3) {if(p1 && p2 && p3){return p1 + (p2 * p3);}} function compareDates(d1, d2) { var d1IsDate, d2IsDate; if(d1 && d2) { d1IsDate = d1 instanceof Date; d2IsDate = d2 instanceof Date; if(d1IsDate && !isNaN(d1) && d2IsDate && !isNaN(d2)) { if(d1 > d2) { return 1; } else if(d2 < d1) { return -1; } else { return 0; } } } } ...and you set the parameters of Beautifier to: Indent with a tab Braces with control statement Space before conditional Run beautifier, and here you are: function SuperJSFunction(p1, p2, p3) { if (p1 && p2 && p3) { return p1 + (p2 * p3); } } function compareDates(d1, d2) { var d1IsDate, d2IsDate; if (d1 && d2) { d1IsDate = d1 instanceof Date; d2IsDate = d2 instanceof Date; if (d1IsDate && !isNaN(d1) && d2IsDate && !isNaN(d2)) { if (d1 > d2) { return 1; } else if (d2 < d1) { return -1; } else { return 0; } } } } So beau1. Now, how does this fit with Wakanda? Easy: You can do the same in the Code Editor, starting with version 2 - part of the development branch as of today. Look at the following screenshot of the Code Editor toolbar. Did you notice these buttons? One is the Beautifier button. If you click on it, it applies beautification to your code, in the selected portion, or the entire code if nothing is selected. Il you display the pop-up menu, the button lets you either apply the beautification, see the "About" dialog, or define settings in the following dialog: Isn't it super cool? Beside handling "external" code, I can see two main reasons for using it: You type your code with a machine gun. So fast. In one shot. Without caring about formatting while typing. You're on a team, with shared and mandatory formatting. In either case, once you have finished typing your code, just apply Beautifier to it to make it fit your formatting needs. Either your own personal needs, or the team's needs. Or both2. It's available as a Wakanda Studio Extension. In fact, three of them come with the Studio: Beautifier JSLint – No need to explain JSLint. It says "JSLint will hurt your feelings." Not "may hurt," nor "will eventually hurt," but "will hurt." The extension itself is not finished yet. (See the video just below for a quiet demonstration.) Snippet – This one insert code snippets, blocks of pre-formatted code. The good news is that you can write your own extensions. The documentation for it is being written as of today and should be published soon, but allow me to copy and paste the introduction, as a teaser: Wakanda Studio extensions are software programs that can add new functionalities to Wakanda Studio. Extensions are written using standard Web technologies such as JavaScript, HTML, CSS, and JPEG. Everyone can write Wakanda Studio extensions, for their own needs or for sharing with the Wakanda community. Extensions can add contextual functionalities to various toolbars and menus in Wakanda Studio, including the main toolbar and the Solution Explorer contextual menu. An extension can - and surely will - interact with the Studio. Specific JavaScript APIs are available via the studio global object. So the extension can display an alert, get the selected files in the Explorer, get text in the Code Editor, etc. It could even run unit tests. Why not? If you are too impatient to wait for the doc – which, really, should be available within weeks of this writing – just look at the code of the existing extensions, which are located here: On Mac: {Wakanda Studio.app}/Contents/Extensions/ On Windows: {Wakanda Studio}/Extensions/   If you are way too impatient, just know that your own extensions should be located here:   On Mac: {User}/Library/Application Support/Wakanda Studio/Extensions/ On Windows: {User}/AppData/Roaming/Wakanda Studio/Extensions/   Take care if you're like me when switching from version 2 to version 1 of Wakanda. When I do this switch, I clear the Wakanda Studio and Wakanda Server folders located here ({User}/Library/Application Support/ or {User}/AppData/Roaming/). Just keep a backup copy of your extensions somewhere... 1Yes! And i'm using d1IsDate and d2IsDate just to reduce the width in the if(...) statement, to fit in this page 2If you're the boss. [Less]
Posted over 12 years ago
It's so close we can almost taste it. Wakanda is now in its first beta, which means an official, production release is just around the corner. As of today, with Wakanda Beta, the release is now feature frozen, which means you can start testing ... [More] Wakanda in the same manner it will be functioning as a full release. Now you can start planning your projects, playing with your ideas, and making the most out of this all-JavaScript platform. Here are some highlights of the beta release: Wakanda Server WakandaDB: a NoSQL object datastore with native HTTP & server-side JavaScript APIs HTTP 1.1 server with event-based thread pool and session management standards-based SSJS APIs using WebKit Nitro   Wakanda Studio a full solution and project manager with an embedded media library a graphical datastore model designer with permissions management a graphical Users & Groups manager a WYSIWYG GUI Designer with direct access to Datastore model resources and rich CSS3 support an advanced code editor with smart support for JavaScript and WakandaDB a graphical & multi-context server-side JavaScript debugger   Wakanda Client Framework (WAF) an Ajax-optimized data provider with automatic caching, paging, and lazy loading management data sources that easily bind server and local data to widgets a rich collection of business-oriented widgets like grids, forms, sliders, components, progress bars and matrices native scripts and stylesheets loader, a JSON-RPC client, Google Web font support... and much more! Runs on all modern browsers For a quick overview of what you get, check out the Top 10 Reasons To Use Wakanda Now.  And to get you going, check out this video of what you can do right away with the beta: Even more features and ideas are being worked on in the development branch – which enthusiasts are invited to follow – but in the meantime, download the beta and start getting ready to put Wakanda into use.  And don't forget to report any issues or bugs you find in the Wakanda Forum, which is your direct line to the Wakanda development team. Also, be sure to check out the "Wakanda Today" tab in the Studio to keep you in touch with what's going on in the community. You'll have direct access to the latest information from the blog, the forum, Twitter, and also a list of the events that people from Wakanda will attend, speak at, or participate in any way We hope to see you out there! [Less]
Posted over 12 years ago
The second Developer Preview of Wakanda is available for immediate download, featuring many enhancements and a number of new features. For a detailed list of what’s been put in this release, see the complete release notes. Wakanda DP2 is available on the download page.