Google Fiber-Wired Hacker House Hits Airbnb - <AUTHOR> https://www.airbnb.com/rooms/841162

<comment><USER3> > G Fiber gigabit internet (AirBnb won't let me spell the word here - <USER2> > with oogle fiber)

Why is that?

<comment><USER4> Last time I used AirBnb, their system (posting, messaging, etc.) censored all instance of Google (case insensitive). At first I thought they just block all links but after some trials, even the word itself is censored.

<comment><USER5> Does the correct spelling (googol) also get cencored? What about with combinations with number? e.g. g00gle or goog1e?

<comment><AUTHOR> I tried g00gle but didn't think of goog1e. good thought!

</comment></comment></comment></comment><comment><USER6> The hacker community being built in Kansas City is truly remarkable. It's a great place to ignite new ideas and reform old ones! Nothing compares to midwest community.

<comment><USER7> I'm visiting Cincinnati for 2 months (I grew up here before moving to SV 5 years ago).

I am visiting some of the startups and related services and while visiting at one named the Brandery the person I was talking to said "you know how it is in Cincinnati, everyone wants to help".

And I thought to myself, really? Then I realized. In Cincinnati, and probably the midwest as a whole, people do generally have more a sense of community and are more forward about "helping".

But this doesn't apply to business or startup ventures. They'll help you pick up groceries that you dropped or hold doors open for you. But when it comes to providing support for someone that's doing an entrepreneurial venture it's almost non existent.

The support is there at first, but when things get really tough the fact of the matter is most people haven't gone through that and can't relate.

It's frustrating as I believe we'll eventually end up back here to be close to my wife's family.

I talk to a lot of people here who speak of it being a great place for technology entrepreneurship. I'm just not seeing it. I _really_ wish I did though.

<comment><USER8> Hey - this is Dave Knox and I'm actually one of the co-founders of The Brandery.

First off, I'm glad you had a chance to stop by our program. Hopefully you saw the fact that we're trying to not just talk about it being great for technology entrepreneurship, but actually deliver against that as well.

Now, in terms of your point on support for business / startups, that is the very reason we started this program in 2010. We are at the beginning part of the journey but there is a real change happening in the town. If you ask any of the companies that have gone through our program, they will tell you that our support of them doesnt end when they graduate from the program. We can't help all of the companies in town, but we're there for the 26 that have gone through The Brandery and are making a real go of it.

Give me a shout (firstname.lastname@example.com) and lets grab coffee. I'll share whats made me decide to make Cincinnati my home and a place where I really believe in the technology opportunities. We have a long ways to go but we've taken the first steps that I am confident will get us there.

<comment><USER7> Thanks Dave. I appreciate the response. I'll drop you an email.

</comment></comment></comment></comment><comment><USER9> My company (PhoneFactor) was founded here in KC. We were recently acquired by Microsoft.

I'm excited about moving to Seattle, but Google is making me feel a little bit like it's the wrong time to be moving away from KC. :-)

<comment><USER10> <http://seattle.gov/mayor/SeaFi/gigabit.htm>

Good news for you!

</comment></comment><comment><USER11> I live in KC and did a Startup Weekend about a month ago. One of the guys on my team crashed at the Hacker House for the weekend and swore by it.

I believe one of the other teams all stayed there as well, and spent the nights hacking at their startup @ the hacker house. Heard nothing but good things.

</comment><comment><USER12> This is a great place. I have stayed and will stay again the next time I come to KC. Google fiber is Amazing!

</comment><comment><USER13> As I'm not terribly familiar with AirBnb and its terms, why won't it let the poster spell out "Google"?

<comment><AUTHOR> yeah no idea why not but it specifically won't let you use the word google or Google Fiber anywhere. It switches the text to (website hidden) in the description and completely removes it from the title. So a description like this: "One of the first houses with Google Fiber!" becomes "One of the first houses with (website hidden)!"

FAIL

<comment><USER14> Time to buy the domain websitehidden.com.

</comment></comment></comment><comment><USER15> They should get some nice desks and chairs for the rooms - the desk and chair they show in the room photo look uncomfortable to use for serious amounts of work.

<comment><AUTHOR> Yeah I posted the link. (shameless self plug) the desk in that room is admittedly pretty small, but we have better desk space for about 8 people to work at throughout the living room and side room (although the city will only let us have up to 5 ppl).

</comment></comment><comment><USER16> Wait, do you guys pay to live there as part of Homes for Hackers? Or is it free for you, and you're renting out the last room at a $1500/month profit?

<comment><AUTHOR> The house is free for startups. We're putting the last room of the house on airbnb in an attempt to help pay the bills to let the everyone else stay there. We would need to rent out that room about 16 nights a month to break even. It's not realistic to expect anything as close as that, but every little bit helps.

If there's no demand on airbnb for the last room, we'll simply let another startup take it.

</comment></comment><comment><USER17> Has anyone mentioned the Ninja Turtle sheets that come with a rental? Nothing says Hacker like a night with Donatello!

</comment><comment><USER18> The energy is electric here in KC right now. The KCSV has stirred up quite the buzz. Finally, the old school nicknames of "cowtown" and "flyover" are being put to rest. Welcome to the 21st century frontier, y'all. Saddle up! Errr, make that Fiber Up! :)

</comment><comment><USER19> You've gotta try this! It's cute, quaint and it's got oogle high speed internet...for free! WOW.

</comment><comment><USER20> I just saw a piece on the news about this, congrats! (btw, this is Sam B.)</comment>


Is this modern day slavery? - <AUTHOR> http://www.dreamzook.com/blog/?p=66

<comment><USER2> this depends on how your define slavery...I would say this is more collusion</comment>


Nasa Mars rover finds organic matter in ancient lake bed - <AUTHOR> https://www.theguardian.com/science/2018/jun/07/nasa-mars-rover-finds-organic-matter-in-ancient-lake-bed <comment><USER2> Huh. If and when we see established, reliable transportation to the red planet, I wonder if we'll see a renaissance in fossil fuel industries.

<comment><USER3> Oxygen would likely be too expensive to produce for internal combustion to be used (that said a greenhouse effect on Mars would be quite beneficial for terraforming so we might actually figure ways to do that).

However the availability of carbon in general and organic materials including complex hydrocarbons will be quite important for local manufacturing of materials such as plastics and composite materials.

</comment></comment><comment><USER4> Cool enough to dupe.

<comment><USER5> Do you have a link to a previous submission with significant discussion? I don't see any at first glance.

<comment><USER6> [https://news.ycombinator.com/item?id=17258492](https://news.ycombinator.com/item?id=17258492)

<comment><USER5> Thanks!</comment></comment></comment></comment>


Whitey on the Moon - <AUTHOR> https://www.the-tls.co.uk/articles/public/nasa-social-movements/ <comment><USER2> For the sake of discussion, I offer Ayn Rand's _Apollo 11_ : [https://campus.aynrand.org/works/1969/01/01/apollo-11/](https://campus.aynrand.org/works/1969/01/01/apollo-11/)</comment>


The Mystery of a Lost Roman Herb - <AUTHOR> http://www.bbc.com/future/story/20170907-the-mystery-of-the-lost-roman-herb <comment><USER2> > In fact, Roman cuisine wasn't at all like Italian food. It was all about > contrasting sweet with salty and sour foods (they liked to eat fishgut > sauce, garum, with melon).

It's true that it wasn't at all like Italian food, but this is a particularly bad example:

1\. garum kinda lives on as colatura di alici, though the former was fermented, and the latter isn't [1]

2\. Italian cuisine still contrast melon with salty food, just prosciutto, not fish

[1] [https://en.wikipedia.org/wiki/Colatura_di_Alici](https://en.wikipedia.org/wiki/Colatura_di_Alici)

<comment><USER3> I guess it is notable that the Romans didn't have tomatoes.

<comment><USER2> Or zucchini, peppers, eggplants, chillies, and coffee which are all staples of Italian cuisine now.

<comment><USER4> Don't forget pasta, avocados, pineapples, chocolate, potatoes or chocolate

<comment><USER5> They had olives, bread, cheese, mushrooms, and sausage, though. Imagine being stuck in a dystopian Italy where they were one ingredient away from being able to make pizza.

<comment><USER6> olive oil based pizza is actually pretty good

<comment><USER7> Yes. We regularly have this, cooked by Nonna or my wife...

</comment></comment></comment></comment></comment></comment></comment><comment><USER8> Reminds me of hindu soma:

Soma (Sanskrit: soma) or haoma (Avestan) was a Vedic ritual drink[1] of importance among the early Indians. It is mentioned in the Rigveda, particularly in the Soma Mandala. It is described as being prepared by extracting the juice from a plant, the identity of which is now unknown and debated among scholars.

</comment><comment><USER9> The bit about camel-llama hybrids being camel-sized and llama-woolly seems to be completely wrong (they've confused the general goal of the project with reality), so I'm a bit dubious about the rest of the article. According to Wikipedia [1] and google image search, camas are smaller than both llamas and camels, and not very woolly.

I do find it fascinating that camels and llamas, whose last common ancestor was roughly as long ago as that of chimpanzees and us, can produce viable offspring.

[1] [https://en.wikipedia.org/wiki/Cama_(animal)](https://en.wikipedia.org/wiki/Cama_\(animal\))

<comment><USER10> I have to ask, do we know that humans and chimpanzees can't produce viable offspring?

<comment><USER11> With all the cracy shit people are doing ... I can't imagine that it has not been tried yet. But I also do not know anything further.

<comment><USER12> Of course it's been tried.

[https://en.wikipedia.org/wiki/Ilya_Ivanovich_Ivanov](https://en.wikipedia.org/wiki/Ilya_Ivanovich_Ivanov)

</comment></comment></comment></comment><comment><USER13> Pliny wrote that within his lifetime, only a single stalk was discovered [http://www.oocities.org/syrtica/silphium.html](http://www.oocities.org/syrtica/silphium.html).

</comment><comment><USER14> Funny, lovage (which they mention near the end) is or was quite common here in Switzerland. My mother used it a lot while my generation uses it a lot less already. Still have some in the garden though.

<comment><USER15> Same in Austria. It's commonly called "Maggi-Kraut", because it tastes very similar to a sauce produced by Maggi (which is now part of Nestlé). Funnily enough, the sauce doesn't contain any lovage.

<comment><USER16> Not usual (but not hugely popular) in Czechia too.

</comment></comment></comment><comment><USER17> You actually can grow red huckleberries (at least in the PNW). I even have one in a neglected pot that does ok. Here's an advanced technique:

[http://www.skilledwright.com/redhuckleberries.htm](http://www.skilledwright.com/redhuckleberries.htm)

I've don't think I've ever seen a cultivated evergreen huckleberry plant with berries on it though.

<comment><USER18> i believe that's the point "When they're grown from seed, they are mysteriously devoid of fruit."

<comment><USER17> I don't know how plants people buy are propagated (seed, cuttings, layering, etc).

</comment></comment></comment><comment><USER19> Re: Asafoetida - anyone got a good way to use it?

Bought it a while ago because of an Indian curry recipe that called for 1/8 of tsp per bucket, but never got around to actually adding it, because of its eye-popping burnt rubber aroma.

<comment><USER20> Most indian cooking, especially lentils use it. It's always used in tempering, which means you add it in hot oil a few seconds before you dunk it in the dish.

It is also used as a replacement for garlic in dishes, for people who refuse garlic for religious reasons.

<comment><USER21> > for people who refuse garlic for religious reasons

I've never heard of this. What religions ban garlic? (and pity for them, I love it!)

<comment><USER22> I'll try and explain why Jains do not eat garlic (along with other rooted vegetables like onions and potatoes):

When taking out the entire plant, you also take out any organisms like bugs and such from their ecosystem, killing them in the process. Jains try and limit the amount of violence they cause (Ahimsa), so in turn they try and avoid eating rooted vegetables.

On top of this, by removing the whole plant you prevent them from sprouting again, which is effectively "killing" in Jainism.

All of this being said though, modern agriculture techniques kind of make this reasoning insignificant. Mass farming practices mean that all plants are effectively killed along with any organisms in that area when harvesting.

And to top it all off, many Jains do not follow this practice, at least in the US. Many of my family eat all of these things, maybe trying to avoid them during Paryushan (holy week).

<comment><USER23> How do you grow any crop without killing weeds and pests?

<comment><USER24> By growing a lot more of it (which prevents the birth of whatever would have grown in its place, but that's an invisible effect and technically not killing).

Also, grow mixtures of plants together that naturally crowd out weeds, inhibit the spread of pests, and replenish certain nutrients like nitrogen. IMHO this is grossly under-studied but could become more relevant with smarter robotics.

<comment><USER23> How do you even establish an initial batch of the crop large enough to crowd out all weeds, without killing the existing weeds to start with?

Plants are hypercompetitive and constantly fighting for space and resources. The only reason modern agriculture works is we are so effective at killing weeds with machines and herbicide. Otherwise crop fields would quickly be taken over by whatever grows the fastest.

<comment><USER24> I don't know how they do their farming in practice, but I'm pretty confident that it involves more land use and lower yields.

They may also adapt their diet to whatever is the most edible among the weeds. This year a grape vine mysteriously sprouted in my garden and started taking over before I realized what it was and murdered it to save the zucchinis. A Jain would probably be happy enough with the grapes. I had even considered adopting it.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER25> tl;dr : We don't know, but here's a lot of other information.</comment>


Repobuild – Declarative-style build system, like Google Build - <AUTHOR> https://github.com/chrisvana/repobuild/wiki/Motivation <comment><USER2> Well, 1) I wish him all the best and would love another good build tool alternative, but 2) I don't see his utopia of demonstrably making open-source building easier happening because the OS world is a bazaar, not a Google-esque cathedral.

Google's build system is awesome because it can force everyone in the company to use it, going so far as to put every single project in one huge repository.

And, then, crucially, the model assumes that any dev workstation can compile (or pull down via cache) every single upstream project.

In the non-catherdal/bazaar world, take any non-trivial Java project, and all of it's upstream dependencies, and some are built with Ant, some with Maven, some with Buildr, some with Gradle, some require thrift installed, some require who knows what installed.

And you can't just go back and add some meta-data of "oh sure, every Java project compiles src/main/java -> target"...their build files are going to have all sorts of crazy one-off steps (Maven plugins, whatever).

There is no enforcement of "you must make your build use this BUILD file, and, btw, only program in Java, Python, or C."

With all of Maven's warts, the jar-based repository with transitive dependencies is, IMO, it's major innovation. I just don't see a transitive upstream build-from-source model (like Google's) ever working in the bazaar that is Maven central.

I don't at all mean to say Maven/Maven repository are perfect--for one, it's ridiculous how many broken dependencies are in Maven central. Naively, I had thought that was automatically enforced/not allowed, but, sigh, no, we all have to deal with, say, the ASM developers completely breaking their API from v3 and v4 and forever cursing the rest of us with jar hell.

<comment><USER3> Agreed.

Transitively-resolved, platform-independent binaries are the big win coming from maven. Only once have I worked with a project where I required new system-level dependencies to compile & run a maven project; and I have never had a cross-platform issue when carrying projects across Mac & Linux.

To be fair, the import-compiled-transitive-dependencies-as-binaries pattern that Maven likes to employ is probably less easily adapted to natively compiled languages like C/C++ than it is to managed runtime languages (Java/Erlang) or scripting languages (Ruby/Python).

As much as it's a pain to work with "maven plugin spaghetti", it's at least deterministic and keeps things easy to figure out.

There are those dependencies that you learn to remain wary of (asm/cglib/antlr/jline/etc), but at the end of the day I'm happy to work in an ecosystem where I don't have to compile every single line of third-party code myself.

<comment><USER4> > To be fair, the import-compiled-transitive-dependencies-as-binaries pattern > that Maven likes to employ is probably less easily adapted to natively > compiled languages like C/C++ than it is to managed runtime languages > (Java/Erlang) or scripting languages (Ruby/Python).

The "scripting languages" don't even have this as easy as it might seem. Half the dependencies in my Python projects these days have important bits written in C (e.g. psycopg2, gevent).

</comment></comment></comment><comment><USER5> Interesting, if Chris can pull this off it will change the world in a huge way. Having used the build system inside of Google it was somewhat mesmerizing, you really could put together things pretty easily. I suspect there is something similar inside Amazon. But I completely agree that Github has done wonders for making many smaller projects accessible it has not significantly increased our ability to tie them together. That seems to be part of the motivation for the CCAN effort as well, although on a more language specific vector. But as a proof of concept the CPAN system (the one for perl) demonstrates just how powerful this function can be in enabling large scale rapid development.

The flip side though, the monkey in the wrench as they say, is that the projects that participate have to conform to the rules of participation. In CPAN's case its a standardized dependency, build, and install models with required unit tests. So perhaps the first step here is to provide an incentive for clean build processes on a project.

<comment><USER6> Providing incentives seems key. I wonder why CPAN came to work so well.

Possible incentives:

      - automated testing (TravisCI does this in isolation already)

      - automated distribution (build .deb, .msi, and .pkg files)

      - usage statistics?

I'll have to think about this.

<comment><USER7> If you come to any conclusions, let me know :).

<comment><USER6> Happily =)

</comment></comment></comment></comment><comment><USER8> You might find the blog post [http://skalrant.blogspot.com/2013/05/build- systems.html](http://skalrant.blogspot.com/2013/05/build-systems.html) interesting. It argues that a declarative style is not suitable for many software development projects. Coming from the author who is also the author of an ML like language it makes for a good read. Declarative is surely elegant, but not always easy to work with under specific and not uncommon situations.

Note, however, it touches on an orthogonal aspect of build systems. I think Repobuild's main thrust is in standardizing and assisting modularization whereas the post linked in this comment has a different focus, it argues for a non-declarative, fixed-point based style.

<comment><USER9> Those are the same link. Can you please update one of them? I'd like to read both that you mentioned :)

</comment></comment><comment><USER10> Judging by his description of BUILD, it sounds like was a big influence on Go's build system.

Well, no surprises there!

<comment><USER11> More likely Go's build system is influenced by Google's build system, which came first.

<comment><USER10> That's what I said. :-) BUILD had an influence on Go. Go is influenced by BUILD. One sentence is in the active voice, the other in the passive.

</comment></comment></comment><comment><USER12> There is something I don't understand. You can add other project code to your own project, but how do you use that other code? In the .NET world where I live you can reference an Interface and let runtime fill that interface in (with a proper dependency injection method).

For example you know you want an Interface of MailSender that has the method .SendEmail() and it gets filled with SMTPMailer which has SMTPMailer.SendEmail()

Is this thing similar to that concept but in build-time? How do you know the interface/usage beforehand?

<comment><USER13> Most open source libraries are written in C/C++. The interface is usually described in header files, you need them to compile your program. The implementation itself is contained in a library, which you link into your program. There is also the possibility to resolve the implementation at runtime via shared libraries.

</comment></comment><comment><USER14> There's a building collection of small pieces of Javascript code automatically fetchable from the browser in [http://www.corslit.com/](http://www.corslit.com/). Does it sound like it? I think it should.

Explanation here: [http://williamcotton.com/another-way-to-publish- code](http://williamcotton.com/another-way-to-publish-code)

</comment><comment><USER15> This looks great! May be a reason for me to ditch CMake, but I kind of need Windows support :/. Is it much work to add?

I wish someone made a similar way to share libraries like we can do in PHP ([https://packagist.org](https://packagist.org)) or Ruby ([http://bundler.io/](http://bundler.io/)), but for C++.

</comment><comment><USER16> I'd suggest to look at the freebsd ports build system. It is essentially declarative being built on top of Make language, and allows easy integration of various open source components and dependencies.

If targeting multiple platforms is of an essence, NetBSD pkgsrc provides a great model also built on top of Make.

</comment><comment><USER17> I'd be curious about how this compares to the Buck project, which is another Google-like build system:

[http://facebook.github.io/buck/](http://facebook.github.io/buck/)

<comment><USER7> It's very similar. Here are a few other similar ones:

[https://github.com/chrisvana/repobuild/wiki/Similar-Build- Sy...](https://github.com/chrisvana/repobuild/wiki/Similar-Build-Systems)

A few differences:

* Buck requires installation (meaning clients need to have it installed), whereas Repobuild generates a Makefile.

* Buck has a spiffy build daemon to make things faster.

* Repobuild auto-install files from git.

* Buck covers java better, but not other languages.

* Buck went with a turning complete language, Repobuild intentionally went with only a config langauge (hotly debated religious difference)

</comment></comment><comment><USER7> Author here (a bit late to the party).

I'm happy to answer questions if anyone has any.

<comment><USER15> How hard it would be to add Windows support?

EDIT: Just a question, not a request.

<comment><USER7> (I have not investigated it fully, so this may be inaccurate)

Cmake:

Repobuild basically generates a Makefile. You could change it to generate a CMakefile instead. That would not be a lot of work, probably a few (full) days to change and test it.

Visual Studio:

Generating a visual studio project file may be trickier. A lot of the work overlaps that of the Cmake stuff above (changing the output format). Realistically, a 2 week project (I would do xcode projects at the same time).

<comment><USER15> Ok, good info, I might try it.

What I know for sure, CMake is not very adequate for separating work into different small, independant parts (somewhat "declarative" attept in CMake here: [https://github.com/key-tools/key-machine- logs/blob/master/ke...](https://github.com/key-tools/key-machine- logs/blob/master/key-machine-logs/CMakeLists.txt)), and then including build targets from other CMake parts into one.

Also, generating CMakeLists, then generating a project seems like an overkill :)</comment></comment></comment></comment>


National Debt Clocks from Around the World - <AUTHOR> http://www.nationaldebtclocks.org/

<comment><USER2> I would like to see a bar graph of debt normalized by population for all countries.</comment>


That Old PlayStation Can Aid Science - <AUTHOR> http://www.nytimes.com/2014/12/23/science/an-economical-way-to-save-progress.html?_r=0

<comment><USER2> Slightly misleading, as he originally built this in 2007, and must have not updated the firmware since Sony removed the ability to install Linux on the PS3 years ago. This couldn't be replicated now without either finding old, unupdated PS3s (unlikley considering updating is required for playing newer games), or possibly jailbreaking them to be able to install the other OS.</comment>


Why Visual Basic is (supposedly) better than C# - <AUTHOR> https://www.simple-talk.com/dotnet/.net-framework/10-reasons-why-visual-basic-is-better-than-c/

<comment><USER2> Sigh. I'll actually do the job of debunking these one by one.

1\. Almost every mainstream language has case-sensitivity. This avoids ambiguity by having only _one_ right way to express a given variable. Since Visual Studio has excellent autocomplete, you don't have to repeatedly use SHIFT, and you are unlikely to accidentally mistype the variable name.

Of course, when I see an argument like, "When you accidentally leave Caps lock on, it really matters," I have trouble taking the author seriously.

2\. The reason switch is different from if-else is something you can learn from any language primer. The author makes the following argument: "It's easy to forget to type in each of these Break statements!"

In fact, it's not easy. The "break" is required by C# in any non-fallthrough cases. Not typing it will generate a compiler error. Not something you can miss.

3\. Here the author makes a red herring of an argument regarding how you can use Visual Studio to setup event delegates for UI components. Apparently some paradigms are supported for VB.NET, and others for C#. Of course, what your IDE supports has nothing to do with which language is "better".

The basic argument is that you need to return to the design view to create an event delegate rather than being able to do it from code view. Of course, most experience C# writers will stay in code view and just type the following themselves:

        _myButton.OnClick += ... (tab to autocomplete new delegate and handler)

4\. The author then continues to say that the comparison symbols in C# are "stupid" compared to Basic's "And", "Or", etc. This argument almost doesn't deserve to be addressed, but I'd like to point out that C# has the advantage of not overloading the assignment operator (=) with equality comparison (==). Keeping these separate prevents a common class of error.

5\. The author fails to trigger autocompletion for creating a new property in C#. This is largely because he doesn't know that the way you do this in Visual Studio for C# is to type "prop <property name>" and hit TAB. The behavior is then exactly the same.

Regardless, still a comparison of IDE features rather than languages.

6\. The author complains that the "PMT" function, which "calculates the annual mortgage payment for a loan", is not a builtin in C#. I am not rightly able to apprehend the kind of confusion of ideas that would provoke such a statement.

7\. The author argues against needing semicolons in C# for line endings. Alright, at least this is actually about the language itself. Personally I'm not a huge fan of needing semicolons either. A style thing, but I'll let it stand.

8\. The author complains that the type for a variable declaration precedes the variable name in C#. Somehow this is a major problem. Obviously just scraping the bottom of the barrel here.

9\. The author complains that C# does not automatically cast enums to ints or other types. I'll leave it to other sources that talk about the pros and cons of implicit casting a la Scala.

10\. The author complains that is not possibly to reinitialize arrays to a new length in C#. He admits that he has been told that, "I should be using lists and not arrays anyway." But he retorts that, "The point is that - as so often - Visual Basic makes something easier to code than C# does."

I fail to see why using a List<string> is somehow harder than string[].

In conclusion, I really have to hope that this is a joke.

<comment><USER3> > The author then continues to say that the comparison symbols in C# are > "stupid" compared to Basic's "And", "Or", etc. This argument almost doesn't > deserve to be addressed

It does. I'm pretty sure VB's "And" and "Or" don't short-circuit…

> 8\. The author complains that the type for a variable declaration precedes > the variable name in C#. Somehow this is a major problem. Obviously just > scraping the bottom of the barrel here.

The author also complains that out-parameters have to be annotated as out- parameters in C#, apparently does not realize parameters don't have to be out- parameters.

> But he retorts that, "The point is that - as so often - Visual Basic makes > something easier to code than C# does."

Basically, he complains that C# makes it harder to do the wrong thing than Visual Basic. Which tells you a lot about the mindset.

<comment><USER2> > It does. I'm pretty sure VB's "And" and "Or" don't short-circuit…

Interesting, didn't know that. However, I got the feeling that he wasn't talking about how the operators work so much as what they are named.

</comment></comment></comment><comment><USER4> For those who aren't sure if it's satire or not (90% of other comments as I write this), I'll give you a clue:

 _Andy 'Wise Owl' Brown decided to write a tongue-in-cheek rant whilst he could still remember the pain-points_

(it's in the _very first sentence_ )

<comment><USER5> It's not very good satire. Some of the points are potentially real; it's not clear why they wouldn't matter. When you label something "No offense intendend" and proceed to make offensive statements, your preface isn't helping. Prefacing something with small-font "this is toungue-in-cheek" and proceeding to mix potentially real issues with non-issues a novice isn't helpful. I don't see how spouting irrelevant nonsense is satirical in any case. Maybe it's funny? AndAlso vs. &&; haha? If so, I don't get it. Instead it comes across as someone who really was annoyed, knew it wasn't for rational reasons, and thought head off criticisms this way.

Whatever. Why is this on HN?

<comment><USER6> > _It's not very good satire._

If it confused people then it IS very good satire.

> _Some of the points are potentially real; it's not clear why they wouldn't > matter._

That's the very essence of satire. It has to be somewhat connected to reality.

What you seem to ask for is "grotesque statements" or "surreal humor".

<comment><USER5> I expect satire to have a point. This doesn't. Is he trying to make fun of all those people hating these C# features? Never heard of anyone who _seriously_ complained about these. Is he making fun of VB misfeatures? Doesn't seem to make sense either.

It doesn't make sense as satire. It does as shallow griping.

</comment></comment></comment></comment><comment><USER7> Behind the satire lurks a serious point though - a lot of C# programmers need to get over their snotty attitude to VB.NET, because once you get past the whole VB stigma thing they're basically isomorphic.

One point the guy didn't make was that VB.NET has XML literals, which are very nice if you like that sort of thing.

<comment><USER8> I find that most C# developers don't have strong feelings about VB.Net; if they comment on it negatively, they are probably trying to avoid the old stigma by association.

Although VB.Net's syntax is not really my cup of tea (it's a bit too wordy for me), I find that many of the keywords make a lot more sense than the equivalent C# ones. E.g. explaining the meaning of "shared" is a lot easier than explaining "static", because the concepts it brings to mind are closer to what's actually happening.

</comment></comment><comment><USER9> The reason I /like/ semi-colons is that I can automate code formatting to my pleasure. If I open someone else's code file and they are doing strange things (e.g. spaces instead of tabs, { on the same line, etc) then I can have the IDE re-format everything in a split second to my preferences, and they can do exactly the same.

Or if the project manager is requiring all code to be formatting a certain way then I can re-format the code before I submit it. Plus with a language you can so quickly and painlessly re-format, why even require code style standards that dictate whitespace?

While some of this MIGHT be possible with VB.net, it is a lot trickier since whitespace is "content" in that language.

</comment><comment><USER10> Sadly this is how many VB guys think. I'm a C# guy and I honestly don't care, it all compiles to the same MSIL anyway and intellisense makes it easy to write either. Seriously if my keyboard was ever logged, all it'd reveal is txtI<tab> if(is<tab>) { refre<tab>;

One reason VB has such a stigma attached to it is because it's common to see it written by non-developers, particularly lurking in excel as some background macro. Anyone can butcher any language - it's just a matter of preference. Anyone who touts a language so strongly has clearly lost the purpose of having it and is not worth debating with.

<comment><USER11> I know of a company where the manager requires VB code, because he wants to be able to read it from time to time!

</comment></comment><comment><USER12> Oh what a piece of BS. Yet another shallow, mechanical comparison of tiny "features" and IDE peculiarities with no other purpose in life other than initiating a decade-old flamewar.

And comparing "&&" and "and"? Really?

<comment><USER13> wait, the article is not sarcasm? I thought the site is some kind of the Onion for programmers?

<comment><USER6> The main sarcasm is people missing the point, while it's there, in the first BLOODY line of the article.

<comment><USER14> It's in a box which has the effect of making it invisible.

</comment></comment></comment></comment><comment><USER15> I used VB for many years and didn't understand why the C# people mocked it... then, about 3-4 years ago I switched and have not looked back.

In my honest opinion, whilst VB is obviously fully supported, C# just "feels" more professional... When you get your head around the syntax, you can seamlessly move between C#/Javascript and many other languages that all follow similar syntax without even thinking.

In addition, there are so many more articles/examples/open source projects and just help out there for it.

<comment><USER16> Learning C# to make switching to Javascript easy seems somewhat backwards.

Plus it's not as if it's hard to leap between C-syntax and VB's syntax anyway. They're both imperative languages with much of the same core blocks (albeit often called differently). Switching between such languages shouldn't take more than a quick glance through a "beginners guide" and then some cross- referencing as you go alone (like using an English/French dictionary). It's not like they're different paradigms like functional languages (Lisp et al)

<comment><USER15> I didn't learn C# to make Javascript easier - I switched to C# due to the majority of work in my specialty requiring it more and the fact it paid a lot more.

The side effect.... I always found that programming VB was easy but switching to Javascript AND other languages took a few minutes to get my head around (or I would mix some syntax up)...

Now I find that I can flawlessly switch between Javascript, C# and a few other languages without losing speed at all, and generally, I find that I am a much better programmer for switching.

</comment></comment></comment><comment><USER17> I use both VB.NET and C# and I'm actually bothered by the missing case- sensitivity of VB.NET because it makes hard to impose naming conventions. For example if I have a class named as MyClass then it would make sense to name an instance of it as myClass. Unfortunately it confuses intellisense and it suggest me later always the class not the instance. Thereby I'm forced to name my instance as MyClass1 or something else that doesn't feel so natural.

</comment><comment><USER18> Not sure if the article is a joke or sarcasm or something but the author makes some good points. I use VB.NET in my daily job and Python for my side projects. I like both (but Python is definitely my favorite language) and I like it because it is really simple to read and to write. I know some C like languages too and use it a lot (Javascript) but that curly-braces and semi- columns thing feels just annoying to me.

</comment><comment><USER19> From the author's blog

<http://www.wiseowl.co.uk/blog/s243/vb-c-sharp.htm>

WHY VB TRUMPS C#, AND HOW TROLLS DON'T AGREE! I recently wrote a blog on why (I believe) VB is a better programming language than C# - I wasn't prepared for the flames this would unleash. ...

</comment><comment><USER20> You said `&&` is a stupid symbol and `and` is a better one, right? Sorry I think you're wrong because it's a symbol that used in almost all programming languages include c, c++, JavaScript and...

<comment><USER11> C and C++ also have 'and' :)

Check iso646.h

<comment><USER20> And `PHP` has it, also! But I didn't see any big application/repository that uses `and` instead of `&&`, honestly.

<comment><USER11> Since I prefer the Pascal family of languages I do actually like "and", but I will use whatever is the default in a given language.

This VB piece seems like a bit of VB programmer crap I usually hear from VB users that only dabble in programming without any proper developer education.

<comment><USER20> BTW, I think using `and` just make things more human readable, closer to what Martin Fowler says about "Good programmers".

</comment></comment></comment></comment></comment><comment><USER21> I once left the caps lock on, but I dodn't notice for a few minutes because the editor kept correcting my typing to the right case. It was only when I came to a string literal that I noticed.

</comment><comment><USER22> Keywords..... keywords everywhere....

</comment><comment><USER23> Don't the point of such "Why eating feces is good" articles. I thought there are some converters from vb.net to C#, if there are none - then rewrite those damn tutorials, you'll end up saving much more health than if you do manual convertion.

Let's just _bury_ that whole idea of 'programming for non-programmers' along with ugly shit that arose from it (cobol, vb, etc).</comment>


Five Dollar Programming Words - <AUTHOR> http://www.codinghorror.com/blog/archives/001244.html

<comment><USER2> _Sciolist_

One who knows many things superficially; a pretender to science; a smatterer

</comment><comment><USER3> "A function is "idempotent" if the result of doing it twice ( _feeding the output of the first call into the second call_ ) is exactly the same as the result of doing it once. (Or, in other words, every output of the function is idempotent under it.)"

Uh?? According to this definition this wouldn't be idempotent:

      (defun add-one (x)
        (+ x 1))

      CL-USER> (values (add-one 5)
               (add-one (add-one 5))
               (= (add-one 5) (add-one (add-one 5))))
      6
      7
      nil

edit: What the... Wikipedia seems to be agreeing with him. It seems I mixed up idempotence and referential transparency, I thought they were equivalent concepts. I'm confused...

<comment><USER4> I think Jeff conveys the wrong sense of idempotence. He has somehow extracted the purely mathematical sense, while the source he quotes goes on to explain the programming angle.

<comment><USER5> Yeah, I had never heard 'idempotence' used in a mathematical sense before. I just think of that as a function hitting a fixed point.

</comment></comment></comment><comment><USER6> I really do like Jeff Atwood, I think for the most part he has been beneficial to the community. But for the love of god, I wish he would stop making half of his post quotes from someone else's post. I don't mind that he gets an idea to write something based off of another person, but he could at least add something substantive to it.

<comment><USER7> I see him as a sort of Reader's Digest of programming. Not sure if that's good, mind you.

<comment><USER8> Reader's Digest of programming is the perfect description!</comment></comment></comment>


Extensibility in Vim vs. Emacs - <AUTHOR> http://items.sjbach.com/560/extensibility-in-vim-and-emacs

<comment><USER2> That's a nice comparison - basically lists the reasons why I started looking for something better after writing 2-3 vim plugins... (it only misses the problem of integrating vim with external commands)

But then I found a really nice piece of software - Yi. It's a vim/emacs type (yes - both!) type editor. It's written and extendable in haskell. The keymap is implemented as a parser on user input, so keymap modules include vim (with modes / simple ex mode), emacs and others. The code is very easy to understand (I actually learnt haskell while patching it for my needs) and includes most standard features - tabs, buffers, editing, some syntax files... even basic ghci shell :)

It's not "ready" yet, but I would say it can be described as a "usable beta". If someone really likes the vim idea of editing with modes and is disappointed by vim's plugin model, then Yi is definitely worth a try.

</comment><comment><USER3> Extending Vim really is a pain if you're trying to stay within Vim. Your best bet is to rely on piping output to other shell utilities to get the desired behavior. :r!cmd reads output of given command into current file. After selecting a set of lines with "V" you can pipe them through a shell command like so:

      :'<,'>!cmd

I've also found that you can accomplish a lot with a hastily recorded Vim macro. To start recording keystrokes into buffer "a":

      qa

When you're done, hit "q" again and you're macro is saved. "@a" to execute macro.

Vim commands string together pretty easily, and I've done some serious refactoring on good ol' C and ASM with this method back in the day.

These days I'm writing Java in Eclipse, which just doesn't have the same feeling to it.

</comment><comment><USER4> Yi sounds like a good alternative to Vi and Emacs: the philosophy of Vi, with the extensibility of Emacs.

The catch? It's written in, and it's extension language is, Haskell (which is why I've never used it.)</comment>


Kernel-Bypass Networking - <AUTHOR> https://www.godaddy.com/engineering/2019/12/10/Kernel-Bypass-Networking/ <comment><USER2> Couldn't read that in Hong Kong because GoDaddy automatically redirects me to the hk.godaddy.com domain, which doesn't have that article.

Update: If you are like me and can't see the article at your localised GoDaddy.com website, you can (hopefully) select United States at the bottom of the page to force GoDaddy to serve you the US site.

</comment><comment><USER3> How important is it to bypass the kernel if the kernel doesn't get to see/handle each packet individually?

As soon as you get the hardware to handle TCP reassembly and just wake the kernel up once per few megabytes of data sent/received, things scale well again.

There's work to do though - there are no systems around today that I'm aware of which can send data from SSD to a TCP socket (common use case for cache server) without the data itself going through the CPU (despite most chipsets allowing the network card to be sent data directly from a PCIE-connected SSD).

<comment><USER4> I suppose that CPU would schedule a DMA transfer from SSD to RAM, and then from RAM to a NIC.

For NICs that have memory-mapped buffers, it could be just one transfer.

What am I missing?

<comment><USER3> Nothing. That's how it would work. But today's Linux kernel doesn't do that (even when you use the sendfile() API)

<comment><USER5> > But today's Linux kernel doesn't do that (even when you use the sendfile() > API)

Oh ? I'm quite disappointed, I thought that was the whole point of sendfile() ! What does it do if not that ?

<comment><USER6> simple data transfer is : SSD -> kernel -> user-space -> kernel -> NIC

sendfile allows for: SSD -> kernel -> NIC

which is already a major improvement

<comment><USER5> Right, silly me, I had forgotten userspace :). Thanks !

</comment></comment></comment></comment></comment></comment><comment><USER7> > Typically, an application using BSD uses system calls to read and write data > to a socket. Those system calls have overhead due to context switching and > other impacts.

On the other hand the kernel isn't standing still, overhead reductions have been trickling in over decades. sendfile, epoll, recv-/sendmmsg, all the multi-queue stuff, kTLS with hardware offload, io_uring, p2p-dma. The C10k problem was tackled in 1999, userspace APIs can get you much further today.

<comment><USER8> The current approach is fundamentally not going to work in the long term. 100Gbps at line rate means single digits[1] of nanoseconds between frames. At that frequency, a cache miss is pretty bad.

This is all not to mention locks, or that there are competing functions running in most distros (turn off irqbalance completely and watch your forwarding rate increase).

The low hanging fruit seems to have been picked as well - NAPI polling, interrupt coalescing, RSS + multique NICs + SMP, etc, are already out there, and we're still struggling to do 10G line rate in the Kernel...and data centers are moving quickly to 25/100G.

[1] Edited for terrible math - 10Gbps at line rate is 67ns per packet, 100Gbps is 6.7ns

<comment><USER9> We are not struggling to do line rate 10G in the kernel. Modern 100Gbe nics (mellanox, solarflare) will happily do line rate with stock upstream kernel for a while now (definitely since 4.x) you only need to tune your irq balancing, and you can probably get away with not even doing that. If you are buying 100gbe nics you are also buying server class (xeon, rome) processors that can keep up.

Source: I operate a CDN with thousands of 100Gbe nics with a stock upstream LTS kernel, and minimal kernel tuning.

<comment><USER8> You're saying you can forward 100Gbps at line rate (148MPPS) through a stock kernel?

<comment><USER9> You can get within a few percentage points, yes

I just tested this with two hosts with 4.14.127 upstream kernel and upstream mlx5 driver, and mellanox connectx-5 card. Using 16 iperf threads

[SUM] 0.0-10.0 sec 85.1 Gbits/sec

That's pretty close with no tuning, and well beyond 10gb/s we mentioned earlier

<comment><USER8> 16 iperf threads...sending at what packet size? Do you understand the notion of line rate? 85Gbps at 1500B is only 7MPPS, which is half of 10Gbps at line rate.

<comment><USER10> Where are you getting your definitions? I have never seen "line rate" used to refer to packets per second.

<comment><USER8> It implies it. Ethernet at 84B per frame is the smallest you can go, thus the line rate - some examples:

[https://events19.linuxfoundation.org/wp- content/uploads/2017...](https://events19.linuxfoundation.org/wp- content/uploads/2017/12/jim-Thompson.pdf)

[https://www.redhat.com/en/blog/pushing-limits-kernel- network...](https://www.redhat.com/en/blog/pushing-limits-kernel-networking)

[https://kernel-recipes.org/en/2014/ndiv-a-low-overhead- netwo...](https://kernel-recipes.org/en/2014/ndiv-a-low-overhead-network- traffic-diverter/)

<comment><USER10> "How do you fill a 100GBps pipe with small packets?"

"achieve 10 Gbps line rate at 60B frames"

"reaching line rate on all packet sizes"

Line rate is just bits per second. You have to add in a qualifier about packet size before you're talking about packets per second.

<comment><USER8> Nope, I'm sorry you're not quite getting it here. Minimum Ethernet frame is 84B on the wire - it's simple enough from there.

<comment><USER11> I've never heard this weird qualification for the definition of "line rate" that it somehow requires minimum packet size, so I looked it up. The first three sources for a quoted big-g search all imply or directly state that it's the same as bandwidth:

[https://blog.ipspace.net/2009/03/line-rate-and-bit- rate.html](https://blog.ipspace.net/2009/03/line-rate-and-bit-rate.html)

[https://www.reddit.com/r/networking/comments/4tk2to/bandwidt...](https://www.reddit.com/r/networking/comments/4tk2to/bandwidth_vs_line_rate_vs_throughput_vs/)

[https://www.fmad.io/blog-what-is-10g-line- rate.html](https://www.fmad.io/blog-what-is-10g-line-rate.html)

Also, for gigabit networks, ethernet packets are padded to at least 512 bytes because of a bigger slot size: [https://www.cse.wustl.edu/~jain/cis788-97/ftp/gigabit_ethern...](https://www.cse.wustl.edu/~jain/cis788-97/ftp/gigabit_ethernet/index.html)

<comment><USER12> Line rate does imply pps at the smallest sized frames in the context of networking equipment performance. Vendors use it extensively in their docs.

64B is the minimum frame size in Ethernet, including interframe gap and preamble its 84B on the wire. It is the same with Ethernet, Gigabit Ethernet and even 100Gbit Ethernet, that source is not correct.

[https://kb.juniper.net/InfoCenter/index?page=content&id=KB14...](https://kb.juniper.net/InfoCenter/index?page=content&id=KB14737)

<comment><USER13> No line rate does not "imply pps at the smallest sized frames."

Network hardware always quote PPS using the smallest sizes. And this makes sense for things like route and switch processors. Perhaps you are confusing that.

You should reread your link a little more carefully. From your link:

">However it is also important to make sure that the device has the capacity or the ability to switch/route as many packets as required to achieve wire rate performance."

The key phrase there is "as required." Almost nobody needs to sustain forwarding Ethernet frames with empty TCP segments or empty UDP datagrams in them. In fact many vendors will spec for an average size. Since packet size x PPS will give you your throughput, if the average packet size is larger you need much less PPS to achieve line rate.

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER14> Disclaimer: I work on VPP.

The typical usecase are virtual network functions: think virtual switches/routers used to interconnect VMs or containers, or containerized VPN gateways etc. It is also used for high-performance L3-L4 load-balancers etc.

As pointed out by others, what is hard is to move small packets. TCP with iperf is not relevant for this kind of workloads. It is easy to max out 100GbE with 1500-bytes packets, but with 200-bytes packets not so much. This is why they communicate about PPS, not bandwidth.

There results seems low but it is hard to tell without knowing the platform or configuration. VPP can sustain 20+Mpps / core (2 hyperthreads) on Skylake @2.5GHz (no turboboost).

<comment><USER15> VPP is amazing - you made my work life much easier... for free :-). Great work. More people should dig into high-perf open source networking.

Thank you!!

</comment></comment><comment><USER16> I wonder what motivated GoDaddy to research this at all, since at the end they say that it isn't necessary to pursue their research any further. Driving tech-minded traffic with blog posts?

<comment><USER17> Have you seen how much a router costs? And probably they don't need to route any faster.

</comment></comment><comment><USER18> This was already an issue back at the beginning of the century at CERN, to handle high data rates.

Here is a relatively recent paper of the kind of work being done in this area,

[https://iopscience.iop.org/article/10.1088/1748-0221/8/12/C1...](https://iopscience.iop.org/article/10.1088/1748-0221/8/12/C12039/pdf)

</comment><comment><USER19> What are the disadvantages of kernel bypass?

<comment><USER20> You don't get kernel features anymore, and have to re-implement the ones you need yourself.

<comment><USER8> Correct - things you take for granted like ARP and TCP/IP are completely up to you to take care of. Further, the Kernel has little visibility into most kernel bypass stacks, so /proc or iproute are often blind to what's happening.

DPDK does have "kernel interfaces", so you can direct packets to the kernel.

</comment></comment></comment><comment><USER21> I wonder why this sort of thing seems to be thought radical. Infiniband RDMA well estabilshed, with low latency and high bandwidth. (There was DMA between the micro-kernel-ish systems we used in the 1980s which got basically Ethernet line speed on <1 MIPS systems, as I recall; I assume it wasn't a new idea then.)

<comment><USER22> and fibrechannel, and various other protocols too. The point being that ethernet+IP/TCP is uniquely poor/difficult at offload and the minimum packet sizes are tiny.

TCP is genius for a WAN, but unlike most things designed in the past 25 or so years, robustness precedes performance.

<comment><USER21> Kernel bypass isn't the same thing as offload. I don't understand "minimum packet sizes are tiny". The 1980s system was driving Ethernet, just not with Unix/sockets.

</comment></comment></comment><comment><USER23> Berkeley not Berkely

<comment><USER24> [https://www.youtube.com/watch?v=pKoK9znaPSw](https://www.youtube.com/watch?v=pKoK9znaPSw)</comment></comment>


Is Google's Larry Page Already Turning Out to Be a Truly Great CEO? - <AUTHOR> http://adage.com/article/the-media-guy/google-s-larry-page-turning-a-great-ceo/230004/

<comment><USER2> It might be a fun topic to kick around, but it's ridiculously soon to conclude anything. Even Apotheker looked like he might have been competent after only six months.</comment>


Processing and Racket - <AUTHOR> http://moron4hire.tumblr.com/post/51904590190/processing-and-racket <comment><USER2> The example from the Racket documentation is from "Quick: An Introduction to Racket with Pictures": <http://docs.racket-lang.org/quick/> . I think that the idea is to give a step by step tutorial for the beginners that introduce one instruction at a time.

The example from the Processing documentation is from "Tutorials. A collection of step-by-step lessons covering beginner, intermediate, and advanced topics." <http://processing.org/learning/> It looks like a collection of unrelated projects with very nice drawings but the learning curve is much stepper.

They are different things. Nevertheless, I like the idea of some nice visual projects and snippets and it would be a nice addition to the Racket documentation. (But I'm not a Racket developer.)

This reminds me the example page of one of the LaTeX drawing packages: "TikZ and PGF examples" <http://www.texample.net/tikz/examples/all/> It creates the "I must learn this." feeling in an instant.

<comment><AUTHOR> Yes, you are correct that they are different things. I am presenting them as a potential user's earliest visual introduction to the projects. But it seems you've got the premise, that pictures excite people and draw them in, keep them around. I like that, "I must learn this!"

For Racket, it takes us at least an hour of reading to get to that first "oh!" moment, and it's not that compelling to boot. With Processing, the "look at that!" moment is immediate and continually reinforced. It's a sideways reminder of why you're continuing to slog through the documentation.

In terms of quality of documentation, Racket's is far superior to Processing's. I just fear that beginners are more likely to quit before getting very far.

<comment><USER3> _that pictures excite people and draw them in, keep them around_

They may also excite them because doing pictures the "traditional" way (PHP/GD, GDI, even Cairo) feels like using stone age tools, while combinator libraries (such as Alex Shinn's fmt, for example) are a hip new thing, for a reason.

 _Where Racket succeeds over Lisp and Scheme_

Huh, that's almost like like saying "Where Visual Studio C++ succeeds over C". It's still on the inside, isn't it? It was a shady move on their part :-), but I guess that whatever helps Racket helps Scheme in general as well.

Nice article, BTW. Thanks. :-)

<comment><AUTHOR> From my own reading, it seems that most Schemes are almost 100% R5RS compliant, and don't tend to do much more. When they do much more, it's towards R6RS compliance. R6RS adds a lot, but still nowhere near the full range of a full-package applications development language, much the same as your analogy of VC++ vs, say, C99. And as for Lisp, I guess I'm just used to saying Lisp and meaning Clisp, but any of the "ready for app dev, with parens and prefix notation" languages would fit here--e.g. Clojure--as they all take the approach that compromises in pure syntax are necessary to achieve practical usability.

So I think that's where Racket _is_ apart from the Lisps and the Schemes: its core language is syntactically minimalist, as a Scheme, while it strives to have a vast standard library, as a Lisp. Three years ago, they renamed it from PLT Scheme to Racket for this reason.

Anyway, I don't know anything about relative user bases for any of the paren languages. I guess "succeeds" was poor word choice on my behalf. I meant more "seems like a better idea to me."

<comment><USER4> _"So I think that's where Racket is apart from the Lisps and the Schemes: its core language is syntactically minimalist, as a Scheme, while it strives to have a vast standard library, as a Lisp. Three years ago, they renamed it from PLT Scheme to Racket for this reason."_

Chicken Scheme is in the same position. It has a pretty extensive library, extends far beyond R5RS, avoids R6RS, and plans to be R7RS compliant.

It also has the great advantage of compiling down to C.

<comment><USER5> > Chicken Scheme is in the same position. It has a pretty extensive library, > extends far beyond R5RS,

May be I am looking from Racket's vantage point, but chicken scheme is R5R7 + some srfi. Compared to Racket which adds oop, myriad of languages(lazy, typed, datalog...), units, factories...chicken looks like a pretty loyal scheme.

> It also has the great advantage of compiling down to C.

I am curious. If I am not planning cross compilation, what other advantage compiling to C has? I can bundle the runtime to produce a standalone executable in case of racket as well("raco exe" and "raco dist"). Chicken produces smaller executable but that depends on libchicken. Static linking(for distribution, either I will have to bundle libchicken or static link) produces executable big enough that the size difference is negated.

</comment></comment></comment></comment></comment></comment><comment><USER6> At first I thought this article was how to use processing and racket together (headline) but it seems that it advocates for the use of racket and possibly for it to have richer documentation.

I have been using processing for many years and there are many different ways people get into the language: 1) through artists and their works, think Casey Reas, Aaron Koblin and the tutorials by Daniel Shiffman. 2) through specific use cases like, I want to hook up my kinect and do x. 3) it is taught in may experimental arts and datavis classes / tutorials. and 4) lore, I have heard from many people "processing seems like a good fit for x" 5) an so on.

I think where processing excels or has exceled in the past is being able to quickly pick up more experimental bits of code and libraries in Java / C++ and put a simpler syntax in front of them. People often say, processing is really just java. And to be specfic, it is just a preprocessor and an api/library (core.jar) for Java. The processing IDE is okay for beginners but most people that get serious with it move to an external text editor or IDE like Eclipse.

In my opinion it is not the simplified Java syntax that makes it great to work with it is the philosophy that drives the api. It is very easy to start drawing shapes in just one line of code. They create duplicate methods so you can pass in ints, floats or another datatype without resorting to casting.

There are also a bunch of offshoots, processing.js, ruby processing, etc. which are pretty exciting. Often the way the api is ported is not the best fit for the new host language. I have played with a bunch of these and they are fun but they seem to not get the kind of traction the main processing project does.

I think if you are wanting to advocate racket more effectively you should look at the historical linage of processing (design by numbers, data visualization by ben fry, etc.) and you will see why so many of the learning/documentation focuses on things that interest designers and artists. If you want to do the same for Racket, get some artists to do some awesome work. Then have them document it, break it apart and share it. I think this is how such a large community has sprung up around processing and why so many projects continue to use it today.

The other project that works really well with processing/js is toxiclibs/js. You should consider porting it if you want to draw in some of the newer crowd.

<comment><AUTHOR> That's a good point, there is a lot to learn from Processing's history as well as its less popular offshoots.

</comment></comment><comment><USER7> I'd love to see Racket "feel" doable to young and old alike who aren't computer scientists.

A visual redesign could help. Especially a redesign of the IDE user interface. But first some fun examples to inspire people would be best IMHO.

To find this project ASK the people you're trying to reach. Listen. Then find a young person who's game. Ask them if they'd make a project with Racket and write a blog post about it. There's nothing like getting inspiration from your peers. This blog post may already exist. In other words the people who are beginners need to help reach other beginners.

Or what about Try Racket? <https://github.com/voila/try-racket> Is this project running online somewhere?

The power of Macros with the ease of Processing would truly be a powerful thing!

<comment><AUTHOR> Yeah, I've been looking at DrRacket pretty closely lately. I jump back and forth between it and Emacs right now. Emacs is a bit easier to use for long typing sessions, but DrRacket indents better. I understand that most of the serious Racket developers use Emacs, I just haven't gotten into the flow of using it yet. I was briefly very hardcore into Vim, but I eventually realized that its lack of proper plugin control meant major headache was in store for me down the road as I grew out my installation.

There are some interesting features of the toolkit that DrRacket uses to display itself. Having done a small amount of work with formatted text editors in the past, the controls that DrRacket has for doing its syntax highlighting and inline-image-inclusion are very novel and advanced.

It's just all incomplete. There are things that seem like they should be there, like a file browser, that either aren't or I'm not seeing.

I'm not sure what is going on with Try-Racket. There was talk on the listserv about putting it on racket-lang.org, but I'm not involved in the dev group, I'm just a user. It's probably one of the many things they'd love to have, but have bigger fish to fry.

<comment><USER8> > I understand that most of the serious Racket developers use > Emacs, I just > haven't gotten into the flow of using it yet.

You would be surprised how many of the die-hard Racket programmers use DrRacket for Racket programming. Nothing beats Emacs/Vi for normal text editing, but since DrRacket was written with one purpose only, namely editing Racket code it has a few tricks up its sleave.

Syntax checking while you edit your code, means that any errors you make are highlighted immediately. This also catches misspelled identifiers.

After syntax check you can right click any identifier to rename the identifier (which automatically changes all occurences of the identifier in the file). The renaming even respects lexical scope.

You can easily jump to the file where a identifier is defined (I love to see how things in the builtin libraries are written).

DrRacket will display bitmap and other image values directly in the REPL. This must more convenient than seeing <struct: bitmap>.

You can even change the default REPL printer, to print your own user defined values using gui elements.

One of the most impressive features is how precise the error messages are reported. This goes for both standard errors, but not the least when macros are involved. If you compare the error reports you get from a few errorneous macros in DrRacket and in a standard Racket implementation, you'll see that you can save a lot of time if you use DrRacket.

And while at it, don't forget to try the macro stepper...

Oh! And syntax objects are clicable, so you can see "inside" them. This is gold when debugging macros.

A recent feature: String constants are now spell checked. (if you have ispell/aspell installed).

<comment><AUTHOR> Yes, those are all exactly the reasons I still use DrRacket. It seems it would be easier to add features to DrRacket than to write plugins for Emacs/Vi, especially considering the goals of Racket to train users, the default system should be as best of a system as time and manpower allow.

</comment></comment></comment></comment><comment><USER9> Might it be easier to start with Clojure and make it more like Processing, since it can already use all the Processing Java code from the start?

<comment><AUTHOR> I don't think there is anything significant from a technology standpoint that prevents using Racket in a manner similar to Processing. It's more of a set of priorities, a reorganization of documentation, a small amount of bootstrapping. Frankly, it's probably nothing more than establishing a presence of the community's projects on the main language site.

</comment></comment><comment><USER10> Kawa plays well with Processing: <http://www.gnu.org/software/kawa/>

</comment><comment><USER11> What a horrible page design. The content takes up less than 30% of the page. And devotes the rest of the real-estate to a picture that has nothing really to do with the article.

Yes big pictures make your page more attractive. But this is going way too far.

<comment><AUTHOR> I am so sorry, OMG, I apologize profusely. Please, forgive me for offending your delicate sensibilities. I knew not what I did.</comment></comment>


Digital microwaves show an example of good UI doing what you wanted - <AUTHOR> https://utcc.utoronto.ca/~cks/space/blog/tech/MicrowaveGoodUIBehavior <comment><USER2> Probably the greatest UX innovation in microwaves I've noticed is the "start now for 30 seconds and keep adding 30 seconds every time I press this" button.

Want 90 seconds? Press the button 3 times.

Want 5.5 minutes? Keep pressing the button until the display says you're there.

That way there's no confusion about what 120 means. For one thing, the difference between 20 seconds and 30 seconds is negligible, so might as well only work in half-minute increments in the first place.

</comment><comment><USER3> The very newest microwaves try to get you to install an app that phones home everything you cook in exchange for being able to scan a barcode to set the time and "hands free control."</comment>