| <%= form_for(@user) do |f| %> | |
| <% if @user.errors.any? %> | |
| <div id="error_explanation"> | |
| <h2><%= pluralize(@user.errors.count, "error") %> prohibited this user from being saved:</h2> | |
| <ul> | |
| <% @user.errors.full_messages.each do |msg| %> | |
| <li><%= msg %></li> | |
| <% end %> | |
| </ul> |
| #!/bin/bash | |
| for f in *.scss; do sass-convert $f ${f%scss}sass ; done | |
| rm *.scss |
| " Use Vim settings, rather than Vi settings | |
| set nocompatible | |
| " Read file when modified outside Vim | |
| set autoread | |
| " Do not keep any history | |
| set viminfo='0,:0,<0,@0,f0 | |
| set nobackup | |
| set nowb |
| <li class="<%= self_or_other(message) %>"> | |
| <div class="avatar"> | |
| <img src="http://placehold.it/50x50" /> | |
| </div> | |
| <div class="chatboxmessagecontent"> | |
| <p><%= message.body %></p> | |
| <time datetime="<%= message.created_at %>" title="<%= message.created_at.strftime("%d %b %Y at %I:%M%p") %>"> | |
| <%= message_interlocutor(message).name %> • <%= message.created_at.strftime("%H:%M %p") %> | |
| </time> | |
| </div> |
| SPC | |
| SPC: find file | |
| , switch buffer | |
| . browse files | |
| : MX | |
| ; EX | |
| < switch buffer | |
| ` eval | |
| u universal arg | |
| x pop up scratch |
| 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 |
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
