- Antenna-gate timeline
- RIM's official statement after Steve Jobs' July 16 press conference
- Nokia's official statement after Steve Jobs' July 16 press conference
- Samsung's official statement after Steve Jobs's July 16 press conference
- HTC's unofficial response after Steve Jobs' July 16 press conference
- Questions left unanswered by Steve Jobs
- Consumer Reports' criticism over Apple's short-term solution to death grip issue
- A crisis expert's evaluation on Apple's conduct
- How the death grip issue will impact IPhone 4 market according to IDC
Tuesday, July 20, 2010
About Apple's IPhone 4 Antennagate
Everybody on the web seems to talk about Apple's IPhone's so called "antennagate" now. During these days I've collected several links that summarize various facets of this story.
Sunday, November 29, 2009
Photo retouching...
The following video shows a technique I used to remove some distracting elements from the original shots of this album.
Sunday, November 22, 2009
How to enable Ruby debug in RubyMine 2.0 on Windows
I recently had the chance to evaluate JetBrains' RubyMine. I was well impressed by this IDE except for the impossibility to debug Ruby code.
However I didn't gave up and, googling a bit, I found a thread inside JetBrains Developer Community that helped me to fix my installation and finally to debug Ruby code inside RubyMine.
Although the entire procedure is fully described in that thread, I think is worth summarizing the fundamental steps to fix the environment.
Let's start from a scenario where Ruby 1.9 has been installed with the one-click installer and RubyMine 2.0 has been installed too. (If you installed Ruby with the zip binary, reinstall it using the one-click installer as found here. That's because currently the ruby debugger ide only works on Windows using a RubyInstaller installation). Also verify that Ruby's root path doesn't include spaces.
- Download Ruby DevKit. (The links brings you to a .7z file, that you can open with 7Zip).
- Open the .7z file and follow the instructions in INSTALL file: basically they said to extract top-level folders (i.e. bin and devkit) to the Ruby's root folder and to modify the contents of fstab file according to your installation. In my case, my Ruby folder was: C:\programmi\ruby19, so my fstab file contents became:
C:\Programmi\Ruby19\devkit\gcc\3.4.5\mingw32 /mingw
C:\Programmi\Ruby19\devkit\msys\1.0.11\usr\local /usr/local - Execute the command gem install ruby-debug-ide19
(Note that's fundamental to install ruby debug ide as ruby-debug-ide19 because RubyMine looks for a gem with name ruby-debug-ide19 and not ruby-debug-ide, as you would expect). Also be patient because the command takes a while to complete. - Open with a text editor the file command.rb that's part of the installed ruby-debug-ide19 gem. In my case, that file was under folder C:\Programmi\Ruby19\lib\ruby\gems\1.9.1\gems\ruby-debug-ide19-0.4.12\lib\ruby-debug
- Modify the beginning of procedure debug_eval (at line 120) so to enter a new statement between statements str = str.to_s and max_time = 10. The new statement to enter is:
return "" if str == "$FILENAME"
At the end, the procedure debug_eval should begin like this:
def debug_eval(str, b = get_binding)
begin str = str.to_s
return "" if str == "$FILENAME"
max_time = 10
to_inspect = str.gsub(/\\n/, "\n") - Save the file
That's it. Enjoy Ruby debugging with RubyMine!
Friday, November 13, 2009
How to install the current Flash player into Chrome Portable/Firefox Portable on Windows
- Download the current Flash Player as xpi package from http://fpdownload.macromedia.com/get/flashplayer/xpi/current/flashplayer-win.xpi
- Rename the package's extension from .xpi to .zip
- Open the zip package and extract files flashplayer.xpt and NPSWF32.dll.
- For Chrome Portable: put extracted files into folder Chrome\plugins
- For Firefox Portable: put extracted files into folder App\Firefox\plugins
- (Re)start your browser
- Type about:plugins in the address bar
- A list of installed plugins appears. Verify that Shockwave Flash is present and that there is an entry with MIME type application/x-shockwave-flash and suffix swf.
Saturday, January 31, 2009
Flash Player SecurityError: Error #2060
This post starts with a security error echoed by Flash Player: I'm talking about Error #2060, an error that is associated with the use of ExternalInterface.call.
For those of you that just don't remember what ExternalInterface is responsible of, I have to say that this class allows ActionScript to "talk" with the Flash Player container: in my current example, I was calling a JavaScript function from inside ActionScript. My idea was to allow ActionScript to run a user-specified Windows program through the intermediation of the ActiveX WScript.Shell, instantiated in a IE-managed HTML page.
So, the code for the ActionScript part looked like this:
... and inside HTML page I had this JavaScript fragment:
The idea here is not obvious, but pretty simple: the user enters a program name in a Flex TextInput, then presses the Enter key and voilà... ActionScript calls the JavaScript function jsRunProgram providing it with the text just entered by the user. JavaScript, in turn, instantiates the ActiveX WScript.Shell and instructs it to run the program entered by the user. This way, ActionScript can run every Windows program the user typed: notepad, iexplore, cmd... just to name a few.
I developed this solution inside Adobe Flex Builder. Now, when I opened inside the Flex Builder browser the HTML page containing the Flash control corresponding to the ActionScript code, all ran as expected. Cool!
The surprise came out when I closed the Flex Builder browser and tried to open the same page in IE. I couldn't believe my eyes: everytime ActionScript tried to call JavaScript a Flash error popped out complaining about error 2060: Security sandbox violation.
This behavior sounded so unbelievable to me for several reasons:
Firstly, I browsed the Internet and I discovered that the same problem is not so uncommon. Some people suggest to deploy all the files in a web sever and, instead of accessing the HTML page via file system, access it via a HTTP connection to the web server. They say it works, but I was not interested in that solution primarily because I didn't want to introduce a web server. So I didn't try that solution.
I found two different solutions.
The first:
For those of you that just don't remember what ExternalInterface is responsible of, I have to say that this class allows ActionScript to "talk" with the Flash Player container: in my current example, I was calling a JavaScript function from inside ActionScript. My idea was to allow ActionScript to run a user-specified Windows program through the intermediation of the ActiveX WScript.Shell, instantiated in a IE-managed HTML page.
So, the code for the ActionScript part looked like this:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute" width="402" height="22"
backgroundColor="white">
<mx:Script>
<![CDATA[
private static const JS_FUNCTION_NAME: String = "jsRunProgram";
private function callExternalProgram(programName:String):void {
if (ExternalInterface.available) {
ExternalInterface.call(JS_FUNCTION_NAME, programName);
}
}
]]>
</mx:Script>
<mx:Label text="External program to call:"
y="0"
fontWeight="bold"/>
<mx:TextInput id="txtProgramName"
text="notepad"
x="151" y="-2" width="198"
enter="callExternalProgram(txtProgramName.text)"/>
<mx:Button label="Run" x="352" y="-2"
click="callExternalProgram(txtProgramName.text)"/>
</mx:Application>
... and inside HTML page I had this JavaScript fragment:
<script language="javascript" >
function jsRunProgram(programName) {
shellObj = new ActiveXObject("WScript.Shell");
shellObj.run(programName);
}
</script>
The idea here is not obvious, but pretty simple: the user enters a program name in a Flex TextInput, then presses the Enter key and voilà... ActionScript calls the JavaScript function jsRunProgram providing it with the text just entered by the user. JavaScript, in turn, instantiates the ActiveX WScript.Shell and instructs it to run the program entered by the user. This way, ActionScript can run every Windows program the user typed: notepad, iexplore, cmd... just to name a few.
I developed this solution inside Adobe Flex Builder. Now, when I opened inside the Flex Builder browser the HTML page containing the Flash control corresponding to the ActionScript code, all ran as expected. Cool!
The surprise came out when I closed the Flex Builder browser and tried to open the same page in IE. I couldn't believe my eyes: everytime ActionScript tried to call JavaScript a Flash error popped out complaining about error 2060: Security sandbox violation.
This behavior sounded so unbelievable to me for several reasons:
- Inside Flex Builder browser it ran without problems
- I couldn't imagine why Flash player had security concerns for accessing its containing HTML page.
Firstly, I browsed the Internet and I discovered that the same problem is not so uncommon. Some people suggest to deploy all the files in a web sever and, instead of accessing the HTML page via file system, access it via a HTTP connection to the web server. They say it works, but I was not interested in that solution primarily because I didn't want to introduce a web server. So I didn't try that solution.
I found two different solutions.
The first:
- Change Flash Player security settings to allow it to access the local directory containing the HTML page. (To change Flash Player settings it's required to call this URL)
- Change IE security settings to allow the use of ActiveX WScript.Shell
- Rename the HTML page to HTA.
How to call a program as Windows service
It's really easy to call a program as a Windows service.
In order to proceed, you firstly need two programs: instsrv.exe and srvany.exe. These programs are produced by Microsoft and are parts of Windows Resource Kit Tools.
To call a program as a new Windows service, follow this procedure:
In order to run the specified program, you may provide additional authentication information. This can be accomplished specifying log on parameters in the service properties.
To remove the new service, just follow this procedure:
In order to proceed, you firstly need two programs: instsrv.exe and srvany.exe. These programs are produced by Microsoft and are parts of Windows Resource Kit Tools.
To call a program as a new Windows service, follow this procedure:
- Create a new directory, let's say winsrv, on drive c
- Store both instsrv.exe and srvany.exe on that directory
- Open a DOS window
- Type: cd /d c:\winsrv
- Type: instsrv "service name" c:\winsrv\srvany.exe
- Exit from DOS window
- Open regedit
- Navigate to this key: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\service name
- Add a new key: Parameters
- Under the key Parameters, add these three string values: Application AppDirectory AppParameters
- Set the AppDirectory value to the directory where the program is stored into
- Set the Application value to the program name
- Set the AppParameters value to the command line parameters passed in program invocation
In order to run the specified program, you may provide additional authentication information. This can be accomplished specifying log on parameters in the service properties.
To remove the new service, just follow this procedure:
- Open a DOS window
- Type cd /d c:\winsrv
- Type instsrv "service name" remove
Monday, December 29, 2008
Flex
For those who are still in doubt about how powerful Flex/AIR are, I have here a little example that shows how to build a generic RSS reader in just about a hundred of line of code.

This program acquires the news from a user-provided RSS source, lists all the news and allows the user to dig into each news double clicking on it. It's based on the AS xml syndication library as3syndicationlib.
... I have some doubts about the feasibility of such a simple thing in JavaFX.
;-)

This program acquires the news from a user-provided RSS source, lists all the news and allows the user to dig into each news double clicking on it. It's based on the AS xml syndication library as3syndicationlib.
... I have some doubts about the feasibility of such a simple thing in JavaFX.
;-)
Monday, December 08, 2008
Why I'm perplexed about JavaFX
JavaFX 1.0 is finally out.
I took a look at the official website and I saw a lot of good-looking gadgets: a video player, a puzzle whose pieces are parts of a video, a stopwatch and a lot more.
It's seems JavaFX wants to compete with Adobe Flash in bringing some special effect to the user's desktop.
Frankly and honestly, Sun's solution doesn't impress me much: still applets are loading s-l-o-w-l-y, too slow compared with Flash counterparts. Moreover Linux is not supported yet. I see that JavaFX site shows only special effects, like rotating cubes and so on, but I don't see any "serious" component that could help the programmer to display and manage database data easily: that means, for instance, that if you want to display a resultset, JavaFX doesn't provide you with some kind of datagrid component (à la Flex) and you have to build your own by yourself.
Maybe my conclusion is too severe, but I think that from a user point of view Flash is more responsive than JavaFX and for a developer interested in building enterprise-class RIA applications JavaFX is just inadequate compared with Flex.
I took a look at the official website and I saw a lot of good-looking gadgets: a video player, a puzzle whose pieces are parts of a video, a stopwatch and a lot more.
It's seems JavaFX wants to compete with Adobe Flash in bringing some special effect to the user's desktop.
Frankly and honestly, Sun's solution doesn't impress me much: still applets are loading s-l-o-w-l-y, too slow compared with Flash counterparts. Moreover Linux is not supported yet. I see that JavaFX site shows only special effects, like rotating cubes and so on, but I don't see any "serious" component that could help the programmer to display and manage database data easily: that means, for instance, that if you want to display a resultset, JavaFX doesn't provide you with some kind of datagrid component (à la Flex) and you have to build your own by yourself.
Maybe my conclusion is too severe, but I think that from a user point of view Flash is more responsive than JavaFX and for a developer interested in building enterprise-class RIA applications JavaFX is just inadequate compared with Flex.
Sunday, November 23, 2008
How to configure ToggleNic.exe to work with Windows XP italian
ToggleNic is a useful Windows tool for enabling and disabling network connections from the command prompt. It can be downloaded here.
After installation, ToggleNic is configured (by default) to run with the english version of Windows: in other words, it doesn't work with localized Windows version, like mine (italian).
In order to let it work with a localized Windows version, all you need to do is to modify the file ToggleNic.exe.config found inside ToggleNic installation folder.
This config file is a simple XML-based configuration file. Specifically, you need to look at (and change properly) these settings:
For the italian version of Windows XP, I've checked the following values work.
Please notice the & at the start of EnableVerbName and DisableVerbName: it's because menu items are provided with a keybord shortcut. (That's what & is meaning for).
After installation, ToggleNic is configured (by default) to run with the english version of Windows: in other words, it doesn't work with localized Windows version, like mine (italian).
In order to let it work with a localized Windows version, all you need to do is to modify the file ToggleNic.exe.config found inside ToggleNic installation folder.
This config file is a simple XML-based configuration file. Specifically, you need to look at (and change properly) these settings:
- NetworkConnectionsFolderName
- EnableVerbName
- DisableVerbName
For the italian version of Windows XP, I've checked the following values work.
- NetworkConnectionsFolderName: Connessioni di rete
- EnableVerbName: &Abilita
- DisableVerbName: &Disabilita
Please notice the & at the start of EnableVerbName and DisableVerbName: it's because menu items are provided with a keybord shortcut. (That's what & is meaning for).
A useful site for getting info on Windows processes
Sometimes it happens you don't know what a Windows running process is needed to or whether it's a normal Windows process or something different.
The Process Library site has a huge database of information about processes. So when in dubt...
The Process Library site has a huge database of information about processes. So when in dubt...
When a good antivirus turns into a terrible virus
Some nights ago I was involved in an unexpected adventure: back at home after a day of work, I turned on my Windows XP laptop and after logging in I was alerted by AVG antivirus 8 Free edition that the file "user32.dll" contained a troian.
Although quite surprised, I didn't hesitate a moment and let my antivirus move the infected file into its vault.
It was a really bad move, because, after restarting, I wasn't able to start Windows XP anymore: a blue screen of death appeared regularly shortly after each restart and the computer booted up again coming at the blue screen of death and then restarting again.
I fought against this problem for about one hour, trying to find a way to get my "user32.dll" back in the right place. Finally, I came up with a solution: I booted from a Linux-live distro, then I copied the user32.dll under system32\dllcache into system32.
Now, thanks to Linux my Windows XP is back again. It's frightening to think that a good antivirus - as I consider AVG - turned suddenly into a terrible virus. For more information, check this out.
BTW during my Linux session I noticed Firefox is about 1.5x faster than the same version under Windows. I'm asking myself why I'm still using Windows...
Although quite surprised, I didn't hesitate a moment and let my antivirus move the infected file into its vault.
It was a really bad move, because, after restarting, I wasn't able to start Windows XP anymore: a blue screen of death appeared regularly shortly after each restart and the computer booted up again coming at the blue screen of death and then restarting again.
I fought against this problem for about one hour, trying to find a way to get my "user32.dll" back in the right place. Finally, I came up with a solution: I booted from a Linux-live distro, then I copied the user32.dll under system32\dllcache into system32.
Now, thanks to Linux my Windows XP is back again. It's frightening to think that a good antivirus - as I consider AVG - turned suddenly into a terrible virus. For more information, check this out.
BTW during my Linux session I noticed Firefox is about 1.5x faster than the same version under Windows. I'm asking myself why I'm still using Windows...
Wednesday, October 22, 2008
Android is now open source
Android is now available as open source. Check this site for more details.
It's worth nothing that, at the moment, Windows is not supported, while both Linux (Ubuntu) and Mac OS (running on Intel x86) are.
It's worth nothing that, at the moment, Windows is not supported, while both Linux (Ubuntu) and Mac OS (running on Intel x86) are.
Monday, October 20, 2008
Sunday, October 12, 2008
youtube-leecher
Here we go! youtube-leecher has just landed on SourceForge and now it's available for download here.
But what's youtube-leecher actually? Well, youtube-leecher is a simple yet powerful Ruby program to download all YouTube videos found inside video containers.
So now what's a "video container"?
From youtube-leecher perspective, a video container can be basically a HTML page or a text file that contain references to YouTube videos.
Now, let's imagine you are surfing the Net and then you come up to a page that contains a lot of YouTube videos you are interested in. Let's say the page you are visiting is a video container. Now what if you need to download them all?
I know there are a lot of YouTube video downloaders all around, but in situations like those described above, well... downloading each video separately can be just time-consuming. So here started my work.
The idea was to have a tool that, given a list of video containers, could display the basic info about each video found and then proceed to download. Therefore, I developed youtube-leecher, devoting some hours of spare time to it. I worked on it mainly during the night, from 10pm to 2am, when a lot of silence boosts my focusing. After about a week, the first promising results came out.
It was an interesting experience for some reasons I'm going to tell you: first off, Ruby. Ruby is a concise and powerful language. It's funny to solve problems using it. It gives you... excitement.
Another reason that caught me was I discovered the way to download a YouTube video, given its ID. (If you don't know it, downloading a YouTube video is not just a matter of right-clicking on it and choosing the option "save as", like for an image).
Finally, I found the way to query YouTube using Data API to obtain basic info about a video. Now it's the time to share these info with you.
Let's start from downloading a YouTube video.
Just suppose you want to download a video whose ID isvideo_id. Firstly, you need to access to the web page that allows you to watch the video. This page corresponds to URL:
http://www.youtube.com/watch?v=video_id
Then you have to look inside the Javascript code of that page searching for the definition of object swfArgs (var swfArgs = ...). As you will see, this object has several members. The most important for our purposes are: l, sk, fmt_map, t. Take notice of the value assigned to each of them inside the Javascript object definition statement. (In the following, we will refer to them in boldface). To download the video, all you need to do is calling a URL composed this way:
http://www.youtube.com/get_video?video_id=video_id&l=l&sk=sk&fmt_map=fmt_map&t=t
If a parameter value is set to null, just don't express the corresponding pair parameter name=parameter value inside the URL: so, if for instance fmt_map is null, don't write the part fmt_map= fmt_map.
Note that the aforementioned URL allows you to get a video in flv (Flash) format. Sometimes the mp4 version of it is available too. Currently the program doesn't allow you to download videos in this format, but just for your information, to get a video as mp4 (when available) just append to URL the parameter fmt=18.
What about getting info on a specified YouTube video?
It’s very easy: given a video whose id is video_id , just call the following URL:
http://gdata.youtube.com/feeds/api/videos?vq=video_id
As the reference documentation for Data API says, this URL will provide you with a RSS that contains all the info about videos that satisfy the query condition (in our case just a video: the one with with id = video_id)
Beware of videos whose ids start with the character – (dash). Calling the previous URL as stated before doesn’t work. To have info about these videos, you have to call the Data API URL without providing the first character (the dash).
Now... what's about the program?
Let's imagine you have downloaded it right now and you want to get all YouTube videos from http://www.xy.com. All you need to do is writing:
youtube-leecher http://www.xy.com
But what's youtube-leecher actually? Well, youtube-leecher is a simple yet powerful Ruby program to download all YouTube videos found inside video containers.
So now what's a "video container"?
From youtube-leecher perspective, a video container can be basically a HTML page or a text file that contain references to YouTube videos.
Now, let's imagine you are surfing the Net and then you come up to a page that contains a lot of YouTube videos you are interested in. Let's say the page you are visiting is a video container. Now what if you need to download them all?
I know there are a lot of YouTube video downloaders all around, but in situations like those described above, well... downloading each video separately can be just time-consuming. So here started my work.
The idea was to have a tool that, given a list of video containers, could display the basic info about each video found and then proceed to download. Therefore, I developed youtube-leecher, devoting some hours of spare time to it. I worked on it mainly during the night, from 10pm to 2am, when a lot of silence boosts my focusing. After about a week, the first promising results came out.
It was an interesting experience for some reasons I'm going to tell you: first off, Ruby. Ruby is a concise and powerful language. It's funny to solve problems using it. It gives you... excitement.
Another reason that caught me was I discovered the way to download a YouTube video, given its ID. (If you don't know it, downloading a YouTube video is not just a matter of right-clicking on it and choosing the option "save as", like for an image).
Finally, I found the way to query YouTube using Data API to obtain basic info about a video. Now it's the time to share these info with you.
Let's start from downloading a YouTube video.
Just suppose you want to download a video whose ID is
Note that the aforementioned URL allows you to get a video in flv (Flash) format. Sometimes the mp4 version of it is available too. Currently the program doesn't allow you to download videos in this format, but just for your information, to get a video as mp4 (when available) just append to URL the parameter fmt=18.
What about getting info on a specified YouTube video?
It’s very easy: given a video whose id is
As the reference documentation for Data API says, this URL will provide you with a RSS that contains all the info about videos that satisfy the query condition (in our case just a video: the one with with id = video_id)
Beware of videos whose ids start with the character – (dash). Calling the previous URL as stated before doesn’t work. To have info about these videos, you have to call the Data API URL without providing the first character (the dash).
Now... what's about the program?
Let's imagine you have downloaded it right now and you want to get all YouTube videos from http://www.xy.com. All you need to do is writing:
Of course, you can specify several options, such as the directory where to place downloaded videos, or the video naming, just to name a few.
... I don't want to bore you anymore. If you are interested in, you'll find all these info inside the full package.
... I don't want to bore you anymore. If you are interested in, you'll find all these info inside the full package.
Saturday, October 11, 2008
It is not enough for code to work
In my remaining spare time, I'm reading the book Clean Code by Robert C. Martin.
At the end of chapter 14, the Conclusion states:
"It is not enough for code to work. Code that works is often badly broken. Programmers who satisfy themselves with merely working code are behaving unprofessionally. They may fear that they don’t have time to improve the structure and design of their code, but I disagree. Nothing has a more profound and long-term degrading effect upon a development project than bad code. Bad schedules can be redone, bad requirements can be redesigned. Bad team dynamics can be repaired. But bad code rots and ferments, becoming an inexorable weight that drags the team down"
It happens that some programmers are motivated only by money and aren't really interested in doing a good job. As a result, these people are a kind of cancer for every project they work on: everytime they solve problems in quick and dirty ways, producing a lot crap and hiding themselves behind a lot of excuses. The truth is they are just unprofessional.
Also, it happens that some project leaders are just ignoring these aspects and focusing mostly on evident short-term results, because only here and now count for them, as they are only interested to get a good appearance now: they don't solve problems really, they just paint a thin technological layer over problems and delude people with good-looking masquerades. As the time goes on, their projects become messes and they reveal themselves either blind or unprepared at all, trying to carry on, day by day, without facing problems seriously.
Personal considerations aside... Clean Code is a must-read-book for all programmers and project leaders who want to invest in their professionality .
At the end of chapter 14, the Conclusion states:
"It is not enough for code to work. Code that works is often badly broken. Programmers who satisfy themselves with merely working code are behaving unprofessionally. They may fear that they don’t have time to improve the structure and design of their code, but I disagree. Nothing has a more profound and long-term degrading effect upon a development project than bad code. Bad schedules can be redone, bad requirements can be redesigned. Bad team dynamics can be repaired. But bad code rots and ferments, becoming an inexorable weight that drags the team down"
It happens that some programmers are motivated only by money and aren't really interested in doing a good job. As a result, these people are a kind of cancer for every project they work on: everytime they solve problems in quick and dirty ways, producing a lot crap and hiding themselves behind a lot of excuses. The truth is they are just unprofessional.
Also, it happens that some project leaders are just ignoring these aspects and focusing mostly on evident short-term results, because only here and now count for them, as they are only interested to get a good appearance now: they don't solve problems really, they just paint a thin technological layer over problems and delude people with good-looking masquerades. As the time goes on, their projects become messes and they reveal themselves either blind or unprepared at all, trying to carry on, day by day, without facing problems seriously.
Personal considerations aside... Clean Code is a must-read-book for all programmers and project leaders who want to invest in their professionality .
Javascript frameworks: Microsoft's and Nokia's choice
Ther's a lot of Javascript frameworks out there: Prototype, script.aculo.us, Dojo, YUI, Ext, Pi, MooTools, jQuery just to name a few.
I personally don't have any preference about them, but it's clearly an important signal the choice Microsoft and Nokia did recently: JQuery.
It's worth remembering that jQuery is not the only sponsored js framework: previously, IBM, Sun and Bea expressed their preference for Dojo, as you can see looking at the sponsor and partner mention in Dojo Foundation info page.
I personally don't have any preference about them, but it's clearly an important signal the choice Microsoft and Nokia did recently: JQuery.
It's worth remembering that jQuery is not the only sponsored js framework: previously, IBM, Sun and Bea expressed their preference for Dojo, as you can see looking at the sponsor and partner mention in Dojo Foundation info page.
Labels:
Dojo,
Ext,
Javascript,
JQuery,
Microsoft,
Nokia,
Prototype,
script.aculo.us,
YUI
Xebia Web Framework Contest
What's the best Web Framework for developing RIA applications?
That's the question people at Xebia France tried to answer through their contest
Competitors were:
That's the question people at Xebia France tried to answer through their contest
Competitors were:
- Flex 3
- Silverlight beta 2
- Google GWT
- Echo 3
- Java FX
Tuesday, September 30, 2008
puts "Hello world"
Hello everybody from the magical world of Ruby: that's at least the meaning of the title...
Guess what? I'm learning Ruby in my spare time and I'm having a lot of fun. Well, I find this language concise, fascinating and powerful. So I strongly suggest every programmer that codes for fun (just like me) to give it a try. See the official website for more information.
For those of you who are guessing why I came to Ruby, I have two answers. The first is funny: after watching Giles Bowkett's fantastic presentation on his project Archeopterix, I was curious about the language he used for that project. The second is more serious: I'd like to experiment all the power of Ruby on Rails, a framework for developing web applications quicky. (As you probably know, I come from J2EE). So, before learning Rails, I need to understand Ruby.
Yesterday night I was trying to do a program in Ruby that given a URL or a file finds all the Youtube videos referenced inside it. After getting these information, I then added some logic to download them automatically. BTW I learned a lot of things about downloading a video from Youtube, given his ID. Also I used Youtube Data API in order to get some info about each video.
I will post it soon. Stay tuned!
Guess what? I'm learning Ruby in my spare time and I'm having a lot of fun. Well, I find this language concise, fascinating and powerful. So I strongly suggest every programmer that codes for fun (just like me) to give it a try. See the official website for more information.
For those of you who are guessing why I came to Ruby, I have two answers. The first is funny: after watching Giles Bowkett's fantastic presentation on his project Archeopterix, I was curious about the language he used for that project. The second is more serious: I'd like to experiment all the power of Ruby on Rails, a framework for developing web applications quicky. (As you probably know, I come from J2EE). So, before learning Rails, I need to understand Ruby.
Yesterday night I was trying to do a program in Ruby that given a URL or a file finds all the Youtube videos referenced inside it. After getting these information, I then added some logic to download them automatically. BTW I learned a lot of things about downloading a video from Youtube, given his ID. Also I used Youtube Data API in order to get some info about each video.
I will post it soon. Stay tuned!
Wednesday, November 29, 2006
Conversion from ANSI to OEM
Yes, I mean Microsoft SQL Server: wonderful DBMS, isn't it? Well... joking apart (!), if you ever used SQL Server you noticed that while ISQL (the interactive SQL client) uses a Windows charset (i.e. ANSI), OSQL (the DOS counterpart) uses a DOS charset (i.e. OEM). This fact is not irrelevant in some circumstances.
Normally, developers test SQL statements interactively through ISQL, then, as statements are ok, they save their work in .sql files. As these SQL statements are released, it's common to execute them through a batch script, so using OSQL. The switch from ISQL to OSQL causes these statements to introduce in database values different than the expected ones.
I'm italian and in my language accents are important. So, obviously, "città" (i.e. town) is different form "citt..." (a nonsense in italian). Why am I saying this? Because if you saved in ISQL a script like the following: INSERT INTO TABLE_1 VALUES ("città") and then you executed it with OSQL, SQL Server will have recorded the value "citt..." instead of "città". ...Welcome to SQL Server's idiosyncrasies.
The fact is accents are coded differently between ANSI charset and OEM charset. Here comes the bad surprise.
Probably Microsoft didn't pay enough attention to this issue: after all we italians are a little minority in the computer realm and accents are not so common in SQL scripts. But for some of us italians (and for me in particular) this point is really important. Therefore, I took the decision to develop a little Java utility that converts text files from ANSI charset to OEM charset and vice versa.
Doing this task in Java is pretty easy. In fact, if you want to read a file using ANSI charset, you simply need to define an InputStreamReader object with code page 1252, while if you want to read a file with OEM charset the code page must be 850. Similarly, for writing a file using ANSI charset, an OutputStreamReader object with code page 1252 must be instantiated.
And so, after spending a pleasant evening with NetBeans, I came out with CharsetConverter! Now, let me introduce it.
- <conversion type> can be: ansi_to_oem or oem_to_ansi
- <file> is the fully qualified pathname of a file to convert
- <directory of files> can be either a directory name or a directory name followed by a file extension, thus meaning all the files with that extension inside the given directory.
- CharsetConverter ansi_to_oem c:\mssql\scripts\mydml.sql
calls CharsetConverter for translating from ANSI to OEM the file called mydml.sql inside directory C:\mssql\scripts - CharsetConverter oem_to_ansi c:\mssql\scripts sql
invokes CharsetConverter for translating from OEM to ANSI all files with extension sql inside directory C:\mssql\scripts.
Subscribe to:
Posts (Atom)
