Skip to content

Instantly share code, notes, and snippets.

@baryluk
Created December 1, 2011 05:29
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save baryluk/1413959 to your computer and use it in GitHub Desktop.
Save baryluk/1413959 to your computer and use it in GitHub Desktop.
References - X-to-JS langauges and utilities
\subsection{Related work}
There is many releated works in field of JS and HTTP extensions
which tries to remove some of the current limitations
of JS, similary as erljs tries to handle them in one way.
\begin{itemize}
\item Erjang (\url{http://wiki.github.com/krestenkrab/erjang/})
% http://www.javalimit.com/
-- complete reimplementation of Erlang Virtual Machine to run on top of Java platform.
Similary to erljs this is achived using converting BEAM files to Java Bytecode (class files),
and executing them in the JVM. It can already run most of Erlang modules, communicate
with Erlang nodes. Erjang can be beneficial for few reasons,
first it can use runtime optimalisation (like dynamic compilation, selective inlineing)
techniques to improve performance of computiationaly intensive workloads,
simpler usage of Java libraries in the linked in drivers.
Erjang in comparission to standard Erlang VM have:
\begin{itemize}
\item single heap with global-like
Garbage Collector for all processes
(but there are many implementation depedning on particular JVM),
loosing soft real time advantages.
\item message passing via reference, this can save both time and space,
especially for big messages
\item Erlang processes are not maped to Java threads, but to processes
implemented in Java,
\item own process scheduler which is more expensive than Erlang's one.
\item uses BigInteger for integers bigger than Integer
\end{itemize}
\end{itemize}
Other projects targeting web browser and using other existing language than JavaScript to write Web Applications
\begin{itemize}
\item GWT - Google Web Toolkit (\url{http://code.google.com/webtoolkit/}) --
compiles Java like progam to JavaScript source
code performing many optimalisations in beetwen. Comes with big library of
common codes, widgets, communication methods, debuging and profiling
(also integrating profiling across browser-server boundary using Speed Tracer), reusable both
on server and client, integration with many other environments (like Java spring),
and bindings to existing JavaScript libraries and APIs.
\item IL2JS (\url{http://smp.if.uj.edu.pl/~mkol/il2js/}) --
recompiles MSIL bytecode to compact JS representation,
and then use fast JavaScript interpreter to execute any .NET code,
this includes C\#, F\#, VB.Script. Automatic (implicit or explicit) communication
with server (with proper serialization and passing exceptions), support for .NET resources (i.e. localization based on user agent preferences),
CSS and DOM handling using C\# constructs (like operator overloading).
Very simplified creation of binding to existing JavaScript libraries and APIs.
Allows also for simple threading. Uses Prototype.
\item Script\# (\url{http://projects.nikhilk.net/ScriptSharp}) --
compiles C\# code to Javascript, and allows usage of all .NET tools for
code development, documentation and testing.
Can be used with any framework (i.e. ASP.NET Ajax or ExtJS via Ext\#).
\item Volta (Microsoft) (\url{http://labs.live.com/volta/docs/}) -- was project to bring .NET application
to browser using translation to JavaScript similary to GWT.
%\item Visual WebGui (\url{http://www.visualwebgui.com/}) -- ??? something with Visual Basic 6,
%it looks that it is just implementation of .NET WinForms in JavaScript,
%and makes browser just a dumb presentation layer. All logic,
%and computation is still on server in VB\# or C\#.
%Compiles code both to JS and XSLT, but also to Flash or Silverlight.
%Can also compile to Desktop .NET application, but still
%use networking to real server for data and logic.
\item Emscripten (\url{http://code.google.com/p/emscripten/}) is an LLVM-to-JavaScript compiler.
\end{itemize}
% interesujacy jezyk w przegladarce
% https://clubcompy.com/rwBench.jsp
Using Erlang style concurenncy or some kind of threading in JS:
%Second there is many JS libraries, and coding practices which
%tries to solve problem of events or blocking JS:
\begin{itemize}
\item Thread.js (\url{http://www.neilmix.com/2007/02/07/threading-in-javascript-17/}) --
same as above in Generators point
\item Er.js (\url{http://beatniksoftware.com/erjs/}) --
uses concepts from Thread.js (using generators, with yield keyword)
to implement Erlang-like process. Allows for simpler writing of AJAX procesing
by asynchronous processing and message passing.
Er.js allows for binding for DOM events, simple pattern matching on messages
and linking beetwen processes (message is sent after process
finishes excution or throws exception).
Currently Er.js processes can't block, and must cooperativly schedule
with other threads using explicit yield statments.
Future works will include communication with server, and multiple real threads.
\item towel.js (\url{http://www.toweljs.org/}) -- plugin for MooTools for event-based JavaScript coding
% Arrows \url{http://www.cs.umd.edu/~jfoster/arrows.pdf}
% Go \url{http://golang.org/doc/go_spec.html#Channel_types}
% Concurant ML \url{http://www.cs.umd.edu/~avik/papers/cmllch.pdf}
\item Arrowlets (\url{http://www.cs.umd.edu/projects/PL/arrowlets/}) --
arrows in JavaScript
\item WorkerPool API (\url{http://code.google.com/apis/gears/api_workerpool.html}) --
extenstion in browser supporting Gears (\url{http://code.google.com/apis/gears/}) plugin (Firefox or Chrome)
for writing Desktop-like application. This extension allows executing
JavaScript in background in way that will not block UI or prevent
other scripts from execution. WorkerPool processes do not share any execution
state and communicate with main thread using messages (but sending
functions is not allowed).
One can also execute Workers with code from other domain than original code.
\item \url{http://codediaries.blogspot.com/2009/12/real-javascript-multithreading-using.html}
(using multiple IFRAME)
\item Part of (obsolate) f(m) framework \url{http://social.msdn.microsoft.com/forums/en-US/netfxjscript/thread/a86d8a40-d75a-4edf-9c41-8bfc8fec1bc6/}
\item Ported to dojoX (\url{http://o.dojotoolkit.org/projects/dojox}) as timing library
\url{http://archive.dojotoolkit.org/nightly/checkout/dojox/timing/}
\end{itemize}
There are many suggested (some of which are already implemented
in some user agents) extensions to JavaScript API or HTTP protocol:
\begin{itemize}
\item Web Workers (\url{http://www.whatwg.org/specs/web-workers/current-work/}) --
allowing
to load and run multiple JS codes and scripts asynchronously possibly on multiple
cores. Web Workers have available additional synchronization
primitives, and simple message passing interface to easly and safly
communicate using arbitrary JS messages.
% Shared Worker (http://www.whatwg.org/specs/web-workers/current-work/#shared-workers-introduction)
%
% http://ejohn.org/blog/web-workers/
% http://ejohn.org/blog/how-javascript-timers-work/
\item postMessage ()
% http://dev.w3.org/html5/spec/Overview.html#structured-clone
% http://dev.w3.org/html5/spec/Overview.html#dom-window-postmessage-2
\item Server-Sent Events (\url{http://www.w3.org/TR/eventsource/}) --
allowing continious stream of event to be delivered asynchronously from
server-side event source to JS code.
\item WebSockets (JS API \url{http://dev.w3.org/html5/websockets/},
HTTP Protocol \url{http://www.whatwg.org/specs/web-socket-protocol/})
-- allowing for TCP-like comumunication beetwen user agent and server
in arbitrary way directly from JavaScript.
\item Cross-Origin Resource Sharing (\url{http://dev.w3.org/2006/waf/access-control/}) --
allowing safely requesting and performing fetch of resource at different
domain than origin. This includes safe way of determining
if user credintials can be used (cookies, HTTP authentification,
SSL certificates), and whethever requested result can be
shared to JS code even if it originate from different domain.
There is also method for securing all types of requests methods (GET, POST, DELETE, PUT, etc),
custom headers and to cache eventual policy to reduce latency and network usage.
\item Generators (and Iterators) in JavaScript 1.7 (\url{https://developer.mozilla.org/en/New_in_JavaScript_1.7})
(this can be easly use to emulate threading in JavaScript 1.7, see
\url{http://www.neilmix.com/2007/02/07/threading-in-javascript-17/}
and \url{http://www.neilmix.com/demos/js17threading/Thread.js})
\item Array comprehensions in JavaScript 1.7
\end{itemize}
% also mentions other works, mostly releated to form handling, and AJAX in ASP.NET
% Ajaxium (\url{http://www.ajaxium.com/}),
% Web.Forms,
% Comfort (\url{http://www.comfortasp.de/}),
% Anthem (\url{http://anthem-dot-net.sourceforge.net/}),
% ASP.NET Ajax (\url{http://ajax.asp.net/}),
% AJAX.NET (\url{http://www.asp.net/})
% Telerik (\url{http://www.telerik.com/products/aspnet/ajax/overview.aspx})
Profilers of JS execution and webpage loading and size
Validators of HTML, JS, CSS code, including testing for obsolotate
or not yet implemented features. Can also test for accessibilty issues.
\begin{itemize}
\item JSLint (\url{http://jslint.com/}) -- The JavaScript Code Quality Tool
%http://uitest.com/en/check/
%http://uitest.com/en/analysis/
%http://www.webpagetest.org/
%http://www.web-site-test.com/
\end{itemize}
JavaScript libraries -- general JS toolkits (simplifing common task of webdeveloprs,
like writing layouts, animations, events, AJAX mechanisms, simple testing):
\begin{itemize}
\item base2
\item Prototype (\url{http://www.prototypejs.org/}) --
small JavaScript Framework that aims to ease development of dynamic web
applications.
\item jQuery (\url{http://jquery.com/}) --
Library that simplifies how to traverse HTML documents, handle events,
perform animations, and add AJAX."
\item MooTools (\url{http://mootools.net/}) --
compact JavaScript framework
\item Closure
\item Ext JS (\url{http://www.extjs.com/})
Ext GWT is Java port of Ext JS to GWT framework.
There is also Ext\# (\url{http://code.google.com/p/extsharp/}) which integrates with Script\#.
\end{itemize}
%\item RightJS (\url{http://rightjs.org/})
%http://www.kylehayes.info/2009/03/29/survey-results-javascript-frameworks/
%http://www.filepie.us/?title=Comparison_of_JavaScript_frameworks
RIA frameworks -- more comprehensive frameworks, with widgets, a GUI toolkit
and developent tools (i.e. code compressors):
\begin{itemize}
\item dojo (\url{http://www.dojotoolkit.org/, http://o.dojotoolkit.org/}) --
modular JavaScript toolkit
\item YUI 2, YUI 2 (\url{http://developer.yahoo.com/yui/})
\item UIZE (\url{http://www.uize.com/})
\item qooxdoo (\url{http://qooxdoo.org/})
\item MochiKit (\url{http://www.mochikit.com/})
\end{itemize}
DWR
ZK
% \url{http://sizzlejs.com/} -- fast CSS selector engine
% \url{http://selectors.turnwheel.com/slickspeed.php} -- selector benchmark beetwen MooTools, Prototype, YUI, Dojo
% \url{http://dante.dojotoolkit.org/taskspeed/} -- and again similar benchmark, with more toolkits
% \url{http://dante.dojotoolkit.org/taskspeed/report/charts.html} -- result in many browsers
Erlang HTTP servers
\begin{itemize}
\item inets
\item webtools
\item iserver
\item Yaws (\url{http://yaws.hyber.org/})
\item MochiWeb (\url{http://code.google.com/p/mochiweb/})
%
\item Misultin (\url{http://code.google.com/p/misultin/})
% \url {http://github.com/ostinelli/misultin}
\item Webmachine (\url{http://webmachine.basho.com/}, \url{http://bitbucket.org/basho/webmachine})
%OLD repository and blog: \item WebMachine (\url{http://blog.therestfulway.com/}, \url{http://bitbucket.org/justin/webmachine})
\end{itemize}
Erlang related Web application works
\begin{itemize}
\item Erlang Web (\url{http://www.erlang-web.org/})
\item Erlyweb (\url{http://erlyweb.org/})
\item BeeBole
\item Nitrogen (\url{http://nitrogenproject.com/}) - Erlang framework for
interactive web applications. Nitrogen uses control logic
on the server side by first sending event to server automatically,
and sending back update information. This allows having most of functionality
of single HTML element contained in the single .erl files,
both in terms of content and behaviour.
In contrast to erljs interactive web application
written in Nitrogen produce quite big number of small network requests
which adds latency and server load. Additionally Nitrogen doesn't allow
for arbitrary computation on the client-site without writing JavaScript
manualy. Nitrogen comes with Erlang constructs for rich application elements
like form controls, in-place editing, Google charts, validation,
notifications, drag and drop support, sorting, data binding, effects,
DOM updates, replace and removal via AJAX, jQuery selectors, Comet style
processing, file uploading and invoking general Erlang handler
from JavaScript with JavaScript values as argument.
It uses jQuery library for most of its tasks.
\item
\item BERT JS (\url{http://github.com/rklophaus/BERT-JS}) --
Javascript implementation of BERT serialization (Binary ERlang Term).
%\item BERT for Ruby (\url{http://github.com/mojombo/bert})
%BERT (%http://bert-rpc.org/) -- includes specification and references
%clients in C++, Clojure, Erlang, Factor, Go, Haskell, JavaScript, Python,
%Ruby and Scala.
\end{itemize}
% benchmarking
% Tsung
% benchmarks
% {http://www.joeandmotorboat.com/2009/01/03/nginx-vs-yaws-vs-mochiweb-web-server-performance-deathmatch-part-2/}
%
% merle (\url{http://joewilliams.github.com/merle/}) -- An Erlang Memcached Client
% \url{http://www.nitrojs.org/}
There is also many opinion that JS isn't enaugh now for scalable
concurant applications, because of new multicore hardware
and highly dynamic and concurant nature of complex web applications.
\begin{itemize}
\item \url{https://wiki.mozilla.org/JavaScript:JS3_Requirements}
"JavaScript:JS3 Requirements" ... "Safe, scalable concurrency"
\item \url{http://weblogs.mozillazine.org/roadmap/archives/2007/02/threads_suck.html}
"There are better ways. Clueful hackers keep rediscovering Erlang."
%\item Hermes: A Language for Distributed Computing
%Hermes is a secure language like Java but allows fully transparent distributed computing. Hermes uses typestate in a powerful way that eliminates the need for garbage collection. A simple version of the typestate concept is used to achieve security by the Java verifier.
%(\url{http://www.research.ibm.com/people/d/dfb/papers/Strom91Hermes.ps})
\end{itemize}
Server side JS frameworks
\begin{itemize}
\item \url{http://narwhaljs.org/}
\item \url{http://jackjs.org/} (like Ruby's Rack, or Python's WSGI, but for JavaScript)
\end{itemize}
Using JavaScript in Erlang:
\begin{itemize}
\item CouchDB () -- CouchDB's map, view functions are written
in simple JavaScript, not Erlang.
\item SpiderMonkey JavaScript engine as linked driver in Erlang VM
\url{http://www.basho.com/developers.html#erlang_js}
\url{http://davispj.com/2010/01/19/erlang_js_awesome.html}
\url{http://bitbucket.org/basho/erlang_js/src}
-- it is created both by basho (guys behind the Riak)
It is already used by CouchDB (\url{http://github.com/davisp/couchdb/tree/erlang_js})
to improve performance of databse. Previous approach was using SpiderMonkey
engine connected using Erlang port, but this have some overhead.
\item erlyjs (http://code.google.com/p/erlyjs) -- Compiles JavaScript directly to Erlang BEAM bytecode and Core Erlang.
%http://erlyjs.googlecode.com/
\end{itemize}
%Erlectricity (\url{http://github.com/mojombo/erlectricity}) -- exposes Ruby to Erlang and vice versa.
There is also increasing usage of testing tools for JS.
Testing client-side JS code on server is slightly more complex,
as automatic tests should be runable from command line,
without graphic interface and should not need manual
intervention. This is especially important and at the same
hard becuase in most cases developers needs
to test not only pure JavaScript code,
but also functionality of the whole Web Application,
including acessibility, design, user interface interactions,
latency.
This can be acomplished using emulation in some JS engine:
\begin{itemize}
\item Rhino (\url{http://www.mozilla.org/rhino/}) --- JavaScript implementation in Java,
which can be easly used in Java code, or called from command-line.
Rhino can be used for testing of JavaScript code, for example erljs.
\item Other JS engines k7 (based on V8), helma (Rhino with extensions),
jaxer (based on Mozilla SpiderMonkey), xulrunner.
\item Env.js (\url{http://env-js.appspot.com/}) --
Browser emulator for rhino - JS library for Rhino, thanks
to which Rhino can emulate most of Web Browser mechanisms, including
full DOM, CSS, fetching other resources from net, events, and
browser specific modification (like frames, iframes, document, etc.)
(\url{http://www.envjs.com/})
\item JSpec (\url{http://visionmedia.github.com/jspec/}) --
JavaScript Testing Framework, which can be used both in
web broser or on the server, simplifies writing tests cases
in specialised language.
(JSpec can be integrated into many environments, including Ruby on Rails,
Rhino, Env.js, Drupal (\url{http://github.com/visionmedia/jspec-drupal}),
% jQuery.
\item QUnit (\url{http://docs.jquery.com/QUnit }) --
a testing library in jQuery framework
\item JSUnitTest (\url{http://jsunittest.com/}) --
a testing library based on prototypejs's unittest.js
% \url{http://github.com/drnic/jsunittest/}
% RSpec,
\item jShoulda (\url{http://jshoulda.scriptia.net/}) --
is a simple syntax for writing tests for JSUnitTest.
Syntax is based on Ruby's testing library, Shoulda (\url{http://thoughtbot.com/projects/shoulda/}).
\item SugarTest (\url{http://sugartest.scriptia.net/}) --
similary simple syntax for writing tests for JSUnitTest.
\item YUI Test
\item
\end{itemize}
%List of some testing libs for pure JS:
% \url{http://www.opensourcetesting.org/unit_javascript.php}
% \url{http://www.denbagus.net/javascript-testing-and-validation-tools/}
% JS engine performances:
% \url{dromaeo.com/}
% SpiderMonkey, V8
% JS engine testing
% \url{www.mozilla.org/js/tests/library.html}
% Sputnik
% \url{http://broofa.com/Tools/JSLitmus/} - simple and accurate JavaScript benchmarking
% \url{http://www.jsunit.net/} -- JavaScript port of JUnit (\url{http://www.junit.org/})
% \url{http://j3unit.sourceforge.net/} -- JavaScript port of JUnit and xUnit (\url{http://www.xprogramming.com/software.htm})
%jetty BROKEN \url{http://jetty.codehaus.org/jetty/jetty6/}
General mocking and testing:
\begin{itemize}
\item Selenium (\url{http://seleniumhq.org/}) -- web application testing system
\item Recorder Mock (\url{http://github.com/matschaffer/recorderMock.js}) --
%\item BrowserShots (\url{http://browsershots.org/}) -- testing in multiple browsers.
\end{itemize}
%
\begin{itemize}
\item LFE, Lisp Flavoured Erlang (\url{http://github.com/rvirding/lfe}) -- programing language
based on LISP. Generates Erlang Core.
\item efene (\url{http://marianoguerra.com.ar/efene/}, \url{http://github.com/marianoguerra/efene}) --
functional programing language based on mix of Python, JavaScript and Erlang.
Generates Erlang source code, and then compile to BEAM bytecode. It also comes with Iefent, a dialect
of Efene which uses indentation to delimete blocks of code (similar to Python), instead of using
curly brackets (similar to C or JavaScript).
\item Reia (\url{http://reia-lang.org/}) is a Ruby-like scripting language for the Erlang virtual machine.
\item erlyjs (http://code.google.com/p/erlyjs) -- Compiles JavaScript directly to Erlang BEAM bytecode and Core Erlang.
(Mentioned also in JavaScript section)
\end{itemize}
% Pure (\url{http://beebole.com/pure/}) -- Simple and fast templating tool to generate HTML from JSON data, with separation of data and presentation.
% DOMAssistant (\url{http://www.domassistant.com/}) --
% trane (\url{http://github.com/massemanet/trane}) -- SAX-style parser for HTML
% 30 maja 2010
% http://www.haskell.org/haskellwiki/Yhc/Erlang/Proof_of_concept
%http://www.redhoterlang.com/entry/60caccd0677c03953b1c8ba37f69fc24
%http://code.google.com/p/erlocaml/ Ulf Wiger!
%http://code.google.com/p/erlocaml/source/checkout
%http://github.com/khigia/erlocaml/
%some examples http://khigia.wordpress.com/category/erlocaml/
%Markus Mottl's Sexplib tool or Jeremy Yallop's Deriving mechanism.
% 1 czerwca 2010
% LINQ
%http://jslinq.codeplex.com/
%http://www.thomasfrank.se/sqlike.html
% Performance monitoring
%http://developer.yahoo.com/yslow/
%http://code.google.com/speed/page-speed/index.html
%http://www.showslow.com/
% JSON stringier wich handles cyclic references
%http://www.thomasfrank.se/json_stringify_revisited.html
% BTW: nice personal website with many usefull JS resources.
%Smokescreen (JavaScript + HTML5, NOT Flash!) running sbemail45.swf
%http://smokescreen.us/demos/sb45demo.html
Runing (with help of server) other languages in Web Browser:
\begin{itemize}
%Ruby in browser
%http://blog.moertel.com/articles/2005/11/30/try-ruby-from-your-web-browser
\item Try Ruby (http://tryruby.hobix.com/) -- dead link?
%http://tryruby.sophrinix.com/ -- dead
%http://whytheluckystiff.net/
\item Try Ruby (http://tryruby.org/) -- remake. Of course runs ruby on the server,
and have pretty lookig console in the browser. It have also greate 15 minutes
tutorial with description bellow consol which helps you what to type, and what
is going on. It for example monitors what method is used (for example,
reverse, lenght, to_s, variable assigment and usage and even exceptions, to see what progress user is doing
at each stage of tutorial).
Pretty slow computation (slow network?). Back space to delete charaters doesn't work.
%http://github.com/Sophrinix/TryRuby
% Python in browser
%http://www.rhonabwy.com/wp/2010/03/27/python-in-a-web-browser/
\item Try Python (http://try-python.mired.org/) -- Python
just runs Python on server and redirect console output to the browser,
using simple textarea. Defining functions is impossible.
% Buggy console and input sometimes. (can be Opera specific problem)
%Mike Meyer's Try Python for an AJAT experience. (http://www.mired.org/home/mwm/try_python/)
%(this are the same tools)
\item App Engine Console (http://con.appspot.com/console/) -- Python.
Very similar to Try Python, but slightly more advanced,
input is as separate form input.
supports sessions, authorization, chating with other users,
it can be embeded in any Python application (for exampe to monitor it or experiment),
have syntax highlighting and links to documentation for exceptions, module names and types.
% separate input line
% (needs login, but agan same idea. allows for chat beetwen multiple person to cooperate)
% it can be embeded in server code to quickly issue some command or check python server state
% it also provide help for user on exceptions, module names and types, by converting them to link to documentation
% optional syntax highlighting
% authorization and cookies for session
%(we can try similar console implementation)
\item Online Python Read-Eval-Print Loop (REPL) (http://www.datamech.com/devan/trypython/trypython.py) --
Again same idea, but slightly slower due to reloading of whole page on each command.
% REPL (http://www.datamech.com/devan/trypython/trypythonx.py) -- (tries to fix bug with circular references with above one)
\item pyjamas (http://pyjs.org) Python web widget toolkit and Python-to-Javascript compiler
\item Try Erlang (http://www.tryerlang.org/) Erlang tutorial similar to Try Ruby, created in 2010.
Uses jQuery Console Plugin, and restricted shell on server. All Erlang code is running on the server.
webbrowser is just a Input/Output.
It presents
% TODO: Actually such approach can also be usefull for erlang webserver!
\end{itemize}
Web Page (HTML) Templating
\begin{itemize}
%\item markaby (Ruby)
%\item ERb (Ruby)
%\item HAML (Ruby)
% - HAML is also implemented in other languages, JS,Perl,Java,PHP,Lua,Python,.NET
% - very nice, compact and usefull
% - JS port http://github.com/creationix/haml-js
\item DTL (Django Template Language) -- templates for Python. Ported to Erlang.
\end{itemize}
CSS templating
\begin{itemize}
\item Less (http://lesscss.org/) -- Leaner CSS, based on the syntax of CSS3. Slightly different syntax, but same functionality as new Sass.
Supports nesting, inheritance, mixins, variables (constants), scope and operation on variables
and importing other files.
\item Sass (http://sass-lang.com/) -- original syntax based on indentation, but also new similar to CSS3. In
fact CSS3 is valid Sass file so allows for incremental deployment.
Supports nesting, inheritance, variables, simple mathematical operators and functions on units and colors,
and macros (mixin). Written by same authors as HAML.
\end{itemize}
% http://hacks.mozilla.org/2010/06/css3-calc/ - adds possibility to use -moz-calc(), -moz-min(), -moz-max() function in CSS atributes.
% Additioal advantaege: one can mix multiple units and relative: 80% - 1em + 12px, will be calculated dynamically if needed.
% http://www.w3.org/TR/css3-values/#calc -
Communication
\begin{itemize}
\item Stomp protocol (http://stomp.codehaus.org/Home) -- based on simple HTTP.
It is Streaming Text Orientated Messaging Protocol site
(or the Protocol Briefly Known as TTMP and Represented by the symbol :ttmp).
Impemented in many languages: Java, C, C++, Objective-C, C#, Perl, PHP, Python, Ruby, Flash, Erlang, Smalltalk, Delphi, haXe.
\item Stomple (http://github.com/krukow/stomple) -- nice message passing using WebSockets and Stomp protocol.
%
% Other alternatives for messaging:
%\item WS-{Ramp,Reliability,ReliablyMessaging} -- SOAP based
%\item XMPP -- XML based streaming
%\item TOC -- text oriented (originally for AIM, not very good)
%\item MQTT -- MQ Telemetry Transport. Simple binary pubsub, now security.
%\item BEEP -- http://www.beepcore.org/
\end{itemize}
%Facebook's BigPipe
% node.js - Node/Connect
%
% Using single image for multiple states/elements without loading many separate images or JS preload:
% CSS sprites:
% http://wellstyled.com/css-nopreload-rollovers.html
% http://www.alistapart.com/articles/sprites
% http://css-tricks.com/css-sprites/
% http://spritegen.website-performance.org/ - generator
% http://spriteme.org/ - generator
% http://csssprites.com/ - generator
% Image replacment techniqes:
% Overview: http://www.alistapart.com/articles/fir/
% http://rtnl.org.uk/words/19990709-site_updates.shtml
% http://www.stopdesign.com/articles/css/replace-text/
% http://www.zeldman.com/dwws/
% List of probably all techniques: http://www.mezzoblue.com/tests/revised-image-replacement/
% sharding resources
% http://www.stevesouders.com/blog/2009/05/12/sharding-dominant-domains/
% http://yuiblog.com/blog/2007/04/11/performance-research-part-4/
% TOOD: http://www.ajaxperformance.com/2006/12/18/circumventing-browser-connection-limits-for-fun-and-profit/
% Good guide for loading optimalization:
% TODO: http://www.die.net/musings/page_load_time/
% webpage loading profiling
% http://www.dynatrace.com/en/Web20-End-to-End-Performance%20Engineering.aspx - WOW! Very integrated one for profiling everything in single tool.
% Ciekawostki:
% - dodawać <script> inlinowy na końcu dokumenty, wtedy rendering jest minimalnie szybszy
% - znajwydanie martwego kodu JS, i jego elimiinacja. strony maja tendencje do dodawania kodu JS, ktorego nikt nie uzywa,
% a nawet jakby ktos chcial usunac, to nie wie czy nie zepsuje bo moze ktos jednego uzywa.
% NES emulator in JS:
% http://benfirshman.com/projects/jsnes/
%Web Storage (http://www.w3.org/TR/webstorage/)
%Indexed Database API (http://www.w3.org/TR/IndexedDB/)
%Web SQL Database (http://dev.w3.org/html5/webdatabase/)
% Y.preload
%http://ajaxian.com/archives/y-preload-load-before-execution
% http://www.yuiblog.com/blog/2010/06/10/gallery-preload/
% http://yuilibrary.com/gallery/show/preload
% Browser capabilities detection
% http://www.modernizr.com/
% php.js (\url{http://phpjs.org/}) - implementation of popular PHP function in JavaScript.
% \url{http://phpjs.org/packages/configure} -- compiler in which one can select which functions need to be included in generated js file with functions
%Custom events: http://ajaxian.com/archives/how-custom-events-will-save-us-all
http://ajaxian.com/archives/publishing-custom-events-in-javascript
http://ajaxian.com/archives/custom-events-as-api-end-points-for-key-bindings-and-more
http://ajaxian.com/archives/enjoying-the-observer-pattern-with-custom-events
%and more refrences there
Video about event driven architecture http://developer.yahoo.com/yui/theater/video.php?v=zakas-architecture
1st of 4 parts of Event Driven jQuery: http://www.stoimen.com/blog/2009/10/20/event-driven-programming-with-jquery-part-1-what-is-event-driven/
% YQL - Yahoo Query Language
% Running JavaScript from the Browser in the Rhino (by DOM-like environment)
% Developed by John Resig (http://ejohn.org)
% Initial blog post with old version: http://ejohn.org/blog/bringing-the-browser-to-the-server/
% Current version: http://www.envjs.com/
% Group: http://groups.google.com/group/envjs?pli=1
% Source: http://github.com/thatcher/env-js/tree/master
% Old original source: http://github.com/jeresig/env-js/
% http://www.quirksmode.org/js/events_properties.html
% http://www.quirksmode.org/dom/events/index.html
% pattern matching in JS
% http://www.bramstein.com/articles/pattern-matching.html
% http://www.bramstein.com/articles/advanced-pattern-matching.html
% RIA
% Curl (programming language)
% OpenLashlo
% Adobe Flex/Apollo
% Tibco
% JackBe
% NexaWeb
% see http://www.curl.com/products_features.php
%
% http://en.wikipedia.org/wiki/Comparison_of_user_interface_markup_languages
% http://en.wikipedia.org/wiki/List_of_user_interface_markup_languages
% http://en.wikipedia.org/wiki/User_interface_markup_language
%
% http://en.wikipedia.org/wiki/Interface_description_language
% Items added about 1 Nov 2011:
% https://github.com/nurv/BicaVM
% Javascript implementation of JVM
% http://jainja.thenesis.org/
% Jainja is a Java Virtual Machine written in Java.
% The VM uses the smallest possible subset of Java in order to run
% on top of multiple environments : Java SE, JavaME, Android,
% Javascript, and even natively in a near future.
% IL2JS new home page
% https://github.com/mkol/il2js
% http://altjs.org/
% altJS is a collection of languages and tools aimed at rebooting JavaScript and making it better.
% It lists multiple compile-to-JavaScript languages and tools
\end{document}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment