Comments on: REBOL, Not for Everyone?
REBOL Technologies

Comments on: REBOL, Not for Everyone?

Carl Sassenrath, CTO
REBOL Technologies
15-Oct-2008 21:55 GMT

Article #0374
Main page || Index || Prior Article [0373] || Next Article [0375] || 66 Comments || Send feedback

Many years ago, when I first released REBOL, I decided to introduce it as a simple approach to programming.

In order to help convince new users, I posted a great number of examples on our website and in the REBOL.org library to prove my point. I wrote simple scripts of all kinds. My motivation was to attract new users to try our unique approach, and the scripts were just the candy.

Of course, although I knew that REBOL scripts were often quite simple, we should be very careful not to invert that statement. The existence of one or more simple scripts does not mean that REBOL itself is simple. No, quite the opposite.

Early on, many programmers who encountered REBOL looked at our simple scripts, and not diving any deeper, concluded that REBOL was too simple. Little did they know. REBOL is one of the deepest languages ever designed.

Since those days, I've glanced over a lot of REBOL code written by a wide variety of programmers, and quite often I'm floored. Many programmers use REBOL like they're writing in C or BASIC. I can spot it in an instant; they did not bother to learn the fundamental concepts of the REBOL language. When I see that kind of code, I wonder why they bothered to use REBOL at all. C is better written in C. You will never hear me contest that fact.

I think it's time to change our message. REBOL is not for everyone. REBOL is advanced. It promotes the concepts of symbolics, context, and environment as powerful tools, going far beyond the traditional ideas of functions, objects, loops, and if statements.

REBOL is for a different breed of programmer. It is for those with open minds; those who are reflective, observant, and those who do not simply bang out any kind of junky code that works, but consider each detail of their design, and sculpt it perfectly as a lasting work of thought.

In REBOLville, we often like to boast, just a bit, about how we wrote a cool reblet that was only 15K or perhaps 50K. Yes, we all love that result. But, I think our love of it isn't just because we built useful applications in less than the typical size of a single web page. Sure, that's fun. But, for many of us, it's more the fact that we can, in the year 2008, easily manage the entire software process: getting it built, finding and fixing the bugs, distributing it to our organizations or friends, and then, a year later, add some nice enhancements, often in just a few minutes. We needed no huge multi-gigabyte, complicated, trouble-prone development system or run time monstrosity.

I think we REBOLers have different priorities, different values. REBOL is for a different kind of programmer. We are of the old school but of the next generation. We want more from our language. Sure, we can write simple scripts, but even better, we can write powerful programs that are the size of simple scripts.

I think it has come time to update our message and website. I should not pretend that REBOL is for everyone. It is not. REBOL is for those who of us who think differently.

Frankly, I would not want it any other way.

66 Comments

Comments:

Brian Hawley
15-Oct-2008 15:44:16
It's about time :)

REBOL can be used by a wide variety of programmers, but not as many seem to use it well. Background in assembly or Lisp family languages seems to help - anywhere that code and data are more interchangeable. Finally getting REBOL is a mind blowing experience though.

It might be time to stop trying for the mass market and start aiming at the kind of programmers that other programmers wish they were. Sometimes you just have to appeal to the cool kids and the rest will follow.

Henrik
15-Oct-2008 16:08:40
Just as long as we don't come off as snobby and self-important. :-)

It matters big time where you come from, that's for sure. Coming from PHP and a tiny bit of C was of no help to me to begin REBOL, so the keywords here are always "Start Over". That was the only way it worked for me.

I've always said that REBOL was never meant to be a sister or suppleant to another language, like most other languages are. It does not pretend to be something it's not. It's its very own. Frankly it deserves its own damn country.

RobertS
15-Oct-2008 16:51:17
Will this mean that more of us within the Rebol community can get access to alpha code as R3 progresses?
RobertS
15-Oct-2008 17:35:43
Wikipedia says: Alpha versions are being released publicly since January 2008
Jerry Tsai
15-Oct-2008 18:58:06
REBOL is not for everyone. It's for every "smart" one. Only smart people like it.
Alan Macleod
15-Oct-2008 20:54:37
I think I'm guilty of using rebol as if it were basic. Not being a real programmer, with some dabbling in basic, pascal, pl1 cobol (and these only in a very basic level and many years ago) I think I really have barely touched the power of rebol...but I'm getting there.

Everyday I learn new things and better ways of reboling. But regardless of my hacked attempts at programming with rebol I'm still doing things with rebol that I would never dream of with C or any other language that I've looked at.

I want my r3 + vid3.4!

Louis A. Turk
15-Oct-2008 22:42:05
REBOL is not for dead people---that is for sure! It isn't for the non-programmer types who don't have a computer either. But I think most live programmer people would think it is great if they would only give it a fair try. REBOL opens up lots of new possibilities, especially for people who are pressed for time. It is true that one needs to read the manual to learn the cutting-edge concepts of REBOL, but once you learn REBOL you will never be able to give it up completely. It is a tool that can easily do many things most other tools can't do at all.
-pekr-
16-Oct-2008 0:40:02
But - do we really need to change the message? I can understand provided arguments, but I can't understand how they influence possible new users. Will we state now something like "think different"?
DideC
16-Oct-2008 1:20:26
We have to do our marketing like Apple does.

The current apple's ads campaign could be copy paste to a Rebol one.

Pick a 200Kg guy to play the DotNet edge and a brand young 20Kg 10 years old boy (or girl) to play Rebol edge. What they can say is let to the reader as an exercice ;-)

yeksoon
16-Oct-2008 1:50:47
maybe it's the other way.

REBOL is for everyone, but not everyone is suitable for REBOL.

And this can be for a variety of reasons. Eg. the company does not allow it as an 'approved' language.

Or, like Carl have said, the developers are still not writing it in the 'REBOL way'.

Maarten
16-Oct-2008 2:08:54
REBOL scales your thoughts, so your ugly thoughts as well...

That's why it's embarrassing to use for some people (or in some cases; sometimes I look at my code and redesign and am ashamed of the previous version).

Yes, REBOL is not for everyone, but... you don't need that many programmers in most cases!

DocKimbel
16-Oct-2008 2:48:33
I'd like to quote Reichart : "...Finally!"

Pekr, I agree, "Think different" could have been REBOL baseline from the beginning.

The message might be clear for long time rebolers but not really for others developers (even highly skilled). That's why I'm a little disappointed that you didn't add a few simple examples to make the point understood by everyone and show the power of REBOL semantics. Maybe with something like this :

C way:

if a > 3 [
    return "a greater than 3"
]
if b < 10 [
    return "b is a lesser than 10"
]
if ... [
    ...
]
(...long list of IF statements)

REBOL way :

foreach [condition msg][
    [a > 3]  "a greater than 3"
    [b < 10] "b is a lesser than 10"
    ...		 ...
][
    if condition [return msg]
]

REBOL master way :

foreach [condition msg] load http://site.com/facts.r [
    if condition [return msg]
]

That's just a quickly thought example, I guess that we can come up with much better ones.

Robert
16-Oct-2008 3:01:40
If it's for everyone or not, who cares? I don't think that's the message to use.

Carl, you mentioned (from my POV) the main message: Rebol is dense on the language level. You can say a lot with a few words. If you can structure your thoughts precisely, you can write them down precisely. No bla-bla bloat needed.

And this will make your development process and setup a no-brainer. Just type it! Just deliver it!

Rebol eliminates non-value complexity from your work and environment. It raises productivty. What else do you want?

Ashley
16-Oct-2008 3:50:17
I think some people are predisposed to 'getting' REBOL. You double-click rebview.exe, write a few lines of code and they say "WOW" when they extrapolate what else can be done ... whilst others will say, "Big deal, I can do the same thing in [insert current fad here]".

These same folks get no joy out of writing and rewriting code, whereas I think the true REBOLer enjoys rewriting code just to see how small/elegant they can get it. It's the difference between a technician and an artist.

Peter Wood
16-Oct-2008 4:02:56
As Rebol isn't for everyone and definitely isn't a C replacement, perhaps Rebol 3 would be a good opportunity for Rebol to rid itself of those unRebolish C-like infix functions.

Strict left to right evaluation will help with thinking differently!

jankoM
16-Oct-2008 4:51:31
I am using Rebol here and there for long time, but I am sure I use only small fraction of what is possible with it's interesting properties like code is data and data is code, dialecting and so on... examples would surely be interesting and beneficial to read.
DocKimbel
16-Oct-2008 5:04:57
Correcting a mistake in my examples :
if do condition [...
"...those unRebolish C-like infix functions." Infix functions are necessary to easily represent math expressions, it's not C related.

"1 + 2 - 5 * 10" is way more simplier to understand than "multiply subtract add 1 2 5 10".

s wall
16-Oct-2008 6:40:56
DocKimbel, wouldn't the following code be an improvement on readability for your example of the Rebol way:
print case [
    a > 3 ["a greater than 3"]
    b < 10 ["b less than 10"]
    true ["neither is true"]
]
The most difficult part of learning Rebol is unlearning previous programming habits and techniques. Hence, I would agree that Rebol is not suitable for creatures of habit who don't want to learn new things.
DocKimbel
16-Oct-2008 7:26:43
CASE is a control structure you can find in most other languages, nothing special about it in REBOL.

I wanted to put the emphasis on the "code is data, data is code" paradigm which allow new levels of code factorization and simplification by promoting more declarative approaches (dialects, metaprogramming,...).

-pekr-
16-Oct-2008 8:05:57
Doc - the most interesting one-liner is your example in mysql docs:

; The most powerful 1-line script ! ;-) foreach row read/custom mysql://root(at)localhost/books ["SELECT * FROM authors"] [print row]

RobertS
16-Oct-2008 8:52:06
SNOBOL and ICON did want to be for everyone. Smalltalk, Prolog and some LISP variants seem to have accepted that they are not for everyone. I am finding that CURL is not for every Java or C++ developer on our staff. But our experience in telecom was that some non-developers with business knowledge "got" Smalltalk. And that sometimes happens with Prolog. There was even an ICON book for humanities scholars. Alan Kay and OLPC still think that Squeak Smalltalk is for everyone. But lovely Dolphin Smalltalk has failed utterly to penetrate the VB windows market. This does not seem to worry the team at falconpl.org or Laurie Tratt at convergepl.org It is not a worry for pythonistas that not everyone using python writes pythonic code. Spam-n-eggs is not for all. And we are still waiting for Perl6. In the early days of Smalltalk, COBOL developers in banking app's would try to put the whole program in one method. I am not kidding. But some big banks are still using Smalltalk and one big nation-wide US bank just started a new major Smalltalk initiative here in the midwest.
EyeAm
16-Oct-2008 9:33:34
REBOL should have taken those 'scripts' further, and appealed to the masses of regular computer-, PDA-, and phone-users out there, allowing them to build applications as easy as putting together LEGO blocks or linking-logs. A 'widget OS', if you will. There are more people who are not programmers than there are programmers in this world--to give them the means to 'write their own application' in a way that is not programming...would empower them beyond any other OS on the planet.

I always thought REBOL could have approached this--with the real programmers behind the scenes writing these tools. People know how to screw a nut onto a bolt, and tighten it. There are those who make the nuts and bolts and screwdrivers, and we rarely hear of them. I liken those people to what the real REBOL programmers could be. The underside of things. Under the hood, so to speak. But a REBOL package to the average person could consist of the nuts and bolts and screwdriver. MOST people will *NEVER* learn programming. This is a fact. But those people should be the market. Otherwise, why bother?

If it could ever get to where your mother can 'write a program' (read: not in the traditional way, but in a way like "Hey, check out this 'program' I came up with for sorting my recipes" kind of way, then you'd have something).

[window] + determining its size and color and shape + [form] and what it contains. Drag in a few commands, a [Submit] button... make it easy for a person to design the end software application product they have in mind, and let them make it do what they see it doing in their mind, and let them turn it into an executable to share on another computer or phone or PDA. The world might suddenly fill up with dumb applications, or redundant applications, but it would also contain some pretty cool new ones. Dumb it down for the masses, but in a way that equates to the same thing as if a real programmer did it all.

I know about VisualBasic, etc... But none of that is there yet. It should be as easy, or easier, than someone setting up a webpage and doing simple html. But perhaps more visual than the source code of that. It should also be WYSIWYG. An application-creation engine, from which standalone executables can spring.

--EyeAm

http://www.myspace.com/foadiyops

Carl Read
16-Oct-2008 12:59:35
It's a given that REBOL's not for everyone, as not only is programming not for everyone, but neither are computers or typing.

I'd say ignore trying to guess who it's for and instead just write clear and comprehensive docs, complete with good examples. The Users Guide was a good start - except for it not having a word index.

But what'll attract people most is good real-world examples of it in use. One way to do that is to have the REBOL website written in both HTML and REBOL. (With both running in the browser, of course.) Apart from this encouraging them to install the plugin, it'll also show them how much more responsive REBOL is compared to AJAX or lesser versions of websites. (If you can get them to bother installing the plugin.)

s wall
16-Oct-2008 13:19:23
Doc, I realized that you were probably trying to show something like that. However, if you're trying to show off what Rebol can do, the example should be one that is not easily accomplished in other languages and it should definitely be simpler to understand.

I think that you were right when you said "I guess that we can come up with much better ones".

James_Nak
16-Oct-2008 15:02:25
Deja Vu. Commodore Amiga went the same route for a marketing season: "The Computer for the Creative Mind."

Rebol obviously isn't for everyone but is it also due to its limitations, perceived or real, and not just because Rebolers think a different way? I would like Rebol to be competitive and to beckon others to use it because one can do so many things with it. Perhaps an honest discussion of what we can do and what can't be done versus other languages would be in order. That may prove to validate why more people don't use it.

To use lessons from the Amiga, most of us tried really hard to get others to adopt it, just like Rebol, right? For me the largest barrier (and it was my job to sell them) was that it could not run the software that most people used at the time. In the a similar vein, it's what Rebol can't do (as compared to .Net for example) that seems to keep my colleagues at a distance.

Allen
16-Oct-2008 19:06:55
REBOL attracts & keeps coder poets. As long as there are enough in that segment willing to buy to keep Carl & RT fed then there is no issue with being niche. REBOL can survive & prosper in its long tail niche.
Shadwolf
17-Oct-2008 4:23:17
Coding rebol in a C syntaxe where is the problem ?

I'm sorry Carl but if I have to loose my time packing my scripts codes into contexts I prefere use .NET or java.

Why I should use ton of codes where a single line of code is enough.

The beauty of rebol is to bring easy implementation beeing for VID or anything else I like little code big effects.

And the contrary (big code small effects) doesn't interrest me.

Most of the coders prefere sink the people saying they are doing Hard stuffs while they are not. That's to justify to their boss the amount of time they spend on a project. So in that optic if you come with rebol able to do the same in 100 less time and code obviously you are not interresting them.

Shadwolf
17-Oct-2008 4:42:49
Most of the people registred in Altme and discussing dailly about rebol and how to sharpen script coding with it are not absolutly not new comers to computing area. So the statement that says rebol only attracts not professionnal is wrong. But if those professionnals can see the beauty of "Keep it simple" idea I mean you didn't loosed your time. And most of the people talking on Alt Me have a deep conserns and interrest in what is rebol, what can be rebol or what rebol should be.

But then there is another problem Why people are not largerly interrested for rebol? Many are the answer possible. - Lack of High level documentations. For example I learn more on parse looking to your Makedoc.r than loocking to the poor documentation you write on rebol.com about parse. But then how many people will do the effort to seek for a full example using parse (like makedoc.r),will try to understand it as it and will try then to adapt it to their needs? As far As I know only few people went through that process. I took parse because it's the most significant coding tool into rebol. And parse is what makes rebol such a special language able to create dialects on top of it. So if for such an immportant poing into rebol you have no understanding of it for a large number of people. How do you expect to attract people to do more REBOLish code ??

- Altme not allowing people to come freely and discuss like an IRC server would allowed it for example. Or like a forum would allow it. - Designing internal limitation due to the nature of an interpreted language having flexible and unusual data types. wich make it really a pain to write extension to the REBOL VM using external DLL.

Luis
17-Oct-2008 6:33:02
What of those looking around for a programming language to fit them? Wouldn't they be put off, even _starting_, by stating that it's 'exclusive'?

I think you shouldn't lose track of fresh minds to programming by hoping that the well versed are the only ones capable of learning it.

Cheers,

Luis.

Jaffa
17-Oct-2008 8:31:38
Another reason why Rebol should work flawlessly on Macs.
Boyko Bantchev
17-Oct-2008 13:38:43
I think you shouldn't lose track of fresh minds to programming by hoping that the well versed are the only ones capable of learning it.

I don't think Carl said or meant that. Instead, here is what he wrote:

It is for those with open minds; those who are reflective, observant, and those who do not simply bang out any kind of junky code that works, but consider each detail of their design, and sculpt it perfectly as a lasting work of thought..’

And the following sentence stroke me as an aphorism; why not a motto for REBOL:

We are of the old school but of the next generation.

Greg Schofield
17-Oct-2008 16:44:56
For what it is worth, I like the direction of this article. REBOL is not easy, not for a non-programmer like me.

It is however flexible, recently I used and slightly patched the code39.r script, to integrate unique identities into the publishing we do at work. It took some time to do (it was very simple really), but I did it and it works well -- I still don't properly understand how the author transformed a bitset into a bit map, but it is early days for me at least.

Just because REBOL is complex and powerful, need not mean that it is not for everyone.

I still strongly suggest that it is worth thinking about a REBOLsimple dialect, for simple scripts for the less expert.

REBOLish in superficial ways, but unREBOLish fundamentally, that is a dialect that is "the traditional ideas of functions, objects, loops, and if statements".

Greg Schofield
17-Oct-2008 17:00:10
PS EyeAm's suggestion is a very good one, which I overlooked when writing my comment above.

Perhaps a REBOLsimple dialect could underwrite REBOLappLego?

I know thoughts are concentrated at the R3 end of things, and Carl's article, in some respects, must stem from this. He is right about real REBOL, and that its future lies in major applications rather than scriptlets.

However, and dialects are central to this, REBOL is not limited it can support a lot of different things.

EyeAm
17-Oct-2008 19:06:51
I should not pretend that REBOL is for everyone. It is not. REBOL is for those who of us who think differently.--Carl Sassenrath

Every day, people somewhere in the world go to the store to get a ream of paper. A pad, a ream, a notebook; whatever. They're the end-using consumers of something that starts all the way back to the forest, *naturally* (pun intended), but there are those who cut the trees down and those who haul off the shewn-limbed logs down the highway to the pulp mill. The trees get cut, the refuse gets pulverized, chemicals get added... All sorts of things happen from the time the trees are cut, before they are ever put into a different form we find at the store. There are workers we never see, working in the mills (because that is their thing), working on the wood, turning it into 4x8 sheets of plywood, or else paper products. And then there are others who buy such things and use them like tools--to build a house or project, if wood; or to type on.

The point is...I think the computer programmers are closer to the trees and the mill. It's a decidedly smaller group of people. But essential. The end-using consumers don't have to cut down the tree, nor process it, to get the 4x8 sheet of plywood or paper products. But they pick up things downstream.

There is *business* all up and down the stream, from start to finish. Even some ironies, that the people who work with the trees and mill, utilize paper products (or read books printed on what came from them).

There is the abundance (used loosely) of code, and then a reduction (in the form of commands). If the commands are further processed, there can be templates (grouping commonly used things together). I'm sure the rest can be seen, as far as the metaphor goes.

But where do the creators of REBOL see the spotlight of focus, upon that 'stream'? Closer to the trees and mill? Or closer to the people?

Surely, programmers who work with REBOL have an eye toward creating scripts or apps for others (downstream). So they probably have it in mind to be their own business (utilizing REBOL for their business, and creating things for others). Maybe REBOL caters more to them, or maybe it wants to (also) address the larger crowd further down. If the latter, things have to be processed more--the 'tools' more refined.

Alphabet...Words...Sentence...Paragraph

(coders)...(businesses)...(average person)

(entire underside of REBOL code)...(scriptlets)...(templates|apps)

Some inspiration, anyway.

Carl Read
18-Oct-2008 17:33:36
Re Doc Kimbel's "how to think differently" example.

Just showing a better way doesn't explain how the thinking's different. But the problem's a good example of REBOL's "data is code" and "code is data".

So how to approach the problem or similar ones? Where possible, try placing all your data in a block first and in the most minimal way. ie...

[
    a > 3 "a greater than 3"
    b < 10 "b is less than 10"
]

And there, what some would consider code - the 'a > 3' and 'b < 3' is treated as data. And having done that, you can then look for the best way to get the result you want, which would appear to be CASE for the result Doc was after. (And incidentally, if it's just strings you want to return, they don't need to be in blocks like with S Wall's example.) But there's other approaches that could be considered REBOL-like if CASE wasn't available, including PARSE.

So, the most minimal approach would seem to be...

 case [
    a > 3 "a greater than 3"
    b < 10 "b is less than 10"
]
Sunanda
19-Oct-2008 0:27:28
not simply bang out any kind of junky code that works, but consider each detail of their design, and sculpt it perfectly as a lasting work of thought.

Hmm, some rebollers may be attracted by that vision. Others will be attracted by the language's other well-defined qualities: compactness, cross-platform, supportive community, elegant semantics, etc.

For me, it helps solve real business problems more helpfully than other languages I have used in the last decade.

I am happy to say that I often bang out any kind of junky code that works in REBOL. But for me that can be an advantage -- the key phrase I am seeing there is that works -- REBOL is pretty solid in most of its implementations, and I can trust it to do what I want.

And REBOL is a tool that I use not a lifestyle choice. As an example, a couple of days ago I made a fairly major change to a business application I built in REBOL. I'd promised the change for the end of the day, but mid-afternoon I was getting bogged down in a change to a parse that was failing some extreme edge-case test conditions.

If I'd failed to think deeply enough about the problem. I might have shipped with the bug enabled -- thinking it probably did not matter.

If I'd followed the advice in the post sculpt it perfectly as a lasting work of thought I would have spent many more hours on the parse, and missed my deadline.

As it was, I applied deep thought in a way relevant to the problem domain -- how do I ship this code bug free by the end of the day? I added some whitespace to the string before parsing it. That passed all test conditions.

Not elegant from a pure programming perspective, true. But highly effective in delivering a bug-free business solution on time.

Thanks REBOL for making that possible. That's one of the reasons I use the language.

Maarten
19-Oct-2008 3:07:38
Sunanda, that's very true. The point in "junky code that works" may very well be in "under all desired circumstances".

OTOH: you are arware of the compromise, so it is a conscious decision. Sadly, that's often not the case.

Luca
19-Oct-2008 12:24:22
Of course Rebol is not for everyone !! Like C (or whatever) is not for everyone.

Rebol *MUST* be properly advertised among the IT industry, so that programmers see the benefits of it over other languages.

I emphasized "MUST", because after 10 years of existance, Rebol is still not so widespread as it should; thats a SAD fact!

(at)Carl Sassenrath:

a marketing division is highly needed at Rebol Technologies!

dloader
20-Oct-2008 2:17:20
yeah but where are the good document that shows the deep stuff in REBOL?
EyeAm
20-Oct-2008 12:44:10
(at)Luca Hey, shouldn't that be marketing *addition*? :-D
Boyko
21-Oct-2008 1:55:42
(at)Luca Hey, shouldn't that be marketing *addition*? :-D

... or a marketing *dialect* ;)

DocKimbel
21-Oct-2008 3:43:14
Re Carl Read: "which would appear to be CASE for the result Doc was after"

No, as "s wall", you missed my point. I should blame myself for not having well commented my examples. It's not about getting the smaller possible code, it's about what makes REBOL different. My examples shouldn't have been taken too literally, the point was to compare the code flow between someone thinking "C" and someone thinking "REBOL", I wasn't trying to optimize the code to make it smaller or faster. It's deeper than that.

The "REBOL way" example goal was to show that REBOL shines in declarative approach. The point was really that, show that "code is data, data is code" is a natural way of thinking in REBOL because, moving to a declarative approach, when facing code complexity, is easily done in REBOL (more easily, I think, than in most other languages).

Declarative approach allows the programmer to simplify its code (and reduce its size, as a side effect) by replacing code with data. Why would a developer do that ? Because, it's easier and cheaper, to add or change data than code. There's other gains also, like better readability or reduced code size.

As a symbolic language and meta-circular interpreter, REBOL is best suited for such kind of job (it's not the only one, thought) because it is its own data format. See how other languages use XML or other more exotic formats to achieve what REBOL does simply and natively.

By the way, declarative programming often ends up at defining a DSL (Domain Specific Language aka "dialect").

The "REBOL master way" was a variation of the previous example not to show that code can be smaller, but to show that REBOL code can be mobile. This is another important aspect of REBOL : lightweight distributed computing. Again, this can be done in other languages, but no one I know can do it so simply and efficiently (thanks mostly to the previous point, and to the deep and clean port integration). Lot of languages have a DO similar feature (think Eval( )), but how many have a LOAD/MOLD equivalent buit-in ?

About CASE example :

case [
    a > 3 "a greater than 3"
    b < 10 "b is less than 10"
]

Removing the brackets is just syntactic sugar. If instead of just returning a string you had to do some processing, your example would very much look like "C". So, for making the point about "code is data, data is code", I don't think that's a good example, it's a too specific one. From a practical POV in the same situation, I'll code the same as you to produce optimal code, but it's not about that. I could have taken a more complex example where CASE couldn't be used, but I guess it would have been even less understood. That's why I was calling for Carl to make some nice ones.

I'm not saying that imperative programming is bad, I'm just saying that in the general case, whenever it's "better" to replace it with declarative programming, you should do it, that's the "REBOL way", in my very humble opinion and that's what my example was trying to show.

Obviously, everybody is free to use its own coding style, and REBOL has a lot of nice features other than that, to keep developers pleased, but how many have really looked over the surface of the lake to see how deep it can be ?

I'm not sure that I succeeded to enlight my examples and my POV, but at least, I tried.

Cal
22-Oct-2008 17:40:58
REBOL is not for everyone, REBOL is for experts.

I build houses. I build fine houses. Do the new owners satisfy me? Well...its none of my business is it.

For me, REBOL is a hobby. I am not a professional programmer. I took one short course in COBOL, 30 years ago. I post some scripts if I think they might be useful to other non experts. Sure, they might confuse some, as if the script produced by some experts doesn't confuse just about everyone.

Rebol Technologies has the great opportunity to run with 2 products, each with its own independent website.

Rebol 2.7 could be the intro path to REBOL.

R3, marketed as the expert level REBOL.

Then the elite programmers can get on with it and the rest of us can work with Rebol 2.7

From time to time, I too wonder about some of the apprentices and a few tradesmen as well. All I ask is that they do their best in the time that we have.

Norman
22-Oct-2008 23:52:32
Carl..turn it around... Would C be for everyone If Rebol would have been developed in 1970 ?

Rebol is for everyone!

Brian Hawley
22-Oct-2008 23:53:03
Cal, that may not work. R2.7 is only easy on a surface level, and will likely not be as easy to use as R3. Keep in mind that this once R3 comes out :)

The main reason R3 may be easier than R2 is because of the thought we are putting into cleaning up the semantics of the language. You can write simple code in either REBOL without needing to know too much about the internals, but there comes a point where you really need to know or you will get tripped up by them. You reach that point a lot faster with R2 because some of those internals are really weird in a way that can trip you up if you don't expect it (like function semantics). Many of these details are much less weird in R3, and less likely to trip you up. More powerful too.

REBOL 2.7 and 3 are going to coexist for a while, and they will be marketed differently. R2 will be for legacy code and obsolete platform support (basically any platform without Unicode). R3 will be for new code, the intro path for those new to REBOL, and easier to use. Experts can write advanced code for either platform, but newbies will be able to do more with R3.

Brian Hawley
23-Oct-2008 0:02:50
There is no programming language for everyone. For one thing, programming languages are for people who can program or even want to, and that is a tiny subset of everyone.

Any time you try to make a language of any kind for everyone you will fail - it won't be appropriate for someone. This will even be the case if you limit it to programmers, there will always be people that aren't in the natural market for the language.

There is no shame in this. So accept life the way it is, and take advantage of the situation.

Greg Schofield
23-Oct-2008 1:43:57
Any time you try to make a language of any kind for everyone you will fail - it won't be appropriate for someone.

I don't think anyone meant this so literally. But it is worth clarifying what should be meant.

Many programmers are quite happy with the languages they know etc.,. And the idea of designing a single language that appeals to "everyone" at all levels is not possible IMHO

But a language that can support other versions of itself, and could, if well thought out, do so in a way that leads to a deeper and better understanding its underlying power and elegance -- well that is something that Rebol is well suited to take on.

Rebol could support any number of levels of use through dialecting, it could be a tool for the heavy programmer as well as the weekend scriptor, more importantly to the frustrated user who just wants some of their apps behaving better.

Carl mentioned Modules in another article. Damn good idea, damn easy way to bring powerful and well written code into otherwise sloppy thrown together scripts (my usual standard). He also mentioned serious apps in this article, another area Rebol could make a big impact with people who would never look at a script.

To my mind these things go together neatly, especially with highly modulated application design.

Endo
24-Oct-2008 5:28:20
I'm using Rebol for a few years and I have programming knowledge of many different languages like: 6502 Asm, 68000 Asm, C, Php, Perl, VB6, .NET. The most difficult part of learning Rebol was I couldn't left my old habits comming from other languages.

I perfectly understand what DocKimbel means, and I guess someone (Carl or another Rebol master) should teach how to think in Rebol, not how to code in Rebol, in a comparative way just like DocKimbel's example.

This is not just examine the scripts of someone else, because not all scripts have been written to teach that. It should be a web site or a document?

Hostile Fork
29-Oct-2008 6:32:18
Presenting REBOL as "simple" or "easy" is definitely a red herring. Especially because it's just not true!

Case in point: A friend who *never programmed before* just got into VBA two months ago for her job and loves it. A few lines of Visual Basic for Applications can grab data out of Excel, graph it, poke the graph into a Word document, attach it to an email, and so on. Plus, the code will be readable to anyone who's ever read code. Yet she can neither read nor write REBOL, she finds it very confusing and I'm not surprised! LISP is not so easy for most people to use either despite its "simplicity".

What *is* true is that REBOL is more internally consistent and parsimonious ("RISC") than other languages+libraries one can practically write modern programs with. The language will appeal to people who demand consistency and composability.

(Sadly, even some of our iconic teaching tools of those values are failing us in modern times! For instance, LEGO makes an alligator with 3 parts—jaw, body, tail—that have almost no useful interaction with any other pieces.)

I think it's time for REBOL to own up to its true nature. Which isn't saying "REBOL is like the Matrix, you see it or you don't"...that might sound mysterious, but it provides no information AND will be a turn off for expert programmers (who don't like being talked down to). More persuasive is to emphasize REBOL's distinct vision of the future. It has to do with programming-as-art, turtles-all-the-way-down, and the careful impedence matching of written/typed language with the formalism needed for computer understanding.

Greg Schofield
29-Oct-2008 14:41:57
Spot on Hostile Fork!

For the first time I had to deal with Visual Basic for work (I am a researcher). The government philosophy is MS only in OS and apps. VB made some things very easy indeed there is no doubt about that. However, go one step further than than intended by the language design (if design is the appropriate term) and things get very messy and very rapidly.

Ugly work arounds is not just a problem with VB. It effects just how well people like your friend and me can get practical things running well. There is a flow-on effect, work arounds in code lead to work arounds in software implementation. Steps ahead are hedged with other sets of limitations, one of which is a code base that is not very adaptable and where "improvements" add to clutter.

My resent Stytlehseet manager is perfectly readable for the bits I have written, but the things that made it work practically (positioning dialogs, "lifting" Word's scrollbars, taking off the dialog title bars and close button etc.,.) introduced code blocks that are virtually unreadable. This would not have been a problem if they were modules, but they are function code slapped in with the rest.

I have had similar problems with other scripting languages. Fine for doing some things, hopeless for others and only a hair's breath line between the two (based on readability, simplicity, and manageability).

Rebol would seem to have all these problems in spades for the weekend scriptor. Rebol is damn hard and very different, I find it hard to follow even fairly simple scripts written in it. However, they are not incurable!

In fact the reason I was attracted to Rebol (after two abandoned attempts to cope with it, and on two occasions rejecting it in favour of LAU) have got stronger with even a little extra experience --- dialects!

For instance I really want someone to make Rebol to link into OpenOffice 3 (through the UNO interface). Not because OpenOffice bloatware is the way to go, nor because Rebol would suddenly replace VB for controlling the app. But because it opens a window to demonstrate modulation and dialects that can produce elegant code doing practical things in the hands of people like myself.

If Rebol can think of itself in terms of pure and low level classic Rebol, supporting higher level "environments" and language groups, and maintain a superficial consistency in general syntax and tokens to make progression into is more powerful aspects, then we have something for everyone.

I know that VID is a hard coded dialect, I am not suggesting fiddling with Rebol 3 at that level. But VID is an outstanding example of dialects working powerfully. Compared to VID other dialects would need to do much simpler things.

I am not capable of doing it, but consider OpenOffice as test case. A Rebol dialect devoted merely to gaining clear and easy access to everything in the suite. Need to introduce something else, to go a few steps further than that, well modules/function scripts should be a neat and powerful way to extend functionality even for those that cannot read real Rebol all that well.

If designed elegantly, your friend might never look at VB again (MS Wrord, is not open enough to support third party languages from what I can make out).

Aiden Young
9-Nov-2008 13:46:46
I've had a copy of Rebol on my hard drive ever since the book "REBOL: The Official Guide" came out.

I read the book, followed the examples etc and ended up using "main-stream" languages for a living ( C++/Java/PHP/Perl )

I've spent a great deal of my life with embedded systems and I still remember the times when you could have a Comms package, word processor etc in 32KB of code...

So when I first came across Rebol I was extremely excited. I thought, here is a language that is small, fast and hardly needs any system resources.

However, I cant help myself thinking about FORTH every time I look at Rebol...

It's small, fast and hardly needs any system resources.

Would I write a full-blown application in it? No!

I find that the same is true for Rebol...

It is an exciting language, however, I cant help thinking that it is only really suitable for one-liners, perhaps one-pagers.

So far I have not seen any large projects implemented in Rebol.

The examples that we all come across, including those for VID, are great.

However, they seem to promote an "false simplicity" and practicality.

After reading those examples one thinks that Rebol is the answer to a programmer's every needs.

Yet nobody seems to be confident enough with it to implement anything of "use."

Why cant we see say a full-featured CRM system in Rebol or even a Outlook Express like email client or even say an Xnview like graphics package?

My guess is that the problem is not simply with the way programmers think but rather the language itself.

If people had to change their way of thinking about a hammer to suite a hammer would we be using one?

If a language needs people to change their way of thinking rather then fit in with people, can it ever be a successful one? See what happened to FORTH!

For the time being, I will still return to using Rebol, however, only for "quick and dirty one-liners" that I can do in a couple of minutes, or at least sooner than VS2008 gets to the "Start up" page...

Please do not misunderstand me, I still have a soft-spot for Rebol, that is why I'm at this site and that is why I still hope that someone can "put me right" :-)

A.

Shawn Berney
19-Nov-2008 9:36:56
Well, Aiden, I think I understand you dilemna... But perhaps a different approach may yield some insight - but please keep in mind that I am a newbie to this world, so view my advice with some skepticism...

I perceive the lack of Rebol use more as a symptom of a world where centralized control and efficiency (versus effectiveness) are currently king. I don't think rebol should compete with the many established languages of this nature. But rather, it should build on its ability to remain context dependent (the relative expression portion of the language).

The interesting thing about relative expressions is that - wait for it - you need to have something to relate them to... That is to say that relative expressions are really good at aggregating data, managing I/O streams, and the like. To me this is the really exciting stuff in Rebol.

I think this is exciting because I am a firm believer in the power of Service Oriented Architectures and distributed computing. However, SOA and distributed computing does not scale well in a centralized manner. That is to say, if you try to build a large application designed around large data set collection and analysis for disparate systems, you need to have access to large data collections and disparate systems... Most data today is stuck in legacy SQL based systems that are static, difficult to change, and tightly controlled.

If it was an incremental innovation, I suspect people would not think of it as Revolutionary / Rebolutionary...

From the newbie in the corner...

SB

Eric
20-Nov-2008 8:43:20
So far I have not seen any large projects implemented in Rebol.

Altme client and server: www.altme.com/

Cheyenne webserver: cheyenne-server.org/

IOS private networking: www.rebol.com/ios-intro.html

Synapse direct medical records system: synapsedirect.com

Recruiting system for Belgium armed forces: rebol.org/ml-display-message.r?m=rmlMYTS

Cerebrus email spam detector: compkarori.com/cerebrus/

Aiden
24-Nov-2008 6:35:39
Hi Eric,

Thanks for the suggestions. I did actually go through the links and I still feel that I would not want to write a full-blown app in Rebol.

Here is a quote from the Belgian Armed Forces site

"The core system has been written in REBOL and the GUI is DHTML, Java and Javascript -based. The data are kept into a (first try but functional) REBOL-made OODBMS."

Why not *all* in Rebol?

Why go from one extreme ( Rebol ) to the other ( Java ) to implement a system?

I also wonder what development system/language they'd use today if they had to create the same system from scratch?

I bet it would not be Rebol.

Most of the apps mentioned above could easily be written in any of the "alternative mainstream languages" Perl/Python/Php/Tcl etc if one did not want to go with the usual UI driven development tools :-)

In the 70's FORTH was the "Rebol of the day" and it's users claimed the same benefits of using it as Rebol users do today. Small, efficient etc.

The fact is that if the Internet existed back then, then FORTH would have done all that Rebol does today except "dialects" would still be called "dictionaries."

However, there is a reason why FORTH is not popular any more why there are no books on FORTH ( or Rebol for that matter ) in any bookstores.

Both FORTH and Rebol forces people to think in a "non-natural" way which is fine for 5 - 25 lines of code but not for 5 - 25 pages.

And therefore I think that the title for the thread should really have been "REBOL, Not for Every Application?" instead of what it is...

A.

Evgueni
15-Dec-2008 5:30:28
Hello Karl,

You say
"C is better written in C. You will never hear me contest that fact"
The never is a very long time.
The C language is slowly turning into a portable assembler with the main feature/attraction of close match to underlying hardware.
I envision a day when the high-level language (like a Rebol) with generate C as its backend, and it will be actually better to write in the high-lavel language than in C (at least for CPU/memory intensive applications).
Actually, I'm currently looking into implementation of such a thing for personal use (to the tune of - the programmer should write his/her own tools).
Ratio
25-Jul-2009 12:17:22
I wanted to put the emphasis on the "code is data, data is code" paradigm.

Sorry, DocKimble. What you emphasize is logically, i.e. absolutely wrong.

Neither is data code nor code data. Data and code are per se totally different things.

Even more: Potatoes are just Data, pure facts, nothing else.

Handling potatoes (buying, cooking, eating, planting, even adding or displaying potatoes) is quite another issue.

Your POV is btw the old confusing error underlying OOP (which in other respects might have some - not really convincing - advantages).

Ratio

DocKimbel
27-Jul-2009 3:23:01
(at)Ratio: I'm not sure to get your point regarding OOP, potatoes and code/data equivalence (which seems to me more a Lisp heritage than OOP related, btw).

The concepts discussed here should be taken in the REBOL language context. To make my point more tangible, do you think that the following REBOL line is code or data?

[print "hello world"]
Ratio
28-Jul-2009 18:58:09
(at) DocKimbel, you ask me

do you think that the following REBOL line is code or data?

[print "hello world"]

Maybe I misunderstand your question.

For me it's just a line of code, isn't it?

"Print" is a function, "hello.." a character string constant.

btw: Each line of any code is code, in whatever language and whatever the line contains.

Ratio

Ratio
28-Jul-2009 19:14:06
"New thinking" is not necessary, Carl.

For me, responsible for a large commercial application, REBOL's advantages are (only) the extremely powerful, ingenious functions, esp. in the graphical area useable for GUIs.

But REBOL syntax and documenation are not very attractive, often hardly to understand or to memorize esp. for beginners.

Function names like the native "Reduce" to evaluate something is e.g. very misleading, hardly to understand or to keep in mind. There are lots of examples in this respect.

form - Converts a value to a string.

reform - Forms a reduced block and returns a string.

mold - Converts a value to a REBOL-readable string.

remold - Molds a reduced block and returns a string.

reduce - Evaluates an expression or block expressions and returns the result.

compose - Evaluates a block of expressions, only evaluating parens, and returns a block.

do - Evaluates a block, file, URL, function, word, or any other value.

etc.pp.

-------------

Difficult function calls

Aside the function names, the fúnction calls are also a problem:

Forgetting that I never saw the notion "Refinements" for options, writing function calls via func/refinement/refinement params refinement refinement see http://www.rebol.com/docs/core23/rebolcore-9.html

is another severe complication.

In all higher languages I know and I am using function calls are MUCH EASIER:

You just use or omit the optional parameters.

That's much easier, isn't it?

-----------------

Another problem:

Quite a lot of potential users surely miss help to migrate with their applications.

So far as I' am concerned: I spent many many hours with REBOL. But I did not succeed to use only any parts of REBOL, eg the function request.

This, in short, might explain quite a lot you deplore in your article, Carl.

Ratio

Henrik
29-Jul-2009 2:04:55
Ratio:

For me it's just a line of code, isn't it?

"Print" is a function, "hello.." a character string constant.

btw: Each line of any code is code, in whatever language and whatever the line contains.

In REBOL, code and data are in fact the same thing, but everything starts out as data. Then you optionally select a context for their use. You can choose to use it as either code or keep them as data. This is a very fundamental idea of REBOL, that is very important to learn.

Function names like the native "Reduce" to evaluate something is e.g. very misleading, hardly to understand or to keep in mind. There are lots of examples in this respect.

...

Quite a lot of potential users surely miss help to migrate with their applications.

So far as I' am concerned: I spent many many hours with REBOL. But I did not succeed to use only any parts of REBOL, eg the function request.

Ratio, what languages do you use in daily life?

What I see for some beginners, is that they try to learn REBOL by learning the functions by heart, rather than trying to understand the underlying philosophy of the language. It's a bit like learning some English words without learning the grammar.

The end result is that using REBOL becomes a wrestling match, rather than the elegant dance it's intended to be, and eventually give up, because function refinements are a silly concept and that optional arguments are much easier in other languages. :-)

What impressed you was obviously some easy examples with VID, but something as elegant and simple as VID is not possible without how REBOL is designed. Think about that. :-)

It's also easy to tell, if beginners have used languages like PHP or Java before, because their programs are structured in entirely different ways than what is optimal for REBOL. They have not "gotten" REBOL yet.

If they "get" REBOL, they should be asking questions about dialects, contexts or bindings, rather than wondering about function names.

If you get into Carl's frame of mind about the design of REBOL, you become a much better REBOLer, and you will be able to master REBOL in a much shorter time than otherwise.

I can see that we still need some great philosophy material for teaching REBOL.

Ratio
30-Jul-2009 17:31:08
(at) Henrik
In REBOL, code and data are in fact the same thing,

I don't really know why you stress a point which - as outlined above - is logically, i.e. absolutely impossible (and very misleading).

Yes, we often call codified variables or their contents "data" - I do it myself, but it's not exact and misses the point we are discussing.

In all higher languages it's quite normal to use words for functions and other things.

Since we can assign anything to any word we mostly call those words "variables", if they point to functions "functions".

REBOL is a language which doesn't have reserved words, at least by default. So we can assign even to the native function IF: "XYZ" - which is not a good idea, indeed. ;-(

But no language at all will ever be able to identify code and data!!

I cannot see any different specifica in REBOL. There is nothing to "learn" about: it's just impossible.

Code is code, not data.

REBOL provides marvelous functions (and a less magnificent syntax to call them). There is and cannot be a "code=data-philosophy", Henrik.

Since you asked:

I am using mainly Clipper/xHarbour, HwGUI and C (never C++ since OOP). C-Code can be written easily into the Clipper/xHarbour source code or into other files. All must be compiled and linked.

My urgent interest in REBOL results of the fact that in REBOL is done, what I am struggling to achieve - an easy to use GUI. I really know how difficult the programming of an easy to use generic GUI is, so my respect for REBOL and it's author(s) is great. My criticisms from a beginners POV are meant consructive, not destructive.

Ratio

DocKimbel
31-Jul-2009 4:11:09
Ratio said:
Code is code, not data.

REBOL provides marvelous functions (and a less magnificent syntax to call them). There is and cannot be a "code=data-philosophy", Henrik.

Well, so in your own vocabulary, how do you call this :

>> line: []
>> length? line 
== 0
>> append line 'print
== [print]
>> length? line 
== 1
>> append line "I'm code"
== [print "I'm code"]
>> length? line 
== 2
>> type? line/1
== word!
>> do line
I'm code
>> insert at line 2 'join
>> append line " or data?"
== [print join "I'm code" " or data?"]
>> length? line 
== 4
>> do line
I'm code or data?
Ratio
31-Jul-2009 17:23:33
DocKimbel said:
Well, so in your own vocabulary, how do you call this :

I'm code or data?

You built in several steps a so called codeblock. Your "line" is just code, containing the function print plus string constants. Codeblocks are nothing new, can also be done in C.

I am constructing much more sophisticated codeblocks very often at runtime to comply with the sheer endless wishes users might have to analyse, evaluate, print etc. their databases. In Clipper/xHarbour these codeblocks are build, compiled and executed at runtime depending on the specific user inputs. Users write in these cases, without realizing it, quasi their own programs. ;-)

Since we never can tell under which different aspects users might want to handle their databases I am using at runtime constructed codeblocks since many, many years,

...but I am not inclined to think that code or codeblocks are another thing than just code.

Ratio

Eduardo
5-Jun-2010 6:55:36
"REBOL is for a different breed of programmer. It is for those with open minds; those who are reflective, observant, and those who do not simply bang out any kind of junky code that works, but consider each detail of their design, and sculpt it perfectly as a lasting work of thought."

Please forgive me i I'm being disrespectful, but, according to your description, REBOL is for Lisp programmers...

BTW: I'm a Clojure developer with knowledge of Common Lisp.

RaviD
15-Jul-2011 5:37:31
“R” is for REBOL; REBOL IS HERE AND THEREFORE IS FOR EVERYONE. I; TOTALLY disagree with Carl's saying that REBOL isn't for everyone. About a year ago was when I first came across REBOL; checking up on “PC States Of Arts” in an attempt to answer the questions “What is a Computer?” and “What is a Bit?” for a friend before we were to jump in to do something in the computers business arena. The rational was simple; we needed an original point of view or paradigm. In other words; expanding upon GI Gurdjieff's “when in Rome do as Rome does”; we had to do a whole lot different and better than Romans and even Rome! In the course of that inquiry I realized that the computer is the “disk image” on the hard drive and nothing more and further the entire computer could be placed upon an USB flash memory or external hard drive. Soon with USB 3.0 we could see 1TB nano flash drives. Is that a new insight? NO! Disk Operating Systems were the norm when the computer was born. For me it was refreshing to see the independence from the hardware itself and the ability to move around free from make, model, mammoth, monster etc. A family could then have separate hard drives for each of its members and a set of “GUTS” for the computer displays; peripherals etc. Why did we need an original point of view and clear answers to those two questions? It is simple. You could run into someone at the very top of the schema showing off their wares. Your thoughts and also the words said to them then would be; “Steve, Bill what you are showing is awesome but you are forgetting that you are pushing technology which is 60 years behind”. In other words; I told my friend that the computer has been robbed of its precious childhood in the hands of the wrong stewards and 60 years were lost in its evolution because optical computing should have been the norm and vogue today.

I then asked myself the question; “Was there even need the for a CPU, RAM etc. (meaning the arrangements of the hardware) since tons of flash memory would do?”. I even questioned the need for an operating system when we had the BIOS govern the computer with its governing protocols. The programs have to always and they do conform to BIOS. It was then that I came upon REBOL and downloaded it and tried it. Calling REBOL lightning fast would be a gross understatement. And then I read Carl's recap of the computers history with the shift to Bit mapped displays and the thrust of the research towards that field. Bit mapping allowed for the creation of overlay switches for event driven computing activities for starters and a lot more can be accomplished with the “Bit”. Everyone knows what a “Bit” is so I won't dwell on it. I simply told my friend that the entire software is just pixels and the world today will spend money on computer security and not technology. So the decision paths told us to be in computer security as opposed to reinventing the computer because that is where the money is flowing and armed with a deep and real understanding of the “Bit” one could deliver proper results. Since we were creative “Jackos” not a bunch of “Bar Bouncers”; the pursuit of the computers business undertaking was dropped. And now what does all this have to do with REBOL? NOTHING!

REBOL; I realized was at the frontline of a critical bottleneck in the evolution of the computer aka., the Analysis and Intelligence Machine and was an attempt to provide computers the ability to resolve “PARADOX” which was the “bane” to be removed before these machines could be properly used. REBOL is like Aikido; the supreme martial art.

buddyontobuddy
4-Jul-2012 22:13:41
This article is something that will help me with my class assignment. It helped me to better understand another aspect of this topic. Thanks. click this

Post a Comment:

You can post a comment here. Keep it on-topic.

Name:

Blog id:

CS-0374


Comment:


 Note: HTML tags allowed for: b i u li ol ul font p br pre tt blockquote
 
 

This is a technical blog related to the above topic. We reserve the right to remove comments that are off-topic, irrelevant links, advertisements, spams, personal attacks, politics, religion, etc.

Updated 9-Dec-2023   -   Copyright Carl Sassenrath   -   WWW.REBOL.COM   -   Edit   -   Blogger Source Code