- A
secret
byte you want to read is stored at inaccessible memory locationpriv_mem
. - The sender triggers an access exception by attempting to read
priv_mem
. - Due to CPU optimization (out-of-order execution), the load of
secret
frompriv_mem
and the use of its value in (4) and (5) below may execute before the exception is triggered. - Calculate an
offset
into a known arrayprobe
by multiplyingsecret
by the width of a cache line (or whatever block size the CPU typically fetches, like a 4096-byte page). This guarantees each of those 256 possible offsets will cache separately. - Load
probe[offset]
, which causes the CPU to cache exactly one chunk of of our array, populating one cache line. - The exception finally triggers, clearing the modified registers...but cached data is not excised.
- Iterate over all 256 offsets into
probe
to find out which one loads fast. You've determined the value ofsecret
.
#!/bin/sh | |
# @raycast.schemaVersion 1 | |
# @raycast.title Summarize Safari page | |
# @raycast.mode fullOutput | |
# | |
# Optional parameters: | |
# @raycast.icon ✨ | |
# | |
# @raycast.packageName Things |
package derivation | |
import java.util.Locale | |
import shapeless._ | |
import scala.reflect.ClassTag | |
import scala.util.Try | |
sealed trait Utensil |
Every application ever written can be viewed as some sort of transformation on data. Data can come from different sources, such as a network or a file or user input or the Large Hadron Collider. It can come from many sources all at once to be merged and aggregated in interesting ways, and it can be produced into many different output sinks, such as a network or files or graphical user interfaces. You might produce your output all at once, as a big data dump at the end of the world (right before your program shuts down), or you might produce it more incrementally. Every application fits into this model.
The scalaz-stream project is an attempt to make it easy to construct, test and scale programs that fit within this model (which is to say, everything). It does this by providing an abstraction around a "stream" of data, which is really just this notion of some number of data being sequentially pulled out of some unspecified data source. On top of this abstraction, sca
// Magnet pattern documented here: http://spray.io/blog/2012-12-13-the-magnet-pattern/ | |
object TypeclassExample { | |
// first, define the typeclass | |
trait Plotter[A] { | |
def plot: Unit | |
} | |
// this typeclass instance knows how to plot collections | |
class IterablePlotter[A: Numeric](it: Iterable[A]) extends Plotter[Iterable[A]] { |
A checklist for designing and developing internet scale services, inspired by James Hamilton's 2007 paper "On Desgining and Deploying Internet-Scale Services."
- Does the design expect failures to happen regularly and handle them gracefully?
- Have we kept things as simple as possible?
#!/bin/sh | |
yum update -y | |
yum install -y wget git | |
wget "http://www.haproxy.org/download/1.5/src/haproxy-1.5.6.tar.gz" | |
yum groupinstall -y 'Development Tools' | |
yum install -y openssl-devel | |
yum install -y rpmdevtools pcre-devel | |
rpmdev-setuptree | |
mv haproxy-1.5.6.tar.gz ~/rpmbuild/SOURCES/ |
#!/usr/bin/env zsh | |
# in fino veritas | |
# Borrowing shamelessly from these oh-my-zsh themes: | |
# fino-time | |
# pure | |
# https://gist.github.com/smileart/3750104 | |
# Set required options |
Note: This was written in 2015, it may be out of date now.
There are a lot of commands here which I use
sudo
if you don't know what you're doing withsudo
, especially where Irm
you can severely screw up your system.
There are many reasons which you would want to remove a piece of software such as McAfee, such as not wanting it to hammer your CPU during work hours which seems like primetime for a virus scan.
I intend this to be a living document, I have included suggestions from peoples' replies.