Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

renewal

  • Loading branch information...
commit 05d86930cf9d4baad57c621e56048d586fbfa531 1 parent 25e32a5
@frsyuki frsyuki authored
View
777 css/all.css
@@ -1,447 +1,488 @@
header, footer, section {
- display:block;
- margin:0;
- padding:0;
- border:0;
+ display:block;
+ margin:0;
+ padding:0;
+ border:0;
}
html {
- background-color:#454545;
-}
-
-/*
- * Body width
- */
-#header > *, #desc > *,
-#background > *, #footer > * {
- margin:0 auto;
- width:1000px;
-}
-
-/*
- * Header width
- */
-#header {
- background-color:#150e4f;
- height:100px;
-}
-#logo {
- margin:20px 0 0 0;
- float:left;
- text-indent:-9999px;
- overflow:hidden;
- background:url(../images/logo.png) no-repeat;
- width:421px;
- height:69px;
-}
-#topnav {
- text-align:right;
- padding-top:60px;
-}
-#topnav ul {
- margin:0;
- padding:0;
-}
-#topnav li {
- list-style-type:none;
- font-size:16px;
- border-left:1px solid #5555aa;
- display:inline;
- display:inline-block;
-}
-#topnav li a {
- display:block;
- padding:2px 30px 2px 30px;
- color:#cfcfff;
- text-decoration:none;
-}
-#topnav li a:hover {
- color:#ffffff;
- text-decoration:underline;
-}
-#header:after {
- content:'';
- display:block;
- clear:both;
-}
-
-/*
- * Description
- */
-#desc {
- height:400px;
- border-top:2px solid #463180;
- border-bottom:1px solid #260cab;
- /*background-color:#17181c;*/
- background:url(../images/splash.jpg) 50% 0 no-repeat #000000;
- padding-bottom:10px;
-}
-#descbody {
- padding-top:20px;
-}
-#descimg {
- display:block;
- float:right;
- background:url(../images/alpha80black.png) repeat;
- margin:40px 0px 0 0;
- padding:15px 10px 15px 10px;
-}
-#desctext {
- width:510px;
- float:left;
- color:#dddddd;
- background:url(../images/alpha80black.png) repeat;
- padding:10px 20px 10px 20px;
+ background-color:#edebda;
}
+
+body {
+ font-family:'Myriad Web Pro', 'Helvetica', sans-serif;
+}
+
+a {
+ color:#0000ee;
+ text-decoration:none;
+}
+a:hover {
+ text-decoration:underline;
+}
+
+header > *, main > *, footer > * {
+ margin:0 auto;
+ width:1200px;
+}
+
+header {
+ background-color:#292929;
+ height:130px;
+ border-bottom:2px solid #ff3333;
+}
+h1 {
+ margin:30px 0 0 0;
+ float:left;
+ text-indent:-9999px;
+ overflow:hidden;
+ background:url(../images/logo.png) no-repeat;
+ width:421px;
+ height:69px;
+}
+nav {
+ text-align:right;
+}
+nav ul {
+ margin:0;
+ padding:0;
+}
+nav li {
+ list-style-type:none;
+ display:inline-block;
+}
+nav li a {
+ display:block;
+ height:130px;
+ font-family:'Titillium Web', 'Myriad Web Pro', 'Helvetica', sans-serif;
+ font-weight:200;
+ font-size:22px;
+ padding-left:38px;
+ padding-right:38px;
+ line-height:130px;
+ color:#ffffff;
+ text-decoration:none;
+}
+nav li a:hover {
+ background-color:#000000;
+ text-decoration:none;
+}
+header:after {
+ content:'';
+ display:block;
+ clear:both;
+}
+
+main {
+}
+
h2 {
- font-size:29px;
- letter-spacing:1px;
- font-family:Myriad Web Pro, Arial, Helvetica, sans-serif;
- color:#ffffff;
- margin:0 0 10px 0;
-}
-#desctext p {
- font-size:100%;
- line-height:160%;
- text-align:justify;
-}
-#desctext pre {
- font-weight:normal;
- font-size:105%;
- /*letter-spacing:-1px;*/
- letter-spacing:1px;
- line-height:170%;
- padding:10px 10px 10px 10px;
- margin:18px 0 15px 0;
- font-family:Monaco, Courier, sans-serif;
- /*border:1px solid #005181;*/
- border:1px solid #463180;
- background-color:#262626;
- color:#ffffff;
-}
-#desctext a {
- color:#ffffff;
- text-decoration:underline;
-}
-#desctext a:hover {
- color:#ffffff;
- text-decoration:none;
-}
-#descbody:after {
- content:'';
- display:block;
- clear:both;
-}
-
-/*
- * Content background
- */
-#background {
- border-top:1px solid #252550; /* shadow */
- background:url(../images/shadow1000.png) 50% 0 repeat-y;
-}
-
-/*
- * Content
- */
-#content {
- margin-top:-1px;
- border-top:1px solid #454590; /* shadow overwrite */
- padding-bottom:20px;
- background-color:#ffffff;
- width:1001px;
+ font-family:'Titillium Web', 'Myriad Web Pro', 'Helvetica', sans-serif;
+ font-weight:200;
}
h3 {
- color:#ffffff;
- background:black;
- width:250px;
- padding:8px 0 0 8px;
- margin:1.8em 0 0.8em 0;
- height:35px;
- font-size:16px;
- background:url(../images/ribbon.png) 100% 0 no-repeat;
- font-weight:normal;
- letter-spacing:1px;
- font-family:Myriad Web Pro, Arial, sans-serif;
-}
-
-/* testimonial */
-/*
- * 1000px =
- * tmleft/tmright: width:29 * 2 +
- * tm: (width:290 + padding:12 + padding:12) * 3
- */
-.tmset {
- padding-top:10px;
- margin-bottom:20px;
- height:220px;
-}
-.tmleft, .tmright {
- width:29px;
- height:100%;
- color:#999999;
- display:block;
-}
-.tmleft:hover, .tmright:hover {
- background-color:#eeeeee;
-}
-.tmleft {
- float:left;
- background:url(../images/arrow1.png) 8px 80px no-repeat;
-}
-.tmright {
- float:right;
- background:url(../images/arrow2.png) 8px 80px no-repeat;
+ font-family:'Avenir Next', 'Titillium Web', 'Myriad Web Pro', 'Helvetica', sans-serif;
+ font-weight:200;
+ margin:1em 0;
}
-.tm {
- float:left;
- width:290px;
- padding:0 12px;
+
+section#introduction {
+ background:url(../images/intro.png) 100% 0 no-repeat #3b3b3b;
+ border-bottom:2px solid #ff3333;
+}
+#description {
+ padding:40px 50px 0 50px;
+ height:310px;
+ width:300px;
+ background-color:#2b2b2b;
+}
+#description h2 {
+ margin:0;
+ font-size:30px;
+ line-height:45px;
+ color:#ffffff;
+ margin-bottom:22px;
+}
+#description p {
+ font-family:'Titillium Web', 'Myriad Web Pro', 'Helvetica', sans-serif;
+ font-weight:200;
+ font-size:115%;
+ line-height:160%;
+ color:#c9c9c9;
+ /*color:#dddddd;*/
+ text-align:justify;
+}
+#next {
+ background-color:#1f3c59;
+ margin-top:50px;
+ height:78px;
+}
+#next h3 {
+ margin:20px 0 0 50px;
+ color:#ffffff;
+ font-size:34px;
+ float:left;
+ width:90px;
+}
+#next p {
+ margin:25px 0 0 0;
+ color:#ffffff;
+ font-family:'Titillium Web', 'Myriad Web Pro', 'Helvetica', sans-serif;
+ font-weight:200;
+ line-height:140%;
+ float:left;
+ width:1000px;
+}
+#next p a {
+ color:#ffffff;
+ text-decoration:underline;
+}
+#next p a:hover {
+ color:#ffffff;
+ text-decoration:none;
+}
+#next:after {
+ content:'';
+ display:block;
+ clear:both;
}
-.tmh {
- float:left;
- width:290px;
- padding:0 12px;
- display:none;
+
+section#usecases {
+ background-color:#ffffff;
+ padding-top:55px;
+ padding-bottom:30px;
}
-.tmlogo {
- display:block;
- height:65px;
+
+#testimonials {
+ padding-left:50px;
+ float:left;
+ width:740px;
}
-.tmlogo img {
- display:block;
- margin:0 auto;
+.tm {
+ float:left;
+ width:320px;
+ margin-right:48px;
+ margin-top:30px;
+ text-align:justify;
}
+.tmlogo {
+ display:block;
+ height:65px;
+}
+/*.tmlogo img {
+ display:block;
+ margin:0 auto;
+}*/
.tmtext {
- font-size:100%;
- line-height:150%;
- /*text-align:justify;*/
+ font-size:100%;
+ line-height:150%;
}
-.tmset:after {
- content:'';
- display:block;
- clear:both;
+.tmtext:before {
+ content:'"';
+ margin-left:-0.6ex;
+}
+.tmtext:after {
+ content:'"';
}
.tmauthor {
- font-family:verdana;
+ font-style:italic;
+}
+.tmset:after {
+ content:'';
+ display:block;
+ clear:both;
}
.tmcontribute {
- float:right;
- width:334px; /* .tm:width:290 + .tm:padding:12*2 + 20px */
- margin-top:10px;
- font-size:95%;
+ margin-top:2.2em;
+}
+
+#twitter {
+ width:400px;
+ padding:0;
+ margin:0;
+ float:right;
}
-.tmcontribute:after {
- content:'';
- display:block;
- clear:both;
+
+section#usecases:after {
+ content:'';
+ display:block;
+ clear:both;
}
-/* quick starts */
-.qsset {
- height:20em;
- padding:20px;
- /*background-color:#383838;*/
- background-color:#444444;
- border-bottom:1px solid #111;
+section#usage {
+ background-color:#3b3b3b;
+ padding-top:1em;
+ padding-bottom:2em;
}
-.qsholder {
- float:right;
- width:655px;
- padding:1em 18px 0em 18px;
- height:18.5em;
- background-color:#ffffff;
- border:1px solid #999999;
- overflow:auto;
- /*color:#bbbbbb;*/
+
+section#usage h3 {
+ color:#ffffff;
+ font-size:25px;
+ margin-bottom:1.2em;
+}
+
+#languages {
+ float:left;
+ width:460px;
+}
+#languages > * {
+ padding-left:50px;
+}
+#languages ul {
+ margin:0;
+}
+#languages li {
+ list-style-type:none;
+ float:left;
+ /*
+ text-align:center;
+ margin-right:8px;
+ margin-bottom:7px;
+ */
+ width:180px;
+ margin-right:20px;
+}
+#languages a {
+ display:block;
+ padding:9px 10px 9px 20px;
+ margin-bottom:8px;
+ font-family:'Avenir Next', 'Titillium Web', 'Myriad Web Pro', 'Helvetica', sans-serif;
+ font-size:19px;
+ color:#c0c0c0;
+ /*
+ border:1px solid #777;
+ -webkit-border-radius:5px;
+ -moz-border-radius:5px;
+ */
+ background-color:#525252;
+ text-decoration:none;
+}
+#languages span.qs-sub {
+ font-size:70%;
+ margin-left:0.2em;
+ color:#b3b3b3;
+}
+#languages span.qs-sub:before {
+ content:'/';
+ margin-right:0.2em;
+}
+#languages a:hover {
+ color:#ffffff;
+ background-color:#a04900;
+ cursor:pointer;
+ text-decoration:none;
+}
+#languages a:hover .qs-sub {
+ color:#ffffff;
+}
+#languages a.selected {
+ color:#ffffff;
+ background-color:#a04900;
+ cursor:default;
+}
+#languages a.selected .qs-sub {
+ color:#ffffff;
+}
+
+#api {
+ float:right;
+ width:740px;
}
+
.qs {
- display:none;
+ display:none;
}
-.qsholder h4 {
- margin-bottom:10px;
- font-size:19px;
- color:#000000;
+#language {
+ margin-right:50px;
+ padding:15px 0 0 20px;
+ padding:0;
+ color:#ffffff;
+ height:38px;
+ background-color:#525252;
+ font-size:15px;
+}
+#language a {
+ font-family:'Avenir Next', 'Titillium Web', 'Myriad Web Pro', 'Helvetica', sans-serif;
+ font-weight:200;
+ display:block;
+ padding:10px 0 10px 20px;
+ text-decoration:none;
+ color:#ffffff;
+}
+#language a:hover {
+ background-color:#a04900;
+ color:#ffffff;
+ /*text-decoration:underline;*/
+}
+#language span.qs-url {
+ display:block;
+ text-align:right;
+ float:right;
+ width:350px;
- display:none;
+ padding-top:0.5em;
+ padding-right:20px;
+ overflow:hidden;
+ font-size:80%;
+ color:#c0c0c0;
+ text-align:right;
+}
+#language a:hover span.qs-url {
+ color:#ffffff;
+}
+#language a:after {
+ content:'';
+ display:block;
+ clear:both;
+}
+
+.qsholder {
+ padding:20px 1.5em 0em 20px;
+ margin-right:50px;
+ height:31em;
+ background-color:#ffffff;
+ overflow:auto;
+ font-size:115%;
+ /*color:#bbbbbb;*/
}
.qsholder pre {
- font-size:100%;
- padding:8px 15px 8px 15px;
- margin:0 0 0.7em 0;
- font-family:Monaco, Courier, sans-serif;
- border:1px solid #666;
- /*background-color:#262626;*/
- background-color:#faffff;
- font-weight:bold;
- line-height:140%;
- border:1px solid #005181;
+ padding:8px 15px 8px 15px;
+ margin:0 0 0.7em 0;
+ font-family:Monaco, Courier, sans-serif;
+ border:1px solid #666;
+ /*background-color:#262626;*/
+ background-color:#faffff;
+ font-weight:bold;
+ line-height:140%;
+ border:1px solid #005181;
}
.qsholder p {
- margin-bottom:0.4em;
+ margin-bottom:0.4em;
}
.hlist {
- margin:0 0 0.8em 0;
- padding:0;
+ margin:0 0 0.8em 0;
+ padding:0;
}
.hlist li {
- list-style-type:none;
- float:left;
- margin-right:3em;
+ list-style-type:none;
+ float:left;
+ margin-right:3em;
}
.hlist:after {
- content:'';
- display:block;
- clear:both;
-}
-.qslist {
- float:left;
- width:260px;
- margin:0;
-}
-.qslist li {
- list-style-type:none;
- text-align:center;
- float:left;
- margin-right:8px;
- margin-bottom:7px;
-}
-.qslist a {
- display:block;
- padding:6px 20px 5px 20px;
- font-size:13px;
- color:#ffffff;
- border:1px solid #777;
- -webkit-border-radius:5px;
- -moz-border-radius:5px;
-
- background:#151515;
- color:#aaaaaa;
-
- /* http://gradients.glrzad.com/ */
- background-image: linear-gradient(bottom, rgb(0,0,0) 80%, rgb(99,99,99) 100%);
- background-image: -o-linear-gradient(bottom, rgb(0,0,0) 80%, rgb(99,99,99) 100%);
- background-image: -moz-linear-gradient(bottom, rgb(0,0,0) 80%, rgb(99,99,99) 100%);
- background-image: -webkit-linear-gradient(bottom, rgb(0,0,0) 80%, rgb(99,99,99) 100%);
- background-image: -ms-linear-gradient(bottom, rgb(0,0,0) 80%, rgb(99,99,99) 100%);
-
- background-image: -webkit-gradient(linear, left bottom, left top,
- color-stop(0.8, rgb(0,0,0)),
- color-stop(1, rgb(99,99,99))
- );
- cursor:pointer;
-}
-.qslist a:hover {
- color:#ffffff;
- text-decoration:underline;
-}
-.qslist a.selected {
- cursor:default;
- background:#900020;
- border:1px solid #c04444;
- color:#ffffff;
-}
-.qslist a.selected:hover {
- text-decoration:none;
+ content:'';
+ display:block;
+ clear:both;
}
+
.linklist {
- margin-top:10px;
+ margin-top:10px;
}
.linklist li {
- font-size:95%;
- list-style-type:none;
- line-height:135%;
+ font-size:98%;
+ list-style-type:none;
+ margin-top:0.5em;
}
.linklist li:before {
- content:'>';
- font-weight:bold;
- font-size:10px;
- letter-spacing:-3px;
- margin:0 8px 0 -11px;
+ content:'>';
+ font-weight:bold;
+ font-size:10px;
+ letter-spacing:-3px;
+ margin:0 8px 0 -11px;
}
-.qsset:after {
- content:'';
- display:block;
- clear:both;
+#quickstart-guide {
+ color:#c9c9c9;
+ margin-top:2em;
+ text-align:right;
+ padding-right:50px;
}
-.paragraphs > * {
- margin:0 20px 0 20px;
+section#usage:after {
+ content:'';
+ display:block;
+ clear:both;
}
-a {
- color:#0000ee;
- text-decoration:none;
+section#related {
+ background-color:#ffffff;
+ padding-top:20px;
+ padding-bottom:30px;
}
-a:hover {
- text-decoration:underline;
+section#related > * {
+ padding-left:50px;
}
-
-#content .paragraphs {
- line-height:140%;
+section#related h3 {
+ font-size:25px;
}
-#content .paragraphs h4 {
- margin-top:1.5em;
- margin-bottom:0.5em;
+.paragraphs {
+ line-height:140%;
}
-#content .paragraphs h4:before {
- content:'>';
- font-weight:bold;
- font-size:11px;
- letter-spacing:-3px;
- margin:0 8px 0 -11px;
+.paragraphs > * {
+ margin:0 1em 0 1em;
}
-
-#content .paragraphs p {
- margin-bottom:0.4em;
+.paragraphs a {
+ color:#0000ee;
+ text-decoration:none;
}
-
-/*
- * Footer
- */
-#footer {
- background:url(../images/shadow1000bottom.png) 50% 0 no-repeat;
- padding-bottom:50px;
+.paragraphs a:hover {
+ text-decoration:underline;
+}
+.paragraphs h4 {
+ margin-top:1.5em;
+ margin-bottom:0.5em;
+}
+.paragraphs h4:before {
+ content:'>';
+ font-weight:bold;
+ font-size:11px;
+ letter-spacing:-3px;
+ margin:0 8px 0 -11px;
+}
+.paragraphs p {
+ margin-bottom:0.4em;
}
-#footerbody {
- color:#999;
- font-size:100%;
+footer {
+ color:#c9c9c9;
+ padding-bottom:50px;
+ padding-top:30px;
}
+
#social {
- padding-top:25px;
- margin-bottom:15px;
+ padding-left:50px;
}
+
#social .fb-like {
- top:-3px;
- margin-left:-14px;
+ top:-3px;
+ margin-left:-14px;
}
#thanks {
- color:#aaaaaa;
+ margin-top:0px;
+ padding-left:50px;
+ color:#a0a0a0;
}
#sponsor {
- float:right;
- width:300px;
- text-align:right;
- margin-top:-7px;
+ float:right;
+ width:300px;
+ text-align:right;
+ margin-top:-7px;
}
#sponsor a {
- color:#aaaaaa;
- vertical-align:bottom;
- text-decoration:none;
+ color:#aaaaaa;
+ vertical-align:bottom;
+ text-decoration:none;
}
#sponsor a:hover {
- color:#aaaaaa;
- text-decoration:underline;
+ color:#aaaaaa;
+ text-decoration:underline;
}
#sponsor img {
- margin-left:3px;
+ margin-left:3px;
}
View
BIN  images/intro.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
BIN  images/treasuredata.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
451 index.html
@@ -3,7 +3,6 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="keywords" content="MessagePack, msgpack, JSON, Binary JSON, Serializer, Serialization" />
- <!--<meta name="description" content="" />-->
<link href='favicon.ico' rel='icon' type='image/x-icon'/>
<title>MessagePack: It's like JSON. but fast and small.</title>
@@ -12,421 +11,117 @@
<link media="all" rel="stylesheet" type="text/css" href="css/yuibase.css" />
<link media="all" rel="stylesheet" type="text/css" href="js/prettify/prettify.css" />
<link media="all" rel="stylesheet" type="text/css" href="css/all.css" />
+ <link href='http://fonts.googleapis.com/css?family=Titillium+Web:400,200' rel='stylesheet' type='text/css'>
<script type="text/javascript" src="js/all.js" ></script>
<script type="text/javascript" src="js/prettify/prettify.js" ></script>
-
- <script type="text/javascript">
- var _gaq = _gaq || [];
- _gaq.push(['_setAccount', 'UA-17125377-1']);
- _gaq.push(['_setDomainName', 'msgpack.org']);
- _gaq.push(['_anonymizeIP']);
- _gaq.push(['_trackPageview']);
- (function() {
- var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
- ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
- var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
- })();
- </script>
</head>
-<body onload="prettyPrint();changeQuickStart('qs-ruby',document.getElementById('quickstart-default'));">
-
-<!-- Facebook like button { -->
-<div id="fb-root"></div>
-<script>(function(d, s, id) {
- var js, fjs = d.getElementsByTagName(s)[0];
- if (d.getElementById(id)) return;
- js = d.createElement(s); js.id = id;
- js.src = "//connect.facebook.net/en_US/all.js#xfbml=1";
- fjs.parentNode.insertBefore(js, fjs);
-}(document, 'script', 'facebook-jssdk'));</script>
-<!-- } Facebook like button -->
-
- <header id="header">
- <div id="headerwrap">
- <h1 id="logo"><a href="/">MessagePack</a></h1>
+<body onload="prettyPrint();changeQuickStart(document.getElementsByClassName('qs')[0].id,document.getElementsByClassName('qs-a')[0])">
+ <header>
+ <div>
+ <h1><a href="/">MessagePack</a></h1>
<nav id="topnav">
<ul>
<li><a href="https://github.com/msgpack">GitHub</a></li>
- <li><a href="http://wiki.msgpack.org/display/MSGPACK/Home">Wiki</a></li>
- <li><a href="http://twitter.com/search/MessagePack%20OR%20msgpack">#msgpack</a></li>
<li><a href="http://wiki.msgpack.org/display/MSGPACK/Format+specification">Spec</a></li>
+ <li><a href="http://twitter.com/search/MessagePack%20OR%20msgpack">#msgpack</a></li>
</ul>
</nav>
</div>
</header>
- <div id="desc">
- <div id="descbody">
- <img id="descimg" width="421" height="251" src="images/msgpack-json.png"/>
- <div id="desctext">
- <h2>It's like JSON. but fast and small.</h2>
- <p>MessagePack is an efficient binary serialization format. It lets you exchange data among multiple languages like JSON but it's faster and smaller. For example, small integers (like flags or error code) are encoded into a single byte, and typical short strings only require an extra byte in addition to the strings themselves.</p>
- <p>If you ever wished to use JSON for convenience (storing an image with metadata) but could not for technical reasons (encoding, size, speed...), MessagePack is a perfect replacement.</p>
- <pre>&gt; require "msgpack" # gem install msgpack
-&gt; msg = [1,2,3].to_msgpack #=&gt; "\x93\x01\x02\x03"
-&gt; MessagePack.unpack(msg) #=&gt; [1,2,3]</pre>
- <p>...and <a href="#crosslang">many other languages</a></p>
+ <main>
+ <section id="introduction">
+ <div id="description">
+ <h2>It's like JSON.<br />but fast and small.</h2>
+ <p>MessagePack is an efficient binary serialization format. It lets you exchange data among multiple languages like JSON. But it's faster and smaller. Small integers are encoded into a single byte, and typical short strings require only one extra byte in addition to the strings themselves.</p>
+ <!--<p>Best for memcached, and network protocol aiming for performance and loosly-coupling.</p>-->
</div>
- </div>
- </div>
-
- <div id="background">
- <div id="content">
- <h3>Happy Hackers :-)</h3>
- <div class="tmset">
- <a class="tmleft"></a>
-
- <div class="tm">
- <a class="tmlogo" href="http://redis.io/"><img src="images/redis.png" alt="Redis" width="150" height="50" /></a>
- <p class="tmtext">"Redis scripting has support for MessagePack because it is a fast and compact serialization format with a simple to implement specification. I liked it so much that I implemented a MessagePack C extension for Lua just to include it into Redis."</p>
- <p class="tmauthor">Salvatore Sanfilippo, creator of Redis.</p>
- </div>
- <div class="tm">
- <a class="tmlogo" href="http://pinterest.com/"><img src="images/pinterest.png" alt="Pinterest" width="197" height="50" /></a>
- <p class="tmtext">"MessagePack has been simply invaluable to us. We use MessagePack + Memcache to cache many of our feeds on Pinterest. These feeds are compressed and very quick to unpack thanks to MessagePack while Memcache gives us fast atomic pushes."</p>
- <p class="tmauthor">Marty Weiner, Software Engineer.</p>
- </div>
-
- <div class="tm">
- <a class="tmlogo" href="http://fluentd.org/" style="height:131px;margin-top:-66px;"><img src="images/fluentd.png" alt="Fluentd" width="240" height="122" /></a>
- <p class="tmtext">"Fluentd uses MessagePack for all internal data representation. It's crazy fast because of zero-copy optimization of msgpack-ruby. Now MessagePack is an essential component of Fluentd to achieve high performance and flexibility at the same time."</p>
- <p class="tmauthor">Sadayuki Furuhashi, creator of Fluentd.</p>
- </div>
-
- <div class="tmh">
- <a class="tmlogo" href="http://saltstack.com/"><img src="images/saltstack.png" alt="Salt Stack" width="251" height="46" /></a>
- <p class="tmtext">"I use MessagePack for all of the data serialization in Salt, it is fantastic! I tested quite a few serialization formats and MessagePack was dramatically faster and the data was always smaller. When I changed out pickles for MessagePack in Salt there was a speed increase of almost 3 fold across the board."</p>
- <p class="tmauthor">Tom Hatch, author of Salt.</p>
+ <div id="next">
+ <h3>Next:</h3>
+ <p>MessagePack has new spec! See <a href="https://gist.github.com/frsyuki/5432559">MessagePack update proposal v5</a> for the spec and migration plan.<br />See <a href="https://github.com/msgpack/msgpack/issues/128">github issue 128</a> for discussion.</p>
+ </div>
+ </section>
+
+ <section id="usecases">
+ <div id="testimonials">
+ <div class="tmset">
+ <div class="tm">
+ <a class="tmlogo" href="http://redis.io/"><img src="images/redis.png" alt="Redis" width="150" height="50" /></a>
+ <p class="tmtext">Redis scripting has support for MessagePack because it is a fast and compact serialization format with a simple to implement specification. I liked it so much that I implemented a MessagePack C extension for Lua just to include it into Redis.</p>
+ <p class="tmauthor">Salvatore Sanfilippo, creator of Redis</p>
+ </div>
+
+ <div class="tm">
+ <a class="tmlogo" href="http://fluentd.org/" style="height:131px;margin-top:-66px;"><img src="images/fluentd.png" alt="Fluentd" width="240" height="122" /></a>
+ <p class="tmtext">Fluentd uses MessagePack for all internal data representation. It's crazy fast because of zero-copy optimization of msgpack-ruby. Now MessagePack is an essential component of Fluentd to achieve high performance and flexibility at the same time.</p>
+ <p class="tmauthor">Sadayuki Furuhashi, creator of Fluentd</p>
+ </div>
+ </div>
+
+ <div class="tmset">
+ <div class="tm">
+ <a class="tmlogo" href="http://treasure-data.com/"><img src="images/treasuredata.png" alt="Treasure Data" width="272" height="54" /></a>
+ <p class="tmtext">Treasure Data built a multi-tenant database optimized for analytical queries using MessagePack. The schemaless database is growing by billions of records every month. We also use MessagePack as a glue between components. Actually we just wanted a fast replacement of JSON, and MessagePack is simply useful.</p>
+ <p class="tmauthor">Kazuki Ohta, CTO</p>
+ </div>
+
+ <div class="tm">
+ <a class="tmlogo" href="http://pinterest.com/"><img src="images/pinterest.png" alt="Pinterest" width="197" height="50" /></a>
+ <p class="tmtext">MessagePack has been simply invaluable to us. We use MessagePack + Memcache to cache many of our feeds on Pinterest. These feeds are compressed and very quick to unpack thanks to MessagePack while Memcache gives us fast atomic pushes.</p>
+ <p class="tmauthor">Marty Weiner, Software Engineer</p>
+
+ <p class="tmcontribute">Also use MessagePack? <a href="https://github.com/msgpack/website">Waiting for your testimonial!</a></p>
+ </div>
</div>
+ </div>
- <a class="tmright"></a>
+ <div id="twitter">
+ <a class="twitter-timeline" data-dnt="true" href="https://twitter.com/search?q=msgpack+OR+MessagePack" data-widget-id="343624208380735490" width="350" height="500">Tweets about "msgpack OR MessagePack"</a>
+ <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
+ <!--
+ -->
</div>
+ </section>
- <p class="tmcontribute">Also use MessagePack? <a href="https://github.com/msgpack/website">Waiting for your testimonial!</a></p>
+ <section id="usage">
+ <div id="languages">
+ <h3>Languages</h3>
- <h3 id="crosslang">Implementation projects</h3>
- <div class="qsset">
<ul class="qslist">
- <li><a onclick="changeQuickStart('qs-ruby',this)" id="quickstart-default">Ruby</a></li>
- <li><a onclick="changeQuickStart('qs-python',this)">Python</a></li>
- <li><a onclick="changeQuickStart('qs-perl',this)">Perl</a></li>
- <li><a onclick="changeQuickStart('qs-cpp',this)">C/C++</a></li>
- <li><a onclick="changeQuickStart('qs-java',this)">Java</a></li>
- <li><a onclick="changeQuickStart('qs-scala',this)">Scala</a></li>
- <li><a onclick="changeQuickStart('qs-php',this)">PHP</a></li>
- <li><a onclick="changeQuickStart('qs-lua',this)">Lua</a></li>
- <li><a onclick="changeQuickStart('qs-javascript',this)">JavaScript</a></li>
- <li><a onclick="changeQuickStart('qs-node',this)">Node.js</a></li>
- <li><a onclick="changeQuickStart('qs-haskell',this)">Haskell</a></li>
- <li><a onclick="changeQuickStart('qs-csharp',this)">C#</a></li>
- <li><a onclick="changeQuickStart('qs-objective-c',this)">Objective-C</a></li>
- <li><a onclick="changeQuickStart('qs-erlang',this)">Erlang</a></li>
- <li><a onclick="changeQuickStart('qs-d',this)">D</a></li>
- <li><a onclick="changeQuickStart('qs-ocaml',this)">OCaml</a></li>
- <li><a onclick="changeQuickStart('qs-go',this)">Go</a></li>
- <li><a onclick="changeQuickStart('qs-labview',this)">LabVIEW</a></li>
- <li><a onclick="changeQuickStart('qs-smalltalk',this)">Smalltalk</a></li>
+
</ul>
+ </div>
+ <div id="api">
+ <h3>API</h3>
+ <h4 id="language">&nbsp;</h4>
<div id="quickstart" class="qsholder"></div>
+ <p id="quickstart-guide">Add 'msgpack.org[LANG]' at the end of description of a github repository to list your code here!</p>
- <div id="qs-ruby" class="qs">
- <h4>Ruby</h4>
- <ul class="hlist">
- <li><a href="https://github.com/msgpack/msgpack-ruby">GitHub</a></li>
- <li><a href="http://ruby.msgpack.org/frames">API Reference</a></li>
- <li><a href="http://rubygems.org/gems/msgpack">RubyGems</a></li>
- </ul>
- <pre class="prettyprint">gem install msgpack</pre>
- <pre class="prettyprint">require "msgpack"
-msg = [1,2,3].to_msgpack #=&gt; "\x93\x01\x02\x03"
-MessagePack.unpack(msg) #=&gt; [1,2,3]</pre>
- <p>Ruby implementation provides <a href="http://ruby.msgpack.org/MessagePack/Unpacker.html">streaming deserializer</a>.</p>
- <ul class="linklist">
- <li><a href="https://gist.github.com/4348013">MessagePack for Ruby version 5</a></li>
- <li><a href="https://gist.github.com/4371201">MessagePack for Ruby optimized for Rubinius</a></li>
- </ul>
- </div>
-
- <div id="qs-python" class="qs">
- <h4>Python</h4>
- <ul class="hlist">
- <li><a href="http://pypi.python.org/pypi/msgpack-python/">PyPI</a></li>
- </ul>
- <pre class="prettyprint">easy_install msgpack-python</pre>
- <pre class="prettyprint">import msgpack
-msg = msgpack.packb([1,2,3]) #=&gt; "\x93\x01\x02\x03"
-msgpack.unpackb(msg) #=&gt; [1,2,3]
-help(msgpack)</pre>
- <p>Python implementation provides streaming deserializer.</p>
- </div>
-
- <div id="qs-perl" class="qs">
- <h4>Perl</h4>
- <ul class="hlist">
- <li><a href="http://search.cpan.org/~tokuhirom/Data-MessagePack/lib/Data/MessagePack.pm">API Reference</a></li>
- <li><a href="http://search.cpan.org/~tokuhirom/Data-MessagePack/">CPAN</a></li>
- </ul>
- <pre class="prettyprint">cpan Data::MessagePack</pre>
- <pre class="prettyprint">use Data::MessagePack;
-my $packed = Data::MessagePack-&gt;pack($dat);
-my $unpacked = Data::MessagePack-&gt;unpack($dat);</pre>
- <p>Perl implementation provides <a href="http://search.cpan.org/~typester/Data-MessagePack-Stream/lib/Data/MessagePack/Stream.pm">streaming deserializer</a>.</p>
- </div>
-
- <div id="qs-cpp" class="qs">
- <h4>C/C++</h4>
- <ul class="hlist">
- <li><a href="https://github.com/msgpack/msgpack-c">GitHub</a></li>
- <li><a href="http://wiki.msgpack.org/display/MSGPACK/QuickStart+for+C+Language">Quick Start for C</a></li>
- <li><a href="http://wiki.msgpack.org/pages/viewpage.action?pageId=1081387">Quick Start for C++</a></li>
- </ul>
- <pre class="prettyprint">port install msgpack # MacPorts
-brew install msgpack # Homebrew
-apt-get install libmsgpack-dev # Ubuntu</pre>
- <p>Or download <a href="http://msgpack.org/releases/cpp/msgpack-0.5.7.tar.gz">msgpack-0.5.7.tar.gz</a> and build it to install.</p>
- <pre class="prettyprint">#include &lt;msgpack.hpp&gt;
-struct myclass { std::vector<int> vec; MSGPACK_DEFINE(vec); };
-msgpack::pack(buffer, vec);
-msgpack::unpack(&amp;result, buffer.data(), buffer.size());</pre>
- </div>
-
- <div id="qs-java" class="qs">
- <h4>Java</h4>
- <ul class="hlist">
- <li><a href="http://msgpack.org/javadoc/current/">API Reference</a></li>
- <li><a href="http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22org.msgpack%22%20AND%20a%3A%22msgpack%22">Maven</a></li>
- <li><a href="https://github.com/msgpack/msgpack-java">GitHub</a></li>
- </ul>
- <pre class="prettyprint">import org.msgpack.MessagePack;
-
-MessagePack msgpack = new MessagePack();
-byte[] bytes = msgpack.write(object);
-MyClass object = msgpack.read(bytes, MyClass.class);</pre>
- <p>Java implementation provides <a href="http://msgpack.org/javadoc/current/org/msgpack/unpacker/package-summary.html">streaming deserializer</a>, <a href="http://msgpack.org/javadoc/current/org/msgpack/type/package-summary.html">dynamically typed objects</a>, <a href="http://msgpack.org/javadoc/current/org/msgpack/template/package-summary.html">type conversion templates</a>, <a href="http://msgpack.org/javadoc/current/org/msgpack/template/builder/package-summary.html">dynamic template generators</a> and <a href="http://msgpack.org/javadoc/current/org/msgpack/annotation/package-summary.html">annotations</a>.</p>
- <p>Take a look at <a href="https://github.com/msgpack/msgpack-java/tree/master/src/test/java/org/msgpack">test cases</a> for examples.</p>
- </div>
-
- <div id="qs-php" class="qs">
- <h4>PHP</h4>
- <ul class="hlist">
- <li><a href="http://wiki.msgpack.org/display/MSGPACK/QuickStart+for+PHP">Quick Start</a></li>
- </ul>
- <pre class="prettyprint">git clone https://github.com/msgpack/msgpack-php.git
-cd msgpack-php
-phpize
-./configure &amp;&amp; make &amp;&amp; make install</pre>
- <pre class="prettyprint">$data = array(0=&gt;1,1=&gt;2,2=&gt;3);
-$msg = msgpack_pack($data);
-$data = msgpack_unpack($msg);</pre>
- </div>
-
- <div id="qs-node" class="qs">
- <h4>Node.js</h4>
- <ul class="hlist">
- <li><a href="https://github.com/msgpack/msgpack-node">GitHub</a></li>
- </ul>
- <pre class="prettyprint">npm install msgpack</pre>
- <pre class="prettyprint">var msgpack = require('msgpack');
-
-var o = {"a" : 1, "b" : 2, "c" : [1, 2, 3]};
-var b = msgpack.pack(o);
-var oo = msgpack.unpack(b);</pre>
- </div>
-
- <div id="qs-javascript" class="qs">
- <h4>JavaScript</h4>
- <ul class="hlist">
- <li><a href="https://github.com/msgpack/msgpack-javascript">GitHub</a></li>
- <li><a href="https://raw.github.com/msgpack/msgpack-javascript/master/msgpack.js">msgpack.js</a></li>
- </ul>
- <pre class="prettyprint">var myByteArray = msgpack.pack(myObject);
-myObject = msgpack.unpack(myByteArray);</pre>
- <p>Licensed under MIT license.</p>
- </div>
-
- <div id="qs-objective-c" class="qs">
- <h4>Objective-C</h4>
- <ul class="hlist">
- <li><a href="https://github.com/msgpack/msgpack-objectivec">GitHub</a></li>
- </ul>
- <pre class="prettyprint">
-#import "MessagePack.h"
-..
-NSData* packed = [someArray messagePack];
-NSArray* someArray = [packed messagePackParse];
- </pre>
- </div>
-
- <div id="qs-csharp" class="qs">
- <h4>C#</h4>
- <ul class="hlist">
- <li><a href="https://github.com/msgpack/msgpack-cli">GitHub</a></li>
- <li><a href="https://github.com/yfakariya/msgpack/wiki/">Wiki</a></li>
- </ul>
- <pre class="prettyprint">using MsgPack.Serialization;</pre>
- <pre class="prettyprint">var serializer = MessagePackSerializer.Create&lt;Foo&gt;();
-serializer.Pack(foo, stream);
-stream.Position = 0;
-var value = serializer.Unpack(stream);</pre>
- <p>You can also use C#(CLI) implementation for any other CLI (Common Language Infrastructure) languages such as Visual Basic.<br />
- CLI implementation also provides streaming deserializer, some level of dynamic typing, and annotations. See <a href="https://github.com/yfakariya/msgpack/wiki/">Wiki</a> for details.</p>
- </div>
-
- <div id="qs-lua" class="qs">
- <h4>Lua</h4>
- Coming soon...
-<!--
- <ul class="hlist">
- <li><a href="https://github.com/nobu-k/mplua">GitHub</a></li>
- </ul>
-<pre class="prettyprint">require "msgpack"
-data = msgpack.pack(1, 2, 3, "strings", {"a", "r", "r", "a", "y", "s"},
- {t = "a", b = "l", e = "s"; 1, 2, 3, 4})
-a, b, c = msgpack.unpack(msgpack.pack(1, 2, 3))</pre>
--->
- </div>
-
- <div id="qs-scala" class="qs">
- <h4>Scala</h4>
- <ul class="hlist">
- <li><a href="http://wiki.msgpack.org/display/MSGPACK/QuickStart+for+Scala">Quick Start</a></li>
- </ul>
- </div>
-
- <div id="qs-d" class="qs">
- <h4>D</h4>
- <ul class="hlist">
- <li><a href="http://msgpack.org/ddoc/">API Reference</a></li>
- <li><a href="https://github.com/msgpack/msgpack-d">GitHub</a></li>
- </ul>
- <p>msgpack-d is only one file. Please add msgpack.d to your project.</p>
- <pre class="prettyprint">import msgpack;
-
-Tuple!(uint, string) receive, send = tuple(2012. "Hello D!");
-auto serialized = pack(send);
-unpack(serialized, receive);
-assert(send == recieve);</pre>
- <p>D implementation also provides streaming deserializer.</p>
- </div>
-
- <div id="qs-haskell" class="qs">
- <h4>Haskell</h4>
- <ul class="hlist">
- <li><a href="http://hackage.haskell.org/packages/archive/msgpack/0.7.1.5/doc/html/Data-MessagePack.html">API Reference</a></li>
- <li><a href="http://hackage.haskell.org/package/msgpack">hackageDB</a></li>
- <li><a href="http://wiki.msgpack.org/display/MSGPACK/QuickStart+for+Haskell">Quick Start</a></li>
- </ul>
-<pre class="prettyprint">import Data.MessagePack
-main = do
- let bs = pack (1 :: Int, 3.14 :: Double, "Hello, MessagePack!")
- print bs
- print (unpack bs :: (Int, Double, String))
-</pre>
- </div>
-
- <div id="qs-erlang" class="qs">
- <h4>Erlang</h4>
- <ul class="hlist">
- <li><a href="http://msgpack.org/edoc/">API Reference</a></li>
- <li><a href="http://github.com/msgpack/msgpack-erlang">Repository</a></li>
- </ul>
- <p>Write into your <a href="http://github.com/basho/rebar">rebar</a>.config:</p>
- <pre class="prettyprint">{deps, [
- {msgpack, ".*",
- {git, "git://github.com/msgpack/msgpack-erlang.git", "HEAD"}}
-]}.</pre>
- <pre class="prettyprint">{Spam, _} = msgpack:pack(Ham),
-Ham = msgpack:unpack(Spam).</pre>
- </div>
-
- <div id="qs-ocaml" class="qs">
- <h4>OCaml</h4>
- <pre class="prettyprint">
-$ git clone git@github.com:msgpack/msgpack-ocaml.git
-$ cd msgpack-ocaml
-$ omake
-$ omake install</pre>
- <pre class="prettyprint">
-Msgpack.Serialize.deserialize_string("\147\001\002\003");;
- </pre>
- <a href="https://github.com/msgpack/msgpack-ocaml/tree/master/proof">This library is mathematically proven!</a>
- </div>
-
- <div id="qs-smalltalk" class="qs">
- <h4>Smalltalk</h4>
- <ul class="hlist">
- <li><a href="https://github.com/msgpack/msgpack-smalltalk">GitHub</a></li>
- </ul>
- <pre class="prettyprint">
-map := Dictionary new.
-map at: 'someArray' asByteArray put: #(1 2.2 #[3 4 5]).
-packed := map messagePacked.
-(Object fromMessagePack: packed) inspect.
- </pre>
- </div>
-
- <div id="qs-go" class="qs">
- <h4>Go</h4>
- Coming soon...
- </div>
-
- <div id="qs-labview" class="qs">
- <h4>LabVIEW</h4>
- <ul class="hlist">
- <li><a href="http://msgpack-labview.sf.net">SourceForge</a></li>
- </ul>
- Installable through the VI Package Manager using one of the compiled versions on the
- <a href="https://sourceforge.net/projects/msgpack-labview/files/">downloads page</a>
- </div>
</div>
-
+ </section>
+
+ <section id="related">
<h3>Related projects</h3>
+
<div class="paragraphs">
<h4><a href="https://github.com/dotcloud/zerorpc-python">ZeroRPC</a> by DotCloud</h4>
<p>zerorpc is a flexible RPC implementation based on zeromq and messagepack. Service APIs exposed with zerorpc are called "zeroservices".</p>
<h4><a href="https://github.com/pfi/pficommon">pficommon</a> by Preferred Infrastructure, Inc.</h4>
<p>General purpose C++ library for Preferred Infrastructure, Inc. It includes MessagePack-RPC implementation for C++</p>
-
- <!--
- <h4><a href="http://wiki.msgpack.org/display/MSGPACK/QuickStart+for+Ruby#QuickStartforRuby-RPCQuickStartforRuby">MessagePack-RPC for Ruby</a></h4>
- <p>MessagePack-RPC implementation for Ruby</p>
-
- <h4><a href="http://wiki.msgpack.org/display/MSGPACK/QuickStart+for+Java#QuickStartforJava-MessagePackRPCforJava">MessagePack-RPC for Java</a></h4>
- <p>MessagePack-RPC implementation for Java</p>
-
- <h4><a href="https://github.com/msgpack/msgpack-rpc/tree/master/haskell">MessagePack-RPC for Haskell</a></h4>
- <p>MessagePack-RPC implementation for Haskell</p>
-
- <h4><a href="https://github.com/msgpack/msgpack-rpc-python">MessagePack-RPC for Python</a></h4>
- <p>MessagePack-RPC implementation for Python</p>
- -->
</div>
- </div>
- </div>
- <footer id="footer">
- <div id="footerbody" class="paragraphs">
- <div id="social">
- <!--
- <iframe src="http://markdotto.github.com/github-buttons/github-btn.html?user=msgpack&type=follow"
- allowtransparency="true" frameborder="0" scrolling="0" width="132px" height="20px"></iframe>
- -->
-
- <a href="https://twitter.com/share" class="twitter-share-button" data-hashtags="msgpack">Tweet</a>
- <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
-
- <div class="fb-like" data-href="http://msgpack.org/" data-send="false" data-layout="button_count" data-width="120" data-show-faces="false"></div>
- </div>
+ </section>
+ </main>
+ <footer>
+ <div>
<div id="thanks">
- <p id="sponsor"><a href="http://treasure-data.com/?source=mp">Sponsored by Treasure Data, Inc. <img src="images/td-icon.png" width="20" height="20" /></a></p>
- <p>Copyright &copy; 2008-2012 FURUHASHI Sadayuki</p>
+ <p>MessagePack &trade; Copyright &copy; 2008-2013 Sadayuki Furuhashi</p>
</div>
</div>
</footer>
</body>
-</html>
View
133 index.html.erb
@@ -0,0 +1,133 @@
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <meta name="keywords" content="MessagePack, msgpack, JSON, Binary JSON, Serializer, Serialization" />
+ <link href='favicon.ico' rel='icon' type='image/x-icon'/>
+
+ <title>MessagePack: It's like JSON. but fast and small.</title>
+
+ <!--[if lt IE 9]><script type="text/javascript" src="http://html5shim.googlecode.com/svn/trunk/html5.js" ></script><![endif]-->
+ <link media="all" rel="stylesheet" type="text/css" href="css/yuibase.css" />
+ <link media="all" rel="stylesheet" type="text/css" href="js/prettify/prettify.css" />
+ <link media="all" rel="stylesheet" type="text/css" href="css/all.css" />
+ <link href='http://fonts.googleapis.com/css?family=Titillium+Web:400,200' rel='stylesheet' type='text/css'>
+ <script type="text/javascript" src="js/all.js" ></script>
+ <script type="text/javascript" src="js/prettify/prettify.js" ></script>
+</head>
+<body onload="prettyPrint();changeQuickStart(document.getElementsByClassName('qs')[0].id,document.getElementsByClassName('qs-a')[0])">
+ <header>
+ <div>
+ <h1><a href="/">MessagePack</a></h1>
+ <nav id="topnav">
+ <ul>
+ <li><a href="https://github.com/msgpack">GitHub</a></li>
+ <li><a href="http://wiki.msgpack.org/display/MSGPACK/Format+specification">Spec</a></li>
+ <li><a href="http://twitter.com/search/MessagePack%20OR%20msgpack">#msgpack</a></li>
+ </ul>
+ </nav>
+ </div>
+ </header>
+
+ <main>
+ <section id="introduction">
+ <div id="description">
+ <h2>It's like JSON.<br />but fast and small.</h2>
+ <p>MessagePack is an efficient binary serialization format. It lets you exchange data among multiple languages like JSON. But it's faster and smaller. Small integers are encoded into a single byte, and typical short strings require only one extra byte in addition to the strings themselves.</p>
+ <!--<p>Best for memcached, and network protocol aiming for performance and loosly-coupling.</p>-->
+ </div>
+
+ <div id="next">
+ <h3>Next:</h3>
+ <p>MessagePack has new spec! See <a href="https://gist.github.com/frsyuki/5432559">MessagePack update proposal v5</a> for the spec and migration plan.<br />See <a href="https://github.com/msgpack/msgpack/issues/128">github issue 128</a> for discussion.</p>
+ </div>
+ </section>
+
+ <section id="usecases">
+ <div id="testimonials">
+ <div class="tmset">
+ <div class="tm">
+ <a class="tmlogo" href="http://redis.io/"><img src="images/redis.png" alt="Redis" width="150" height="50" /></a>
+ <p class="tmtext">Redis scripting has support for MessagePack because it is a fast and compact serialization format with a simple to implement specification. I liked it so much that I implemented a MessagePack C extension for Lua just to include it into Redis.</p>
+ <p class="tmauthor">Salvatore Sanfilippo, creator of Redis</p>
+ </div>
+
+ <div class="tm">
+ <a class="tmlogo" href="http://fluentd.org/" style="height:131px;margin-top:-66px;"><img src="images/fluentd.png" alt="Fluentd" width="240" height="122" /></a>
+ <p class="tmtext">Fluentd uses MessagePack for all internal data representation. It's crazy fast because of zero-copy optimization of msgpack-ruby. Now MessagePack is an essential component of Fluentd to achieve high performance and flexibility at the same time.</p>
+ <p class="tmauthor">Sadayuki Furuhashi, creator of Fluentd</p>
+ </div>
+ </div>
+
+ <div class="tmset">
+ <div class="tm">
+ <a class="tmlogo" href="http://treasure-data.com/"><img src="images/treasuredata.png" alt="Treasure Data" width="272" height="54" /></a>
+ <p class="tmtext">Treasure Data built a multi-tenant database optimized for analytical queries using MessagePack. The schemaless database is growing by billions of records every month. We also use MessagePack as a glue between components. Actually we just wanted a fast replacement of JSON, and MessagePack is simply useful.</p>
+ <p class="tmauthor">Kazuki Ohta, CTO</p>
+ </div>
+
+ <div class="tm">
+ <a class="tmlogo" href="http://pinterest.com/"><img src="images/pinterest.png" alt="Pinterest" width="197" height="50" /></a>
+ <p class="tmtext">MessagePack has been simply invaluable to us. We use MessagePack + Memcache to cache many of our feeds on Pinterest. These feeds are compressed and very quick to unpack thanks to MessagePack while Memcache gives us fast atomic pushes.</p>
+ <p class="tmauthor">Marty Weiner, Software Engineer</p>
+
+ <p class="tmcontribute">Also use MessagePack? <a href="https://github.com/msgpack/website">Waiting for your testimonial!</a></p>
+ </div>
+ </div>
+ </div>
+
+ <div id="twitter">
+ <a class="twitter-timeline" data-dnt="true" href="https://twitter.com/search?q=msgpack+OR+MessagePack" data-widget-id="343624208380735490" width="350" height="500">Tweets about "msgpack OR MessagePack"</a>
+ <script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
+ <!--
+ -->
+ </div>
+ </section>
+
+ <section id="usage">
+ <div id="languages">
+ <h3>Languages</h3>
+
+ <ul class="qslist">
+ <% @repos.each do |repo| %>
+ <li><a class="qs-a" onclick="changeQuickStart('qs-<%= repo['id'] %>',this)"><%= repo['lang'] %> <span class="qs-sub"><%= repo['owner'] %></span></a></li>
+ <% end %>
+ </ul>
+ </div>
+
+ <div id="api">
+ <h3>API</h3>
+ <h4 id="language">&nbsp;</h4>
+ <div id="quickstart" class="qsholder"></div>
+ <p id="quickstart-guide">Add 'msgpack.org[LANG]' at the end of description of a github repository to list your code here!</p>
+
+ <% @repos.each_with_index do |repo,i| %>
+ <div id="qs-<%= repo['id'] %>" class="qs"><h4><a href="<%= repo['url'] %>" target="_blank"><%= repo['owner'] %>/<%= repo['name'] %> <span class="qs-url"><%= repo['url'] %></a></li></h4>
+<%= repo['quickstart_html'] %>
+ </div>
+ <% end %>
+ </div>
+ </section>
+
+ <section id="related">
+ <h3>Related projects</h3>
+
+ <div class="paragraphs">
+ <h4><a href="https://github.com/dotcloud/zerorpc-python">ZeroRPC</a> by DotCloud</h4>
+ <p>zerorpc is a flexible RPC implementation based on zeromq and messagepack. Service APIs exposed with zerorpc are called "zeroservices".</p>
+
+ <h4><a href="https://github.com/pfi/pficommon">pficommon</a> by Preferred Infrastructure, Inc.</h4>
+ <p>General purpose C++ library for Preferred Infrastructure, Inc. It includes MessagePack-RPC implementation for C++</p>
+ </div>
+
+ </section>
+ </main>
+
+ <footer>
+ <div>
+ <div id="thanks">
+ <p>MessagePack &trade; Copyright &copy; 2008-2013 Sadayuki Furuhashi</p>
+ </div>
+ </div>
+ </footer>
+</body>
View
19 js/all.js
@@ -1,20 +1,29 @@
-function changeQuickStart(name, selected) {
+function changeQuickStart(targetId, selected) {
var holder = document.getElementById("quickstart");
- var target = document.getElementById(name);
+ var title = document.getElementById("language");
+ var target = document.getElementById(targetId);
+
if(target == null) {
return false;
}
- /* remove all elements from the holder */
+ /* remove all elements from the holder and title */
var lastChild;
while((lastChild = holder.lastChild) != null) {
holder.removeChild(lastChild);
}
+ while((lastChild = title.lastChild) != null) {
+ title.removeChild(lastChild);
+ }
- /* copy all elements from the target to the holder */
var children = target.childNodes;
var childrenLength = children.length;
- for(var i=0; i < childrenLength; i++) {
+
+ /* copy first element from target to title */
+ title.appendChild(children[0].cloneNode(true));
+
+ /* copy remaining elements from target to holder */
+ for(var i=1; i < childrenLength; i++) {
holder.appendChild(children[i].cloneNode(true));
}
View
99 update-index.rb
@@ -0,0 +1,99 @@
+require 'rest-client'
+require 'json'
+require 'cgi'
+require 'time'
+require 'nokogiri'
+#require 'github/markup'
+require 'erb'
+
+here = File.dirname(__FILE__)
+
+REPO_DESC_MATCH = /msgpack\.org\[([^\]]+)\]/
+
+DOC_FILES = %w[msgpack.org.md README.md README.rdoc README.rst README]
+
+def github_search(keyword, &callback)
+ url = "https://api.github.com/legacy/repos/search/#{CGI.escape(keyword)}"
+ page = 1
+ while true
+ js = RestClient.get(url, :params=>{'start_page'=>page})
+ repos = JSON.parse(js)['repositories']
+ break if repos.empty?
+ repos.each(&callback)
+ page += 1
+ end
+end
+
+def get_quickstart_html(repo_url)
+ DOC_FILES.each {|fname|
+ begin
+ if fname.include?('.')
+ data = RestClient.get("#{repo_url}/blob/master/#{fname}")
+ html = Nokogiri::HTML(data).css('.file')[0].xpath('div').last.to_s
+ else
+ raw_url = repo_url.sub('github.com', 'raw.github.com')
+ data = RestClient.get("#{raw_url}/master/#{fname}")
+ html = "<pre>#{CGI.escape_html(data)}</pre>"
+ end
+
+ return html, fname
+ rescue RestClient::ResourceNotFound
+ # do nothing
+ rescue
+ STDERR.puts $!
+ end
+ }
+
+ return nil
+end
+
+def tweak_quickstart_html(html)
+ html.gsub!(/<(\/?)h4/, "<\\1h8")
+ html.gsub!(/<(\/?)h3/, "<\\1h7")
+ html.gsub!(/<(\/?)h2/, "<\\1h6")
+ html.gsub!(/<(\/?)h1/, "<\\1h5")
+ html
+end
+
+Repo = Struct.new(:url, :homepage, :created_at, :html)
+
+repos = []
+
+github_search('msgpack.org') do |repo|
+ # description needs to include msgpack[LANG]
+ m = REPO_DESC_MATCH.match(repo['description'])
+ next unless m
+ repo['lang'] = CGI.escape_html(m[1])
+
+ # skip forked repos
+ next if repo['fork']
+
+ url = repo['url']
+
+ homepage = repo['homepage']
+ homepage = nil if homepage == url
+ homepage = nil if homepage =~ /\Ahttp\:\/\/msgpack.org\/?/
+ repo['homepage'] = homepage
+
+ html, fname = get_quickstart_html(url)
+ next unless html
+
+ html = tweak_quickstart_html(html)
+ repo['quickstart_html'] = html
+ repo['quickstart_fname'] = fname
+
+ repo['id'] = "#{repo['owner']}-#{repo['name']}".gsub(/[^a-zA-Z0-9_\-]+/,'-')
+
+ repos << repo
+end
+
+@repos = repos.sort_by {|repo| Time.parse(repo['created_at']) }
+
+html = ERB.new(File.read("#{here}/index.html.erb")).result
+
+orig = File.read("#{here}/index.html")
+
+if orig != html
+ File.open("#{here}/index.html", 'w') {|f| f.write html }
+end
+
Please sign in to comment.
Something went wrong with that request. Please try again.