Mathematics and Computer Science masters course of the University of Oxford Updated 2025-06-17 +Created 1970-01-01
Corresponding undergrad: Mathematics and Computer science course of the University of Oxford
The term "visible life" refers to multicellular from before people knew there was life in the proterozoic.
How to use an Oxford Nanopore MinION to extract DNA from river water and determine which bacteria live in it Post filtration purification Updated 2025-06-17 +Created 1970-01-01
After filtration, all DNA should present in the filter, so we cut the paper up with scissors and put the pieces into an Eppendorf: Video 1. "Cutting vacuum pump filter and placing it in Eppendorf".
Cutting vacuum pump filter and placing it in Eppendorf
. Source. Now that we had the DNA in Eppendorfs, we were ready to continue the purification in a simpler and more standardized lab pipeline fashion.
First we added some small specialized beads and chemicals to the water and shook them Eppendorfs hard in a Scientific Industries Inc. Vortex-Genie 2 machine to break the cell and free the DNA.
Once that was done, we added several reagents which split the solution into two phases: one containing the DNA and the other not. We would then pipette the phase with the DNA out to the next Eppendorf, and continue the process.
In one step for example, the DNA was present as a white precipitate at the bottom of the tube, and we threw away the supernatant liquid: Figure 1. "White precipitate formed with Qiagen DNeasy PowerWater Kit".
At various stages, centrifuging was also necessary. Much like the previous vacuum pump step, this adds extra gravity to speed up the separation of phases with different molecular masses.
Then, when we had finally finished all the purification steps, we measured the quantity of DNA with a Biochrom SimpliNano spectrophotometer to check that the purification went well:
Cool data embedded in the Bitcoin blockchain Len Sassaman tribute Updated 2025-06-17 +Created 1970-01-01
Tribute to computer security researcher Len Sassaman, who killed himself on 2011-07-03, starting with an ASCII art portrait followed by text.
Because it comes so early in the blockchain, and because it is the first ASCII art on the blochain as far as we can see, and because is so well done, this is by far the most visible ASCII art of the Bitcoin blockchain.
Present at tx 930a2114cdaa86e1fac46d15c74e81c09eee1d4150ff9d48e76cb0697d8e1d72. It does not show well on Bitcoin Inscription Indexer however with rationale described at: github.com/cirosantilli/bitcoin-inscription-indexer/tree/3f53e152ec9bb0d070dbcb8f9249d92f89effa70#smart-newline-joining
But it can be seen at on bitcoinStrings.com at: bitcoinstrings.com/blk00003.txt.
Transaction: www.blockchain.com/btc/tx/930a2114cdaa86e1fac46d15c74e81c09eee1d4150ff9d48e76cb0697d8e1d72 from 2011-07-30, a few weeks after the suicide.
Discussion: bitcoin.stackexchange.com/questions/3370/in-which-block-was-len-sassaman-memorialised/101276#101276
Created by famous computer security researcher Dan Kaminsky and Travis Goodspeed, presumably this other security researcher, evidence:
- signature on the tribute
- the art is highlighted at Video 1. "Black OPS of TCP/IP by Dan Kaminsky (2011)", which happened very few days after the art was uploaded to the blockchain, thus making it exceedingly unlikely that someone else could have done it
"Bernanke" is a reference to Ben Bernanke, who was one of the economists in power in the US Government during the financial crisis of 2007-2008, and much criticized by some, as shown for example in the documentary Inside Job (2010). As hinted in the Genesis block message, the United States Government bailed out many big banks that were going to go bankrupt with taxpayer money, even though it was precisly those banks that had started the crisis through their reckless investment, thus violating principles of the free market and business accountability. This was one of the motivations for the creation Bitcoin, which could reduce government power over economic policy.
It is worth mentioning that there do exist some slightly earlier "artistic" inscriptions in the form Punycode inscription in the Namecoin blockchain, but as far as we've seen, the are all trivial compared to
BitLen
in terms of artistic value/size.---BEGIN TRIBUTE---
#./BitLen
:::::::::::::::::::
:::::::.::.::.:.:::
:.: :.' ' ' ' ' : :
:.:'' ,,xiW,"4x, ''
: ,dWWWXXXXi,4WX,
' dWWWXXX7" `X,
lWWWXX7 __ _ X
:WWWXX7 ,xXX7' "^^X
lWWWX7, _.+,, _.+.,
:WWW7,. `^"-" ,^-'
WW",X: X,
"7^^Xl. _(_x7'
l ( :X: __ _
`. " XX ,xxWWWWX7
)X- "" 4X" .___.
,W X :Xi _,,_
WW X 4XiyXWWXd
"" ,, 4XWWWWXX
, R7X, "^447^
R, "4RXk, _, ,
TWk "4RXXi, X',x
lTWk, "4RRR7' 4 XH
:lWWWk, ^" `4
::TTXWWi,_ Xll :..
=-=-=-=-=-=-=-=-=-=
LEN "rabbi" SASSAMA
1980-2011
Len was our friend.
A brilliant mind,
a kind soul, and
a devious schemer;
husband to Meredith
brother to Calvin,
son to Jim and
Dana Hartshorn,
coauthor and
cofounder and
Shmoo and so much
more. We dedicate
this silly hack to
Len, who would have
found it absolutely
hilarious.
--Dan Kaminsky,
Travis Goodspeed
P.S. My apologies,
BitCoin people. He
also would have
LOL'd at BitCoin's
new dependency upon
ASCII BERNANKE
:'::.:::::.:::.::.:
: :.: ' ' ' ' : :':
:.: _.__ '.:
: _,^" "^x, :
' x7' `4,
XX7 4XX
XX XX
Xl ,xxx, ,xxx,XX
( ' _,+o, | ,o+,"
4 "-^' X "^-'" 7
l, ( )) ,X
:Xx,_ ,xXXXxx,_,XX
4XXiX'-___-`XXXX'
4XXi,_ _iXX7'
, `4XXXXXXXXX^ _,
Xx, ""^^^XX7,xX
W,"4WWx,_ _,XxWWX7'
Xwi, "4WW7""4WW7',W
TXXWw, ^7 Xk 47 ,WH
:TXXXWw,_ "), ,wWT:
::TTXXWWW lXl WWT:
----END TRIBUTE----
Code 1.
Len Sassaman tribute
. Official portrait of Ben Bernanke (2008)
Source. Reference image from Wikipedia for the ASCII art.Black OPS of TCP/IP by Dan Kaminsky (2011)
Source. Presented at the BlackHat 2011 conference. Dan unveils the Len memorial at the given timestamp around 8:41. The presentation was done on 2011-08-03 or 04, so very few days after the upload to the blockchain.From the JSON transaction we understand the encoding format:So it is really encoded one line at a time in the
"out":[
{
"spent":false,
"tx_index":0,
"type":0,
"addr":"1CqKQ2EqUscMkeYRFMmgepNGtfKynXzKW7",
"value":1000000,
"n":0,
"script":"76a91481ccb4ee682bc1da3bda70176b7ccc616a6ba9da88ac"
},
{
"spent":false,
"tx_index":0,
"type":0,
"addr":"157sXa7duStAvq3dPLWe7J449sgh47eHzw",
"value":1000000,
"n":1,
"script":"76a9142d2d2d424547494e20545249425554452d2d2d2088ac"
},
...
{
"spent":false,
"tx_index":0,
"type":0,
"addr":"157sXYpjvAyEJ6TdVFaVzmoETAQnHB6FGU",
"value":1000000,
"n":77,
"script":"76a9142d2d2d2d454e4420545249425554452d2d2d2d2088ac"
}
script
of the transaction outputs. Cool data embedded in the Bitcoin blockchain Technically interesting ordinal Updated 2025-06-17 +Created 1970-01-01
This section is about ordinals that are interesting primarily due to technical reasons linked to edge cases of the protocol.
Interesting MIME types:
- ordinals.com/inscription/dad86d722156b8c384c1f3243e40aa7a0f6f5be496bc24e19485831584f9803fi0: mime type is an UTF-8 orange emoji "🟠"
- ordinals.com/inscription/bc7b86245159cdf8bc63489687909f766a0a0e08279d23fb077cdd60ab1e9f22i0: mime type is an XSS attempt:
<script>alert('xss in content type')</script> tx=bc7b86245159cdf8bc63489687909f766a0a0e08279d23fb077cdd60ab1e9f22
- ordinals.com/inscription/bc7b86245159cdf8bc63489687909f766a0a0e08279d23fb077cdd60ab1e9f22i0: mime type is "FuckYou"
- ordinals.com/inscription/00b0ece72217ce49b637b3f9bf5335bc245e588568aa0676581b40c1bedc521di0: the mime is a long JSON. However, it does appear to be a valid feature as it rendered specially on ordinals.com.
Different
ord
markers:- 71e85885522047240a9e70542145dbf2385e1bd468e6ac6002aa755422ea10f5 uses
takingnames
. Decode with:gives the PNG of the wireframe draing of a washing machine with transparent background.bitcoin-core.cli decodescript "$(bitcoin-core.cli getrawtransaction 71e85885522047240a9e70542145dbf2385e1bd468e6ac6002aa755422ea10f5 true | jq -r '.vin[0].txinwitness[1]')" | jq -r .asm | sed 's/.* 0 //;s/ OP_ENDIF//;s/ //g' | xxd -r -p > 71e85885522047240a9e70542145dbf2385e1bd468e6ac6002aa755422ea10f5.png
The literal Chinese name says it all: "Fake Mountain". The stones evoke the feeling of the beautiful rock mountains of China.
The term "奇石假山" (qi2 shi2 jia3 shan1, lit. "weird shaped stone fake mountain") is also used, almost as a synonym by many people, since the stones are often chose in interesting shapes. Choosing the right stone is basically an art form in itself.
The stones used are generally limestone, which as a sedimentary rock is weaker, and more likely to be eroded into interesting shapes.
How to use an Oxford Nanopore MinION to extract DNA from river water and determine which bacteria live in it Filtration with vacuum pump Updated 2025-06-17 +Created 1970-01-01
The first thing we did was to filter the water samples with a membrane filter that is so fine that not even bacteria can pass through, but water can.
Therefore, after filtration, we would have all particles such as bacteria and larger dirt pieces in the filter.
From the 1 liter in each bottle, we only used 400 ml because previous experiments showed that filtering the remaining 600 ml is very time consuming because the membrane filter gets clogged up.
Therefore, the filtration step allows us to reduce those 400 ml volumes to more manageable Eppendorf tube volumes: Figure 1. "An Eppendorf tube". Reagents are expensive, and lab bench centrifuges are small!
Labelled Eppendorf tubes on a rack
. Source. Since the filter is so fine, filtering by gravity alone would take forever, and so we used a vacuum pump to speed thing up!
For that we used:
Peeling the vacuum pump filter protection peel before usage
. Source. Placing the vacuum pump filter
. Source. Includes its own copy of sqlite3, you don't use the system one, which is good to ensure compatibility. The version is shown at: github.com/mapbox/node-sqlite3/blob/918052b538b0effe6c4a44c74a16b2749c08a0d2/deps/common-sqlite.gypi#L3 SQLite source is tracked compressed in-tree: github.com/mapbox/node-sqlite3/blob/918052b538b0effe6c4a44c74a16b2749c08a0d2/deps/sqlite-autoconf-3360000.tar.gz horrendous. This explains why it takes forever to clone that repository. People who don't believe in git submodules, there's even an official Git mirror at: github.com/sqlite/sqlite
It appears to spawn its own threads via its C extension (since JavaScript is single threaded and and SQLite is not server-based), which allows for parallel queries using multiple threads: github.com/mapbox/node-sqlite3/blob/v5.0.2/src/threading.h
Hello world example: nodejs/node-sqlite3/index.js.
As of 2021, this had slumped back a bit, as maintainers got tired. Unmerged pull requests started piling more, and
better-sqlite3
Node.js package started pulling ahead a little.- github.com/mapbox/node-sqlite3/issues/1381
FATAL ERROR: Error::ThrowAsJavaScriptException napi_throw
with Node.jsworker_threads
vsbetter-sqlite3
Node.js package github.com/JoshuaWise/better-sqlite3/issues/237
Year 3 of the physics course of the University of Oxford Updated 2025-06-17 +Created 1970-01-01
5660d06bd69326c18ec63127b37fb3b32ea763c3846b3334c51beb6a800c57d3 Updated 2025-06-17 +Created 1970-01-01
In this malformed Coinbase transaction, the mining pool "nicehash" produced a provably unspendable Bitcoin output script due to a bug, and therefore lost most of the entire block reward of 6.25 BTC then worth about $ 123,000.
The output is unspendable because it ends in a constant 0, the disassembly of the first and main output is this series of constants:and for the second smaller one:the third one being an OP_RETURN message.
0 017fed86bba5f31f955f8b316c7fb9bd45cb6cbc 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
aa21a9ed62ec16bf1a388c7884e9778ddb0e26c0bf982dada47aaa5952347c0993da 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
This event received some coverage:
Ciro's ideal city to live in contains the following in order of decreasing importance:
- high tech
- beach and warm weather, influenced by Ciro's love for the City of Santos where he once lived
- enough recent Chinese immigrants to sustain Chinese cuisine
Cool data embedded in the Bitcoin blockchain Nelson-Mandela.jpg Updated 2025-06-17 +Created 1970-01-01
bitfossil.com/78f0e6de0ce007f4dd4a09085e649d7e354f70bc7da06d697b167f353f115b8e/ in block 273536 (2013-12-07).
This is one of the earliest AtomSea & EMBII uploads.
Nelson-Mandela.jpg
"There is nothing like returning to a place that remains unchanged to find the ways in which you yourself have altered." - Nelson Mandela Nelson Rolihlahla Mandela was a South African anti-apartheid revolutionary, politician and philanthropist who served as President of South Africa from 1994 to 1999. - Wikipedia Born: July 18, 1918, Mvezo, South Africa Died: December 5, 2013.
77822fd6663c665104119cb7635352756dfc50da76a92d417ec1a12c518fad69 Updated 2025-06-17 +Created 1970-01-01
Ouptut 0 disassembles as:The large constant contains an ASCII Bitcoin Core patch entitled
OP_IF OP_INVALIDOPCODE 4effffffff <large constant> OP_ENDIF
Remove (SINGLE|DOUBLE)BYTE
so presumably this is a proof of concept:From a3a61fef43309b9fb23225df7910b03afc5465b9 Mon Sep 17 00:00:00 2001
From: Satoshi Nakamoto <satoshin@gmx.com>
Date: Mon, 12 Aug 2013 02:28:02 -0200
Subject: [PATCH] Remove (SINGLE|DOUBLE)BYTE
I removed this from Bitcoin in f1e1fb4bdef878c8fc1564fa418d44e7541a7e83
in Sept 7 2010, almost three years ago. Be warned that I have not
actually tested this patch.
---
backends/bitcoind/deserialize.py | 8 +-------
1 file changed, 1 insertion(+), 7 deletions(-)
diff --git a/backends/bitcoind/deserialize.py b/backends/bitcoind/deserialize.py
index 6620583..89b9b1b 100644
--- a/backends/bitcoind/deserialize.py
+++ b/backends/bitcoind/deserialize.py
@@ -280,10 +280,8 @@ opcodes = Enumeration("Opcodes", [
"OP_WITHIN", "OP_RIPEMD160", "OP_SHA1", "OP_SHA256", "OP_HASH160",
"OP_HASH256", "OP_CODESEPARATOR", "OP_CHECKSIG", "OP_CHECKSIGVERIFY", "OP_CHECKMULTISIG",
"OP_CHECKMULTISIGVERIFY",
- ("OP_SINGLEBYTE_END", 0xF0),
- ("OP_DOUBLEBYTE_BEGIN", 0xF000),
"OP_PUBKEY", "OP_PUBKEYHASH",
- ("OP_INVALIDOPCODE", 0xFFFF),
+ ("OP_INVALIDOPCODE", 0xFF),
])
@@ -293,10 +291,6 @@ def script_GetOp(bytes):
vch = None
opcode = ord(bytes[i])
i += 1
- if opcode >= opcodes.OP_SINGLEBYTE_END and i < len(bytes):
- opcode <<= 8
- opcode |= ord(bytes[i])
- i += 1
if opcode <= opcodes.OP_PUSHDATA4:
nSize = opcode
--
1.7.9.4
bitcointalk.org/index.php?topic=5231222.0 discusses what happens if there is an invalid opcode in a branch that is not taken.
There are unlisted articles, also show them or only show them.