What are Micro Frontends?

From: https://micro-frontends.org/

The term Micro Frontends first came up in ThoughtWorks Technology Radar at the end of 2016. It extends the concepts of micro services to the frontend world. The current trend is to build a feature-rich and powerful browser application, aka single page app, which sits on top of a micro service architecture. Over time the frontend layer, often developed by a separate team, grows and gets more difficult to maintain. That’s what we call a Frontend Monolith.

The idea behind Micro Frontends is to think about a website or web app as a composition of features which are owned by independent teams. Each team has a distinct area of business or mission it cares about and specialises in. A team is cross functional and develops its features end-to-end, from database to user interface.

However, this idea is not new, in the past it went by the name of Frontend Integration for Verticalised Systems or Self-contained Systems. But Micro Frontends is clearly a more friendly and less bulky term.

Monolithic Frontends Monolithic Frontends

Organisation in Verticals End-To-End Teams with Micro Frontends

What’s a Modern Web App?

In the introduction I’ve used the phrase “building a modern web app”. Let’s define the assumptions that are connected with this term.

To put this into a broader perspective, Aral Balkan has written a blog post about what he calls the Documents‐to‐Applications Continuum. He comes up with the concept of a sliding scale where a site, built out of static documents, connected via links, is on the left end and a pure behaviour driven, contentless application like an online photo editor is on the right.

If you would position your project on the left side of this spectrum, an integration on webserver level is a good fit. With this model a server collects and concatenates HTML strings from all components that make up the page requested by the user. Updates are done by reloading the page from the server or replacing parts of it via ajax. Gustaf Nilsson Kottehas written a comprehensive article on this topic.

When your user interface has to provide instant feedback, even on unreliable connections, a pure server rendered site is not sufficient anymore. To implement techniques like Optimistic UIor Skeleton Screens you need to be able to also update your UI on the device itself. Google’s term Progressive Web Apps aptly describes the balancing act of being a good citizen of the web (progressive enhancement) while also providing app-like performance. This kind of application is located somewhere around the middle of the site-app-continuum. Here a solely server based solution is not sufficient anymore. We have to move the integration into the browser, and this is the focus of this article.

Core Ideas behind Micro Frontends

  • Be Technology Agnostic
    Each team should be able to choose and upgrade their stack without having to coordinate with other teams. Custom Elements are a great way to hide implementation details while providing a neutral interface to others.
  • Isolate Team Code
    Don’t share a runtime, even if all teams use the same framework. Build independent apps that are self contained. Don’t rely on shared state or global variables.
  • Establish Team Prefixes
    Agree on naming conventions where isolation is not possible yet. Namespace CSS, Events, Local Storage and Cookies to avoid collisions and clarify ownership.
  • Favor Native Browser Features over Custom APIs
    Use Browser Events for communication instead of building a global PubSub system. If you really have to build a cross team API, try keeping it as simple as possible.
  • Build a Resilient Site
    Your feature should be useful, even if JavaScript failed or hasn’t executed yet. Use Universal Rendering and Progressive Enhancement to improve perceived performance.

The DOM is the API

Custom Elements, the interoperability aspect from the Web Components Spec, are a good primitive for integration in the browser. Each team builds their component using their web technology of choice and wraps it inside a Custom Element (e.g. <order-minicart></order-minicart>). The DOM specification of this particular element (tag-name, attributes & events) acts as the contract or public API for other teams. The advantage is that they can use the component and its functionality without having to know the implementation. They just have to be able to interact with the DOM.

But Custom Elements alone are not the solution to all our needs. To address progressive enhancement, universal rendering or routing we need additional pieces of software.

This page is divided into two main areas. First we will discuss Page Composition – how to assemble a page out of components owned by different teams. After that we’ll show examples for implementing clientside Page Transition.

Page Composition

Beside the client- and serverside integration of code written in different frameworks itself, there are a lot of side topics that should be discussed: mechanisms to isolate jsavoid css conflictsload resources as needed, share common resources between teams, handle data fetching and think about good loading states for the user. We’ll go into these topics one step at a time.

The Base Prototype

The product page of this model tractor store will serve as the basis for the following examples.

It features a variant selector to switch between the three different tractor models. On change product image, name, price and recommendations are updated. There is also a buy button, which adds the selected variant to the basket and a mini basket at the top that updates accordingly.

Example 0 - Product Page - Plain JS

try in browser & inspect the code

All HTML is generated client side using plain JavaScript and ES6 Template Strings with no dependencies. The code uses a simple state/markup separation and re-renders the entire HTML client side on every change – no fancy DOM diffing and no universal rendering for now. Also no team separation – the code is written in one js/css file.

Clientside Integration

In this example, the page is split into separate components/fragments owned by three teams. Team Checkout (blue) is now responsible for everything regarding the purchasing process – namely the buy button and mini basketTeam Inspire (green) manages the product recommendations on this page. The page itself is owned by Team Product (red).

Example 1 - Product Page - Composition

try in browser & inspect the code

Team Product decides which functionality is included and where it is positioned in the layout. The page contains information that can be provided by Team Product itself, like the product name, image and the available variants. But it also includes fragments (Custom Elements) from the other teams.

How to Create a Custom Element?

Lets take the buy button as an example. Team Product includes the button simply adding <blue-buy sku="t_porsche"></blue-buy> to the desired position in the markup. For this to work, Team Checkout has to register the element blue-buy on the page.

class BlueBuy extends HTMLElement {
  constructor() {
    this.innerHTML = `<button type="button">buy for 66,00 €</button>`;
  disconnectedCallback() { ... }
window.customElements.define('blue-buy', BlueBuy);

Now every time the browser comes across a new blue-buy tag, the constructor is called. thisis the reference to the root DOM node of the custom element. All properties and methods of a standard DOM element like innerHTML or getAttribute() can be used.

Custom Element in Action

When naming your element the only requirement the spec defines is that the name must include a dash (-) to maintain compatibility with upcoming new HTML tags. In the upcoming examples the naming convention [team_color]-[feature] is used. The team namespace guards against collisions and this way the ownership of a feature becomes obvious, simply by looking at the DOM.

Parent-Child Communication / DOM Modification

When the user selects another tractor in the variant selector, the buy button has to be updated accordingly. To achieve this Team Product can simply remove the existing element from the DOM and insert a new one.

// => <blue-buy sku="t_porsche">...</blue-buy>
container.innerHTML = '<blue-buy sku="t_fendt"></blue-buy>';

The disconnectedCallback of the old element gets invoked synchronously to provide the element with the chance to clean up things like event listeners. After that the constructor of the newly created t_fendt element is called.

Another more performant option is to just update the sku attribute on the existing element.

document.querySelector('blue-buy').setAttribute('sku', 't_fendt');

If Team Product used a templating engine that features DOM diffing, like React, this would be done by the algorithm automatically.

Custom Element Attribute Change

To support this the Custom Element can implement the attributeChangedCallback and specify a list of observedAttributes for which this callback should be triggered.

const prices = {
  t_porsche: '66,00 €',
  t_fendt: '54,00 €',
  t_eicher: '58,00 €',

class BlueBuy extends HTMLElement {
  static get observedAttributes() {
    return ['sku'];
  constructor() {
  render() {
    const sku = this.getAttribute('sku');
    const price = prices[sku];
    this.innerHTML = `<button type="button">buy for ${price}</button>`;
  attributeChangedCallback(attr, oldValue, newValue) {
  disconnectedCallback() {...}
window.customElements.define('blue-buy', BlueBuy);

To avoid duplication a render() method is introduced which is called from constructor and attributeChangedCallback. This method collects needed data and innerHTML’s the new markup. When deciding to go with a more sophisticated templating engine or framework inside the Custom Element, this is the place where its initialisation code would go.

Browser Support

The above example uses the Custom Element V1 Spec which is currently supported in Chrome, Safari and Opera. But with document-register-element a lightweight and battle-tested polyfill is available to make this work in all browsers. Under the hood, it uses the widely supported Mutation Observer API, so there is no hacky DOM tree watching going on in the background.

Framework Compatibility

Because Custom Elements are a web standard, all major JavaScript frameworks like Angular, React, Preact, Vue or Hyperapp support them. But when you get into the details, there are still a few implementation problems in some frameworks. At Custom Elements Everywhere Rob Dodson has put together a compatibility test suite that highlights unresolved issues.

Child-Parent or Siblings Communication / DOM Events

But passing down attributes is not sufficient for all interactions. In our example the mini basket should refresh when the user performs a click on the buy button.

Both fragments are owned by Team Checkout (blue), so they could build some kind of internal JavaScript API that lets the mini basket know when the button was pressed. But this would require the component instances to know each other and would also be an isolation violation.

A cleaner way is to use a PubSub mechanism, where a component can publish a message and other components can subscribe to specific topics. Luckily browsers have this feature built-in. This is exactly how browser events like clickselect or mouseover work. In addition to native events there is also the possibility to create higher level events with new CustomEvent(...). Events are always tied to the DOM node they were created/dispatched on. Most native events also feature bubbling. This makes it possible to listen for all events on a specific sub-tree of the DOM. If you want to listen to all events on the page, attach the event listener to the window element. Here is how the creation of the blue:basket:changed-event looks in the example:

class BlueBuy extends HTMLElement {
  connectedCallback() {
    this.firstChild.addEventListener('click', this.addToCart);
  addToCart() {
    // maybe talk to an api
    this.dispatchEvent(new CustomEvent('blue:basket:changed', {
      bubbles: true,
  render() {
    this.innerHTML = `<button type="button">buy</button>`;
  disconnectedCallback() {
    this.firstChild.removeEventListener('click', this.addToCart);

The mini basket can now subscribe to this event on window and get notified when it should refresh its data.

class BlueBasket extends HTMLElement {
  connectedCallback() {
    window.addEventListener('blue:basket:changed', this.refresh);
  refresh() {
    // fetch new data and render it
  disconnectedCallback() {
    window.removeEventListener('blue:basket:changed', this.refresh);

With this approach the mini basket fragment adds a listener to a DOM element which is outside its scope (window). This should be ok for many applications, but if you are uncomfortable with this you could also implement an approach where the page itself (Team Product) listens to the event and notifies the mini basket by calling refresh() on the DOM element.

// page.js
const $ = document.getElementsByTagName;

$('blue-buy')[0].addEventListener('blue:basket:changed', function() {

Imperatively calling DOM methods is quite uncommon, but can be found in video element apifor example. If possible the use of the declarative approach (attribute change) should be preferred.

Serverside Rendering / Universal Rendering

Custom Elements are great for integrating components inside the browser. But when building a site that is accessible on the web, chances are that initial load performance matters and users will see a white screen until all js frameworks are downloaded and executed. Additionally, it’s good to think about what happens to the site if the JavaScript fails or is blocked. Jeremy Keith explains the importance in his ebook/podcast Resilient Web Design. Therefore the ability to render the core content on the server is key. Sadly the web component spec does not talk about server rendering at all. No JavaScript, no Custom Elements 😦

Custom Elements + Server Side Includes = ❤️

To make server rendering work, the previous example is refactored. Each team has their own express server and the render() method of the Custom Element is also accessible via url.

$ curl
<button type="button">buy for 66,00 €</button>

The Custom Element tag name is used as the path name – attributes become query parameters. Now there is a way to server-render the content of every component. In combination with the <blue-buy>-Custom Elements something that is quite close to a Universal Web Component is achieved:

<blue-buy sku="t_porsche">
  <!--#include virtual="/blue-buy?sku=t_porsche" -->

The #include comment is part of Server Side Includes, which is a feature that is available in most web servers. Yes, it’s the same technique used back in the days to embed the current date on our web sites. There are also a few alternative techniques like ESInodesicompoxure and tailor, but for our projects SSI has proven itself as a simple and incredibly stable solution.

The #include comment is replaced with the response of /blue-buy?sku=t_porsche before the web server sends the complete page to the browser. The configuration in nginx looks like this:

upstream team_blue {
  server team_blue:3001;
upstream team_green {
  server team_green:3002;
upstream team_red {
  server team_red:3003;

server {
  listen 3000;
  ssi on;

  location /blue {
    proxy_pass  http://team_blue;
  location /green {
    proxy_pass  http://team_green;
  location /red {
    proxy_pass  http://team_red;
  location / {
    proxy_pass  http://team_red;

The directive ssi: on; enables the SSI feature and an upstream and location block is added for every team to ensure that all urls which start with /blue will be routed to the correct application (team_blue:3001). In addition the / route is mapped to team red, which is controlling the homepage / product page.

This animation shows the tractor store in a browser which has JavaScript disabled.

Serverside Rendering - Disabled JavaScript

inspect the code

The variant selection buttons now are actual links and every click leads to a reload of the page. The terminal on the right illustrates the process of how a request for a page is routed to team red, which controls the product page and after that the markup is supplemented by the fragments from team blue and green.

When switching JavaScript back on, only the server log messages for the first request will be visible. All subsequent tractor changes are handled client side, just like in the first example. In a later example the product data will be extracted from the JavaScript and loaded via a REST api as needed.

You can play with this sample code on your local machine. Only Docker Compose needs to be installed.

git clone https://github.com/neuland/micro-frontends.git
cd micro-frontends/2-composition-universal
docker-compose up --build

Docker then starts the nginx on port 3000 and builds the node.js image for each team. When you open in your browser you should see a red tractor. The combined log of docker-compose makes it easy to see what is going on in the network. Sadly there is no way to control the output color, so you have to endure the fact that team blue might be highlighted in green 🙂

The src files are mapped into the individual containers and the node application will restart when you make a code change. Changing the nginx.conf requires a restart of docker-composein order to have an effect. So feel free to fiddle around and give feedback.

Data Fetching & Loading States

A downside of the SSI/ESI approach is, that the slowest fragment determines the response time of the whole page. So it’s good when the response of a fragment can be cached. For fragments that are expensive to produce and hard to cache it’s often a good idea to exclude them from the initial render. They can be loaded asynchronously in the browser. In our example the green-recos fragment, that shows personalized recommendations is a candidate for this.

One possible solution would be that team red just skips the SSI Include.


<green-recos sku="t_porsche">
  <!--#include virtual="/green-recos?sku=t_porsche" -->


<green-recos sku="t_porsche"></green-recos>

Important Side-note: Custom Elements cannot be self-closing, so writing <green-recos sku="t_porsche" /> would not work correctly.


The rendering only takes place in the browser. But, as can be seen in the animation, this change has now introduced a substantial reflow of the page. The recommendation area is initially blank. Team greens JavaScript is loaded and executed. The API call for fetching the personalized recommendation is made. The recommendation markup is rendered and the associated images are requested. The fragment now needs more space and pushes the layout of the page.

There are different options to avoid an annoying reflow like this. Team red, which controls the page, could fixate the recommendation containers height. On a responsive website its often tricky to determine the height, because it could differ for different screen sizes. But the more important issue is, that this kind of inter-team agreement creates a tight couplingbetween team red and green. If team green wants to introduce an additional sub-headline in the reco element, it would have to coordinate with team red on the new height. Both teams would have to rollout their changes simultaneously to avoid a broken layout.

A better way is to use a technique called Skeleton Screens. Team red leaves the green-recosSSI Include in the markup. In addition team green changes the server-side render methodof its fragment so that it produces a schematic version of the content. The skeleton markup can reuse parts of the real content’s layout styles. This way it reserves the needed space and the fill-in of the actual content does not lead to a jump.

Skeleton Screen

Skeleton screens are also very useful for client rendering. When your custom element is inserted into the DOM due to a user action it could instantly render the skeleton until the data it needs from the server has arrived.

Even on an attribute change like for the variant select you can decide to switch to skeleton view until the new data arrives. This ways the user gets an indication that something is going on in the fragment. But when your endpoint responds quickly a short skeleton flickerbetween the old and new data could also be annoying. Preserving the old data or using intelligent timeouts can help. So use this technique wisely and try to get user feedback.

to be continued soon…

watch the Github Repo to get notified

Additional Resources

Posted in Education and Training, Integration, Knowledge, Problem solving, Programming, Uncategorized | Leave a comment

Autowiring :expected at least 1 bean which qualifies as autowire candidate for this dependency


ApplicationConfig file:

@EnableJpaRepositories(basePackages = {"my.basepackage.*"})
Posted in Java, Knowledge, Software architecture, Uncategorized | Leave a comment

IoT Asset Management Using Graph Database Modeling

The Challenge

Power grid systems are considered an integral part of modern society. Their robustness and efficiency not only impact our daily lives, but also influence economy, politics, and the global environment. Power grids continually evolve over time to accommodate and promote societal developments; currently, transmission grids are going through a transition from relying on traditional centralized utility-based power generation to integrating distributed energy resources (DER) such as photovoltaic (PV) systems, distributed energy storage (DES) such as battery systems, and demand response (DR). With the additional push for the integration of smart Internet-of-Things (IoT) devices, the smart grid is continually evolving into an increasingly interconnected cyber-physical system (CPS) that requires a paradigm shift in both its planning and operation. The use of graph databases as a sophisticated tool for modeling the connection between system components– transformers, distribution lines, DER, DES, IoT devices, grid operator, electricity consumers, etc.–can aid in managing the rapidly evolving smart grid.

The Solution

To address the demand of managing the integration of connected devices and enabling new business models from the heavily interconnected systems, current architectural reference models were considered and components of each synthesized into a software stack for smart application development. This work lends its implementation approach to the utility of graph theory in modeling complex systems, and implements a graph database for managing and maintaining connected components that emphasize each component’s virtual and physical connectivity, its technical functionalities, and its state. The graph database microservice is then integrated with a highly available web framework and communication broker service in a multi-layered software framework to integrate Internet-of-Things devices and make services available over the web. The framework’s–and its respective components’–efficacy has been demonstrated in a simplified use case for modeling, connecting, and controlling interconnected homes in a modern smart grid and abstracting transactional device data for new business models, such as demand response ancillary services.












Posted in ASP.NET MVC, Business Metrics, Business Model, Problem solving, Programming, Software architecture, Uncategorized | Leave a comment

How to start using Entity Framework 6 with MySQL databases

To start using Entity Framework 6 and Visual Studio 2013 is necessary to install MySQL for Visual Studio 1.1.1 Beta and MySQL Connector/Net 6.8.1 Beta

MySQL for Visual Studio 1.1.1 Beta can be downloaded with the following link:

MySQL Connector/Net 6.8.1 Beta

To start working with VS 2013 and EF 6

1- Install the MySQL for Visual Studio 1.1.1
2- Install the Connector/Net 6.8.1 product.
3- To work with Database first please do the following
a. Add the reference for the new assembly called MySql.Data.Entity.EF6 and copy it to the bin forlder of your application. (important)
b. Add the provider to your app/web config file on the providers for Entity Framework section with the following line:
<provider invariantName=”MySql.Data.MySqlClient” type=”MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6″></provider>
c. Before you run the Wizard compile your application so the new changes are applied.
4- To work with Model First please do the following
a. Add the reference for the new assembly called MySql.Data.Entity.EF6 and copy it to the bin forlder of your application.
b. Add the ADO.Net Entity Model new or existing.
c. Select the T4 template corresponding to MySQL (SSDLToMySQL)
d. Right click on the model and then select Generate Script to Create Database. (A MySQL script should be generated for you to create your database).

Source: https://forums.mysql.com/read.php?174,601264,601264

Posted in ASP.NET MVC, C#, Problem solving, Programming, Uncategorized | Leave a comment

How to resolve “Cannot create JDBC driver of class ‘com.mysql.jdbc.Driver’ for connect URL”

Firstly I want to say that i checked all answers at stackoverflow, and i can’t fix this bug! Help me please! I spend a lot of time, but no result. I’m trying to create connection pool using Tomcat8. I have an exception:

java.sql.SQLException: Cannot create JDBC driver of class ‘com.mysql.jdbc.Driver’ for connect URL ‘jdbc:mysql:/localhost:3306/autopark’ at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createConnectionFactory(BasicDataSource.java:2160) at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:2032) at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:1532) at ua.khpi.shapoval.db.DbConnector.init(DbConnector.java:31) at ua.khpi.shapoval.db.DbContextListner.contextInitialized(DbContextListner.java:48) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4842) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5303) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1407) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1397) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) Caused by: java.sql.SQLException: No suitable driver at org.apache.tomcat.dbcp.dbcp2.BasicDataSource.createConnectionFactory(BasicDataSource.java:2151) … 13 more


public class DbConnector {
    private static Logger log = Logger.getLogger(DbConnector.class.getName());
    private static DataSource dataSource;
    private static Connection connection;

    public static void init() throws ServletException, SQLException, NamingException, ClassNotFoundException {

        Context initCtx = new InitialContext();

        Context envCtx = (Context) initCtx.lookup("java:comp/env/");

        DataSource ds = (DataSource) envCtx.lookup("jdbc/autopark");

    public static Connection getConnection() throws SQLException {

        return dataSource.getConnection();


context.xml that located in META-INF folder

    <?xml version="1.0" encoding="UTF-8"?>
<Context crossContext="true" reloadable="true">
    <Resource name="jdbc/autopark" auth="Container" type="javax.sql.DataSource"
        username="root" password="161acid161" driverClassName="com.mysql.jdbc.Driver"
        url="jdbc:mysql:/localhost:3306/autopark" maxActive="15" maxIdle="3" />
    <ResourceLink name="jdbc/autopark" global="jdbc/autopark"

        type="javax.sql.DataSource" />


web.xml file

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
    id="WebApp_ID" version="3.1">










Content of my tomcat/lib directory and my project structure. enter image description here

enter image description here

The JDBC URL is not correct, indeed you have a missing slash so try this:


If you check well the real error is No suitable driver which means that it cannot find any JDBC driver that supports the provided URL.

Posted in Education and Training, Java, Knowledge, Problem solving, Programming, Uncategorized | Leave a comment

Build query string for System.Net.HttpClient get

From https://stackoverflow.com/questions/17096201/build-query-string-for-system-net-httpclient-get

var query = HttpUtility.ParseQueryString(string.Empty);
query["foo"] = "bar<>&-baz";
query["bar"] = "bazinga";
string queryString = query.ToString();

will give you the expected result:


You might also find the UriBuilder class useful:

var builder = new UriBuilder("http://example.com");
builder.Port = -1;
var query = HttpUtility.ParseQueryString(builder.Query);
query["foo"] = "bar<>&-baz";
query["bar"] = "bazinga";
builder.Query = query.ToString();
string url = builder.ToString();

will give you the expected result:

Posted in ASP.NET MVC, C#, Problem solving, Programming, Uncategorized | Leave a comment

Teaching Tools

Online tools and resources have made it easier for teachers to instruct students, and for students to collaborate with those teachers and with other students and parents. These “Web 2.0” teaching tools aren’t magical, but they may seem to defy definition at times since they save time, help you to stay organized, and often take up little space on a computer. Some of these applications are Web-based, which means that they can be accessed from any computer.

The following list is filled with tools that will make a teacher’s, or those enrolled in the best online education programs, life easier. The categories are listed in alphabetical order and the links to each tool are also listed alphabetically within those categories.


The following list includes free tools that you can use to stay on top of current events, including headlines and blogs.

  1. Aggie: Aggie is an open source news aggregator that’s also a desktop application. It downloads the latest news and displays it in a Web page.
  2. Awasu: Awasu is a state-of-the-art feed reader that comes loaded with features for both casual personal use and professional, high-powered information management. Use this tool for content archiving, coupled with an advanced search engine, and use advanced features to manage your configurable channels. The personal edition is free to download and use.
  3. Bloglines: This is more of a personal news aggregator than a bookmark tool, but it’s sophisticated and highly useful for teachers who want to stay on top of current events in any given topic.
  4. FeedReader: This is a free reader that is simple to use. It supports podcasts.
  5. RSS Reader: This RSS reader is able to display any RSS and Atom news feed (XML).
  6. WikiNews: Anyone can contribute, and articles are written collaboratively for a global audience. They strive at all times to meet the policy of using neutral point of view, ensuring that their reporting is as fair as possible. Since this is a wiki, you can combine this site with other objectives in a project for your class.

Bookmark Managers

Bookmark managers make it easy to build a personal directory where researchers can tap into sites and materials that have been saved online and share them with others in most cases. The following bookmark managers are free to use, but they all have different angles. In other words, teachers and professors can do more with these sites than save a page or two.

  1. del.icio.us: This is a popular social bookmarker, but it’s an easy tool to use if you have a handle on how to use tags.
  2. Diigo: Turn your students onto this tool, which works like a bookmark manager with a highlighter or with sticky notes. This is an ideal way to research for a paper or to create a new project for class. This site works much like MyStickies, but without Diigo’s highlighter.
  3. Facebook: While Facebook is a social utility that can connect you with friends as well as with students, you can also use this tool to bookmark Web sites and specific Internet pages.
  4. LinkedIn: Sometimes you just want to get away from the students. LinkedIn provides a way for you to communicate with your peers instead (or not), and it’s also useful for bookmarking.
  5. Pinterest: With Pinterest, teachers can organize and share anything from lesson plans, ideas, and crafts using a virtual bulletin board. Teachers can also use this tool to network with other educators.
  6. Twitter: Twitter is a service for friends, family, and co–workers to communicate and stay connected through the exchange of answers that can be no longer than 140 characters and spaces per post. Use this tool to help your students stay up-to-date, as you could advertise a Twitter address that students could use to learn about school projects, reading assignments, and other announcements. You can also use this tool as a bookmark manager for research.
  7. Yahoo! Bookmarks: Yahoo! Bookmarks is not intended to be a social bookmark site like the others. Instead, it essentially allows you use your personal bookmark list at any computer. In fact, it acts and feels very much like your browser’s built-in bookmark manager.

Classroom Tools

You need tools to help assess class progress. You need tools to help keep students and parents apprised of the students’ progress. You need all sorts of tools, you need them at your fingertips, and you need them to work efficiently. Some of those tools are listed below.

  1. Animoto: This web tool completely simplifies the creation and sharing of videos. Teachers will have no trouble creating lesson plans or presentations for students.
  2. Charles Kelley Quiz Generator: Create multiple choice or bilingual tests. Though some of the quizzes generated here can only be used on this website, others can be put on your own website.
  3. Crocodoc: This web tool allows teachers to convert Microsoft Office and PDF documents to HTML5, making them easily viewable. Teachers can display students’ documents in their browsers and edit as needed.
  4. CuePrompter: This free service allows teachers to use their browser as a teleprompter. All users have to do is write or cut and paste their script online and press a button to start the prompter.
  5. Engrade: Engrade is a free online gradebook that allows teachers to manage their classes online as well as post grades, assignments, attendance, and upcoming homework online for students and parents to see. Engrade is free and easy to use. Join over 10,000 teachers, parents, and students using Engrade today.
  6. Forvo: This online pronunciation dictionary comes in handy for foreign language teachers. Users can hear any word pronounced in any language.
  7. Grammarly: Several universities use this tool as a grammar checker. Students can use this as a method to improve the process of peer editing because it checks for more than 250 points of grammar.
  8. My Project Pages: Built by teachers for teachers, use myprojectpages.com to create structured online inquiry-based learning activities for the courses you teach that enable your students to engage in meaningful learning experiences while online.
  9. Online Stopwatch: Just as the name suggests, this tool is a web-based stopwatch teachers can use for timed exams and other assignments.
  10. Schoopy: You can post homework in more than one location on SCHOOPY. The first place you should consider is the calendar, where you can post important dates and notices. However, you may choose to use the Assignments/Quizzes/Files tool depending on how you would like to contact students.
  11. Slideshare: Ok, so you’re still with PowerPoint, but you can jazz that presentation up at Slideshare. This site takes your .ppt file (also works with Open Office and PDF files) so you can share it with your students (and the world at large). You can add music, embed videos in comments and more – all for free.
  12. Survey Builder: Survey Builder allows you to easily create and manage online surveys suitable for Internet-based oral history projects, course evaluations, and other endeavors that involve collecting feedback. You do not need to know how to build a Web page that has forms, set up a database to store entries, or do any of the other technical tasks that are normally required to produce interactivity on the Internet.
  13. Teacher Planet: Teacher Planet is a one-stop spot for teacher resources. Teachers can download any number of lesson plan templates, worksheets, ESL-specific resources, and other tools.
  14. Web Poster Wizard: This free tool allows educators to create a lesson, worksheet, or class page and immediately publish it online.
  15. Yugma: Teachers can use the free web conferencing feature with Yugma and also share their entire desktop in real-time with one student. This can be extremely helpful in one-on-one advising with students.


Part of teaching is collaboration. Teachers need to communicate with peers, administrators, and students. The tools listed below – some free and some for a cost – will help you stay on top of your projects with ease through open channels for collaboration.

  1. Basecamp: Projects don’t fail from a lack of charts, graphs, stats, or reports, they fail from a lack of clear communication. Basecamp solves this problem by providing tools tailored to improve the communication between people working together on a project.
  2. Edmodo: Extremely similar to Twitter, except specifically designed for educators, Edmodo facilitates collaboration and content sharing among students, teachers, and school districts.
  3. FirstClass: Using a personalized Web page as a communication hub, teachers can send messages to the principal, pick up student assignments, change homework tasks for that evening, or have students build their own Web pages. FirstClass will run on a single server with one administrator for any number of users. This tool is not free.
  4. Gliffy: This diagram editor is easy to use, and you can save your work on their servers for free. Gliffy Online has two ways to make document sharing simple. Collaboration enables others to see and edit your work by simply entering their email address. Publishing creates a read-only, or public, image of your diagram that you can easily embed in a wiki, blog, or other type of web software.
  5. LiveText: LiveText is a Web-delivered subscription service for teachers featuring collaborative lesson-building activities. Simple and easy to use, LiveText uses lesson planning as a focus for engaging the educational community. This is not a free service.
  6. Mindomo: Mindmapping is a highly productive method of visual brainstorming that you can use to plan projects or to map out a knowledge base. Mindomo has an interface and feature set that rivals other free standalone mind-mapping applications such as Freemind. Maps are shareable but require you to register and login to save them.
  7. NoteMesh: Add some social flavor to your note taking with this collaborative wiki style class note taker. Users can post their lecture notes or contribute to existing lecture notes. NoteMesh wants to get classmates to collaborate to create a single definitive source for lecture notes.
  8. Schoology: Teachers can use this tool to share their instructional resources and connect with other educators.
  9. Skype: Teachers can collaborate on classroom projects while having their students visit a classroom in another part of the world using the interactive Skype in the classroom. Skype is a part of Microsoft, and it’s free to use.
  10. Twiddla: Twiddla is a great way to connect with students or other educators. Through its web-conferencing capabilities, teachers can brainstorm and share ideas.
  11. WebOffice: Like FirstClass, WebOffice creates a virtual office environment for real-time meetings, and with the purchase of additional audio and video components, creates an experience that’s almost like being there. This is not a free service.

Course Management

You may need more than simple classroom tools like a quiz generator. You may need content, the ability to communicate, organization tools, and more. The following site offers at least one of these tools in combination with other capabilities. Most are open source and/or free.

  1. ATutor: Administrators can install or update ATutor in minutes, develop custom templates to give ATutor a new look, and easily extend its functionality with feature modules. Educators can quickly assemble, package, and redistribute Web-based instructional content, easily retrieve and import prepackaged content, and conduct their courses online. This is an open source tool.
  2. Bubbl.us: Teachers can use this tool for brainstorming and class discussions.
  3. Dokeos: Dokeos is a learning management system used in more than 600 companies and public administrations to manage e-learning and blended learning programs. This is open source software.
  4. dotsub: This tool will be helpful for teachers of foreign languages. For a fee, dotsub will translate videos using subtitles and students and teachers can upload their own videos and create subtitles.
  5. Drupal: Drupal is an open source project that offers a flexible framework to set up a social learning environment or a more traditional learning environment.
  6. EduTools: The EduTools site has been re-launched as a community-driven site, beginning with the Course Management System (CMS) site. They continue to offer feature-by-feature product comparisons and decision-making supports. In addition, the site now includes the ability for any user to submit reviews for new products that haven’t already been reviewed or to add their own feedback on specific products and feature implementation.
  7. eFront: Easy to use, visually attractive, SCORM compatible, open source e-learning and human capital development platform.
  8. LAMS: LAMS (Learning Activity Management System) provides teachers with a highly intuitive visual authoring environment for creating sequences of learning activities. These activities can include a range of individual tasks, small group work, and whole class activities based on both content and collaboration.
  9. Merlot: A free and open resource designed primarily for faculty and students of higher education. Links to online learning materials are collected here along with the ability to connect with peers.
  10. Prezi: Teachers can use this presentation tool to organize and share ideas with other educators.
  11. RCampus: RCampus is a system that allows teachers, students and administrators to manage courses, build virtual portfolios, create websites, join virtual communities, and assess school work with rubrics.
  12. Sakai: Sakai is a community of academic institutions, commercial organizations and individuals who work together to develop a common Collaboration and Learning Environment (CLE).
  13. Schooltool: SchoolTool is a project to develop a common global school administration infrastructure that is freely available under an Open Source license. SchoolTool encompasses three sub-projects including a calendar and resource management tools, a student information system, and the ability to track which skills students are acquiring in their classes and at what level of competency.
  14. Sloodle: Sloodle is an open source project that aims to develop and share useful, usable, desirable tools for supporting education in virtual worlds, making teaching easier. If you have enough technical support or nous, and your own server, you can download the Sloodle source code and install it on your own Moodle installation. Otherwise, you can try out a few elements on the Web site.
  15. StudySync: With resources such as peer reviews, weekly writing practices, and an extensive digital library, StudySync is an essential tool for teachers preparing students for academic success.


The following list includes tools that teachers will find helpful with educational technology or electronically supported learning.

  1. Annenberg Learner: This tool is a haven for educators because they can find a plethora of free videos to enhance their teaching.
  2. Course Builder: This tool allows teachers to construct their own courses from scratch. With access to Course Builder’s software and instructions on presenting course material, educators will have the means to create courses for as few or as many students they like.
  3. Curriki: As a free resource, teachers can create and share their best curriculum and teaching practices, and mix and match lesson plans, videos, animations, and photos to create custom teaching tools.
  4. eStudy: eStudy is an open source e-learning and collaboration platform for colleges and universities. In addition to usual course management facilities, eStudy provides special support for role-play simulations in computer science.
  5. Open Study: In its mission to make the world one large study group, this social site encourages students to work with other students who are studying the same material as them.
  6. PBS Learning Media: Using PBS Learning Media, teachers have access to videos, games, audio clips, photos, lesson plans, all of which they can save and share. Best of all, it’s free.


By utilizing gaming methods and mechanics, these tools will help teachers bring a little interactive fun and excitement into their classrooms.

  1. BadgeStack: Used by organizations such as the New York City Department of Education and the American Association for State and Local History, BadgeStack is set up to deliver digital badges to students once they master a skill.
  2. CourseHero: Using this web learning platform, students in high school and college can access course materials such as flashcards, tutors, and courses.
  3. FunBrain: Geared toward younger students, FunBrain provides users with interactive games in subjects such as math, reading, and literacy.
  4. MangaHigh: Teachers can use this game-based tool to teach math concepts to their students. The best part: it’s absolutely free!

Office Suites

The tools listed below behave just like any other commercial office suite applications. The only difference is that they’re free to use.

  1. Google Docs: Google has managed to replicate Excel, Word, and PowerPoint with Google Spreadsheets, Docs, and Presentations, respectively. You can upload, create, and store all these files online, and then download them to other office applications and save them on your hard drive or share your work with others online. Google surrounds these tools with their famous search application, access to online books, and a scholars’ search for online documents. The tools for teaching are virtually endless.
  2. Apache Open Office: Download this free office suite to replace Microsoft Office tools. It is a multiplatform and multilingual office suite and an open-source project that includes key desktop applications such as a word processor, spreadsheet, presentation manager, and drawing program with a user interface and feature set similar to other office suites. OpenOffice.org also works transparently with a variety of file formats, including those of Microsoft Office, and the vendor-neutral OpenDocument standard from OASIS. You can also save files in PDF format.
  3. ThinkFree: This beta system offers Word, Excel, and PowerPoint clones that run in any browser for free. These are java applications, so they take a moment to ‘warm up’ before you run them, but once you have the program running the process runs smoothly and quickly. ThinkFree opens and saves to standard Microsoft Office formats such as .doc, .xls, and .ppt on your hard drive. They can also save documents to PDF, something you can’t do with Microsoft. If you want to save files on ThinkFree’s servers, you have 30 megabytes of storage space to use for free. This is a truly intuitive tool, especially if you’re already familiar with Microsoft Office.
  4. ZOHO: Zoho is an office productivity suite that works much like Google Docs in that you have access to spreadsheet, word, and an online presentation tool. You can upload, save online, download, and share. You also have access to other tools such as mail, project management software, and more that make this suite perfect for classroom projects.

Office Tools

Oh sure, you have a stapler, a copier, and access to other tools. But, what if you could gain access to file converters, presentation tools, and other management resources from almost any computer? Or if you could download some tools and use them from your computer at any location? These tools could make your life a little easier or at least help you out of a jam.

  1. bitly: This tool shortens links and can be handy for teachers who send numerous links to their students. It even allows teachers to see how many students clicked on a particular link.
  2. Cute PDF: No adware, spyware, or malware involved. Just download and go to town making PDFs from just about any document file. This is freeware.
  3. Document Converter eXpress: Neevia Document Converter eXpress makes it possible for anyone to instantly convert their files to PDF or Image without the need of installing special software. There is a 1 MB restriction.
  4. Empressr: Upload video, images, text – you name it – to create an online presentation. This is the first Ajax/Flash-based presentation web application, and it’s an interesting way to get your online class projects together for free.
  5. Gmail: This email program is free and quite popular. With efficient spam filtering, and Google Talk contacts displayed (so you can simply chat with contacts rather than send an email), Gmail is a great option for students and teachers to use.
  6. Google Calendar: With this tool, teachers can keep track of lessons, exams, projects, and other assignments. It’s free and available to anyone with a Google account.
  7. MultiURL: Imagine the need to send several links in one email – it can be a little confusing and what if the links are broken? MultiURL is a tool that allows users to combine multiple links into just one shortlink, which can then be shared more easily. And don’t worry, the links can be edited at any time.
  8. Penzu: This tool allows teachers to create their own online journal, which can be helpful when taking class notes. Penzu makes all entries private by default, but users can choose to share individual entries.
  9. yousendit: You can use the free trial to send large files (like that dissertation!). This tool replaces the need for FTP transfers, overnight couriers and unreliable email attachments.


If you need to get something done quickly, there’s no better method than to organize your mess. Pull notes, dates, to-do lists and more together with the following tools.

  1. 30 Boxes: 30boxes is a calendar tool that has the extra feature of allowing you to track headlines from RSS Web feeds. You can add your calendar to Google’s Blogger or to your Facebook page. Share it with friends, family, or with students who need to know when that project is due.
  2. HiTask: Dragging and dropping goodness makes this task tracker a fun tool to use to stay on top of things. Colored tags can be applied so users can easily identify and review important items. Meetings or reminders can be set by dragging their instance onto a calendar and into a time based schedule. Members of teams can also be assigned certain tasks by dragging the task onto the person’s name. It’s a very clean and east to use application. It does not allow for unlimited information, but there is an option for a $12/year for a premium account.
  3. Remember the Milk: If you’re a list freak, this tool is right up your alley. You can manage your tasks even when your computer is not connected to the Internet. You can choose to receive reminders via email, SMS, and instant messenger (AIM, Gadu-Gadu, Google Talk, ICQ, Jabber, MSN, Skype and Yahoo! are all supported).
  4. TiddlyWiki: This is a reusable, nonlinear notebook that you can use to keep track of projects. This tools works with all major desktop browsers on Windows, Macintosh and Linux and many mobile browsers such as the Apple iPhone and the Nokia 770/N800.
  5. Zamzar: This free online file conversion tool will help teachers organize their videos, images and documents.

Public Content Management (Blogs, etc.)

Use blogs to teach, to build classroom community, to create class projects and more. The sky’s the limit on what you can do with these tools. What’s nice is that these blogs are free to use, although some may be free to specific groups of educational professionals or learners. And, these content management systems range from very, very easy to use to somewhat sophisticated (that is, you might need to know some code for installation or maintenance).

  1. CMS Matrix: It would be impossible to list all content management systems here, so this site does it for us. Compare up to ten different systems and visit their Web sites through links maintained on CMS Matrix. Make an informed decision with their help on systems that range from ACM Ariadne Content Manager to zwook.
  2. EduBlog: Powered by WordPress, these free blogs for teachers, researchers, librarians and other education professionals can help you to communicate to students and to your peers.
  3. Geeklog: Geeklog is a PHP/MySQL based application for managing dynamic web content. “Out of the box,” it is a blog engine, or a CMS with support for comments, trackbacks, multiple syndication formats, spam protection, and all the other vital features of such a system. Use plugins to radically alter its functionality. Available plugins include forums, image galleries, and many more.
  4. LiveJournal: You can use LiveJournal in many different ways: as a private journal, a blog, a discussion forum, a social network, and more.
  5. SchoolNotes: Create Notes for homework and class information and post them on the web in seconds using this free community service. Parents and Students can view notes from teachers through school zip code.
  6. TeacherTube: Think YouTube for teachers and educators, as this site’s layout and focus is similar; however, TeacherTube seeks to fill a need for a more educationally focused, safe venue for teachers, schools, and home learners. Site can be slow to load at times.
  7. TubeChop: This tool allows users to chop a specific section from a YouTube video and share it. This can be extremely helpful for teachers who want to just use a snippet of a video during lecture because the excess video footage can easily be removed.
  8. WordPress: This tool is free, and you can set it up on a personal Web space or use the free spaces offered at this site. WordPress is known for its excellent community support.


Nothing beats a backup for storage; however, when you need to share files or if you need to gain access to files from another computer, online storage and transfer is the way to go. However, we don’t suggest uploading student test papers to grade on vacation in the Bahamas. That’s counterproductive.

  1. 4shared: Teachers can enjoy 15GB of free storage space with 4shared.
  2. Diino: The 2GB free account is limited to two users logged in at the same time.
  3. FlipDrive: Use your FlipDrive account to securely store your files online and then access it from any web browser; backup and protect your critical and most important data from computer crashes and viruses. This site is free to use for thirty days, and charges after that time will depend upon amount of storage you need.
  4. HyperFileShare: Share files with unlimited transfers up to 250MB and unlimited space – all for free. If you share files privately they keep them for 30 days from the last download. If you share files for community (publicly), they may keep them longer.
  5. LiveBinders: This tool is essentially a 3-ring binder for the web. Teachers can organize and store resources and important documents.
  6. Planboard: Planboard helps teachers simplify their lives by streamlining lesson plans and centralizing everything onto a computer.
  7. Scribd: Users get free unlimited storage and access to the world’s largest online library.
Posted in Database, Education and Training, Knowledge, Problem solving, Programming, Uncategorized | Leave a comment