28 Nov 2011I've just stumbled upon that weird behavior when force casting the return of a function to an object. The PHP result was not what I expected.
$a = null;
echo empty($a) ? "Yes, I'm empty" : "You should not see this"
This is pretty straighforward code. Now, we test it with an object.
$a = (object) null;
echo empty($a) ? "Yes, I'm empty" : "You should not see this but, actually, you do."
Note that it even gets weirder when (object) false
and (object) true
become objects with a key scalar
, set to false
This is one of the little things that make me want to ditch PHP for a better language.
24 Nov 2011For the past month or so, I've attended quite a bunch of dev and web events, here in Paris.
Every time I get back from one, I wanted to post something about it. But I never did, as I always seems to have something more important to do. That's quite a shame, because those events were (for the most part) really interesting, some were even really motivating.
So, expect a full blog post on each of them in the coming days. For the time being, here is just an overview.
Paris Web is THE french web event. Two days of conferences about the web, not too technical, but very practical. Here we speak equally about the "why" than about the "how". Very great speakers, team and place. The third day is for workshops, in smaller groups.
Then comes Paris JS, held each month. It's an evening of informal talks about Javascript, a few speakers will demo an app, a framework, or talk about anything JS related. Very great to meet interesting JS fellows, and exchange about frameworks and projects.
Paris Hacker is an other informal event, where everyone is free to speak about any hacky/geeky subject. Most of the time we review the last Hacker news posts and discuss them, talk about incoming events, and so on. There almost no trolling. Most of the time.
JsGuru is a completly different kind of event. This one is a one-day Javascript formation. It costs real money this time, but you got to learn a few tricks and get your started on some frameworks and libraries like Backbone, Mustache, Lawnchair, etc.
And the final one is the Hack Day Paris. Partially organized by the same team as Paris Hacker, it was a 40hrs hackathon, with no constraint except to "build something brilliant". More than 180 fellow geeks attended, and 43 projects were finally demoed on stage. This was one of the most motivating experience I ever did.
A few days after the Hack Day, an other event was held by SFR were all the Hack Day participants were invited. Along with participant from two other events (Designer Weekend and Museomix), the goal was to help all those people to meet, and to showcase some of SFR latest innovation. This is clearly the event that I liked less.
24 Nov 2011In October, I was attending the Paris Web event. For those that haven't heard of it, it is THE french web event, two days of conference on various subjects web related. It is language agnostic and talks range a very broad list of topics from accessibility, open data, security, performance, UX, UI, html5, etc.
I've attended 16 talks in the course of the event, plus a full day of workshops. I would need far more than a single post to write down everything I learn from those days, both technical and human. I really love Paris Web for those moments where you start to chat with other peoples as passionate as you are.
Here, I'll only focus on a specific subject that everyone cared about : Accessibility.
Know your audience
Accessibility was discussed at length, as it always is the case in Paris Web. It is one of the values held by Paris Web that I also hold dear. My only regret is that it feels like everyone in Paris Web attendee were already familiar with it, had implemented at least the basic good practices, that we all were already convinced of why it is good. I kind of feel that were not the right public, that the speech was wasted on us as we already were convinced.
We, as web professional, are aware of the accessibility concerns. Big groups and public websites are aware of it too. But the middle ground of small companies do not care. "This is not our target", "Spending 40% more for 10% of users ? No way", "We are not big enough", are answers I've often heard when trying to explain to clients why I cared about aspects of their projects they didn't even see.
Continuous integration
Laurent Denis and Elie Sloïm told us that accessibility should not be thought as the last part of a project, the one we do the day before launch. It has to be taken into account for the very start of the project, in the conception phase, and not at the end, as a correction phase.
Every person ever included in the project should be at least aware of the accessibility concern, this is not the work of one man alone. Accessibility experts are not people you can hire to fix your website once it's done. They should be requestd during all the conception phase.
No one ever read the 100 page accessibility audit. No one wants to be told at the end of the project that what they did is wrong and that they should start everything over from scratch. Instead, mini briefs, on mini subjects, sometimes no longer than 15mn, on a regular basis can yield very great results. Starting with the general website semantic, adding unobstrusive javascript, and going deeper and deeper into tasks more and more difficult.
There is no perfection in accessibility. There's only an ideal we tend to. You don't fix a website for accessibility, you just improve it.
Throw away formal accreditations
We can't make a website absolutly perfect, we can just improve it on little touches to make it better and better. A, AA and AAA homologation is absurd, because there is no metrics to quantify the level of accessibility of a website. How could you compare two accessibility features ? How video subtitles is more accessible than alt on images ? We should just forget the accreditations. At first, we did accessibility improvement to help people with disabilities. Somewhere along the years, we became legally forced to provide accessibility measures and it became one more line on the planning and we lost the initial meaning that was driving us.
We should really take accessibility down that pedestal we put it. It's not that hard to make an accessible website, don't be scared by the list of accreditation and rules.
What about HTML5 ?
The geek side of your mind can't stop feeling the excitation when everyone talks about all the shiny stuff : file API, history, geolocation, web sockets, forms, etc. But the eternal question remains : what good are those new toys if we can only serve them to a handful of users. Will I use them now, for the benefit of only some, or will I wait for better support for the benefit of all ? But if I don't promote them myself, I'm only slowing down adoption by all browsers...
That's a tricky question and I don't have a definite answer (and that's fine !).
Paul Bakaus posted recently and article where he stated that it is better to build something awesome for 70% of the people that something good for 95% of them. It surely is true in the gaming world where gamers have the habit of buying new hardware to keep with the new game graphics. In the classical web world, we are still scared of asking the user to change its browser.
But it tickles my accessibility sense when someone told me that a part of the users won't be able to access the content because they don't have the correct requirement. This feels absolutly contrary to the open web principles.
23 Nov 2011To get the list of friends of a specific user, you are supposed to issue a simple GET
request to me/friends
(or USER_ID/friends
), passing the user accessToken in the request.
Facebook used to return an array named data
where each value is an object representing a friend. Each of this objects had two keys : id
and name
.
Until yesterday, it worked well.
Today, it seems broken for test users. The name
key is no longer returned in the call, you only get id
.
I'm not sure it's intentionnal or not. At least I haven't seen any notice about this change. But I'm not sure it's a bug either, as Facebook documentation is crappy, we never really know if the output we got is the expected one or if it's a bug.
I'm not even sure we were supposed to get the name
in the first place, actually.
What is definitely a bug is that the behavior is different for test users that for classic users.
31 Oct 2011I've spent the last two days debugging a weird issue involving https, IE and Flash.
In the end, I boiled the issue down to IE and Flash 10, https wasn't involved (in fact, that was a different issue).
Markup hell
It is known that to have a real crossbrowser markup to embed Flash we need an IE specific version and a non-IE one.
What I didn't know was that flashvars
needed to be passed in two different formats between Flash player 10 and Flash player 11.
11 expect the classic flashvars
parameter while 10 expect them to be passed as simili GET parameters to the movie url.
Final HTML markup
In the end, here is the PHP code I use to generate my SWF markup :
sprintf(
'<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="%1$s" height="%2$s" id="%3$s">
<param name="movie" value="%4$s?%6$s" />
%5$s
<!--[if !IE]>-->
<object type="application/x-shockwave-flash" data="%4$s" width="%1$s" height="%2$s">
%5$s
<!--<![endif]-->
%7$s
<!--[if !IE]>--></object><!--<![endif]-->
</object>
',
$width, $height, $id, $url, $params, $flashVars, $alternateContent);
Where :
$width
and $height
are the size (in pixel) of your movie$id
is the html/css id of the main object element (as used in swfObject.getObjectById
)$url
is the url address of your swf file$params
is a string containing all the <param name="name" value="value" />
that you want to pass. Usually it will contain the wmode
, allowfullscreen
, allowscriptaccess
and flashvars
keys.$flashVars
is a duplicate of the flashVars
key of $params
and should contain a string in the form foo=bar&baz=nyan
to be passed to the swf in Flash 10$alternateContent
is the html text to be displayed when Flash is not installed in the browse
I hope that this markup will help you, because I spent a damn long time testing all that stuff, jungling between VM and IE instances.