GNUstep LiveCD 2017 - <AUTHOR> http://www.aiei.ch/gnustep/ <comment><USER2> Happy to see the GNUstep project still alive and kicking. WindowMaker has been the daily driver at my home desktop since 2000 when I first installed Debian and found the KDE & GNOME desktops way too heavy and unstable.

At this point, I am just too accustomed to WM to try anything different. It's a great window manager and has all the bells & whistles I ever need, yet it's blazingly fast. Though lately some KDE software has been misbehaving under my present-day Arch Linux install (small rendering issues, probably a theme configuration error), but as long as GTK + Firefox + xterm work, I am happy enough.

<comment><USER3> Do you still get plug and play for e.g. USB drives and such when using Windowmaker? (As compared to a full desktop environment such as XFCE or KDE.)

<comment><USER4> Yes. This is all handled via udev, udisks & co., XFCE, Gnome and KDE have nothing to do with it (other than having it work more or less out of the box).

<comment><USER5> Of course, since the headlined article mentions the absence of systemd, this raises the question of whether there is udev in there.

<comment><USER2> They do have it: [http://www.aiei.ch/gnustep/gnustep-2.5.txt](http://www.aiei.ch/gnustep/gnustep-2.5.txt)

udev existed before systemd, but was merged to it sometime in 2014. By quick Googling there are still several forks that maintain it as a separate component.

<comment><USER6> My understanding is it's in the same repository (for convenience), but is logically separate, so "forking" it mainly means copying the correct directory.

<comment><USER7> No, it's tied to systemd. That was one of the big reasons behind systemd adoption in the first place.

<comment><USER8> Eh, not really. Many Parabola users who use OpenRC instead of systemd still use systemd-udev, as opposed to eudev or one of the other non-system forks.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER9> Two interesting things: _No systemd but classic init_

Well, that's one quick way to win a few people over.

Among future items: _Versions based on ReactOS, Minix3, Plan 9, and GNU /kFreeBSD_

Really intriguing, but how many people have you got working on this?

<comment><USER10> I feel like the anti-systemd folks are just helping systemd by portraying the only two choices as systemd and classic init. It _used_ to be the consensus that there were real problems solved by non-classic init systems, of which there were several decent options, systemd being the most popular but also the most controversial. I think there are serious problems with systemd and I want a _decent_ featureful init / boot-ordering system, but given the choice between classic init and systemd I'd definitely pick systemd.

As an example of the most basic improvements over classic init, here's a paper from 2001 from OpenBSD about dependency-based init with no runlevels: [https://www.usenix.org/legacy/event/usenix01/freenix01/full_...](https://www.usenix.org/legacy/event/usenix01/freenix01/full_papers/mewburn/mewburn_html/)

Since this is Debian-based, does "classic init" in this context mean they're using insserv? That's definitely not "classic," but it's definitely a better option IMO. If so, are they interested in helping out with maintaining insserv in Debian? It hasn't seen a maintainer upload for almost five years, and help is requested: [https://bugs.debian.org/834284](https://bugs.debian.org/834284)

<comment><USER11> I think the biggest issue of SystemD was not only the controversial development process, but the dependencies of other projects like udev into SystemD's repo and packaging.

<comment><USER12> Bingo. Rarely if ever have i seen someone considered anti-systemd as being pro-sysv. What they are pro however is init diversity.

With sysv, it was relatively easy to slot in a different init as the admin wanted.

A distro i have used for some time, Gobolinux, may use the sysv init binary for example. But it forgoes the usual sysv layout for one more akin to just a rc.local.

But with systemd it is systemd, and only systemd, because systemd is so "invasive".

And the real worry is when third party developers assume systemd as the default and make it hard, or resist, supporting alternatives.

</comment></comment></comment></comment><comment><USER13> Any word on Étoilé? That seemed to be interesting project built using GNUstep. Doesn't seem to be any activity in the repo since Dec 2016.

[http://etoileos.com/etoile/](http://etoileos.com/etoile/) [http://etoileos.com/](http://etoileos.com/)

<comment><USER14> the important parts were added back to gnustep.

<comment><USER15> Including libobjc2, which is a substantial improvement over the old GNU implementation. And it's MIT licensed!

[https://github.com/gnustep/libobjc2](https://github.com/gnustep/libobjc2)

</comment></comment></comment><comment><USER16> Lunduke did a pretty funny "review" of it: [https://www.youtube.com/watch?v=eFSTnZM27Gc](https://www.youtube.com/watch?v=eFSTnZM27Gc)

<comment><USER17> Thank you. It helps me understand how it looks and works.

</comment></comment><comment><USER18> I used WindowMaker in the late 90s on Redhat 5.0. At the time it was the most Windows-like environment (e.g. icons could be added using the GUI instead of editing a config file) I had access to on Linux, and that similarity made it more usable to me that FLWM or whatever came with Redhat. The dock and applets were what kept me using it even after KDE and Gnome came out. Off and on I'd try it, but the progress seemed extremely slow. For those that have used NextStep, how does the GNUstep environment compare?

<comment><AUTHOR> In actual day to day use, I've found it to be a little wonky. Wmaker has its own widget system similar to the Foundation stuff that GNUStep uses, and the two sometimes run afoul of each other (dockapps, withdrawn windows, even the menu bars). Never could get the GFiler project to quite jive with wmaker.

Most of the apps written using GNUstep work fine, though. I should note, I haven't given this liveCD a whirl just yet -- my last attempt with GNUstep was about 6-9 months ago, building from source.

</comment></comment><comment><USER19> I like that GnuStep is still out there. That's awesome.

Quoting a study from 1992 is kinda funny. But NextStep is a faster development environment than SunOS. Preach on, brother.

</comment><comment><USER20> An interesting video showing some features of NeXTSTEP, on which GNUStep is based:

[https://www.youtube.com/watch?v=UGhfB- NICzg](https://www.youtube.com/watch?v=UGhfB-NICzg)

</comment><comment><USER21> I've always been intrigued by GNUstep but never kept it around for long. I think I'll give this a spin. I notice it's based on Debian but uses classic init. I switched all my workflow to OpenBSD on servers and Slackware on a couple of laptops and desktops over the last year or so but before that I'd used Debian exclusively on everything for over 15 years.

This offering has definitely piqued my curiosity! At least enough to try it in a VM...

</comment><comment><USER22> I was really interested in the NeXT machine but couldn't afford one. So when I got my hands on a surplus PC I set it up with Red Hat and WindowMaker. WM was okay as long you used programs intended for it but I never really got used to it.

Then I switched to S.u.S.E and using KDE and never looked back.

</comment><comment><USER23> I was kind of hoping this would be built on top of XNU/Darwin.

Still cool, though.

<comment><USER15> Relatedly, someone was working on bringing Mach IPC, kernel-space libdispatch, etc. to FreeBSD. Doesn't look like it's still active, though.

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

</comment></comment><comment><USER24> GNU and terrible looking web pages and logos correlate still :D

<comment><USER25> At least not standard three-column landing page with huge fonts, cheesy icons and "testimonials", like most of corporate opensource.

<comment><USER26> I hope [https://www.gnu.org/software/emacs/](https://www.gnu.org/software/emacs/) and [https://www.gnu.org/software/guile/](https://www.gnu.org/software/guile/) don't disappoint you :)

</comment></comment></comment><comment><USER27> Weirdly enough when trying to install wmaker on debian it seems that it does not depend on any GNUstep packages. Indeed, it seems to be using libwutil5 instead.

<comment><USER28> WindowMaker predates GNUStep and is just a window manager that has a NextStep theme. I used it on Linux in the late 1990s.

<comment><USER29> GNUStep predates WindowMaker by a couple of years, and windowmaker.org states:

Window Maker is an X11 window manager originally designed to provide integration support for the GNUstep Desktop Environment.

<comment><USER28> WindowMaker was released in 1997. GnuStep in 1998 (yes, it had been _announced_ years earlier). While it may have been the author's intent all along to support GNUStep, the reason why it doesn't rely on any GNUStep libraries is that they didn't exist at the time.

</comment></comment></comment></comment><comment><USER30> Reminds me of early 2000 when I started with WindowMaker, moved to Fluxbox, then Enligtenment and finally kept switching between KDE and Gnome.

</comment><comment><USER31> Laptop support?

</comment><comment><USER32> "One could say that GNUstep is a very nice woman, but without proper make-up and with a shabby dress. Although the expert eye could see the star sparkle, the average person maybe would prefer a more normal female with choosen make- up and dress."

I'm sure everybody here will appreciate this nice nugget of gentlemanly wisdom.

(Should I add </sarcasm> here?)

<comment><AUTHOR> Comparisons like this always make me cringe. Do we have to use women as the comparison for things like this?

As a woman in tech, this kind of comparison almost always makes me want to disengage.

<comment><USER33> As a man in tech I still had the same reaction. At best it just screams amature hour. At worst it is downright misogynistic. Frankly, to me it comes off a little of both.

The only redeeming thing here is that quote wasn't made by the GNUstep maintainers but from the comments section on the blog. However the GNUstep maintainers should have known better than to include said quote on their homepage.

<comment><USER34> As a person in the world I had the same reaction!

</comment></comment></comment></comment><comment> torrent-of-ions >As a woman in tech, this kind of comparison almost always makes me want to disengage.

And that's why there are not many women in tech. Stop taking things personally. I don't care if you're a woman. Is that a good thing or bad thing? I'm not sure any more. Is it not OK to use people to make analogies?

<comment><AUTHOR> I'd like to clarify something here: I'm not taking this personally. I mentioned that it's off-putting and makes me not want to be in the field, and I'm part of one of the groups that we're all so concerned with getting more of in tech lately. If you care, you'll listen. If not, well, so be it. I don't care.

Normally I'd keep my mouth shut about this kind of thing, but I spoke up because I've finally run headlong into this kind of crap in the workplace, despite my 20 years of experience in the field, and I don't want to deal with it anymore. It's unprofessional and unwelcome. I've been shouted down, talked over, laughed at, yelled at, and fought with, demoralized, and stepped on. And I'm used to dealing with the usual technical fracas with intelligent folks in IT, and can go toe-to-toe with others on technical issues without taking it personally.

Up until recently, I've been lucky enough to avoid all of the crap by working with people that actually respect me for my talent. Now that I've moved out east and experienced it first hand, I don't want to experience it again. So I'm speaking up and asking you and others to stop it, and telling you it's one of the reasons my particular subgroup is being driven out.

Take it or leave it.

<comment> torrent-of-ions What are you even talking about? I've also been shouted down, talked over and the rest. What does that have to do with the analogy for which you felt the need to express disapproval and play your "woman in tech" card?

You have a strong air of superiority. You seem to think that because you are a woman that you are more important than me. I'm sure this is because you are a part of the group that "we're all so concerned with".

Well, guess what? I am not concerned about getting more of any group of people in tech. I want people in tech who want to be in tech. Simple as that. I support lowering the barriers to entry even lower than they are right now. Free software and Raspberry Pis are great. They are cheaper than Barbie dolls now. We're doing really well.

What I don't support is trying to force a particular group of people to do something that most of them don't want to do. As a woman in tech yourself you must surely see that it is possible and that there are no extra barriers to any other woman who wants to pursue the same path. Or do you think that you are special and all those other, weaker women need more help to do what they want?

<comment><USER35> The personal attack you crossed into here is completely unacceptable on HN. I've banned this account.

All: introducing personal abuse into what is already a divisive and inflammatory topic will get you banned here, so please just don't do it.

</comment></comment></comment></comment><comment><USER36> What do the words "man", "woman", "male", "female" really even mean these days?

<comment><USER35> We detached this comment from [https://news.ycombinator.com/item?id=14979330](https://news.ycombinator.com/item?id=14979330) and marked it off-topic.

</comment></comment><comment><USER37> Is there a Swift environment running on this yet? /s

<comment><AUTHOR> There's steptalk which is effectively a smalltalk environment embedded inside of the Objc runtime. See also the Etoile project here: [http://etoileos.com/news/archive/2006/05/28/2222/](http://etoileos.com/news/archive/2006/05/28/2222/)

<comment><USER38> I was going to bring up Etoile; I assume it's dead, since there doesn't seem to been any activity for a few years?

<comment><AUTHOR> At least in the blog/news areas sure. I wouldn't doubt if there's been development on the IRC channels and the mailing lists, though.

I does seem like they were having a bit of an identity crisis around the time steptalk was put together, though.</comment></comment></comment></comment>


Python, the Web and Little Things on my Mind - <AUTHOR> http://lucumr.pocoo.org/2011/1/22/python-the-web-and-little-things/ <comment><USER2> Well, that seals the deal. Bummer.

I really hoped Armin would come around, and I committed to Werkzeug for a new project with eyes on 3. This was a direct result of the PEP 3333 acceptance, and I apparently backed the wrong horse.

The worst part of this whole thing is that it is getting harder to explain working in Python to my other-language friends. Well there's 3, and yeah it's at 3.2, but don't use it. Nobody uses 3. Maybe distribute. Maybe setuptools. I'm not sure.

As a non-participating, quiet consumer of Python, I am very confused about the future of my chosen language. I think it is intermediate, perhaps career- minded (internal) users of Python like myself that are confused the most.

Edit: On reflection, I was encouraged to see what I perceived to be frustration on the part of GvR (in the acceptance thread for 3333 on Web-SIG), so here's hoping this will be a good year.

<comment><USER3> > I really hoped Armin would come around, and I committed to Werkzeug for a > new project with eyes on 3.

All commits to Werkzeug are currently happening with a port to Python 3 in mind. However I am not going to do the same mistake the standard library made in many parts and change the semantics of the library for Python 3 and trusting 2to3 to do the correct thing.

A full port of Werkzeug to Python 3 will take time but it will happen eventually. The point here is that everybody should go with Python 2.7 and write the code forwards compatible. Then you have all the options (of going with PyPy if you need and upgrading to Python 3 if it's worth the effort).

All I can say right now is that so far users are not too eager with Python 3 yet and I have limited resources as well. If anyone wants to help out, I am more than happy to assist in any way possible to make Werkzeug run on Python 3. I also monitor changes in the stdlib that could affect WSGI on Python 3, so it's not that I'm ignoring it.

Python is _not_ on the way to suicide. All I said was that _right now_ you shouldn't be too concerned with Python 3 yet and instead make your own code upwards compatible. If your base Python version is 2.7 upgrading will not be the biggest problem, especially not if you are working on a high level like you do when you use a web framework.

<comment><USER2> > I have limited resources as well

I'd like to make clear that I wasn't bitching, because I know _exactly_ how the limited resources dance goes. Disappointment with further confusion between Python 2 and 3, yes; disappointment with you, no (are you kidding? half my stack is Pocoo stuff).

> All I said was that right now you shouldn't be too concerned with Python 3 > yet

The real question is when "yet" will be. Python 3's been out two years, and I don't think I'm alone in the community in wondering if it'll ever be completely figured out. The fact that PEP 3333 was _just_ accepted is a testament to the slow nature of the thing.

It's getting tiring to want to use 3 but instead having to stick with 2to3. Even that is a distant goal: when will I be able to finally _run_ 2to3 and move entirely to 3? If I'm entrenched in a lot of Python 2 libraries, I'm beginning to believe (two years later) that the big day will never come.

Python 3 is great. I want to use it. It's fights like Web3 vs. WSGI and the resistance to (or impossibility of) porting the libraries I use that are personally keeping me away from it. I think that speaks for the lack of eagerness to move to 3 that you've observed. It's very real, and entirely, I think, due to libraries.

I'll be at PyCon as well on behalf of my employer, and I'm interested (as it sounds like you are, from your blog post) to hear what the consensus is on Python's future. Right now, I have a lot of questions, and nobody seems to have answers.

<comment><USER4> We have had answers for the past two years: Python 3 adoption will be measured in terms of _years_ and will only come as third party modules (such as Numpy, Scipy, and many others) slowly make the port.

No one has ever claimed it to be publicly ready for product, but more and more libraries are porting every single day - forward progress is being made, but like all change in the community, it takes time.

I'm a core developer: and even I stick to python 2 right now because of my dependencies. I know full well that me being able to run Python 3 in production is at least another year, to two years off.

<comment><USER2> That's what I've been told for the last two years -- it'll come, give it time, etc. Then the developer of a library I use announces that a port to Python 3 is unlikely two years after Python 3 is released, and I'm left with even more questions.

I'm curious since you continue to advise patience how you'd react in my position. I've been patient, and now my library of choice for WSGI coming to Python 3 is, quote, "unlikely". What now? Why should _I_ bother caring about 3, if an influential voice in the Python community doesn't? Armin makes excellent points in his post, to be frank.

The fault line is widening, honestly, because of the lack of forward momentum. Your estimate of Python 3 in production being a year to two years off sounds like it come completely out of thin air, as I'm starting to wonder if it will _ever_ happen.

<comment><USER4> Brett and I were just discussing this - and he put up a post summing it up nicely: [http://sayspy.blogspot.com/2011/01/my-semi-regular- reminder-...](http://sayspy.blogspot.com/2011/01/my-semi-regular-reminder- that-python-3.html)

Short version? We planned on it taking at least _5_ years. Armin's point is that Python 3 isn't "there yet" in terms of demand an adoption. Python 3.2 (which increases performances, and fixes bugs) is just coming out. Armin's point - backed by his comments here, is just that demand isn't high enough _for him_ to dedicate the resources to port.

On the other hand, earlier today he was committing bug fixes to the Python 3 source tree, so there's obvious forward movement.

<comment><USER2> That's a good post, and I'm glad Brett took the time to share his thoughts. Characterizing me personally as a naysayer is missing my point entirely. Throughout this whole thread, I've mentioned that I have _questions_. The closest I got to naysaying was a rhetorical "why should I care about 3?". Perhaps that's frustration of others boiling over into his response, but given that my comments were really the catalyst for the post (presumably), I was surprised to read it that way.

Brett, Armin, you, Guido, and the rest of the "in" Python developers expected a long turnaround. I understand that now. Brett touched on something, though: that 5-year estimate was on _python-dev_. That internal discussion does not percolate up to the rest of us that use Python daily but only lightly pay attention to the development ins and outs. I have learned a valuable lesson from this entire thing, which is that I need to pay attention to all of my tools.

How many end users does Brett expect to read python-dev?

You have to look at this from the perspective of a casual user, or perhaps even a user just getting started with Python today.

People always rush to the newest version, and the "Python 2 or 3?" link on python.org is all the way at the bottom, below even Merchandise. (It should be above the download links, in my opinion.) <http://www.python.org/download/> also attempts to very lightly dissuade the user from getting 3:

> they're both considered stable production releases.

> If you don't know which version to use, start with Python 2.7

Those are both true statements, but one can be read as going against the other. Assuming they miss that -- which can be easily blamed on the user, I guess -- new users end up playing around with the Python tutorial in IDLE under Python 3. Maybe a few scripts and adoption of Python 3 specific idioms. Then a friend mentions Django, but wait ... Django doesn't have Python 3 support yet. Now they're confused. What now? Oh, they have to use Python 2 instead, but a lot of code that they've written so far doesn't work under Python 2.

In my very humble opinion, I believe this is a poor time to get started with Python. This transition is hurting new adoption, and there is an incentive to get it finished as quickly as possible. What I don't gather from library developers is a sense of urgency to fix it, and my evidence to that end would probably be the acceptance of PEP 3333 taking ages among other disagreements. The immediate response that I anticipate is _well, we don't have the resources_ , but what I gather from other Python developers like me is that this confusion is hurting more than helping.

I'm honestly not sure how I would have done this differently, and I don't claim to have enough wisdom to even know where I'd begin. My initial question would be, if Python 3 had a 5-year outlook for libraries being ready, why wasn't it stabilized and kept in development for, say, 4 of those years? Was the general release necessary in order to port libraries and get distributions on board with packaging? _I_ understand which I should pick because I have Python experience. A flood of new users probably do not, and comments elsewhere in this thread (such as the suicide one) just demonstrate even more confusion about the entire thing.

Obviously, I fully realize that it's unfair to hold a language back because the libraries need a transition period. However, Python without a library ( _particularly_ for Web development) only gets you so far, and the burden is on the library authors now.

I guess the underlying thought is that if Python 3 is given first-class treatment on the python.org brochure, an uninformed user might expect that a choice between the two is unnecessary. That there is a choice that must be made just serves to confuse and alienate users.

My two cents, and I'm probably off base anyway.

<comment><USER4> Since you took the time to write such a big reply - I owe you the same courtesy. First: I'm not referring to you as a naysayer, just trying to clarify the timeline (both expected and perceived). No - your comments were far from the single catalyst for his post, months of comments built up to that comment, so don't worry - none of this, or that, was a personal attack against you.

I concur - the <http://wiki.python.org/moin/Python2orPython3> page needs to be more prominent. I think the entire download page needs to be junked, and completely rethought out, but I, not anyone else I know have the time or the constitution to do it.

So yes, the download page _could be better_ \- but I don't know anyone willing to change it.

How would _you_ communicate it? Python-dev is public, the plans and designs of Python 3 are open. The lists are open for questions, and I don't know of a single core developer who would not take the time to answer questions. We've made it as public as possible, and reiterated it at every single PyCon, in every blog post we could, etc.

I completely disagree that this is a poor time to get started with python. There is no confusion: Use Python 2 unless you can use Python 3. I use python2 every day, and have no intention of switching to 3 in production before Django and several other things port over.

The python community (see PEPs, the moratorium, web-sig discussions) moves relatively slowly. We get something that works and then we slowly begin to move towards something else. A lot of discussion, and a lot of thought goes into each step.

For example, yes: the general release was necessary - we need an official release for people to even pay attention. We need an official release for OS distributions to even _consider_ picking it up and shipping it _alongside_ existing Python 2 installs.

Yes, the fact that a choice has to be made sucks: but we, those of us in "core" can do nothing but encourage and help with porting where we can, the PSF can sponsor sprints, and we can bide our time.

As for the length of time to get PEP 3333 accepted? Go look at the web-sig archives to find out way. No decision in the community is made without intense and thorough debate.

Finally, I can understand your frustration - its frustrating I have to keep repeating myself because this confusion exists. But I can sum my opinion really simply: Use Python 2.7 until more libraries and frameworks port.

Everyone is open to how we can improve communication: but we're also short on resources. I do what I can commenting in places like here, and trying to explain to people who don't know.

So, I hope that this "confusion" isn't hurting adoption: we've tried to explain things time and time again, only time and framework/tool and libraries authors porting can help at this point.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER5> >>So let me reiterate my suggestion for Python 3 in web applications: don't use it just yet, but write your code in a way that it could pass through 2to3.

Is there a good article for summarizing how I write Python2 code that is compatible Python3? I mean, what things do I avoid in Python2 to write good Python3 code? (And while I'm asking dumb questions: how do I make blocks of text italic on HN?)

<comment><USER6> Best resource I know if is to look at what the 2to3 tool does and try to minimize those items. Many items it fixes are possible to do correctly in 2.6+ (e.g. _print(x)_ instead of _print x_ , even if print still doesn't evaluate as an expression in 2.x).

<http://docs.python.org/library/2to3.html#to3-fixers>

<comment><USER7> You can use:

      from __future__ import print_function

And then print() should work as expected in Python 2.6+. That is, print(1, 2, 3) will print '1 2 3' instead of '(1, 2, 3)'.

</comment></comment></comment><comment><USER8> There seems to be a obsession with version numbers: People perceive these as if they must always have the latest/greatest. For example, when MSSQL 2008 came out, the database admin at a company I work for upgraded the MSSQL 2005 database to it, breaking a few applications due to incompatibilities. Version 2008 offered no features we were planning to use, so from an operational standpoint it was completely unnecessary. But it was motivated just because of the higher version number.

The same with Python2 and Python3. Python3 just exists out there so library developers can port their code over to it. It isn't meant to be used in production yet, and people learning Python are advised to learn Python2, not 3. Yet time and time again people choose version 3 to begin with 'because it must be better since it's 3 and everyone knows 3 is better than 2' (the most often heard reason on the #python IRC channel), thereby making it more difficult for themselves than necessary.

<comment><USER9> Python 3 is much more than a version number increment. Newbies are advised to use Py2 only because there are more libraries available for 2, and newbies are more likely to need more libraries. This is changing slowly but surely as more libraries go to 3.

2.7 is the last major release in the Py2 line. It's all Py3 from here on out, so people are starting to take Py3 seriously, as they rightly should. Python 3 is now the default distribution in Arch Linux and other bleeding-edge distros will be following soon. I'm kind of disappointed the major shift didn't start happening earlier, though the long cycle was to be expected.

"Stable" and "production-ready" Python 3 releases have been out for about two years now, by the way, so this definitely isn't a case of everyone jumping over just for a higher version number, and Python 3 has been "battle tested" for a while. I'm sure as the real heavyweights like Scipy start seeing real Py3 usage, cpython3 will get a lot of fixes and improvements.

We're just starting to hit "conversion critical mass" where everyone is beginning to see it's important to upgrade Py3 soon. I would guess in the next year most major projects will have ports underway if not completed, so the Python world will be undergoing a major transition this year, which may complicate things for a while but is for the long-term good of the community. :)

</comment></comment><comment><USER10> This is a good article, of interest to people even outside web dev in the python community. I did not know that python 3.1 was that much slower than python 2.x (python 3.0 was, but this was well known from everyone).

His point about writing new python 2 code for easy 2to3 application is a good one: porting existing projects to python 3 is quite difficult, because it cannot always be done without breaking API, but writing new code which can be easily ported is much easier. There still needs better support to easily use 2to3 and test its output in an automated fashion.

I am also delighted to see known python hackers to recognize the lack of python 3 usage, and that maybe the roadmap needs to be somehow modified.

<comment><USER11> The roadmap doesn't need to be modified. The roadmap has always been "the transition will take five years."

<comment><USER10> Where are you taking this five years number ?

The roadmap has already changed, BTW. At some point, the plan was to have python 2.x such as to convert so that python 2.x will be very close to python 3, plan which was abandoned AFAIK (I can certainly understand why, though, since it would have required a lot of non-fun work).

</comment></comment></comment><comment><USER12> I'm surprised how many times Mark Pilgrim's quote has been taken out of context.

</comment><comment><USER4> See also: <http://news.ycombinator.com/item?id=2131214></comment>


Show HN: Hooks Data API – Realtime Data about Thousands of Topics Over Webhooks - <AUTHOR> https://data.hooks.co <comment><AUTHOR> Hi HN!

We are the makers of Hooks App (gethooksapp.com), and for a long time we have been creating content on notifications for hundreds of thousands of users. Now we are opening our data so developers can do whatever they want with the it.

We are really excited to hear what do you can do with the API.

Feel free to ask anything!

<comment><USER2> FYI in the "Channels" section under twitter your have the same description as for pintrest.

<comment><AUTHOR> wow, thanks, Fixed :)

</comment></comment></comment><comment><USER3> This looks nifty. On the outbound side having a SNS topic publish option (with customer supplied AWS access and secret key) would likely be popular with the serverless crowd.

<comment><USER4> Cool. We're also planning integration with push notifications services, including SNS.

</comment></comment><comment><USER5> Any plans to integrate with advertising APIs so you can run/edit campaigns based on this data? Seems to be potentially a really useful mechanism especially around concurrently running ads with when commercials are running etc?

<comment><USER4> Sure! Future integrations with advertising APIs is in our roadmap.

</comment></comment><comment><USER6> This one looks amazing. I had a side-project, Terraflow, with the exact same goals. The project is on the graveyard now, but the fact there is a market for things like that makes me feel great. At least the idea was good :)

<comment><AUTHOR> Would love to hear more about Terraflow! Drop me a line at jose at gethooksapp.com :)

</comment></comment><comment><USER7> I'll definitely test this with Twitter!

I'm using IFTTT to send webhooks from twitter and the delay can get up to 15 minutes. I also tested Microsoft Flow and the delay was bigger than IFTTT.

</comment><comment><USER8> Is it possible to add new data? Like connecting an Open Data portal or something similar and get notified if new data is added/updated?

<comment><AUTHOR> We have not implemented yet the tool for you to add the data "manually" (we have an endpoint to publish new content to a topic, but that's not what you need). BUT, we can add the data, and the Open Data portals are a great source we have not explore. Do you have any specific data right now in mind? Would love to discuss this use case.

<comment><USER8> First of all, there are many open data portals around, so this might be a good source of quality data no matter what.

CKAN is currently the de-facto standard for these kind of portals, so being able to query the CKAN Action API enables to gather metadata from portals all over the world.

Some portals even have an API directly to their primary data (e.g. exposing a CSV as a querable JSON REST API), in CKAN this is called "DataStore". And this kind of data might be something you want to integrate. I can think of a number of datasets that could be interesting, e.g. schedule of garbage collection, public transport timetable or measurements from public weather stations.

Different portals have different data available. I'm from Switzerland and I know these datasets are available here. Is there a geograhical region you want to cover/not cover or it doesn't matter?

<comment><AUTHOR> Wow, thanks! We are currently querying using CKAN for some alerts at Hooks App, but never thought about massively adding open data to our system, as for our mobile app it made no sense. But now it does.

Actually, we want to add what our users/clients want. No region in mind.

As a side note, its quite easy to create alerts about "new item in the data set" but it get worse if you have to understand the use case, as, e.g. sending all the "garbage collection schedule items" its different than sending "garbage collection new items in that street of Geneva". Hopefully the CKAN spec will allow us to let the users to set a query over the data, so we will be able to push them only when the new data matches that query.

Thanks again!

</comment></comment></comment></comment><comment><USER9> Kudos on data launch! I have been using Hooks app for free for more than a year. How do you get your revenue?

<comment><AUTHOR> Thanks!

For the data api we plan to stay free for a while and then charge new users with a low per subscrition fee to indie devs and have a plan for big data consumers.

Offtopic: how much would you have payed for the Hooks app? Just from the top of your mind.

</comment></comment><comment><USER10> Cool project. Are you also going to allow access to the historical data?

<comment><AUTHOR> Thanks! Yes, we are :). What use case do you have in mind?

</comment></comment><comment><AUTHOR> We have been hunted on PH :)

[https://www.producthunt.com/posts/hooks- data](https://www.producthunt.com/posts/hooks-data)

Feel free to comment there too.

</comment><comment><USER11> Really cool! Looks like some interesting stuff can be done with this. So I get to passively pick up updates from your channels? I wish there was more stuff like this instead of having the process be powered by people using a app.

<comment><AUTHOR> Thanks! You can actually search for the channels to subscribe using our API, and we are working now on standardizing that API so you can know what to expect there. Yes, the point is that once you subscribe you KNOW that we will tell you if something happens and we will give you the needed data to do something with it.

What use cases do you have in mind?

<comment><USER11> Nothing firm yet, I really would have to take a look at the data closely. This looks like a practical implementation of the semantic web. You caught me on short notice, I'm going to have to think a bit harder :) This gives me more options and very useful ones at that, since data is a bitch to get -- pardon my language.

<comment><AUTHOR> feel free to write me at email@example.com</comment></comment></comment></comment>


Balde: a microframework to develop web applications in C - <AUTHOR> https://balde.rgm.io/ <comment><USER2> Hi guys, I'm the author of this framework, and it seems that someone shared it here because I started this blog post series this weekend: [https://rgm.io/post/balde-internals- part1-foundations/](https://rgm.io/post/balde-internals-part1-foundations/)

This is why most of the documentation is marked as TODO, but the API docs are reasonably up-to-date.

If someone has interest on it or is willing to help, please let me know :)

EDIT:

simple url shortener example, using redis: [https://gist.github.com/rafaelmartins/9f8392a8909e62820ae0](https://gist.github.com/rafaelmartins/9f8392a8909e62820ae0)

"complete" app, with templates and stuff: [https://github.com/rafaelmartins/bluster](https://github.com/rafaelmartins/bluster)

<comment><USER3> Unless you're going to reference your blog-posts in the documentation and you're willing to keep such documentation updated, I'd strongly recommend you to focus on improving the documentation instead of writing long walls of text on the internals.

If I imagine myself using your framework, well, I would be very angry at you if I had to stop writing code, leave my editor and go read your shilly-shally.

I would focus on:

1) Topics like "Application structure", "Application Deployment", "Application command-line interface" (which at the moment of writing are all just a "TODO").

2) Sample code. A 30 lines example is worth a thousand word blog post

3) More sample code. Ideally, one for every crucial part (cookies? session? middlewares?)

By the way: I see there are some examples, great! But add some more comments to your examples.

4) Blog post on internals.

I'd delay the blog post upon internals because I guess that since you'll be receiving a lot of feedback you might want to change things in the internals thus "invalidating" your blog posts.

P.s: congratulations on using doxygen so well! I wish more project had such a well done documentation!

p.p.s: I hope you won't find my comment rude or anything, I actually like this project.

<comment><USER2> hey, thanks for the comment, it is far away from being rude :)

blog posts were never the focus, they are mostly for myself, to remember how things work, as I don't work on the framework for some time, and need to have it fresh in mind to write proper docs. it may also help other people willing to help writing docs. also, whoever published balde website here in HN found it due to these blog posts, then they were worth already. :) and to be honest, I'd not publish the framework here in hacker news right now, I'd wait for documentation to be ready, but someone else couldn't wait, so...

but you're right. the focus now is writing documentation.

thanks

<comment><USER4> Great job! But Balde first appeared on HN about 2 years ago, [https://news.ycombinator.com/item?id=7765301](https://news.ycombinator.com/item?id=7765301).

</comment></comment></comment></comment><comment><USER5> I would guess most people use C web frameworks for embeddability, not performance. The use case is to add a web-based UI to some C/C++ application or device, think configuration UI of your router or something of this sort.

My go to solution for this is libwebsockets. Balde seems to have some nice features, but SCGI + external webserver requirement makes it difficult to embed. I'd also question whether GLib is a reasonable dependency for HTTP microframework.

<comment><USER6> My thoughts exactly! Apart from embedded systems (or using it as embedded in an application, e.g. to provide an application's help system via an internal web browser) I'd find it weird to build websites in C. I'm looking for something along these lines for embedded systems, but GLib & external webserver disqualify balde. Still looks like a nice, clean project, though I was disappointed to find out I can't try it out :)

<comment><USER7> C may have some shortcomings, particulary policing memory vioations, but can be very lightweight and very fast. Remember, Linux and Apache/NGINX are in C . Implementing the site specifics in C isn't that much of a stretch. The extra speed could even make your site that much more useable.

The canonical genome browser is written in C: [http://genome.ucsc.edu/cgi- bin/hgTracks?db=hg19](http://genome.ucsc.edu/cgi-bin/hgTracks?db=hg19) ... for pure speed.

</comment></comment></comment><comment><USER8> "With balde you can serve hundreds of requests per second" is it supposed to be "hundreds of thousands"?

<comment><USER9> They're just playing the expectations game.

<comment><USER10> Unlike, say, Oracle :-)

</comment></comment></comment><comment><USER11> I used my own C code generator for CGIs for years, along mongoose for other tasks. Nowadays I'm using [https://kore.io](https://kore.io) and I'm VERY happy with it, great developer experience, well written and understandable code, minimal in dependencies and no bugs so far. I'm using it quite heavily in a project, it was easy to add templating and other amenities to it. Highly recommended.

</comment><comment><USER12> It has potential, but the documentation is full of TODO, so it's hard to say much about it. For example, I was trying to figure out how it handles unicode, and also how it handles memory management.

For comparison, ribs2 ( [https://github.com/Adaptv/ribs2](https://github.com/Adaptv/ribs2) ) is a framework in C that handles garbage collection for you. But it's not really a comparison because Balde doesn't have the documentation, unfortunately.

<comment><USER2> yes, it lacks documentation, I started this blog post series to try to address this: [https://rgm.io/post/balde-internals- part1-foundations/](https://rgm.io/post/balde-internals-part1-foundations/)

if you have some specific question, feel free to ask

<comment><USER12> So, how does it handle memory allocation? Are there memory pools?

<comment><USER2> as it is a microframework, it does not cares about such details, you can handle memory allocation by hand, or use memory pools provided by glib, create gobjects and use refcount, etc. It is up to you :)

Internally used memory should be free'd manually with the balde_app_free function. it encapsulates most of it for you.

<comment><USER12> That actually helps me have a better understanding of how the framework is structured, thanks.

</comment></comment></comment></comment></comment><comment><USER13> This looks very interesting. This being C, I assume the performance is really good (although yes I know it's not always the case).

However, C is one of those "double-edged sword" kinds of languages. What kind of trade offs between performance and "safety" would one be making here? Are they worth it?

<comment><USER12> _This being C, I assume the performance is really good_

FWIW, everyone I know who moved web-serving things to C did so primarily because of latency, and then secondarily to avoid GC time delays. Higher transactions per server was a bonus, but no one did it for that.

Also, if you have to hit a database, then any efficiency you get from switching to C will probably be swallowed up by that.

<comment><USER14> > Also, if you have to hit a database...

I can only think of one case where that is pretty much always true - CRUD with a network connected db backend, several cases where it is debatable, and a bunch of cases where that is wrong. See sqlite3, situations where you can use unix sockets, dynamically loaded modules, etc.

I'm finishing up a project that basically builds state models from log events, automatically, and robustly enough that hopefully the end users wouldn't notice if I were run down by a bus. With the massive amount of data and high dimensionality of the problem, I have a hard time seeing how to pull it off but with C and statically compiled sqlite... or a big bag of money to throw at IBM.

<comment><USER12> _builds state models from log events, automatically_

That sounds really cool, but I'm not quite sure what it means.

<comment><USER14> Take business process modeling [0], and add a dash of directed acyclic graph [1]. You need both fast access to a massive amount of historical data, and the ability to finely control what gets stored where in memory - so not something you can really do in an SQL transaction.

[0] [https://en.wikipedia.org/wiki/Business_process_modeling](https://en.wikipedia.org/wiki/Business_process_modeling) [1] [https://en.wikipedia.org/wiki/Directed_acyclic_graph](https://en.wikipedia.org/wiki/Directed_acyclic_graph)

</comment></comment></comment></comment></comment><comment><USER15> Balde means bucket in Portuguese. I thought that was an accident, but looking at the logo on the website I guess it's intentional.

</comment><comment><USER16> I've been looking into web frameworks in C recently. The offerings aren't awesome. It's hard to find a good BSD-like-licensed library.

Frontrunners included Kore and Crow (another microframework). I went with Kore for a while but it has a pretty terrible API for actually writing web applications. I couldn't take Crow seriously. I ended up going with fastcgi because it was the simplest to wrap using the Scheme FFI.

Others included Lwan (gpl) and Mongoose (gpl).

<comment><USER17> Hey, I'm on a phone without my last pass. I've spent a fair amount of time trying to find a happy web c++ framework.

Implementing fastcgi seemed too daunting to me... hello world was crushingly painful to set up (using Apache)

lwan and mongoose are GPL.I

I feared kores API as well, but I never got around to actually using it, so I'll just use your Menton of it as confirmation of my fears .

I'd looked at crow, and it didn't look so bad, but now I'm not so sure. What did you like about it? What didn't you like about it? What made fcgi less painful / more fun?

Basically, I'd love any notes on your attempt / experiences / etc. !

<comment><USER16> Fastcgi was incredibly simple to get hello world running - both in C and through the Chicken Scheme FFI. However, "all" it provides is the backend for a web server so you'd still need to handle things like routes and templates and responses yourself. Still, I don't find those to be the challenging part.

The issue that I'm having with fastcgi is the random scarcity of API documentation. I can't believe it's so hard to find - googling for "fcgx accept_r api documentation" just yields nothing.

Anyway, it was very cool to get it running in Scheme so I'll definitely write a post on that soon. I'll post it on this thread when I do.

<comment><USER18> I'd read a (hopefully scheme agnostic, or at least, scheme-decoupled) tutorial on how you got fastcgi up and running painlessly. I really struggled with the lack of documentation as well.

</comment></comment></comment></comment><comment><USER19> Looks neat, although I think I'd find myself mistyping "blade" a lot.

</comment><comment><USER20> "Why would anyone want this?" \-- There are people who know C--and it's associate library ecosystem--really well and are very comfortable with it. They may have projects where it would not be a productive use of their time to have to learn a new language and a new set of libraries just to get a little code online.

I know, shock and horror, wailing, gnashing of teeth. /s

Is it just me, or has HN gotten really bitchy towards people's projects lately (and by "lately", I mean "the last year")? There are real people behind these projects. They did a thing and it might not be your cup of tea or anything in your experience bubble, but that doesn't make it stupid or misguided.

<comment><USER21> It's not a new phenomena, Show HN has had such questions for years: [https://news.ycombinator.com/item?id=5873619](https://news.ycombinator.com/item?id=5873619)

:)

</comment></comment><comment><USER22> I really wouldn't want to expose GLib to this level but to each their own. kcgi is an interesting C API with security taken seriously: [http://kristaps.bsd.lv/kcgi/](http://kristaps.bsd.lv/kcgi/)

<comment><USER2> I love kcgi, but we have different focus. I may use it as FCGI layer for balde, though :)

</comment></comment><comment><USER23> Looks like it's using NULL-terminated strings. Is the framework secure? Is it compatible with (all kinds of) Unicode and data with NULL in it?

<comment><USER24> Why would you need to be compatible with "all kinds of Unicode", by which I assume you mean different encodings?

You just need to be fully compatible with _one_ kind of Unicode (UTF-8) and use it consistently. And null-terminated UTF-8 is no more or less safe than null-terminated ASCII, because the only UTF-8 codepoint that uses 0x00 is the same one as in ASCII.

<comment><USER25> That's true provided you validate all UTF-8 input. As you probably know, UTF-8 has a lead byte that indicates how many of the following bytes are part of the same code point. If your code blindly believes what that first byte claims, then you could easily get tricked into reading beyond '\0'.

<comment><USER24> Yes, you should validate the UTF-8 at some point before you actually manipulate the contents of the string. Before that, you can just treat it as a pile of bytes.

You don't need to go down different paths of how you read those bytes based on the codepoint lengths until you're actually doing something with codepoints.

</comment></comment></comment></comment><comment><USER26> So this has an embedded HTTP server then? Looks cool.

<comment><USER27> No, I don't think so, it says it requires an SCGI interface to the web server. Apparently SCGI is like an upgraded CGI.

<comment><USER28> Looking through the source (app.c) it can do SCGI, CGI, and also has its own httpd server.

<comment><USER2> You are supposed to use SCGI in production. The embedded HTTPD is provided to help during development, so you don't need to setup SCGI in your local machine. I never did any serious testing on the HTTPD, but it was not developed with security and performance in mind.

</comment></comment></comment></comment><comment><USER29> Rafael, congratulations on this project, i love seeing Brazilian projects here.

</comment><comment><USER30> A comparison in terms of speed between blade and cppcms would be nice.

</comment><comment><USER31> Seems more promising than g-wan

</comment><comment><USER32> Why not vala (or genie)?

</comment><comment><USER33> anyone know a good micro web framework written in LLVM IR?

</comment><comment><USER34> I remember that one big lesson learned after heartbleed bug was that we should not develop in C anymore. To me, this has probably many exceptions, but still should be especially true for web dev.

<comment><USER35> If that was your takeaway from Heartbleed, then you wheren't paying attention.</comment></comment>


Congress Approves Startup-Focused JOBS Act - <AUTHOR> http://mashable.com/2012/03/27/congress-approves-jobs-act/

<comment><AUTHOR> This is great news - raising capital for a new venture has traditionally been controlled by restrictive regulations. While the regulations were likely originally designed to protect investors from getting scammed, they also end up making it much more difficult for legitimate ventures to raise that first round of seed capital. The best part about this is the crowd-sourced angle... huge potential for disruption here!</comment>


Build Git – Learn Git - <AUTHOR> http://kushagragour.in/blog/2014/01/build-git-learn-git/ <comment><USER2> This is nice. One pet peeve is that (as far as I know, I'm really not an expert) Git repos don't actually have names. The first thing the article does when implementing them is to give them names, which I thought was a bit jarring.

I actually think the namelessness of the repos is one of the things that are unexpectedly cool about Git.

<comment><AUTHOR> Probably right.I think I gave them naming keeping mind Github repos have name...maybe :)

<comment><USER3> I always thought that was just the name of the parent folder of .git

<comment><USER4> That's correct, repositories themselves are not named. You can change the name of the parent directory without consequence.

<comment><USER5> Renaming more things should be this easy.

</comment></comment></comment></comment></comment><comment><USER6> I appreciate the work that has gone into this, and think it is a great starting point for an interesting tutorial about git.

My concern is that the tutorial ignores or discards ideas essential to how git works, and what makes git different to other version control systems.

As other comments have said, this is showing 'just another SCM system' without illuminating the design decisions that make git different.

For example, in git it is extremely important that commit objects have a unique identifier for any given working directory, history, and commit meta- data. Without this guarantee the distributed architecture of git is (almost) impossible to implement.

In the commit section the tutorial states:

 _a simple Commit class would have ... a change containing the snapshot of change made. Understanding how a change is actually stored is beyond the scope of this implementation._

This terminology is misleading at best, and skips over a very important concept in how git actually works. The phrase 'snapshot of change made' is misleading, as a commit doesn't contain any explicit information about changes made. Instead, the staged files in the working directory are saved into a 'blob' store, a tree structure is created to represent the directory structure, and a reference to the tree is saved in the commit object. I understand that all this is outside the scope of the tutorial, however an outline of how commits work is important information for anyone trying to understand how git works. For example, the storage format is the primary reason operations in git are so fast.

Again, I like the tutorial, but if it wants to teach about git, as opposed to other version control systems, it needs to ensure the key git concepts are maintained.

<comment><USER7> I 100% agree. It's always great to try to implement complicated things, but it misses the point if what you're implementing is nothing like the original system. You aren't learning how Git works if you do it that way are instead just mimicking API names

<comment><AUTHOR> Reiterating on my point again, the aim of this project is not to replicate Git. JS-Git ([https://github.com/creationix/js- git](https://github.com/creationix/js-git)) does that.Here I am trying to code basic concepts relaxing complex stuff so that reader can focus & visualize more abstract concepts. I have tried to bring in concepts as and when wanted instead of just overloading the reader with complex stuff all at once.

<comment><USER7> Which is fine. But you're specifically saying that you are building Git to learn how it works. All I'm saying is, based on your wording, you need a disclaimer that this is not how Git works internally. You can already get the gist from a lot of the comments that they think they now know how Git works after reading this post.

I appreciate the effort and think it's a great idea to implement something your own way, I'm just trying to point out that you're saying this is how THE Git works, which it isn't. Nice write up as a whole though

</comment></comment></comment></comment><comment><USER8> A nice concept, but it doesn't _really_ have much to do with Git. It's just another SCM system, and the concepts are just as applicable to e.g. Mercurial as Git. There are enough differences from Git to make it quite incompatible (named repository, incremented commit IDs, single parents et c.).

<comment><AUTHOR> The point is to implement gradually. For example, in the concepts covered in part 1, multiple parents was not required, hence it was left. It should make sense to the reader why something was implemented and why it does what it does.

Its concepts might apply to other VCS. But that is immaterial, Git is what we are trying to understand here.

</comment></comment><comment><USER9> This reminds me of a talk by Jim Wierich I heard years ago where he pretends to design a new vcs in order to explain how git works.

I'm not sure if a full recording can be found anywhere other than buying it from Pragmatic Programmers. [https://www.youtube.com/watch?v=bBQJP6D8aGY](https://www.youtube.com/watch?v=bBQJP6D8aGY)

<comment><USER10> The talk is only available as a screencast from the Pragmatic Programmers, but the slides are freely available on my github account ([https://github.com/jimweirich/presentation_source_control](https://github.com/jimweirich/presentation_source_control)).

I use this talk as an introduction to any Git Immersion workshops that I run (see also [http://gitimmersion.com/](http://gitimmersion.com/))

</comment></comment><comment><USER11> Tutorial looks awesome. It would be helpful if you would mention from the beginning that you will be implementing in JavaScript before reaching the code snippets.

<comment><AUTHOR> Valid point. Will update the article. Thanks.

</comment></comment><comment><USER12> I also attempted to understand git better by implementing it, but my (Haskell, uncompleted, abandonded) implementation was more concerned with getting all the on-disk representations right: [http://evan- tech.livejournal.com/254793.html](http://evan- tech.livejournal.com/254793.html)

</comment><comment><USER13> A related good way of learning Git is to check out/checkout the very first commits of git made using git. I found the shear lack of code that a working system could be made of to be enlightening.

</comment><comment><USER14> This is an excellent resource. On Bento, I have so many tutorials and walkthroughs on the basics of Git (it's a very readily accessible teaching opportunity) that it's gotten somewhat unwieldy. In many instances, some of the material is very base, and I've been looking for something more thorough without being too specialized.

This gives an excellent walkthrough of how Git works, but not only that, serves an excellent exercise on JavaScript. Bravo.

</comment><comment><USER15> It's a cool concept but like other comments say it overlooks a lot of the things that make git, git.

Best way to learn? use it!

Maybe just create a dummy repo and go from there with it. Maybe use the GUI tools until you're comfortable with the command line.

For me personally, it was command line first. If you aren't sure about something with git, googling it will pretty much always throw out your answer.

<comment><USER16> I'm not sure I quite agree. Use it, yes, but if you're using Git as a black box then you're much more likely to be frustrated by it than if you understand what's going on under the hood. I tend to point people at "Git from the bottom up"[0] -- it gives people the understanding they need to work out the effect they require, from which they can work out which set of commands will get them there.

[0] [http://ftp.newartisans.com/pub/git.from.bottom.up.pdf](http://ftp.newartisans.com/pub/git.from.bottom.up.pdf)

<comment><USER15> Most people will not be using advanced functions though and if people generally understand how version control works, I don't think git is super hard to pick up and learning whilst doing is most effective for me.

I'm sure most people are probably aware of : [http://try.github.io/](http://try.github.io/)

which is a cool little resource for learning git.

</comment></comment></comment><comment><USER17> I suspect you may already be aware, but if not then here's a related project [https://github.com/creationix/js-git](https://github.com/creationix/js-git).

Lest you misunderstand, I'm not saying you should stop development, I just thought it might be of interest!

<comment><USER18> Or, in a different language, [https://github.com/jelmer/dulwich](https://github.com/jelmer/dulwich)

</comment></comment><comment><USER19> I love the idea! This is a really cool way to learn anything, then, for that matter, I guess. Thank you.

<comment><USER20> BINGO. I actually try to do this before job interviews: build a dumb version of one of their big products. I'm not even talking about something as sophisticated as this git project, I mean "build a dumb version".

</comment></comment><comment><USER21> Great work and keep continuing with the series. I understand this is not exactly the real git's inner working, but this series of articles may lead some other coder or hacker or other inquisitive mind to stitch together the missing part. That's the beauty of sharing!

</comment><comment><USER22> Very nice. Basic reimplementation is always useful to visualize abstract concept like Git. Git can be hard to new comers, as it's not always obvious what commit/branch/push does. Thank you

</comment><comment><USER23> Thank you, it's a very nice tutorial and I have not thought about this before (concept of trying to implement something you want to learn and get a better understanding of).

</comment><comment><USER24> This is a great way to understand Git, thanks!

</comment><comment><USER25> Great post by an awesome humble programmer :)

(NB: he's a friend who also happens to be a colleague at work)

<comment><USER26> nice nick Bhaiji :P

</comment></comment><comment><USER27> Very cool. I would like to see other utilities or tools explained in this way.

Keep up the good work!

</comment><comment><USER28> Sweet. Should have take quite some time to format the whole tutorial.

<comment><AUTHOR> It sure did. Though, there is a lot of code, so its always fun :)

</comment></comment><comment><USER29> implementing git is an interesting approach to learning it.

i generally support this kind of stuff - however I think that this starts out implementing a source control solution rather than git in particular and its a shame that it follows git so closely later down the line in that regard (but completely understandable given the aim).

solving the problems for yourself you can get some insight into why git is the way it is (and svn, p4, hg, everyone else...)

<comment><USER30> I'm pretty sure the point of the article is to learn about how to use git by implementing its basic functionality. The point isn't to implement how git works.

On a side note, I'm always amazed when someone implements things that are complicated to me in a really understandable ways.

</comment></comment><comment><USER31> Awesome work as always chinchang!

</comment><comment><USER32> Brilliantly done. Thank you.

</comment><comment><USER33> Really cool. I loved it.</comment>


Is it possible to travel in Stockholm on a budget? - <AUTHOR> http://www.nomadicmatt.com/travel-blogs/the-myth-travel-is-expensive-how-5-days-in-stockholm-cost-me-100-dollars/ A travel blogger posted that he could travel for five days in Stockholm for $100. What do you think? <comment><USER2> _In order to keep my costs down, I stayed with a friend the whole week... I cooked all my own food._

That's not "travel." That's "staying with friends." Completely useless to compare day-to-day budgets for the two categories.

On that note, I'm sure I'd save a heck of a lot of my day-to-day expenses in the major city I live in if I was "staying with friends" and had time to cook my own meals all the time.

</comment><comment><USER3> One can travel to the moon on a budget, provided that the budget includes $10Bn in equipment. How much is your budget?</comment>


Stanford's "autonomous" helicopters teach themselves to fly - <AUTHOR> http://news-service.stanford.edu/news/2008/september10/helicopter-091008.html <comment><USER2> _As Oku repeated a maneuver several times, the trajectory of the helicopter inevitably varied slightly with each flight. But the learning algorithms created by Ng's team were able to discern the ideal trajectory the pilot was seeking. Thus the autonomous helicopter learned to fly the routine better—and more consistently—than Oku himself._

This is incredibly cool work -- it's clear how this is a more general approach than hard-coding a bunch of rules about how to fly a particular helicopter, under particular assumptions about the environment and the desired maneuvers.

In the future, I wonder if it would be possible to improve the learning algorithms to the point that no human expert is even needed: you could toss the helicopter up in the air, and have it essentially figure out how to fly the machine before it hit the ground.

This work is also a nice counterpoint to those who question the value of the work being done in academic computer science. I think there is more innovation and long-term value in these sorts of projects than in a dozen typical Web 2.0 social networking startups.

<comment><USER3> I completely agree - theres only so many ways one can "connect" with another individual and keep up with their day to day lives.

Twitter, Facebook, Myspace, YouTube, ad nauseum.

I think it's great to see more people try and tackle problems that have scope in the real world beyond satisfying some teen's "social life"

<comment><USER4> I wonder if machine learning can be used to enhance the way people "connect" with others... Oh wait, that's my startup :)

</comment></comment></comment><comment><USER5> Start leaning from the guy right now: <http://www.youtube.com/watch?v=UzxYlbK2c7E>

Stanford class on machine learning by Andrew Ng, 20 lectures.

</comment><comment><USER6> For those of you wondering if you should be impressed, the answer is yes.

</comment><comment><USER7> Live demonstration of the copter: <http://www.youtube.com/watch?v=0JL04JJjocc>

<comment><USER3> All they need to do now is make them a little larger, attach a minigun and some missiles and Skynet will be able to hunt us down quite proficiently...

... while doing loop-to-loops.

<comment> daniel-cussen If something looked _that_ awesome while it was trying to kill me, I would let it.

</comment></comment></comment><comment><USER8> Didn't sam altman of Loopt work on this project early on?</comment>


Ask HN: Learn Python coming from C# background - <AUTHOR> I have been coding in C#/.NET for the past few years. Am interested in dabbling in some AI/ML, especially applications related to healthcare and biology. Based on some quick research, it seems like I need to get familiar with Python before I dive into the actual ML stuff. I have never used Python before. There are innumerable resources on the web for learning Python and I am finding it hard to figure out which might be best. So I thought I would turn to the experienced HN crowd to get some feedback :). Any suggestions on material for the best way to get familiar with Python for a C# developer?<p>Thanks <comment><USER2> I know this doesn't answer your question directly, but depending on how much time you intend to spend dabbling in AI/ML, it might not be worth it to first learn a whole new programming environment.

So, you might be able to dabble enough while staying productive with C#. Take a look at ML.NET: [https://docs.microsoft.com/en-us/dotnet/machine- learning/](https://docs.microsoft.com/en-us/dotnet/machine-learning/)

Edit: And everything you learn from that experience will still be useful if you decide later on to dive deeper with Python.

<comment><AUTHOR> Thanks for the suggestion. I actually never considered this angle! I'll definitely take a look at ML.NET and see whether that will suit my current needs.

<comment><USER3> also consider F# + ML.NET

</comment></comment></comment><comment><USER4> I would recommend two books from No Starch Press:

1\. Python Crash Course [https://nostarch.com/pythoncrashcourse2e](https://nostarch.com/pythoncrashcourse2e)

2\. Automate the Boring Stuff with Python [https://nostarch.com/automatestuff2](https://nostarch.com/automatestuff2)

The first book will help you to understand the basic concept of programming with Python. It also contains some projects that you can follow in the last chapters. The second book is about automating stuff that are done manually. Let's say, you usually do something over and over again. You can try to automate them using Python. The key of learning programming is practice. If you are curious about other book, you can check [https://nostarch.com/catalog/python](https://nostarch.com/catalog/python).

I heard good stuff about Learn Python The Hard Way. But, I've never tried the course. It's a paid course. You can take a look on [https://learnpythonthehardway.org/python3/](https://learnpythonthehardway.org/python3/).

</comment><comment><USER5> I don't know about C#/.NET but I assume you are comfortable with general programming concepts. There are several guides that can help you to quickly familiarize with Python syntax. [0] [1]

For Python eco-system related concepts like virtual environment, testing, and other modules, [2] is good.

I don't have any experience with AI/ML, [3] might help if you are looking for books.

[0] [https://docs.python.org/3/tutorial/](https://docs.python.org/3/tutorial/)

[1] [https://github.com/jakevdp/WhirlwindTourOfPython](https://github.com/jakevdp/WhirlwindTourOfPython)

[2] [https://calmcode.io/](https://calmcode.io/)

[3] [https://pythonbooks.org/topical-books/machine-learning- and-a...](https://pythonbooks.org/topical-books/machine-learning-and- artifical-intelligence/)

<comment><USER6> I second the recommnedation for Whirlwind Tour of Python for people who already know other programming languages and don't need to learn programming concepts from scratch.

</comment></comment><comment><USER7> As someone who did this years ago, python is really easy to learn once you know C# well.

The only complication is learning command line bullshit and basically copypasta of hopefully benign incomprehensible commands rather than clear UIs, which has been creeping into .Net anyway.

</comment><comment><USER8> I like this book: [http://openbookproject.net/thinkcs/python/english3e/](http://openbookproject.net/thinkcs/python/english3e/) – it's not so garrulous. Good for quickly looking up concepts.

Also check out the various community resources. The #python channel on Freenode is good. On Reddit there is [https://www.reddit.com/r/learnpython/](https://www.reddit.com/r/learnpython/)

</comment><comment><USER9> The guys over at Talk Python has a dedicated course that sounds like what you need: [https://training.talkpython.fm/courses/explore_dotnet/python...](https://training.talkpython.fm/courses/explore_dotnet/python- for-dotnet-developers)

I can't comment on the quality of the course as I haven't taken it, but generally speaking Talk Python usually has high quality stuff.

Hope this helps!

</comment><comment><USER10> These are some of the lab exercises that I give to my students to get them up to speed with Python on my Distributed Systems course: [https://github.com/joaoventura/full-speed- python](https://github.com/joaoventura/full-speed-python)

They are 2nd year students which are mostly fluent in Java..

</comment><comment><USER11> > best way to get familiar with Python for a C# developer?

Diving directly into the code.

Writing Python is very close to writing pseudo code. Google "how to do X" and check the official doc when you need it.</comment>


Apple, publishers conspired against $9.99 Amazon e-books, says lawsuit - <AUTHOR> http://arstechnica.com/tech-policy/news/2011/08/class-action-suit-targets-apple-and-five-publishers-for-price-fixing.ars

<comment><USER2> I'm confused as to why Apple is named as a co-conspirator. Apple certainly pushed the Agency model for e-books, but they don't set the prices. The publishers do. The only wrinkle here is that, according to this article, Apple has a "most favored nation" status with these publishers so they can't turn around and give better prices to Amazon, but that has nothing to do with who's actually responsible for the prices. Namely, the publishers. I see no reason why Apple would have an interest in keeping ebook prices high.</comment>


Ask HN: Do I need a mentor or a business partner? - <AUTHOR> A little background: I co-founded a company with a friend that became successful without the aid of any investors. We are trying to branch out and try new ideas.
The problem: Unfortunately, we haven't had the pleasure of having any kind of guidance such as the guidance I hear so much about when people are funded by Y Combinator. My co-founder and I are both technical people that have worked for large corporations and haven't really had to think about the business aspects of the industry much, until recently . With some of our new ideas, we are now utterly at a loss on how to handle issues such as preventing launches from being emulated, attaining copyrighted content, whether to raise money through investors, etc.
So should I be looking for a mentor or a business partner who knows "business"? Where would I find such a person? <comment><USER2> My advice would be YES! Look for someone who has experience is the industry you need help with, who's done things you would like to do (ie, raise money from investors) and is a person you find easy to talk to. You find this person by meeting and having intelligent conversations with A LOT OF PEOPLE... it will take time to find the right mentor, so don't give up too quickly. Go to as many startup "networking" type events that you can, meet as many people as you can, and follow up with people that you find interesting. People inherently like getting asked for advice / their opinion, so don't be afraid to ask that of the interesting people you meet.

</comment><comment><USER3> Network. Seeking a mentor and developing a relationship may lead to further business connections. Another place to start are university outreach centers that deliver peer-based educational programs, events, and mentorship to alumni/students. Here in Chicago, top ranked business universities are a preeminent resource for entrepreneurs at all stages of their development.

</comment><comment><USER4> Mentor, yes. Business partner, unless they bring something to the table that otherwise wouldn't be there and you trust them to the same point as your existing partner, no.</comment>


A preliminary reconstruction of the orbit of the Chelyabinsk Meteoroid - <AUTHOR> http://arxiv.org/abs/1302.5377 <comment><AUTHOR> the Daily Mail (yeah, I know) has a pretty good summary with video [http://www.dailymail.co.uk/sciencetech/article-2284801/Russi...](http://www.dailymail.co.uk/sciencetech/article-2284801/Russias- meteor-came-asteroid-belt-Mars-Jupiter-researchers-claim.html)</comment>


Security experts warn of dangers of rogue Wi-Fi hotspots - <AUTHOR> http://edition.cnn.com/2009/TECH/science/08/11/wifi.security.hackers/index.html?eref=edition_technology <comment><USER2> It seems like they tried to make this scary just to have a story. Unless you're connecting to a site without SSL, or using an old unpatched version of IE, or ignore your browser's warnings about the SSL cert, etc., I'd say you're pretty safe. Am I wrong?</comment>


Rackspace reverses course, revoking open source discounts again - <AUTHOR> https://twitter.com/ericholscher/status/1233433187734474753 <comment><AUTHOR> After initially revoking discounts in 2017 then reversing course[0], they are removing discounts once again for popular open source projects[1].

[0] [https://news.ycombinator.com/item?id=15500993](https://news.ycombinator.com/item?id=15500993)

[1] [https://twitter.com/ericholscher/status/1233433187734474753](https://twitter.com/ericholscher/status/1233433187734474753)

<comment><USER2> This is a great opportunity for Microsoft/GitHub to step in and offer a replacement program to projects impacted. Githubbers: Don't let this opportunity go to waste!

</comment></comment><comment><USER3> I wouldn't trust a project that was run on Rackspace. Their security is New Delhi public toilet level.</comment>


We perfected our simple first product, won the market, and have nothing to do. - <AUTHOR> http://www.jonsteinberg.com/2009/11/we-perfected-our-simple-first-product-won-the-market-and-now-have-nothing-to-do/

<comment><USER2> That title is completely misleading - I actually was looking forward to reading about the market they had perfected for and how long it took them.

<comment><USER3> Agreed, and considering the post was added by the author of the linked article, it's not a huge stretch to suggest he knowingly did so.

<comment><USER4> Still, an interesting article nonetheless.

</comment></comment></comment><comment><USER5> "I also agree with this tweet from Dustin Curtis: "I have never heard an entrepreneur say 'I wish I had launched my product later.'""

I am sure Cuil would disagree with this, however their problem was more mass marketing too early and having too big of an audience for their effectively Alpha release.

<comment><USER6> There's a ton of products that failed because the markt wasn't ready for them. Segway, anyone?

<comment> a-priori There's a subtle but important difference between "the market isn't ready" and "there is no market".

</comment></comment></comment><comment><USER7> Interesting article, but seems to really over-simplify things. There are many reasons to diversify your product portfolio. I agree that most of them don't apply to an early start-up, but the fact that it takes a quasi-infinite amount of time to perfect even just one product should not be a reason to ignore all other products.

Diversification can become a valid strategy for companies once they reach a certain size.</comment>


Will a self-balancing two-wheeled car change US transit? - <AUTHOR> http://litmotors.com/c1/

<comment><AUTHOR> video of the prototypes here: <http://www.youtube.com/user/kirstendirksen#p/u/2/vd2ztw4bXI4>

</comment><comment><USER2> Probably about as much as the Segway changed urban US travel.</comment>


Writing software for someone else - <AUTHOR> http://www.johndcook.com/blog/2012/05/30/writing-software-for-someone-else/ <comment><USER2> It's harder, but also much more lucrative. Trying to sell software to hackers is like trying to sell bread to bakers.</comment>


Show HN: Tailwind Builder – online editor for the Tailwind CSS framework - <AUTHOR> https://tailwind.build/ <comment><AUTHOR> Hi!

I am the author of Tailwind Builder. I launched it today!

It's the first genuinely advanced online editor for the Tailwind CSS framework.

I based it on the same technology I used to start [https://bootstrapshuffle.com](https://bootstrapshuffle.com) and [https://bulma.dev](https://bulma.dev)

Features:

* 140 ready-to-use HTML components (drag & drop).

* All Tailwind settings are available with convenient pickers.

* Autocomplete for CSS classes.

* Live edit & online preview.

* You can export code to HTML and CSS (compiled version) and Pug and Tailwind config (sources).

* Easy build ("npm run build")

Any feedback is welcome!

<comment><USER2> How do you plan to compete with [https://www.tailwindui.com/](https://www.tailwindui.com/) or do you see it working alongside?

<comment><USER3> How is there a competition when the link you provided is a landing page with an input box to "sign up [...] to find out when it's ready"?

<comment><USER2> It's going to be a component library by the author of Tailwind, Adam Wathan. I guess my comment needed some context.

<comment><USER3> Thanks, I did not know that!

</comment></comment></comment></comment></comment><comment><USER4> I've been using Tailwind for a few months now and this is the perfect example of how flexible and powerful _" functional css"_ can be.

Components truly encapsulate _everything_ , by including all styling in the HTML, the only dependency is tailwind.css.

Although the markup looks messy (at first), you get the advantage of high portability of components, high flexibility and super fast development time.

<comment><USER5> Not having to hunt down random nested CSS to fix styling is worth the cost of the slightly ugly and verbose class based functional approach.

You can copy any other Tailwind block of code and it should work predictably on your site. Which is very rare in the CSS world.

The hardest part of this is forcing yourself to use the system instead of side stepping it.

</comment></comment><comment><USER6> I really like the idea of life time purchases rather than subscriptions.

To minimize the risk that your site goes down (or is economically unstable at some point in time), you could consider making this a paid downloadable app.

<comment><AUTHOR> In fact, you can buy lifetime license and use it on [https://tailwind.build](https://tailwind.build) & [https://bootstrapshuffle.com](https://bootstrapshuffle.com) & [https://bulma.dev](https://bulma.dev)

If my sites go down, I'll release a self-hosted version of the service, so you'll be able to run the editor on your local machine.

<comment><USER7> I'd pay double for a self-hosted version, that isn't phone-home dependent. This removes a huge risk that the service will one day disappear. (If your sites go down you may not be able to release a self-hosted version)

</comment></comment></comment><comment><USER8> I'm yet to try it, so pardon my question.

Does it generate a tailwindconfig.js that I can replace in any tailwind project?

A good friend introduced me to Tailwind about a year back but I was not sure where to fit in. I've been wary of rolling out a totally new custom framework from scratch but also do not want to wander anywhere near the paths that can lead to a Bootstrap-esque framework.

About a month back, I decided to try out TailwindCSS myself before deciding the fate of the next 5+ years of front-end styling of a big-enough company. I was totally amazed with what it can do. So, my thumb rule was TailwindCSS + something to purge the un-used styles. I can even expose the TailwindConfig to other apps (React, Custom, etc) so they can just pick up the 'Styleguide' and start off in whatever they are writing.

The best part I realized that I can optionally drop Sass if I want and stick with just plain CSS/CSS4 + Tailwind and let PostCSS handle the processing.

<comment><AUTHOR> Yes, it exports the Tailwind config. I recommend you to try our demo :)

By the way, you can try [https://tailwind.build](https://tailwind.build) [https://bootstrapshuffle.com](https://bootstrapshuffle.com) and [https://bulma.dev](https://bulma.dev) (all exports demo project without an account, so easy test) and compare which framework (structure, config) works for you best!

</comment></comment><comment><USER9> Congrats on your launch - this is fantastic, and I'll be signing up for a pro account. To echo what others have said here, having an $89 lifetime option made this an easy decision -- great value-for-money price point, and I don't have to worry about forgetting to unsubscribe from a monthly recurring bill.

I'd love a local editor or support for offline editing, as I often work whilst communiting, with spotty connectivity.

Congrats again

</comment><comment><USER10> Very nice, I like that you're including access to your other products under the same account/license

</comment><comment><USER11> Love this. For those of us with existing colors, plugins etc in our config, any chance you plan on allowing import of existing configs? Even if just for the colors in the beginning

</comment><comment><USER12> My friend and I invented this category of product a few years ago but it didn't work out for various reasons mainly personal and business. [https://www.redferret.net/?p=45278](https://www.redferret.net/?p=45278) (we were working as a project team on various projects, in this case it was my idea and he wrote all the code and came up with the idea of the drag and drop site builder - basically he was the inventor).

Since then there has been an explosion of site builders following this exact pattern.

This is a really nice implementation and looks like he has worked out the business model too. Very nice job.

</comment><comment><USER13> While I am sure that people will be using this, this product simply and completely disregards what Tailwind was designed for: Rapid development by building from utilities in just HTML and extracting into CSS components later. To quote from the Tailwind website: "Instead of opinionated predesigned components, Tailwind provides low-level utility classes that let you build completely custom designs without ever leaving your HTML."

You can agree or disagree with the paradigm -- but if you disagree, there really is no point in using Tailwind :)

<comment><USER6> I really don't think this is a contradiction:

First, Tailwind encourages you to use apply to build reusable components,

second, Taking building blocks from a generator like the one posted here, makes at least to me more sense than it would be for Bootstrap: You see a component and can (thanks to utility classes) see how it's built and change the appearance relatively fast. With Bootstrap you would basically just add a component class and that's it - customizing is more complex then.

</comment></comment><comment><USER14> I am going to try it out ASAP. This might be really empowering for backed developers who want to ship stuff fast because of the ease of customising components in Tailwind.

</comment><comment><USER15> One thing I don't understand is the lack of "subtemplates" for sale. I'm not sure if that would be a good name, but I would love to be able to buy a template pack that uses vanilla Bootstrap, Bulma or anything else, and with the building blocks, creates template pages for various use cases: pricing tables, admin dashboards, my account sections, cart, search results, etc.

</comment><comment><USER16> Certificate error: [https://tailwind.build](https://tailwind.build) \- NET::ERR_CERT_AUTHORITY_INVALID

[https://bootstrapshuffle.com](https://bootstrapshuffle.com) and [https://bulma.dev](https://bulma.dev) \- Work fine

<comment><AUTHOR> weird. In all three I'm using Cloudflare and their certificate

</comment></comment><comment><USER17> Ah man! No joke, I started to outline a project nearly identical to this over the weekend. Well done though!

<comment><AUTHOR> Good luck with your project!

</comment></comment><comment><USER18> Looks good! Personally I'd like to have some more form templates (could only find the contact form).

</comment><comment><USER19> This is excellent. You should make it easier to see what the underlying css looks like imo.

<comment><AUTHOR> You can export your project :) All sources are included

</comment></comment><comment><USER20> The problem with this solutions IME is that now you start to fight the editor and wasting a lot time: [https://imgur.com/a/Zt0M9DX](https://imgur.com/a/Zt0M9DX)

<comment><USER21> Fun, got the same issue. Clicking around & opening stuff makes it eventually disappear.

</comment></comment><comment><USER22> Looks nice,

\- What are your plans to expand the amount of items?

\- What do you think about the option to add your own build items, and maybe share them across users?

<comment><AUTHOR> 1/ I'll invest in content creation for sure. In addition, I'll try to find authors who will sell their works on my platform.

2/ My technology is not ready yet to support "any content" but that's the inevitable future.

</comment></comment><comment><USER23> Is it possible to add your own templates/components and pick them from the menu?

<comment><AUTHOR> Unfortunately, not yet. Our technology is not ready to support "any content", but that's the inevitable future and our direction (custom components). (I copied my answer from Product Hunt, someone asked the same question a moment ago. Maybe you? ;))

</comment></comment><comment><USER24> Does it make a responsive design or do you have to do that yourself?</comment>


Unofficial Apple iMessage app removed from Google Play Store - <AUTHOR> http://news.cnet.com/8301-13579_3-57604454-37/unofficial-apple-imessage-app-removed-from-google-play-store/ <comment><USER2> Not a surprise. It communicated everything to some server in China, not exactly good for users or security.</comment>