Skip to content

Instantly share code, notes, and snippets.

@papr
Created May 13, 2020 13:36
Show Gist options
  • Save papr/5caddb2405a06e6f8c667df05264fdea to your computer and use it in GitHub Desktop.
Save papr/5caddb2405a06e6f8c667df05264fdea to your computer and use it in GitHub Desktop.
Replay HMD recording
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"from IPython.display import display, clear_output\n",
"import pandas as pd\n",
"import zmq\n",
"import numpy as np\n",
"from msgpack import loads\n",
"import time\n",
"\n",
"def update(*args):\n",
" clear_output(wait=True)\n",
" display(*args)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<style type=\"text/css\" >\n",
" #T_9e47f822_951e_11ea_8542_f01898ee5ea4row0_col0 {\n",
" background-color: #008066;\n",
" color: #f1f1f1;\n",
" } #T_9e47f822_951e_11ea_8542_f01898ee5ea4row1_col0 {\n",
" background-color: #008066;\n",
" color: #f1f1f1;\n",
" } #T_9e47f822_951e_11ea_8542_f01898ee5ea4row2_col0 {\n",
" background-color: #4fa766;\n",
" color: #000000;\n",
" } #T_9e47f822_951e_11ea_8542_f01898ee5ea4row3_col0 {\n",
" background-color: #4fa766;\n",
" color: #000000;\n",
" } #T_9e47f822_951e_11ea_8542_f01898ee5ea4row4_col0 {\n",
" background-color: #4fa766;\n",
" color: #000000;\n",
" } #T_9e47f822_951e_11ea_8542_f01898ee5ea4row5_col0 {\n",
" background-color: #4fa766;\n",
" color: #000000;\n",
" } #T_9e47f822_951e_11ea_8542_f01898ee5ea4row6_col0 {\n",
" background-color: #55aa66;\n",
" color: #000000;\n",
" } #T_9e47f822_951e_11ea_8542_f01898ee5ea4row7_col0 {\n",
" background-color: #55aa66;\n",
" color: #000000;\n",
" } #T_9e47f822_951e_11ea_8542_f01898ee5ea4row8_col0 {\n",
" background-color: #55aa66;\n",
" color: #000000;\n",
" } #T_9e47f822_951e_11ea_8542_f01898ee5ea4row9_col0 {\n",
" background-color: #55aa66;\n",
" color: #000000;\n",
" } #T_9e47f822_951e_11ea_8542_f01898ee5ea4row10_col0 {\n",
" background-color: #55aa66;\n",
" color: #000000;\n",
" } #T_9e47f822_951e_11ea_8542_f01898ee5ea4row11_col0 {\n",
" background-color: #55aa66;\n",
" color: #000000;\n",
" } #T_9e47f822_951e_11ea_8542_f01898ee5ea4row12_col0 {\n",
" background-color: #55aa66;\n",
" color: #000000;\n",
" } #T_9e47f822_951e_11ea_8542_f01898ee5ea4row13_col0 {\n",
" background-color: #58ac66;\n",
" color: #000000;\n",
" } #T_9e47f822_951e_11ea_8542_f01898ee5ea4row14_col0 {\n",
" background-color: #58ac66;\n",
" color: #000000;\n",
" } #T_9e47f822_951e_11ea_8542_f01898ee5ea4row15_col0 {\n",
" background-color: #add666;\n",
" color: #000000;\n",
" } #T_9e47f822_951e_11ea_8542_f01898ee5ea4row16_col0 {\n",
" background-color: #add666;\n",
" color: #000000;\n",
" } #T_9e47f822_951e_11ea_8542_f01898ee5ea4row17_col0 {\n",
" background-color: #ffff66;\n",
" color: #000000;\n",
" }</style><table id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4\" ><thead> <tr> <th class=\"blank level0\" ></th> <th class=\"col_heading level0 col0\" >last</th> <th class=\"col_heading level0 col1\" >count</th> <th class=\"col_heading level0 col2\" >timestamp</th> </tr></thead><tbody>\n",
" <tr>\n",
" <th id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4level0_row0\" class=\"row_heading level0 row0\" >notify.service_process.ui.should_update</th>\n",
" <td id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4row0_col0\" class=\"data row0 col0\" >0.00</td>\n",
" <td id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4row0_col1\" class=\"data row0 col1\" >2996</td>\n",
" <td id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4row0_col2\" class=\"data row0 col2\" >nan</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4level0_row1\" class=\"row_heading level0 row1\" >delayed_notify.service_process.ui.should_update</th>\n",
" <td id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4row1_col0\" class=\"data row1 col0\" >0.25</td>\n",
" <td id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4row1_col1\" class=\"data row1 col1\" >2995</td>\n",
" <td id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4row1_col2\" class=\"data row1 col2\" >nan</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4level0_row2\" class=\"row_heading level0 row2\" >notify.calibration.stopped</th>\n",
" <td id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4row2_col0\" class=\"data row2 col0\" >241.56</td>\n",
" <td id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4row2_col1\" class=\"data row2 col1\" >3</td>\n",
" <td id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4row2_col2\" class=\"data row2 col2\" >nan</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4level0_row3\" class=\"row_heading level0 row3\" >notify.start_plugin</th>\n",
" <td id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4row3_col0\" class=\"data row3 col0\" >241.56</td>\n",
" <td id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4row3_col1\" class=\"data row3 col1\" >6</td>\n",
" <td id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4row3_col2\" class=\"data row3 col2\" >nan</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4level0_row4\" class=\"row_heading level0 row4\" >notify.calibration.calibration_data</th>\n",
" <td id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4row4_col0\" class=\"data row4 col0\" >241.57</td>\n",
" <td id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4row4_col1\" class=\"data row4 col1\" >3</td>\n",
" <td id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4row4_col2\" class=\"data row4 col2\" >881313.898605</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4level0_row5\" class=\"row_heading level0 row5\" >notify.calibration.successful</th>\n",
" <td id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4row5_col0\" class=\"data row5 col0\" >241.65</td>\n",
" <td id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4row5_col1\" class=\"data row5 col1\" >3</td>\n",
" <td id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4row5_col2\" class=\"data row5 col2\" >881313.898605</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4level0_row6\" class=\"row_heading level0 row6\" >notify.calibration.should_stop</th>\n",
" <td id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4row6_col0\" class=\"data row6 col0\" >261.07</td>\n",
" <td id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4row6_col1\" class=\"data row6 col1\" >4</td>\n",
" <td id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4row6_col2\" class=\"data row6 col2\" >881300.740534</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4level0_row7\" class=\"row_heading level0 row7\" >gaze.3d.0.</th>\n",
" <td id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4row7_col0\" class=\"data row7 col0\" >261.08</td>\n",
" <td id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4row7_col1\" class=\"data row7 col1\" >543</td>\n",
" <td id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4row7_col2\" class=\"data row7 col2\" >881300.643994</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4level0_row8\" class=\"row_heading level0 row8\" >pupil.0</th>\n",
" <td id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4row8_col0\" class=\"data row8 col0\" >261.08</td>\n",
" <td id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4row8_col1\" class=\"data row8 col1\" >8297</td>\n",
" <td id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4row8_col2\" class=\"data row8 col2\" >881300.724684</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4level0_row9\" class=\"row_heading level0 row9\" >gaze.3d.1.</th>\n",
" <td id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4row9_col0\" class=\"data row9 col0\" >261.08</td>\n",
" <td id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4row9_col1\" class=\"data row9 col1\" >638</td>\n",
" <td id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4row9_col2\" class=\"data row9 col2\" >881300.721287</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4level0_row10\" class=\"row_heading level0 row10\" >pupil.1</th>\n",
" <td id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4row10_col0\" class=\"data row10 col0\" >261.08</td>\n",
" <td id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4row10_col1\" class=\"data row10 col1\" >8289</td>\n",
" <td id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4row10_col2\" class=\"data row10 col2\" >881300.721287</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4level0_row11\" class=\"row_heading level0 row11\" >notify.calibration.add_ref_data</th>\n",
" <td id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4row11_col0\" class=\"data row11 col0\" >261.09</td>\n",
" <td id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4row11_col1\" class=\"data row11 col1\" >55</td>\n",
" <td id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4row11_col2\" class=\"data row11 col2\" >881300.708742</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4level0_row12\" class=\"row_heading level0 row12\" >gaze.3d.01.</th>\n",
" <td id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4row12_col0\" class=\"data row12 col0\" >261.14</td>\n",
" <td id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4row12_col1\" class=\"data row12 col1\" >2958</td>\n",
" <td id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4row12_col2\" class=\"data row12 col2\" >881300.577744</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4level0_row13\" class=\"row_heading level0 row13\" >notify.calibration.started</th>\n",
" <td id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4row13_col0\" class=\"data row13 col0\" >271.55</td>\n",
" <td id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4row13_col1\" class=\"data row13 col1\" >4</td>\n",
" <td id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4row13_col2\" class=\"data row13 col2\" >nan</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4level0_row14\" class=\"row_heading level0 row14\" >notify.calibration.should_start</th>\n",
" <td id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4row14_col0\" class=\"data row14 col0\" >271.55</td>\n",
" <td id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4row14_col1\" class=\"data row14 col1\" >4</td>\n",
" <td id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4row14_col2\" class=\"data row14 col2\" >881283.995578</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4level0_row15\" class=\"row_heading level0 row15\" >gaze.2d.0.</th>\n",
" <td id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4row15_col0\" class=\"data row15 col0\" >528.42</td>\n",
" <td id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4row15_col1\" class=\"data row15 col1\" >6223</td>\n",
" <td id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4row15_col2\" class=\"data row15 col2\" >881300.724684</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4level0_row16\" class=\"row_heading level0 row16\" >gaze.2d.1.</th>\n",
" <td id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4row16_col0\" class=\"data row16 col0\" >528.42</td>\n",
" <td id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4row16_col1\" class=\"data row16 col1\" >6217</td>\n",
" <td id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4row16_col2\" class=\"data row16 col2\" >881300.721287</td>\n",
" </tr>\n",
" <tr>\n",
" <th id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4level0_row17\" class=\"row_heading level0 row17\" >logging.error</th>\n",
" <td id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4row17_col0\" class=\"data row17 col0\" >781.83</td>\n",
" <td id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4row17_col1\" class=\"data row17 col1\" >2</td>\n",
" <td id=\"T_9e47f822_951e_11ea_8542_f01898ee5ea4row17_col2\" class=\"data row17 col2\" >nan</td>\n",
" </tr>\n",
" </tbody></table>"
],
"text/plain": [
"<pandas.io.formats.style.Styler at 0x11f5c0700>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"context = zmq.Context()\n",
"addr = \"127.0.0.1\"\n",
"port = \"50020\"\n",
"req = context.socket(zmq.REQ)\n",
"req.connect(f\"tcp://{addr}:{port}\")\n",
"req.send_string('SUB_PORT')\n",
"sub_port = req.recv_string()\n",
"\n",
"sub = context.socket(zmq.SUB)\n",
"sub.connect(f\"tcp://{addr}:{sub_port}\")\n",
"sub.setsockopt_string(zmq.SUBSCRIBE, '')\n",
"\n",
"wait = 1\n",
"\n",
"data = pd.DataFrame(columns=(\"last\", \"count\", \"timestamp\"))\n",
"try:\n",
" t = time.time()\n",
" while True:\n",
" topic = sub.recv_string()\n",
" msg = sub.recv()\n",
" msg = loads(msg, encoding='utf-8')\n",
" now = time.time()\n",
" ts = msg.get(\"timestamp\", np.nan)\n",
" if topic not in data.index:\n",
" data.loc[topic] = {\"last\": now, \"count\": 1, \"timestamp\": ts}\n",
" data.loc[topic, \"last\"] = now\n",
" data.loc[topic, \"count\"] += 1\n",
" data.loc[topic, \"timestamp\"] = ts\n",
" \n",
" if now - t > wait:\n",
" update(\n",
" data.assign(last=now - data[\"last\"])\n",
" .sort_values(by=[\"last\"])\n",
" .style\n",
" .format({\"last\": \"{:.2f}\", \"count\": int})\n",
" .background_gradient(cmap=\"summer\", axis=\"rows\", subset=[\"last\"])\n",
" )\n",
" t = now\n",
"except KeyboardInterrupt:\n",
" pass\n",
"\n",
"del sub\n",
"del req"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Pupil",
"language": "python",
"name": "pupil"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.2"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
Display the source blob
Display the rendered blob
Raw
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment