Browse Source

Merge remote-tracking branch 'origin/master'

Aliaksandr Valialkin 9 years ago
parent
commit
bf1a8454e6
100 changed files with 939 additions and 79 deletions
  1. 20 11
      .travis.yml
  2. 31 31
      config/benchmark_profile
  3. 4 0
      config/travis_mysql_setup.sh
  4. 151 0
      config/travis_setup.sh
  5. 6 6
      frameworks/C++/ulib/README.md
  6. 0 0
      frameworks/C++/ulib/benchmark_config.json
  7. 0 0
      frameworks/C++/ulib/setup_json.sh
  8. 0 0
      frameworks/C++/ulib/setup_mysql.sh
  9. 0 0
      frameworks/C++/ulib/setup_plaintext.sh
  10. 0 0
      frameworks/C++/ulib/setup_postgres.sh
  11. 0 0
      frameworks/C++/ulib/setup_redis.sh
  12. 0 0
      frameworks/C++/ulib/setup_sqlite.sh
  13. 0 0
      frameworks/C++/ulib/source_code
  14. 1 1
      frameworks/C++/ulib/src/db.usp
  15. 0 0
      frameworks/C++/ulib/src/fortune.h
  16. 0 0
      frameworks/C++/ulib/src/fortune.usp
  17. 1 1
      frameworks/C++/ulib/src/json.usp
  18. 0 0
      frameworks/C++/ulib/src/plaintext.usp
  19. 1 1
      frameworks/C++/ulib/src/query.usp
  20. 1 1
      frameworks/C++/ulib/src/rdb.usp
  21. 0 0
      frameworks/C++/ulib/src/rfortune.usp
  22. 1 1
      frameworks/C++/ulib/src/rquery.usp
  23. 1 1
      frameworks/C++/ulib/src/rupdate.usp
  24. 1 1
      frameworks/C++/ulib/src/update.usp
  25. 0 0
      frameworks/C++/ulib/src/world.h
  26. 4 0
      frameworks/Erlang/chicagoboss/.gitignore
  27. 23 0
      frameworks/Erlang/chicagoboss/benchmark_config.json
  28. 320 0
      frameworks/Erlang/chicagoboss/boss.config
  29. 28 0
      frameworks/Erlang/chicagoboss/priv/chicagoboss.routes
  30. 97 0
      frameworks/Erlang/chicagoboss/priv/init/chicagoboss_01_news.erl
  31. 191 0
      frameworks/Erlang/chicagoboss/priv/rebar/boss_plugin.erl
  32. 7 0
      frameworks/Erlang/chicagoboss/rebar.config
  33. 11 0
      frameworks/Erlang/chicagoboss/setup.sh
  34. 8 0
      frameworks/Erlang/chicagoboss/src/chicagoboss.app.src
  35. 8 0
      frameworks/Erlang/chicagoboss/src/controller/chicagoboss_world_controller.erl
  36. 8 0
      frameworks/Erlang/chicagoboss/src/mail/chicagoboss_incoming_mail_controller.erl
  37. 12 0
      frameworks/Erlang/chicagoboss/src/mail/chicagoboss_outgoing_mail_controller.erl
  38. 2 3
      frameworks/Java/gemini/start_postgres.sh
  39. 0 20
      frameworks/PHP/cygnite-php-framework/apps/controllers/BenchController.php
  40. 1 1
      frameworks/PHP/cygnite-php-framework/composer.json
  41. 0 0
      frameworks/PHP/yii2/.gitignore
  42. 0 0
      frameworks/PHP/yii2/README.md
  43. 0 0
      frameworks/PHP/yii2/app/controllers/SiteController.php
  44. 0 0
      frameworks/PHP/yii2/app/index.php
  45. 0 0
      frameworks/PHP/yii2/app/runtime/keys.json
  46. 0 0
      frameworks/PHP/yii2/benchmark_config.json
  47. 0 0
      frameworks/PHP/yii2/composer.json
  48. 0 0
      frameworks/PHP/yii2/composer.lock
  49. 0 0
      frameworks/PHP/yii2/deploy/config.hdf
  50. 0 0
      frameworks/PHP/yii2/deploy/nginx.conf
  51. 0 0
      frameworks/PHP/yii2/hhvm.pid
  52. 0 0
      frameworks/PHP/yii2/setup.sh
  53. 0 0
      frameworks/PHP/yii2/setup_hhvm.sh
  54. 0 0
      frameworks/Python/asyncio/README.md
  55. 0 0
      frameworks/Python/asyncio/aiohttp.web/.gitignore
  56. 0 0
      frameworks/Python/asyncio/aiohttp.web/LICENSE
  57. 0 0
      frameworks/Python/asyncio/aiohttp.web/README.rst
  58. 0 0
      frameworks/Python/asyncio/aiohttp.web/etc/default/hello
  59. 0 0
      frameworks/Python/asyncio/aiohttp.web/etc/hello/api_hour/gunicorn_conf.py
  60. 0 0
      frameworks/Python/asyncio/aiohttp.web/etc/hello/api_hour/logging.ini
  61. 0 0
      frameworks/Python/asyncio/aiohttp.web/etc/hello/main/main.yaml
  62. 0 0
      frameworks/Python/asyncio/aiohttp.web/etc/init.d/hello
  63. 0 0
      frameworks/Python/asyncio/aiohttp.web/etc/logrotate.d/hello
  64. 0 0
      frameworks/Python/asyncio/aiohttp.web/etc/monit/conf.d/hello
  65. 0 0
      frameworks/Python/asyncio/aiohttp.web/etc/rsyslog.conf
  66. 0 0
      frameworks/Python/asyncio/aiohttp.web/hello/__init__.py
  67. 0 0
      frameworks/Python/asyncio/aiohttp.web/hello/endpoints/__init__.py
  68. 0 0
      frameworks/Python/asyncio/aiohttp.web/hello/endpoints/world.py
  69. 0 0
      frameworks/Python/asyncio/aiohttp.web/hello/services/__init__.py
  70. 0 0
      frameworks/Python/asyncio/aiohttp.web/hello/services/redis.py
  71. 0 0
      frameworks/Python/asyncio/aiohttp.web/hello/services/world.py
  72. 0 0
      frameworks/Python/asyncio/aiohttp.web/hello/templates/fortunes.html.j2
  73. 0 0
      frameworks/Python/asyncio/aiohttp.web/hello/utils/__init__.py
  74. 0 0
      frameworks/Python/asyncio/aiohttp.web/setup.sh
  75. 0 0
      frameworks/Python/asyncio/aiohttp.web/source_code
  76. 0 0
      frameworks/Python/asyncio/benchmark_config.json
  77. 0 0
      frameworks/Python/asyncio/requirements.txt
  78. 0 0
      frameworks/Python/asyncio/yocto_http/.gitignore
  79. 0 0
      frameworks/Python/asyncio/yocto_http/LICENSE
  80. 0 0
      frameworks/Python/asyncio/yocto_http/README.rst
  81. 0 0
      frameworks/Python/asyncio/yocto_http/etc/default/hello
  82. 0 0
      frameworks/Python/asyncio/yocto_http/etc/hello/api_hour/gunicorn_conf.py
  83. 0 0
      frameworks/Python/asyncio/yocto_http/etc/hello/api_hour/logging.ini
  84. 0 0
      frameworks/Python/asyncio/yocto_http/etc/hello/main/main.yaml
  85. 0 0
      frameworks/Python/asyncio/yocto_http/etc/init.d/hello
  86. 0 0
      frameworks/Python/asyncio/yocto_http/etc/logrotate.d/hello
  87. 0 0
      frameworks/Python/asyncio/yocto_http/etc/monit/conf.d/hello
  88. 0 0
      frameworks/Python/asyncio/yocto_http/etc/rsyslog.conf
  89. 0 0
      frameworks/Python/asyncio/yocto_http/hello/__init__.py
  90. 0 0
      frameworks/Python/asyncio/yocto_http/hello/endpoints/__init__.py
  91. 0 0
      frameworks/Python/asyncio/yocto_http/hello/endpoints/world.py
  92. 0 0
      frameworks/Python/asyncio/yocto_http/hello/servers/__init__.py
  93. 0 0
      frameworks/Python/asyncio/yocto_http/hello/servers/yocto_http.py
  94. 0 0
      frameworks/Python/asyncio/yocto_http/hello/services/__init__.py
  95. 0 0
      frameworks/Python/asyncio/yocto_http/hello/services/redis.py
  96. 0 0
      frameworks/Python/asyncio/yocto_http/hello/services/world.py
  97. 0 0
      frameworks/Python/asyncio/yocto_http/hello/templates/fortunes.html.j2
  98. 0 0
      frameworks/Python/asyncio/yocto_http/hello/utils/__init__.py
  99. 0 0
      frameworks/Python/asyncio/yocto_http/hello/utils/yocto_http/__init__.py
  100. 0 0
      frameworks/Python/asyncio/yocto_http/hello/utils/yocto_http/application.py

+ 20 - 11
.travis.yml

@@ -6,14 +6,14 @@ python:
 
 env:
   matrix:
-    # Group tests by directory to logically break up travis-CI build. Otherwise
-    # we end up starting ~200+ different workers. Seems that ~100 is the limit
-    # before their website starts to lag heavily
+    #Group tests by directory to logically break up travis-CI build. Otherwise
+    #we end up starting ~200+ different workers. Seems that ~100 is the limit
+    #before their website starts to lag heavily
     #
-    # Here's the bash if you need to update this. Be sure to maintain the
-    # lines that are currently commented out (these cannot run in Travis)
-    #   cd frameworks
-    #   find . -type d -depth 2 | sed 's|./|    - "TESTDIR=|' | sed 's/$/"/g'
+    #Here's the bash if you need to update this. Be sure to maintain the
+    #lines that are currently commented out (these cannot run in Travis)
+    #  cd frameworks
+    #  find . -type d -depth 2 | sed 's|./|    - "TESTDIR=|' | sed 's/$/"/g'
     #
     #
     - "TESTDIR=C/lwan"
@@ -45,6 +45,7 @@ env:
     - "TESTDIR=Dart/stream"
     - "TESTDIR=Elixir/phoenix"
     - "TESTDIR=Elixir/cowboy"
+    - "TESTDIR=Erlang/chicagoboss"
     - "TESTDIR=Erlang/cowboy"
     - "TESTDIR=Erlang/elli"
     - "TESTDIR=Go/beego"
@@ -158,6 +159,7 @@ env:
     - "TESTDIR=Ruby/rails"
     - "TESTDIR=Ruby/rails-stripped"
     - "TESTDIR=Ruby/sinatra"
+    - "TESTDIR=Ruby/sinatra-sequel"
     - "TESTDIR=Rust/iron"
     - "TESTDIR=Rust/nickel"
     - "TESTDIR=Rust/hyper"
@@ -182,14 +184,21 @@ before_install:
   # but it requires —-allow-external and -—allow-unverified
   - pip install progressbar==2.2
   - pip install requests
+  - echo "127.0.0.1 " `hostname` | sudo tee /etc/hosts
+  - echo "127.0.0.1 localhost" | sudo tee /etc/hosts
 
-install:
-  # Configure Travis-CI build environment for TFB
-  #   e.g. setup databases, users, etc
-  - ./toolset/run-ci.py cisetup "$TESTDIR"
+services:
+  - postgresql
 
 addons:
   postgresql: "9.3"
+  apt:
+    packages:
+      - mysql-server
+
+before_script:
+  - sudo ./config/travis_mysql_setup.sh
+  - mysql -uroot < config/create.sql
 
 script:
   # Pick one test in this directory and verify

+ 31 - 31
config/benchmark_profile

@@ -17,34 +17,34 @@ export TFB_DISTRIB_RELEASE=$DISTRIB_RELEASE
 export TFB_DISTRIB_CODENAME=$DISTRIB_CODENAME
 export TFB_DISTRIB_DESCRIPTION=$DISTRIB_DESCRIPTION
 
-
-export RESIN_HOME=${IROOT}/resin-4.0.41
-export GRAILS_HOME=${IROOT}/grails-2.4.4
-export VERTX_HOME=${IROOT}/vert.x-2.1.1
-export TOMCAT_HOME=${IROOT}/apache-tomcat-7.0.35
-export NODE_HOME=${IROOT}/node-v0.10.8-linux-x64
-export PLAY_HOME=${IROOT}/play-2.2.0
-export PLAY1_HOME=${IROOT}/play-1.2.5
-export MAVEN_HOME=${IROOT}/apache-maven-3.0.5
-export SBT_HOME=${IROOT}/sbt
-export PERL_HOME=${IROOT}/perl-5.18
-export DART_HOME=${IROOT}/dart-sdk
-export RACKET_HOME=${IROOT}/racket-5.3.6
-export NIMROD_HOME=${IROOT}/nimrod
-export NGINX_HOME=/usr/local/nginx
-export ELIXIR_HOME=${IROOT}/elixir-0.13.3
-
-export PATH="$JAVA_HOME/bin:$GRAILS_HOME/bin:$PLAY_HOME:$PLAY1_HOME:$VERTX_HOME/bin:$GOROOT/bin:$NODE_HOME/bin:$HOME/FrameworkBenchmarks/installs/bin:$MAVEN_HOME/bin:$SBT_HOME/bin:$PERL_HOME/bin:$DART_HOME/bin:$RACKET_HOME/bin:$NIMROD_HOME/bin:$NGINX_HOME/sbin:$ELIXIR_HOME/bin:$PATH"
-
-export LD_LIBRARY_PATH='$LD_LIBRARY_PATH:/usr/local/apr/lib'
-
-export TFB_SERVER_HOST='127.0.0.1'
-export TFB_CLIENT_HOST='127.0.0.1'
-export TFB_CLIENT_USER='tfb'
-export TFB_CLIENT_IDENTITY_FILE='/home/tfb/.ssh/id_rsa'
-export TFB_DATABASE_HOST='127.0.0.1'
-
-[ -e ~/.rvm ] && . ~/.rvm/scripts/'rvm'
-export LC_ALL='en_US.UTF-8'
-export NUMCPUS=`grep -c '^processor' /proc/cpuinfo`
-export MAKEFLAGS="-j $NUMCPUS -l $NUMCPUS"
+#
+#export RESIN_HOME=${IROOT}/resin-4.0.41
+#export GRAILS_HOME=${IROOT}/grails-2.4.4
+#export VERTX_HOME=${IROOT}/vert.x-2.1.1
+#export TOMCAT_HOME=${IROOT}/apache-tomcat-7.0.35
+#export NODE_HOME=${IROOT}/node-v0.10.8-linux-x64
+#export PLAY_HOME=${IROOT}/play-2.2.0
+#export PLAY1_HOME=${IROOT}/play-1.2.5
+#export MAVEN_HOME=${IROOT}/apache-maven-3.0.5
+#export SBT_HOME=${IROOT}/sbt
+#export PERL_HOME=${IROOT}/perl-5.18
+#export DART_HOME=${IROOT}/dart-sdk
+#export RACKET_HOME=${IROOT}/racket-5.3.6
+#export NIMROD_HOME=${IROOT}/nimrod
+#export NGINX_HOME=/usr/local/nginx
+#export ELIXIR_HOME=${IROOT}/elixir-0.13.3
+#
+#export PATH="$JAVA_HOME/bin:$GRAILS_HOME/bin:$PLAY_HOME:$PLAY1_HOME:$VERTX_HOME/bin:$GOROOT/bin:$NODE_HOME/bin:$HOME/FrameworkBenchmarks/installs/bin:$MAVEN_HOME/bin:$SBT_HOME/bin:$PERL_HOME/bin:$DART_HOME/bin:$RACKET_HOME/bin:$NIMROD_HOME/bin:$NGINX_HOME/sbin:$ELIXIR_HOME/bin:$PATH"
+#
+#export LD_LIBRARY_PATH='$LD_LIBRARY_PATH:/usr/local/apr/lib'
+#
+#export TFB_SERVER_HOST='127.0.0.1'
+#export TFB_CLIENT_HOST='127.0.0.1'
+#export TFB_CLIENT_USER='tfb'
+#export TFB_CLIENT_IDENTITY_FILE='/home/tfb/.ssh/id_rsa'
+#export TFB_DATABASE_HOST='127.0.0.1'
+#
+#[ -e ~/.rvm ] && . ~/.rvm/scripts/'rvm'
+#export LC_ALL='en_US.UTF-8'
+#export NUMCPUS=`grep -c '^processor' /proc/cpuinfo`
+#export MAKEFLAGS="-j $NUMCPUS -l $NUMCPUS"

+ 4 - 0
config/travis_mysql_setup.sh

@@ -0,0 +1,4 @@
+sed -i 's|\[mysqld\]|\[mysqld\]\
+lower_case_table_names = 1\
+character-set-server=utf8\
+collation-server=utf8_general_ci|g' /etc/mysql/my.cnf

+ 151 - 0
config/travis_setup.sh

@@ -0,0 +1,151 @@
+export DEBIAN_FRONTEND=noninteractive
+
+# Turn on command tracing
+set -x 
+
+# Setup Apt For MongoDB
+#   Due to TechEmpower/FrameworkBenchmarks#989 and travis-ci/travis-ci#2655, 
+#   we put this into a loop
+until timeout 15s sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10; do echo 'Waiting for apt-key' ; done
+echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.list
+
+# Setup apt for Apache Cassandra
+until timeout 15s sudo apt-key adv --keyserver pgp.mit.edu --recv 4BD736A82B5C1B00; do echo 'Waiting for apt-key' ; done
+sudo apt-add-repository  'deb http://www.apache.org/dist/cassandra/debian 20x main'
+
+# Run installation 
+# DO NOT COPY --force-yes TO ANY NON-TRAVIS-CI SCRIPTS! Seriously, it can cause some 
+# major damage and should only be used inside a VM or Linux Container
+sudo apt-get -q update
+sudo apt-get -q -y --force-yes install -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" \
+  mongodb-org \
+  cassandra \
+  openssh-server \
+  mysql-server
+
+# Run as travis user (who already has passwordless sudo)
+ssh-keygen -f /home/travis/.ssh/id_rsa -N '' -t rsa
+cat /home/travis/.ssh/id_rsa.pub > /home/travis/.ssh/authorized_keys
+chmod 600 /home/travis/.ssh/authorized_keys
+
+# Set up the benchmark.cfg for travis user
+# NOTE: Please don't just copy the example config - it causes unexpected
+#       issues when those example variables change
+echo "[Defaults]"                                       > benchmark.cfg
+echo "client_identity_file=/home/travis/.ssh/id_rsa"   >> benchmark.cfg
+echo "database_identity_file=/home/travis/.ssh/id_rsa" >> benchmark.cfg
+echo "client_host=127.0.0.1"                           >> benchmark.cfg
+echo "database_host=127.0.0.1"                         >> benchmark.cfg
+echo "server_host=127.0.0.1"                           >> benchmark.cfg
+echo "client_user=travis"                              >> benchmark.cfg
+echo "database_user=travis"                            >> benchmark.cfg
+echo "runner_user=testrunner"                          >> benchmark.cfg
+
+# Create the new testrunner user
+sudo useradd testrunner
+# Give him a home dir
+sudo mkdir /home/testrunner
+# Make testrunner the owner of his home dir
+sudo chown testrunner:testrunner /home/testrunner
+# Add the testrunner user to every group that the travis user is in
+sudo sed -i 's|:travis|:travis,testrunner,benchmarkdbuser|g' /etc/group
+# Maybe unneeded - add the travis user to the testrunner group
+sudo sed -i 's|testrunner:x:\(.*\):|testrunner:x:\1:travis|g' /etc/group
+# Need to add testrunner to the sudoers group AND default him to a sudoers
+# because the travis user isn't in the sudo group - he's a sudoer.
+echo "testrunner ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee -a /etc/sudoers
+# Set the default shell for testrunner to /bin/bash
+sudo sed -i 's|/home/testrunner:/bin/sh|/home/testrunner:/bin/bash|g' /etc/passwd
+
+mkdir installs
+sudo chown testrunner:testrunner installs
+
+# =============Setup Databases===========================
+# NOTE: Do not run `--install database` in travis-ci! 
+#       It changes DB configuration files and will break everything
+# =======================================================
+
+# Setup MySQL
+echo "Populating MySQL database"
+#sudo mysqladmin -u root password secret
+#sudo mv /etc/mysql/my.cnf /etc/mysql/my.cnf.orig
+#sudo mv config/my.cnf /etc/mysql/my.cnf
+sudo sed -i 's|#max_connections        = 100|max_connections        = 500|g' /etc/mysql/my.cnf
+sudo restart mysql
+#mysql -uroot -psecret < config/create.sql
+
+# Setup Postgres
+echo "Removing Postgres 9.1 from Travis-CI"
+sudo apt-get remove -qy postgresql postgresql-9.1 postgresql-client-9.1
+sudo apt-get install -qy postgresql-9.3 postgresql-client-9.3
+
+echo "Populating Postgres database"
+psql --version
+sudo useradd benchmarkdbuser -p benchmarkdbpass
+sudo -u postgres psql template1 < config/create-postgres-database.sql
+sudo -u benchmarkdbuser psql hello_world < config/create-postgres.sql
+sudo sed -i "s|#listen_addresses = 'localhost'|listen_addresses = '*'|g" /etc/postgresql/9.3/main/postgresql.conf
+sudo sed -i 's|max_connections = 255|max_connections = 500|g' /etc/postgresql/9.3/main/postgresql.conf
+sudo service postgresql stop
+sudo service postgresql start 9.3
+
+# Setup Apache Cassandra
+echo "Populating Apache Cassandra database"
+for i in {1..15}; do
+nc -z localhost 9160 && break || sleep 1;
+echo "Waiting for Cassandra ($i/15}"
+done
+nc -z localhost 9160
+if [ $? -eq 0 ]; then
+cat config/cassandra/cleanup-keyspace.cql | sudo cqlsh
+python config/cassandra/db-data-gen.py > config/cassandra/tfb-data.cql
+sudo cqlsh -f config/cassandra/create-keyspace.cql
+sudo cqlsh -f config/cassandra/tfb-data.cql
+else
+>&2 echo "Cassandra did not start, skipping"
+fi
+
+# Setup Elasticsearch
+curl -O https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.5.0.deb
+sudo dpkg -i --force-confnew elasticsearch-1.5.0.deb
+sudo update-rc.d elasticsearch defaults 95 10
+sudo service elasticsearch restart
+
+echo "Populating Elasticsearch database"
+for i in {1..15}; do
+nc -z localhost 9200 && break || sleep 1;
+echo "Waiting for Elasticsearch ($i/15}"
+done
+nc -z localhost 9200
+if [ $? -eq 0 ]; then
+curl localhost:9200
+sh config/elasticsearch/es-create-index.sh
+python config/elasticsearch/es-db-data-gen.py > config/elasticsearch/tfb-data.json
+curl -sS -D - -o /dev/null -XPOST localhost:9200/tfb/world/_bulk --data-binary @config/elasticsearch/tfb-data.json
+echo "Elasticsearch DB populated"
+else
+>&2 echo "Elasticsearch did not start, skipping"
+fi
+
+# Setup MongoDB
+echo "Populating MongoDB database"
+for i in {1..15}; do
+nc -z localhost 27017 && break || sleep 1;
+echo "Waiting for MongoDB ($i/15}"
+done
+nc -z localhost 27017
+if [ $? -eq 0 ]; then
+mongo < config/create.js
+mongod --version
+else
+>&2 echo "MongoDB did not start, skipping"
+fi
+
+# =============Modify Configurations===========================
+# It can be useful to enable debug features for verification 
+# inside Travis-CI
+# =======================================================
+
+sed -i 's|display_errors\] = off|display_errors\] = on|' config/php-fpm.conf
+
+#exit $?

+ 6 - 6
frameworks/C++/ULib/README.md → frameworks/C++/ulib/README.md

@@ -45,7 +45,7 @@ HTTP/1.1 200 OK
 Date: Thu, 03 Jul 2014 10:11:10 GMT
 Server: ULib 
 Content-Length: 27
-Content-Type: application/json; charset=UTF-8
+Content-Type: application/json
 
 {"message":"Hello, World!"}
 ```
@@ -57,7 +57,7 @@ HTTP/1.1 200 OK
 Date: Thu, 03 Jul 2014 10:14:51 GMT
 Server: ULib 
 Content-Length: 31
-Content-Type: application/json; charset=UTF-8
+Content-Type: application/json
 
 {"id":6227,"randomNumber":8489}
 ```
@@ -69,7 +69,7 @@ HTTP/1.1 200 OK
 Date: Thu, 03 Jul 2014 10:14:51 GMT
 Server: ULib 
 Content-Length: 320
-Content-Type: application/json; charset=UTF-8
+Content-Type: application/json
 
 [{"id":6851,"randomNumber":7598},{"id":3968,"randomNumber":7325},{"id":8159,"randomNumber":348},{"id":9560,"randomNumber":7333},{"id":9938,"randomNumber":9080},{"id":1598,"randomNumber":1623},{"id":3280,"randomNumber":8707},{"id":4521,"randomNumber":6063},{"id":8173,"randomNumber":3690},{"id":3648,"randomNumber":8803}]
 ```
@@ -80,7 +80,7 @@ Content-Type: application/json; charset=UTF-8
 HTTP/1.1 200 OK
 Date: Thu, 03 Jul 2014 10:14:51 GMT
 Server: ULib 
-Content-Type: text/html; charset=UTF-8
+Content-Type: text/html
 Content-Length: 1227
 
 <!doctype html><html><head><title>Fortunes</title></head><body><table><tr><th>id</th><th>message</th></tr><tr><td>11</td><td>&lt;script&gt;alert(&quot;This should not be displayed in a browser alert box.&quot;);&lt;/script&gt;</td></tr><tr><td>4</td><td>A bad random number generator: 1, 1, 1, 1, 1, 4.33e+67, 1, 1, 1</td></tr><tr><td>5</td><td>A computer program does what you tell it to do, not what you want it to do.</td></tr><tr><td>2</td><td>A computer scientist is someone who fixes things that aren&apos;t broken.</td></tr><tr><td>8</td><td>A list is only as strong as its weakest link. — Donald Knuth</td></tr><tr><td>0</td><td>Additional fortune added at request time.</td></tr><tr><td>3</td><td>After enough decimal places, nobody gives a damn.</td></tr><tr><td>7</td><td>Any program that runs right is obsolete.</td></tr><tr><td>10</td><td>Computers make very fast, very accurate mistakes.</td></tr><tr><td>6</td><td>Emacs is a nice operating system, but I prefer UNIX. — Tom Christaensen</td></tr><tr><td>9</td><td>Feature: A bug with seniority.</td></tr><tr><td>1</td><td>fortune: No such file or directory</td></tr><tr><td>12</td><td>フレームワークのベンチマーク</td></tr></table></body></html>
@@ -93,7 +93,7 @@ HTTP/1.1 200 OK
 Date: Thu, 03 Jul 2014 10:14:51 GMT
 Server: ULib 
 Content-Length: 319
-Content-Type: application/json; charset=UTF-8
+Content-Type: application/json
 
 [{"id":7171,"randomNumber":351},{"id":6019,"randomNumber":9725},{"id":8118,"randomNumber":4023},{"id":7965,"randomNumber":1388},{"id":7797,"randomNumber":2249},{"id":112,"randomNumber":1108},{"id":6127,"randomNumber":4323},{"id":2597,"randomNumber":7509},{"id":2978,"randomNumber":7883},{"id":1111,"randomNumber":2228}]
 ```
@@ -104,7 +104,7 @@ Content-Type: application/json; charset=UTF-8
 HTTP/1.1 200 OK
 Date: Thu, 03 Jul 2014 10:14:51 GMT
 Server: ULib 
-Content-Type: text/plain; charset=UTF-8
+Content-Type: text/plain
 Content-Length: 13
 
 Hello, World!

+ 0 - 0
frameworks/C++/ULib/benchmark_config.json → frameworks/C++/ulib/benchmark_config.json


+ 0 - 0
frameworks/C++/ULib/setup_json.sh → frameworks/C++/ulib/setup_json.sh


+ 0 - 0
frameworks/C++/ULib/setup_mysql.sh → frameworks/C++/ulib/setup_mysql.sh


+ 0 - 0
frameworks/C++/ULib/setup_plaintext.sh → frameworks/C++/ulib/setup_plaintext.sh


+ 0 - 0
frameworks/C++/ULib/setup_postgres.sh → frameworks/C++/ulib/setup_postgres.sh


+ 0 - 0
frameworks/C++/ULib/setup_redis.sh → frameworks/C++/ulib/setup_redis.sh


+ 0 - 0
frameworks/C++/ULib/setup_sqlite.sh → frameworks/C++/ulib/setup_sqlite.sh


+ 0 - 0
frameworks/C++/ULib/source_code → frameworks/C++/ulib/source_code


+ 1 - 1
frameworks/C++/ULib/src/db.usp → frameworks/C++/ulib/src/db.usp

@@ -55,7 +55,7 @@ static void usp_end_db()
 #endif
 -->
 <!--#header
-Content-Type: application/json; charset=UTF-8
+Content-Type: application/json
 -->
 <!--#code
 pworld_db->id = u_get_num_random(10000);

+ 0 - 0
frameworks/C++/ULib/src/fortune.h → frameworks/C++/ulib/src/fortune.h


+ 0 - 0
frameworks/C++/ULib/src/fortune.usp → frameworks/C++/ulib/src/fortune.usp


+ 1 - 1
frameworks/C++/ULib/src/json.usp → frameworks/C++/ulib/src/json.usp

@@ -36,7 +36,7 @@ static void usp_end_json()
 #endif
 -->
 <!--#header
-Content-Type: application/json; charset=UTF-8
+Content-Type: application/json
 -->
 <!--#code
 #ifndef AS_cpoll_cppsp_DO

+ 0 - 0
frameworks/C++/ULib/src/plaintext.usp → frameworks/C++/ulib/src/plaintext.usp


+ 1 - 1
frameworks/C++/ULib/src/query.usp → frameworks/C++/ulib/src/query.usp

@@ -64,7 +64,7 @@ static void usp_end_query()
 queries;
 -->
 <!--#header
-Content-Type: application/json; charset=UTF-8
+Content-Type: application/json
 -->
 <!--#code
 int i = 0, num_queries;

+ 1 - 1
frameworks/C++/ULib/src/rdb.usp → frameworks/C++/ulib/src/rdb.usp

@@ -51,7 +51,7 @@ static void usp_end_rdb()
 #endif
 -->
 <!--#header
-Content-Type: application/json; charset=UTF-8
+Content-Type: application/json
 -->
 <!--#code
 UStringRep* rep;

+ 0 - 0
frameworks/C++/ULib/src/rfortune.usp → frameworks/C++/ulib/src/rfortune.usp


+ 1 - 1
frameworks/C++/ULib/src/rquery.usp → frameworks/C++/ulib/src/rquery.usp

@@ -54,7 +54,7 @@ static void usp_end_rquery()
 queries;
 -->
 <!--#header
-Content-Type: application/json; charset=UTF-8
+Content-Type: application/json
 -->
 <!--#code
 World* pworld;

+ 1 - 1
frameworks/C++/ULib/src/rupdate.usp → frameworks/C++/ulib/src/rupdate.usp

@@ -54,7 +54,7 @@ static void usp_end_rupdate()
 queries;
 -->
 <!--#header
-Content-Type: application/json; charset=UTF-8
+Content-Type: application/json
 -->
 <!--#code
 World* pworld;

+ 1 - 1
frameworks/C++/ULib/src/update.usp → frameworks/C++/ulib/src/update.usp

@@ -72,7 +72,7 @@ static void usp_end_update()
 queries;
 -->
 <!--#header
-Content-Type: application/json; charset=UTF-8
+Content-Type: application/json
 -->
 <!--#code
 int i = 0, num_queries;

+ 0 - 0
frameworks/C++/ULib/src/world.h → frameworks/C++/ulib/src/world.h


+ 4 - 0
frameworks/Erlang/chicagoboss/.gitignore

@@ -0,0 +1,4 @@
+erl_crash.dump
+deps
+ebin
+.rebar

+ 23 - 0
frameworks/Erlang/chicagoboss/benchmark_config.json

@@ -0,0 +1,23 @@
+{
+  "framework": "chicagoboss",
+  "tests": [{
+    "default": {
+      "setup_file": "setup",
+      "plaintext_url": "/plaintext",
+      "json_url": "/json",
+      "port": 8080,
+      "approach": "Realistic",
+      "classification": "Fullstack",
+      "database": "None",
+      "framework": "chicagoboss",
+      "language": "Erlang",
+      "orm": "raw",
+      "platform": "cowboy",
+      "webserver": "cowboy",
+      "os": "Linux",
+      "database_os": "Linux",
+      "display_name": "ChicagoBoss",
+      "notes": "",
+      "versus": ""
+  }}]
+}

+ 320 - 0
frameworks/Erlang/chicagoboss/boss.config

@@ -0,0 +1,320 @@
+%% vim: ts=4 sw=4 et ft=erlang
+%%%
+%%% CHICAGO BOSS PROJECT SKELETON
+%%%
+%%% This file can be modified by you to avoid you needing to reenter
+%%% defaults when creating new projects.  For full configuration
+%%% details, please visit
+%%% https://github.com/ChicagoBoss/ChicagoBoss/wiki/Configuration
+
+%%% When running tests, you may want to create a separate configuration file
+%%% "boss.test.config" which, if present, will be read instead of boss.config.
+
+[{boss, [
+    {path, "./deps/boss"},
+    {applications, [chicagoboss]},
+    {assume_locale, "en"},
+
+%%%%%%%%%%%%
+%% System %%
+%%%%%%%%%%%%
+
+%% vm_cookie - Erlang cookie, must be the same for all nodes in the
+%%   cluster.
+
+%% vm_name - Node name to use in production. Must be unique for all
+%%   nodes in the cluster. Defaults to <application_name>@<host_name>.
+%% vm_sname - Node name to use if you wish to use a "short name" instead of a
+%%   full name.
+%% vm_max_processes - The limit of processes that the VM is allowed to
+%%   spawn. Defaults to 32768 (the usual system default).
+
+%    {vm_cookie, "secret"},
+%    {vm_name, "leader@localhost"}
+%    {vm_sname, "shortname"},
+%    {vm_max_processes, 32768},
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%
+%% Controller Filters %%
+%%%%%%%%%%%%%%%%%%%%%%%%
+
+%% controller_filter_config - Specify defaults for controller filters
+%%   Sub-key 'lang' can be set to the atom 'auto' to autodetermine language
+%%     universally, or can be set to a specific language by setting a string (e.g.
+%%     "en" or "de")
+
+%    {controller_filter_config, [
+%        {lang, auto}
+%    ]},
+
+%%%%%%%%%%%%%%
+%% Compiler %%
+%%%%%%%%%%%%%%
+
+%% See compile(3) for a full list of options
+
+%    {compiler_options, [return_errors]},
+
+%%%%%%%%%%%
+%% Cache %%
+%%%%%%%%%%%
+
+%% cache_adapter - Which cache adapter to use. Currently the only
+%%   valid value is memcached_bin.
+%% cache_enable - Whether to enable the cache. Defaults to false.
+%% cache_servers - A list of cache servers ({Host, Port,
+%%   PoolSize}). Defaults to [{"localhost", 11211, 1}].
+%% cache_exp_time- The maximum time to keep a cache entry, in
+%%   seconds. Defaults to 60.
+
+%    {cache_adapter, memcached_bin},
+%    {cache_enable, false},
+%    {cache_servers, [{"localhost", 11211, 1}]},
+%    {cache_exp_time, 60}, 
+
+%%%%%%%%%%%%%%
+%% Database %%
+%%%%%%%%%%%%%%
+
+%% db_host - The hostname of the database. Defaults to "localhost".
+%% db_port - The port of the database. Defaults to 1978.
+%% db_adapter - The database adapter to use. Valid values are: 
+%%     mock - In-memory (non-persistent) database, useful for testing
+%%     mnesia - Mnesia
+%%     mongodb- MongoDB
+%%     mysql - MySQL
+%%     pgsql - PostgreSQL
+%%     riak - Riak
+%%     tyrant - Tokyo Tyrant
+%% db_username - The username used for connecting to the database (if
+%%   needed).
+%% db_password - The password used for connecting to the database (if
+%%   needed).
+%% db_database - The name of the database to connect to (if needed).
+%% db_cache_enable - Whether to enable the cache in boss_db. Defaults 
+%%   to false. Requires cache_enable to be set to true.
+
+    {db_host, "localhost"},
+    {db_port, 1978},
+    {db_adapter, mock},
+%    {db_username, "boss"},
+%    {db_password, "boss"},
+%    {db_database, "boss"},
+
+%%  MongoDB only
+%%
+%% Read https://github.com/TonyGen/mongodb-erlang#readme for details
+%% db_write_mode - defaults to safe
+%% db_read_mode - defaults to master
+%    {db_write_mode, safe},
+%    {db_read_mode, master},
+
+%% Database sharding
+%% A list of proplists with per-shard database configuration. 
+%% The proplists override the above options, and should contain two
+%% additional options: 
+%%  {db_shards, [ 
+%%      [ 
+%%          {db_host, "localhost"}, 
+%%          {db_adapter, mysql}, 
+%%          {db_port, 3306}, 
+%%          {db_username, "dbuser"}, 
+%%          {db_password, "dbpass"}, 
+%%          {db_database, "database"},
+%%          {db_shard_id, shard_id_atom}, 
+%%          {db_shard_models, [model_atom_1, model_atom_2,
+%%                             model_atom_3, etc]}  
+%%      ] 
+%%  ]},
+
+%%%%%%%%%%
+%% Mail %%
+%%%%%%%%%%
+
+%% mail_driver - The email delivery driver to use. Valid values are:
+%%   boss_mail_driver_smtp - SMTP delivery. If mail_relay is present, 
+%%     it is used as a relay, otherwise direct delivery is attempted.
+%%   boss_mail_driver_mock - A black hole, useful for testing.
+%% mail_relay_host - The relay server for SMTP mail deliveries.
+%% mail_relay_username -The username used for connecting to the SMTP
+%%   relay (if needed).
+%% mail_relay_password -The password used for connecting to the SMTP
+%%   relay (if needed).
+
+%    {mail_driver, boss_mail_driver_mock},
+%    {mail_relay_host, "smtp.example.com"},
+%    {mail_relay_username, "[email protected]"},
+%    {mail_relay_password, "mailpassword"},
+
+
+%%%%%%%%%%%%%%%%%%
+%% Master Node  %%
+%%%%%%%%%%%%%%%%%%
+
+
+%% master_node - 
+%%   For distributed configurations, the name of the master node. 
+%%   The master node runs global services (incoming mail, message
+%%   queue, events, sessions).
+%%   Should be an atom, e.g. somenode@somehost. 
+%%   The node name is specified in the -sname or -name argument in the
+%%   startup script.
+
+%    {master_node, '[email protected]'},
+
+%%%%%%%%%%%%%%%
+%% Webserver %%
+%%%%%%%%%%%%%%%
+
+%% port - The port to run the server on. Defaults to 8001.
+%% server - The HTTP server to use. Valid values are: 
+%%   mochiweb - The Mochiweb Web Server
+%%   cowboy - The Cowboy Web Server (Comet, WebSockets, highly scalable, ...)
+    {port, 8080},
+    {server, cowboy},
+
+%%%%%%%%%%%%%%
+%% Websocket %%
+%%%%%%%%%%%%%%
+    %% you can specify a global timeout for your websocket connection
+    %% when a websocket is idle more than the timeout, it is closed by the webserver
+    %% and you receive in your handle_close function  {normal, timeout} as the
+    %% reason.
+
+    %{websocket_timeout, 5000},
+
+%%%%%%%%%%%%%%
+%% Sessions %%
+%%%%%%%%%%%%%%
+
+%% session_adapter - Selects the session driver to use. Valid values:
+%%   cache - Store sessions in the configured cache
+%%     servers. Requires cache_enable to be set to true.
+%%   ets (default)
+%%   mnesia
+
+%% session_enable - Whether to enable sessions. Defaults to true.
+%% session_key - Cookie key for sessions. Defaults to "_boss_session".
+%% session_exp_time - Expiration time in seconds for the session
+%%   cookie. Defaults to 525600, i.e. 6 days, 2 hours.
+%% session_mnesia_nodes, for {session_adapter, mnesia} only - List of
+%%   Mnesia nodes, defaults to node(). 
+%% session_domain - (optional, sets the Domain=x cookie option), 
+%%   this can be used by ex: to enable subdomain apps 
+%%     (*.domain.com) with the param ".domain.com" => {session_domain,
+%%     ".domain.com"}
+
+    {session_adapter, mock},
+    {session_key, "_boss_session"},
+    {session_exp_time, 525600},
+    {session_cookie_http_only, false},
+    {session_cookie_secure, false},
+%    {session_enable, true},
+%    {session_mnesia_nodes, [node()]}, % <- replace "node()" with a node name
+%    {session_domain, ".domain.com"},
+
+%%%%%%%%%%%%%%%
+%% Templates %%
+%%%%%%%%%%%%%%%
+
+%% template_tag_modules - List of external modules to search for
+%%   custom ErlyDTL tags.
+%% template_filter_modules - List of external modules to search for
+%%   custom ErlyDTL filters.
+%% template_auto_escape - Controls automatic HTML escaping of template
+%%   values. Enabled by default.
+    {template_tag_modules, []},
+    {template_filter_modules, []},
+    {template_auto_escape, true},
+
+%%%%%%%%%%%%%%%%%%%%%
+%% Incoming Emails %%
+%%%%%%%%%%%%%%%%%%%%%
+
+%% smtp_server_enable - Enable the SMTP server for incoming mail
+%% smtp_server_address - The address that the SMTP server should bind
+%%   to. Defaults to {0, 0, 0, 0} (all interfaces).
+%% smtp_server_domain - The host name of the SMTP server
+%% smtp_server_port - The port that the SMTP server should listen
+%%   on. Defaults to 25.
+
+%    {smtp_server_enable, false},
+%    {smtp_server_address, {0, 0, 0, 0}},
+%    {smtp_server_domain, "smtp.example.com"},
+%    {smtp_server_port, 25},
+
+%% smtp_server_protocol - The protocol that the SMTP server should
+%%   use. Valid values are:
+%%     tcp (default)
+%%     ssl
+%    {smtp_server_protocol, tcp},
+
+%%%%%%%%%
+%% SSL %%
+%%%%%%%%%
+
+%% ssl_enable - Enable HTTP over SSL
+%% ssl_options - SSL options; see ssl(3erl)
+
+%    {ssl_enable, true},
+%    {ssl_options, []},
+
+%%%%%%%%%%%%%%%%%%%%
+%% LOG FORMATTING %%
+%%%%%%%%%%%%%%%%%%%%
+
+%% Set log_stack_multiline to true to make stack traces more readable at the
+%% cost of spanning multiple lines
+
+%    {log_stack_multiline, true},
+
+     {dummy, true} % a final dummy option so we don't have to keep track of commas
+]},
+
+%% MESSAGE QUEUE
+
+{ tinymq, [
+%% max_age- Maximum age of messages in the [message queue], in
+%%   seconds. Defaults to 60.
+    % {max_age, 60}
+]},
+
+%%%%%%%%%%%%%
+%% Logging %%
+%%%%%%%%%%%%%
+
+%% Lager default config. 
+%% More info: https://github.com/basho/lager 
+
+{lager, [
+    {handlers, [
+      {lager_console_backend, info},
+      {lager_file_backend, [
+        {"log/error.log", error, 10485760, "$D0", 5},
+        {"log/console.log", info, 10485760, "$D0", 5}
+      ]}
+    ]},
+
+    %% Colored output, if you want to modify the colors, see
+    %% https://github.com/basho/lager/blob/master/src/lager.app.src
+    % {colored, true},
+
+    {dummy, true}
+  ]},
+
+%% APPLICATION CONFIGURATIONS
+
+%% domains - A list of domains to serve the application on
+%% static_prefix - The URL prefix of static assets
+%% doc_prefix - The URL prefix for developer documentation
+{ chicagoboss, [
+    {path, "../chicagoboss"},
+    {base_url, "/"},
+%    {domains, all},
+%    {static_prefix, "/static"},
+%    {doc_prefix, "/doc"},
+
+    {dummy, true}
+]}
+].

+ 28 - 0
frameworks/Erlang/chicagoboss/priv/chicagoboss.routes

@@ -0,0 +1,28 @@
+% Routes file.
+
+% Formats: 
+%   {"/some/route", [{controller, "Controller"}, {action, "Action"}]}.
+%   {"/some/route", [{controller, "Controller"}, {action, "Action"}, {id, "42"}]}.
+%   {"/(some|any)/route/(\\d+)", [{controller, '$1'}, {action, "Action"}, {id, '$2'}]}.
+%   {"/some/route/(?<route_id>\\d+)", [{controller, "Controller"}, {action, "Action"}, {id, '$route_id'}]}.
+%   {"/some/route", [{application, some_app}, {controller, "Controller"}, {action, "Action"}, {id, "42"}]}.
+%
+%   {404, [{controller, "Controller"}, {action, "Action"}]}.
+%   {404, [{controller, "Controller"}, {action, "Action"}, {id, "42"}]}.
+%   {404, [{application, some_app}, {controller, "Controller"}, {action, "Action"}, {id, "42"}]}.
+%
+% Note that routing across applications results in a 302 redirect.
+
+% Front page
+%{"/", [{controller, "plaintext"}, {action, "index"}]}.
+
+% 404 File Not Found handler
+% {404, [{controller, "world"}, {action, "lost"}]}.
+
+% 500 Internal Error handler (only invoked in production)
+% {500, [{controller, "world"}, {action, "calamity"}]}.
+
+{"/plaintext", [{controller, "world"}, {action, "plaintext"}]}.
+{"/json", [{controller, "world"}, {action, "json"}]}.
+{"/", [{controller, "world"}, {action, "plaintext"}]}.
+

+ 97 - 0
frameworks/Erlang/chicagoboss/priv/init/chicagoboss_01_news.erl

@@ -0,0 +1,97 @@
+-module(chicagoboss_01_news).
+
+-export([init/0, stop/1]).
+
+% This script is first executed at server startup and should
+% return a list of WatchIDs that should be cancelled in the stop
+% function below (stop is executed if the script is ever reloaded).
+init() ->
+    {ok, []}.
+
+stop(ListOfWatchIDs) ->
+    lists:map(fun boss_news:cancel_watch/1, ListOfWatchIDs).
+
+%%%%%%%%%%% Ideas
+%    boss_news:watch("user-42.*",
+%        fun
+%            (updated, {Donald, 'location', OldLocation, NewLocation}) ->
+%                ;
+%            (updated, {Donald, 'email_address', OldEmail, NewEmail})
+%        end),
+%
+%    boss_news:watch("user-*.status",
+%        fun(updated, {User, 'status', OldStatus, NewStatus}) ->
+%                Followers = User:followers(),
+%                lists:map(fun(Follower) ->
+%                            Follower:notify_status_update(User, NewStatus)
+%                    end, Followers)
+%        end),
+%
+%    boss_news:watch("users",
+%        fun
+%            (created, NewUser) ->
+%                boss_mail:send(?WEBSITE_EMAIL_ADDRESS,
+%                    ?ADMINISTRATOR_EMAIL_ADDRESS,
+%                    "New account!",
+%                    "~p just created an account!~n",
+%                    [NewUser:name()]);
+%            (deleted, OldUser) ->
+%                ok
+%        end),
+%    
+%    boss_news:watch("forum_replies",
+%        fun
+%            (created, Reply) ->
+%                OrignalPost = Reply:original_post(),
+%                OriginalAuthor = OriginalPost:author(),
+%                case OriginalAuthor:is_online() of
+%                    true ->
+%                        boss_mq:push(OriginalAuthor:comet_channel(), <<"Someone replied!">>);
+%                    false ->
+%                        case OriginalAuthor:likes_email() of
+%                            true ->
+%                                boss_mail:send("website@blahblahblah",
+%                                    OriginalAuthor:email_address(),
+%                                    "Someone replied!"
+%                                    "~p has replied to your post on ~p~n",
+%                                    [(Reply:author()):name(), OriginalPost:title()]);
+%                            false ->
+%                                ok
+%                        end
+%                end;
+%            (_, _) -> ok
+%        end),
+%    
+%    boss_news:watch("forum_categories",
+%        fun
+%            (created, NewCategory) ->
+%                boss_mail:send(?WEBSITE_EMAIL_ADDRESS,
+%                    ?ADMINISTRATOR_EMAIL_ADDRESS,
+%                    "New category: "++NewCategory:name(),
+%                    "~p has created a new forum category called \"~p\"~n",
+%                    [(NewCategory:created_by()):name(), NewCategory:name()]);
+%            (_, _) -> ok
+%        end),
+%
+%    boss_news:watch("forum_category-*.is_deleted",
+%        fun 
+%            (updated, {ForumCategory, 'is_deleted', false, true}) ->
+%                ;
+%            (updated, {ForumCategory, 'is_deleted', true, false}) ->
+%        end).
+
+% Invoking the API directly:
+%boss_news:deleted("person-42", OldAttrs),
+%boss_news:updated("person-42", OldAttrs, NewAttrs),
+%boss_news:created("person-42", NewAttrs)
+
+% Invoking the API via HTTP (with the admin application installed):
+% POST /admin/news_api/deleted/person-42
+% old[status] = something
+
+% POST /admin/news_api/updated/person-42
+% old[status] = blah
+% new[status] = barf
+
+% POST /admin/news_api/created/person-42
+% new[status] = something

+ 191 - 0
frameworks/Erlang/chicagoboss/priv/rebar/boss_plugin.erl

@@ -0,0 +1,191 @@
+%%%-------------------------------------------------------------------
+%%% @author Jose Luis Gordo Romero <[email protected]>
+%%% @doc Chicago Boss rebar plugin
+%%%  Manage compilation/configuration/scripts stuff the rebar way
+%%% @end
+%%%-------------------------------------------------------------------
+-module(boss_plugin).
+
+-export([boss/2,
+     pre_compile/2,
+     pre_eunit/2]).
+
+-define(BOSS_PLUGIN_CLIENT_VERSION, 1).
+-define(BOSS_CONFIG_FILE, "boss.config").
+-define(BOSS_TEST_CONFIG_FILE, "boss.test.config").
+
+%% ====================================================================
+%% Public API
+%% ====================================================================
+
+%%--------------------------------------------------------------------
+%% @doc boss command
+%% @spec boss(_Config, _AppFile) -> ok | {error, Reason}
+%%       Boss enabled rebar commands, usage:
+%%       ./rebar boss c=command
+%% @end
+%%--------------------------------------------------------------------
+boss(RebarConf, AppFile) ->
+  case is_base_dir(RebarConf) of
+    true -> 
+      Command = rebar_config:get_global(RebarConf, c, "help"),
+      {ok, BossConf} = init(RebarConf, AppFile, Command),
+      case boss_rebar:run(?BOSS_PLUGIN_CLIENT_VERSION, Command, RebarConf, BossConf, AppFile) of
+        {error, command_not_found} ->
+          io:format("ERROR: boss command not found.~n"), 
+          boss_rebar:help(),
+          halt(1);
+        {error, Reason} -> 
+          io:format("ERROR: executing ~s task: ~s~n", [Command, Reason]), 
+          halt(1);
+        ok -> ok
+      end;
+    false -> ok
+  end.
+
+%%--------------------------------------------------------------------
+%% @doc initializes the rebar boss connector plugin
+%% @spec init(Config, AppFile) -> {ok, BossConf} | {error, Reason}
+%%       Set's the ebin cb_apps and loads the connector 
+%% @end
+%%--------------------------------------------------------------------
+init(RebarConf, AppFile, Command) ->
+    %% Compile and load the boss_rebar code, this can't be compiled
+  %% as a normal boss lib without the rebar source dep
+  %% The load of ./rebar boss:
+  %% - Rebar itself searchs in rebar.config for {plugin_dir, ["priv/rebar"]}.
+  %% - Rebar itself compile this plugin and adds it to the execution chain
+  %% - This plugin compiles and loads the boss_rebar code in ["cb/priv/rebar"],
+  %%   so we can extend/bugfix/tweak the framework without the need of manually
+  %%   recopy code to user apps
+    {BossConf, BossConfFile} = boss_config(Command),
+  BossPath = case boss_config_value(boss, path, BossConf) of
+           {error, _} ->
+             filename:join([rebar_config:get_xconf(RebarConf, base_dir, undefined), "deps", "boss"]);
+           Val -> Val
+         end,
+  RebarErls = rebar_utils:find_files(filename:join([BossPath, "priv", "rebar"]), ".*\\.erl\$"),
+  
+  rebar_log:log(debug, "Auto-loading boss rebar modules ~p~n", [RebarErls]),
+  
+  lists:map(fun(F) ->
+            case compile:file(F, [binary]) of
+              error ->
+                io:format("FATAL: Failed compilation of ~s module~n", [F]),
+                halt(1);
+              {ok, M, Bin} ->
+                {module, _} = code:load_binary(M, F, Bin),
+                rebar_log:log(debug, "Loaded ~s~n", [M])
+            end
+        end, RebarErls),
+
+  %% add all cb_apps defined in config file to code path
+  %% including the deps ebin dirs
+  
+  case is_base_dir(RebarConf) of
+  true ->
+    code:add_paths(["ebin" | filelib:wildcard(rebar_config:get_xconf(RebarConf, base_dir, undefined) ++ "/deps/*/ebin")]);
+  false ->
+    code:add_paths(filelib:wildcard(rebar_utils:get_cwd() ++ "/../*/ebin"))
+  end,
+  %% Load the config in the environment
+  boss_rebar:init_conf(BossConf),
+  
+  {ok, BossConf}.
+  
+%%--------------------------------------------------------------------
+%% @doc pre_compile hook
+%% @spec pre_compile(_Config, AppFile) -> ok | {error, Reason}
+%%       Pre compile hook, compile the boss way
+%%       Compatibility hook, the normal ./rebar compile command works,
+%%         but only calls the ./rebar boss c=compile and halts (default
+%%         rebar task never hits)
+%% @end
+%%--------------------------------------------------------------------
+pre_compile(RebarConf, AppFile) ->
+  case is_boss_app(AppFile)  orelse is_base_dir(RebarConf) of
+    true -> 
+      {ok, BossConf} = init(RebarConf, AppFile, "compile"),
+      boss_rebar:run(?BOSS_PLUGIN_CLIENT_VERSION, compile, RebarConf, BossConf, AppFile),
+      halt(0);
+    false -> ok
+  end.
+
+%%--------------------------------------------------------------------
+%% @doc pre_eunit hook
+%% @spec pre_eunit(RebarConf, AppFile) -> ok | {error, Reason}
+%%       Pre eunit hook, .eunit compilation the boss way
+%%       Compatibility hook, the normal ./rebar eunit command works,
+%%         but only calls the ./rebar boss c=test_eunit and halts
+%%         (default rebar task never hits)
+%% @end
+%%--------------------------------------------------------------------
+pre_eunit(RebarConf, AppFile) ->
+  case is_boss_app(AppFile) orelse is_base_dir(RebarConf) of
+    true -> 
+      {ok, BossConf} = init(RebarConf, AppFile, "test_eunit"),
+      boss_rebar:run(?BOSS_PLUGIN_CLIENT_VERSION, test_eunit, RebarConf, BossConf, AppFile),
+      halt(0);
+    false -> ok
+  end.
+
+%% ===================================================================
+%% Internal functions
+%% ===================================================================
+
+is_boss_app(Filename)->
+  BossFileForApp = filename:join([filename:dirname(Filename), "..", "boss.config"]),
+  filelib:is_file(BossFileForApp).
+
+%% Checks if the current dir (rebar execution) is the base_dir
+%% Used to prevent run boss tasks in deps directory
+is_base_dir(RebarConf) ->
+    filename:absname(rebar_utils:get_cwd()) =:= rebar_config:get_xconf(RebarConf, base_dir, undefined).
+
+%% Gets the boss.config central configuration file
+boss_config(Command) ->
+    IsTest		= lists:prefix("test_", Command),
+    BossConfFile	= get_config_file(IsTest),
+    ConfigData		= file:consult(BossConfFile),
+    validate_config_data(BossConfFile, ConfigData).
+
+get_config_file(false) ->
+	    ?BOSS_CONFIG_FILE;
+get_config_file(true) ->
+    case file:read_file_info(?BOSS_TEST_CONFIG_FILE) of
+	{ok, _} -> ?BOSS_TEST_CONFIG_FILE;
+	_ -> ?BOSS_CONFIG_FILE
+    end.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+validate_config_data(BossConfFile, {error, {Line, _Mod, [Term|_]}}) ->
+    io:format("FATAL: Config file ~p has a syntax error on line ~p, ~n ~p ~n~n", 
+	      [BossConfFile, Line,  Term]),
+    halt(1);
+validate_config_data(BossConfFile, {error, enoent}) ->
+    io:format("FATAL: Config file ~p not found.~n", [BossConfFile]),
+    halt(1);
+validate_config_data(BossConfFile, {ok, [BossConfig]}) ->
+    {BossConfig, BossConfFile}.
+    
+
+
+%%--------------------------------------------------------------------
+%% @doc Get Boss config value app, key
+%% @spec boss_config_value(App, Key) -> Value | {error, Reason}
+%%       Searchs in boss config for a given App and Key
+%% @end
+%%--------------------------------------------------------------------
+boss_config_value(App, Key, BossConfig) ->
+  case lists:keyfind(App, 1, BossConfig) of
+    false -> 
+      {error, boss_config_app_not_found};
+    {App, AppConfig} -> 
+      case lists:keyfind(Key, 1, AppConfig) of
+        false -> 
+          {error, boss_config_app_setting_not_found};
+        {Key, KeyConfig} ->
+          KeyConfig
+      end
+  end.

+ 7 - 0
frameworks/Erlang/chicagoboss/rebar.config

@@ -0,0 +1,7 @@
+{deps, [
+  {boss, ".*", {git, "git://github.com/ChicagoBoss/ChicagoBoss.git", {tag, "v0.8.19"}}}
+]}.
+{plugin_dir, ["priv/rebar"]}.
+{plugins, [boss_plugin]}.
+{eunit_compile_opts, [{src_dirs, ["src/test"]}]}.
+{lib_dirs, ["../ChicagoBoss/deps/elixir/lib"]}.

+ 11 - 0
frameworks/Erlang/chicagoboss/setup.sh

@@ -0,0 +1,11 @@
+#!/bin/bash
+
+sed -i 's|"benchmarkdbpass", ".*", 3306|"benchmarkdbpass", "'"${DBHOST}"'", 3306|g' boss.config
+
+fw_depends erlang
+
+rm -rf deps/* ebin/*
+rebar get-deps
+rebar compile
+
+erl -pa ebin deps/*/ebin +sbwt very_long +swt very_low -config boss -s boss -sname chicagoboss -noshell -detached

+ 8 - 0
frameworks/Erlang/chicagoboss/src/chicagoboss.app.src

@@ -0,0 +1,8 @@
+{application, chicagoboss, [
+        {description, "My Awesome Web Framework"},
+        {vsn, "0.0.1"},
+        {modules, []},
+        {registered, []},
+        {applications, [kernel, stdlib, crypto]},
+        {env, []}
+    ]}.

+ 8 - 0
frameworks/Erlang/chicagoboss/src/controller/chicagoboss_world_controller.erl

@@ -0,0 +1,8 @@
+-module(chicagoboss_world_controller, [Req]).
+-compile(export_all).
+
+plaintext('GET', []) ->
+	{output, "Hello, world!", [{"Content-Type", "text/plain"}]}.
+
+json('GET', []) ->
+	{json, [{message, "Hello, world!"}]}.

+ 8 - 0
frameworks/Erlang/chicagoboss/src/mail/chicagoboss_incoming_mail_controller.erl

@@ -0,0 +1,8 @@
+-module(chicagoboss_incoming_mail_controller).
+-compile(export_all).
+
+authorize_(User, DomainName, IPAddress) ->
+    true.
+
+% post(FromAddress, Message) ->
+%    ok.

+ 12 - 0
frameworks/Erlang/chicagoboss/src/mail/chicagoboss_outgoing_mail_controller.erl

@@ -0,0 +1,12 @@
+-module(chicagoboss_outgoing_mail_controller).
+-compile(export_all).
+
+%% See http://www.chicagoboss.org/api-mail-controller.html for what should go in here
+
+test_message(FromAddress, ToAddress, Subject) ->
+    Headers = [
+        {"Subject", Subject},
+        {"To", ToAddress},
+        {"From", FromAddress}
+    ],
+    {ok, FromAddress, ToAddress, Headers, [{address, ToAddress}]}.

+ 2 - 3
frameworks/Java/gemini/start_postgres.sh

@@ -1,7 +1,6 @@
 #!/bin/bash
 
-# load java environment variables
-source $IROOT/java7.installed
+fw_depends java7 resin maven
 
 sed -i 's|db.ConnectString = .*/|db.ConnectString = '"$DBHOST"':5432/|g' Docroot/WEB-INF/GeminiHello.conf
 sed -i 's|root-directory=".*/FrameworkBenchmarks/frameworks/Java/gemini|root-directory="'"$TROOT"'|g' Docroot/WEB-INF/resin.xml
@@ -9,4 +8,4 @@ sed -i 's|db.Driver.Class = .*|db.Driver.Class = org.postgresql.Driver|g' Docroo
 sed -i 's|db.Driver.UrlPrefix = .*|db.Driver.UrlPrefix = jdbc:postgresql://|g' Docroot/WEB-INF/GeminiHello.conf
 mkdir -p Docroot/WEB-INF/classes
 ant compile
-$RESIN_HOME/bin/resinctl -conf $TROOT/Docroot/WEB-INF/resin.xml start
+resinctl -conf $TROOT/Docroot/WEB-INF/resin.xml start

+ 0 - 20
frameworks/PHP/cygnite-php-framework/apps/controllers/BenchController.php

@@ -1,52 +1,41 @@
 <?php
 namespace Apps\Controllers;
-
 use Cygnite\Mvc\Controller\AbstractBaseController;
 use Apps\Models\Fortune;
 use Apps\Models\World;
-
 class BenchController extends AbstractBaseController
 {
     protected $templateEngine = false;
-
     public function __construct()
     {
         parent::__construct();
     }
-
     public function indexAction()
     {
         echo 'Hello World!';
     }
-
     public function dbAction()
     {
         $worlds = $arr = array();
         $world = null;
         $queries = 1;
-
         $worlds = $this->getWorldsInfo($queries);
         $worlds = $worlds[0];
-
         header('Content-type: application/json');
         echo json_encode($worlds);
     }
-
     private function getWorldsInfo($queries)
     {
         $world = null;
         $worlds = $arr = array();
-
         for ($i = 0; $i < $queries; ++$i) {
             $world = World::find(mt_rand(1, 10000));
             $arr['id'] = (int) $world->id;
             $arr['randomNumber'] = (int) $world->randomnumber;
             $worlds[] = $arr;
         }
-
         return $worlds;
     }
-
     public function queriesAction($queries = 1)
     {
         $queries = intval($queries);
@@ -55,28 +44,21 @@ class BenchController extends AbstractBaseController
         } elseif ($queries > 500) {
             $queries = 500;
         }
-
         $worlds = array();
         $worlds = $this->getWorldsInfo($queries);
-
         header('Content-type: application/json');
         echo json_encode($worlds);
     }
-
     public function fortunesAction()
     {
         $fortuneCollection = array();
         $fortuneCollection = Fortune::all();
         $fortunes = $fortuneCollection->asArray();
-
         $runtimeFortune = new Fortune();
         $runtimeFortune->id = 0;
         $runtimeFortune->message = 'Additional fortune added at request time.';
-
         $fortunes[] = $runtimeFortune;
-
         usort($fortunes, function($left, $right) {
-
             if ($left->message === $right->message) {
                 return 0;
             } else if ($left->message > $right->message) {
@@ -84,9 +66,7 @@ class BenchController extends AbstractBaseController
             } else {
                 return -1;
             }
-
         });
-
         $this->render('fortunes', array(
                 'fortunes' => $fortunes
         ));

+ 1 - 1
frameworks/PHP/cygnite-php-framework/composer.json

@@ -11,7 +11,7 @@
         }
     ],
     "require": {
-        "cygnite/framework": "dev-master"
+        "cygnite/framework": "v1.3.*"
     },
     "autoload": {
         "classmap": [

+ 0 - 0
frameworks/PHP/Yii2/.gitignore → frameworks/PHP/yii2/.gitignore


+ 0 - 0
frameworks/PHP/Yii2/README.md → frameworks/PHP/yii2/README.md


+ 0 - 0
frameworks/PHP/Yii2/app/controllers/SiteController.php → frameworks/PHP/yii2/app/controllers/SiteController.php


+ 0 - 0
frameworks/PHP/Yii2/app/index.php → frameworks/PHP/yii2/app/index.php


+ 0 - 0
frameworks/PHP/Yii2/app/runtime/keys.json → frameworks/PHP/yii2/app/runtime/keys.json


+ 0 - 0
frameworks/PHP/Yii2/benchmark_config.json → frameworks/PHP/yii2/benchmark_config.json


+ 0 - 0
frameworks/PHP/Yii2/composer.json → frameworks/PHP/yii2/composer.json


+ 0 - 0
frameworks/PHP/Yii2/composer.lock → frameworks/PHP/yii2/composer.lock


+ 0 - 0
frameworks/PHP/Yii2/deploy/config.hdf → frameworks/PHP/yii2/deploy/config.hdf


+ 0 - 0
frameworks/PHP/Yii2/deploy/nginx.conf → frameworks/PHP/yii2/deploy/nginx.conf


+ 0 - 0
frameworks/PHP/Yii2/hhvm.pid → frameworks/PHP/yii2/hhvm.pid


+ 0 - 0
frameworks/PHP/Yii2/setup.sh → frameworks/PHP/yii2/setup.sh


+ 0 - 0
frameworks/PHP/Yii2/setup_hhvm.sh → frameworks/PHP/yii2/setup_hhvm.sh


+ 0 - 0
frameworks/Python/AsyncIO/README.md → frameworks/Python/asyncio/README.md


+ 0 - 0
frameworks/Python/AsyncIO/aiohttp.web/.gitignore → frameworks/Python/asyncio/aiohttp.web/.gitignore


+ 0 - 0
frameworks/Python/AsyncIO/aiohttp.web/LICENSE → frameworks/Python/asyncio/aiohttp.web/LICENSE


+ 0 - 0
frameworks/Python/AsyncIO/aiohttp.web/README.rst → frameworks/Python/asyncio/aiohttp.web/README.rst


+ 0 - 0
frameworks/Python/AsyncIO/aiohttp.web/etc/default/hello → frameworks/Python/asyncio/aiohttp.web/etc/default/hello


+ 0 - 0
frameworks/Python/AsyncIO/aiohttp.web/etc/hello/api_hour/gunicorn_conf.py → frameworks/Python/asyncio/aiohttp.web/etc/hello/api_hour/gunicorn_conf.py


+ 0 - 0
frameworks/Python/AsyncIO/aiohttp.web/etc/hello/api_hour/logging.ini → frameworks/Python/asyncio/aiohttp.web/etc/hello/api_hour/logging.ini


+ 0 - 0
frameworks/Python/AsyncIO/aiohttp.web/etc/hello/main/main.yaml → frameworks/Python/asyncio/aiohttp.web/etc/hello/main/main.yaml


+ 0 - 0
frameworks/Python/AsyncIO/aiohttp.web/etc/init.d/hello → frameworks/Python/asyncio/aiohttp.web/etc/init.d/hello


+ 0 - 0
frameworks/Python/AsyncIO/aiohttp.web/etc/logrotate.d/hello → frameworks/Python/asyncio/aiohttp.web/etc/logrotate.d/hello


+ 0 - 0
frameworks/Python/AsyncIO/aiohttp.web/etc/monit/conf.d/hello → frameworks/Python/asyncio/aiohttp.web/etc/monit/conf.d/hello


+ 0 - 0
frameworks/Python/AsyncIO/aiohttp.web/etc/rsyslog.conf → frameworks/Python/asyncio/aiohttp.web/etc/rsyslog.conf


+ 0 - 0
frameworks/Python/AsyncIO/aiohttp.web/hello/__init__.py → frameworks/Python/asyncio/aiohttp.web/hello/__init__.py


+ 0 - 0
frameworks/Python/AsyncIO/aiohttp.web/hello/endpoints/__init__.py → frameworks/Python/asyncio/aiohttp.web/hello/endpoints/__init__.py


+ 0 - 0
frameworks/Python/AsyncIO/aiohttp.web/hello/endpoints/world.py → frameworks/Python/asyncio/aiohttp.web/hello/endpoints/world.py


+ 0 - 0
frameworks/Python/AsyncIO/aiohttp.web/hello/services/__init__.py → frameworks/Python/asyncio/aiohttp.web/hello/services/__init__.py


+ 0 - 0
frameworks/Python/AsyncIO/aiohttp.web/hello/services/redis.py → frameworks/Python/asyncio/aiohttp.web/hello/services/redis.py


+ 0 - 0
frameworks/Python/AsyncIO/aiohttp.web/hello/services/world.py → frameworks/Python/asyncio/aiohttp.web/hello/services/world.py


+ 0 - 0
frameworks/Python/AsyncIO/aiohttp.web/hello/templates/fortunes.html.j2 → frameworks/Python/asyncio/aiohttp.web/hello/templates/fortunes.html.j2


+ 0 - 0
frameworks/Python/AsyncIO/aiohttp.web/hello/utils/__init__.py → frameworks/Python/asyncio/aiohttp.web/hello/utils/__init__.py


+ 0 - 0
frameworks/Python/AsyncIO/aiohttp.web/setup.sh → frameworks/Python/asyncio/aiohttp.web/setup.sh


+ 0 - 0
frameworks/Python/AsyncIO/aiohttp.web/source_code → frameworks/Python/asyncio/aiohttp.web/source_code


+ 0 - 0
frameworks/Python/AsyncIO/benchmark_config.json → frameworks/Python/asyncio/benchmark_config.json


+ 0 - 0
frameworks/Python/AsyncIO/requirements.txt → frameworks/Python/asyncio/requirements.txt


+ 0 - 0
frameworks/Python/AsyncIO/yocto_http/.gitignore → frameworks/Python/asyncio/yocto_http/.gitignore


+ 0 - 0
frameworks/Python/AsyncIO/yocto_http/LICENSE → frameworks/Python/asyncio/yocto_http/LICENSE


+ 0 - 0
frameworks/Python/AsyncIO/yocto_http/README.rst → frameworks/Python/asyncio/yocto_http/README.rst


+ 0 - 0
frameworks/Python/AsyncIO/yocto_http/etc/default/hello → frameworks/Python/asyncio/yocto_http/etc/default/hello


+ 0 - 0
frameworks/Python/AsyncIO/yocto_http/etc/hello/api_hour/gunicorn_conf.py → frameworks/Python/asyncio/yocto_http/etc/hello/api_hour/gunicorn_conf.py


+ 0 - 0
frameworks/Python/AsyncIO/yocto_http/etc/hello/api_hour/logging.ini → frameworks/Python/asyncio/yocto_http/etc/hello/api_hour/logging.ini


+ 0 - 0
frameworks/Python/AsyncIO/yocto_http/etc/hello/main/main.yaml → frameworks/Python/asyncio/yocto_http/etc/hello/main/main.yaml


+ 0 - 0
frameworks/Python/AsyncIO/yocto_http/etc/init.d/hello → frameworks/Python/asyncio/yocto_http/etc/init.d/hello


+ 0 - 0
frameworks/Python/AsyncIO/yocto_http/etc/logrotate.d/hello → frameworks/Python/asyncio/yocto_http/etc/logrotate.d/hello


+ 0 - 0
frameworks/Python/AsyncIO/yocto_http/etc/monit/conf.d/hello → frameworks/Python/asyncio/yocto_http/etc/monit/conf.d/hello


+ 0 - 0
frameworks/Python/AsyncIO/yocto_http/etc/rsyslog.conf → frameworks/Python/asyncio/yocto_http/etc/rsyslog.conf


+ 0 - 0
frameworks/Python/AsyncIO/yocto_http/hello/__init__.py → frameworks/Python/asyncio/yocto_http/hello/__init__.py


+ 0 - 0
frameworks/Python/AsyncIO/yocto_http/hello/endpoints/__init__.py → frameworks/Python/asyncio/yocto_http/hello/endpoints/__init__.py


+ 0 - 0
frameworks/Python/AsyncIO/yocto_http/hello/endpoints/world.py → frameworks/Python/asyncio/yocto_http/hello/endpoints/world.py


+ 0 - 0
frameworks/Python/AsyncIO/yocto_http/hello/servers/__init__.py → frameworks/Python/asyncio/yocto_http/hello/servers/__init__.py


+ 0 - 0
frameworks/Python/AsyncIO/yocto_http/hello/servers/yocto_http.py → frameworks/Python/asyncio/yocto_http/hello/servers/yocto_http.py


+ 0 - 0
frameworks/Python/AsyncIO/yocto_http/hello/services/__init__.py → frameworks/Python/asyncio/yocto_http/hello/services/__init__.py


+ 0 - 0
frameworks/Python/AsyncIO/yocto_http/hello/services/redis.py → frameworks/Python/asyncio/yocto_http/hello/services/redis.py


+ 0 - 0
frameworks/Python/AsyncIO/yocto_http/hello/services/world.py → frameworks/Python/asyncio/yocto_http/hello/services/world.py


+ 0 - 0
frameworks/Python/AsyncIO/yocto_http/hello/templates/fortunes.html.j2 → frameworks/Python/asyncio/yocto_http/hello/templates/fortunes.html.j2


+ 0 - 0
frameworks/Python/AsyncIO/yocto_http/hello/utils/__init__.py → frameworks/Python/asyncio/yocto_http/hello/utils/__init__.py


+ 0 - 0
frameworks/Python/AsyncIO/yocto_http/hello/utils/yocto_http/__init__.py → frameworks/Python/asyncio/yocto_http/hello/utils/yocto_http/__init__.py


+ 0 - 0
frameworks/Python/AsyncIO/yocto_http/hello/utils/yocto_http/application.py → frameworks/Python/asyncio/yocto_http/hello/utils/yocto_http/application.py


Some files were not shown because too many files changed in this diff