The Internet Explorer Nightmare
Hello!
Today at work, I had to create one of these things I don’t like because I think they’re not really useable but the client wants… Today the “I don’t like that” thing is… a vertical news scroller!
So, it’s a pretty simple thing indeed… a block (typically a rectangle) and inside it some content going from bottom to top until everything has been seen then you put everything at the bottom and go up again….
So, apart from the script that makes things go up (and it’s a simple one once you remember about scrollHeight and offsetHeight), you have to set the overflow property of the container to “hidden” in the CSS.
Straight-forward and simple ? Well… not exactly! That’s working on Firefox, Chrome, Safari and IE8 but not on IE7 nor IE6…
In fact, IE7 and IE6 behave like if overflow wasn’t set to hidden… it seems it has something to do with hasLayout but hasLayout was “true”…
In fact, for the overflow property to work correctly, you should set the “position” property to “relative” (and you can leave top and left to 0, so that doesn’t mess with the position). And… TADA! It works!
Pretty easy… once you know it!
Too bad we still have to deal with those stupidities!
See you soon!
(by the way, sorry, still no podcast, but I promised it will come, and it will… I’m still waiting for some graphics :))
The Podcast is coming
Hi,
Just a quick note to tell everyone that I’m sorry for being late to publish the first Podcast. You know, it’s always the same thing : quite a lot of work, a bit ill (nothing bad, don’t worry), and the need to sleep… Not to say that the Olympic Games haven’t been of any help. ;)
I hope to be posting it tomorrow evening!
See you soon!
Why you shouldn’t put a contact form on your website.
Hello,
Today at work I’ve been prospecting for a (web|communication)-agency. I came across several ones and I had to contact them.
That’s a pretty obvious and straight-forward thing. Well, at least it should be, because most of the time when calling you have difficulties to get to speak to someone who can help you (certainly because they are at a meeting).
But my point today is about contact forms included on websites. I came across several, and although that may seem pretty good for you because you can ask for some informations and have them for sure and also have them in a formatted way.
But the real problem is that mails sent by this way are not stored in your customer’s mailbox, making it difficult for him to track the conversation and have a trace of the contact.
So, one may argue that contact forms are also pretty good because they are a straightforward way to contact you without opening a mail application (yes some people do not have things correctly configured for mailto: links). That’s true, but that should never be the only possibility, nor should it “hide” your mail address.
I suggest to give both options and to present them with an equivalent sizing (i.e. : they should occupy the same space). Also, if the user choose to use the form, add a checkbox so that you can send him a copy of the mail for its archive.
That may seem a bit stupid, but trust me, even if I had a spreadsheet to follow my contacts, I sometime forgot to update it (I had some other things in mind) and the pain that comes with that can be avoided quite easily. And never forget : if you help me with my work, you’re already half way to get selected! ;-)
Any thoughts?
See you later!
Bought a netbook : Acer Aspire One
Hello,
Some weeks ago I bought a netbook. The reason was pretty simple : I have a macbook that I use both for my personal use and for school. So I have MacOSX on it, but being a web-developer and an IT student, I sometimes need to be able to do some testing on Windows. Add to that the fact that I’m the proud ashamed owner of Windows Mobile based phone and that I want to be able to develop for it and you’ve got the picture!
So I decided to buy a Acer Aspire One D250. It comes loaded with Windows 7 Starter Edition and Android.
First, let’s have a word about Windows 7 Starter Edition : it’s just a joke. Excuse me, but preventing the user from changing the wallpaper isn’t anything feature-based. Not being able to create a bridge between two network interfaces is much more one… so I upgraded to Windows 7 Professional as provided by MSDNAA account.
But enough talking about Windows.
So, what happened when I unboxed my netbook?
I turned it on and at my surprise, Windows was booting without me being presented with any LILO/GRUB screen to allow me to boot Androïd. I found out that there’s a Windows utility to “install” (or allow booting of) Androïd. That’s a bit strange but anyhow…
So, next thing, when you buy a computer loaded with an OS, you’re wanting your “restore CD”. Well, years before, they used to give it. Now you have to burn them…
But since a 10.1” wide-screen netbook, there’s no DVD-Drive. That’s normal… But the utility to create the discs won’t let me create an ISO image… no, it just keeps saying that it can’t create the restore discs since there’s no burner… You know they could at least let you create an image for you to put on an usb-drive or burn from another system, but no. Period.
Later I found a workaround by using the demo version of a software to create a virtual burner…
I also have to say that there’s a restore partition on the hard drive but come on, how well does it work if you screw up your partitions table or accidentally write on it? You’re just fucked.
That’s what makes you feel quite bad about a system that should be 100% embedded… it’s not well integrated and that made me feel like “We have a generic software to create restore discs, we just ship it on all computers”, period.
Tomorrow, I’m gonna talk about the Androïd system that comes with it.
See you online!
I suggest you watch this video in HD to be able to read the code.
haXe Podcast 1 : Getting started with haXe/Neko.
There’s sound ; turn up the volume if needed.
Also, sorry for not editing it more, I will certainly work on it again and replace it with a new and better version.
Some news about haXe/Java
Hello,
Sometimes ago I’ve been talking about haXe/Java and show-casing it with a very simple Android Application sample.
Obviously, the generated buzz has been quite huge (compared to our community’s size) but I’ve been surprised that no one contacted me to participate in the project.
Some days after, some events happened that prevented me to continue most of my personal work (you know, those kind of things that makes you wonder if you were right at the first place).
Well, that was before.
About a month ago, I’ve been contacted by several persons, some representing companies, some individuals. Some are offering sponsorship and some are offering help.
This is a great thing and I’m now quite excited about continuing the work on haXe/Java since I see people are really interested in it.
So, I’m going to write about some “problems” I have to face while writing this Java target.
haXe Void against Java Void
As you certainly know, haXe has a type Void. When you’re using it, it means that your function may return nothing (using a simple “return;” for example) or return null.
Java can also declare methods as void, but in such a case they can only “return;”. Although this may seem to be a very small difference it’s a quite important one.
The first idea would be to create a type “haXe.Void” to be used when we generate the Java code : that would actually allow us to return null.
But it has a drawback : Java makes an extensive use of method overriding (you can see that in the Android API for example), and a method declared as void in Java wouldn’t be overridable from haXe.
The second possibility would be to type as “void” and transform “return null;” to a simple “return;”. This is a possibility but I’m actually not feeling very comfortable with it because I feel like it may change the behavior of something at some time… (maybe throwing some problems when doing a == null).
Third possibility : let the developer choose the behavior to use by compiling Void to haXe.Void and having a java.Void that compiles to java’s native void.
What do you think about it ?
Ejecting a CD on a MacBook without booting an OS.
Hi,
This is a tips that may be useful if one day you’re messing with OSes installations on a Mac.
As you certainly know, you can press the Alt key when booting your computer to choose between different boot media, what you may not know is that when this is done, you can also eject the CD-ROM. That may help you one day!
HaXe’s community management
This post was written for the haXe’s mailing-list. I decided to cross-post it here because I want people who do not read the list to be aware that this discussion is taking place and its place is on the mailing-list. So, if you want to participate, do so on the mailing-list.
/* Please note that this is a long post. There’s no pun intended in it. There’s no complaining for the sake of complaining, I’m not targeting anyone.
*/
Hello,
As haXe, and most important, its community, are growing, I I think that it could be a good idea to organize the community.
This would have to take into account several points :
- Wiki maintenance
- Standard haXe’s framework management
- Community management
Those are the three main concerned points IMHO. Now, let’s go deeper into each one.
Wiki maintenance
As we all know, the wiki is an important thing because it is the first thing a new-comer sees. But it’s also important because it’s where you’ll find the “official” documentation. The maintaining the wiki is difficult ATM because : anyone can edit it, it’s multi-languages.
In fact, the main problem is that it’s multi-language. So, when we change something in an English page (and we do that quite often, to reflect a point discussed on this list for example), it may not be reflected in other languages (and in fact, there are quite a lot of chances that it will not be reflected). And to be honest, there are some languages that haven’t seen any change for months. This is a very important problem because the default website one sees is not the English one but the localized one which may be really out of sync.
I know we already discussed that, but again, I think it would be good to have one person in charge for each language. That doesn’t mean that no one else should be editing it. That would just mean that this person would be a manager, eventually have a team of persons with who he could work. This is very important and would ease keeping other languages in sync with the English one.
Standard haXe’s framework management
The Standard Framework is a very important thing too, because as we all know, even if a language is really good, it’s nothing without a good framework. The thing is the framework is already *big* (don’t forget the code base is even bigger because of multiple targets) and maybe it should grow.
There are two concerns about the haXe Framework :
- We need a way to bring new things in the framework, but not anything should make it to the framework. So, we need some kind of “proposal” and “moderation” procedures.
- We need to be able to maintain the framework : accepted proposals have to be implemented, bugs have to be solved.
Here again, I suggest that we go we the “managers” way. But how to split it? By targets ? Or by API’s parts? (SPOD, JS things, …)
Community management
Ok seriously, the community is growing, and it’s not limited to this mailing-list. The problem is that we are only aware of people who uses this mailing-list because we do not organize anything else for the others. Not having “activity” community oriented also makes some people leave haXe because they feel like there’s nothing happening. I know I’ll hear the “but it’s open-source, so things are taking place everywhere on blogs, websites,… outside of haXe’s one” thing. That’s true, but we also need to centralize things. That do not mean that we need to annihilate things that are outside, but we need to organize things “inside” too. Look at “modern” languages and frameworks that made it : they organized things “inside”.
In two days, it will be 4 years since haXe development started and in a little less than a month, that it’s been first released to the public. And how many “community meeting on the web” did we have? One. ONE. Incredible! Four years, so many people dedicated to haXe, and we only had ONE meeting online. Why? Because there’s no one to organize things that are community-oriented.
If we want community-driven things, we need community-oriented activity. And we need someone to organize it.
Please note that I’m going to cross-post this to my blog so that if some people do not know that the ML is here, they can get in touch. But I want the discussion to take place here. This is the place where it has to be.
Regards,
—
DASNOIS Benjamin
http://www.benjamindasnois.com
Typing functions in haXe
Hello everyone,
There’s been an interesting question on the haXe’s mailing-list regarding typing of functions. No matter what the question really was, it made me think I should write something about functions typing in haXe because it may not be really obvious when you’re not used to it.
So, Functions are typed.
Yes, functions are, like any other object, typed. Their type depends on two thing :
- The arguments taken by the function
- The return type of the function (the type of the object that’s going to be returned)
So a function written like this :
public function m1(arg1 : String, arg2 : String) : Int
would be typed as taking as first parameter a String, as second parameter a String, and returning an Int. We note this like that :
String->String->Int
More fun.
What’s even funnier, is that a function can take a function as a parameter, it can also return a function. So, how would we write that? It’s easy, just put parenthesis around things! Now, let’s imagine a function m1 that wants as first parameter a String, as second argument a function taking a String and returning an Int, and that returns an Int. We would write it like that :
function m1(arg1 : String, arg2 : String->Int) : Int;
And this would be typed as :
String->(String->Int)->Int.
Imagine m2, which takes the same parameters as m1 but returns a function taking an Int, an Int and returning a String. We could write it like this :
function m2(arg1 : String, arg2 : String->Int) : Int->Int->String;
This would be typed as :
String->(String->Int)->(Int->Int->String)
And you can embed things more and more… but pay attention to the parenthesis! ;)