[ACCOUNTING FOR DEVELOPERS]
|
+----------------+-------------+-------------+----------------+
| | | | |
v v v v v
[Core Accounting] [Financial API] [Data Models] [Compliance] [Financial Logic]
| | | | |
| ;;; $DOOMDIR/config.el -*- lexical-binding: t; -*- | |
| ;; Place your private configuration here! Remember, you do not need to run 'doom | |
| ;; sync' after modifying this file! | |
| ;; Some functionality uses this to identify you, e.g. GPG configuration, email | |
| ;; clients, file templates and snippets. It is optional. | |
| (setq user-full-name "Todd Pickell" | |
| user-mail-address "[email protected]") |
From April 10 to May 2, 2024, I did all the work myself to get SOC 2 Type II certified. I'm now half way through the observation period to get Type II. The observation period is easy, you just have to babysit the controls. Getting to Type I is much harder. It took me somewhere around 100 hours.
SOC 2 is a security framework that, for many customers, eliminates the need to have you, as a vendor, fill out a lengthy security questionnaire. The SOC 2 controls and audits ask pretty much all the questions you'd get from a customer's security team. In fact, that is a great way to think about SOC 2. It's essentially a very thorough questionnaire you fill out once, an independent auditor forms an opinion of it in a report, and you share with all your customers.
There are two parts to SOC 2. The initial audit, where an auditor writes a Type I report sharing their opinion of your current setup. Then there's a 3 month observ
| const webSocket = new WebSocket('wss://echo.websocket.org'); | |
| //Event listeners are the pillars upon which WebSockets are built. This event fires when the WebSocket is considered 'OPEN', | |
| //which means that it has connected successfully. | |
| webSocket.addEventListener('open', function(event) { | |
| console.log('websocket connected successfully') //log this into the browser console so we can check if the websocket connected | |
| }); | |
| //This is a global reference to the websocket that we created. We need this because otherwise multiple JS |
| { | |
| "title": "Erlang Atoms", | |
| "description": "", | |
| "visuals": [ | |
| { | |
| "title": "Atom usage", | |
| "description": "Usage of atoms in Erlang and the configured limit.", | |
| "line_label": "%name% %hostname%-%type%", | |
| "display": "LINE", | |
| "format": "number", |
| -module(all_atoms). | |
| -export([all_atoms/0]). | |
| atom_by_number(N) -> | |
| binary_to_term(<<131,75,N:24>>). | |
| all_atoms() -> | |
| atoms_starting_at(0). |
| SPC | |
| SPC: find file | |
| , switch buffer | |
| . browse files | |
| : MX | |
| ; EX | |
| < switch buffer | |
| ` eval | |
| u universal arg | |
| x pop up scratch |
| ```erlang | |
| -module(fact). | |
| % fact module | |
| -export([run/1]). | |
| -spec run(integer()) -> integer(). | |
| run(N) when N > 0 -> | |
| N * run(N-1); |
| Print file names | |
| ``` | |
| for f in *.jpg; do echo ${f}; done; |
