CINXE.COM

jboner’s gists · GitHub

<!DOCTYPE html> <html lang="en" data-color-mode="auto" data-light-theme="light" data-dark-theme="dark" data-a11y-animated-images="system" data-a11y-link-underlines="true" > <head> <meta charset="utf-8"> <link rel="dns-prefetch" href="https://github.githubassets.com"> <link rel="dns-prefetch" href="https://avatars.githubusercontent.com"> <link rel="dns-prefetch" href="https://github-cloud.s3.amazonaws.com"> <link rel="dns-prefetch" href="https://user-images.githubusercontent.com/"> <link rel="preconnect" href="https://github.githubassets.com" crossorigin> <link rel="preconnect" href="https://avatars.githubusercontent.com"> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/light-7aa84bb7e11e.css" /><link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/dark-f65db3e8d171.css" /><link data-color-theme="dark_dimmed" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_dimmed-a8258e3c6dda.css" /><link data-color-theme="dark_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_high_contrast-7e97d834719c.css" /><link data-color-theme="dark_colorblind" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_colorblind-01d869f460be.css" /><link data-color-theme="light_colorblind" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_colorblind-534f3e971240.css" /><link data-color-theme="light_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_high_contrast-a8cc7d138001.css" /><link data-color-theme="light_tritanopia" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_tritanopia-35e9dfdc4f9f.css" /><link data-color-theme="dark_tritanopia" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_tritanopia-cf4cc5f62dfe.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-primitives-d9abecd14f1e.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-93aded0ee8a1.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/global-8bed0685a4b5.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/github-a954a02d9269.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/profile-a657309cdf66.css" /> <script type="application/json" id="client-env">{"locale":"en","featureFlags":["bypass_copilot_indexing_quota","copilot_immersive_file_preview","copilot_new_references_ui","copilot_bing_skill_ga","copilot_attach_folder_reference","copilot_personal_instructions","copilot_personal_instructions_templates","copilot_chat_repo_custom_instructions_preview","copilot_chat_retry_on_error","copilot_chat_persist_submitted_input","copilot_conversational_ux_history_refs","copilot_chat_shared_chat_input","copilot_chat_shared_topic_indicator","copilot_chat_shared_repo_sso_banner","copilot_editor_upsells","copilot_dotcom_chat_reduce_telemetry","copilot_implicit_context","copilot_no_floating_button","copilot_smell_icebreaker_ux","copilot_read_shared_conversation","dotcom_chat_client_side_skills","copilot_new_markdown_renderer","experimentation_azure_variant_endpoint","failbot_handle_non_errors","geojson_azure_maps","ghost_pilot_confidence_truncation_25","ghost_pilot_confidence_truncation_40","github_models_o3_mini_streaming","hovercard_accessibility","issues_react_remove_placeholders","issues_react_blur_item_picker_on_close","issues_react_include_bots_in_pickers","marketing_pages_search_explore_provider","remove_child_patch","sample_network_conn_type","swp_enterprise_contact_form","site_copilot_vscode_link_update","site_proxima_australia_update","issues_react_create_milestone","issues_react_cache_fix_workaround","lifecycle_label_name_updates"]}</script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/wp-runtime-890f3c3d3caa.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_oddbird_popover-polyfill_dist_popover_js-9da652f58479.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_arianotify-polyfill_ariaNotify-polyfill_js-node_modules_github_mi-3abb8f-d7e6bc799724.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_failbot_failbot_ts-4600dbf2d60a.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/environment-f04cb2a9fc8c.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_primer_behaviors_dist_esm_index_mjs-0dbb79f97f8f.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_selector-observer_dist_index_esm_js-f690fd9ae3d5.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_relative-time-element_dist_index_js-f6da4b3fa34c.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_auto-complete-element_dist_index_js-node_modules_github_catalyst_-8e9f78-a74b4e0a8a6b.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_text-expander-element_dist_index_js-78748950cb0c.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_filter-input-element_dist_index_js-node_modules_github_remote-inp-b5f1d7-a1760ffda83d.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_markdown-toolbar-element_dist_index_js-ceef33f593fa.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_file-attachment-element_dist_index_js-node_modules_primer_view-co-c44a69-f0c8a795d1fd.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/github-elements-44d18ad044b3.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/element-registry-b7096f9a808d.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_braintree_browser-detection_dist_browser-detection_js-node_modules_githu-2906d7-2a07a295af40.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_lit-html_lit-html_js-be8cb88f481b.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_mini-throttle_dist_index_js-node_modules_morphdom_dist_morphdom-e-7c534c-a4a1922eb55f.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_turbo_dist_turbo_es2017-esm_js-e3cbe28f1638.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_remote-form_dist_index_js-node_modules_delegated-events_dist_inde-893f9f-6cf3320416b8.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_color-convert_index_js-e3180fe3bcb3.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_quote-selection_dist_index_js-node_modules_github_session-resume_-947061-205cd97df772.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_updatable-content_updatable-content_ts-a1563f62660e.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_behaviors_task-list_ts-app_assets_modules_github_sso_ts-ui_packages-900dde-f48a418a99d4.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_sticky-scroll-into-view_ts-8fa27fd7fbb6.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_behaviors_ajax-error_ts-app_assets_modules_github_behaviors_include-87a4ae-e2caa5390f5a.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_behaviors_commenting_edit_ts-app_assets_modules_github_behaviors_ht-83c235-783fc7e142e5.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/behaviors-854fa1987fb5.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_delegated-events_dist_index_js-node_modules_github_catalyst_lib_index_js-f6223d90c7ba.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/notifications-global-e12489347ccf.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_delegated-events_dist_index_js-node_modules_github_hotkey_dist_index_js-524e40420665.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_mini-throttle_dist_index_js-node_modules_github_remote-form_dist_-d0eef7-5f58a29a0546.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_form-utils_form-utils_ts-ui_packages_input-navigation-behavior_input-navigation-b-a97423-908328ee27af.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_diffs_blob-lines_ts-app_assets_modules_github_diffs_linkable-line-n-b8c0ea-b7945dd86942.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/gist-28c13361081c.js"></script> <title>jboner’s gists · GitHub</title> <meta name="route-pattern" content="/:user_id(.:format)" data-turbo-transient> <meta name="route-controller" content="gists_users" data-turbo-transient> <meta name="route-action" content="show" data-turbo-transient> <meta name="current-catalog-service-hash" content="56253a530ab9027b25719525dcbe6007461a3202218f6f5dfce5a601c121cbcb"> <meta name="request-id" content="95E6:132947:2845ED:31617D:67B3EACB" data-pjax-transient="true"/><meta name="html-safe-nonce" content="15fe264cf6ad0abd0d4ebaa4fc79388730659f0f7b2c9b96f20a0a78b3012bc0" data-pjax-transient="true"/><meta name="visitor-payload" content="eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiI5NUU2OjEzMjk0NzoyODQ1RUQ6MzE2MTdEOjY3QjNFQUNCIiwidmlzaXRvcl9pZCI6IjcxNjMxNjIwNDQ0NDQ5NjE0ODMiLCJyZWdpb25fZWRnZSI6InNvdXRoZWFzdGFzaWEiLCJyZWdpb25fcmVuZGVyIjoic291dGhlYXN0YXNpYSJ9" data-pjax-transient="true"/><meta name="visitor-hmac" content="964b0f6cb71636550218a77aceec7e206103e495b94232f8a7a0840e084bb801" data-pjax-transient="true"/> <meta name="github-keyboard-shortcuts" content="copilot" data-turbo-transient="true" /> <meta name="selected-link" value="all" data-turbo-transient> <link rel="assets" href="https://github.githubassets.com/"> <meta name="google-site-verification" content="Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I"> <meta name="octolytics-url" content="https://collector.github.com/github/collect" /> <meta name="analytics-location" content="/&lt;user-name&gt;" data-turbo-transient="true" /> <meta name="user-login" content=""> <meta name="viewport" content="width=device-width"> <meta name="description" content="GitHub Gist: star and fork jboner&#39;s gists by creating an account on GitHub."> <link rel="search" type="application/opensearchdescription+xml" href="/opensearch-gist.xml" title="Gist"> <link rel="fluid-icon" href="https://gist.github.com/fluidicon.png" title="GitHub"> <meta property="fb:app_id" content="1401488693436528"> <meta name="apple-itunes-app" content="app-id=1477376905, app-argument=https://gist.github.com/jboner" /> <meta name="twitter:image" content="https://github.com/opengraph.png" /><meta name="twitter:site" content="@github" /><meta name="twitter:card" content="summary_large_image" /><meta name="twitter:title" content="jboner’s gists" /><meta name="twitter:description" content="GitHub Gist: star and fork jboner&#39;s gists by creating an account on GitHub." /> <meta property="og:image" content="https://github.com/opengraph.png" /><meta property="og:image:alt" content="GitHub Gist: star and fork jboner&#39;s gists by creating an account on GitHub." /><meta property="og:site_name" content="Gist" /><meta property="og:type" content="profile" /><meta property="og:title" content="jboner’s gists" /><meta property="og:description" content="GitHub Gist: star and fork jboner&#39;s gists by creating an account on GitHub." /> <meta name="hostname" content="gist.github.com"> <meta name="expected-hostname" content="gist.github.com"> <meta http-equiv="x-pjax-version" content="0f265ef8396cd1962dba2eda868f105296f51594cc2ff5b653c6553989093b61" data-turbo-track="reload"> <meta http-equiv="x-pjax-csp-version" content="ace39c3b6632770952207593607e6e0be0db363435a8b877b1f96abe6430f345" data-turbo-track="reload"> <meta http-equiv="x-pjax-css-version" content="1c71206221e00a0a8e77d94d48d954f34ddbd711c4a0ced954fd49cd786cfa61" data-turbo-track="reload"> <meta http-equiv="x-pjax-js-version" content="12a8aded86f558a96e1c8427138fa449b829e611fbd8701cad0d49ba051978b0" data-turbo-track="reload"> <meta name="turbo-cache-control" content="no-preview" data-turbo-transient=""> <link href="/jboner.atom" rel="alternate" title="atom" type="application/atom+xml"> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/gist-a35fdba7ad1d.css" /> <meta name="turbo-body-classes" content="logged-out env-production page-responsive"> <meta name="browser-stats-url" content="https://api.github.com/_private/browser/stats"> <meta name="browser-errors-url" content="https://api.github.com/_private/browser/errors"> <link rel="mask-icon" href="https://github.githubassets.com/assets/pinned-octocat-093da3e6fa40.svg" color="#000000"> <link rel="alternate icon" class="js-site-favicon" type="image/png" href="https://github.githubassets.com/favicons/favicon.png"> <link rel="icon" class="js-site-favicon" type="image/svg+xml" href="https://github.githubassets.com/favicons/favicon.svg" data-base-href="https://github.githubassets.com/favicons/favicon"> <meta name="theme-color" content="#1e2327"> <meta name="color-scheme" content="light dark" /> </head> <body class="logged-out env-production page-responsive" style="word-wrap: break-word;"> <div data-turbo-body class="logged-out env-production page-responsive" style="word-wrap: break-word;"> <div class="position-relative header-wrapper js-header-wrapper "> <a href="#start-of-content" data-skip-target-assigned="false" class="px-2 py-4 color-bg-accent-emphasis color-fg-on-emphasis show-on-focus js-skip-to-content">Skip to content</a> <span data-view-component="true" class="progress-pjax-loader Progress position-fixed width-full"> <span style="width: 0%;" data-view-component="true" class="Progress-item progress-pjax-loader-bar left-0 top-0 color-bg-accent-emphasis"></span> </span> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/primer-react-8e38c0ecf8b7.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/react-core-218ef2d63cca.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/react-lib-f1bca44e0926.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/octicons-react-611691cca2f6.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_emotion_is-prop-valid_dist_emotion-is-prop-valid_esm_js-node_modules_emo-62da9f-2df2f32ec596.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_mini-throttle_dist_index_js-node_modules_stacktrace-parser_dist_s-e7dcdd-f7cc96ebae76.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_oddbird_popover-polyfill_dist_popover-fn_js-55fea94174bf.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_ui-commands_ui-commands_ts-e571874765ef.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/keyboard-shortcuts-dialog-765cf28766da.js"></script> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react.5a0ffaf77c0db0d0dac2.module.css" /> <react-partial partial-name="keyboard-shortcuts-dialog" data-ssr="false" data-attempted-ssr="false" > <script type="application/json" data-target="react-partial.embeddedData">{"props":{"docsUrl":"https://docs.github.com/get-started/accessibility/keyboard-shortcuts"}}</script> <div data-target="react-partial.reactRoot"></div> </react-partial> <div class="Header js-details-container Details flex-wrap flex-md-nowrap p-responsive" role="banner" > <div class="Header-item d-none d-md-flex"> <a class="Header-link" data-hotkey="g d" aria-label="Gist Homepage " href="/"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-mark-github v-align-middle d-inline-block d-md-none"> <path d="M12.5.75C6.146.75 1 5.896 1 12.25c0 5.089 3.292 9.387 7.863 10.91.575.101.79-.244.79-.546 0-.273-.014-1.178-.014-2.142-2.889.532-3.636-.704-3.866-1.35-.13-.331-.69-1.352-1.18-1.625-.402-.216-.977-.748-.014-.762.906-.014 1.553.834 1.769 1.179 1.035 1.74 2.688 1.25 3.349.948.1-.747.402-1.25.733-1.538-2.559-.287-5.232-1.279-5.232-5.678 0-1.25.445-2.285 1.178-3.09-.115-.288-.517-1.467.115-3.048 0 0 .963-.302 3.163 1.179.92-.259 1.897-.388 2.875-.388.977 0 1.955.13 2.875.388 2.2-1.495 3.162-1.179 3.162-1.179.633 1.581.23 2.76.115 3.048.733.805 1.179 1.825 1.179 3.09 0 4.413-2.688 5.39-5.247 5.678.417.36.776 1.05.776 2.128 0 1.538-.014 2.774-.014 3.162 0 .302.216.662.79.547C20.709 21.637 24 17.324 24 12.25 24 5.896 18.854.75 12.5.75Z"></path> </svg> <svg aria-hidden="true" height="24" viewBox="0 0 68 24" version="1.1" width="68" data-view-component="true" class="octicon octicon-logo-github v-align-middle d-none d-md-inline-block"> <path d="M27.8 17.908h-.03c.013 0 .022.014.035.017l.01-.002-.016-.015Zm.005.017c-.14.001-.49.073-.861.073-1.17 0-1.575-.536-1.575-1.234v-4.652h2.385c.135 0 .24-.12.24-.283V9.302c0-.133-.12-.252-.24-.252H25.37V5.913c0-.119-.075-.193-.21-.193h-3.24c-.136 0-.21.074-.21.193V9.14s-1.636.401-1.741.416a.255.255 0 0 0-.195.253v2.021c0 .164.12.282.255.282h1.665v4.876c0 3.627 2.55 3.998 4.29 3.998.796 0 1.756-.252 1.906-.327.09-.03.135-.134.135-.238v-2.23a.264.264 0 0 0-.219-.265Zm35.549-3.272c0-2.69-1.095-3.047-2.25-2.928-.9.06-1.62.505-1.62.505v5.232s.735.506 1.83.536c1.545.044 2.04-.506 2.04-3.345ZM67 14.415c0 5.099-1.665 6.555-4.576 6.555-2.46 0-3.78-1.233-3.78-1.233s-.06.683-.135.773c-.045.089-.12.118-.21.118h-2.22c-.15 0-.286-.119-.286-.252l.03-16.514a.26.26 0 0 1 .255-.252h3.196a.26.26 0 0 1 .255.252v5.604s1.23-.788 3.03-.788l-.015-.03c1.8 0 4.456.67 4.456 5.767ZM53.918 9.05h-3.15c-.165 0-.255.119-.255.282v8.086s-.826.58-1.95.58c-1.126 0-1.456-.506-1.456-1.62v-7.06a.262.262 0 0 0-.255-.254h-3.21a.262.262 0 0 0-.256.253v7.596c0 3.27 1.846 4.087 4.381 4.087 2.085 0 3.78-1.145 3.78-1.145s.076.58.12.67c.03.074.136.133.24.133h2.011a.243.243 0 0 0 .255-.253l.03-11.103c0-.133-.12-.252-.285-.252Zm-35.556-.015h-3.195c-.135 0-.255.134-.255.297v10.91c0 .297.195.401.45.401h2.88c.3 0 .375-.134.375-.401V9.287a.262.262 0 0 0-.255-.252ZM16.787 4.01c-1.155 0-2.07.907-2.07 2.051 0 1.145.915 2.051 2.07 2.051a2.04 2.04 0 0 0 2.04-2.05 2.04 2.04 0 0 0-2.04-2.052Zm24.74-.372H38.36a.262.262 0 0 0-.255.253v6.08H33.14v-6.08a.262.262 0 0 0-.255-.253h-3.196a.262.262 0 0 0-.255.253v16.514c0 .133.135.252.255.252h3.196a.262.262 0 0 0 .255-.253v-7.06h4.966l-.03 7.06c0 .134.12.253.255.253h3.195a.262.262 0 0 0 .255-.253V3.892a.262.262 0 0 0-.255-.253Zm-28.31 7.313v8.532c0 .06-.015.163-.09.193 0 0-1.875 1.323-4.966 1.323C4.426 21 0 19.84 0 12.2S3.87 2.986 7.651 3c3.27 0 4.59.728 4.8.862.06.075.09.134.09.208l-.63 2.646c0 .134-.134.297-.3.253-.54-.164-1.35-.49-3.255-.49-2.205 0-4.575.623-4.575 5.543s2.25 5.5 3.87 5.5c1.38 0 1.875-.164 1.875-.164V13.94H7.321c-.165 0-.285-.12-.285-.253v-2.735c0-.134.12-.252.285-.252h5.61c.166 0 .286.118.286.252Z"></path> </svg> <svg aria-hidden="true" height="24" viewBox="0 0 38 24" version="1.1" width="38" data-view-component="true" class="octicon octicon-logo-gist v-align-middle d-none d-md-inline-block"> <path d="M7.05 13.095v-1.5h5.28v8.535c-1.17.555-2.925.96-5.385.96C1.665 21.09 0 17.055 0 12.045S1.695 3 6.945 3c2.43 0 3.96.495 4.92.99v1.575c-1.83-.75-3-1.095-4.92-1.095-3.855 0-5.22 3.315-5.22 7.59s1.365 7.575 5.205 7.575c1.335 0 2.97-.105 3.795-.51v-6.03H7.05Zm16.47 1.035h.045c3.33.3 4.125 1.425 4.125 3.345 0 1.815-1.14 3.615-4.71 3.615-1.125 0-2.745-.285-3.495-.585v-1.41c.705.255 1.83.54 3.495.54 2.43 0 3.09-1.035 3.09-2.13 0-1.065-.33-1.815-2.655-2.01-3.39-.3-4.095-1.5-4.095-3.12 0-1.665 1.08-3.465 4.38-3.465 1.095 0 2.34.135 3.375.585v1.41c-.915-.3-1.83-.54-3.405-.54-2.325 0-2.82.855-2.82 2.01 0 1.035.42 1.56 2.67 1.755Zm12.87-4.995v1.275h-3.63v7.305c0 1.425.795 2.01 2.25 2.01.3 0 .63 0 .915-.045v1.335c-.255.045-.75.075-1.035.075-1.965 0-3.75-.9-3.75-3.195v-7.5H28.8v-.72l2.34-.66V5.85l1.62-.465v3.75h3.63ZM16.635 9.09v9.615c0 .81.285 1.05 1.005 1.05v1.335c-1.71 0-2.58-.705-2.58-2.58V9.09h1.575Zm.375-3.495c0 .66-.51 1.17-1.17 1.17a1.14 1.14 0 0 1-1.155-1.17c0-.66.48-1.17 1.155-1.17s1.17.51 1.17 1.17Z"></path> </svg> </a> </div> <div class="Header-item d-md-none"> <button aria-label="Toggle navigation" aria-expanded="false" type="button" data-view-component="true" class="Header-link js-details-target btn-link"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-three-bars"> <path d="M3.75 5.25a.75.75 0 0 0 0 1.5h16.5a.75.75 0 0 0 0-1.5H3.75Zm0 6a.75.75 0 0 0 0 1.5h16.5a.75.75 0 0 0 0-1.5H3.75Zm0 6a.75.75 0 0 0 0 1.5h16.5a.75.75 0 0 0 0-1.5H3.75Z"></path> </svg> </button> </div> <div class="Header-item Header-item--full js-site-search flex-column flex-md-row width-full flex-order-2 flex-md-order-none mr-0 mr-md-3 mt-3 mt-md-0 Details-content--hidden-not-important d-md-flex"> <div class="header-search flex-self-stretch flex-md-self-auto mr-0 mr-md-3 mb-3 mb-md-0"> <!-- '"` --><!-- </textarea></xmp> --></option></form><form class="position-relative js-quicksearch-form" role="search" aria-label="Site" data-turbo="false" action="/search" accept-charset="UTF-8" method="get"> <div class="header-search-wrapper form-control input-sm js-chromeless-input-container"> <input type="text" class="form-control input-sm js-site-search-focus header-search-input" data-hotkey="s,/" name="q" aria-label="Search" placeholder="Search…" autocorrect="off" autocomplete="off" autocapitalize="off"> </div> </form></div> <nav aria-label="Global" class="d-flex flex-column flex-md-row flex-self-stretch flex-md-self-auto"> <a class="Header-link mr-0 mr-md-3 py-2 py-md-0 border-top border-md-top-0 border-white-fade" data-ga-click="Header, go to all gists, text:all gists" href="/discover">All gists</a> <a class="Header-link mr-0 mr-md-3 py-2 py-md-0 border-top border-md-top-0 border-white-fade" data-ga-click="Header, go to GitHub, text:Back to GitHub" href="https://github.com">Back to GitHub</a> <a class="Header-link d-block d-md-none mr-0 mr-md-3 py-2 py-md-0 border-top border-md-top-0 border-white-fade" data-ga-click="Header, sign in" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;gist header&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;LOG_IN&quot;,&quot;originating_url&quot;:&quot;https://gist.github.com/jboner&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="729d6206fb957d6d0a0bc9c568f69a5ecca5608b6ab97fdf33ddd09c41f04921" href="https://gist.github.com/auth/github?return_to=https%3A%2F%2Fgist.github.com%2Fjboner"> Sign in </a> <a class="Header-link d-block d-md-none mr-0 mr-md-3 py-2 py-md-0 border-top border-md-top-0 border-white-fade" data-ga-click="Header, sign up" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;gist header&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;originating_url&quot;:&quot;https://gist.github.com/jboner&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="89f1db09431b9718eb1fa9f597c10ceb10c7b604bcf475950a13d745bf509686" href="/join?return_to=https%3A%2F%2Fgist.github.com%2Fjboner&amp;source=header-gist"> Sign up </a></nav> </div> <div class="Header-item Header-item--full flex-justify-center d-md-none position-relative"> <a class="Header-link" data-hotkey="g d" aria-label="Gist Homepage " href="/"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-mark-github v-align-middle d-inline-block d-md-none"> <path d="M12.5.75C6.146.75 1 5.896 1 12.25c0 5.089 3.292 9.387 7.863 10.91.575.101.79-.244.79-.546 0-.273-.014-1.178-.014-2.142-2.889.532-3.636-.704-3.866-1.35-.13-.331-.69-1.352-1.18-1.625-.402-.216-.977-.748-.014-.762.906-.014 1.553.834 1.769 1.179 1.035 1.74 2.688 1.25 3.349.948.1-.747.402-1.25.733-1.538-2.559-.287-5.232-1.279-5.232-5.678 0-1.25.445-2.285 1.178-3.09-.115-.288-.517-1.467.115-3.048 0 0 .963-.302 3.163 1.179.92-.259 1.897-.388 2.875-.388.977 0 1.955.13 2.875.388 2.2-1.495 3.162-1.179 3.162-1.179.633 1.581.23 2.76.115 3.048.733.805 1.179 1.825 1.179 3.09 0 4.413-2.688 5.39-5.247 5.678.417.36.776 1.05.776 2.128 0 1.538-.014 2.774-.014 3.162 0 .302.216.662.79.547C20.709 21.637 24 17.324 24 12.25 24 5.896 18.854.75 12.5.75Z"></path> </svg> <svg aria-hidden="true" height="24" viewBox="0 0 68 24" version="1.1" width="68" data-view-component="true" class="octicon octicon-logo-github v-align-middle d-none d-md-inline-block"> <path d="M27.8 17.908h-.03c.013 0 .022.014.035.017l.01-.002-.016-.015Zm.005.017c-.14.001-.49.073-.861.073-1.17 0-1.575-.536-1.575-1.234v-4.652h2.385c.135 0 .24-.12.24-.283V9.302c0-.133-.12-.252-.24-.252H25.37V5.913c0-.119-.075-.193-.21-.193h-3.24c-.136 0-.21.074-.21.193V9.14s-1.636.401-1.741.416a.255.255 0 0 0-.195.253v2.021c0 .164.12.282.255.282h1.665v4.876c0 3.627 2.55 3.998 4.29 3.998.796 0 1.756-.252 1.906-.327.09-.03.135-.134.135-.238v-2.23a.264.264 0 0 0-.219-.265Zm35.549-3.272c0-2.69-1.095-3.047-2.25-2.928-.9.06-1.62.505-1.62.505v5.232s.735.506 1.83.536c1.545.044 2.04-.506 2.04-3.345ZM67 14.415c0 5.099-1.665 6.555-4.576 6.555-2.46 0-3.78-1.233-3.78-1.233s-.06.683-.135.773c-.045.089-.12.118-.21.118h-2.22c-.15 0-.286-.119-.286-.252l.03-16.514a.26.26 0 0 1 .255-.252h3.196a.26.26 0 0 1 .255.252v5.604s1.23-.788 3.03-.788l-.015-.03c1.8 0 4.456.67 4.456 5.767ZM53.918 9.05h-3.15c-.165 0-.255.119-.255.282v8.086s-.826.58-1.95.58c-1.126 0-1.456-.506-1.456-1.62v-7.06a.262.262 0 0 0-.255-.254h-3.21a.262.262 0 0 0-.256.253v7.596c0 3.27 1.846 4.087 4.381 4.087 2.085 0 3.78-1.145 3.78-1.145s.076.58.12.67c.03.074.136.133.24.133h2.011a.243.243 0 0 0 .255-.253l.03-11.103c0-.133-.12-.252-.285-.252Zm-35.556-.015h-3.195c-.135 0-.255.134-.255.297v10.91c0 .297.195.401.45.401h2.88c.3 0 .375-.134.375-.401V9.287a.262.262 0 0 0-.255-.252ZM16.787 4.01c-1.155 0-2.07.907-2.07 2.051 0 1.145.915 2.051 2.07 2.051a2.04 2.04 0 0 0 2.04-2.05 2.04 2.04 0 0 0-2.04-2.052Zm24.74-.372H38.36a.262.262 0 0 0-.255.253v6.08H33.14v-6.08a.262.262 0 0 0-.255-.253h-3.196a.262.262 0 0 0-.255.253v16.514c0 .133.135.252.255.252h3.196a.262.262 0 0 0 .255-.253v-7.06h4.966l-.03 7.06c0 .134.12.253.255.253h3.195a.262.262 0 0 0 .255-.253V3.892a.262.262 0 0 0-.255-.253Zm-28.31 7.313v8.532c0 .06-.015.163-.09.193 0 0-1.875 1.323-4.966 1.323C4.426 21 0 19.84 0 12.2S3.87 2.986 7.651 3c3.27 0 4.59.728 4.8.862.06.075.09.134.09.208l-.63 2.646c0 .134-.134.297-.3.253-.54-.164-1.35-.49-3.255-.49-2.205 0-4.575.623-4.575 5.543s2.25 5.5 3.87 5.5c1.38 0 1.875-.164 1.875-.164V13.94H7.321c-.165 0-.285-.12-.285-.253v-2.735c0-.134.12-.252.285-.252h5.61c.166 0 .286.118.286.252Z"></path> </svg> <svg aria-hidden="true" height="24" viewBox="0 0 38 24" version="1.1" width="38" data-view-component="true" class="octicon octicon-logo-gist v-align-middle d-none d-md-inline-block"> <path d="M7.05 13.095v-1.5h5.28v8.535c-1.17.555-2.925.96-5.385.96C1.665 21.09 0 17.055 0 12.045S1.695 3 6.945 3c2.43 0 3.96.495 4.92.99v1.575c-1.83-.75-3-1.095-4.92-1.095-3.855 0-5.22 3.315-5.22 7.59s1.365 7.575 5.205 7.575c1.335 0 2.97-.105 3.795-.51v-6.03H7.05Zm16.47 1.035h.045c3.33.3 4.125 1.425 4.125 3.345 0 1.815-1.14 3.615-4.71 3.615-1.125 0-2.745-.285-3.495-.585v-1.41c.705.255 1.83.54 3.495.54 2.43 0 3.09-1.035 3.09-2.13 0-1.065-.33-1.815-2.655-2.01-3.39-.3-4.095-1.5-4.095-3.12 0-1.665 1.08-3.465 4.38-3.465 1.095 0 2.34.135 3.375.585v1.41c-.915-.3-1.83-.54-3.405-.54-2.325 0-2.82.855-2.82 2.01 0 1.035.42 1.56 2.67 1.755Zm12.87-4.995v1.275h-3.63v7.305c0 1.425.795 2.01 2.25 2.01.3 0 .63 0 .915-.045v1.335c-.255.045-.75.075-1.035.075-1.965 0-3.75-.9-3.75-3.195v-7.5H28.8v-.72l2.34-.66V5.85l1.62-.465v3.75h3.63ZM16.635 9.09v9.615c0 .81.285 1.05 1.005 1.05v1.335c-1.71 0-2.58-.705-2.58-2.58V9.09h1.575Zm.375-3.495c0 .66-.51 1.17-1.17 1.17a1.14 1.14 0 0 1-1.155-1.17c0-.66.48-1.17 1.155-1.17s1.17.51 1.17 1.17Z"></path> </svg> </a> </div> <div class="Header-item f4 mr-0" role="navigation" aria-label="Sign in or sign up"> <a class="Header-link no-underline mr-3" data-ga-click="Header, sign in" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;gist header&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;LOG_IN&quot;,&quot;originating_url&quot;:&quot;https://gist.github.com/jboner&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="729d6206fb957d6d0a0bc9c568f69a5ecca5608b6ab97fdf33ddd09c41f04921" href="https://gist.github.com/auth/github?return_to=https%3A%2F%2Fgist.github.com%2Fjboner"> Sign&nbsp;in </a> <a class="Header-link d-inline-block no-underline border color-border-default rounded px-2 py-1" data-ga-click="Header, sign up" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;gist header&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;originating_url&quot;:&quot;https://gist.github.com/jboner&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="89f1db09431b9718eb1fa9f597c10ceb10c7b604bcf475950a13d745bf509686" href="/join?return_to=https%3A%2F%2Fgist.github.com%2Fjboner&amp;source=header-gist"> Sign&nbsp;up </a> </div> </div> <div hidden="hidden" data-view-component="true" class="js-stale-session-flash stale-session-flash flash flash-warn flash-full"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert"> <path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path> </svg> <span class="js-stale-session-flash-signed-in" hidden>You signed in with another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span> <span class="js-stale-session-flash-signed-out" hidden>You signed out in another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span> <span class="js-stale-session-flash-switched" hidden>You switched accounts on another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span> <button id="icon-button-dfaafc6f-20c1-4e14-a8bf-528fcfccadb9" aria-labelledby="tooltip-f8b5c341-bc0b-415c-8dc9-663ba0dc3f1f" type="button" data-view-component="true" class="Button Button--iconOnly Button--invisible Button--medium flash-close js-flash-close"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x Button-visual"> <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path> </svg> </button><tool-tip id="tooltip-f8b5c341-bc0b-415c-8dc9-663ba0dc3f1f" for="icon-button-dfaafc6f-20c1-4e14-a8bf-528fcfccadb9" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute">Dismiss alert</tool-tip> </div> </div> <div id="start-of-content" class="show-on-focus"></div> <div id="js-flash-container" class="flash-container" data-turbo-replace> <template class="js-flash-template"> <div class="flash flash-full {{ className }}"> <div > <button autofocus class="flash-close js-flash-close" type="button" aria-label="Dismiss this message"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x"> <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path> </svg> </button> <div aria-atomic="true" role="alert" class="js-flash-alert"> <div>{{ message }}</div> </div> </div> </div> </template> </div> <div class="application-main " data-commit-hovercards-enabled data-discussion-hovercards-enabled data-issue-and-pr-hovercards-enabled data-project-hovercards-enabled > <div itemscope itemtype="http://schema.org/Code"> <main id="gist-pjax-container"> <div class="gist-detail-intro gist-banner pb-3"> <div class="text-center container-lg px-3"> <p class="lead"> Instantly share code, notes, and snippets. </p> </div> </div> <div class="container-xl px-3 px-md-4 px-lg-5 mt-4"> <div class="gutter d-flex flex-md-row flex-column"> <div class="h-card col-md-3 col-12" itemscope itemtype="http://schema.org/Person"> <div class="js-profile-editable-replace"> <div class="clearfix d-flex d-md-block flex-items-center mb-4 mb-md-0"> <div class="position-relative d-inline-block col-2 col-md-12 mr-3 mr-md-0 flex-shrink-0" style="z-index:4;" > <a class="d-block" itemprop="image" href="https://avatars.githubusercontent.com/u/10701?v=4"><img style="height:auto;" alt="View jboner&#39;s full-sized avatar" src="https://avatars.githubusercontent.com/u/10701?v=4" width="260" height="260" class="avatar avatar-user width-full border color-bg-default" /></a> </div> <div class="vcard-names-container float-left js-profile-editable-names col-12 py-3" > <h1 class="vcard-names "> <span class="p-name vcard-fullname d-block overflow-hidden" itemprop="name"> Jonas Bonér </span> <span class="p-nickname vcard-username d-block" itemprop="additionalName"> jboner </span> </h1> </div> </div> <div class="d-flex flex-column"> <div class="flex-order-1 flex-md-order-none"> </div> <div class="js-profile-editable-area d-flex flex-column d-md-block"> <div class="p-note user-profile-bio mb-3 js-user-profile-bio f4" data-bio-text="Founder and CTO of Akka. Creator of the @Akka Project, the @AspectWerkz AOP compiler, and many other OSS projects. " ><div>Founder and CTO of Akka. Creator of the <a class="user-mention notranslate" data-hovercard-type="organization" data-hovercard-url="/orgs/akka/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="https://github.com/akka">@akka</a> Project, the @AspectWerkz AOP compiler, and many other OSS projects. </div></div> <div class="flex-order-1 flex-md-order-none mt-2 mt-md-0"> <div class="mb-3"> <a class="Link--secondary no-underline no-wrap" href="https://github.com/jboner?tab=followers"> <svg text="muted" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-people"> <path d="M2 5.5a3.5 3.5 0 1 1 5.898 2.549 5.508 5.508 0 0 1 3.034 4.084.75.75 0 1 1-1.482.235 4 4 0 0 0-7.9 0 .75.75 0 0 1-1.482-.236A5.507 5.507 0 0 1 3.102 8.05 3.493 3.493 0 0 1 2 5.5ZM11 4a3.001 3.001 0 0 1 2.22 5.018 5.01 5.01 0 0 1 2.56 3.012.749.749 0 0 1-.885.954.752.752 0 0 1-.549-.514 3.507 3.507 0 0 0-2.522-2.372.75.75 0 0 1-.574-.73v-.352a.75.75 0 0 1 .416-.672A1.5 1.5 0 0 0 11 5.5.75.75 0 0 1 11 4Zm-5.5-.5a2 2 0 1 0-.001 3.999A2 2 0 0 0 5.5 3.5Z"></path> </svg> <span class="text-bold color-fg-default">1.8k</span> followers </a> &middot; <a class="Link--secondary no-underline no-wrap" href="https://github.com/jboner?tab=following"> <span class="text-bold color-fg-default">1</span> following </a> </div> </div> <ul class="vcard-details"> <li class="vcard-detail pt-1 hide-sm hide-md" itemprop="worksFor" show_title="false" aria-label="Organization: Akka"><svg class="octicon octicon-organization" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="M1.75 16A1.75 1.75 0 0 1 0 14.25V1.75C0 .784.784 0 1.75 0h8.5C11.216 0 12 .784 12 1.75v12.5c0 .085-.006.168-.018.25h2.268a.25.25 0 0 0 .25-.25V8.285a.25.25 0 0 0-.111-.208l-1.055-.703a.749.749 0 1 1 .832-1.248l1.055.703c.487.325.779.871.779 1.456v5.965A1.75 1.75 0 0 1 14.25 16h-3.5a.766.766 0 0 1-.197-.026c-.099.017-.2.026-.303.026h-3a.75.75 0 0 1-.75-.75V14h-1v1.25a.75.75 0 0 1-.75.75Zm-.25-1.75c0 .138.112.25.25.25H4v-1.25a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 .75.75v1.25h2.25a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25ZM3.75 6h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5ZM3 3.75A.75.75 0 0 1 3.75 3h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 3 3.75Zm4 3A.75.75 0 0 1 7.75 6h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 7 6.75ZM7.75 3h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5ZM3 9.75A.75.75 0 0 1 3.75 9h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 3 9.75ZM7.75 9h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5Z"></path></svg> <span class="p-org"><div>Akka</div></span> </li> <li class="vcard-detail pt-1 hide-sm hide-md" itemprop="homeLocation" show_title="false" aria-label="Home location: Uppsala, Sweden"><svg class="octicon octicon-location" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m12.596 11.596-3.535 3.536a1.5 1.5 0 0 1-2.122 0l-3.535-3.536a6.5 6.5 0 1 1 9.192-9.193 6.5 6.5 0 0 1 0 9.193Zm-1.06-8.132v-.001a5 5 0 1 0-7.072 7.072L8 14.07l3.536-3.534a5 5 0 0 0 0-7.072ZM8 9a2 2 0 1 1-.001-3.999A2 2 0 0 1 8 9Z"></path></svg> <span class="p-label">Uppsala, Sweden</span> </li> <li itemprop="url" data-test-selector="profile-website-url" class="vcard-detail pt-1 "><svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link"> <path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path> </svg> <a rel="nofollow me" class="Link--primary" href="http://jonasboner.com">http://jonasboner.com</a> </li> <li itemprop="social" class="vcard-detail pt-1 "><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 16 16" width="16" height="16" role="img" aria-labelledby="aqd9z3a80rwhp5gxu0oui6l5zgls5h13" class="octicon"><title id="aqd9z3a80rwhp5gxu0oui6l5zgls5h13">X</title><path fill="currentColor" d="M9.332 6.925 14.544 1h-1.235L8.783 6.145 5.17 1H1l5.466 7.78L1 14.993h1.235l4.78-5.433 3.816 5.433H15L9.332 6.925ZM7.64 8.848l-.554-.775L2.68 1.91h1.897l3.556 4.975.554.775 4.622 6.466h-1.897L7.64 8.848Z"></path></svg> <a rel="nofollow me" class="Link--primary" style="overflow-wrap: anywhere" href="https://twitter.com/jboner">@jboner</a> </li> <li itemprop="social" class="vcard-detail pt-1 "><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16" fill="none" role="img" aria-labelledby="adpg6gwgaqsx5k61c8trutcs9715as0t" class="octicon"><title id="adpg6gwgaqsx5k61c8trutcs9715as0t">LinkedIn</title> <g clip-path="url(#clip0_202_91845)"> <path d="M14.5455 0H1.45455C0.650909 0 0 0.650909 0 1.45455V14.5455C0 15.3491 0.650909 16 1.45455 16H14.5455C15.3491 16 16 15.3491 16 14.5455V1.45455C16 0.650909 15.3491 0 14.5455 0ZM5.05746 13.0909H2.912V6.18764H5.05746V13.0909ZM3.96291 5.20073C3.27127 5.20073 2.712 4.64 2.712 3.94982C2.712 3.25964 3.272 2.69964 3.96291 2.69964C4.65236 2.69964 5.21309 3.26036 5.21309 3.94982C5.21309 4.64 4.65236 5.20073 3.96291 5.20073ZM13.0938 13.0909H10.9498V9.73382C10.9498 8.93309 10.9353 7.90327 9.83491 7.90327C8.71855 7.90327 8.54691 8.77527 8.54691 9.67564V13.0909H6.40291V6.18764H8.46109V7.13091H8.49018C8.77673 6.58836 9.47636 6.016 10.52 6.016C12.6924 6.016 13.0938 7.44582 13.0938 9.30473V13.0909V13.0909Z" fill="currentColor"></path> </g> </svg> <a rel="nofollow me" class="Link--primary" style="overflow-wrap: anywhere" href="https://www.linkedin.com/in/jonasboner/">in/jonasboner</a> </li> </ul> </div> </div> </div> <a class="btn width-full text-center mt-3" href="https://github.com/jboner"> View GitHub Profile </a> </div> <div class="col-9 col-md-9 col-12"> <div class="pagehead py-0 border-0 mt-md-0 mt-6 mr-md-0 mr-n3 ml-md-0 ml-n3"> <div class="px-3 mb-2"> <nav aria-label="Gist tab" data-view-component="true" class="UnderlineNav"> <ul data-view-component="true" class="UnderlineNav-body list-style-none"> <li data-view-component="true" class="d-inline-flex"> <a href="/jboner" aria-current="page" data-view-component="true" class="UnderlineNav-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code-square UnderlineNav-octicon"> <path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25Zm7.47 3.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L10.69 8 9.22 6.53a.75.75 0 0 1 0-1.06ZM6.78 6.53 5.31 8l1.47 1.47a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path> </svg> <span data-view-component="true">All gists</span> <span title="37" data-view-component="true" class="Counter">37</span> </a></li> <li data-view-component="true" class="d-inline-flex"> <a href="/jboner/forked" data-view-component="true" class="UnderlineNav-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-git-branch UnderlineNav-octicon"> <path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"></path> </svg> <span data-view-component="true">Forked</span> <span title="8" data-view-component="true" class="Counter">8</span> </a></li> <li data-view-component="true" class="d-inline-flex"> <a href="/jboner/starred" data-view-component="true" class="UnderlineNav-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-star UnderlineNav-octicon"> <path d="M8 .25a.75.75 0 0 1 .673.418l1.882 3.815 4.21.612a.75.75 0 0 1 .416 1.279l-3.046 2.97.719 4.192a.751.751 0 0 1-1.088.791L8 12.347l-3.766 1.98a.75.75 0 0 1-1.088-.79l.72-4.194L.818 6.374a.75.75 0 0 1 .416-1.28l4.21-.611L7.327.668A.75.75 0 0 1 8 .25Zm0 2.445L6.615 5.5a.75.75 0 0 1-.564.41l-3.097.45 2.24 2.184a.75.75 0 0 1 .216.664l-.528 3.084 2.769-1.456a.75.75 0 0 1 .698 0l2.77 1.456-.53-3.084a.75.75 0 0 1 .216-.664l2.24-2.183-3.096-.45a.75.75 0 0 1-.564-.41L8 2.694Z"></path> </svg> <span data-view-component="true">Starred</span> <span title="75" data-view-component="true" class="Counter">75</span> </a></li> </ul> <div data-view-component="true" class="UnderlineNav-actions"> <div class="d-lg-flex d-none"> <div class="ml-2 mr-2"> <action-menu data-select-variant="single" data-dynamic-label="" data-dynamic-label-prefix="Sort" data-view-component="true"> <focus-group direction="vertical" mnemonics retain> <button id="action-menu-0409917a-cf7b-4be2-bf69-5adb85d85774-button" popovertarget="action-menu-0409917a-cf7b-4be2-bf69-5adb85d85774-overlay" aria-controls="action-menu-0409917a-cf7b-4be2-bf69-5adb85d85774-list" aria-haspopup="true" type="button" data-view-component="true" class="Button--secondary Button--small Button"> <span class="Button-content"> <span class="Button-label">Sort</span> </span> <span class="Button-visual Button-trailingAction"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-triangle-down"> <path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"></path> </svg> </span> </button> <anchored-position data-target="action-menu.overlay" id="action-menu-0409917a-cf7b-4be2-bf69-5adb85d85774-overlay" anchor="action-menu-0409917a-cf7b-4be2-bf69-5adb85d85774-button" align="end" side="outside-bottom" anchor-offset="normal" popover="auto" data-view-component="true"> <div data-view-component="true" class="Overlay Overlay--size-auto"> <div data-view-component="true" class="Overlay-body Overlay-body--paddingNone"> <action-list> <div data-view-component="true"> <ul aria-labelledby="action-menu-0409917a-cf7b-4be2-bf69-5adb85d85774-button" id="action-menu-0409917a-cf7b-4be2-bf69-5adb85d85774-list" role="menu" data-view-component="true" class="ActionListWrap--inset ActionListWrap"> <li data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-652e58ed-b206-4359-a6a1-0ee1c9468430" href="https://gist.github.com/jboner?direction=desc&amp;sort=created" role="menuitemradio" aria-checked="true" data-view-component="true" class="ActionListContent"> <span class="ActionListItem-visual ActionListItem-action--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check ActionListItem-singleSelectCheckmark"> <path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Recently created </span> </a> </li> <li data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-0dff0273-7a9c-4209-bca8-89f6a007823a" href="https://gist.github.com/jboner?direction=asc&amp;sort=created" role="menuitemradio" aria-checked="false" data-view-component="true" class="ActionListContent"> <span class="ActionListItem-visual ActionListItem-action--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check ActionListItem-singleSelectCheckmark"> <path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Least recently created </span> </a> </li> <li data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-fa35b5c9-8c5f-4a34-b86a-46deced58640" href="https://gist.github.com/jboner?direction=desc&amp;sort=updated" role="menuitemradio" aria-checked="false" data-view-component="true" class="ActionListContent"> <span class="ActionListItem-visual ActionListItem-action--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check ActionListItem-singleSelectCheckmark"> <path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Recently updated </span> </a> </li> <li data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-c1db8541-77f1-4179-ae6f-f402a367fd1b" href="https://gist.github.com/jboner?direction=asc&amp;sort=updated" role="menuitemradio" aria-checked="false" data-view-component="true" class="ActionListContent"> <span class="ActionListItem-visual ActionListItem-action--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check ActionListItem-singleSelectCheckmark"> <path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Least recently updated </span> </a> </li> </ul> </div></action-list> </div> </div></anchored-position> </focus-group> </action-menu> </div> </div> </div> </nav> </div> <ul class="d-flex d-lg-none px-3 mb-2 pagehead-actions float-none"> <li> <action-menu data-select-variant="single" data-dynamic-label="" data-dynamic-label-prefix="Sort" data-view-component="true"> <focus-group direction="vertical" mnemonics retain> <button id="action-menu-3be52d27-87b1-4dc8-bfbc-783db7c9bd00-button" popovertarget="action-menu-3be52d27-87b1-4dc8-bfbc-783db7c9bd00-overlay" aria-controls="action-menu-3be52d27-87b1-4dc8-bfbc-783db7c9bd00-list" aria-haspopup="true" type="button" data-view-component="true" class="Button--secondary Button--small Button"> <span class="Button-content"> <span class="Button-label">Sort</span> </span> <span class="Button-visual Button-trailingAction"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-triangle-down"> <path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"></path> </svg> </span> </button> <anchored-position data-target="action-menu.overlay" id="action-menu-3be52d27-87b1-4dc8-bfbc-783db7c9bd00-overlay" anchor="action-menu-3be52d27-87b1-4dc8-bfbc-783db7c9bd00-button" align="end" side="outside-bottom" anchor-offset="normal" popover="auto" data-view-component="true"> <div data-view-component="true" class="Overlay Overlay--size-auto"> <div data-view-component="true" class="Overlay-body Overlay-body--paddingNone"> <action-list> <div data-view-component="true"> <ul aria-labelledby="action-menu-3be52d27-87b1-4dc8-bfbc-783db7c9bd00-button" id="action-menu-3be52d27-87b1-4dc8-bfbc-783db7c9bd00-list" role="menu" data-view-component="true" class="ActionListWrap--inset ActionListWrap"> <li data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-9fb04112-7878-41d1-aa0d-dd4bd8ade518" href="https://gist.github.com/jboner?direction=desc&amp;sort=created" role="menuitemradio" aria-checked="true" data-view-component="true" class="ActionListContent"> <span class="ActionListItem-visual ActionListItem-action--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check ActionListItem-singleSelectCheckmark"> <path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Recently created </span> </a> </li> <li data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-bd2891d3-3e75-4cbd-8f4c-0b584ecf80c1" href="https://gist.github.com/jboner?direction=asc&amp;sort=created" role="menuitemradio" aria-checked="false" data-view-component="true" class="ActionListContent"> <span class="ActionListItem-visual ActionListItem-action--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check ActionListItem-singleSelectCheckmark"> <path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Least recently created </span> </a> </li> <li data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-5fdbd54e-eb52-4d71-89cf-7f988fe2b07c" href="https://gist.github.com/jboner?direction=desc&amp;sort=updated" role="menuitemradio" aria-checked="false" data-view-component="true" class="ActionListContent"> <span class="ActionListItem-visual ActionListItem-action--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check ActionListItem-singleSelectCheckmark"> <path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Recently updated </span> </a> </li> <li data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-883ec724-fd24-44d6-88a8-728f466c9dfd" href="https://gist.github.com/jboner?direction=asc&amp;sort=updated" role="menuitemradio" aria-checked="false" data-view-component="true" class="ActionListContent"> <span class="ActionListItem-visual ActionListItem-action--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check ActionListItem-singleSelectCheckmark"> <path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Least recently updated </span> </a> </li> </ul> </div></action-list> </div> </div></anchored-position> </focus-group> </action-menu> </li> </ul> </div> <div class="gist-snippet"> <div class="gist-snippet-meta d-flex flex-lg-row flex-column width-full"> <ul class="col-lg-5 col-12 flex-order-2 f6 mt-lg-0 mt-3 mb-lg-0 mb-2 d-flex flex-lg-justify-end"> <li class="d-inline-block mr-lg-3 mr-2"> <a class="Link--muted" href="/jboner/554df0fcbcc84315b26c655389b323c8"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code-square"> <path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25Zm7.47 3.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L10.69 8 9.22 6.53a.75.75 0 0 1 0-1.06ZM6.78 6.53 5.31 8l1.47 1.47a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path> </svg> 1 file </a> </li> <li class="d-inline-block mr-lg-3 mr-2"> <a class="Link--muted" href="/jboner/554df0fcbcc84315b26c655389b323c8/forks"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo-forked"> <path d="M5 5.372v.878c0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75v-.878a2.25 2.25 0 1 1 1.5 0v.878a2.25 2.25 0 0 1-2.25 2.25h-1.5v2.128a2.251 2.251 0 1 1-1.5 0V8.5h-1.5A2.25 2.25 0 0 1 3.5 6.25v-.878a2.25 2.25 0 1 1 1.5 0ZM5 3.25a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Zm6.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm-3 8.75a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Z"></path> </svg> 1 fork </a> </li> <li class="d-inline-block mr-lg-3 mr-2"> <a class="Link--muted" href="/jboner/554df0fcbcc84315b26c655389b323c8#comments"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-comment"> <path d="M1 2.75C1 1.784 1.784 1 2.75 1h10.5c.966 0 1.75.784 1.75 1.75v7.5A1.75 1.75 0 0 1 13.25 12H9.06l-2.573 2.573A1.458 1.458 0 0 1 4 13.543V12H2.75A1.75 1.75 0 0 1 1 10.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h4.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path> </svg> 0 comments </a> </li> <li class="d-inline-block"> <a class="Link--muted" href="/jboner/554df0fcbcc84315b26c655389b323c8/stargazers"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-star"> <path d="M8 .25a.75.75 0 0 1 .673.418l1.882 3.815 4.21.612a.75.75 0 0 1 .416 1.279l-3.046 2.97.719 4.192a.751.751 0 0 1-1.088.791L8 12.347l-3.766 1.98a.75.75 0 0 1-1.088-.79l.72-4.194L.818 6.374a.75.75 0 0 1 .416-1.28l4.21-.611L7.327.668A.75.75 0 0 1 8 .25Zm0 2.445L6.615 5.5a.75.75 0 0 1-.564.41l-3.097.45 2.24 2.184a.75.75 0 0 1 .216.664l-.528 3.084 2.769-1.456a.75.75 0 0 1 .698 0l2.77 1.456-.53-3.084a.75.75 0 0 1 .216-.664l2.24-2.183-3.096-.45a.75.75 0 0 1-.564-.41L8 2.694Z"></path> </svg> 6 stars </a> </li> </ul> <div class="flex-order-1 col-lg-7 col-12 d-flex"> <div class="d-lg-inline-block d-none v-align-top mt-1"> <a class="d-inline-block" data-hovercard-type="user" data-hovercard-url="/users/jboner/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/jboner"><img class=" avatar-user" src="https://avatars.githubusercontent.com/u/10701?s=60&amp;v=4" width="30" height="30" alt="@jboner" /></a> </div> <div class="d-inline-block px-lg-2 px-0"> <span> <a data-hovercard-type="user" data-hovercard-url="/users/jboner/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/jboner">jboner</a> / <a href="/jboner/554df0fcbcc84315b26c655389b323c8"><strong class="css-truncate-target">vs-code-for-scala.md</strong></a> </span> <div class="color-fg-muted f6"> Created <relative-time tense="past" datetime="2019-05-06T11:57:02Z" data-view-component="true">May 6, 2019 11:57</relative-time> </div> <span class="f6 color-fg-muted"> Some notes on VS Code for Scala programmers </span> </div> </div> </div> <div class="js-gist-file-update-container js-task-list-container"> <div id="file-vs-code-for-scala-md" class="file my-2"> <div id="file-vs-code-for-scala-md-readme" class="Box-body readme blob p-5 p-xl-6 gist-border-0" style="overflow: auto" tabindex="0" role="region" aria-label="file-vs-code-for-scala-md" > <article class="markdown-body entry-content container-lg" itemprop="text"><div class="markdown-heading" dir="auto"><h1 class="heading-element" dir="auto">VS Code Plugins and configuration tips</h1><a id="user-content-vs-code-plugins-and-configuration-tips" class="anchor" aria-label="Permalink: VS Code Plugins and configuration tips" href="#vs-code-plugins-and-configuration-tips"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto"><a href="https://code.visualstudio.com/docs/setup/setup-overview" rel="nofollow">https://code.visualstudio.com/docs/setup/setup-overview</a></p> <div class="markdown-heading" dir="auto"><h2 class="heading-element" dir="auto">Plugins</h2><a id="user-content-plugins" class="anchor" aria-label="Permalink: Plugins" href="#plugins"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <ul dir="auto"> <li>Project manager <a href="https://marketplace.visualstudio.com/items?itemName=alefragnani.project-manager" rel="nofollow">https://marketplace.visualstudio.com/items?itemName=alefragnani.project-manager</a></li> <li>Scala metals <a href="https://marketplace.visualstudio.com/items?itemName=scalameta.metals" rel="nofollow">https://marketplace.visualstudio.com/items?itemName=scalameta.metals</a></li> </ul> </article> </div> </div> </div> </div> <div class="gist-snippet"> <div class="gist-snippet-meta d-flex flex-lg-row flex-column width-full"> <ul class="col-lg-5 col-12 flex-order-2 f6 mt-lg-0 mt-3 mb-lg-0 mb-2 d-flex flex-lg-justify-end"> <li class="d-inline-block mr-lg-3 mr-2"> <a class="Link--muted" href="/jboner/dea4aa819e127d543d684208d74081b5"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code-square"> <path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25Zm7.47 3.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L10.69 8 9.22 6.53a.75.75 0 0 1 0-1.06ZM6.78 6.53 5.31 8l1.47 1.47a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path> </svg> 1 file </a> </li> <li class="d-inline-block mr-lg-3 mr-2"> <a class="Link--muted" href="/jboner/dea4aa819e127d543d684208d74081b5/forks"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo-forked"> <path d="M5 5.372v.878c0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75v-.878a2.25 2.25 0 1 1 1.5 0v.878a2.25 2.25 0 0 1-2.25 2.25h-1.5v2.128a2.251 2.251 0 1 1-1.5 0V8.5h-1.5A2.25 2.25 0 0 1 3.5 6.25v-.878a2.25 2.25 0 1 1 1.5 0ZM5 3.25a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Zm6.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm-3 8.75a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Z"></path> </svg> 4 forks </a> </li> <li class="d-inline-block mr-lg-3 mr-2"> <a class="Link--muted" href="/jboner/dea4aa819e127d543d684208d74081b5#comments"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-comment"> <path d="M1 2.75C1 1.784 1.784 1 2.75 1h10.5c.966 0 1.75.784 1.75 1.75v7.5A1.75 1.75 0 0 1 13.25 12H9.06l-2.573 2.573A1.458 1.458 0 0 1 4 13.543V12H2.75A1.75 1.75 0 0 1 1 10.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h4.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path> </svg> 0 comments </a> </li> <li class="d-inline-block"> <a class="Link--muted" href="/jboner/dea4aa819e127d543d684208d74081b5/stargazers"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-star"> <path d="M8 .25a.75.75 0 0 1 .673.418l1.882 3.815 4.21.612a.75.75 0 0 1 .416 1.279l-3.046 2.97.719 4.192a.751.751 0 0 1-1.088.791L8 12.347l-3.766 1.98a.75.75 0 0 1-1.088-.79l.72-4.194L.818 6.374a.75.75 0 0 1 .416-1.28l4.21-.611L7.327.668A.75.75 0 0 1 8 .25Zm0 2.445L6.615 5.5a.75.75 0 0 1-.564.41l-3.097.45 2.24 2.184a.75.75 0 0 1 .216.664l-.528 3.084 2.769-1.456a.75.75 0 0 1 .698 0l2.77 1.456-.53-3.084a.75.75 0 0 1 .216-.664l2.24-2.183-3.096-.45a.75.75 0 0 1-.564-.41L8 2.694Z"></path> </svg> 12 stars </a> </li> </ul> <div class="flex-order-1 col-lg-7 col-12 d-flex"> <div class="d-lg-inline-block d-none v-align-top mt-1"> <a class="d-inline-block" data-hovercard-type="user" data-hovercard-url="/users/jboner/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/jboner"><img class=" avatar-user" src="https://avatars.githubusercontent.com/u/10701?s=60&amp;v=4" width="30" height="30" alt="@jboner" /></a> </div> <div class="d-inline-block px-lg-2 px-0"> <span> <a data-hovercard-type="user" data-hovercard-url="/users/jboner/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/jboner">jboner</a> / <a href="/jboner/dea4aa819e127d543d684208d74081b5"><strong class="css-truncate-target">OrderManagement.scala</strong></a> </span> <div class="color-fg-muted f6"> Created <relative-time tense="past" datetime="2017-11-10T09:08:59Z" data-view-component="true">November 10, 2017 09:08</relative-time> </div> <span class="f6 color-fg-muted"> Demo of an Event-driven Architecture in Akka and Scala. Show-casing Events-first DDD, Event Sourced Aggregates, Process Manager, etc. </span> </div> </div> </div> <div class="js-gist-file-update-container js-task-list-container"> <div id="file-ordermanagement-scala" class="file my-2"> <div itemprop="text" class="Box-body p-0 blob-wrapper data type-scala gist-border-0" style="overflow: auto" tabindex="0" role="region" aria-label="file-ordermanagement-scala" > <div class="js-check-bidi js-blob-code-container blob-code-content"> <template class="js-file-alert-template"> <div data-view-component="true" class="flash flash-warn flash-full d-flex flex-items-center"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert"> <path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path> </svg> <span> This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. <a class="Link--inTextBlock" href="https://github.co/hiddenchars" target="_blank">Learn more about bidirectional Unicode characters</a> </span> <div data-view-component="true" class="flash-action"> <a href="{{ revealButtonHref }}" data-view-component="true" class="btn-sm btn"> Show hidden characters </a> </div> </div></template> <template class="js-line-alert-template"> <span aria-label="This line has hidden Unicode characters" data-view-component="true" class="line-alert tooltipped tooltipped-e"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert"> <path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path> </svg> </span></template> <table data-hpc class="highlight tab-size js-file-line-container" data-tab-size="8" data-paste-markdown-skip data-tagsearch-path="OrderManagement.scala"> <tr> <td id="file-ordermanagement-scala-L1" class="blob-num js-line-number js-blob-rnum" data-line-number="1"></td> <td id="file-ordermanagement-scala-LC1" class="blob-code blob-code-inner js-file-line"><span class="pl-k">package</span> <span class="pl-en">sample</span>.<span class="pl-en">eventdriven</span>.<span class="pl-en">scala</span></td> </tr> <tr> <td id="file-ordermanagement-scala-L2" class="blob-num js-line-number js-blob-rnum" data-line-number="2"></td> <td id="file-ordermanagement-scala-LC2" class="blob-code blob-code-inner js-file-line"> </td> </tr> <tr> <td id="file-ordermanagement-scala-L3" class="blob-num js-line-number js-blob-rnum" data-line-number="3"></td> <td id="file-ordermanagement-scala-LC3" class="blob-code blob-code-inner js-file-line"><span class="pl-k">import</span> <span class="pl-en">akka</span>.<span class="pl-en">actor</span>.{<span class="pl-en">Actor</span>, <span class="pl-en">ActorRef</span>, <span class="pl-en">ActorSystem</span>, <span class="pl-en">Inbox</span>, <span class="pl-en">Props</span>}</td> </tr> <tr> <td id="file-ordermanagement-scala-L4" class="blob-num js-line-number js-blob-rnum" data-line-number="4"></td> <td id="file-ordermanagement-scala-LC4" class="blob-code blob-code-inner js-file-line"><span class="pl-k">import</span> <span class="pl-en">akka</span>.<span class="pl-en">persistence</span>.<span class="pl-en">PersistentActor</span></td> </tr> <tr> <td id="file-ordermanagement-scala-L5" class="blob-num js-line-number js-blob-rnum" data-line-number="5"></td> <td id="file-ordermanagement-scala-LC5" class="blob-code blob-code-inner js-file-line"> </td> </tr> <tr> <td id="file-ordermanagement-scala-L6" class="blob-num js-line-number js-blob-rnum" data-line-number="6"></td> <td id="file-ordermanagement-scala-LC6" class="blob-code blob-code-inner js-file-line"><span class="pl-k">import</span> <span class="pl-en">scala</span>.<span class="pl-en">concurrent</span>.<span class="pl-en">ExecutionContext</span>.<span class="pl-en">Implicits</span>.<span class="pl-en">_</span></td> </tr> <tr> <td id="file-ordermanagement-scala-L7" class="blob-num js-line-number js-blob-rnum" data-line-number="7"></td> <td id="file-ordermanagement-scala-LC7" class="blob-code blob-code-inner js-file-line"><span class="pl-k">import</span> <span class="pl-en">scala</span>.<span class="pl-en">concurrent</span>.<span class="pl-en">duration</span>.<span class="pl-en">_</span></td> </tr> <tr> <td id="file-ordermanagement-scala-L8" class="blob-num js-line-number js-blob-rnum" data-line-number="8"></td> <td id="file-ordermanagement-scala-LC8" class="blob-code blob-code-inner js-file-line"> </td> </tr> <tr> <td id="file-ordermanagement-scala-L9" class="blob-num js-line-number js-blob-rnum" data-line-number="9"></td> <td id="file-ordermanagement-scala-LC9" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">//</span> ===============================================================</span></td> </tr> <tr> <td id="file-ordermanagement-scala-L10" class="blob-num js-line-number js-blob-rnum" data-line-number="10"></td> <td id="file-ordermanagement-scala-LC10" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">//</span> Demo of an Event-driven Architecture in Akka and Scala.</span></td> </tr> </table> </div> </div> </div> </div> </div> <div class="gist-snippet"> <div class="gist-snippet-meta d-flex flex-lg-row flex-column width-full"> <ul class="col-lg-5 col-12 flex-order-2 f6 mt-lg-0 mt-3 mb-lg-0 mb-2 d-flex flex-lg-justify-end"> <li class="d-inline-block mr-lg-3 mr-2"> <a class="Link--muted" href="/jboner/4361c710d2e2386be8bddc39edb0528a"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code-square"> <path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25Zm7.47 3.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L10.69 8 9.22 6.53a.75.75 0 0 1 0-1.06ZM6.78 6.53 5.31 8l1.47 1.47a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path> </svg> 1 file </a> </li> <li class="d-inline-block mr-lg-3 mr-2"> <a class="Link--muted" href="/jboner/4361c710d2e2386be8bddc39edb0528a/forks"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo-forked"> <path d="M5 5.372v.878c0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75v-.878a2.25 2.25 0 1 1 1.5 0v.878a2.25 2.25 0 0 1-2.25 2.25h-1.5v2.128a2.251 2.251 0 1 1-1.5 0V8.5h-1.5A2.25 2.25 0 0 1 3.5 6.25v-.878a2.25 2.25 0 1 1 1.5 0ZM5 3.25a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Zm6.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm-3 8.75a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Z"></path> </svg> 1 fork </a> </li> <li class="d-inline-block mr-lg-3 mr-2"> <a class="Link--muted" href="/jboner/4361c710d2e2386be8bddc39edb0528a#comments"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-comment"> <path d="M1 2.75C1 1.784 1.784 1 2.75 1h10.5c.966 0 1.75.784 1.75 1.75v7.5A1.75 1.75 0 0 1 13.25 12H9.06l-2.573 2.573A1.458 1.458 0 0 1 4 13.543V12H2.75A1.75 1.75 0 0 1 1 10.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h4.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path> </svg> 0 comments </a> </li> <li class="d-inline-block"> <a class="Link--muted" href="/jboner/4361c710d2e2386be8bddc39edb0528a/stargazers"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-star"> <path d="M8 .25a.75.75 0 0 1 .673.418l1.882 3.815 4.21.612a.75.75 0 0 1 .416 1.279l-3.046 2.97.719 4.192a.751.751 0 0 1-1.088.791L8 12.347l-3.766 1.98a.75.75 0 0 1-1.088-.79l.72-4.194L.818 6.374a.75.75 0 0 1 .416-1.28l4.21-.611L7.327.668A.75.75 0 0 1 8 .25Zm0 2.445L6.615 5.5a.75.75 0 0 1-.564.41l-3.097.45 2.24 2.184a.75.75 0 0 1 .216.664l-.528 3.084 2.769-1.456a.75.75 0 0 1 .698 0l2.77 1.456-.53-3.084a.75.75 0 0 1 .216-.664l2.24-2.183-3.096-.45a.75.75 0 0 1-.564-.41L8 2.694Z"></path> </svg> 5 stars </a> </li> </ul> <div class="flex-order-1 col-lg-7 col-12 d-flex"> <div class="d-lg-inline-block d-none v-align-top mt-1"> <a class="d-inline-block" data-hovercard-type="user" data-hovercard-url="/users/jboner/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/jboner"><img class=" avatar-user" src="https://avatars.githubusercontent.com/u/10701?s=60&amp;v=4" width="30" height="30" alt="@jboner" /></a> </div> <div class="d-inline-block px-lg-2 px-0"> <span> <a data-hovercard-type="user" data-hovercard-url="/users/jboner/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/jboner">jboner</a> / <a href="/jboner/4361c710d2e2386be8bddc39edb0528a"><strong class="css-truncate-target">OrderManagement.java</strong></a> </span> <div class="color-fg-muted f6"> Created <relative-time tense="past" datetime="2017-11-10T09:06:33Z" data-view-component="true">November 10, 2017 09:06</relative-time> </div> <span class="f6 color-fg-muted"> Demo of an Event-driven Architecture in Akka and Java. Show-casing Events-first DDD, Event Sourced Aggregates, Process Manager, etc. </span> </div> </div> </div> <div class="js-gist-file-update-container js-task-list-container"> <div id="file-ordermanagement-java" class="file my-2"> <div itemprop="text" class="Box-body p-0 blob-wrapper data type-java gist-border-0" style="overflow: auto" tabindex="0" role="region" aria-label="file-ordermanagement-java" > <div class="js-check-bidi js-blob-code-container blob-code-content"> <template class="js-file-alert-template"> <div data-view-component="true" class="flash flash-warn flash-full d-flex flex-items-center"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert"> <path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path> </svg> <span> This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. <a class="Link--inTextBlock" href="https://github.co/hiddenchars" target="_blank">Learn more about bidirectional Unicode characters</a> </span> <div data-view-component="true" class="flash-action"> <a href="{{ revealButtonHref }}" data-view-component="true" class="btn-sm btn"> Show hidden characters </a> </div> </div></template> <template class="js-line-alert-template"> <span aria-label="This line has hidden Unicode characters" data-view-component="true" class="line-alert tooltipped tooltipped-e"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert"> <path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path> </svg> </span></template> <table data-hpc class="highlight tab-size js-file-line-container" data-tab-size="8" data-paste-markdown-skip data-tagsearch-path="OrderManagement.java"> <tr> <td id="file-ordermanagement-java-L1" class="blob-num js-line-number js-blob-rnum" data-line-number="1"></td> <td id="file-ordermanagement-java-LC1" class="blob-code blob-code-inner js-file-line"><span class=pl-k>package</span> <span class=pl-s1>sample</span>.<span class=pl-s1>eventdriven</span>.<span class=pl-s1>java</span>;</td> </tr> <tr> <td id="file-ordermanagement-java-L2" class="blob-num js-line-number js-blob-rnum" data-line-number="2"></td> <td id="file-ordermanagement-java-LC2" class="blob-code blob-code-inner js-file-line"> </td> </tr> <tr> <td id="file-ordermanagement-java-L3" class="blob-num js-line-number js-blob-rnum" data-line-number="3"></td> <td id="file-ordermanagement-java-LC3" class="blob-code blob-code-inner js-file-line"><span class=pl-k>import</span> <span class=pl-s1>akka</span>.<span class=pl-s1>actor</span>.*;</td> </tr> <tr> <td id="file-ordermanagement-java-L4" class="blob-num js-line-number js-blob-rnum" data-line-number="4"></td> <td id="file-ordermanagement-java-LC4" class="blob-code blob-code-inner js-file-line"><span class=pl-k>import</span> <span class=pl-s1>akka</span>.<span class=pl-s1>persistence</span>.<span class=pl-s1>AbstractPersistentActor</span>;</td> </tr> <tr> <td id="file-ordermanagement-java-L5" class="blob-num js-line-number js-blob-rnum" data-line-number="5"></td> <td id="file-ordermanagement-java-LC5" class="blob-code blob-code-inner js-file-line"><span class=pl-k>import</span> <span class=pl-s1>scala</span>.<span class=pl-s1>concurrent</span>.<span class=pl-s1>duration</span>.<span class=pl-s1>Duration</span>;</td> </tr> <tr> <td id="file-ordermanagement-java-L6" class="blob-num js-line-number js-blob-rnum" data-line-number="6"></td> <td id="file-ordermanagement-java-LC6" class="blob-code blob-code-inner js-file-line"> </td> </tr> <tr> <td id="file-ordermanagement-java-L7" class="blob-num js-line-number js-blob-rnum" data-line-number="7"></td> <td id="file-ordermanagement-java-LC7" class="blob-code blob-code-inner js-file-line"><span class=pl-k>import</span> <span class=pl-s1>java</span>.<span class=pl-s1>io</span>.<span class=pl-s1>Serializable</span>;</td> </tr> <tr> <td id="file-ordermanagement-java-L8" class="blob-num js-line-number js-blob-rnum" data-line-number="8"></td> <td id="file-ordermanagement-java-LC8" class="blob-code blob-code-inner js-file-line"><span class=pl-k>import</span> <span class=pl-s1>java</span>.<span class=pl-s1>util</span>.<span class=pl-s1>concurrent</span>.<span class=pl-s1>TimeUnit</span>;</td> </tr> <tr> <td id="file-ordermanagement-java-L9" class="blob-num js-line-number js-blob-rnum" data-line-number="9"></td> <td id="file-ordermanagement-java-LC9" class="blob-code blob-code-inner js-file-line"><span class=pl-k>import</span> <span class=pl-s1>java</span>.<span class=pl-s1>util</span>.<span class=pl-s1>concurrent</span>.<span class=pl-s1>TimeoutException</span>;</td> </tr> </table> </div> </div> </div> </div> </div> <div class="gist-snippet"> <div class="gist-snippet-meta d-flex flex-lg-row flex-column width-full"> <ul class="col-lg-5 col-12 flex-order-2 f6 mt-lg-0 mt-3 mb-lg-0 mb-2 d-flex flex-lg-justify-end"> <li class="d-inline-block mr-lg-3 mr-2"> <a class="Link--muted" href="/jboner/3a795a0b0c1945702f70"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code-square"> <path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25Zm7.47 3.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L10.69 8 9.22 6.53a.75.75 0 0 1 0-1.06ZM6.78 6.53 5.31 8l1.47 1.47a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path> </svg> 1 file </a> </li> <li class="d-inline-block mr-lg-3 mr-2"> <a class="Link--muted" href="/jboner/3a795a0b0c1945702f70/forks"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo-forked"> <path d="M5 5.372v.878c0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75v-.878a2.25 2.25 0 1 1 1.5 0v.878a2.25 2.25 0 0 1-2.25 2.25h-1.5v2.128a2.251 2.251 0 1 1-1.5 0V8.5h-1.5A2.25 2.25 0 0 1 3.5 6.25v-.878a2.25 2.25 0 1 1 1.5 0ZM5 3.25a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Zm6.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm-3 8.75a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Z"></path> </svg> 18 forks </a> </li> <li class="d-inline-block mr-lg-3 mr-2"> <a class="Link--muted" href="/jboner/3a795a0b0c1945702f70#comments"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-comment"> <path d="M1 2.75C1 1.784 1.784 1 2.75 1h10.5c.966 0 1.75.784 1.75 1.75v7.5A1.75 1.75 0 0 1 13.25 12H9.06l-2.573 2.573A1.458 1.458 0 0 1 4 13.543V12H2.75A1.75 1.75 0 0 1 1 10.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h4.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path> </svg> 0 comments </a> </li> <li class="d-inline-block"> <a class="Link--muted" href="/jboner/3a795a0b0c1945702f70/stargazers"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-star"> <path d="M8 .25a.75.75 0 0 1 .673.418l1.882 3.815 4.21.612a.75.75 0 0 1 .416 1.279l-3.046 2.97.719 4.192a.751.751 0 0 1-1.088.791L8 12.347l-3.766 1.98a.75.75 0 0 1-1.088-.79l.72-4.194L.818 6.374a.75.75 0 0 1 .416-1.28l4.21-.611L7.327.668A.75.75 0 0 1 8 .25Zm0 2.445L6.615 5.5a.75.75 0 0 1-.564.41l-3.097.45 2.24 2.184a.75.75 0 0 1 .216.664l-.528 3.084 2.769-1.456a.75.75 0 0 1 .698 0l2.77 1.456-.53-3.084a.75.75 0 0 1 .216-.664l2.24-2.183-3.096-.45a.75.75 0 0 1-.564-.41L8 2.694Z"></path> </svg> 57 stars </a> </li> </ul> <div class="flex-order-1 col-lg-7 col-12 d-flex"> <div class="d-lg-inline-block d-none v-align-top mt-1"> <a class="d-inline-block" data-hovercard-type="user" data-hovercard-url="/users/jboner/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/jboner"><img class=" avatar-user" src="https://avatars.githubusercontent.com/u/10701?s=60&amp;v=4" width="30" height="30" alt="@jboner" /></a> </div> <div class="d-inline-block px-lg-2 px-0"> <span> <a data-hovercard-type="user" data-hovercard-url="/users/jboner/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/jboner">jboner</a> / <a href="/jboner/3a795a0b0c1945702f70"><strong class="css-truncate-target">ResilienceReferences.md</strong></a> </span> <div class="color-fg-muted f6"> Last active <relative-time tense="past" datetime="2025-01-15T19:18:40Z" data-view-component="true">January 15, 2025 19:18</relative-time> </div> <span class="f6 color-fg-muted"> References from my talk 'Without Resilience, Nothing Else Matters'. </span> </div> </div> </div> <div class="js-gist-file-update-container js-task-list-container"> <div id="file-resiliencereferences-md" class="file my-2"> <div id="file-resiliencereferences-md-readme" class="Box-body readme blob p-5 p-xl-6 gist-border-0" style="overflow: auto" tabindex="0" role="region" aria-label="file-resiliencereferences-md" > <article class="markdown-body entry-content container-lg" itemprop="text"><div class="markdown-heading" dir="auto"><h3 class="heading-element" dir="auto">References from my talk 'Without Resilience, Nothing Else Matters'</h3><a id="user-content-references-from-my-talk-without-resilience-nothing-else-matters" class="anchor" aria-label="Permalink: References from my talk 'Without Resilience, Nothing Else Matters'" href="#references-from-my-talk-without-resilience-nothing-else-matters"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <ul dir="auto"> <li><a href="http://www.amazon.com/Drift-into-Failure-Components-Understanding-ebook/dp/B009KOKXKY" rel="nofollow">Drift into Failure</a></li> <li><a href="http://web.mit.edu/2.75/resources/random/How%20Complex%20Systems%20Fail.pdf" rel="nofollow">How Complex Systems Fail</a></li> <li><a href="http://www.amazon.com/Antifragile-Things-that-Gain-Disorder-ebook/dp/B009K6DKTS" rel="nofollow">Antifragile: Things That Gain from Disorder</a></li> <li><a href="http://www.donellameadows.org/archives/leverage-points-places-to-intervene-in-a-system/" rel="nofollow">Leverage Points: Places to Intervene in a System</a></li> <li><a href="http://www.ncbi.nlm.nih.gov/pmc/articles/PMC1743994/" rel="nofollow">Going Solid: A Model of System Dynamics and Consequences for Patient Safety</a></li> <li><a href="https://www.youtube.com/watch?v=PGLYEDpNu60" rel="nofollow">Resilience in Complex Adaptive Systems: Operating at the Edge of Failure</a></li> <li><a href="https://www.ted.com/talks/nicolas_perony_puppies_now_that_i_ve_got_your_attention_complexity_theory" rel="nofollow">Puppies! Now that I’ve got your attention, Complexity Theory</a></li> <li>[Towards Resilient Architectures: Biology</li> </ul> </article> </div> </div> </div> </div> <div class="gist-snippet"> <div class="gist-snippet-meta d-flex flex-lg-row flex-column width-full"> <ul class="col-lg-5 col-12 flex-order-2 f6 mt-lg-0 mt-3 mb-lg-0 mb-2 d-flex flex-lg-justify-end"> <li class="d-inline-block mr-lg-3 mr-2"> <a class="Link--muted" href="/jboner/1db37eeee3ed3c9422e4"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code-square"> <path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25Zm7.47 3.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L10.69 8 9.22 6.53a.75.75 0 0 1 0-1.06ZM6.78 6.53 5.31 8l1.47 1.47a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path> </svg> 1 file </a> </li> <li class="d-inline-block mr-lg-3 mr-2"> <a class="Link--muted" href="/jboner/1db37eeee3ed3c9422e4/forks"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo-forked"> <path d="M5 5.372v.878c0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75v-.878a2.25 2.25 0 1 1 1.5 0v.878a2.25 2.25 0 0 1-2.25 2.25h-1.5v2.128a2.251 2.251 0 1 1-1.5 0V8.5h-1.5A2.25 2.25 0 0 1 3.5 6.25v-.878a2.25 2.25 0 1 1 1.5 0ZM5 3.25a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Zm6.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm-3 8.75a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Z"></path> </svg> 0 forks </a> </li> <li class="d-inline-block mr-lg-3 mr-2"> <a class="Link--muted" href="/jboner/1db37eeee3ed3c9422e4#comments"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-comment"> <path d="M1 2.75C1 1.784 1.784 1 2.75 1h10.5c.966 0 1.75.784 1.75 1.75v7.5A1.75 1.75 0 0 1 13.25 12H9.06l-2.573 2.573A1.458 1.458 0 0 1 4 13.543V12H2.75A1.75 1.75 0 0 1 1 10.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h4.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path> </svg> 0 comments </a> </li> <li class="d-inline-block"> <a class="Link--muted" href="/jboner/1db37eeee3ed3c9422e4/stargazers"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-star"> <path d="M8 .25a.75.75 0 0 1 .673.418l1.882 3.815 4.21.612a.75.75 0 0 1 .416 1.279l-3.046 2.97.719 4.192a.751.751 0 0 1-1.088.791L8 12.347l-3.766 1.98a.75.75 0 0 1-1.088-.79l.72-4.194L.818 6.374a.75.75 0 0 1 .416-1.28l4.21-.611L7.327.668A.75.75 0 0 1 8 .25Zm0 2.445L6.615 5.5a.75.75 0 0 1-.564.41l-3.097.45 2.24 2.184a.75.75 0 0 1 .216.664l-.528 3.084 2.769-1.456a.75.75 0 0 1 .698 0l2.77 1.456-.53-3.084a.75.75 0 0 1 .216-.664l2.24-2.183-3.096-.45a.75.75 0 0 1-.564-.41L8 2.694Z"></path> </svg> 2 stars </a> </li> </ul> <div class="flex-order-1 col-lg-7 col-12 d-flex"> <div class="d-lg-inline-block d-none v-align-top mt-1"> <a class="d-inline-block" data-hovercard-type="user" data-hovercard-url="/users/jboner/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/jboner"><img class=" avatar-user" src="https://avatars.githubusercontent.com/u/10701?s=60&amp;v=4" width="30" height="30" alt="@jboner" /></a> </div> <div class="d-inline-block px-lg-2 px-0"> <span> <a data-hovercard-type="user" data-hovercard-url="/users/jboner/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/jboner">jboner</a> / <a href="/jboner/1db37eeee3ed3c9422e4"><strong class="css-truncate-target">PersistentVendingMachine.scala</strong></a> </span> <div class="color-fg-muted f6"> Last active <relative-time tense="past" datetime="2019-03-07T08:14:58Z" data-view-component="true">March 7, 2019 08:14</relative-time> </div> <span class="f6 color-fg-muted"> Persistent Vending Machine Akka Supervision Demo </span> </div> </div> </div> <div class="js-gist-file-update-container js-task-list-container"> <div id="file-persistentvendingmachine-scala" class="file my-2"> <div itemprop="text" class="Box-body p-0 blob-wrapper data type-scala gist-border-0" style="overflow: auto" tabindex="0" role="region" aria-label="file-persistentvendingmachine-scala" > <div class="js-check-bidi js-blob-code-container blob-code-content"> <template class="js-file-alert-template"> <div data-view-component="true" class="flash flash-warn flash-full d-flex flex-items-center"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert"> <path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path> </svg> <span> This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. <a class="Link--inTextBlock" href="https://github.co/hiddenchars" target="_blank">Learn more about bidirectional Unicode characters</a> </span> <div data-view-component="true" class="flash-action"> <a href="{{ revealButtonHref }}" data-view-component="true" class="btn-sm btn"> Show hidden characters </a> </div> </div></template> <template class="js-line-alert-template"> <span aria-label="This line has hidden Unicode characters" data-view-component="true" class="line-alert tooltipped tooltipped-e"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert"> <path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path> </svg> </span></template> <table data-hpc class="highlight tab-size js-file-line-container" data-tab-size="8" data-paste-markdown-skip data-tagsearch-path="PersistentVendingMachine.scala"> <tr> <td id="file-persistentvendingmachine-scala-L1" class="blob-num js-line-number js-blob-rnum" data-line-number="1"></td> <td id="file-persistentvendingmachine-scala-LC1" class="blob-code blob-code-inner js-file-line"><span class="pl-k">import</span> <span class="pl-en">akka</span>.<span class="pl-en">actor</span>.<span class="pl-en">SupervisorStrategy</span>.<span class="pl-en">_</span></td> </tr> <tr> <td id="file-persistentvendingmachine-scala-L2" class="blob-num js-line-number js-blob-rnum" data-line-number="2"></td> <td id="file-persistentvendingmachine-scala-LC2" class="blob-code blob-code-inner js-file-line"><span class="pl-k">import</span> <span class="pl-en">akka</span>.<span class="pl-en">actor</span>.<span class="pl-en">_</span></td> </tr> <tr> <td id="file-persistentvendingmachine-scala-L3" class="blob-num js-line-number js-blob-rnum" data-line-number="3"></td> <td id="file-persistentvendingmachine-scala-LC3" class="blob-code blob-code-inner js-file-line"><span class="pl-k">import</span> <span class="pl-en">akka</span>.<span class="pl-en">persistence</span>.<span class="pl-en">PersistentActor</span></td> </tr> <tr> <td id="file-persistentvendingmachine-scala-L4" class="blob-num js-line-number js-blob-rnum" data-line-number="4"></td> <td id="file-persistentvendingmachine-scala-LC4" class="blob-code blob-code-inner js-file-line"><span class="pl-k">import</span> <span class="pl-en">scala</span>.<span class="pl-en">concurrent</span>.<span class="pl-en">duration</span>.<span class="pl-en">_</span></td> </tr> <tr> <td id="file-persistentvendingmachine-scala-L5" class="blob-num js-line-number js-blob-rnum" data-line-number="5"></td> <td id="file-persistentvendingmachine-scala-LC5" class="blob-code blob-code-inner js-file-line"> </td> </tr> <tr> <td id="file-persistentvendingmachine-scala-L6" class="blob-num js-line-number js-blob-rnum" data-line-number="6"></td> <td id="file-persistentvendingmachine-scala-LC6" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">//</span> Coffee types</span></td> </tr> <tr> <td id="file-persistentvendingmachine-scala-L7" class="blob-num js-line-number js-blob-rnum" data-line-number="7"></td> <td id="file-persistentvendingmachine-scala-LC7" class="blob-code blob-code-inner js-file-line"><span class="pl-k">trait</span> <span class="pl-en">CoffeeType</span></td> </tr> <tr> <td id="file-persistentvendingmachine-scala-L8" class="blob-num js-line-number js-blob-rnum" data-line-number="8"></td> <td id="file-persistentvendingmachine-scala-LC8" class="blob-code blob-code-inner js-file-line"><span class="pl-k">case</span> <span class="pl-k">object</span> <span class="pl-en">BlackCoffee</span> <span class="pl-k">extends</span> <span class="pl-en">CoffeeType</span></td> </tr> <tr> <td id="file-persistentvendingmachine-scala-L9" class="blob-num js-line-number js-blob-rnum" data-line-number="9"></td> <td id="file-persistentvendingmachine-scala-LC9" class="blob-code blob-code-inner js-file-line"><span class="pl-k">case</span> <span class="pl-k">object</span> <span class="pl-en">Latte</span> <span class="pl-k">extends</span> <span class="pl-en">CoffeeType</span></td> </tr> <tr> <td id="file-persistentvendingmachine-scala-L10" class="blob-num js-line-number js-blob-rnum" data-line-number="10"></td> <td id="file-persistentvendingmachine-scala-LC10" class="blob-code blob-code-inner js-file-line"><span class="pl-k">case</span> <span class="pl-k">object</span> <span class="pl-en">Espresso</span> <span class="pl-k">extends</span> <span class="pl-en">CoffeeType</span></td> </tr> </table> </div> </div> </div> </div> </div> <div class="gist-snippet"> <div class="gist-snippet-meta d-flex flex-lg-row flex-column width-full"> <ul class="col-lg-5 col-12 flex-order-2 f6 mt-lg-0 mt-3 mb-lg-0 mb-2 d-flex flex-lg-justify-end"> <li class="d-inline-block mr-lg-3 mr-2"> <a class="Link--muted" href="/jboner/d24c0eb91417a5ec10a6"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code-square"> <path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25Zm7.47 3.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L10.69 8 9.22 6.53a.75.75 0 0 1 0-1.06ZM6.78 6.53 5.31 8l1.47 1.47a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path> </svg> 1 file </a> </li> <li class="d-inline-block mr-lg-3 mr-2"> <a class="Link--muted" href="/jboner/d24c0eb91417a5ec10a6/forks"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo-forked"> <path d="M5 5.372v.878c0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75v-.878a2.25 2.25 0 1 1 1.5 0v.878a2.25 2.25 0 0 1-2.25 2.25h-1.5v2.128a2.251 2.251 0 1 1-1.5 0V8.5h-1.5A2.25 2.25 0 0 1 3.5 6.25v-.878a2.25 2.25 0 1 1 1.5 0ZM5 3.25a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Zm6.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm-3 8.75a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Z"></path> </svg> 0 forks </a> </li> <li class="d-inline-block mr-lg-3 mr-2"> <a class="Link--muted" href="/jboner/d24c0eb91417a5ec10a6#comments"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-comment"> <path d="M1 2.75C1 1.784 1.784 1 2.75 1h10.5c.966 0 1.75.784 1.75 1.75v7.5A1.75 1.75 0 0 1 13.25 12H9.06l-2.573 2.573A1.458 1.458 0 0 1 4 13.543V12H2.75A1.75 1.75 0 0 1 1 10.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h4.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path> </svg> 1 comment </a> </li> <li class="d-inline-block"> <a class="Link--muted" href="/jboner/d24c0eb91417a5ec10a6/stargazers"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-star"> <path d="M8 .25a.75.75 0 0 1 .673.418l1.882 3.815 4.21.612a.75.75 0 0 1 .416 1.279l-3.046 2.97.719 4.192a.751.751 0 0 1-1.088.791L8 12.347l-3.766 1.98a.75.75 0 0 1-1.088-.79l.72-4.194L.818 6.374a.75.75 0 0 1 .416-1.28l4.21-.611L7.327.668A.75.75 0 0 1 8 .25Zm0 2.445L6.615 5.5a.75.75 0 0 1-.564.41l-3.097.45 2.24 2.184a.75.75 0 0 1 .216.664l-.528 3.084 2.769-1.456a.75.75 0 0 1 .698 0l2.77 1.456-.53-3.084a.75.75 0 0 1 .216-.664l2.24-2.183-3.096-.45a.75.75 0 0 1-.564-.41L8 2.694Z"></path> </svg> 0 stars </a> </li> </ul> <div class="flex-order-1 col-lg-7 col-12 d-flex"> <div class="d-lg-inline-block d-none v-align-top mt-1"> <a class="d-inline-block" data-hovercard-type="user" data-hovercard-url="/users/jboner/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/jboner"><img class=" avatar-user" src="https://avatars.githubusercontent.com/u/10701?s=60&amp;v=4" width="30" height="30" alt="@jboner" /></a> </div> <div class="d-inline-block px-lg-2 px-0"> <span> <a data-hovercard-type="user" data-hovercard-url="/users/jboner/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/jboner">jboner</a> / <a href="/jboner/d24c0eb91417a5ec10a6"><strong class="css-truncate-target">VendingMachine.scala</strong></a> </span> <div class="color-fg-muted f6"> Last active <relative-time tense="past" datetime="2015-11-13T17:04:22Z" data-view-component="true">November 13, 2015 17:04</relative-time> </div> <span class="f6 color-fg-muted"> Vending Machine Akka Supervision Demo </span> </div> </div> </div> <div class="js-gist-file-update-container js-task-list-container"> <div id="file-vendingmachine-scala" class="file my-2"> <div itemprop="text" class="Box-body p-0 blob-wrapper data type-scala gist-border-0" style="overflow: auto" tabindex="0" role="region" aria-label="file-vendingmachine-scala" > <div class="js-check-bidi js-blob-code-container blob-code-content"> <template class="js-file-alert-template"> <div data-view-component="true" class="flash flash-warn flash-full d-flex flex-items-center"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert"> <path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path> </svg> <span> This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. <a class="Link--inTextBlock" href="https://github.co/hiddenchars" target="_blank">Learn more about bidirectional Unicode characters</a> </span> <div data-view-component="true" class="flash-action"> <a href="{{ revealButtonHref }}" data-view-component="true" class="btn-sm btn"> Show hidden characters </a> </div> </div></template> <template class="js-line-alert-template"> <span aria-label="This line has hidden Unicode characters" data-view-component="true" class="line-alert tooltipped tooltipped-e"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert"> <path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path> </svg> </span></template> <table data-hpc class="highlight tab-size js-file-line-container" data-tab-size="8" data-paste-markdown-skip data-tagsearch-path="VendingMachine.scala"> <tr> <td id="file-vendingmachine-scala-L1" class="blob-num js-line-number js-blob-rnum" data-line-number="1"></td> <td id="file-vendingmachine-scala-LC1" class="blob-code blob-code-inner js-file-line"><span class="pl-k">import</span> <span class="pl-en">akka</span>.<span class="pl-en">actor</span>.<span class="pl-en">_</span></td> </tr> <tr> <td id="file-vendingmachine-scala-L2" class="blob-num js-line-number js-blob-rnum" data-line-number="2"></td> <td id="file-vendingmachine-scala-LC2" class="blob-code blob-code-inner js-file-line"><span class="pl-k">import</span> <span class="pl-en">akka</span>.<span class="pl-en">actor</span>.<span class="pl-en">SupervisorStrategy</span>.<span class="pl-en">_</span></td> </tr> <tr> <td id="file-vendingmachine-scala-L3" class="blob-num js-line-number js-blob-rnum" data-line-number="3"></td> <td id="file-vendingmachine-scala-LC3" class="blob-code blob-code-inner js-file-line"><span class="pl-k">import</span> <span class="pl-en">scala</span>.<span class="pl-en">concurrent</span>.<span class="pl-en">duration</span>.<span class="pl-en">_</span></td> </tr> <tr> <td id="file-vendingmachine-scala-L4" class="blob-num js-line-number js-blob-rnum" data-line-number="4"></td> <td id="file-vendingmachine-scala-LC4" class="blob-code blob-code-inner js-file-line"> </td> </tr> <tr> <td id="file-vendingmachine-scala-L5" class="blob-num js-line-number js-blob-rnum" data-line-number="5"></td> <td id="file-vendingmachine-scala-LC5" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">//</span> Coffee types</span></td> </tr> <tr> <td id="file-vendingmachine-scala-L6" class="blob-num js-line-number js-blob-rnum" data-line-number="6"></td> <td id="file-vendingmachine-scala-LC6" class="blob-code blob-code-inner js-file-line"><span class="pl-k">trait</span> <span class="pl-en">CoffeeType</span></td> </tr> <tr> <td id="file-vendingmachine-scala-L7" class="blob-num js-line-number js-blob-rnum" data-line-number="7"></td> <td id="file-vendingmachine-scala-LC7" class="blob-code blob-code-inner js-file-line"><span class="pl-k">case</span> <span class="pl-k">object</span> <span class="pl-en">BlackCoffee</span> <span class="pl-k">extends</span> <span class="pl-en">CoffeeType</span></td> </tr> <tr> <td id="file-vendingmachine-scala-L8" class="blob-num js-line-number js-blob-rnum" data-line-number="8"></td> <td id="file-vendingmachine-scala-LC8" class="blob-code blob-code-inner js-file-line"><span class="pl-k">case</span> <span class="pl-k">object</span> <span class="pl-en">Latte</span> <span class="pl-k">extends</span> <span class="pl-en">CoffeeType</span></td> </tr> <tr> <td id="file-vendingmachine-scala-L9" class="blob-num js-line-number js-blob-rnum" data-line-number="9"></td> <td id="file-vendingmachine-scala-LC9" class="blob-code blob-code-inner js-file-line"><span class="pl-k">case</span> <span class="pl-k">object</span> <span class="pl-en">Espresso</span> <span class="pl-k">extends</span> <span class="pl-en">CoffeeType</span></td> </tr> </table> </div> </div> </div> </div> </div> <div class="gist-snippet"> <div class="gist-snippet-meta d-flex flex-lg-row flex-column width-full"> <ul class="col-lg-5 col-12 flex-order-2 f6 mt-lg-0 mt-3 mb-lg-0 mb-2 d-flex flex-lg-justify-end"> <li class="d-inline-block mr-lg-3 mr-2"> <a class="Link--muted" href="/jboner/11001276"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code-square"> <path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25Zm7.47 3.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L10.69 8 9.22 6.53a.75.75 0 0 1 0-1.06ZM6.78 6.53 5.31 8l1.47 1.47a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path> </svg> 1 file </a> </li> <li class="d-inline-block mr-lg-3 mr-2"> <a class="Link--muted" href="/jboner/11001276/forks"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo-forked"> <path d="M5 5.372v.878c0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75v-.878a2.25 2.25 0 1 1 1.5 0v.878a2.25 2.25 0 0 1-2.25 2.25h-1.5v2.128a2.251 2.251 0 1 1-1.5 0V8.5h-1.5A2.25 2.25 0 0 1 3.5 6.25v-.878a2.25 2.25 0 1 1 1.5 0ZM5 3.25a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Zm6.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm-3 8.75a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Z"></path> </svg> 0 forks </a> </li> <li class="d-inline-block mr-lg-3 mr-2"> <a class="Link--muted" href="/jboner/11001276#comments"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-comment"> <path d="M1 2.75C1 1.784 1.784 1 2.75 1h10.5c.966 0 1.75.784 1.75 1.75v7.5A1.75 1.75 0 0 1 13.25 12H9.06l-2.573 2.573A1.458 1.458 0 0 1 4 13.543V12H2.75A1.75 1.75 0 0 1 1 10.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h4.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path> </svg> 0 comments </a> </li> <li class="d-inline-block"> <a class="Link--muted" href="/jboner/11001276/stargazers"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-star"> <path d="M8 .25a.75.75 0 0 1 .673.418l1.882 3.815 4.21.612a.75.75 0 0 1 .416 1.279l-3.046 2.97.719 4.192a.751.751 0 0 1-1.088.791L8 12.347l-3.766 1.98a.75.75 0 0 1-1.088-.79l.72-4.194L.818 6.374a.75.75 0 0 1 .416-1.28l4.21-.611L7.327.668A.75.75 0 0 1 8 .25Zm0 2.445L6.615 5.5a.75.75 0 0 1-.564.41l-3.097.45 2.24 2.184a.75.75 0 0 1 .216.664l-.528 3.084 2.769-1.456a.75.75 0 0 1 .698 0l2.77 1.456-.53-3.084a.75.75 0 0 1 .216-.664l2.24-2.183-3.096-.45a.75.75 0 0 1-.564-.41L8 2.694Z"></path> </svg> 0 stars </a> </li> </ul> <div class="flex-order-1 col-lg-7 col-12 d-flex"> <div class="d-lg-inline-block d-none v-align-top mt-1"> <a class="d-inline-block" data-hovercard-type="user" data-hovercard-url="/users/jboner/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/jboner"><img class=" avatar-user" src="https://avatars.githubusercontent.com/u/10701?s=60&amp;v=4" width="30" height="30" alt="@jboner" /></a> </div> <div class="d-inline-block px-lg-2 px-0"> <span> <a data-hovercard-type="user" data-hovercard-url="/users/jboner/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/jboner">jboner</a> / <a href="/jboner/11001276"><strong class="css-truncate-target">keybase.md</strong></a> </span> <div class="color-fg-muted f6"> Last active <relative-time tense="past" datetime="2016-01-06T01:10:38Z" data-view-component="true">January 6, 2016 01:10</relative-time> </div> <span class="f6 color-fg-muted"> Keybase proof </span> </div> </div> </div> <div class="js-gist-file-update-container js-task-list-container"> <div id="file-keybase-md" class="file my-2"> <div id="file-keybase-md-readme" class="Box-body readme blob p-5 p-xl-6 gist-border-0" style="overflow: auto" tabindex="0" role="region" aria-label="file-keybase-md" > <article class="markdown-body entry-content container-lg" itemprop="text"><div class="markdown-heading" dir="auto"><h3 class="heading-element" dir="auto">Keybase proof</h3><a id="user-content-keybase-proof" class="anchor" aria-label="Permalink: Keybase proof" href="#keybase-proof"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">I hereby claim:</p> <ul dir="auto"> <li>I am jboner on github.</li> <li>I am jonas (<a href="https://keybase.io/jonas" rel="nofollow">https://keybase.io/jonas</a>) on keybase.</li> <li>I have a public key ASB-dCL3b2wk3TzgiVeoHmmp_s-ZM004MVmlztARjGu-pAo</li> </ul> <p dir="auto">To claim this, I am signing this object:</p> </article> </div> </div> </div> </div> <div class="gist-snippet"> <div class="gist-snippet-meta d-flex flex-lg-row flex-column width-full"> <ul class="col-lg-5 col-12 flex-order-2 f6 mt-lg-0 mt-3 mb-lg-0 mb-2 d-flex flex-lg-justify-end"> <li class="d-inline-block mr-lg-3 mr-2"> <a class="Link--muted" href="/jboner/9990472"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code-square"> <path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25Zm7.47 3.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L10.69 8 9.22 6.53a.75.75 0 0 1 0-1.06ZM6.78 6.53 5.31 8l1.47 1.47a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path> </svg> 1 file </a> </li> <li class="d-inline-block mr-lg-3 mr-2"> <a class="Link--muted" href="/jboner/9990472/forks"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo-forked"> <path d="M5 5.372v.878c0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75v-.878a2.25 2.25 0 1 1 1.5 0v.878a2.25 2.25 0 0 1-2.25 2.25h-1.5v2.128a2.251 2.251 0 1 1-1.5 0V8.5h-1.5A2.25 2.25 0 0 1 3.5 6.25v-.878a2.25 2.25 0 1 1 1.5 0ZM5 3.25a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Zm6.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm-3 8.75a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Z"></path> </svg> 0 forks </a> </li> <li class="d-inline-block mr-lg-3 mr-2"> <a class="Link--muted" href="/jboner/9990472#comments"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-comment"> <path d="M1 2.75C1 1.784 1.784 1 2.75 1h10.5c.966 0 1.75.784 1.75 1.75v7.5A1.75 1.75 0 0 1 13.25 12H9.06l-2.573 2.573A1.458 1.458 0 0 1 4 13.543V12H2.75A1.75 1.75 0 0 1 1 10.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h4.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path> </svg> 0 comments </a> </li> <li class="d-inline-block"> <a class="Link--muted" href="/jboner/9990472/stargazers"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-star"> <path d="M8 .25a.75.75 0 0 1 .673.418l1.882 3.815 4.21.612a.75.75 0 0 1 .416 1.279l-3.046 2.97.719 4.192a.751.751 0 0 1-1.088.791L8 12.347l-3.766 1.98a.75.75 0 0 1-1.088-.79l.72-4.194L.818 6.374a.75.75 0 0 1 .416-1.28l4.21-.611L7.327.668A.75.75 0 0 1 8 .25Zm0 2.445L6.615 5.5a.75.75 0 0 1-.564.41l-3.097.45 2.24 2.184a.75.75 0 0 1 .216.664l-.528 3.084 2.769-1.456a.75.75 0 0 1 .698 0l2.77 1.456-.53-3.084a.75.75 0 0 1 .216-.664l2.24-2.183-3.096-.45a.75.75 0 0 1-.564-.41L8 2.694Z"></path> </svg> 5 stars </a> </li> </ul> <div class="flex-order-1 col-lg-7 col-12 d-flex"> <div class="d-lg-inline-block d-none v-align-top mt-1"> <a class="d-inline-block" data-hovercard-type="user" data-hovercard-url="/users/jboner/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/jboner"><img class=" avatar-user" src="https://avatars.githubusercontent.com/u/10701?s=60&amp;v=4" width="30" height="30" alt="@jboner" /></a> </div> <div class="d-inline-block px-lg-2 px-0"> <span> <a data-hovercard-type="user" data-hovercard-url="/users/jboner/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/jboner">jboner</a> / <a href="/jboner/9990472"><strong class="css-truncate-target">GameOfPingPong.scala</strong></a> </span> <div class="color-fg-muted f6"> Last active <relative-time tense="past" datetime="2019-03-27T16:43:44Z" data-view-component="true">March 27, 2019 16:43</relative-time> </div> <span class="f6 color-fg-muted"> A game of ping pong using Akka Actors. For a version that is persisted using Event-Sourcing see this gist: <a href="https://gist.github.com/jboner/9990435" class="Link--inTextBlock">https://gist.github.com/jboner/9990435</a> </span> </div> </div> </div> <div class="js-gist-file-update-container js-task-list-container"> <div id="file-gameofpingpong-scala" class="file my-2"> <div itemprop="text" class="Box-body p-0 blob-wrapper data type-scala gist-border-0" style="overflow: auto" tabindex="0" role="region" aria-label="file-gameofpingpong-scala" > <div class="js-check-bidi js-blob-code-container blob-code-content"> <template class="js-file-alert-template"> <div data-view-component="true" class="flash flash-warn flash-full d-flex flex-items-center"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert"> <path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path> </svg> <span> This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. <a class="Link--inTextBlock" href="https://github.co/hiddenchars" target="_blank">Learn more about bidirectional Unicode characters</a> </span> <div data-view-component="true" class="flash-action"> <a href="{{ revealButtonHref }}" data-view-component="true" class="btn-sm btn"> Show hidden characters </a> </div> </div></template> <template class="js-line-alert-template"> <span aria-label="This line has hidden Unicode characters" data-view-component="true" class="line-alert tooltipped tooltipped-e"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert"> <path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path> </svg> </span></template> <table data-hpc class="highlight tab-size js-file-line-container" data-tab-size="8" data-paste-markdown-skip data-tagsearch-path="GameOfPingPong.scala"> <tr> <td id="file-gameofpingpong-scala-L1" class="blob-num js-line-number js-blob-rnum" data-line-number="1"></td> <td id="file-gameofpingpong-scala-LC1" class="blob-code blob-code-inner js-file-line"><span class="pl-k">package</span> <span class="pl-en">demo</span></td> </tr> <tr> <td id="file-gameofpingpong-scala-L2" class="blob-num js-line-number js-blob-rnum" data-line-number="2"></td> <td id="file-gameofpingpong-scala-LC2" class="blob-code blob-code-inner js-file-line"> </td> </tr> <tr> <td id="file-gameofpingpong-scala-L3" class="blob-num js-line-number js-blob-rnum" data-line-number="3"></td> <td id="file-gameofpingpong-scala-LC3" class="blob-code blob-code-inner js-file-line"><span class="pl-k">import</span> <span class="pl-en">akka</span>.<span class="pl-en">actor</span>.{<span class="pl-en">Actor</span>, <span class="pl-en">Props</span>, <span class="pl-en">ActorSystem</span>}</td> </tr> <tr> <td id="file-gameofpingpong-scala-L4" class="blob-num js-line-number js-blob-rnum" data-line-number="4"></td> <td id="file-gameofpingpong-scala-LC4" class="blob-code blob-code-inner js-file-line"> </td> </tr> <tr> <td id="file-gameofpingpong-scala-L5" class="blob-num js-line-number js-blob-rnum" data-line-number="5"></td> <td id="file-gameofpingpong-scala-LC5" class="blob-code blob-code-inner js-file-line"><span class="pl-k">object</span> <span class="pl-en">PingPong</span> <span class="pl-k">extends</span> <span class="pl-en">App</span> {</td> </tr> <tr> <td id="file-gameofpingpong-scala-L6" class="blob-num js-line-number js-blob-rnum" data-line-number="6"></td> <td id="file-gameofpingpong-scala-LC6" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">case</span> <span class="pl-k">object</span> <span class="pl-en">Ball</span></td> </tr> <tr> <td id="file-gameofpingpong-scala-L7" class="blob-num js-line-number js-blob-rnum" data-line-number="7"></td> <td id="file-gameofpingpong-scala-LC7" class="blob-code blob-code-inner js-file-line"> </td> </tr> <tr> <td id="file-gameofpingpong-scala-L8" class="blob-num js-line-number js-blob-rnum" data-line-number="8"></td> <td id="file-gameofpingpong-scala-LC8" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">class</span> <span class="pl-en">Ping</span> <span class="pl-k">extends</span> <span class="pl-en">Actor</span> {</td> </tr> <tr> <td id="file-gameofpingpong-scala-L9" class="blob-num js-line-number js-blob-rnum" data-line-number="9"></td> <td id="file-gameofpingpong-scala-LC9" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">var</span> <span class="pl-v">counter</span> <span class="pl-k">=</span> <span class="pl-c1">0</span></td> </tr> </table> </div> </div> </div> </div> </div> <div class="gist-snippet"> <div class="gist-snippet-meta d-flex flex-lg-row flex-column width-full"> <ul class="col-lg-5 col-12 flex-order-2 f6 mt-lg-0 mt-3 mb-lg-0 mb-2 d-flex flex-lg-justify-end"> <li class="d-inline-block mr-lg-3 mr-2"> <a class="Link--muted" href="/jboner/9990435"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code-square"> <path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25Zm7.47 3.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L10.69 8 9.22 6.53a.75.75 0 0 1 0-1.06ZM6.78 6.53 5.31 8l1.47 1.47a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path> </svg> 1 file </a> </li> <li class="d-inline-block mr-lg-3 mr-2"> <a class="Link--muted" href="/jboner/9990435/forks"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo-forked"> <path d="M5 5.372v.878c0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75v-.878a2.25 2.25 0 1 1 1.5 0v.878a2.25 2.25 0 0 1-2.25 2.25h-1.5v2.128a2.251 2.251 0 1 1-1.5 0V8.5h-1.5A2.25 2.25 0 0 1 3.5 6.25v-.878a2.25 2.25 0 1 1 1.5 0ZM5 3.25a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Zm6.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm-3 8.75a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Z"></path> </svg> 2 forks </a> </li> <li class="d-inline-block mr-lg-3 mr-2"> <a class="Link--muted" href="/jboner/9990435#comments"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-comment"> <path d="M1 2.75C1 1.784 1.784 1 2.75 1h10.5c.966 0 1.75.784 1.75 1.75v7.5A1.75 1.75 0 0 1 13.25 12H9.06l-2.573 2.573A1.458 1.458 0 0 1 4 13.543V12H2.75A1.75 1.75 0 0 1 1 10.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h4.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path> </svg> 0 comments </a> </li> <li class="d-inline-block"> <a class="Link--muted" href="/jboner/9990435/stargazers"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-star"> <path d="M8 .25a.75.75 0 0 1 .673.418l1.882 3.815 4.21.612a.75.75 0 0 1 .416 1.279l-3.046 2.97.719 4.192a.751.751 0 0 1-1.088.791L8 12.347l-3.766 1.98a.75.75 0 0 1-1.088-.79l.72-4.194L.818 6.374a.75.75 0 0 1 .416-1.28l4.21-.611L7.327.668A.75.75 0 0 1 8 .25Zm0 2.445L6.615 5.5a.75.75 0 0 1-.564.41l-3.097.45 2.24 2.184a.75.75 0 0 1 .216.664l-.528 3.084 2.769-1.456a.75.75 0 0 1 .698 0l2.77 1.456-.53-3.084a.75.75 0 0 1 .216-.664l2.24-2.183-3.096-.45a.75.75 0 0 1-.564-.41L8 2.694Z"></path> </svg> 9 stars </a> </li> </ul> <div class="flex-order-1 col-lg-7 col-12 d-flex"> <div class="d-lg-inline-block d-none v-align-top mt-1"> <a class="d-inline-block" data-hovercard-type="user" data-hovercard-url="/users/jboner/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/jboner"><img class=" avatar-user" src="https://avatars.githubusercontent.com/u/10701?s=60&amp;v=4" width="30" height="30" alt="@jboner" /></a> </div> <div class="d-inline-block px-lg-2 px-0"> <span> <a data-hovercard-type="user" data-hovercard-url="/users/jboner/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/jboner">jboner</a> / <a href="/jboner/9990435"><strong class="css-truncate-target">PersistedGameOfPingPong.scala</strong></a> </span> <div class="color-fg-muted f6"> Last active <relative-time tense="past" datetime="2019-03-27T16:43:48Z" data-view-component="true">March 27, 2019 16:43</relative-time> </div> <span class="f6 color-fg-muted"> A game of ping pong using two Akka Actors, persisted using Event Sourcing through Akka Persistence </span> </div> </div> </div> <div class="js-gist-file-update-container js-task-list-container"> <div id="file-persistedgameofpingpong-scala" class="file my-2"> <div itemprop="text" class="Box-body p-0 blob-wrapper data type-scala gist-border-0" style="overflow: auto" tabindex="0" role="region" aria-label="file-persistedgameofpingpong-scala" > <div class="js-check-bidi js-blob-code-container blob-code-content"> <template class="js-file-alert-template"> <div data-view-component="true" class="flash flash-warn flash-full d-flex flex-items-center"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert"> <path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path> </svg> <span> This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. <a class="Link--inTextBlock" href="https://github.co/hiddenchars" target="_blank">Learn more about bidirectional Unicode characters</a> </span> <div data-view-component="true" class="flash-action"> <a href="{{ revealButtonHref }}" data-view-component="true" class="btn-sm btn"> Show hidden characters </a> </div> </div></template> <template class="js-line-alert-template"> <span aria-label="This line has hidden Unicode characters" data-view-component="true" class="line-alert tooltipped tooltipped-e"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert"> <path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path> </svg> </span></template> <table data-hpc class="highlight tab-size js-file-line-container" data-tab-size="8" data-paste-markdown-skip data-tagsearch-path="PersistedGameOfPingPong.scala"> <tr> <td id="file-persistedgameofpingpong-scala-L1" class="blob-num js-line-number js-blob-rnum" data-line-number="1"></td> <td id="file-persistedgameofpingpong-scala-LC1" class="blob-code blob-code-inner js-file-line"><span class="pl-k">package</span> <span class="pl-en">demo</span></td> </tr> <tr> <td id="file-persistedgameofpingpong-scala-L2" class="blob-num js-line-number js-blob-rnum" data-line-number="2"></td> <td id="file-persistedgameofpingpong-scala-LC2" class="blob-code blob-code-inner js-file-line"> </td> </tr> <tr> <td id="file-persistedgameofpingpong-scala-L3" class="blob-num js-line-number js-blob-rnum" data-line-number="3"></td> <td id="file-persistedgameofpingpong-scala-LC3" class="blob-code blob-code-inner js-file-line"><span class="pl-k">import</span> <span class="pl-en">akka</span>.<span class="pl-en">actor</span>.{<span class="pl-en">Props</span>, <span class="pl-en">ActorSystem</span>}</td> </tr> <tr> <td id="file-persistedgameofpingpong-scala-L4" class="blob-num js-line-number js-blob-rnum" data-line-number="4"></td> <td id="file-persistedgameofpingpong-scala-LC4" class="blob-code blob-code-inner js-file-line"><span class="pl-k">import</span> <span class="pl-en">akka</span>.<span class="pl-en">persistence</span>.<span class="pl-en">PersistentActor</span></td> </tr> <tr> <td id="file-persistedgameofpingpong-scala-L5" class="blob-num js-line-number js-blob-rnum" data-line-number="5"></td> <td id="file-persistedgameofpingpong-scala-LC5" class="blob-code blob-code-inner js-file-line"> </td> </tr> <tr> <td id="file-persistedgameofpingpong-scala-L6" class="blob-num js-line-number js-blob-rnum" data-line-number="6"></td> <td id="file-persistedgameofpingpong-scala-LC6" class="blob-code blob-code-inner js-file-line"><span class="pl-k">object</span> <span class="pl-en">PingPong</span> <span class="pl-k">extends</span> <span class="pl-en">App</span> {</td> </tr> <tr> <td id="file-persistedgameofpingpong-scala-L7" class="blob-num js-line-number js-blob-rnum" data-line-number="7"></td> <td id="file-persistedgameofpingpong-scala-LC7" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">case</span> <span class="pl-k">object</span> <span class="pl-en">Ball</span> <span class="pl-c"><span class="pl-c">//</span> The Command</span></td> </tr> <tr> <td id="file-persistedgameofpingpong-scala-L8" class="blob-num js-line-number js-blob-rnum" data-line-number="8"></td> <td id="file-persistedgameofpingpong-scala-LC8" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">case</span> <span class="pl-k">object</span> <span class="pl-en">BallReceived</span> <span class="pl-c"><span class="pl-c">//</span> The Domain Event, represents a Fact, something that have already happened</span></td> </tr> <tr> <td id="file-persistedgameofpingpong-scala-L9" class="blob-num js-line-number js-blob-rnum" data-line-number="9"></td> <td id="file-persistedgameofpingpong-scala-LC9" class="blob-code blob-code-inner js-file-line"> </td> </tr> <tr> <td id="file-persistedgameofpingpong-scala-L10" class="blob-num js-line-number js-blob-rnum" data-line-number="10"></td> <td id="file-persistedgameofpingpong-scala-LC10" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">class</span> <span class="pl-en">Ping</span> <span class="pl-k">extends</span> <span class="pl-en">PersistentActor</span> {</td> </tr> </table> </div> </div> </div> </div> </div> <div class="gist-snippet"> <div class="gist-snippet-meta d-flex flex-lg-row flex-column width-full"> <ul class="col-lg-5 col-12 flex-order-2 f6 mt-lg-0 mt-3 mb-lg-0 mb-2 d-flex flex-lg-justify-end"> <li class="d-inline-block mr-lg-3 mr-2"> <a class="Link--muted" href="/jboner/8556813"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code-square"> <path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25Zm7.47 3.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L10.69 8 9.22 6.53a.75.75 0 0 1 0-1.06ZM6.78 6.53 5.31 8l1.47 1.47a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path> </svg> 1 file </a> </li> <li class="d-inline-block mr-lg-3 mr-2"> <a class="Link--muted" href="/jboner/8556813/forks"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo-forked"> <path d="M5 5.372v.878c0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75v-.878a2.25 2.25 0 1 1 1.5 0v.878a2.25 2.25 0 0 1-2.25 2.25h-1.5v2.128a2.251 2.251 0 1 1-1.5 0V8.5h-1.5A2.25 2.25 0 0 1 3.5 6.25v-.878a2.25 2.25 0 1 1 1.5 0ZM5 3.25a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Zm6.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm-3 8.75a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Z"></path> </svg> 5 forks </a> </li> <li class="d-inline-block mr-lg-3 mr-2"> <a class="Link--muted" href="/jboner/8556813#comments"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-comment"> <path d="M1 2.75C1 1.784 1.784 1 2.75 1h10.5c.966 0 1.75.784 1.75 1.75v7.5A1.75 1.75 0 0 1 13.25 12H9.06l-2.573 2.573A1.458 1.458 0 0 1 4 13.543V12H2.75A1.75 1.75 0 0 1 1 10.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h4.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path> </svg> 2 comments </a> </li> <li class="d-inline-block"> <a class="Link--muted" href="/jboner/8556813/stargazers"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-star"> <path d="M8 .25a.75.75 0 0 1 .673.418l1.882 3.815 4.21.612a.75.75 0 0 1 .416 1.279l-3.046 2.97.719 4.192a.751.751 0 0 1-1.088.791L8 12.347l-3.766 1.98a.75.75 0 0 1-1.088-.79l.72-4.194L.818 6.374a.75.75 0 0 1 .416-1.28l4.21-.611L7.327.668A.75.75 0 0 1 8 .25Zm0 2.445L6.615 5.5a.75.75 0 0 1-.564.41l-3.097.45 2.24 2.184a.75.75 0 0 1 .216.664l-.528 3.084 2.769-1.456a.75.75 0 0 1 .698 0l2.77 1.456-.53-3.084a.75.75 0 0 1 .216-.664l2.24-2.183-3.096-.45a.75.75 0 0 1-.564-.41L8 2.694Z"></path> </svg> 43 stars </a> </li> </ul> <div class="flex-order-1 col-lg-7 col-12 d-flex"> <div class="d-lg-inline-block d-none v-align-top mt-1"> <a class="d-inline-block" data-hovercard-type="user" data-hovercard-url="/users/jboner/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/jboner"><img class=" avatar-user" src="https://avatars.githubusercontent.com/u/10701?s=60&amp;v=4" width="30" height="30" alt="@jboner" /></a> </div> <div class="d-inline-block px-lg-2 px-0"> <span> <a data-hovercard-type="user" data-hovercard-url="/users/jboner/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/jboner">jboner</a> / <a href="/jboner/8556813"><strong class="css-truncate-target">how-akka-maps-to-eai-patterns.txt</strong></a> </span> <div class="color-fg-muted f6"> Last active <relative-time tense="past" datetime="2022-10-09T21:57:36Z" data-view-component="true">October 9, 2022 21:57</relative-time> </div> <span class="f6 color-fg-muted"> How Akka maps to EAI Patterns </span> </div> </div> </div> <div class="js-gist-file-update-container js-task-list-container"> <div id="file-how-akka-maps-to-eai-patterns-txt" class="file my-2"> <div itemprop="text" class="Box-body p-0 blob-wrapper data type-text gist-border-0" style="overflow: auto" tabindex="0" role="region" aria-label="file-how-akka-maps-to-eai-patterns-txt" > <div class="js-check-bidi js-blob-code-container blob-code-content"> <template class="js-file-alert-template"> <div data-view-component="true" class="flash flash-warn flash-full d-flex flex-items-center"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert"> <path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path> </svg> <span> This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. <a class="Link--inTextBlock" href="https://github.co/hiddenchars" target="_blank">Learn more about bidirectional Unicode characters</a> </span> <div data-view-component="true" class="flash-action"> <a href="{{ revealButtonHref }}" data-view-component="true" class="btn-sm btn"> Show hidden characters </a> </div> </div></template> <template class="js-line-alert-template"> <span aria-label="This line has hidden Unicode characters" data-view-component="true" class="line-alert tooltipped tooltipped-e"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert"> <path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path> </svg> </span></template> <table data-hpc class="highlight tab-size js-file-line-container" data-tab-size="8" data-paste-markdown-skip data-tagsearch-path="how-akka-maps-to-eai-patterns.txt"> <tr> <td id="file-how-akka-maps-to-eai-patterns-txt-L1" class="blob-num js-line-number js-blob-rnum" data-line-number="1"></td> <td id="file-how-akka-maps-to-eai-patterns-txt-LC1" class="blob-code blob-code-inner js-file-line"># How Akka maps to EAI Patterns</td> </tr> <tr> <td id="file-how-akka-maps-to-eai-patterns-txt-L2" class="blob-num js-line-number js-blob-rnum" data-line-number="2"></td> <td id="file-how-akka-maps-to-eai-patterns-txt-LC2" class="blob-code blob-code-inner js-file-line"> </td> </tr> <tr> <td id="file-how-akka-maps-to-eai-patterns-txt-L3" class="blob-num js-line-number js-blob-rnum" data-line-number="3"></td> <td id="file-how-akka-maps-to-eai-patterns-txt-LC3" class="blob-code blob-code-inner js-file-line">Might be up for debate or just plain wrong. Just some notes I scribbled down some time ago. </td> </tr> <tr> <td id="file-how-akka-maps-to-eai-patterns-txt-L4" class="blob-num js-line-number js-blob-rnum" data-line-number="4"></td> <td id="file-how-akka-maps-to-eai-patterns-txt-LC4" class="blob-code blob-code-inner js-file-line"> </td> </tr> <tr> <td id="file-how-akka-maps-to-eai-patterns-txt-L5" class="blob-num js-line-number js-blob-rnum" data-line-number="5"></td> <td id="file-how-akka-maps-to-eai-patterns-txt-LC5" class="blob-code blob-code-inner js-file-line">-----------------------------------------------------------------------------------------------------------------</td> </tr> <tr> <td id="file-how-akka-maps-to-eai-patterns-txt-L6" class="blob-num js-line-number js-blob-rnum" data-line-number="6"></td> <td id="file-how-akka-maps-to-eai-patterns-txt-LC6" class="blob-code blob-code-inner js-file-line">EAI PATTERN AKKA PATTERN REFERENCE</td> </tr> <tr> <td id="file-how-akka-maps-to-eai-patterns-txt-L7" class="blob-num js-line-number js-blob-rnum" data-line-number="7"></td> <td id="file-how-akka-maps-to-eai-patterns-txt-LC7" class="blob-code blob-code-inner js-file-line">-----------------------------------------------------------------------------------------------------------------</td> </tr> <tr> <td id="file-how-akka-maps-to-eai-patterns-txt-L8" class="blob-num js-line-number js-blob-rnum" data-line-number="8"></td> <td id="file-how-akka-maps-to-eai-patterns-txt-LC8" class="blob-code blob-code-inner js-file-line">Point to Point Channel Regular Actor Communication http://www.eaipatterns.com/PointToPointChannel.html</td> </tr> <tr> <td id="file-how-akka-maps-to-eai-patterns-txt-L9" class="blob-num js-line-number js-blob-rnum" data-line-number="9"></td> <td id="file-how-akka-maps-to-eai-patterns-txt-LC9" class="blob-code blob-code-inner js-file-line">Event-Driven Consumer Regular Actor Receive http://www.eaipatterns.com/EventDrivenConsumer.html</td> </tr> <tr> <td id="file-how-akka-maps-to-eai-patterns-txt-L10" class="blob-num js-line-number js-blob-rnum" data-line-number="10"></td> <td id="file-how-akka-maps-to-eai-patterns-txt-LC10" class="blob-code blob-code-inner js-file-line">Message Selector Actor with Stash http://www.eaipatterns.com/MessageSelector.html</td> </tr> </table> </div> </div> </div> </div> </div> <div class="paginate-container"> <div class="pagination"><span class="disabled color-fg-muted">Newer</span><a rel="nofollow" href="https://gist.github.com/jboner?page=2">Older</a></div> </div> </div> </div> </div> </main> </div> </div> <footer class="footer pt-8 pb-6 f6 color-fg-muted p-responsive" role="contentinfo" > <h2 class='sr-only'>Footer</h2> <div class="d-flex flex-justify-center flex-items-center flex-column-reverse flex-lg-row flex-wrap flex-lg-nowrap"> <div class="d-flex flex-items-center flex-shrink-0 mx-2"> <a aria-label="Homepage" title="GitHub" class="footer-octicon mr-2" href="https://github.com"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-mark-github"> <path d="M12.5.75C6.146.75 1 5.896 1 12.25c0 5.089 3.292 9.387 7.863 10.91.575.101.79-.244.79-.546 0-.273-.014-1.178-.014-2.142-2.889.532-3.636-.704-3.866-1.35-.13-.331-.69-1.352-1.18-1.625-.402-.216-.977-.748-.014-.762.906-.014 1.553.834 1.769 1.179 1.035 1.74 2.688 1.25 3.349.948.1-.747.402-1.25.733-1.538-2.559-.287-5.232-1.279-5.232-5.678 0-1.25.445-2.285 1.178-3.09-.115-.288-.517-1.467.115-3.048 0 0 .963-.302 3.163 1.179.92-.259 1.897-.388 2.875-.388.977 0 1.955.13 2.875.388 2.2-1.495 3.162-1.179 3.162-1.179.633 1.581.23 2.76.115 3.048.733.805 1.179 1.825 1.179 3.09 0 4.413-2.688 5.39-5.247 5.678.417.36.776 1.05.776 2.128 0 1.538-.014 2.774-.014 3.162 0 .302.216.662.79.547C20.709 21.637 24 17.324 24 12.25 24 5.896 18.854.75 12.5.75Z"></path> </svg> </a> <span> &copy; 2025 GitHub,&nbsp;Inc. </span> </div> <nav aria-label="Footer"> <h3 class="sr-only" id="sr-footer-heading">Footer navigation</h3> <ul class="list-style-none d-flex flex-justify-center flex-wrap mb-2 mb-lg-0" aria-labelledby="sr-footer-heading"> <li class="mx-2"> <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to Terms&quot;,&quot;label&quot;:&quot;text:terms&quot;}" href="https://docs.github.com/site-policy/github-terms/github-terms-of-service" data-view-component="true" class="Link--secondary Link">Terms</a> </li> <li class="mx-2"> <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to privacy&quot;,&quot;label&quot;:&quot;text:privacy&quot;}" href="https://docs.github.com/site-policy/privacy-policies/github-privacy-statement" data-view-component="true" class="Link--secondary Link">Privacy</a> </li> <li class="mx-2"> <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to security&quot;,&quot;label&quot;:&quot;text:security&quot;}" href="https://github.com/security" data-view-component="true" class="Link--secondary Link">Security</a> </li> <li class="mx-2"> <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to status&quot;,&quot;label&quot;:&quot;text:status&quot;}" href="https://www.githubstatus.com/" data-view-component="true" class="Link--secondary Link">Status</a> </li> <li class="mx-2"> <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to docs&quot;,&quot;label&quot;:&quot;text:docs&quot;}" href="https://docs.github.com/" data-view-component="true" class="Link--secondary Link">Docs</a> </li> <li class="mx-2"> <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to contact&quot;,&quot;label&quot;:&quot;text:contact&quot;}" href="https://support.github.com?tags=dotcom-footer" data-view-component="true" class="Link--secondary Link">Contact</a> </li> <li class="mx-2" > <cookie-consent-link> <button type="button" class="Link--secondary underline-on-hover border-0 p-0 color-bg-transparent" data-action="click:cookie-consent-link#showConsentManagement" data-analytics-event="{&quot;location&quot;:&quot;footer&quot;,&quot;action&quot;:&quot;cookies&quot;,&quot;context&quot;:&quot;subfooter&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;cookies_link_subfooter_footer&quot;}" > Manage cookies </button> </cookie-consent-link> </li> <li class="mx-2"> <cookie-consent-link> <button type="button" class="Link--secondary underline-on-hover border-0 p-0 color-bg-transparent" data-action="click:cookie-consent-link#showConsentManagement" data-analytics-event="{&quot;location&quot;:&quot;footer&quot;,&quot;action&quot;:&quot;dont_share_info&quot;,&quot;context&quot;:&quot;subfooter&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;dont_share_info_link_subfooter_footer&quot;}" > Do not share my personal information </button> </cookie-consent-link> </li> </ul> </nav> </div> </footer> <ghcc-consent id="ghcc" class="position-fixed bottom-0 left-0" style="z-index: 999999" data-initial-cookie-consent-allowed="" data-cookie-consent-required="false"></ghcc-consent> <div id="ajax-error-message" class="ajax-error-message flash flash-error" hidden> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert"> <path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path> </svg> <button type="button" class="flash-close js-ajax-error-dismiss" aria-label="Dismiss error"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x"> <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path> </svg> </button> You can’t perform that action at this time. </div> <template id="site-details-dialog"> <details class="details-reset details-overlay details-overlay-dark lh-default color-fg-default hx_rsm" open> <summary role="button" aria-label="Close dialog"></summary> <details-dialog class="Box Box--overlay d-flex flex-column anim-fade-in fast hx_rsm-dialog hx_rsm-modal"> <button class="Box-btn-octicon m-0 btn-octicon position-absolute right-0 top-0" type="button" aria-label="Close dialog" data-close-dialog> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x"> <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path> </svg> </button> <div class="octocat-spinner my-6 js-details-dialog-spinner"></div> </details-dialog> </details> </template> <div class="Popover js-hovercard-content position-absolute" style="display: none; outline: none;"> <div class="Popover-message Popover-message--bottom-left Popover-message--large Box color-shadow-large" style="width:360px;"> </div> </div> <template id="snippet-clipboard-copy-button"> <div class="zeroclipboard-container position-absolute right-0 top-0"> <clipboard-copy aria-label="Copy" class="ClipboardButton btn js-clipboard-copy m-2 p-0" data-copy-feedback="Copied!" data-tooltip-direction="w"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copy js-clipboard-copy-icon m-2"> <path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path> </svg> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check js-clipboard-check-icon color-fg-success d-none m-2"> <path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path> </svg> </clipboard-copy> </div> </template> <template id="snippet-clipboard-copy-button-unpositioned"> <div class="zeroclipboard-container"> <clipboard-copy aria-label="Copy" class="ClipboardButton btn btn-invisible js-clipboard-copy m-2 p-0 d-flex flex-justify-center flex-items-center" data-copy-feedback="Copied!" data-tooltip-direction="w"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copy js-clipboard-copy-icon"> <path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path> </svg> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check js-clipboard-check-icon color-fg-success d-none"> <path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path> </svg> </clipboard-copy> </div> </template> </div> <div id="js-global-screen-reader-notice" class="sr-only mt-n1" aria-live="polite" aria-atomic="true" ></div> <div id="js-global-screen-reader-notice-assertive" class="sr-only mt-n1" aria-live="assertive" aria-atomic="true"></div> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10