Profile

Cover photo
Stephane Gallès
39,021 views
AboutPosts+1's

Stream

Stephane Gallès

Shared publicly  - 
 
 
Simulating network slowness, request delay, etc.

Writing Web components, sometime I have to show a spinner (or other hints) to indicate loading of data (via Ajax). This is usually done by adding a class when loading and removing it when data come.
But to test this can be hard if the server is quite fast and the payload is small.
In the past, I just added a sleep() call in the server, to have time to see the changes in action. But it might not be always possible or convenient.
I just found out a useful little application (for Windows) able to delay (or throttle, etc.) a request, up to 3 seconds: Clumsy is an open-source software, small, without install, and doing well its job.

http://jagt.github.io/clumsy/index.html
clumsy makes your network condition on Windows significantly worse, but in a managed and interactive manner. Introduction. Leveraging the awesome WinDivert library, clumsy stops living network packets and capture them, lag/drop/tamper/.. the packets on demand, then send them away.
View original post
2
Add a comment...

Stephane Gallès

Shared publicly  - 
 
 
Thoughts on the process of learning software development. Being individually good is still only part of the equation. To really get big stuff done, you need a coherent team, which requires its own separate curve. That's why I prefer to find great people and work with them over many years; when everyone knows each other's strengths, weaknesses, preferences, etc. and can finish each other's sentences, then things get really fun. You can move together like a school of fish with very little "management". Coding fish.
What every beginner absolutely needs to know about the journey ahead
7 comments on original post
1
Add a comment...
 
 
Functional Programming With Ceylon
Functional Programming has permeated the programming language landscape in the last ten years, usurping and in some cases obsoleting the principles of object oriented programming.  Pure functional languages such as Haskell, Clojure, F# and OCaml have gained...
4 comments on original post
1
Add a comment...

Stephane Gallès

Shared publicly  - 
 
Maîtrisez enfin l'une des commandes les plus mal utilisées de Git : git-rebase.
1
Add a comment...
 
 
A successful invention is one that's widely copied. Reading over this summary of the new language features of #Typescript 1.4, it's impossible to not be struck by how much Typescript is borrowing directly from #Ceylon . When news about the Ceylon project first leaked out, the project was widely ridiculed, with one journalist describing Ceylon as "tempest in a teapot". I felt more than a bit exposed, and was forced to deeply question whether this project was really worth sticking with. The support of +Mark Little, +Stéphane Épardaud, and +Tako Schotanus convinced me to keep going. Now, we have friendly, quickly-growing, community, and other languages, starting with Kotlin, and now also Typescript, Flow, Crystal, Dart, and even Python all borrowing some of our ideas, and I feel a rather deep sense of vindication. Thanks everyone for your support over the last few years! #AllIsProceedingAsIHaveForseen  
8 comments on original post
1
Add a comment...
 
 
Two years ago, JavaScript was ablaze in its own Renaissance, fuelled by a move towards more modern, more standardized browsers (i.e. not Internet Explorer) and the discovery of Node.js as a technology for powering front end build tools. All manner of new technologies came forth. As little as twelve months ago is seemed a fait accompli that the modern web would be dominated by Backbone.js (maybe using Marionette), with Grunt as a task runner, Require.js and Handlebars-based templating. Yet six months later, these technologies had all apparently been replaced, if the blogosphere was anything to go by – now, it was all about Angular, Gulp and Browserify. And then suddenly this stack seems questionable too.

Innovation is great, but this kind of churn rate seems excessive. It’s just not possible for developers to make large, upfront investments of time in getting to grips with new frameworks and technologies when there’s no guarantee of their longevity. Programmers want to program – they want to build things, and be masters of their craft. But how can we get anything done when we’re spending most of our time learning? How can we feel like craftsmen when we’re scrabbling in the dark with unfamilar tech?

Once, corporate sponsorship or the backing of a large organization might have provided a beacon. We could look at a framework built by Google, Adobe or Microsoft, and believe that their support meant a long lifespan and careful stewardship. After the crises of Flex and Silverlight, that time is past.

It’s not just the prospect of our tools being deprecated that’s worrying, though. It’s the idea that we might make the wrong bet; get in bed with a technology only to discover that something new and substantially better is coming over the horizon. If it’s now ‘obviously’ a non-starter to use Grunt, or Backbone, or Require, who’s to say that it won’t be ‘obviously’ a non-starter to use whatever tech we’re considering today six months’ down the line?

[...]

By using small libraries – components with a dedicated purpose and a small surface area – it becomes possible to pick and mix, to swap parts of our front end stack out if and when they are superceded. New projects can replace only the parts that matter, whilst core functionality whose designs are settled – routing APIs, say – can stay exactly the same between the years.

Libraries stop being an all-or-nothing proposition. What if you like Angular’s inversion of control containers, but hate its data binding? No problem – you can just choose what you like from NPM and get going right away. You can move your legacy projects (read: the ones that make your employer money) to new technologies incrementally, rather than rewriting everything, providing you stick to good practices and wrap those libraries carefully.

http://www.breck-mckye.com/blog/2014/12/the-state-of-javascript-in-2015/
The JavaScript world seems to be entering a crisis of churn rate. Frameworks and technologies are being pushed out and burned through at an …
View original post
2
1
JP Belanger's profile photo
Add a comment...

Stephane Gallès

Shared publicly  - 
 
 
Sometimes there are these moments of truth. They happen completely unexpectedly, such as when I read this tweet: Good discussion of Facebook Flow – http://t.co/5KTKakDB0w — David J. Pearce (@whileydave) November 23, 2014 David is the author of the…
View original post
2
Add a comment...
1
Philippe Lhoste's profile photo
 
Very interesting. I wonder if JVM-based languages rely on this sort, too... :-)
Add a comment...

Stephane Gallès

Shared publicly  - 
 
Short. Unexpected. Powerful.
3
Add a comment...
 
Wow, just wow. And wow again.
 
Quake 1 rendered on a Hitachi V-422 oscilloscope.

That's freaking awesome.
A summary of some problems I faced when tinkering with Quake to get it play nicely on an oscilloscope. After seeing some cool clips like this mushroom thing and of course Youscope, playing Quake on a scope seemed like a great idea. It ticks all the marks that make me happy: low-poly, ...
View original post
3
Arnold Maestre's profile photoStephane Gallès's profile photo
2 comments
 
Yeah +Arnold Maestre. I don't even know what suprises me most here : is it that someone managed to make this work ? Or is it that someone started to work on this thinking that this could work eventually....amazing...
Add a comment...

Stephane Gallès

Shared publicly  - 
 
Ceylon fibonaccIterable with Curry+Let+Destructuring.

value fiboLoop = curry(loop<Integer[2]>)([0,1]);
{Integer[2]+} fibonaccIterable =
   fiboLoop((pair) => let([current, next] = pair) [next, current+next] );
printAll(fibonaccIterable.take(100)*.first);
Ceylon fibonaccIterable with Curry+Let+Destructuring - Gist is a simple way to share snippets of text and code with others.
2
Enrique Zamudio's profile photoStephane Gallès's profile photoGavin King's profile photo
5 comments
 
Add a comment...

Stephane Gallès

Shared publicly  - 
 
three.js library + Ceylon JS interop = Ceylon doing 3D in your browser.
https://github.com/sgalles/ceylon-webgl
 
3
5
Enrique Zamudio's profile photoJacob Hookom's profile photo
Add a comment...
People
Links
Basic Information
Gender
Male
Stephane Gallès's +1's are the things they like, agree with, or want to recommend.
Declarative transactions, DI, and AOP - Google Groupes
groups.google.com

Declarative transactions, DI, and AOP, John Vasileff, 20/01/15 10:59. I had some success making a small buzzword compliant proof of concept

Ant build tasks in ceylon-dist - Google Groupes
groups.google.com

Ant build tasks in ceylon-dist, Tako Schotanus, 16/01/15 03:46. Hi people,. I don't know if anyone noticed, but I added aliases for "status-

xkcd: Forgot Algebra
xkcd.com

XKCD updates every Monday, Wednesday, and Friday. You can get prints, posters, and t-shirts in the store. Forgot Algebra. |&lt; · &lt; Prev

Google Authenticator
market.android.com

Enable 2-step verification to protect your account from hijacking. Google Authenticator generates 2-step verification codes on your phone. W

GIMP - Sketch Effect
www.gimp.org

1. High pass filtering. High pass filtering means that we filter away the low frequencies of something, and let the high frequency bands pas

Never certain :: Building Android Apps with Scala - IntelliJ
nevercertain.com

Building Android Apps with Scala - IntelliJ. by: James Brechtel | posted: February 18th, 2011. note to the reader This is the third in a ser

Exploring Android - Stephane's Homepage
lamp.epfl.ch

This page is about developing Android applications written in the Scala programming language. Our objectives are primarly to share our perso

Simplify Native Code Access with JNA | Java.net
today.java.net

Contents; JNA Development First Steps; A Proxy for the DLL; Linkage: What&#39;s in a Name? Parameter and Return Types; C structs in Java; Po

Transforming an XML Tree with Scala Partial Functions | Java.net
weblogs.java.net

Transforming an XML Tree with Scala Partial Functions. Posted by cayhorstmann on May 16, 2010 at 11:29 PM EDT. In my last blog, I outlined h

scala - Revision 25583: /scala/trunk/src/compiler/scala/tools/nsc/interp...
lampsvn.epfl.ch

scala - Revision 25583: /scala/trunk/src/compiler/scala/tools/nsc/interpreter .. AbstractFileClassLoader.scala; AbstractOrMissingHandler.sca

Ruminations of a Programmer: Towards generic APIs for the open world
debasishg.blogspot.com

Towards generic APIs for the open world. In my last post on how Clojure protocols encourage open abstractions, I did some quick rounds betwe

A change in typing philosophy, indicated by Scala type classes
cognitiveentity.wordpress.com

This discussion provides a clear and useful discussion of how Scala type classes might be used. The code requires that a type be specifie

Sideways Coding: Introduction to type classes in Scala in 5 minutes
www.sidewayscoding.com

Introduction to type classes in Scala in 5 minutes. The aim of this short blog post is to give you enough information about type classes (in

Daily scala: By-name-parameter to Function
daily-scala.blogspot.com

By-name-parameter to Function. Today&#39;s topic is related to Defining Custom Control Structures. By name parameters are not function objec

Google+ Tips and Tricks
janetfouts.com

This post is meant to be a getting started guide for those of us who got an invite and are now wondering how to use Google+ .  If you're loo

Jim McBeath: Scala Parser Combinators
jim-mcbeath.blogspot.com

Scala Parser Combinators. One of the reasons I chose to do my StringArt applet as my first Scala applet was because Scala includes a nifty c

Tip: Namespaces and versioning
www.ibm.com

You can use several techniques for versioning XML schemas, such as defining special root attributes or using the DTD. This tip discusses how

Chapter 18. Application servers and environments supported by Weld
docs.jboss.org

Chapter 18. Application servers and environments supported by Weld. 18.1. Using Weld with JBoss AS: 18.2. GlassFish: 18.3. Servlet container