{"id":16696988,"url":"https://github.com/seratch/typesafe-dev-contest-entry","last_synced_at":"2025-10-30T04:20:43.287Z","repository":{"id":5604926,"uuid":"6812060","full_name":"seratch/typesafe-dev-contest-entry","owner":"seratch","description":"Typesafe Developer Contest Entry (2012/10 - 2012/11)","archived":false,"fork":false,"pushed_at":"2012-11-23T03:26:33.000Z","size":275,"stargazers_count":2,"open_issues_count":0,"forks_count":2,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-14T03:12:13.856Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/seratch.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2012-11-22T11:24:36.000Z","updated_at":"2014-08-09T02:24:47.000Z","dependencies_parsed_at":"2022-07-07T07:33:22.664Z","dependency_job_id":null,"html_url":"https://github.com/seratch/typesafe-dev-contest-entry","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/seratch/typesafe-dev-contest-entry","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seratch%2Ftypesafe-dev-contest-entry","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seratch%2Ftypesafe-dev-contest-entry/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seratch%2Ftypesafe-dev-contest-entry/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seratch%2Ftypesafe-dev-contest-entry/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/seratch","download_url":"https://codeload.github.com/seratch/typesafe-dev-contest-entry/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/seratch%2Ftypesafe-dev-contest-entry/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":281743369,"owners_count":26553870,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-30T02:00:06.501Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-12T17:45:39.819Z","updated_at":"2025-10-30T04:20:43.249Z","avatar_url":"https://github.com/seratch.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"Typesafe Developer Contest 2012 Entry\n=====================================\n\nhttp://typesafe.com/resources/developer-contest\n\nWhat’s this\n-----------\n\nI was going to create a high performance HTTP API server using Typesafe Stack. But I became more interested in performance measurement. This is a simple benchmark for Typesafe Stack app and others that have the same function. I’m afraid that this entry is not suitable on the theme of the contest, but I believe it doesn’t entirely devoid of interest. Anyway, please have a look.\n\nURLs\n----\n\nThe application has just 2 URLs as follows.\n\nPOST /logs {name: “accesslog”, line: “xxx”}\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nAccepting POST requests, saving params into MySQL and finally returning\n200 OK.\n\nPOST /logs/async {name: “accesslog”, line: “xxx”}\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nAccepting POST requests and returning 202 Accepted. Saving params into\nMySQL will be executed asynchronously.\n\nFrameworks and app servers\n--------------------------\n\nTypesafe Stack (Play 2.0.4 + Akka 2.0.2) + MySQL 5.5.24 + Play server 2.0.4\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n::\n\n    curl -XPOST http://localhost:9000/logs -d'name=access_log\u0026line=xxx'\n    curl -XPOST http://localhost:9000/logs/async -d'name=access_log\u0026line=xxx'\n\nJAX-RS (Jersey 1.13 + Spring 3.1.2.RELEASE) + MySQL 5.5.24 + Jetty 6.1.26\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n::\n\n    curl -XPOST http://localhost:8080/logs -d'name=access_log\u0026line=xxx'\n    curl -XPOST http://localhost:8080/logs/async -d'name=access_log\u0026line=xxx'\n\nRuby on Rails 3.2.9 + MySQL 5.5.24 + Passenger 3.0.18\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n::\n\n    curl -XPOST http://localhost:3000/logs -d'name=access_log\u0026line=xxx'\n    curl -XPOST http://localhost:3000/logs/async -d'name=access_log\u0026line=xxx'\n\nExpress 3.0.3 + MySQL 5.5.24 + Node 0.8.0\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n::\n\n    curl -XPOST http://localhost:8124/logs -d'name=access_log\u0026line=xxx'\n    curl -XPOST http://localhost:8124/logs/async -d'name=access_log\u0026line=xxx'\n\nPrecondition\n------------\n\nApache Bench\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nIf you’re using Mac OS X, please replace ``ab`` command as follows.\n\n::\n\n    wget http://apache.mirrors.pair.com/httpd/httpd-2.4.3.tar.bz2\n    brew install pcre\n    tar xzvf httpd-2.4.3.tar.bz2\n    cd httpd-2.4.3\n    make\n    sudo cp -p support/ab /usr/sbin/ab\n\ngnuplot\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n::\n\n    brew install gnuplot\n\nMySQL 5.5.x\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n::\n\n    brew install mysql\n\n::\n\n    create database typesafedevcontest;\n    grant all on typesafedevcontest.* to martin@localhost;\n    set password for martin@localhost = password('odersky');\n\nRuby 1.9.3\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nRVM or rbenv\n\nMaven 2.x or 3.x\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n::\n\n    brew install maven\n\nNode.js 0.8.x\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n::\n\n    brew install node\n\nStarting applications\n--------------------------\n\nRails 3.2 on Passenger 3.0\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n::\n\n    cd Rails\n    bundle install\n    rake db:migrate RAILS_ENV=production\n    rake assets:clean assets:precompile\n    passenger start -e production -d\n\nJAX-RS on Jetty 6.1\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n::\n\n    cd JAX-RS\n    mvn clean jetty:run\n\nExpress on Node 0.8\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n::\n\n    cd Express\n    npm install\n    node server.js\n\nPlay 2.0 on Play server\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n::\n\n    cd TypesafeStack\n    play start\n\nRunning benchmark scripts\n-------------------------\n\n::\n\n    ./benchmark_c20.sh\n\n::\n\n    ./benchmark_c50.sh\n\nResults\n-------\n\n-  Play 2.0 is much faster than Rails and Express.\n-  JAX-RS Jersey is stable and pretty fast.\n-  Play 2.0 which uses Akka actors as backend is the fastest of them all.\n\nConcurrency 20\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n.. figure:: https://raw.github.com/seratch/typesafe-dev-contest-entry/master/gnuplot/c20.png\n   :align: center\n   :alt: c20\n\nConcurrency 50\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n.. figure:: https://raw.github.com/seratch/typesafe-dev-contest-entry/master/gnuplot/c50.png\n   :align: center\n   :alt: c50\n\nLicense\n-------\n\nApache License, Version 2.0\n\nhttp://www.apache.org/licenses/LICENSE-2.0.html\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fseratch%2Ftypesafe-dev-contest-entry","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fseratch%2Ftypesafe-dev-contest-entry","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fseratch%2Ftypesafe-dev-contest-entry/lists"}