Author Topic: Ok I was wrong about Arduino  (Read 6141 times)

0 Members and 3 Guests are viewing this topic.

Offline Heisen

  • Regular Contributor
  • *
  • Posts: 56
  • Country: in
Re: Ok I was wrong about Arduino
« Reply #75 on: March 18, 2026, 09:02:13 pm »
The traditional Arduino uno is also a great tool to discover assembly if anybody wants to.

 

Online SteveThackery

  • Super Contributor
  • ***
  • Posts: 3270
  • Country: gb
  • 50 year novice
Re: Ok I was wrong about Arduino
« Reply #76 on: March 18, 2026, 09:37:53 pm »
Btw you definitely can use Arduino for μs timing if you want. Heck, it even has a micros() function…

It does indeed, albeit to a resolution of 4μs. But still sufficient for loads of stuff.

The traditional Arduino uno is also a great tool to discover assembly if anybody wants to.

I can't think of a decent analogy, but it's a bit like nested bananas*: you can peel Arduino back layer by layer (or not, your choice) until you get to the Holy Trinity: you; the assembler; and the Hardware Reference Manual.

* I did say it was a crap analogy.  :-+
« Last Edit: March 18, 2026, 09:47:42 pm by SteveThackery »
 
The following users thanked this post: tooki

Offline brucehoult

  • Super Contributor
  • ***
  • Posts: 6395
  • Country: nz
Re: Ok I was wrong about Arduino
« Reply #77 on: March 18, 2026, 10:05:55 pm »
Hello again,

I forgot to mention some undesirable points about the Arduino boards like the Uno and Nano.

One of the things that i think is not that easy to do is get the board to go into the sleep state where the total current could be as low as nanoamps.  With Microchip, it was easy to do because I was always dealing with the raw chip.  With Arduino, we are dealing with the chip plus the support circuitry.  That means we have to consider more circuit elements that will draw current, not just the chip.
A good counterpoint is that once we learn how to use the Arduino boards, we start to get a feel for how the raw chip works too, so if we need a micropower state we can always turn to the raw chip and go from there, and we can even still use the typical bootloader.

If you're worrying about microamps or microseconds then, absolutely, Arduino is probably not for you.

If the shortest time you care about is a millisecond, second, or minute then it absolutely is for you.
That’s silly.

On the one hand, running into limitations is how you learn about things.

But more importantly, as I have said a million times and will evidently need to say another 100 billion times: Arduino means several things:
- Arduino-branded boards and clones
- the Arduino IDE
- the Arduino framework (the core software libraries) and “language” (i.e. the API to said libraries)
- and the ecosystem that has arisen around these

When you “use Arduino”, the only part that is mandatory is the Arduino framework. Every other part is interchangeable. So if a standard board’s peripherals are too power-hungry, you can choose a different board, or make your own design. If you don’t like the IDE, you can use one of numerous alternatives.

And even within the part you can’t remove, the framework, you don’t have to use it in its entirety. It won’t block you from circumventing it and manipulating registers directly. You can ignore functions (e.g. if standard pin manipulation is too slow, you can also use third-party libraries that do it faster). Etc. etc. etc.

Btw you definitely can use Arduino for μs timing if you want. Heck, it even has a micros() function…

I'm not sure why you imagine I don't know all of that, for MYSELF, who has been using Arduino boards and libraries on AVR, Arm, RISC-V for 15 years, and low level programming without using Arduino libraries as well.

We are talking about beginners here.

The important part of my previous message is that there are HUGE NUMBERS of applications for microcontrollers that don't need great precision at all. Writing them in interpreted BASIC on a 6502 would be fine. Or (ugh) MicroPython. Compiled C++ Arduino on an AVR is vastly more capable than those.
« Last Edit: March 18, 2026, 10:08:45 pm by brucehoult »
 

Offline MrAl

  • Super Contributor
  • ***
  • Posts: 2247
Re: Ok I was wrong about Arduino
« Reply #78 on: March 20, 2026, 08:18:14 am »
Btw you definitely can use Arduino for μs timing if you want. Heck, it even has a micros() function…

It does indeed, albeit to a resolution of 4μs. But still sufficient for loads of stuff.

The traditional Arduino uno is also a great tool to discover assembly if anybody wants to.

I can't think of a decent analogy, but it's a bit like nested bananas*: you can peel Arduino back layer by layer (or not, your choice) until you get to the Holy Trinity: you; the assembler; and the Hardware Reference Manual.

* I did say it was a crap analogy.  :-+

Hi,

That's almost true, but then in some cases you would have to modify the board that holds the chip because there are other support chips that interfere with some functions.  That's why I also went to the raw chip for some things and then you don't have to tear up the board to remove some of the components.
 
The following users thanked this post: SteveThackery

Offline MrAl

  • Super Contributor
  • ***
  • Posts: 2247
Re: Ok I was wrong about Arduino
« Reply #79 on: March 20, 2026, 08:24:43 am »
Hello again,

I forgot to mention some undesirable points about the Arduino boards like the Uno and Nano.

One of the things that i think is not that easy to do is get the board to go into the sleep state where the total current could be as low as nanoamps.  With Microchip, it was easy to do because I was always dealing with the raw chip.  With Arduino, we are dealing with the chip plus the support circuitry.  That means we have to consider more circuit elements that will draw current, not just the chip.
A good counterpoint is that once we learn how to use the Arduino boards, we start to get a feel for how the raw chip works too, so if we need a micropower state we can always turn to the raw chip and go from there, and we can even still use the typical bootloader.

If you're worrying about microamps or microseconds then, absolutely, Arduino is probably not for you.

If the shortest time you care about is a millisecond, second, or minute then it absolutely is for you.
That’s silly.

On the one hand, running into limitations is how you learn about things.

But more importantly, as I have said a million times and will evidently need to say another 100 billion times: Arduino means several things:
- Arduino-branded boards and clones
- the Arduino IDE
- the Arduino framework (the core software libraries) and “language” (i.e. the API to said libraries)
- and the ecosystem that has arisen around these

When you “use Arduino”, the only part that is mandatory is the Arduino framework. Every other part is interchangeable. So if a standard board’s peripherals are too power-hungry, you can choose a different board, or make your own design. If you don’t like the IDE, you can use one of numerous alternatives.

And even within the part you can’t remove, the framework, you don’t have to use it in its entirety. It won’t block you from circumventing it and manipulating registers directly. You can ignore functions (e.g. if standard pin manipulation is too slow, you can also use third-party libraries that do it faster). Etc. etc. etc.

Btw you definitely can use Arduino for μs timing if you want. Heck, it even has a micros() function…

I'm not sure why you imagine I don't know all of that, for MYSELF, who has been using Arduino boards and libraries on AVR, Arm, RISC-V for 15 years, and low level programming without using Arduino libraries as well.

We are talking about beginners here.

The important part of my previous message is that there are HUGE NUMBERS of applications for microcontrollers that don't need great precision at all. Writing them in interpreted BASIC on a 6502 would be fine. Or (ugh) MicroPython. Compiled C++ Arduino on an AVR is vastly more capable than those.

Hi,

Oh the timing was never an issue.  I quickly learned how to manipulate the ports directly from assembly, the same I had been doing with the low-end Microchip products.  That meant maximum speed by bypassing the built in Arduino firmware. I liked the low-end stuff because it was cheap and you got an awful lot of functionality even though the cost may have been less than $2 USD.  You could build a lot of them and not even put a dent in the bank.

In the end, I ended up liking the Arduino line a lot and experimented with several types of those boards.
I think it was with the Due board I ran into a little problem though.  It was 3.3v and I had been working for ages with 5v logic.  To interface to the rest of the world, I'd have to use logic level converters on almost every port.  I didn't like that at all.
I liked the advanced ADC and DAC, but didn't like that 3.3v limitation.
 

Offline brucehoult

  • Super Contributor
  • ***
  • Posts: 6395
  • Country: nz
Re: Ok I was wrong about Arduino
« Reply #80 on: March 20, 2026, 10:04:46 am »
In the end, I ended up liking the Arduino line a lot and experimented with several types of those boards.
I think it was with the Due board I ran into a little problem though.  It was 3.3v and I had been working for ages with 5v logic.  To interface to the rest of the world, I'd have to use logic level converters on almost every port.  I didn't like that at all.
I liked the advanced ADC and DAC, but didn't like that 3.3v limitation.

That's nothing to do with Arduino, that's just the modern Arm (and MCU in general) world at the Due's 84 MHz and above.

There are some automotive and industrial Arm and RISC-V MCUs that can do 144 MHz - 192 MHz on 5V now, but not in 2012 when the Due was released.
 

Offline John B

  • Super Contributor
  • ***
  • Posts: 1070
  • Country: au
Re: Ok I was wrong about Arduino
« Reply #81 on: March 20, 2026, 10:11:47 pm »
When you program manually in machine code you also skip a few abstractions levels such as gates model, transistors model, and transistors physics.

Every project has its own range of abstraction that need to be dealt with and the other abstractions that should be ignored for productivity.

This is pretty much how I feel. I think it's very easy to hyper fixate and hyper criticise a few levels of abstraction above and below you when working on some problem. It's a good idea to examine what you gain by going to lower levels of abstraction and what you lose by going to higher or "easier" levels.

The act of gaining knowledge and understanding of the lower levels is great, but until I solve the problem of sleep, that simply has to be time-balanced with everything else in life.

At the moment I'm having this thought process through learning Rust. I consider it a pretty high level language. I decided I don't really want to manage memory in C, or stuff around with strings in C either. Don't get me started on dealing with external libraries/shared objects/static objects.  I'm happy to let the Rust language and compiler solve with them for me (but I might lose my sanity to the borrow checker).
 

Offline MrAl

  • Super Contributor
  • ***
  • Posts: 2247
Re: Ok I was wrong about Arduino
« Reply #82 on: March 21, 2026, 06:43:21 am »
In the end, I ended up liking the Arduino line a lot and experimented with several types of those boards.
I think it was with the Due board I ran into a little problem though.  It was 3.3v and I had been working for ages with 5v logic.  To interface to the rest of the world, I'd have to use logic level converters on almost every port.  I didn't like that at all.
I liked the advanced ADC and DAC, but didn't like that 3.3v limitation.

That's nothing to do with Arduino, that's just the modern Arm (and MCU in general) world at the Due's 84 MHz and above.

There are some automotive and industrial Arm and RISC-V MCUs that can do 144 MHz - 192 MHz on 5V now, but not in 2012 when the Due was released.

Hi,

What do you mean it has nothing to do with Arduino?  It's an Arduino board isn't it?
Just because it is 3.3v does not mean it has nothing to do with Arduino.
Maybe you had something else in mind here?

I really, really liked that board a lot, but the 3.3v I/O ports were very hard to deal with in a 5v world.
 

Online SteveThackery

  • Super Contributor
  • ***
  • Posts: 3270
  • Country: gb
  • 50 year novice
Re: Ok I was wrong about Arduino
« Reply #83 on: March 21, 2026, 09:43:34 am »
I really, really liked that board a lot, but the 3.3v I/O ports were very hard to deal with in a 5v world.

It is, I agree, but I'm not sure you can argue it's a 5V world any more. Loads of stuff is 3.3V, and 5V is beginning to look a bit historical.
 

Offline brucehoult

  • Super Contributor
  • ***
  • Posts: 6395
  • Country: nz
Re: Ok I was wrong about Arduino
« Reply #84 on: March 21, 2026, 10:29:53 am »
In the end, I ended up liking the Arduino line a lot and experimented with several types of those boards.
I think it was with the Due board I ran into a little problem though.  It was 3.3v and I had been working for ages with 5v logic.  To interface to the rest of the world, I'd have to use logic level converters on almost every port.  I didn't like that at all.
I liked the advanced ADC and DAC, but didn't like that 3.3v limitation.

That's nothing to do with Arduino, that's just the modern Arm (and MCU in general) world at the Due's 84 MHz and above.

There are some automotive and industrial Arm and RISC-V MCUs that can do 144 MHz - 192 MHz on 5V now, but not in 2012 when the Due was released.

Hi,

What do you mean it has nothing to do with Arduino?  It's an Arduino board isn't it?
Just because it is 3.3v does not mean it has nothing to do with Arduino.
Maybe you had something else in mind here?

I really, really liked that board a lot, but the 3.3v I/O ports were very hard to deal with in a 5v world.

You can only make Arduino boards (or any other) using chips that are available. If you want a sufficiently high performance CPU then it's going to run at 3.3V (or less) not 5V.

The Due was the first non-AVR Arduino and at the time any Arm over maybe 24 or 48 MHz was 3.3V.

The much later (2023, 11 years later) Arduino UNO R4 and Nano R4 have Arm CPUs running on 5V, but only 48 MHz, so about half the speed of the Due.
 

Offline tooki

  • Super Contributor
  • ***
  • Posts: 15804
  • Country: ch
Re: Ok I was wrong about Arduino
« Reply #85 on: March 21, 2026, 12:04:57 pm »
In the end, I ended up liking the Arduino line a lot and experimented with several types of those boards.
I think it was with the Due board I ran into a little problem though.  It was 3.3v and I had been working for ages with 5v logic.  To interface to the rest of the world, I'd have to use logic level converters on almost every port.  I didn't like that at all.
I liked the advanced ADC and DAC, but didn't like that 3.3v limitation.

That's nothing to do with Arduino, that's just the modern Arm (and MCU in general) world at the Due's 84 MHz and above.

There are some automotive and industrial Arm and RISC-V MCUs that can do 144 MHz - 192 MHz on 5V now, but not in 2012 when the Due was released.

Hi,

What do you mean it has nothing to do with Arduino?  It's an Arduino board isn't it?
Just because it is 3.3v does not mean it has nothing to do with Arduino.
Maybe you had something else in mind here?

I really, really liked that board a lot, but the 3.3v I/O ports were very hard to deal with in a 5v world.
I think he meant “it’s nothing to do with Arduino” in the sense of “that’s in no way specific to Arduino” or “that’s not Arduino’s fault”.

But as others have said: 3.3V has been the standard for a LONG time. Even at the time the first Arduino was released, computers had been at 3.3V for years.

If anything could be called a mistake here (which I am not really arguing in earnest), it was Arduino’s “mistake” to release any 5V boards to begin with. In retrospect, it likely would have been smarter to use 3.3V from the start.

I do most of my projects with ESP32-series MCUs, and they’re 3.3V. Only rarely do I “miss” 5V logic. It does make driving many MOSFETs a smidgen easier, and gives a bit more headroom with blue and white LEDs.
 

Offline Nominal Animal

  • Super Contributor
  • ***
  • Posts: 8349
  • Country: fi
    • My home page and email address
Re: Ok I was wrong about Arduino
« Reply #86 on: March 21, 2026, 01:48:01 pm »
If anything could be called a mistake here (which I am not really arguing in earnest), it was Arduino’s “mistake” to release any 5V boards to begin with. In retrospect, it likely would have been smarter to use 3.3V from the start.
I do believe the reason was the clock limitations on ATmega328 and other AVR MCUs.  If you look at Figure 31-286 in the ATmega328 datasheet, you can see that the core frequency is limited by the supply voltage.  While at 4.5V and higher supply it can do full 20 MHz core clock, at 3.1V it is limited to 12 MHz; at 3.0-3.6V typical 3.3V supply range, you're limited to about 11 MHz — or only a bit over half the maximum it can do.  Other AVR cores like ATmega32u4 (with native full-speed USB) are similarly limited: the SparkFun Pro Micro (based on ATmega32u4, with native full-speed USB interface) even came in both 3.3 V / 8 MHz and 5 V / 16 MHz variants.  (As it is CC-BY-SA, the Pro Micro clones you can buy are copies of this, with Caterina bootloader (as on Arduino Leonardo).)
_ _ _ _ _

I often use Teensy 4.x via Teensyduino Arduino add-on for ad-hoc tooling myself.  It runs at up to 600 MHz by default, although you can overclock it to almost a gigahertz if you ensure it stays cool enough, so microsecond precision is achievable (it's 6 600 clock cycles per microsecond).  A simple loop can toggle a set of GPIO pins at about 180 MHz.  You cannot use JTAG with it, because it has a proprietary bootloader chip (that you can buy off PJRC; the boards themselves are nowadays manufactured by SparkFun), but at power on, the full IMXRT1062 (except for JTAG) is at your disposal, including full 1Mbyte of SRAM.  Because it has a native high-speed USB interface that can push 200+ Mbit/s (21 to 29 Mbytes/sec depending on host) over trivial USB Serial (USB CDC ACM, generic USB serial drivers) while doing other proper work — my test uses a PRNG that passes all BigCrush randomness tests, unlike e.g. Mersenne Twister, and verifies the host-generated sequence matches — it is an excellent base for ad-hoc tools, like interfacing a computer to external devices.

For me, the Arduino environment is mainly an ad-hoc toolbench, which allows me to cobble together very high-performance interfacing tools in no time.  I also have lots of various logic level translators and isolators in stock, because my devices' GNDs don't always agree, so ground loops are a problem I need to be aware of.

For any serious work, I do prefer a plain Makefile-based build environment; but for the modular initial testing, and even code development, I use whatever editor or IDE I find most suitable.  I have the luxury of no deadlines, so I choose not to copy-paste code from anywhere, ever, and instead adapt preferably-minimal code to each use case (and keep a library of thousands of pluripotent algorithm test cases to refresh my memory).  So, I my needs and use cases may be unusual, but I do claim I am quite effective (albeit not fast) this way.
« Last Edit: March 21, 2026, 04:48:45 pm by Nominal Animal »
 
The following users thanked this post: tooki

Online SteveThackery

  • Super Contributor
  • ***
  • Posts: 3270
  • Country: gb
  • 50 year novice
Re: Ok I was wrong about Arduino
« Reply #87 on: March 21, 2026, 02:48:52 pm »
But as others have said: 3.3V has been the standard for a LONG time. Even at the time the first Arduino was released, computers had been at 3.3V for years.

If anything could be called a mistake here (which I am not really arguing in earnest), it was Arduino’s “mistake” to release any 5V boards to begin with. In retrospect, it likely would have been smarter to use 3.3V from the start.

I will argue it in earnest. Arduino got it wrong: the whole shebang should have been 3.3V from the beginning. Honestly, having some 3.3V kit and some 5V kit is a bloody nuisance.
 

Offline zapta

  • Super Contributor
  • ***
  • Posts: 6580
  • Country: 00
Re: Ok I was wrong about Arduino
« Reply #88 on: March 21, 2026, 02:57:26 pm »
...  It runs at up to 600 MHz by default, although you can overclock it to almost a gigahertz if you ensure it stays cool enough, so microsecond precision is achievable (it's 6 clock cycles per microsecond).

Did you mean 600 clock cycles?
 
The following users thanked this post: Nominal Animal

Offline zapta

  • Super Contributor
  • ***
  • Posts: 6580
  • Country: 00
Re: Ok I was wrong about Arduino
« Reply #89 on: March 21, 2026, 03:12:08 pm »

I will argue it in earnest. Arduino got it wrong: the whole shebang should have been 3.3V from the beginning. Honestly, having some 3.3V kit and some 5V kit is a bloody nuisance.

At the time, 5V was a common operating voltage for makers boards like the Arduino, for example Teensy, PICAXE, Basic Stamp and others.
 
The following users thanked this post: SteveThackery

Offline Nominal Animal

  • Super Contributor
  • ***
  • Posts: 8349
  • Country: fi
    • My home page and email address
Re: Ok I was wrong about Arduino
« Reply #90 on: March 21, 2026, 05:05:13 pm »
...  It runs at up to 600 MHz by default, although you can overclock it to almost a gigahertz if you ensure it stays cool enough, so microsecond precision is achievable (it's 6 clock cycles per microsecond).
Did you mean 600 clock cycles?
(Counts using fingers: 600,000,000 / 1,000,000 = 6 ... uh, no, 600, yes.) :-DD

Thanks for catching that!  I corrected my post, too.

GPIO manipulation crosses clock domains, and Teensy 4.x is Cortex-M7 (with hardware single- and double-precision support) with caches and closely-coupled RAM; so there are quite a lot of details if one wants to wring everything out of the hardware.  Arduino environment (and the Teensyduino additions) provide a nice compromise for quick tests and ad-hoc tooling.  And at $23.80 - $31.50 depending on variant, Teensy 4.x is definitely affordable for such.

At the time, 5V was a common operating voltage for makers boards like the Arduino, for example Teensy, PICAXE, Basic Stamp and others.
In any case, choosing 5V wasn't just an arbitrary choice, there were many factors from maximum AVR clock frequency to typical peripherals to think of.

After all, Arduino wasn't designed by engineers for engineers, but more for artists and hobbyists to make use of these new possibilities.
 

Offline MrAl

  • Super Contributor
  • ***
  • Posts: 2247
Re: Ok I was wrong about Arduino
« Reply #91 on: March 22, 2026, 12:50:04 pm »
I really, really liked that board a lot, but the 3.3v I/O ports were very hard to deal with in a 5v world.

It is, I agree, but I'm not sure you can argue it's a 5V world any more. Loads of stuff is 3.3V, and 5V is beginning to look a bit historical.

Hi,

I was not arguing that it is a 5v world anymore, just that at the time most of the stuff I had from previous Arduino products ran on 5v, so in my own world it was a 5v world.  I had a LOT of stuff that ran at 5v because I had some of that from the early days of microprocessors.  A lot of the displays were 5v also.  I would have to use logic level converters, no choice there.
I do understand that 3.3v has some benefits too though.
 

Offline MrAl

  • Super Contributor
  • ***
  • Posts: 2247
Re: Ok I was wrong about Arduino
« Reply #92 on: March 22, 2026, 12:53:35 pm »
In the end, I ended up liking the Arduino line a lot and experimented with several types of those boards.
I think it was with the Due board I ran into a little problem though.  It was 3.3v and I had been working for ages with 5v logic.  To interface to the rest of the world, I'd have to use logic level converters on almost every port.  I didn't like that at all.
I liked the advanced ADC and DAC, but didn't like that 3.3v limitation.

That's nothing to do with Arduino, that's just the modern Arm (and MCU in general) world at the Due's 84 MHz and above.

There are some automotive and industrial Arm and RISC-V MCUs that can do 144 MHz - 192 MHz on 5V now, but not in 2012 when the Due was released.

Hi,

What do you mean it has nothing to do with Arduino?  It's an Arduino board isn't it?
Just because it is 3.3v does not mean it has nothing to do with Arduino.
Maybe you had something else in mind here?

I really, really liked that board a lot, but the 3.3v I/O ports were very hard to deal with in a 5v world.

You can only make Arduino boards (or any other) using chips that are available. If you want a sufficiently high performance CPU then it's going to run at 3.3V (or less) not 5V.

The Due was the first non-AVR Arduino and at the time any Arm over maybe 24 or 48 MHz was 3.3V.

The much later (2023, 11 years later) Arduino UNO R4 and Nano R4 have Arm CPUs running on 5V, but only 48 MHz, so about half the speed of the Due.

Hi,

Yes that makes a LOT of sense.  I guess what I was thinking might be to have the logic level converters built into the board so we don't have to add them.  I realize that would make the board bigger though.  With so many I/O pins it takes a lot of logic level converters.
I read that some uC's have 5v 'tolerate' I/O ports now even though they run on 3.3v, maybe that would be something to look into for me.  Due functionality with 5v tolerate I/O ports would be ideal for some of my stuff.
 

Offline MrAl

  • Super Contributor
  • ***
  • Posts: 2247
Re: Ok I was wrong about Arduino
« Reply #93 on: March 22, 2026, 12:57:04 pm »
But as others have said: 3.3V has been the standard for a LONG time. Even at the time the first Arduino was released, computers had been at 3.3V for years.

If anything could be called a mistake here (which I am not really arguing in earnest), it was Arduino’s “mistake” to release any 5V boards to begin with. In retrospect, it likely would have been smarter to use 3.3V from the start.

I will argue it in earnest. Arduino got it wrong: the whole shebang should have been 3.3V from the beginning. Honestly, having some 3.3V kit and some 5V kit is a bloody nuisance.

Hi,

Yes, that's my point too.  If there are only a few I/O ports being used, no big deal, but when you get into 10's of ports it gets rather crowded with logic level converters.
There are a couple of ports I could use at 3.3v but mostly 5v at least at the time I was working with that board.
 

Offline MrAl

  • Super Contributor
  • ***
  • Posts: 2247
Re: Ok I was wrong about Arduino
« Reply #94 on: March 22, 2026, 12:59:00 pm »

I will argue it in earnest. Arduino got it wrong: the whole shebang should have been 3.3V from the beginning. Honestly, having some 3.3V kit and some 5V kit is a bloody nuisance.

At the time, 5V was a common operating voltage for makers boards like the Arduino, for example Teensy, PICAXE, Basic Stamp and others.

Hi,

Yes, and my view is in retrospect back what could now be 10 years (or something like that).
So it was me going from multiple 5v systems to a 3.3v system.
 


Share me

Digg  Facebook  SlashDot  Delicious  Technorati  Twitter  Google  Yahoo
Smf