<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>pieroxy.netjavascript</title>
    <link>https://pieroxy.net/blog/tags/javascript/</link>
    <description>tech, dev, web &amp; other stuff</description>
    <language>en</language>
    <copyright>Pieroxy</copyright>
    <pubDate>Thu, 25 Aug 2022 14:06:00 GMT</pubDate>
    <dc:creator>Pieroxy</dc:creator>
    <dc:date>2022-08-25T14:06:00Z</dc:date>
    <dc:language>en</dc:language>
    <dc:rights>Pieroxy</dc:rights>
    <image>
      <title>pieroxy.netjavascript</title>
      <url>https://pieroxy.net/blog/tags/javascript/</url>
    </image>
    <item>
      <title>Remote real time computer monitoring</title>
      <link>https://pieroxy.net/blog/2021/07/26/1627364880000.html</link>
      <content:encoded>&lt;img style="max-width:50%;float:left;margin-right:20px;margin-bottom:20px" src="https://pieroxy.net/conkw/screenshots-doc/logo-black-400.png"&gt;

&lt;p&gt;&lt;a href="https://github.com/pieroxy/conkw/"&gt;Conkw&lt;/a&gt; is a new project I've been working on for a few month. It stands for web-based Conky.

&lt;p&gt;Just like Conky, it is aimed at hobbyists that want a small dashboard where their most essential data is displayed. CPU, temperature, fan speeds, but also the weather forecast, stock market, latest emails received, etc.

&lt;p&gt;Unlike conky, the metrics are exposed through a REST API and there is a HTML UI to display your stuff on any browser. The goal is to find some use to the old ipads/tablets/laptops we all have lying around. You can put them next to your screen and have your metrics displayed there, with no real estate consumed from your screens. The UI has been properly prepared to run on old browsers.

&lt;p&gt;The very nature of the web based architecture allows a conkw running on a machine to send all of its metrics to another central one for instance. So it is right out of the box ready to monitor a large park of machines, all reporting to one or more central instances.

&lt;p&gt;It is also very lightweight to deploy as it stores nothing, it is real time! As such, one other way of using it is to gather all of your monitoring data through one instance, and have all that data exported to grafana, graphite or any other monitoring system that stores data.

&lt;p&gt;Hop on &lt;a href="https://github.com/pieroxy/conkw/"&gt;the github&lt;/a&gt; for more details.</content:encoded>
      <category domain="https://pieroxy.net/blog/categories/web-design/">Web Design</category>
      <category domain="https://pieroxy.net/blog/categories/javascript/">JavaScript</category>
      <category domain="https://pieroxy.net/blog/categories/general-rambling/">General rambling</category>
      <category domain="https://pieroxy.net/blog/tags/design/">design</category>
      <category domain="https://pieroxy.net/blog/tags/javascript/">javascript</category>
      <category domain="https://pieroxy.net/blog/tags/monitoring/">monitoring</category>
      <category domain="https://pieroxy.net/blog/tags/realtime/">realtime</category>
      <category domain="https://pieroxy.net/blog/tags/remote/">remote</category>
      <category domain="https://pieroxy.net/blog/tags/web/">web</category>
      <pubDate>Tue, 27 Jul 2021 05:48:00 GMT</pubDate>
      <guid isPermaLink="false">tag:pieroxy.net,2021-07-27:pieroxy.net/1627364880000</guid>
      <dc:date>2021-07-27T05:48:00Z</dc:date>
    </item>
    <item>
      <title>Apple is so great</title>
      <link>https://pieroxy.net/blog/2020/04/24/1587713340000.html</link>
      <content:encoded>&lt;img class="w320" src="https://pieroxy.net/images/apple.png"&gt;
&lt;p&gt;Apple invented the personal computer with the Apple II, igniting the personal computer revolution. Apple is unique in that regard.

&lt;p&gt;Apple made the mouse ubiquitous and popular, as well as the GUI. That's goundbreaking.

&lt;p&gt;Apple changed &lt;i&gt;twice&lt;/i&gt; of CPU architecture (68k -&amp;gt; PPC -&amp;gt; x86) in their computers, maintaining backward compatibility. That's no small feat.

&lt;p&gt;Apple invented what we know today as being a smartphone. "The smartphone revolution". That was Apple starting it.

&lt;p&gt;Apple introduced tablets and is arguably the biggest tablet manufacturer in the world. In fact, it produces one third of all tablets produced. Wow!

&lt;p&gt;No other company has that track record.

&lt;p&gt;Yet, Apple, to this day, still fails at making available to devs the number of pixels available for a webpage. CSS doesn't know. JavaScript doesn't know. HTML doesn't know. There is no way.

&lt;p&gt;No other company has that track record indeed.</content:encoded>
      <category domain="https://pieroxy.net/blog/categories/css/">CSS</category>
      <category domain="https://pieroxy.net/blog/categories/web-design/">Web Design</category>
      <category domain="https://pieroxy.net/blog/categories/iphone/">iPhone and iOS</category>
      <category domain="https://pieroxy.net/blog/categories/javascript/">JavaScript</category>
      <category domain="https://pieroxy.net/blog/categories/html/">html</category>
      <category domain="https://pieroxy.net/blog/categories/general-rambling/">General rambling</category>
      <category domain="https://pieroxy.net/blog/tags/apple/">apple</category>
      <category domain="https://pieroxy.net/blog/tags/css/">css</category>
      <category domain="https://pieroxy.net/blog/tags/design/">design</category>
      <category domain="https://pieroxy.net/blog/tags/html/">html</category>
      <category domain="https://pieroxy.net/blog/tags/ios/">ios</category>
      <category domain="https://pieroxy.net/blog/tags/ipad/">ipad</category>
      <category domain="https://pieroxy.net/blog/tags/iphone/">iphone</category>
      <category domain="https://pieroxy.net/blog/tags/javascript/">javascript</category>
      <category domain="https://pieroxy.net/blog/tags/web/">web</category>
      <pubDate>Fri, 24 Apr 2020 07:29:00 GMT</pubDate>
      <guid isPermaLink="false">tag:pieroxy.net,2020-04-24:pieroxy.net/1587713340000</guid>
      <dc:date>2020-04-24T07:29:00Z</dc:date>
    </item>
    <item>
      <title>node.js vs Java nashorn</title>
      <link>https://pieroxy.net/blog/2015/06/29/1435607520000.html</link>
      <content:encoded>&lt;img class="w320" src="https://pieroxy.net/images/articles/javavsnode.png"&gt;
&lt;h2&gt;Why did I test it?&lt;/h2&gt;

&lt;p&gt;In my current Java project, I make some use of JavaScript. Performances were quite horrendous with Rhino in java 6 and 7, but in Java 8 there is a brand new JavaScript runtime: Nashorn.

&lt;p&gt;Its principal feature is that it's much faster than Rhino. At last, we're going to be able to execute some serious javascript on the server side. Given the richness of the node.js ecosystem, that's a whole new bunch of tools at our disposal. But will they run fast, or fast enough?

&lt;p&gt;First, why not just run those scripts with node?

&lt;p&gt;There are several things in there. When I do Java, I know that what I do is highly portable. Much more so than in any other language, node.js included. So dragging a dependency on node.js annoy me. Also, it's much easier to communicate with nashorn (give it inputs, get outputs back or even callbacks) than with an external process. But most of all, the stability of the whole ecosystem kind of scares me. npm is broken every other day and more often than not, upgrading anything leads to a whole bunch of problems. The simple fact that this whole thing is not even packaged for Ubuntu leaves me wondering.

&lt;h2&gt;What did I test?&lt;/h2&gt;

&lt;p&gt;So, for a practical test, I wanted to minify javascript libs on the fly. So I took a typical Javascript payload from my website and applied UglifyJS to it. The initial payload is the blind concatenation of all the JS files at my disposal in my repo. That's about 62kb of JavaScript. This is real JavaScript used in a real world application, not some dummy routine.

&lt;p&gt;First of all, the compression result. I have a slightly different script to run on node.js and on Java, but they all give an output of 28909 bytes out of 62498. I used the same options for both: do it all, compress as hell.

&lt;p&gt;Notes: I'm running this on an Ubuntu 14.04LTS with a Q6600, an old quad-core from Intel not hyper-threaded. I've tested Java 1.7.0_11, 1.8.0_05 and 1.8.0_45 (with the optimistic type system enabled in nashorn)

&lt;h2&gt;The test&lt;/h2&gt;

&lt;p&gt;The results of the first run (that's after uglifyjs has been loaded):

&lt;ul&gt;
  &lt;li&gt;node.js: 910ms&lt;/li&gt;
  &lt;li&gt;Java 8u05: 22s&lt;/li&gt;
  &lt;li&gt;Java 8u45: 28s&lt;/li&gt;
  &lt;li&gt;Java 7: 19s&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So, Java 8 is slower than Java 7. Node crushes them pretty hard - and that's quite an understatement. Note that the newer the version of Java, the worse it is. I surely did not expect that. I don't know much about V8 (node js engine), but I know a few things about Java. HotSpot takes its time to optimize the code it runs. Let's do a for loop with 10 iterations and see how much time it takes at the 10th iteration:

&lt;ul&gt;
  &lt;li&gt;node.js: 600ms - one core used&lt;/li&gt;
  &lt;li&gt;Java 8u05: 3.6s - three cores used - about 10.8s cpu time&lt;/li&gt;
  &lt;li&gt;Java 8u45: 3s - three cores used - about 12s cpu time&lt;/li&gt;
  &lt;li&gt;Java 7: 17s - one core used&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now, this is more interesting. Java 8 is clearly ahead, but still about 6 times slower than node. Java8u45 is a bit ahead on that one. Java7 is still dreadful, but that was expected.

&lt;p&gt;A last note on the cores used. I noticed it during this test because it runs for longer than the first one. Both tests involving Java 7 and node.js take about 100% CPU, which means they use one core (out of my quad core). The test in Java 8 uses about 300% CPU, which means bout three cores. This is also true for the first test of course, but I didn't notice it at first.

&lt;p&gt;Let's do one more test: After 100 compressions, how much time does it take?

&lt;ul&gt;
  &lt;li&gt;node.js: 560ms, one core used&lt;/li&gt;
  &lt;li&gt;Java 8u05: 1.5s, two cores used so about 3s cpu time&lt;/li&gt;
  &lt;li&gt;Java 8u45: 2s, three cores used so about 6s cpu time&lt;/li&gt;
  &lt;li&gt;Java 7: 17s - one core used&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Well, this isn't much of a game changer, but it show one thing: Java 8 takes its time to optimize its shit. The Java8u05 process went from 300% to 200% cpu at around iteration 55. Java8u45 went down to 200% CPU at iteration 140, getting the script done in around 1.3s but that was too late for the iteration 100 threshold. 

&lt;p&gt;Even after the 10th iteration, it continues to go faster. And after a while, it only takes two cores, not three. This is less bad for Java 8 than the previous one. Now Java is only 2.7 times slower than node and 5.4 times if you count CPU time. 

&lt;p&gt;Edit: Let's do one more test: After 1000 compressions, how much time does it take?

&lt;ul&gt;
  &lt;li&gt;node.js: 670ms, one core used&lt;/li&gt;
  &lt;li&gt;Java 8u05: 1.3s, 1.2 core used&lt;/li&gt;
  &lt;li&gt;Java 8u45: 1.1s, 1 core used&lt;/li&gt;
  &lt;li&gt;Java 7: 17s - one core used&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Yes, you read that correctly, node.js is going slower after 1000 iterations...

&lt;p&gt;Well, the least one can say it's that Java isn't fast... to become fast. The cpu consumption went from 200% to 120% at around iteration 155. My guess is that the extra cores used were due to the optimizer. It seems to be a heck of a lot of work.

&lt;p&gt;Well, now we can say that Java 8 warmed up is a bit less than 2 times slower than node. But it takes a hell of a lot of time to get there. That said, the result isn't bad at all, given all the resources Google did put in its V8 engine. Java is capable to execute JavaScript at a decent speed.

&lt;h2&gt;Wrap up&lt;/h2&gt;

&lt;div style="text-align:center"&gt;
&lt;img src="https://pieroxy.net/images/articles/nashorn_vs_java_numbers.o.png"&gt;
&lt;table class="tableau" style="margin:auto"&gt;&lt;tr&gt;&lt;td&gt;&lt;i&gt;seconds&lt;/i&gt;&lt;/td&gt;&lt;th&gt;Iteration 1&lt;/th&gt;&lt;th&gt;Iteration 10&lt;/th&gt;&lt;th&gt;Iteration 100&lt;/th&gt;&lt;th&gt;Iteration 1000&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;node.js&lt;/th&gt;&lt;td&gt;0.910&lt;/td&gt;&lt;td&gt;0.6&lt;/td&gt;&lt;td&gt;0.56&lt;/td&gt;&lt;td&gt;0.67&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;Java 8u05&lt;/th&gt;&lt;td&gt;22&lt;/td&gt;&lt;td&gt;3.6&lt;/td&gt;&lt;td&gt;1.5&lt;/td&gt;&lt;td&gt;1.3&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;Java 8u45&lt;/th&gt;&lt;td&gt;28&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;1.1&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;th&gt;Java 7&lt;/th&gt;&lt;td&gt;19&lt;/td&gt;&lt;td&gt;17&lt;/td&gt;&lt;td&gt;17&lt;/td&gt;&lt;td&gt;17&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;br&gt;After discarding all results above 5s (so discarding Java7 entirely) and discarding iterations above 200 (they don't seem to change anything but for node who keeps climbing a little to 670ms and then stabilizes), here are the numbers:&lt;br&gt;
&lt;img src="https://pieroxy.net/images/articles/nashorn_vs_java_numbers2.o.png"&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;
&lt;p&gt;I don't know about you, but for my server, I'd rather have a curve that does down than a curve that goes up like node. It would seem as if Java8u45 is longer to warm up but gives better results when warmed up. In the end, Java is 1.6x slower than node, so it can execute its share of JavaScript on the server side. Depending on what you need, it might do the trick. It has to warm up though before being that performant.

&lt;p&gt;The other thing I've learned is that if I want to minify my JavaScript on the fly, I'm going to need some sort of caching mechanism, because none of those run times gives me acceptable performance. This mitigates the 1.6x factor between Java8 and nodejs. 

&lt;p&gt;I've also learned that I'll need some sort of warmup at startup, not for my app, but for my &lt;i&gt;JVM&lt;/i&gt;. I mean, the first guy getting there will have to wait 22 seconds before getting its JavaScript served? No way, thankyouverymuch.

&lt;p&gt;I've tried a little playing with Java9 but it isn't really mature at this point so I won't disclose anything. Results are on par with Java 8u45. I strongly hope Oracle will pull their shit together and optimize this further.

&lt;p&gt;That is unless they decide to enforce their copyrights on the Java API in which case they'll have to license this JavaScript API from Netscape. It seems only fair. Then again, they'll have to get a license for SQL from IBM, or else they'll go out of business.

&lt;p&gt;Oracle, please spend less in lawyers that undermine your core business and more on engineers which will give a chance to your products. My $.02.

&lt;h2&gt;A final note on performance&lt;/h2&gt;
&lt;p&gt;This warmup that we have seen in the graph is a mix of the JVM warmup and Nashorn engine. But mostly, it is Nashorn. This means that if you create an engine every time you need to execute a script, you won't benefit from it. Here is the most simple way to create an engine:

&lt;div class="code"&gt;ScriptEngine engine = factory.getEngineByName("JavaScript");&lt;/div&gt;

&lt;p&gt;Well, those pesky &lt;span class="code"&gt;ScriptEngine&lt;/span&gt; objects created? Never discard them, or else you'll discard the entire optimizations with them.</content:encoded>
      <category domain="https://pieroxy.net/blog/categories/java/">Java</category>
      <category domain="https://pieroxy.net/blog/categories/javascript/">JavaScript</category>
      <category domain="https://pieroxy.net/blog/tags/benchmark/">benchmark</category>
      <category domain="https://pieroxy.net/blog/tags/comparison/">comparison</category>
      <category domain="https://pieroxy.net/blog/tags/java/">java</category>
      <category domain="https://pieroxy.net/blog/tags/javascript/">javascript</category>
      <category domain="https://pieroxy.net/blog/tags/nashorn/">nashorn</category>
      <category domain="https://pieroxy.net/blog/tags/node/">node</category>
      <category domain="https://pieroxy.net/blog/tags/nodejs/">nodejs</category>
      <category domain="https://pieroxy.net/blog/tags/performance/">performance</category>
      <category domain="https://pieroxy.net/blog/tags/v8/">v8</category>
      <category domain="https://pieroxy.net/blog/tags/web/">web</category>
      <pubDate>Mon, 29 Jun 2015 19:52:00 GMT</pubDate>
      <guid isPermaLink="false">tag:pieroxy.net,2015-06-29:pieroxy.net/1435607520000</guid>
      <dc:date>2015-06-29T19:52:00Z</dc:date>
    </item>
    <item>
      <title>Google: developers, developers, browsers !</title>
      <link>https://pieroxy.net/blog/2013/06/24/1372076640000.html</link>
      <content:encoded>&lt;p&gt;Is it possible that a single company be responsible for both the best browser out there along with the worst one?

&lt;p&gt;As it turns out, yes it is possible, and yes it does exist: Google.

&lt;p&gt;Since the first release of Chrome, it has become my browser of choice: Fast, fast, stable, fast, versatile, and the easiest to debug. I did not think about it for a minute. Plus, as a developer, it is one of the most advanced browsers and allow many cool things. All in all, kuddos for your browser there, good work.

&lt;p&gt;Then came Android, with a default browser also based on WebKit. I - among many - thought that it was a "mobilized" version of Chrome. But no, they did another browser altogether. Fine.

&lt;p&gt;Now, it isn't as fine as we hoped at the time. It seemed obvious - knowing Google - that their browser would kick ass. But no, it doesn't kick ass: it sucks. In fact, among friends we call it "The IE6 of WebKit". "The IE6" refers to the disabled child in the family. There is a surprisingly homogeneity in the WebKit browsers if you exclude Android's default browser. And once every 5 times, you do something that works on iOS, Chrome, Safari... and Android stumbles on it. 

&lt;p&gt;Now, it's been several loooong years for web developers, and still there are so many areas that lag behind all other mobile browsers... that I'm starting to lose hope. Really. Despair crawls into me day after day, week after week, month after month.

&lt;p&gt;So Google, pleeeeeeease, just give it the attention it needs, or replace it with Chrome, but pleeeeeeeease, do it fast. Seeing as 1/3 of the traffic from Android comes from version 2.3, we know one thing for sure: even when Google gets its act together on that front, it'll be quite a while for web developers to be able to forget this pain.

&lt;p&gt;Please. Act quickly.</content:encoded>
      <category domain="https://pieroxy.net/blog/categories/css/">CSS</category>
      <category domain="https://pieroxy.net/blog/categories/javascript/">JavaScript</category>
      <category domain="https://pieroxy.net/blog/categories/html/">html</category>
      <category domain="https://pieroxy.net/blog/categories/android/">Android</category>
      <category domain="https://pieroxy.net/blog/tags/android/">android</category>
      <category domain="https://pieroxy.net/blog/tags/browser/">browser</category>
      <category domain="https://pieroxy.net/blog/tags/chrome/">chrome</category>
      <category domain="https://pieroxy.net/blog/tags/css/">css</category>
      <category domain="https://pieroxy.net/blog/tags/html/">html</category>
      <category domain="https://pieroxy.net/blog/tags/javascript/">javascript</category>
      <category domain="https://pieroxy.net/blog/tags/web/">web</category>
      <pubDate>Mon, 24 Jun 2013 12:24:00 GMT</pubDate>
      <guid isPermaLink="false">tag:pieroxy.net,2013-06-24:pieroxy.net/1372076640000</guid>
      <dc:date>2013-06-24T12:24:00Z</dc:date>
    </item>
    <item>
      <title>Just released: color-finder</title>
      <link>https://pieroxy.net/blog/2013/06/20/1371745140000.html</link>
      <content:encoded>ColorFinder is a small javascript library that detects the main color in an image. The algorithm is simple and flexible. By the way of a callback method, you can influence the results by favoring certain types of colors. 

You can find it here: &lt;a class="longLink" href="https://pieroxy.net/blog/pages/color-finder/index.html"&gt;https://pieroxy.net/blog/pages/color-finder/index.html&lt;/a&gt;

You can also have a look at the &lt;a href="https://github.com/pieroxy/color-finder"&gt;GitHub repo&lt;/a&gt;.
&lt;br&gt;&lt;br&gt;</content:encoded>
      <category domain="https://pieroxy.net/blog/categories/javascript/">JavaScript</category>
      <category domain="https://pieroxy.net/blog/tags/color/">color</category>
      <category domain="https://pieroxy.net/blog/tags/dominant/">dominant</category>
      <category domain="https://pieroxy.net/blog/tags/finder/">finder</category>
      <category domain="https://pieroxy.net/blog/tags/image/">image</category>
      <category domain="https://pieroxy.net/blog/tags/javascript/">javascript</category>
      <category domain="https://pieroxy.net/blog/tags/web/">web</category>
      <pubDate>Thu, 20 Jun 2013 16:19:00 GMT</pubDate>
      <guid isPermaLink="false">tag:pieroxy.net,2013-06-20:pieroxy.net/1371745140000</guid>
      <dc:date>2013-06-20T16:19:00Z</dc:date>
    </item>
    <item>
      <title>lz-string: We'll try to make it faster</title>
      <link>https://pieroxy.net/blog/2013/05/21/1369124340000.html</link>
      <content:encoded>&lt;br&gt;
I've setup a &lt;a href="/blog/pages/lz-string/testing.html"&gt;small page&lt;/a&gt; where I share my findings in trying to optimize the implementation of &lt;span class="code"&gt;&lt;a href="https://pieroxy.net/blog/pages/lz-string/index.html"&gt;lz-string&lt;/a&gt;&lt;/span&gt;. This work will continue in the coming weeks. You can leave a comment in this blog entry for any feedback.
&lt;br&gt;&lt;br&gt;</content:encoded>
      <category domain="https://pieroxy.net/blog/categories/javascript/">JavaScript</category>
      <category domain="https://pieroxy.net/blog/tags/compression/">compression</category>
      <category domain="https://pieroxy.net/blog/tags/javascript/">javascript</category>
      <category domain="https://pieroxy.net/blog/tags/localstorage/">localstorage</category>
      <category domain="https://pieroxy.net/blog/tags/lzw/">lzw</category>
      <category domain="https://pieroxy.net/blog/tags/web/">web</category>
      <pubDate>Tue, 21 May 2013 08:19:00 GMT</pubDate>
      <guid isPermaLink="false">tag:pieroxy.net,2013-05-21:pieroxy.net/1369124340000</guid>
      <dc:date>2013-05-21T08:19:00Z</dc:date>
    </item>
    <item>
      <title>Just released: lz-string</title>
      <link>https://pieroxy.net/blog/2013/05/09/1368091620000.html</link>
      <content:encoded>&lt;span class="code"&gt;lz-string&lt;/span&gt; is a compression program for JavaScript in the browser, based on LZW. It is &lt;i&gt;fast&lt;/i&gt;, meant for localStorage or any other string-based storage in JavaScript, and is particularly efficient on short strings.
&lt;p&gt;All can be read on the home page: 
&lt;a class="longLink" href="https://pieroxy.net/blog/pages/lz-string/index.html"&gt;https://pieroxy.net/blog/pages/lz-string/index.html&lt;/a&gt;
And a demo can be found below for live compression:
&lt;a class="longLink" href="https://pieroxy.net/blog/pages/lz-string/demo.html"&gt;https://pieroxy.net/blog/pages/lz-string/demo.html&lt;/a&gt;</content:encoded>
      <category domain="https://pieroxy.net/blog/categories/news/">News</category>
      <category domain="https://pieroxy.net/blog/categories/javascript/">JavaScript</category>
      <category domain="https://pieroxy.net/blog/tags/compression/">compression</category>
      <category domain="https://pieroxy.net/blog/tags/gzip/">gzip</category>
      <category domain="https://pieroxy.net/blog/tags/javascript/">javascript</category>
      <category domain="https://pieroxy.net/blog/tags/localstorage/">localstorage</category>
      <category domain="https://pieroxy.net/blog/tags/lzma/">lzma</category>
      <category domain="https://pieroxy.net/blog/tags/lzw/">lzw</category>
      <category domain="https://pieroxy.net/blog/tags/news/">news</category>
      <category domain="https://pieroxy.net/blog/tags/web/">web</category>
      <pubDate>Thu, 09 May 2013 09:27:00 GMT</pubDate>
      <guid isPermaLink="false">tag:pieroxy.net,2013-05-09:pieroxy.net/1368091620000</guid>
      <dc:date>2013-05-09T09:27:00Z</dc:date>
    </item>
    <item>
      <title>How is my website doing?</title>
      <link>https://pieroxy.net/blog/2013/01/26/1359214440000.html</link>
      <content:encoded>&lt;h2&gt;How to monitor JavaScript exceptions&lt;/h2&gt;&lt;p&gt;It's a question that everyone with a website should have in mind all the time, and often a question that is pretty hard to answer. I mean, how do you know how your website is doing? You can open it up, but that says nothing of what it looks like to your users.
&lt;p&gt;For one, you can look into your server logs. Errors are usually logged in one or more files and this is a good place to start when checking the health of your website. That takes care of the server side of things. What about the front? How can you know if in that particular browser your website is not blowing up in JavaScript errors?
&lt;p&gt;Well, fortunately, you can trap JavaScript errors. All errors on a page. And then, you can call a specific URL on your server in order to log those errors. You may want to log the date, the User-Agent string along with it. 
&lt;p&gt;So, how does that work?&lt;p class="readMore"&gt;&lt;a href="https://pieroxy.net/blog/2013/01/26/1359214440000.html"&gt;Read more...&lt;/a&gt;&lt;/p&gt;</content:encoded>
      <category domain="https://pieroxy.net/blog/categories/java/">Java</category>
      <category domain="https://pieroxy.net/blog/categories/javascript/">JavaScript</category>
      <category domain="https://pieroxy.net/blog/tags/error/">error</category>
      <category domain="https://pieroxy.net/blog/tags/java/">java</category>
      <category domain="https://pieroxy.net/blog/tags/javascript/">javascript</category>
      <category domain="https://pieroxy.net/blog/tags/web/">web</category>
      <pubDate>Sat, 26 Jan 2013 15:34:00 GMT</pubDate>
      <guid isPermaLink="false">tag:pieroxy.net,2013-01-26:pieroxy.net/1359214440000</guid>
      <dc:date>2013-01-26T15:34:00Z</dc:date>
    </item>
    <item>
      <title>Programming in a browser</title>
      <link>https://pieroxy.net/blog/2012/11/19/1353396650988.html</link>
      <content:encoded>&lt;p&gt;From a developer's perspective, a web application (called a website back in the days) is made of two parts: The server side code and the client side code. 

&lt;p&gt;Writing a program for a web browser is something different than writing for a server. Most of the time, web developers do both as client-side programming is seldom enough to build a UI. Both programming are similar in many ways: You write loops, classes, functions, tests, etc. but they are also very different. This article tries to explain the fundamental differences and what it means for the developer.&lt;p class="readMore"&gt;&lt;a href="https://pieroxy.net/blog/2012/11/19/1353396650988.html"&gt;Read more...&lt;/a&gt;&lt;/p&gt;</content:encoded>
      <category domain="https://pieroxy.net/blog/categories/css/">CSS</category>
      <category domain="https://pieroxy.net/blog/categories/web-design/">Web Design</category>
      <category domain="https://pieroxy.net/blog/categories/javascript/">JavaScript</category>
      <category domain="https://pieroxy.net/blog/categories/html/">html</category>
      <category domain="https://pieroxy.net/blog/categories/general-rambling/">General rambling</category>
      <category domain="https://pieroxy.net/blog/tags/css/">css</category>
      <category domain="https://pieroxy.net/blog/tags/design/">design</category>
      <category domain="https://pieroxy.net/blog/tags/html/">html</category>
      <category domain="https://pieroxy.net/blog/tags/javascript/">javascript</category>
      <category domain="https://pieroxy.net/blog/tags/programming/">programming</category>
      <category domain="https://pieroxy.net/blog/tags/web/">web</category>
      <pubDate>Tue, 20 Nov 2012 07:30:50 GMT</pubDate>
      <guid isPermaLink="false">tag:pieroxy.net,2012-11-20:pieroxy.net/1353396650988</guid>
      <dc:date>2012-11-20T07:30:50Z</dc:date>
    </item>
    <item>
      <title>Drag and Drop in HTML5</title>
      <link>https://pieroxy.net/blog/2012/11/07/1352293260000.html</link>
      <content:encoded>You can find below a link to a very nice article on how to do Drag and Drop on all browsers out there. Very well written and comprehensible.

&lt;a class="longLink" href="http://weblogs.java.net/blog/manningpubs/archive/2012/10/29/natural-user-interaction-drag-and-drop"&gt;http://weblogs.java.net/blog/manningpubs/archive/2012/10/29/natural-user-interaction-drag-and-drop&lt;/a&gt;
&lt;p&gt;</content:encoded>
      <category domain="https://pieroxy.net/blog/categories/javascript/">JavaScript</category>
      <category domain="https://pieroxy.net/blog/categories/html/">html</category>
      <category domain="https://pieroxy.net/blog/tags/html/">html</category>
      <category domain="https://pieroxy.net/blog/tags/javascript/">javascript</category>
      <category domain="https://pieroxy.net/blog/tags/web/">web</category>
      <pubDate>Wed, 07 Nov 2012 13:01:00 GMT</pubDate>
      <guid isPermaLink="false">tag:pieroxy.net,2012-11-07:pieroxy.net/1352293260000</guid>
      <dc:date>2012-11-07T13:01:00Z</dc:date>
    </item>
    <item>
      <title>WebPlatform.org</title>
      <link>https://pieroxy.net/blog/2012/10/08/1349759700000.html</link>
      <content:encoded>&lt;h2&gt;the ultimate resource for Web technologies?&lt;/h2&gt;&lt;p&gt;It most certainly looks like it's the intent. The major contributors behind the website do add some credibility to the claim: W3C, Google, mozilla, Microsoft, Opera, Apple, Adobe, facebook, HP, NOKIA. Well... that's ... impressive. &lt;a href="webplatform.org"&gt;Go and take a look for yourself.&lt;/a&gt;
&lt;blockquote&gt;&lt;p&gt; The goal of this site is to be the place to come for answers to your trickiest (and simplest) development and design questions about the Open Web Platform.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="https://pieroxy.net/blog/2012/10/08/webplatform_org_the_ultimate_resource_for_web_technologies.html"&gt;More after the break.&lt;/a&gt;&lt;p class="readMore"&gt;&lt;a href="https://pieroxy.net/blog/2012/10/08/1349759700000.html"&gt;Read more...&lt;/a&gt;&lt;/p&gt;</content:encoded>
      <category domain="https://pieroxy.net/blog/categories/css/">CSS</category>
      <category domain="https://pieroxy.net/blog/categories/javascript/">JavaScript</category>
      <category domain="https://pieroxy.net/blog/categories/html/">html</category>
      <category domain="https://pieroxy.net/blog/tags/css/">css</category>
      <category domain="https://pieroxy.net/blog/tags/html/">html</category>
      <category domain="https://pieroxy.net/blog/tags/javascript/">javascript</category>
      <category domain="https://pieroxy.net/blog/tags/reference/">reference</category>
      <category domain="https://pieroxy.net/blog/tags/web/">web</category>
      <pubDate>Tue, 09 Oct 2012 05:15:00 GMT</pubDate>
      <guid isPermaLink="false">tag:pieroxy.net,2012-10-09:pieroxy.net/1349759700000</guid>
      <dc:date>2012-10-09T05:15:00Z</dc:date>
    </item>
  </channel>
</rss>

