

Simple - An Obtvse clone written in Python - jsherer
https://github.com/orf/simple
Not my project, but found this interesting...
======
jsherer
I'd like to see one of these clones that more closely resembles the static
site generators like Jekyll (<http://jekyllrb.com/>) or Hyde
(<http://ringce.com/hyde>). Basically, the CMS would just be the interface to
create new and manage existing content. It would have the standard static
publish function that builds out the pages of the blog as HTML.

(NOTE: "Simple" is not my project)

~~~
espeed
Lightbulb (<https://github.com/espeed/lightbulb>) is a Git-powered,
Neo4j-backed blog engine written in Python.

It allows you to create entries in ReStruturedText using a text editor. I
designed it with Heroku in mind, but can be easily adapted for any Web
environment that uses Git.

When you push to Heroku, the entry metadata will be automatically saved to
Neo4j, and the HTML fragment generated from the ReStructuredText source file
will be served off disk.

You can use the free Heroku dyno and Neo4j Add-on
(<https://addons.heroku.com/neo4j>) to serve your blog for free.

~~~
kisielk
What's the advantage of storing a blog in a graph database? Or is it just one
of those "just because I could" things?

~~~
espeed
Hi Kamil - A database-backed blog enables you to easily integrate the content
into your existing website -- for example, dynamically displaying the latest
entry on the home page, and it makes it easy to style the blog with the site's
existing templating system rather than maintaining a separate system.

I wanted the benefits of a dynamic app, but I wasn't willing to exchange Emacs
for a Web-based editor so I created a hybrid engine.

I chose Neo4j because graphs are an elegant way of storing relational data.
There are no tables to mess with and no joins (everything is explicitly
joined). And if your blog's auth/commenting system uses data from the social
graph, such as Facebook or Twitter, a graph database provides a clean way of
storing the data.

Also, I am the author of Bulbs (<https://github.com/espeed/bulbs>), a graph-
database framework written in Python, so using it was a natural choice.

~~~
rglullis
> I chose Neo4j because graphs are an elegant way of storing relational data.

As opposed to, say, a _Relational_ DBMS?

What you've done might be very interesting and rewarding to you, but it feels
like you wasted three paragraphs in your response with something that falls
right into the "just because I could" camp.

~~~
mgkimsal
Another way to read it: Relational databases just aren't elegant.

~~~
fusiongyro
"Elegance" is one of those empty words that's great for polarizing a debate
without really adding any meaningful information.

Neo4j is neat and underutilized. I think rglullis is just saying, if that's
why espeed used it, he could have saved three paragraphs of explanation by
just saying that.

~~~
espeed
Notice I didn't just say it was elegant, I said why: "There are no tables to
mess with and no joins (everything is explicitly joined)."

I find elegance in simplicity. If you don't need the tabular features of a
relational database, why not use a graph DB for relational data? It's like a
key value store with directly connected relationships.

This is so much simpler than having to deal with creating tables, DDLs, and
migrations:

    
    
      >>> g = Graph()
      >>> james = g.vertices.create(name="James")
      >>> julie = g.vertices.create(name="Julie")
      >>> g.edges.create(james, "knows", julie)
    

Futhermore, there's no impedance mismatch so your code is cleaner.

But regardless, this is Hacker News where people explore, build, and share new
things. I hope we're not moving to a place where that gets admonished.

~~~
kisielk
I've actually looked a bit at bulbflow before, being a Python programmer who
has had an interest in graph databases for quite some time. That's why I asked
my question originally. Can you give an example of the types of relations
you're using the DB to represent in a blog?

~~~
espeed
These are the base elements:

    
    
      * Nodes/Vertices: Person, Topic, Entry
      * Relationships/Edges: Tagged, Authored
    
      person -- authored --> entry
      entry -- tagged --> topic
    

Here's the base model:
[https://github.com/espeed/lightbulb/blob/master/lightbulb/mo...](https://github.com/espeed/lightbulb/blob/master/lightbulb/model.py)

The comment system is a separate, generic component.

Marko, the guy who created Gremlin
(<https://github.com/tinkerpop/gremlin/wiki>), just released a Gremlin Tree
step (<https://github.com/tinkerpop/gremlin/wiki/Tree-Pattern>), which makes
it really easy to build a threaded comment tree in one quick shot.

If you have a large blog or content system, you can use likes and views to
make content recommendations using a basic Gremlin collaborative filtering
query:

    
    
      // calculate basic collaborative filtering for vertex with user_id
      def rank_items(user_id) {
          m = [:]
          g.v(user_id).out('likes').in('likes').out('likes').groupCount(m)
          m.sort{a,b -> a.value <=> b.value}
          return m.values()
      }
    

If you use Facebook, Twitter, or GitHub to authenticate users you can easily
incorporate friends and followers into the recommendations.

~~~
kisielk
Thanks for taking the time to explain, I'll definitely be doing some reading
over the code.

------
slig
> Go download Python 2.7+, Flask, Sqlalchemy and flask-sqlalchemy and you are
> good to go.

OP, you should learn about requirements.txt and virtualenv/virtualenvwrapper,
it will make your life easier.

~~~
gecko
He actually has a REQUIRES file that's in requirements.txt format, so it looks
like he kind of does.

~~~
flashingpumpkin
It's still not properly packaged up and also nowhere to be found on
<http://pypi.python.org> resulting in no _pip_ and no _easy_install_ options.
Pretty much every useful python package is distributed that way, see httpie
for example [1].

[1] <https://github.com/jkbr/httpie>

------
phwd
Nice work with the Python style, though I believe Simple and Obtvse missed the
point as with every clone of something out there that tries to replicate what
they could see on the outside. Skipping over Dustin's attitude of the
situation, no one really knows how Svbtle.com works on the inside do they?

From the outside look and the screenshots (because that's all Dustin showed
you) it's a simple design and that's the point; it was never supposed to be a
complex work of design for you to be proud that you could replicate it in 1
day in rails. Yeah, Dustin put some work into thinking what could work for the
layout but once the application of the design is done, replication is beyond
simple.

Clone all you want I think it's great but Dustin was really telling the story
of the "network" the idea of a closely knit community of writers (pseudo-
writers whichever you prefer). I look at it as similar to the Deck Ad network
or Dribbble (before every desperate Designer begged for an invite). Or when an
HN clone comes along, no one ever migrates across, they always come back here.

Point is, the one thing you are never going to have is the network, that human
element that sets apart the clone from the real deal.

~~~
nwienert
Whats funny is I agree with just about everything you've stated here, although
I do believe we did get a pretty good idea of the backend with the
screenshots.

But your point doesn't detract in any way from these projects. The point of
Svbtle is the network. The point of Obtvse/Simple is the backend. You say
"clone all you want" which is exactly what we did.. the goal was never to
"beat" anyone or prove anything, it was to mimic the software, which we've
already accomplished.

And IMO, that is more valuable than a network. Because now anyone can use it.
And as good as Dustin's network ends up being, if it's never all-inclusive, it
will always miss out on a the biggest and best talent-pool around... the
internet.

------
victork2
So much drama around what is basically a skin/cosmetic improvement...

Good luck anyway.

------
geoffw8
I think these two packages could become a great learning resource for noobies.
I'm a Ruby guy, but am definitely going to take a look into this version,
should add usually difficult to find "context".

Nice work :)

------
killnine
AH! I was waiting for the python version.

I also watch this python static blogging app on github
here:<https://github.com/fallenhitokiri/Zenbo>

~~~
nikcub
I wrote my own static generator with a command-line and web interface a while
ago, add it to your watch list if interested, ill eventually clean it up into
a v1.0 and release it, but it works right now and I have been using it for my
own blog for a while:

<https://github.com/nikcub/floyd>

------
pfraze
I'm holding out for the Haskell version.

------
richthegeek
This is getting ridiculous... nice job all the same!

------
conductor
Nice work, thanks, though I have a feeling that it's misnamed, sPymple
would've been a nice match to Obtvse :)

~~~
jodrellblank
Acvte, surely?

------
aprescott
This should probably have a license added to it somewhere. Especially with
those 21 forks hanging around.

------
astrofinch
I'm a Django guy. Can someone explain the appeal of Python micro-frameworks
like flask? Why would you want to give up all of those open-source Django
apps?

<http://djangopackages.com/>

------
edwinyzh
You know what? Today I was thinking of that it'd great if Obtvse was written
in Python + Flask :)

------
jredwards
I'm holding out for Svmple

~~~
mdonahoe
I'll wait for Svmpler

------
tptacek
This one doesn't even bother to rewrite the CSS; it just takes the cloned CSS
from Obtuse. The snake eats its own tail.

~~~
unalone
Obtvse was open-sourced for a reason: so that people could take it and modify
it and use it however they'd like. This is open-source working.

~~~
tptacek
You keep telling yourself that.

~~~
unalone
I don't see what's so difficult, Thomas. A clever, smug person posted about a
project of his and behaved poorly when people complained about not having
access to it. So somebody else cloned it – not to steal the thunder, but to
_let people use the program_. Now it's been cloned again and spreads a little
further. I'm sure the guy that open-sourced it considers this a victory,
inasmuch as the idea has spread even further.

If Dustin's stopped sulking about his little change-the-world club being
subverted and opened up, he's probably happy about this too: this idea that he
came up with and worked on is so popular that people are making an effort to
spread it further. If his actual idea is even greater and grander, then when
Svtble opens up people will flock to it and thank him for it. Everybody wins.

~~~
mattmorgan
You have to give him some credit that he is using this opportunity to defend
Curtis and build a powerful relationship when everyone else is slamming him.
People don't forget it when you defend them when few others will.

~~~
tptacek
I don't know Dustin Curtis or care particularly too much about Dustin Curtis.
What I remember about him was that he wrote a blog post about American
Airlines that got a lot of play that I found simultaneously smug and naive in
that infuriating way designers sometimes have, and that he spent a lot of time
making all his blog posts look different.

What I don't like is bullying. This whole site spent a week chasing a YC
company around with a pitchfork and torches for stealing designs from a well-
known company, but when some guy writes some promo copy that enough people
here don't like, HN manages to spawn a meme that the same copying is somehow
liberation for the cause of open source.

People are allowed to choose who they associate with. Dustin Curtis does not
need to "open up" his little club. For crissakes, you're writing this on the
message board of an exclusive club that won't have you as a member.

"Powerful relationship with Dustin Curtis". Sheesh.

~~~
unalone
Copying _is_ liberation. You're freed from relying on the original instance.

The issue I took with Dustin wasn't just the idiocy with which he decided
making a pretty blog equated to somehow creating the future of journalism. It
was how, when people on this site complained about his copy, his response
wasn't "it was a joke" or "this is still a private beta" but "good, my
marketing worked because you'll remember it".

If Dustin didn't want his private little club to go public, he could have
chosen not to write about Svtble at all, and we'd have no idea of what it
looked like behind the scenes. Once he went public, his ideas became a part of
every "club" that cared to look at them, including ours. You are always
responsible for what you do in public. Always.

It's twisted to look at the response as "bullying". Somebody copied a public
idea and released it to people who didn't have access to it yet. Partly in
response to Dustin's saying, "You know what, I don't care if I offend you, as
long as you pay attention to me." The only way that the open-sourcing was
bullying was that it turns out Dustin does care about offending people after
all. Not that he seems to have learned anything from this, other than "people
on that web site don't like me and that sucks."

~~~
macrael
I didn't see Dustin's supposedly arrogant comments back when this shitstorm
blew in, but I still don't understand why anyone thinks this is OK. Was Dustin
upset about people copying the backend? because, I don't see a problem with
someone taking his "ideas instead of drafts" bit and running with it. What is
completely unacceptable is the wholesale copying of his visual deign. We now
have two different "open source" blogging systems that allow people to create
websites that look pretty much exactly like Dustin's, without his permission.
That's shitty and wrong. Dustin created a visual brand for himself, and yes,
six others. No one has the right to take that and use it for themselves
without his permission. There is no "liberation" in using someone else's
design, there is only theft.

~~~
nwienert
The design is not his design. Please compare the two before jumping to that
conclusion. The copy has stripped all unique elements of Dustin's design.

<http://obtvse.herokuapp.com> <http://dcurt.is>

~~~
tptacek
Uh huh. What's a well-known site elsewhere on the Internet that looks more
similar to Dustin's than yours?

~~~
nwienert
Already showed you one in the other thread. Done playing with the trolls..

