<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1879184084422595552</id><updated>2024-11-01T10:02:20.490+01:00</updated><category term="clojure"/><category term="clojurescript"/><category term="facestorm"/><category term="computer vision"/><title type='text'>SUPREMATIC - BLOG</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.suprematic.net/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1879184084422595552/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://blog.suprematic.net/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/08579395836469964819</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>5</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1879184084422595552.post-920659127150755561</id><published>2014-05-12T20:31:00.002+02:00</published><updated>2014-05-13T11:55:12.946+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="computer vision"/><category scheme="http://www.blogger.com/atom/ns#" term="facestorm"/><title type='text'>Binary classification performance</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
It is a frequent task to decide if specific object belongs to one of two classes. This task is called &lt;b&gt;binary classification&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
For example if we want to implement face detection (FD) algorithm we will first split image into number of fragments. After that we perform binary classification for each of them. Such classification will decide to which class (face / non-face) each fragment belongs to.&lt;br /&gt;
&lt;br /&gt;
It seems to be a trivial task for humans, but for computer it&#39;s not so easy. So, if we want to achieve good results - it is very important to measure performance of our classification algorithm.&lt;br /&gt;
&lt;br /&gt;
Let&#39;s agree that our binary classifier gives &lt;b&gt;positive&lt;/b&gt; result if it believes that given fragment is a face and &lt;b&gt;negative&lt;/b&gt;, if given fragment is not a face.&lt;br /&gt;
&lt;br /&gt;
From the performance point of view, every classification attempt can produce one of four outcomes:&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;&lt;b&gt;true positive&lt;/b&gt; - fragment is a face and classification result is positive&lt;/li&gt;
&lt;li&gt;&lt;b&gt;false positive&lt;/b&gt; &amp;nbsp;(or Type I error) - fragment is not a face but classification result is positive.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;true negative&lt;/b&gt; - fragment is not a face and classification result is negative&lt;/li&gt;
&lt;li&gt;&lt;b&gt;false negative&lt;/b&gt; (or Type II error) - fragment is a face and classification result is negative&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
Visually it can be represented as a &lt;b&gt;confusion matrix:&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjirHsq6aEaO6sXTcSCoXkkSH_UBXkpMXRSfK1z928_2ZMfyv4c_yxjPqv1lpz9gY5PD-TObOBl9H6CH_66f471uMQjD_lCBNENAm7lPu8X5iucM8iuDzD2bU0aDJZQggGh3eqIHeVcqIU/s1600/Confusion+Matrix.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjirHsq6aEaO6sXTcSCoXkkSH_UBXkpMXRSfK1z928_2ZMfyv4c_yxjPqv1lpz9gY5PD-TObOBl9H6CH_66f471uMQjD_lCBNENAm7lPu8X5iucM8iuDzD2bU0aDJZQggGh3eqIHeVcqIU/s1600/Confusion+Matrix.png&quot; height=&quot;200&quot; style=&quot;border: none;&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;b&gt;&lt;br /&gt;&lt;/b&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
Let&#39;s define &lt;b&gt;TP&lt;/b&gt;, &lt;b&gt;FP&lt;/b&gt;, &lt;b&gt;TN&lt;/b&gt; and &lt;b&gt;FN&lt;/b&gt; as a total number of true positive, false positive, true negative and false negative classification outcomes, correspondingly.&lt;br /&gt;
&lt;br /&gt;
Having this 4 variables we can define following equations:&lt;br /&gt;
&lt;br /&gt;
True positive rate (Recall):&lt;br /&gt;
&amp;nbsp; &amp;nbsp; TPR = TP / (TP + FN)&lt;br /&gt;
&lt;br /&gt;
True negative rate (&lt;span style=&quot;background-color: white; color: #252525; font-family: sans-serif; font-size: 14px; line-height: 22.399999618530273px;&quot;&gt;Specificity&lt;/span&gt;&lt;b style=&quot;background-color: white; color: #252525; font-family: sans-serif; font-size: 14px; line-height: 22.399999618530273px;&quot;&gt;)&lt;/b&gt;:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; TNR = TN / (TN / FP)&lt;br /&gt;
&lt;br /&gt;
Concept behind them is very simple - &lt;b&gt;TPR&lt;/b&gt; tells how well our classification algorithm can pick real human faces and &lt;b&gt;TNR&lt;/b&gt; says how resistant is our algorithm to fragments which are not faces.&lt;br /&gt;
&lt;br /&gt;
In the next blog entry I will write about &lt;b&gt;ROC curve&lt;/b&gt;, and how it can be used to tune binary classification algorithm performance.&lt;/div&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://blog.suprematic.net/feeds/920659127150755561/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.suprematic.net/2014/05/binary-classification-performance.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1879184084422595552/posts/default/920659127150755561'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1879184084422595552/posts/default/920659127150755561'/><link rel='alternate' type='text/html' href='http://blog.suprematic.net/2014/05/binary-classification-performance.html' title='Binary classification performance'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/08579395836469964819</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjirHsq6aEaO6sXTcSCoXkkSH_UBXkpMXRSfK1z928_2ZMfyv4c_yxjPqv1lpz9gY5PD-TObOBl9H6CH_66f471uMQjD_lCBNENAm7lPu8X5iucM8iuDzD2bU0aDJZQggGh3eqIHeVcqIU/s72-c/Confusion+Matrix.png" height="72" width="72"/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1879184084422595552.post-7473285316067258488</id><published>2014-04-30T19:26:00.001+02:00</published><updated>2014-04-30T19:43:00.434+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="facestorm"/><title type='text'>FaceStorm Announcement</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
After almost two years of joint work &lt;a href=&quot;http://www.suprematic.net/&quot;&gt;SUPREMATIC&lt;/a&gt; and &lt;a href=&quot;http://smilart.com/&quot;&gt;Smilart&lt;/a&gt; are proud to announce &lt;a href=&quot;http://facestorm.suprematic.net/&quot;&gt;FaceStorm&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
FaceStorm is platform, which uses facial recognition algorithms to reliably identify humans in cooperative and non-cooperative real-time scenarios.&lt;br /&gt;
&lt;br /&gt;
With FaceStorm we able to match single face against gallery of &lt;b&gt;10,000 faces in about 80ms&lt;/b&gt;, using single, consumer grade, GPU accelerator.&lt;br /&gt;
&lt;br /&gt;
Behind the scenes FaceStorm uses OSGi as a modularization technology, AMQP (RabbitMQ) for messaging, ZooKeeper for cluster coordination and MongoDB as a database. We also use CUDA for parallel computations.&lt;br /&gt;
&lt;br /&gt;
FaceStorm uses our internally developed algorithms, which are able to robustly identify faces and be tolerant to natural and artificial distortions.&lt;br /&gt;
&lt;br /&gt;
Images below are examples of faces acquired from the camera (left) which has been properly matched against gallery portraits (right).&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_B56lY6qF87U7BASyXRP-vsjpGX7AHR9JfbWalMJMZG-MP1DILDUSupDaV84GSNqbvAaUFNTLJcUBcIH64hRUU9frF0TpfX_w0IscFXrNR9EpysCxWvkVdXG9ZrhJb9u-OlTFbVtUsMW3/s1600/face1_small.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_B56lY6qF87U7BASyXRP-vsjpGX7AHR9JfbWalMJMZG-MP1DILDUSupDaV84GSNqbvAaUFNTLJcUBcIH64hRUU9frF0TpfX_w0IscFXrNR9EpysCxWvkVdXG9ZrhJb9u-OlTFbVtUsMW3/s1600/face1_small.png&quot; height=&quot;156&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsFtT1bZEiS4Lk721Fu8XjRYlF7cIoi-XB6fu_B-JVavnm6Ru8eVllUwzUItFx7cLXwToyxR6KH2pVw5xW3aci_9imrbrFV6YtPgOQVuWg3yUJQwHYxkh-awodrchf6H13Xw184_z4hiJ2/s1600/face3_small.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsFtT1bZEiS4Lk721Fu8XjRYlF7cIoi-XB6fu_B-JVavnm6Ru8eVllUwzUItFx7cLXwToyxR6KH2pVw5xW3aci_9imrbrFV6YtPgOQVuWg3yUJQwHYxkh-awodrchf6H13Xw184_z4hiJ2/s1600/face3_small.png&quot; height=&quot;156&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLyqxraPhSY4_wpkwiL61p5Fuf_rFMB9lGC5Ww0eyHs6jysgzlgwJwbqlaXfVSaULCp5uFgzDf5L8VGdaJjrlm0RmhYopJqNOSBJ0Zvv4AXSv_BliFYIaeipNgv76lANKnPO5LhszYOpt9/s1600/face4_small.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLyqxraPhSY4_wpkwiL61p5Fuf_rFMB9lGC5Ww0eyHs6jysgzlgwJwbqlaXfVSaULCp5uFgzDf5L8VGdaJjrlm0RmhYopJqNOSBJ0Zvv4AXSv_BliFYIaeipNgv76lANKnPO5LhszYOpt9/s1600/face4_small.png&quot; height=&quot;156&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZ_ytQwtzIWOIbYdUUXms2S8R39ZRbqvnJ_UDnhmT3cLbeZamr9IUZAYs2kvehzg4l0Z2Rl-1Nql_d_GbwXOUMzEyRSQAbbHD4zUc7mRL8Gtx9lSqrG6i191L6EuqFFpnUMszXMI5J3gQI/s1600/face5_small.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZ_ytQwtzIWOIbYdUUXms2S8R39ZRbqvnJ_UDnhmT3cLbeZamr9IUZAYs2kvehzg4l0Z2Rl-1Nql_d_GbwXOUMzEyRSQAbbHD4zUc7mRL8Gtx9lSqrG6i191L6EuqFFpnUMszXMI5J3gQI/s1600/face5_small.png&quot; height=&quot;156&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://blog.suprematic.net/feeds/7473285316067258488/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.suprematic.net/2014/04/facestorm-announcement.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1879184084422595552/posts/default/7473285316067258488'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1879184084422595552/posts/default/7473285316067258488'/><link rel='alternate' type='text/html' href='http://blog.suprematic.net/2014/04/facestorm-announcement.html' title='FaceStorm Announcement'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/08579395836469964819</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_B56lY6qF87U7BASyXRP-vsjpGX7AHR9JfbWalMJMZG-MP1DILDUSupDaV84GSNqbvAaUFNTLJcUBcIH64hRUU9frF0TpfX_w0IscFXrNR9EpysCxWvkVdXG9ZrhJb9u-OlTFbVtUsMW3/s72-c/face1_small.png" height="72" width="72"/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1879184084422595552.post-5265878276537359427</id><published>2014-03-03T16:11:00.001+01:00</published><updated>2014-03-03T16:11:30.520+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="clojure"/><category scheme="http://www.blogger.com/atom/ns#" term="clojurescript"/><title type='text'>New version of Chrome DevTools REPL 1.5.1</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Chrome DevTools REPL for ClojureScript version 1.5.1 is now released to Chrome Store. &amp;nbsp;It&#39;s biggest new feature is ability to inject &amp;nbsp;&lt;i&gt;cljs.core&lt;/i&gt; into pages not containing it. &amp;nbsp;It means that it is possible to use REPL against pages which were not developed in ClojureScript.&lt;br /&gt;
&lt;br /&gt;
PS&lt;br /&gt;
&amp;nbsp; it may take up to 60 minutes for the update to become available&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://blog.suprematic.net/feeds/5265878276537359427/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.suprematic.net/2014/03/new-version-of-chrome-devtools-repl-151.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1879184084422595552/posts/default/5265878276537359427'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1879184084422595552/posts/default/5265878276537359427'/><link rel='alternate' type='text/html' href='http://blog.suprematic.net/2014/03/new-version-of-chrome-devtools-repl-151.html' title='New version of Chrome DevTools REPL 1.5.1'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/08579395836469964819</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1879184084422595552.post-7767189372202913556</id><published>2014-02-26T19:01:00.000+01:00</published><updated>2014-02-27T15:08:09.545+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="clojure"/><category scheme="http://www.blogger.com/atom/ns#" term="clojurescript"/><title type='text'>Chrome DevTools REPL for ClojureScript source code is out.</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
After major refactoring and clean-up source code for the REPL extension is pushed to GitHub &lt;a href=&quot;https://github.com/suprematic/cdtrepl.extension&quot; target=&quot;_blank&quot;&gt;repository&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
For UI rendering it uses &lt;a href=&quot;https://github.com/holmsand/reagent&quot; target=&quot;_blank&quot;&gt;reagent&lt;/a&gt; - a very simple ClojureScript interface to Facebook&#39;s &lt;a href=&quot;http://facebook.github.io/react/&quot; target=&quot;_blank&quot;&gt;react&lt;/a&gt; framework. Also, it heavily relies on &lt;a href=&quot;https://github.com/clojure/core.async&quot;&gt;core.async&lt;/a&gt; - it plays very well with asynchronous nature of Chrome DevTools API.&lt;br /&gt;
&lt;br /&gt;
If you want to do some hacking with the code - simply run&lt;i&gt; &#39;lein cljsbuild auto&#39;&amp;nbsp;&lt;/i&gt; to get everything compiled. After that open &lt;i&gt;extension/repl.html file&amp;nbsp;&lt;/i&gt;in your browser - it should work as a usual web page as well, and evaluation will target the page itself.&lt;br /&gt;
&lt;br /&gt;
Alternatively, you can add &lt;i&gt;extension/&lt;/i&gt; directory as &quot;unpacked extension&quot; from the&amp;nbsp;&lt;i&gt;chrome://extensions/&lt;/i&gt; page. Don&#39;t forget to enable developer mode, with the check box in the upper right part.&lt;br /&gt;
&lt;br /&gt;
If you want extension to work with local files (URLs starting with file://) - you should also enable &quot;Allow access to file URLs option&quot;.&lt;br /&gt;
&lt;br /&gt;
If you make any changes - don&#39;t forget to reload the extension (under chrome://extensions/) page and close and re-open Chrome DevTools.&lt;br /&gt;
&lt;br /&gt;
Server side code will follow very soon.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://blog.suprematic.net/feeds/7767189372202913556/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.suprematic.net/2014/02/chrome-devtools-repl-for-clojurescript_26.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1879184084422595552/posts/default/7767189372202913556'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1879184084422595552/posts/default/7767189372202913556'/><link rel='alternate' type='text/html' href='http://blog.suprematic.net/2014/02/chrome-devtools-repl-for-clojurescript_26.html' title='Chrome DevTools REPL for ClojureScript source code is out.'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/08579395836469964819</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1879184084422595552.post-5448726855694389435</id><published>2014-02-24T18:42:00.000+01:00</published><updated>2014-02-24T18:54:56.559+01:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="clojure"/><category scheme="http://www.blogger.com/atom/ns#" term="clojurescript"/><title type='text'>Chrome DevTools REPL for ClojureScript</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Initial version for Chrome DevTools (CDT) &lt;a href=&quot;https://chrome.google.com/webstore/detail/clojurescript-repl/lmjjlapjpjeodaadkljnmdfbjpfddchm&quot; target=&quot;_blank&quot;&gt;REPL for ClojureScript&lt;/a&gt;&amp;nbsp;is now available at the Chrome Web Store. You can now freely install it&amp;nbsp;into your Chrome browser.&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMAjf85YoXeZoIPr08llID-Cf_4-ljQamcN9viij927sXzUcLmP8YSJSDHy7AAqj45kroKs04qt6-qXdhD8S9E_29F1R-SimJMQtFtWG684tYOjCR2JGD5juBqjZmmj9IiDIHDGN7AFxJd/s1600/cdtrepl_screenshot1.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMAjf85YoXeZoIPr08llID-Cf_4-ljQamcN9viij927sXzUcLmP8YSJSDHy7AAqj45kroKs04qt6-qXdhD8S9E_29F1R-SimJMQtFtWG684tYOjCR2JGD5juBqjZmmj9IiDIHDGN7AFxJd/s1600/cdtrepl_screenshot1.png&quot; height=&quot;267&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
Right now it uses ClojureScript to JavaScript compiler, hosted at Heroku. In the upcoming versions it will be possible to change it, and, of course, run compiler locally.&lt;br /&gt;
&lt;br /&gt;
Out of obvious reasons REPL will only work on pages which contain un-optimized JavaScript code.&lt;br /&gt;
&lt;br /&gt;
Extension source code and it&#39;s server counterpart will be placed on GitHub in the next days, once they will become more mature.&lt;br /&gt;
&lt;br /&gt;
Future plans and ideas:&lt;br /&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;improved error reporting&lt;/li&gt;
&lt;li&gt;completion and syntax highlighting&lt;/li&gt;
&lt;li&gt;possibility to inject cljs.core into inspected page, which does not contain it&lt;/li&gt;
&lt;li&gt;deeper integration with Chrome DevTools code editor&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
All &amp;nbsp;feedback and comments are welcome and highly appreciated.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://blog.suprematic.net/feeds/5448726855694389435/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.suprematic.net/2014/02/chrome-devtools-repl-for-clojurescript.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1879184084422595552/posts/default/5448726855694389435'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1879184084422595552/posts/default/5448726855694389435'/><link rel='alternate' type='text/html' href='http://blog.suprematic.net/2014/02/chrome-devtools-repl-for-clojurescript.html' title='Chrome DevTools REPL for ClojureScript'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/08579395836469964819</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMAjf85YoXeZoIPr08llID-Cf_4-ljQamcN9viij927sXzUcLmP8YSJSDHy7AAqj45kroKs04qt6-qXdhD8S9E_29F1R-SimJMQtFtWG684tYOjCR2JGD5juBqjZmmj9IiDIHDGN7AFxJd/s72-c/cdtrepl_screenshot1.png" height="72" width="72"/><thr:total>4</thr:total></entry></feed>