Monday, March 30, 2015

Java: The once and future king of Internet programming

What is Java to you? A programming language you learned in college? The lingua francaof corporate IT? Would you believe that Java is poised to dominate the next explosion of the Internet? Built for embedded computing and streamlined for real-time applications, here's why Java is the language for IoT.
The years from 1969 to present saw networked devices balloon from four university computers connected via the ARPANET to about two billion humans frequently accessing the Internet today. In the near future that number will exponentially multiply again, from a couple billion networked devices to tens of billions of embedded processors. Every aspect of our lives will be connected by networked devices: homes, workplaces, vehicles, appliances, tools, toys --you name it.



While chatter about the Internet of Things (IoT) includes a component of fashionable hype, the underlying reality is that imminent changes in Internet growth will make previous generations of computing look trivial by comparison. IoT is not only here to stay; it's here to change everything. Consider the following timeline, which shows previous tipping points for the Internet as we have known it:
Complementary technologies that enable IoT are coming online now. HTTP/2 is a crucial networking protocol that has been updated, in part, to accommodate machine-to-machine communications. Thingsee is an example of a developer kit for the kind of hardware that IoT will demand.
Silicon Valley sage Tim O'Reilly has emphasized that the result will not be just the usual caricature of pointless connections from coffee machines or refrigerators to the 'Net at large. With enough sensors and automation, IoT is really about human augmentation. Java will be a workhorse in that coming disruption.

How IoT works

In September 2014, Andrew C. Oliver wrote that at an implementation level IoT is about teamwork. In this case, the teamwork involves both humans and computers.
As devices communicate not just with human consumers, but with other devices, fundamentally new capabilities emerge. It's not only that your refrigerator will know you have run out of tomatoes, but that it can place an order for more on your behalf. The success of pervasive computing will be that it recedes into the background, working out facts and events and remedies with other connected devices. Only executive-level results will be communicated to human consumers. The triumph of IoT will be in all the things that we no longer have to think about, even as they are seamlessly done for us.
The most mundane examples are the most telling. Leave aside just-in-time agricultural pest treatmentsminiaturized bomb-sniffersimproved medical diagnostic technology, or similarly impressive applications of IoT in recent news. Think instead of the humble vending machine -- one that's properly stocked, well maintained, and always silently awaiting your command.
When you place your bills in a vending machine and push buttons to indicate your purchase, several mechanisms interact to ensure the satisfaction of your hunger. You don't have to understand or agree with all the details of implementation; your stomach is just happy with the results. Now, we have IoT-enabled vending machines. When you make a purchase from an IoT-enabled vending machine, your purchase triggers actions spanning the globe to keep inventory in balance and parts well-maintained, at a total cost 30 percent lower than the pre-IoT model.

Java for embedded computing

Few people today realize that Java began as a language for embedded computing. Its earliest versions specifically targeted home appliances such as television set-top interfaces. Communication between devices was central to James Gosling's original vision for Java, and he envisioned it being used for not only device-to-consumer but device-to-device communication. Twenty years later, those original design strengths are ready to support the Internet of Things.
Java's ubiquity also makes it a good fit for IoT. Massive resources worldwide are invested in transmitting Java to a new generation of programmers and ensuring that it is maintained to support all the production systems that rely on it. Hundreds of thousands of successful applications and systems already attest to Java's capabilities.
For developers exploring embedded programming it is important to distinguish the parts of the Java platform. Nothing about how you code or read programs needs to change for embedded programming: good Java programmers can read embedded source code just as easily as they do the source for typical desktop enterprise applications. The libraries, and especially the development (and testing) environments, are specialized for embedded Java programming, however. Just be sure that you have the right toolchain for the embedded environment you target.

Java embedded programming in 2015

Java already had the right stuff to make embedded programming possible in 1996, but it lacked momentum. Today that momentum is gathering fast, and an ecosystem of Java standards and tools for embedded programming is ready to leverage it.
Between 2000 and 2010, it was generally true that Java-based embedded or "micro" computing centered on J2ME (Jave 2 Platform, Micro Edition). Now, Java Platform, Micro Edition, or Java ME, is the standard runtime environment for embedded applications. While Java ME and its concepts --especially profiles and configurations --remain crucial, mobile Java developers tend to focus more on Android, and HTML5 for user interfaces. Cellular telephone handsets are the most visible embedded computers, and roughly four out of five mobiles sold now are based on Android. (Although Android supports Java ME, the two have different product lifecycles, and it's not entirely clear who will decide what the next generation of application environments for practical embedded devices will be.)
Profiles and configurations are crucial concepts in embedded programming. Anembedded profile such as MIDP is a collection of APIs supported on devices of interest. A configuration is a framework specification. While not strictly true it can be useful to think of profiles as belonging to configurations, including most prominently the CLDC or Connected Limited Device Configuration. (Also see "Jim Connors' Weblog" to learn more about profiles and configurations applicable to IoT.)
In addition to Java ME's profiles and configurations, a handful of enterprise Java technologies hold potential for embedded development. Java Management Extensions (JMX) is used for distributed resource management and monitoring and could one day complement embedded definitions neatly. Real-time Java also holds an important place in embedded programming for IoT.

Java's real-time model and tools

Embedded applications connected to sensors and effectors in medical, transportation, manufacturing, and other domains often have important real-time requirements. Predictable, correct results from heart pacemakers, engine controllers, pipeline valves, and so on are matters of life and death, not just annoying stack tracebacks.
While James Gosling intended Java to fulfill common real-time requirements, real-time computations weren't a strength of Java in its early years. In particular, many Java runtimes had a reputation for unreliability, or at least inconsistency in how they handled garbage collectionReal-Time Specification for Java (RTSJ) and related standards addressed temporal indeterminacy with support for periodic and sporadic task scheduling, task deadlines and CPU time budgets, garbage-collecting threads, and allowances that enable certain tasks to avoid garbage collection delays. RTSJ was approved in 2002 and has been implemented for a number of Java VMs.
Although RTSJ was officially listed as dormant in the Java Community Process until February 2015, specification experts have been actively at work refining and updating it throughout the last decade. As an example, JamaicaVM is an RTSJ implementation supported by aicas GmbH, available at no charge for educational and other non-commercial use.
More recently, Oracle has promoted Java SE for real-time systems, suggesting that Java SE has been enhanced sufficiently to meet soft real-time requirements. Softhere has at least two distinct related meanings. One is that requirements have to do with average behavior; for instance, it's good enough that an average bank transaction will post within 300 milliseconds. This is in contrast to hard real-time requirements, such as the requirement that a particular locomotive-switching solenoid close at worst within one-and-a-quarter seconds of the application receiving a specific alarm. The most important requirement for hard real-time systems, in this sense, is that the worst case must be predictable.
Soft real-time is good enough for many embedded and IoT applications. For applications that require hard real-time support, Java developers largely turn to JSR-302: Safety Critical Java Technology. This spec is a subset of the Real-Time Specification for Java, and parts of it depend on the CLDC. Among other features, Safety-Critical Java defines its own concurrency model and real-time threadsThe Open Group industry consortium originally began work on Safety-Critical Java in 2003. Asked about the spec's status, JSR-302 specification lead Doug Locke estimated that its long gestation will lead to an approved specification this spring, with a reference implementation possible by early May 2015.

Next up in Java embedded

Java holds much promise for embedded programming, and there is work to be done in order to enable it to meet the coming explosion of demand and possibility in IoT.Tens of billions of Java-capable devices will go into use as part of the IoT network over the next few years. My next article on this topic will feature specific examples of programming for embedded Java environments in both hobbyist and commercial contexts, along with a deeper explanation of why RTSJ 2.0 will impact Java far beyond traditional domains for real-time programming.


Courtesy:-JAVAWORLD

7 Easy To Operate Code Checking Tools

 Code checking tools come very handy at times. Code snippet tools are available and quite popular among developers. There are number of tools that help developers check different unrecognized codes. Today we have listed top 7 online tools that help developers for testing the code.




CodePen

CodePen is one of the best tools for code verification. The tool has free trial period with all functions of code checking software. CodePen is a genuine code authentication tool. The tool is quite easy to use. Developers can upload the code and test it for unrecognized and incomplete lines of code.

Dabblet

Dabblet is a dynamic tool for testing unprepared code. You can test unprepared HTML and CSS scripts. Dabblet brings all the tools for data processing and code testing. Developers can manually identify embedded codes. The tool supports Chrome, Firefox and Safari tools.

Ideone

Ideone is a great debugging tool for developers. The tool has list of unidentified codes produced by hackers on the internet. The tool comes handy to help developers identify free code and transfrom the same code in various programming languages. Ideone can be used with HTML framework to produce faster code and for modification.

jsFiddle

jsFiddle is simple tool for JavaScript modification. The tool helps users in creating customer friendly, easy to understand code for debugging. jsFiddle helps users for perfect code checking framework.

Codepad

Codepad helps developers to code online. Developers can test their code in real-time. Codepad is also used as the code complier to integrate code in single framework.

JSbin

JSbin is an ultimate tool for specific code debugging. Beginners might find it complex to use JSbin but, experienced users can utilize this tool in creating properly optimized website. There are different versions of JSbin for JQuery, Mootools, UI and JQM.
Chop

Chop has great interface that helps developers to check and test code much faster. The tool follows easy ways to manage the data. Chop is a reliable tool for code checking and sharing. 




Courtesy:-Efytyms

8 Must-Have Tools For IT Manager

 IT Manager has the responsibility to look after company’s entire technological infrastructure. IT manager looks after everything from help desk to servers to cloud-based apps. The security of the IT infrastructure is main concern for IT Manager. There are plenty of tools IT Managers use to ease these tasks. Today we have listed top 8 tools IT Manager can use to work more effectively.



Spiceworks.com

Spiceworks is a set of IT management tools. The software toolkit can be accessed and controlled using one app. The software kit can be used to keep up with inventory, monitor network activity and manage help desk. Managers can access the information on every connected device suing network inventory management and monitoring software.

InvGate Service Desk

This software lets your agent log and assign the call. This is an ultimate tool for help desk. This is the most efficient way to redirect calls. The tool has built-in analytics and gasification that can be used to motivate employees and asses training needs.

ServiceNow

ServiceNow’s IT Service Management software makes tech support way easier than it has ever been. The tool helps in creating a visual interface for help desk ticketing. Users can place tickets, view status updates and technicals can check in from the field using mobile device. It is the most favorited tool by IT managers and technicians.

ManageEngine

ManageEngine is an extensive suite of services that help IT managers bring automation in their practices. The built-in suite includes tools to automate active directory, capture and deploy desktop images, set up mobile device policies and much more. ManageEngine offers a great selection for free tools for Windows and Android administrators. ManageEngine also helps IT Managers to ping servers and websites as well monitor system.

IT Manager

IT Manager is an ultimate app for iPhone users. The tool can be of great help to all the IT managers who need to be traveling all the time. IT Manager makes it easy to manage the networks with cloud-based interface. You can use the dedicated app or access the cloud interface using mobile device. IT team can remotely manage VMWare, Windows, Active Directory, SSH, Amazon Web Services and many more applications remotely using this app.

Basecamp

Basecamp is a great way to centralize all communications. You can simply log in to Basecamp to review assignments, post updates and communicate with each other, the tool provides similar simplistic user interface such as social media sites.

SurveyMonkey

SurveyMonkey is widely used by IT Managers to conduct built-in surveys. You can easily create your own questionnaire using the application. You can know the painpoint of customers and come up with a revised technology or app as per customer requirements. SurveyMonkey is an ultimate survey portal.

Lansweeper

Lansweeper provides information of all connected devices. The tool can act as an automated software to install new piece of software on all connected devices. You can push the update to information or patch from the server and save time. 





Courtesy:-Efytyms

7 Simple Solutions To Daily Tech Problems

We are surrounded by technology and gadgets in today’s world. As the amount of technology in household increases, the complexity increases too. We often spend more time in maintenance of these gadgets than actually using them. Today we have listed 7 simple solutions to all your tech problems.
Increase WiFi Signal Range, Three Rules Of Router Placement, Wireless Storage & Printing, Charging Multiple Devices, Multiple Remotes, Eliminate The Power Drain, Cable Management, 7 simple tech solutions, tech problems, WiFi problems



1. Increase WiFi Signal Range

We all utilize wireless internet in today’s world. WiFi has become crucial part of our lives. The range of WiFi signals is dependent upon the antenna in receiving device. Some routers have high range than others but, it is quite possible to swap only the antenna in the router to increase the WiFi range. If you are comfortable with tickling around with settings, then you can check if you can increase the transmit power of your router. It is named as TX Power in settings. The default value may be in the range of 60 or 70.

2. Three Rules Of Router Placement

WiFi signals emanate in circular form. It is recommended that, to get the maximum WiFi coverage, you should place the router as close the center of the house as possible. WiFi signals travel down rather than up. So you can try place the router on height to maximize the coverage. You can place the router on a higher location like top of cupboard or on ledge. Remember that thick walls and interference from other devices like cordless phones, microwave, wireless headphone eat up wireless signals consistently.

3. Wireless Storage & Printing

Wired printer is usually placed in some room, connected to desktop. If you are planning to buy a new printer, spend a little more and purchase the printer with built-in WiFi. You might need to upgrade your router as well. Buy the one with print server support from Asus, D-Link or Belkin. The router with print server support starts at Rs 2,000 onwards. You can also setup network storage. You can connect a portable hard drive to the USB port of the router and configure it as network storage. The drive will be visible to all the devices connected to WiFi.

4. Charging Multiple Devices

Everybody has multiple devices these days. The power input is most important part in any charger. If you try to charge the device that requires 2Amp current with a charger that pushes only 1amp, the device will still charge but, it will take twice as long for a full charge. You can get something like Portonics 6port USB charger.. This can charge 6 devices at a time. Each port supplies 1amp of power. Some users rely on charging their devices through computer or laptop’s USB port. You should remember that, computer’s USB port offers only 0.5 amps of power, which is not enough to charge a tablet. It will take longer than usual to charge a smartphone. USB 3.0 ports on computer put out 0.9 amps of power.

5. Multiple Remotes

The television set in your house is usually connect to multiple sources. It is connected to a set-top-box, DVD or Blue-Ray player, a gaming console, media player and even PC. It is fairly common to have multiple remotes in household. You probably have remote controlled music system, air conditioner and so many other devices. You can buy something basic and inexpensive solution for all remote controls. Universal Remote is available for inexpensive amount these days. Logitech Harmony remotes are the best. It is available for Rs 2,300. The smart way is to get a smartphone with IR emitter. Some latest smartphones are from Samsung, HTC are coming with built-in IR emitters. These phones also have preloaded remote control app.

6. Eliminate The Power Drain

Most of the devices continue to draw a small amount of power even in standby mode. Most users don’t realize that this small amount of power can increase the power bill by substantial amount. The simplest way to check this is by making sure that you switch off the main supply of device instead of putting them in standby mode. You can also buy a power consumption monitor that shows energy consumption by any connected devices. These monitors come with a display that shows energy consumed as well as voltage readings.

7. Cable Management

This is a big issue for many tech users. You can notice that cables are popping out of everywhere as you add gadgets to your house. We recommend to get cable cover organiser. You can find this tiny tool for Rs 150. It is just a hollow pipe that can be used to cover and hide all the wires. You can also purchase zip ties and tie al cables together. The smart way is to invest in devices that enable wireless connectivity. Wireless projectors are easily available at low cost today. You can also buy a Bluetooth audio receiver for as cheap as Rs 1,000 to convert any audio system in Bluetooth speaker. 




Courtesy:-Efytyms

10 Best Wire-Framing Tools For UX Designers

Wireframing tools have great importance in programming. Individuals can draft interfaces of websites and mobile applications. These tools are used for creating essential diagram, mockups and prototypes. Even though these tools are used for individuals, you can use them as group also. Developers use such tools to make low-loyalty wireframes while, some users utilize these tools to show more unpredictable outlines and techniques. Today we have listed 10 best wire framing tools to help you achieve your goal.
wireframing, tools, UI design, UX design, designers, prototyping tools, appery, concept.ly, whatusersdo, trymyui, pencil evolus.



1. Concept.ly

concept.ly is an innovative tool to design and build interactive applications. You can use This tool for creation of interactive user interface in few clicks. concept.ly lets you create fully interactive prototype that seem like an ap.

2. Attensee

Attensee helps in creating ad campaign elements. You can find out how much attention you can give to conversation oriented elements like value proposition, call-to-action buttons and some banner ads. Participants can explore blurred design within a small circle.

3. Appery

Appery is best way to create javascript frameworks. The tool utilizes Angular.js, Bootstap and jQuery mobile. You can create mobile and responsive websites using Appery. The cloud based platform makes it easier to integrate backend services in your apps.

4. WhatUsersDo

WhatUsersDo is a great tool for mobile tablet and desktop user testing. The tool lets you test detailed behavioral metrics. You can get behaviour metrics and UX insight reports. WhatUsersDo is quite helpful for advance international panel selection and screening expertise.

5. HandCraft

HandCraft is a best place to pull things together in website prototyping. The tool can be used to as HTML editor. Developers can edit the HTML code and see the preview in real time in browser window. HandCraft helps developers to host their stuff and also provides dedicated URL to share their apps.

6. Appesee

Appesee is popular mobile analytics platform. It provides in-depth analysis of user behavior. Appesee helps in providing ultimate app experience to users and developers.

7. Trymyui

Trymyui is known for testing website or app on any device. You can screen capture the video along with real-time audio narration for best experience. The tool has user gestures that include taps and swipes. Trymyui helps developers in providing best user experience without using external devices.

8. pencil.evolus

Pencil is built with a vision of providing a free and open-source GUI for prototyping. People can easily install pencil and create mockups for popular desktop platform.

9. NaviewApp

NaviewApp is an online service that helps you in designing and building navigation prototypes. You can test these prototypes in real-time with your users. The tool has extensive list of features.

10. SavahApp

SavahApp is another great example of prototyping tool. You can easily drag-drop elements to build functioning mockup. The tool helps you create interactive prototypes for web and mobile apps. 





Courtesy:-Efytyms

Saturday, March 28, 2015

“Database is wrong for you” and all that FUD

Checksum-based storage. It’s one of the key features that makes Artifactory better than the competition. Here is the typical false claim made by Sonatype (creator of Nexus, that uses a plain Maven2 filesystem for their repository) about Artifactory storage:

“Artifactory takes the polar opposite approach and stores the metadata and the artifacts themselves in a huge database. The reason they claim it’s needed is for transactional behavior. Using a database doesn’t guarantee transactionality and it certainly isn’t the only way to get transactional behavior.”
Not only are these claims and vague reasoning wrong (we didn’t do it just for the sake of transactional behavior, and we recommend to store the artifacts on the disk), but so is the main claim that using a database is bad for you. Here are the real reasons that Artifactory uses checksum-based storage:
  • Deduplication- By referencing binaries by their checksum, pretty much like Git or Dropbox do, and not relying on filesystem paths same-content files are never stored more than once. This is one of the few ways you can optimize the storage of binaries.
  • Free copy and move- Artifact promotion (i.e. Moving between repositories with different visibility rules) is critical for building continuous delivery pipelines. With a checksum-based storage those operations don’t involve any filesystem activity at all – just adding and removing file references in the database.
  • Efficient uploads, downloads and replication- Optimize network operations by first sending checksum headers. Files that already exist in storage are skipped, even when they appear under a different path.
  • Filesystem performance. Since files are never overwritten, and are only deleted during storage GC, normal operation never requires a write lock on the FS. Expect significant performance gains compared to plain FS storage.
  • Search stability and performance-
    Misusing frameworks initially meant for full-text indexing to search through a filesystem is fragile and slow. With a checksum-based storage, all repository information and artifact metadata are stored in optimized database-indexes: always up to date, blazingly fast and never broken.
  • Freedom of layout- When metadata is extracted only from the filesystem and the files are locked in a Maven2 (or any other) layout, it’s hard to impossible to support other layouts. Since Artifactory uses the database as a layer of indirection between the actual storage and the displayed layout, it natively supports all layouts including Maven2, Maven1, Ivy, Gradle, Nuget, YUM, npm, debs, Docker, PyPI or any other custom layout.

Get the picture?

Smart checksum-based storage == powerful  features and better performance.

Naturally, Artifactory supports all the major relational databases including Oracle, MySQL, MS SQL Server and PostgreSQL. We could have used any database, including NoSQL ones, however we choose to use a relational database as a bullet-proof technology that many of our customers, enterprise and startups alike, feel at home with. Out of the box, Artifactory comes with a bundled Apache Derby DB, and customers switch to their production DB by modifying one line of configuration.

And look who’s crashing the party!

It took a while, but it looks like Sonatype finally got the picture as well.
Тhe Maven2 layout is burned into Nexus repository information that is a mixture of a Maven2 inflicted Nexus index in Lucene format and the file-system. This effectively blocks Nexus from being flexible in supporting other systems and layouts.
To solve this problem Sonatype mimicked the Artifactory approach by using H2 for their NuGet support. It didn’t help much; Nexus support for NuGet is “suboptimal” to say the least, but at least it shows someone finally understood that relying purely on the filesystem for metadata and indexes can not scale.

“H2″ you said?

So what’s that H2 database that Sonatype use for Nexus? Well, it’s an embedded in-process database which is supposed to give Nexus an escape route from its Maven2 layout prison. Is it any good? It is! Does it have commercial support that you might transitively need when using Nexus for production? Judge for yourself! And I’ll quote:
“Commercial support for H2 is available from Steve McLeod (steve dot mcleod at gmail dot com). Please note he is not one of the main developers of H2.”
All in all, it’s definitely a step in the right direction. Unfortunately, it leaves Nexus users in pretty much the same place: a repository locked down to the Maven2 layout filesystem, effectively making anything other than Maven artifacts a second class citizen; and optimized metadata locked down to a production-questionable in-process database.




NetBeans Founder Jaroslav Tulach: “Java has to get smaller, not bigger”

Jaroslav Tulach
Java-based NetBeans began life nearly 20 years ago as ‘Xelfi’ – a project at Charles University in Prague. Since then, it’s evolved into one of the most popular IDEs for developers in the JVM space, used by 10% of Java developers in a recent poll. A large part of the success of NetBeans can be attributed to Jaroslav Tulach, who holds the title of NetBeans founder and initial architect. In this interview, we travel the length and breadth of the NetBeans journey through the years, discuss Tulach’s involvement with the DukeScript, and the disconnect between old school Java programmers and youthful JavaScripters. Why was the move to modular so pivotal to him, and what does he deem critical for the success of Java in the future?
Voxxed: To what extent do you feel you were successful in meeting your primary aims for NetBeans? (For a full look at the history of the IDE, check out the excellent Wiki page which Tulach has recently put together).
Tulach:When NetBeans company was established, we basically threw away all of the Xelfi code and started to work on version 2.0. The business goal was clear: to support all the newly appearing Java technologies of that time, attract enough users, and be acquired by a major Java player (which happened in autumn 1999 when NetBeans was acquired by Sun Microsystems). However the technical goal (which was closer to my heart from my perspective of NetBeans Architect) was to break the original monolithic design of Xelfi.
I had a vision of modularity. I envisioned a JAR with all the well defined APIs, another separate JAR with implementation of such APIs and then many small modules plugins with support for various technologies (Java, JSP, EJB, etc.). I think this vision worked great (with one small correction, you need many JARs with well defined APIs), so I like to refer to NetBeans not as an IDE, but as “the first modular Swing application framework in Java”. Without modularity we couldn’t manage the thousands of modules which compose NetBeans IDE these days.
You’ve since turned your attention to the Duke Award winning project, ‘DukeScript‘, designed to put the Java back into JavaScript. What do you have against JavaScript and HTML5?
Well, I am just a contributor to a small part of the DukeScript project. The name and the vision to glue various different technologies (some created as part of NetBeans project) and combine them into DukeScript is idea of Toni Epple.
For me personally, JavaScript is just another assembly language. An object oriented assembler people were seeking for in 80-ties. At that time I was coding in Z80, C64 assembler and felt happy, but things have changed since those days, I don’t see any reason why people should code in assembler anymore. And certainly I am not going to do so myself – I rather spend a year to create a framework than to write directly in JavaScript.
I know large group of people that are fine with JavaScript, but face it: It’s a “write once and throw away” language. You write your code once and ship it when it works. Later, when you are asked to change something in it, you are afraid to touch it. No refactorings, as no tool can guarantee that your code will behave the same after refactoring (unlike in more restricted languages like Java), no huge changes – touch it only lightly and with care. It is often easier to start from scratch.
I hear complaints of this kind from executives everywhere. Especially if they have one gang of Java programmers and another of JavaScript developers in-house. They tend to see the latter as less reliable geeks always trying something new, but never delivering long lasting product. It may be clash of generations (as JavaScript guys are usually younger), but I believe the root cause is the assembly nature of JavaScript.
To illustrate why I believe JavaScript is another assembly language, let’s think about a way to invoke original implementation in an overwritten method. In Java you’d use “super” keyword:
1
2
3
4
5
protected void aMethod() {
   // do something before inherited behavior
   super.aMethod(); // invoke original behavior
   // do something after inherited behavior
}
This is a common construct in classical object oriented languages, not only in Java. It makes it easy to do something programmers do frequently – for example, specialising behavior when subclassing. However “super” has its limitations: you cannot call super.super.aMethod() – e.g. skip level of inheritance. You cannot call super.aMethod on some completely different object, etc.
JavaScript does not have concept of “super” – however it has something more powerful: there is a “call” function where you can specify the actual method/function to call, on what object (e.g. “this”) and with what arguments. You can use the “call” concept to simulate “super”, but you can also use it in a number of other ways. It is flexible, but low-level. It is something that belongs to assembly language, but not something regular developers should use when coding their business logic.
I have to repeat myself: if you keep coding in JavaScript, you end up like everyone who’s using assembler: feeling powerful at first, but constrained in the years to come.
What are the overarching aims with DukeScript? What makes it different to JavaScript and HTML5?
These days there seem to be two progressive directions of UI development: mobile and browser. The mobile world is currently dominated by Android and its flavour of Java, and it seems to be doing really well. On the other hand, the browser is about HTML5/CSS, followed very closely by JavaScript.
These two worlds seem to be separated, yet it is very clear that both sides are looking at each other and trying to find a way to capture the other market. So far the efforts are not very satisfying (in my opinion) as each carries the weaknesses of originating world with itself making it almost unacceptable for the other world to swallow such technology. On one side most of Java developers don’t want to code in JavaScript. On the other hand, browser plugins for Java and flash are less and less popular.
Is there a way to pick-up best of the two worlds? DukeScript does it. Unlike its name, DukeScript is not a new programming language. DukeScript merges HTML5/CSS with Java, without the need to write business logic in JavaScript. DukeScript’s inventor Toni Epple calls DukeScript – “the JavaScript as it was meant to be” – and I can only confirm that: if the way DukeScript interacts with HTML elements was known in ’90s, there would be no need to invent JavaScript (and name it so it piggy backs on Java popularity).
Everybody who tries DukeScript can immediately see its benefits. HTML5/CSS can be rendered on any device these days and (as world-wide-web and its essential HTML format celebrated twenty fifth anniversary last year) it’s tooling is really excellent. Everyone knows how to write an HTML page and use responsive web design to make it cross-platform these days. Java has been around for more than twenty years and its tooling is also superior. IDEs support refactoring, static code analysis, reliable code completion, and there are an enormous number of libraries to use. Java is industry strength language known to keep cost of ownership low – way lower than any “Joe, the developer” using the “assembly language of these times” – e.g. JavaScript – managed so far.
DukeScript (named after Duke, the mascot of Java) brings together the strengths of HTML5/CSS and Java while allowing you to write once and display everywhere. The same application can be packaged to run on desktop, Android, iOS and even in a browser. DukeScript tooling builds on the synergy of the best tools available for HTML5/CSS and for Java and clearly separates the developer vs. design workflow. Use your favourite HTML5/CSS auditing tools for the UX design, and use your favourite Java IDE to develop application logic. Reduce time to market with DukeScript ‘s carefully designed APIs leading to comparable and sometimes even shorter code than similar JavaScript based solutions. Speedup your edit/try cycle by automatic hot redeploys of your HTML and Java without page reloads or restarts. Be productive. When done, let DukeScript package everything for you and just deploy everywhere: AppStore, Google Play, your website, native app, etc.
Find out more at http://dukescript.com
You’ve been working with Java for many years now – how have you seen the community change?
I’d say it is getting older. That is sad, but probably inevitable. Younger generations seem to have other toys to play with – I’d say that every generation needs its own assembler – so they don’t find Java that interesting. I’d like to change it, but for that it is essential to re-establish Java reputation on the client – that is why I am such an enthusiastic supporter of DukeScript.
What do you hope to see in future versions of the platform?
Java has to get smaller, not bigger. I have been observing and contributing ideas to project Jigsaw – the modularisation of JDK – since 2006. I am glad to see the project finally delivered some results – at least the sources in Java repository are now modularised.
However, we need more of that. The smallest proposed JDK9 module still has more than 3000 classes. That is way too many for my purposes. Also, I am a bit worried about adding more complexity to the VM specification, that will only complicate life of alternative VM implementations (like my Bck2BrwsrVM, for example).
But my hope still lives on that we we will have small, easily portable Java core one day.
How do you think NetBeans ranks alongside other leading IDEs – what to you makes it a standout?
Recently I had some interaction with Gradle community and Gradle inventor suggested that IDEs should not invent their own internal build system. I can only support such idea: a good IDE should be just a UI wrapper around the build system!
This has been NetBeans vision since 2003 – first of all NetBeans was a wrapper around Ant, then Make, later also Maven, now also Gradle. As a result one can trust that pressing F9 (build) is the same thing as typing “mvn install” on command line – e.g. if it works in NetBeans, it will also work well on the continuous integration server. I can’t envision development style where the connection between IDE and build system would be any weaker.
In case somebody is looking for an IDE tightly integrated with build system, try NetBeans and you’ll be surprised how addictive such connection can be.
There’s a lot of excitement around JavaFX – can you see it eventually displacing Swing entirely?
I’d like to use the excitement around JavaFX and re-transform it into something more promising – i.e. DukeScript.
There are excellent things that JavaFX provides: CSS-like styling or declarative description of UI via FXML. However there is one problem with JavaFX – it is a complete stack – from the widget APIs, through the various rendering pipes, down to the hardware video card accelerator. This is a lot of code to maintain and the code is different for each supported platform. No wonder the JavaFX team at Oracle used to have hundreds of engineers. However, as far as I can tell, there are not as many people working on JavaFX anymore, and it will be hard to ensure wide portability and pace of innovation.
Nonetheless, if you like CSS styling and want to describe your UI in declarative way, there is no reason to despair – try DukeScript. The UI is in HTML/CSS and the programing language is still Java. Moreover DukeScript is really lightweight – it is just a tiny, yet inventive, Java wrapper around web pane – as such your mobile application will be few times smaller than similar JavaFX one. Moreover the rendering stack is reusing work done by major browser vendors and as such it is easy to keep up with the innovation happening in the JavaScript world and also port such applications to run everywhere.
If I was a Java developer trying to bring my client application to new platforms (like iOS, Android, embedded, browsers), my choice would be DukeScript.
As a well respected veteran of API design, what fundamentals would you give to any developer looking to emulate your style?
There is a difference between building an in-house software and building a framework. If we try to apply our daily knowledge based on the in-house development when developing a framework, we may be very surprised. I call such surprises “paradoxes” – situations where our expectations are not matched. I don’t claim I know everything about API design, but I managed to collect at least 20 API Paradoxes and enlist them in a book http://www.amazon.com/gp/product/B009NNXPES – it’s a relatively easy read and knowing some of these paradoxes in advance can save every starting API designer quite a few surprises.


This story, "NetBeans Founder Jaroslav Tulach: “Java has to get smaller, not bigger”" was originally published by voxxed.com