From 1f4a5237d9a6b35a1ebc7459ea52ed72098ed65e Mon Sep 17 00:00:00 2001 From: Mark Nadal Date: Tue, 17 Feb 2015 16:21:59 -0700 Subject: [PATCH] v0.1.0 release! --- index.html | 769 ++++++++++++++++++++++++++++++---------------- package.json | 2 +- web/img/mouse.png | Bin 0 -> 878 bytes web/index.html | 737 ++++++++++++++++++++++++++++++++++++++++++++ web/tabs.html | 21 ++ web/time.html | 506 ------------------------------ web/try.html | 232 ++++++++++++++ 7 files changed, 1498 insertions(+), 769 deletions(-) create mode 100644 web/img/mouse.png create mode 100644 web/index.html create mode 100644 web/tabs.html delete mode 100644 web/time.html create mode 100644 web/try.html diff --git a/index.html b/index.html index 1149d4c7..0402465f 100644 --- a/index.html +++ b/index.html @@ -3,12 +3,7 @@ - +
-
+
-
+
- + -
-
-
+
+
+
+ +
+
+
+
+
+
+ +
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+
+
+
+
+
+ + Distributed embedded graph database engine. The no pain, no cost, no backend, NoDB database, gun.
-
-
-
-
-
-
-
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
+ -Distributed embedded graph database engine. The no pain, no cost, no backend, NoDB database, gun. -
-
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
+
+
- +
+
+
+
+
+
-
-
-
+
+
+
+
+
+
+ + +
+
+
+
+
+
+ +
+
+
+
+
+
+ + Distributed embedded graph database engine. The no pain, no cost, no backend, NoDB database, gun.
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-
- - -
-
-
-
-
-
- -
-
-
-
-
-
- -Distributed embedded graph database engine. The no pain, no cost, no backend, NoDB database, gun. -
- - + + -
-
Easiest Database Ever
-
Sync state in a cinch at a distributed system scale.
-
+
+
Easiest Database Ever
+
Sync state in a cinch at a distributed system scale.
+
-
+
-
+
Fork me on GitHub - + + +
+ + + + +
+
Try it now
+ +
+ +
+
+
var gun = Gun('https://gunjs.herokuapp.com/gun');
+gun.set({hello: "world"}).key('example/tutorial');
+
+
+ + In this 1 minute tutorial, we will connect to a gun peer, create an object, and sync data in realtime. +
+
+ +
+ +
+ +
+
+
var ref = gun.load('example/tutorial');
+ref.on(function(data){
+  $('body').text(JSON.stringify(data));
+});
+
+
+ + Congratulations! You just made an object and saved a reference to it. + In two tabs, we'll load that key to open a shared reference. +
+
+ +
+ + +
+ +
+ +
+
+
+
+
+ + https://gunjs.herokuapp.com/ + + x + +
+ +
+
+
+
+
+
+ + https://gunjs.herokuapp.com/ + + x + +
+ +
+
+ +
+ +
+
+
ref.path('').set("");
+
+
+ + Let's update the "hello" field with a different value. + We can path into any field, and set it directly. +
+
+
+ +
+ + +
+
+ @@ -384,6 +628,7 @@ border-top: 1em solid FireBrick;"> }
+

The blog that started it all...

Gun is a persisted distributed cache, part of a NoDB movement. @@ -489,4 +734,4 @@ border-top: 1em solid FireBrick;"> - + \ No newline at end of file diff --git a/package.json b/package.json index ab56a13e..ed978bc0 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { "name": "gun" -, "version": "0.0.9-p" +, "version": "0.1.0" , "author": "Mark Nadal" , "description": "Graph engine." , "engines": { diff --git a/web/img/mouse.png b/web/img/mouse.png new file mode 100644 index 0000000000000000000000000000000000000000..b61651ec2d28b73e550c653872258267548f4e61 GIT binary patch literal 878 zcmV-!1CjiRP)uZVQSkg2d zDH9P{U0qG1DEbMgzY2!qI7zS9lOZh2GAW8ewANBpl`JnWCs7pr2u$AvqtR$2-ELQg zup~)FEsBT~MIlQ|OK}hc-`xeH(P$)>mzUD*cIE2oO8Wi&e^iNxq-iP(3k!YE^S%M5 zUIw!OrL|_5A~HHf1b}+I&i?+sJ3Bl3h3mRs0=800F%}kZw;Lv!%_gl@%bl5-`O0ye z&n98^uz38^BwTCF(a{mRySqhMmelL@&yyti0Z5cmm57K9pp;@l=_ukjW`2G?6OrFL zozBlyRs90|21I}cQlPQ{Rjbwh7j}Aj3edi|xOikPmd3q?Idh=004&Sm`1qKWm6dpI zZZ11GI2eK2?KWEL7eHlR?*ab+F;D4}IV7Zf$K + + + + + + + + + +

+ +
+ +
+ + + +
+
+
+ +
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+
+
+
+
+
+ + Distributed embedded graph database engine. The no pain, no cost, no backend, NoDB database, gun. +
+ +
+ +
+
+
+
+
+
+ + + +
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+ +
+
+
+
+
+
+ + +
+
+
+
+
+
+ +
+
+
+
+
+
+ + Distributed embedded graph database engine. The no pain, no cost, no backend, NoDB database, gun. +
+ + + + +
+
Easiest Database Ever
+
Sync state in a cinch at a distributed system scale.
+
+ +
+ +
+Fork me on GitHub + + +
+ + + + +
+
Try it now
+ +
+ +
+
+
var gun = Gun('https://gunjs.herokuapp.com/gun');
+gun.set({hello: "world"}).key('example/tutorial');
+
+
+ + In this 1 minute tutorial, we will connect to a gun peer, create an object, and sync data in realtime. +
+
+ +
+ +
+ +
+
+
var ref = gun.load('example/tutorial');
+ref.on(function(data){
+  $('body').text(JSON.stringify(data));
+});
+
+
+ + Congratulations! You just made an object and saved a reference to it. + In two tabs, we'll load that key to open a shared reference. +
+
+ +
+ + +
+ +
+ +
+
+
+
+
+ + https://gunjs.herokuapp.com/ + + x + +
+ +
+
+
+
+
+
+ + https://gunjs.herokuapp.com/ + + x + +
+ +
+
+ +
+ +
+
+
ref.path('').set("");
+
+
+ + Let's update the "hello" field with a different value. + We can path into any field, and set it directly. +
+
+
+ +
+ + +
+
+ + + + + +
+ +

The blog that started it all...

+

+ Gun is a persisted distributed cache, part of a NoDB movement. + It requires zero maintenance and runs on your own infrastructure. + Think of it as "Dropbox for Databases" or a "Self-hosted Firebase". + This is an early preview, so check out the github and read on. +

+

+ Everything gets cached, so your users experience lightning fast response times. + Since gun can be embedded anywhere javascript can run, + that cache can optionally be right inside your user's browser using localstorage fallbacks. + Updates are then pushed up to the servers when the network is available. +

+

+ All conflict resolution happens locally in each peer using a deterministic algorithm. + Such that eventual consistency is guaranteed across all writes within the mesh, + with fault tolerant retries built in at each step. Data integrity is now a breeze. +

+

+ Gun also establishes and repairs server to server communication across geographically separated machines, + with just the help of an initial IP from you. + It bridges the distance with a realtime connection, + so updates propagate at the speed of the raw pipes linking them. + However each server is intelligent enough to only subscribe to the necessary subsection of your data set that is in its working memory, + keeping things nimble for its connected users. +

+

+ Data is then persisted to any S3 like service, + allowing you to save a truly webscale amount of "big data" without breaking your wallet. + Consistency across concurrency is achieved at this layer + by each parallel snapshot going through an idempotent transformation that is agreed upon. + The granularity and frequency of these snapshots can be tweaked by you, + easily tailor fitting it to your data needs and budget concerns. +

+

+ In summary, this marks an important progression in web technologies. + Memory is getting cheap enough that we can now front load each connected user's active data + right into the application layer and manipulate it directly. + Networks are fast enough that if we get too many connected users we can just horizontally + redistribute them across different machines. + Conflict resolution algorithms are sophisticated enough to handle things immediately + in the majority of data cases, with the remaining few as transactions performed ontop. +

+ This is will be a win for both developers and users, + because it makes things easier to build and faster to respond. + We are excited about this and working hard to finish the first release. +

+

+ If you would like to learn more, email hi@gunDB.io - + or join the Google Group. + Plus we're hiring, so contact us! +

+

FAQ

+

Why did you build this thing?

+

+ 1. I love databases, especially new ones that keep the working set in memory. + But I was horrified to realize that if I use a Database as a Service (DaaS) + then I would have to rely on a network call to get that data, which is horribly slow. + I wanted something faster, and if possible, cheaper - because they start charging you + outrageous prices if you get past their incredibly tiny free tier. +

+

+ 2. Hosting your own database is a pain because you have to maintain the hard drives. + Even the basic setup and configuration is nasty... + having to create a bunch of EBS volumes, attaching them, then mounting, formatting, + MDADM and LVM, striping, mirroring, and keeping fstab from locking on boot. + This is ignoring having to figure out how to resize them. + Even with SSDs you have problems that they are bound to one instance and + you get charged for the total volume size, not the amount used. +

+

+ I wanted something easy, needing no maintenance and be extremely portable + - allowing me to spin up an ephemeral server anywhere, on any cloud, + and my data "just work" there. +

+

How are you different from every other database that is trying to reinvent the wheel?

+

+ 1. Because gun is not a database (NoDB), it is a persisted distributed cache. + The fatal flaw with databases is that they assume some centralized authority. + While this may be the case initially when you are small, + it always ceases to be true when you become large enough that concurrency is unavoidable. + No amount of leader election and consensus algorithms can patch this + without facing an unjustified amount of complexity. + Gun resolves all this by biting the bullet - + it solves the hard problems first, not last. + It gets data synchronization and conflict resolution right from the beginning, + so it never has to rely on vulnerable leader election or consensus locking. +

+

+ 2. Plus it embeds directly into your application, + so you can do your own custom queries with just pure programming logic. + Meaning you never have to learn some silly separate query language again. + A query language which just attempts to be some DSL to RPC another machine + into doing the same query you could have already written in half the time + it took to learn the query language. Because face it, any sufficiently capable + query language has to be Turing complete, and at that point - + why aren't you just writing your entire application logic in it? + Your app is nothing without your data. +

+
+ + + + + + \ No newline at end of file diff --git a/web/tabs.html b/web/tabs.html new file mode 100644 index 00000000..3d4be6a9 --- /dev/null +++ b/web/tabs.html @@ -0,0 +1,21 @@ + + + + + + + + + loading... + + + \ No newline at end of file diff --git a/web/time.html b/web/time.html deleted file mode 100644 index 00fa8729..00000000 --- a/web/time.html +++ /dev/null @@ -1,506 +0,0 @@ - - - - - - - - - - -
- -
- -
- - - -
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-
- - Distributed embedded graph database engine. The no pain, no cost, no backend, NoDB database, gun. -
-
- -
-
-
-
-
-
- - - -
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-
- - -
-
-
-
-
-
- -
-
-
-
-
-
- - Distributed embedded graph database engine. The no pain, no cost, no backend, NoDB database, gun. -
- - - -
-
Easiest Database Ever
-
Sync state in a cinch at a distributed system scale.
-
- -
- -
- -
-
- AWESOME SAUCE COLOR SYNCING -
-
-
- As easy as 1, 2, 3! -
    -
  1. Connect to a gun server.
  2. -
  3. Save some data.
  4. -
  5. Create a key to open it up later.
  6. -
-
var gun = Gun('http://localhost:8888/gun');
-gun.set({hello: 'world'}).key('my/first/data');
- - Disclaimer: This is a demo only! Data is deleted every 24 hours. - -
- -
- Let's test to see if the data got saved. -
    -
  1. Open this page in another browser tab.
  2. -
  3. Now you'll see my/first/data load over there. -
  4. Meanwhile, this textarea will wait for realtime updates from the other tab:
  5. -
- - The next level will be unlocked when you complete the realtime sync between tabs. -
- -
-
var gun = Gun('http://localhost:8888/gun');
-gun.load('my/first/data', function(err, data){
-	$('textarea').text(demo.print(data));
-});
- Does the key match from the previous tab? - -
- -
- Now let's listen to realtime updates, and change the value on the 'hello' field. -
gun.load('my/first/data')
-.on(function(updates){
-	$('textarea').text(demo.print(updates));
-}).path('hello').set('You!');
- - -
- -
- - -
-
-

Did you know?

-

GUN is lightning fast, cause it runs in memory.

- Click to persistence works. -
-
-

Guess what!

-

GUN is the only database with realtime push notifications.

- Learn . -
-
-

Have Big Data?

-

GUN tranforms it into meaningful data, with regular JS.

- Discover do a graph search. -
-
- -
-Fork me on GitHub - - diff --git a/web/try.html b/web/try.html new file mode 100644 index 00000000..52013400 --- /dev/null +++ b/web/try.html @@ -0,0 +1,232 @@ + + + + + + + + + + + + +
+
Try it now
+ +
+ +
+
+
var gun = Gun('https://gunjs.herokuapp.com/gun');
+gun.set({hello: "world"}).key('example/tutorial');
+
+
+ + In this 1 minute tutorial, we will connect to a gun peer, create an object, and sync data in realtime. +
+
+ +
+ +
+ +
+
+
var ref = gun.load('example/tutorial');
+ref.on(function(data){
+  $('body').text(JSON.stringify(data));
+});
+
+
+ + Congratulations! You just made an object and saved a reference to it. + In two tabs, we'll load that key to open a shared reference. +
+
+ +
+ + +
+ +
+ +
+
+
+
+
+ + https://gunjs.herokuapp.com/ + + x + +
+ +
+
+
+
+
+
+ + https://gunjs.herokuapp.com/ + + x + +
+ +
+
+ +
+ +
+
+
ref.path('').set("");
+
+
+ + Let's update the "hello" field with a different value. + We can path into any field, and set it directly. +
+
+
+ +
+ + +
+ + \ No newline at end of file