May 30 2011

SuiteFramework API, a Kynetx KRL development module to create Kynetx app collections, easily

Category: kynetx,technology

SuiteFramework tries to resolve the following problems:

  • how to create richer applications with Kynetx KRL without compromising readability , extensibility , reusability and maintenance of code
  • given the existing tools ( appbuilder.kynetx.com ) and KRL language constraints , how do we get to create apps in team work
  • how to add persistent settings to an Kynetx app so users can activate/desactivate features they like/dislike

Modularity with KRL is achieved with KRL modules . A module is a ruleset that exposes functions and defactions so they can be used in other rulesets. Rules inside rulesets can’t be reused (yet?) in other rulesets so this makes it complicated to import complete app features. That’s where SuiteFramwork helps.

Let’s say developers have made independant apps for Facebook like  SendAnywhere, Privatebook, Unfriend Finder , MyNewsFeed , Foul Facebook Filter. All those apps are great and each one creates a nice experience for users but who are the users who know all of them ?  Who are the users who want to go through five different installations? Who are the users who want to manually check if there are Facebook apps ?

Wouldn’t it be great if users could install all Kynetx Facebook apps with one click and run new Kynetx Facebook apps as soon as they are released without the need to install them ?

This is what SuiteFramework does, it allows developers to create “app suites” or “meta-apps” that launch sets of apps no matter how they were developed initially. Because some users might not be interested by one app or another, SuiteFramework allows the user to disable an app of the collection on the fly. Those user specific settings are persistent and follow the user during his daily use of the app collection.

SuiteFramework  alerts the user when a new app has been added to the collection so he can decided to have it running along the others or disabled it.

SuiteFramework also gives the users the ability to receive a notifications when an app of the collection is updated or proposes a new feature but the user still keeps the freedom to disable the feature because sometimes “I just don’t want to have that”.

SuiteFramework direct “feature notifications” from developers to users keeps an app “alive”, increasing user loyality to the app.

SuiteFramework comes with an integrated donation system for Paypal and Flattr .

Developers can now distribute and promote their apps through collections because “unity makes strength” and it is easier and more effective to communicate on one product.

With SuiteFramework KRL developers can focus on features, not on plumbery. Creating a new suite only needs to copy paste an existing master ruleset and change values of a json object. You don’t need to modify your apps to include them in a collection. Also SuiteFramework has a developer mode that automatically takes the lates apps versions , no matter they have been deployed or not. Persistent vars can be easily cleared at the app level or suite level. SuiteFramework API gives you functions to make some javascript code work in the KBX sandbox which normally requires lots of coding tricks. For example you can reuse/extend/override the javascript a website includes in its pages.

In the future SuiteFramework will try to :

  • support analytics to get stats about the use of individual apps so creators can share donations accordingly
  • integrate a feedback system so users can report bugs and post feature requests
  • support custom collections ( collections created by anyone, promoted by anyone ) with commissions on installs
  • simple “site tag” system to allow one click install of custom collections on any website
  • easy multilingual system
  • user notifications when a Kynetx app is available on the site the user is browsing
  • unit tests / integration tests ( selenium)
  • support coffeescript

SuiteFramework is currently under active testing and will be released in june 2011 together with a Dev Suite to increase productivity that will focus on appbuilder enhancements and offer a unique entry point to find precise documentation on KRL ( docs.kynetx.com, convore.com/kynetx , stackoverflow.com/questions/tagged/krl , KRL blogs, Google…)

You can be part of the SuiteFramework API adventure, contact me ( loic ) on Kynetx Convore Group :  convore.com/kynetx

 

 

https://convore.com/kynetx/

Related Posts:

Tags: , , , , , , ,


May 26 2011

Youtube Suite ! First Kynetx Browser App collection for Youtube

Category: kynetx,technology

UPDATE: Due to changes in the Kynetx API, this browser app is currently not working anymore. 

Youtube Suite is a collection of individual Kynetx Browser Apps glued together inside a single Kynetx

Browser App. Think of it as a Firefox add-on collection but better: all the apps included in the collection are

installed with one click ! Individual apps can be disabled/re-enabled individually once the collection is

installed.


Youtube Suite
includes
:

More useful Youtube apps will be added automatically in the future. You can find interesting apps on the Greasemonkey website with the youtube tag and report me the app on the convore.com Youtube Suite group so I can try to add it to Youtube Suite !

 

Once installed the right-mouse-click menu will show a Youtube Suite option that allows you to enable/disable individual apps on the fly.

 

Loïc

 

 

 

 

 

Related Posts:

Tags: , , , , ,


May 22 2011

Build your Empire with Kynetx “Good Eave!”

Category: kynetx,technology

Good Eave!

 

UPDATE: Due to changes in the Kynetx API and in the empireavenue.com design, this browser app is currently not working anymore. 

Good Eave! is a Kynetx browser app for Firefox and Chrome for Empire Avenue .

Good Eave!
gives you additional stats in your portfolio and shows a tooltip with valuable information when you click on a ticker symbol like (e)INCA and e(KYNETX) in your twitter stream.

 

 

 

 

 

Additional infortion includes :

  • Current Dividend Yield
  • Your Average Purchase Price
  • Your Breakeven Price
  • Gain per Share after Commissions
  • Total Gain after Commissions
  • Total % Gain after Commissions
  • Accumulated Dividends
  • Avg Daily Dividend
  • Avg Daily Dividend per Share
  • Daily Dividend Yield
  • Days to Pay Back (w/ Avg Daily Dividends)
  • Total Return with Dividends
  • Total ROI with Dividends

Feature requests and feedback are waiting here: https://convore.com/good-eave-feedback/

Good Eave! is a port of P3 for Empire Avenue using Kynetx technologies.


Good Eave!
can also be installed as a :
Chrome Extension :  .crx
Firefox Extension :   .xpi

 

 

Or try it right now with no install, using the bookmarklet !

First add the Good Eave! bookmarklet to your browser’s bookmarket (follow instruction below) then go to your portfolio on empireavenue.com or look for some tickers on your twitter stream.  Click on the Good Eave ! bookmarklet in your  bookmarks to run Good Eave!

Bookmarklet source:

javascript:(function(){var d=document;var s=d.createElement('script');s.text="KOBJ_config={'rids':['a1135x48]};";d.body.appendChild(s);var l=d.createElement('script');l.src='http://init.kobj.net/js/shared/kobj-static.js';d.body.appendChild(l);})()

What is a bookmarklet? => http://en.wikipedia.org/wiki/Bookmarklet

=> on Firefox

  1. make sure Bookmarks Toolbar is visible. If it isn’t select “View” from main menu then “Toolbars” and check “Bookmarks Toolbar”.
  2. drag this link: Good Eave! to the Bookmarks Toolbar.
  3. alternatively you can right click on this link : Good Eave! and select “Bookmark this Link”. Then select the “Bookmarks Toolbar” folder in the the combobox and click “Save”.

=> on Chrome

  1. make sure Bookmarks Bar is visible. If it isn’t right click on any part of the menu bar and check “Always show bookmarks bar”.
  2. drag this link : Good Eave! to the Bookmarks Bar.

=> on Internet Explorer:

  1. make sure the Favorites Bar is visible. If it isn’t click on any part of the menu bar and check “Favorites Bar”.
  2. using your mouse, right click on this link :  Good Eave! and select “Add to Favorites”.
  3. select “Favorites Bar” folder in the combobox and click the Add button.

=> on Safari:

  1. make sure Bookmarks Bar is visible. If it isn’t select “View” from main menu and select “Show Bookmarks Bar”.
  2. drag this link : Good Eave! to the Bookmarks Bar.

=> on Opera :

  1. make sure Personal Bar is visible. If it isn’t select “View” from main menu then “Toolbars” and check “Personal Bar”.
  2. drag this link : Good Eave! to the Personal Bar.

 

Related Posts:

Tags: , , , , , , ,


May 03 2011

Kynetx – façonnons le web à notre sauce

A l’ère des apis, des flux d’informations en temps réel le web continue à être un gros foutoir mais avec des outils de plus en plus adaptés.  En tant que développeur je m’y sens un peu comme dans un bac à sable où on se refile joyeusement des pelles et des sceaux, où on s’écrie “eh! check mon nouveau château là”, ou “ouaih, je l’ai déjà connecté par passage secret au miens mais purée tes fondations sont vraiment pourries”. De temps en temps on creuse un trou et il arrive qu’on tombe sur des trésors qu’on imaginait même pas, presque par hasard, et ça vous donne le vertige.

C’est un peu ce qui m’est arrivé lorsqu’en plein bidouillage avec Yahoo! YQL je tombe sur un post  d’un concours de programmation avec YQL et Kynetx (résultat du concours).

Concrètement que permet la techno de Kynetx actuellement et quelle est leur ambition sur le long terme?
Elle permet d’écrire un plugin pour navigateur dans un mélange de KRL (langage serveur ) et de javascript puis de distribuer cette application par bookmarklet ou génération automatique d’extensions de browser (FF, Chrome, Safari et bientôt IE).  C’est un gain de temps foudroyant: on écrit un seule code qu’on déploie ensuite dans les navigateurs. Lorqu’on rajoute une fonctionnalité à l’application toutes les extensions installées sont directement mises à jour sans intervention de l’utilisateur.  Plus besoin de maintenir des codes différents pour chaque navigateur, ni même d’apprendre les apis des différents browsers ( franchement on a mieux à faire qu’à apprendre des trucs qui n’arrêtent pas de bouger à chaque version).  Sur le long terme Kynetx s’attaquera aussi à l’internet des objets à travers un  moteur de règle qui déclenche des alertes lorsque des évènements se produisent ( “ya plus de beurre”, “mon indice klout est dramatiquement bas”, “grand-mère est sur skype mais a pas pris ses cachets” …)

Quelle type d’application peut on réaliser aujourd’hui?
La liberté est totale et il faut voir ça comme une surcouche sur le web existant, un greasemonkey à l’ère du cloud. Biensur je peux taper dans telles ou telles apis REST existantes proposées par ci par là mais j’ai aussi toute liberté pour créer moi même une nouvelle fonctionnalité en javascript que KRL injectera dans le site web lors de ma navigation, du web augmenté en quelque sorte. C’est ainsi que très récemment lorsque Facebook a sorti son bouton “Send” , Kynetx a lancé un concours donnant 24h pour coder une appli qui allait incruster ce bouton dans les blogs wordpress, google reader, blogspot, yelp.com, google places, résultats de rechercher yahoo, bing, google et posterous. En 12h le challenge était torché. Par défaut Kynetx utilise jquery pour tout ce qui est opération dans le browser ( mais rien n’empêche d’inclure la bibliothèque de votre choix ) et côté serveur vous disposez avec KRL de fonctionnalités de persistance de données, accès d’api tiers ( twitter, facebook, amazon, twilio , géolocalisation … ) , bref , de pas mal d’outil pour remixer le web aisément. Kynetx propose une espèce de “marketplace” d’applications   sur laquelle vous pourrez installer l’extension Kynetx KBX qui permet ensuite d’installer/desinstaller les applications Kynetx à la volée sans redémarrage du navigateur, pratique.

Vous souhaitez tater le bestiau?
Il faudra maîtriser la langue de Shakespeare mais ça on s’en doutait.  Pour bien démarrer rien de tel que des examples de code concrets:
kynetxappaday.wordpress.com de Mike Grace , la doc officielle , l’excellent stackoverflow (tag krl),  le blog de Ed Orcutt , le très réactif forum kynetx en temps réel type irc web sur convore.com où vous pourrez discuter en direct avec la communauté de développeur et les gars de Kynetx toujours très heureux de connaître les retours d’expériences ou de répondre aux questions. Vous pouvez même les appeler à leur bureau directement si vous le souhaitez . Kynetx est une startup localisée à Lehi dans l’Utah aux Etats Unis ( décalage de 8h en arrière avec la France).

Ah, encore un truc, Kynetx propose très régulièrement des concours de programmation sur 24h ou 1 semaine avec à la clef des ipad2, xbox, chèque cadeau Amazon, kindle etc etc… C’est très stimulant et souvent ce qui compte c’est l’idée plus que la prouesse technique donc tout le monde a sa chance.

 

D’autres ressources intéressantes:

les blogs kynetx : http://code.kynetx.com/ et http://blog.kynetx.com/
le blog du patron Dr. Phil Windley : http://www.windley.com/ (techno mais pas seulement)
des handles twitter : @KynetxApps ,  @Kynetx ,@bradhintze  (évangeliste Kynetx)

 

Quelques une de mes applications:


Privatebook , crypter let tchat et votre contenu facebook  :  http://blog.lolo.asia/technology/2011/04/11/kynetx-privatebook-released/

 

Restyler , changer le look de vos pages favorites (google, facebook … ) en injectant des feuilles de style css  provenant de userstyles.org:
http://blog.lolo.asia/technology/kynetx/2011/04/11/kynetx-restyler-released/

 

Related Posts:

Tags: ,


Apr 16 2011

Debugging with KBX extension : how to avoid having to deploy at every code modification

Category: kynetx,technology

UPDATE: 04/17/2011 : Modified Firefox KBX extension available

I decided to have a quick look at the Kynetx KBX Chrome extension and see if I could patch it so I wouldn’t need to deploy an app everytime I modify it when it runs with the KBX extension ( http://stackoverflow.com/questions/5653090/kynetx-app-not-working-when-installed-via-kbx-extension-on-chrome ).

I needed this to help me solve this problem : http://stackoverflow.com/questions/5653090/kynetx-app-not-working-when-installed-via-kbx-extension-on-chrome

This feature could be achieved with no big magic in:  page_interaction/pages.js inside the Chrome extension

replacing :

KOBJ.add_config_and_run({‘rids’:response.apps});

with :

//patch run_latest_app_version_in_kbx

var run_latest_app_version_in_kbx= true;
var run_msg_json={‘rids’:response.apps};
if (run_latest_app_version_in_kbx===true){

for (var i=0;i<response.apps.length;i++){
run_msg_json[response.apps[i]+’:kynetx_app_version’]=’dev’;
}

}

KOBJ.add_config_and_run(run_msg_json);
//


Here is the modified crx extension :  KBX_run_latest_app_version_in_kbx.crx

This feature can be enabled/disabled in the options page of the extension. It is enabled by default.
Modified files :  page_interaction/pages.js,  option_page/options.html , background/background.js, manifest.json

A Firefox version might follow when I’ll start debugging on FF.

UPDATE: 04/17/2011 : Modified Firefox KBX extension available

On Firefox the file to modify is : resources/jid0-njkmo4quo4rc8p9kcuemahnyiku-kynetxforfirefox-data/page_interaction.js

replacing :

KOBJ.add_config_and_run({‘rids’:message.apps});

with :

//patch run_latest_app_version_in_kbx

var run_msg_json={‘rids’:message.apps};
var run_latest_app_version_in_kbx=true;
if (run_latest_app_version_in_kbx===true){

for (var i=0;i<message.apps.length;i++){
run_msg_json[message.apps[i]+’:kynetx_app_version’]=’dev’;
}

}
KOBJ.add_config_and_run(run_msg_json);
//

Here is the modified xpi extension :  KBX_run_latest_app_version_in_kbx.xpi

There doesn’t seem to be a preferences screen so this feature cannot be disabled unless you set the variable run_latest_app_version_in_kbx to false in page_interaction.js. Modifications in the file are taken into account immediately, no restart or disactivation/activation  needed.
Modified file :  resources/jid0-njkmo4quo4rc8p9kcuemahnyiku-kynetxforfirefox-data/page_interaction.js

Related Posts:

Tags: , , , ,


Apr 11 2011

Kynetx Privatebook released!

Category: kynetx,technology

 

UPDATE: Due to changes in the Kynetx API and in the facebook.com chat, this browser app is currently not working anymore.

Feature : encode messages , links , chat communication on Facebook on the fly, transparently

If you feel like that privacy is important for freedom of speech and that Mark Zuckerberg might share some common views with Eric Schmidt than having all your Facebook chats being logged on FB servers could bother you.

Privatebook is a good start for keeping some privacy on Facebook. This Kynetx browser app installable as a browser extension or startable with a bookmarklet allows you to base64 encode in realtime any input you make in Facebook including the messages you sent on the Facebook chat.

Every message gets encoded before landing on Facebook servers so it’s stored encoded.

Privatebook works transparently so you won’t notice any change while typing, reading. On every message you send you can choose to encode it or not. Privatebook decodes encoded message on the fly.

To be able to read your encoded messages your friends will need to use Privatebook too.

Of course base64 is everything but a strong or even low encryption. Stronger encryption could be used in the future and actually there are plenty of implementations of strong encryption in javascript including PGP.

 

What is Privatebook made off?

 

  • jquery with some plugins : hasFocus, livequery , generateId
  • other js librairies : punnycode, base64_decode/base64_encode, utf8_encode/utf8_decode
  • Kynetx KRL event driven server-side language

How to install :

Install as a browser extension:

Chrome extension: crx

 

Firefox extension : xpi

 

Safari, IE extensions : not implented yet…

Kynetx KBX : http://apps.kynetx.com/installable_apps/3695-Privatebook

… or test it before with the bookmarklet : Privatebook !

Your feedback is essential ! Please give it here : https://convore.com/give-feedback-privatebook/ !

Bookmarklet source:

javascript:(function(){var d=document;var s=d.createElement('script');s.text="KOBJ_config={'rids':['a1135x22']};";d.body.appendChild(s);var l=d.createElement('script');l.src='http://init.kobj.net/js/shared/kobj-static.js';d.body.appendChild(l);})()

What the hell is a bookmarklet? => http://en.wikipedia.org/wiki/Bookmarklet

=> on Firefox

  1. make sure Bookmarks Toolbar is visible. If it isn’t select “View” from main menu then “Toolbars” and check “Bookmarks Toolbar”.
  2. drag this link: Privatebook to the Bookmarks Toolbar.
  3. alternatively you can right click on this link : Privatebook and select “Bookmark this Link”. Then select the “Bookmarks Toolbar” folder in the the combobox and click “Save”.

=> on Chrome

  1. make sure Bookmarks Bar is visible. If it isn’t right click on any part of the menu bar and check “Always show bookmarks bar”.
  2. drag this link : Privatebook to the Bookmarks Bar.

=> on Internet Explorer:

  1. make sure the Favorites Bar is visible. If it isn’t click on any part of the menu bar and check “Favorites Bar”.
  2. using your mouse, right click on this link :  Privatebook and select “Add to Favorites”.
  3. select “Favorites Bar” folder in the combobox and click the Add button.

=> on Safari:

  1. make sure Bookmarks Bar is visible. If it isn’t select “View” from main menu and select “Show Bookmarks Bar”.
  2. drag this link : Privatebook to the Bookmarks Bar.

=> on Opera :

  1. make sure Personal Bar is visible. If it isn’t select “View” from main menu then “Toolbars” and check “Personal Bar”.
  2. drag this link : Privatebook to the Personal Bar.

Related Posts:

Tags: , , , , , ,


Apr 11 2011

Kynetx Restyler released!

Category: kynetx,technology

 

 

 

 

 

UPDATE: Due to changes in the Kynetx API and in the userstyles.org design, this browser app is currently not working anymore.

Inspired from the popular Stylish extension, Restyler allows users to change the skin of their favorite websites like Facebook or Google. Restyler is compatible with userstyles.org so that you can install any style you may find there with Restyler.

Features:

  1. Comes with two preconfigured styles for Facebook and Google
  2. One click install on new styles from userstyles.org
  3. Manage multiple styles for every website
  4. Styles can have slideshows which allows to randomly show a background image every time the page is refreshed or stay on your favorite image
  5. Restyler can be installed on Firefox and Chrome. IE extension is on the way (for now it only works on IE8 using bookmarklets)

 

Restyler is based on Kynetx technology that allows to distribute kynetx browser apps via extensions or bookmarklets on any major browser. With Kynetx, developpers write their program once and deploy the same code on all browsers.
This will dramatically speed up development and maintenance so expect new features in Restyler soon !

 

What is Restyler made off?

  • wonderful jquery with some plugins : fancybox , easydrag , busy
  • Kynetx KRL event driven server-side language
  • Fun !

Future plans:

  • allow modication of styles on the fly to ease and speed up new style creation or customization
  • extend slideshow functionnality to support facebook albums , flickr, picasaweb …
  • export / import styles manually
  • crossbrowser settings ( same styles on all browser you use shall it be at office or home)

How to install :

Install as a browser extension:

Chrome extension: crx
Firefox
extension : xpi
Safari, IE extensions : not implented yet…

Kynetx KBX : http://apps.kynetx.com/installable_apps/3769-Restyler

… or test it before with the bookmarklet : Restyler !

Your feedback is essential ! Please give it here : https://convore.com/restyler-feedback-kynetx/ !

Bookmarklet source:

javascript:(function(){var d=document;var s=d.createElement('script');s.text="KOBJ_config={'rids':['a1135x24']};";d.body.appendChild(s);var l=d.createElement('script');l.src='http://init.kobj.net/js/shared/kobj-static.js';d.body.appendChild(l);})()

What the hell is a bookmarklet? => http://en.wikipedia.org/wiki/Bookmarklet

=> on Firefox

  1. make sure Bookmarks Toolbar is visible. If it isn’t select “View” from main menu then “Toolbars” and check “Bookmarks Toolbar”.
  2. drag this link: Restyler to the Bookmarks Toolbar.
  3. alternatively you can right click on this link : Restyler and select “Bookmark this Link”. Then select the “Bookmarks Toolbar” folder in the the combobox and click “Save”.

=> on Chrome

  1. make sure Bookmarks Bar is visible. If it isn’t right click on any part of the menu bar and check “Always show bookmarks bar”.
  2. drag this link : Restyler to the Bookmarks Bar.

=> on Internet Explorer:

  1. make sure the Favorites Bar is visible. If it isn’t click on any part of the menu bar and check “Favorites Bar”.
  2. using your mouse, right click on this link :  Restyler and select “Add to Favorites”.
  3. select “Favorites Bar” folder in the combobox and click the Add button.

=> on Safari:

  1. make sure Bookmarks Bar is visible. If it isn’t select “View” from main menu and select “Show Bookmarks Bar”.
  2. drag this link : Restyler to the Bookmarks Bar.

=> on Opera :

  1. make sure Personal Bar is visible. If it isn’t select “View” from main menu then “Toolbars” and check “Personal Bar”.
  2. drag this link : Restyler to the Personal Bar.

Related Posts:

Tags: , , , , , , ,


Apr 04 2011

Kynetx Facebook Contest (Ends Apr 3rd.) Submissions

Category: kynetx,technology


UPDATE 12/05/2011 : app was split in two distinct apps: Restyler and Privatebook

I gave myself 3 goals when I decided to participate to the Kynetx contest about remixing/extending Facebook:

  1. encrypt chat communication
  2. stylesheet injection
  3. add a social “I don’t like” button

I didn’t make it to code goal 3 but well,  I pushed goal 1 and 2 a little bit further then initially planned.

It always bothered me that FB was saving all the nonsense, savagery, insults and bad jokes I was sending through the chat so I thought of a simple parade: let’s encrypt each message in the browser before sending and decrypt it on the other side, all this in javascript. For a start I decided to use base64 but now that it works I am thinking of letting the users choose some stronger encryption and actually there are plenty of implementations of strong encryption in javascript including PGP. Now that facebook and twitter have become essential tools for revolutions I guess this could also help some people to bypass censorship on a large scale with a browser and a bookmarklet, couldn’t be simpler. After diving in the guts of FB javascript ( very similar to some peruvian jungle exploration) I finally found the entry point to the chat system were I could hook my code. But why not generalize this system to all the data that can be published to FB? Thanks to the beautiful jquery livequery plugin this became quite fun so now almost everything is encrypted: chat messages, comments, links, events… Every input gets encrypted in the browser, sent and stored encrypted to FB, and decoded automatically in the browser again so everything seems transparent. Other users can view the data clicking on the bookmarklet or installing an extension in their browser.

2nd goal is the answer to a little survey I made about what functionnality some FB addicts would like to see: themes. Actually there are quite a few FB apps that do that ( didn’t test any ) but then I stumbled on the Stylish extension which seemed a much better solution to me. Hmmm… I don’t care much about design, probably because I am such an idiot in CSS and Photoshop but well , Stylish gets 30000 installs a week on Chrome and 138000 on Firefox , enough to change my point of view! I unzipped chrome and FF extensions to have a look on how to port it and that was an interesting experience because it showed that chrome extensions could be ported to pure javascript almost automatically ( if the author hadn’t chosen webkit opendatabase for local storage which is not supported in all browsers). On the FF side I was affraid of how much code , native methods , manifests , xml and so on were necesary to do the same thing so I left the xpi as fast as I had unzipped it…It also the showed the clear advantage of “kynetx browser apps” compared to extensions: maintenance. One code for all browsers.
So want do we have now? A kynetx browser app compatible with the stylish userstyles.org site where you can find all kind of ugly and less ugly themes , not only for facebook, that you can install with one click. You can install several and then switch between them later on. Stylish doesn’t exist for IE… great!

Please check Restyler and Privatebook posts for installation info.

Related Posts:

Tags: , , , , , , ,