Mailcap files, defined in RFC 1524, allow you to tell you mail clients, web browsers, and other programs how you want to view and edit various MIME types. Since interaction with your mailcap files often occurs deep within the bowels of your program, I've written up a very simple Python script to test your mailcap entries: mailcap-test.py. Enjoy!
I have accounts on a number of systems where the sysadmin doesn't
maintain a comprehensive /etc/hosts
file. In order to work around
this, I wanted to have a per-user ~/.hosts
to extend the system file
with my own aliases. Then I could use my short nicknames for network
activity without spelling out the whole domain name (the domain
setting in /etc/resolv.conf
is often not close enough for the
nicknames to work using DNS).
A common technique for translating host names into IP addresses is to
use either getaddrinfo(3)
or the obsolete gethostbyname(3)
. As
mentioned in hostname(7)
, you can set the HOSTALIASES
environment
variable to point to an alias file, and you've got per-user aliases!
Well, mostly…
HOSTALIASES
will work if your program (ping
, ssh
, etc.)
satisfies two conditions:
- It has to actually use one of the two functions listed above to resolve the host name. I haven't run across anything that doesn't, but you never know.
- It cannot be setuid to another user. If it is, libc sanitizes the
environment, so your
HOSTALIASES
setting is lost. Seesysdeps/generic/unsecvars.h
for a list of all environment variables that glibc removes for setuid programs.
ping
is setuid root
(because it needs to listen for ICMP packets),
so HOSTALIASES
will not work with ping
unless you're already
root
before you call ping
.
Here's an example:
$ echo 'g www.google.com' >> ~/.hosts
$ export HOSTALIASES=~/.hosts
$ firefox g
Adjust your ~/.bashrc
appropriately, and you can forget about
/etc/hosts
entirely :).
I spent some time today configuring Postfix so I could send mail
from home via SMTPS. Verizon, our ISP, blocks port 25 to
external domains, forcing all outgoing mail through their
outgoing.verizon.net
exchange server. In order to accept mail, they
also require you authenticate with your Verizon username and password,
so I wanted to use an encrypted connection.
For the purpose of this example, our Verizon username is jdoe
, our
Verizon password is YOURPASS
, you're running a local Postfix server
on mail.example.com
for your site at example.com
, and 12345
is a
free local port.
# cat /etc/postfix/main.cf
myhostname = mail.example.com
relayhost = [127.0.0.1]:12345
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/saslpass
sender_canonical_maps = hash:/etc/postfix/sender_canonical
# cat /etc/postfix/saslpass
[127.0.0.1]:12345 jdoe@verizon.net:YOURPASS
# postmap /etc/postfix/saslpass
# cat /etc/postfix/sender_canonical
root@mail.example.com jdoe@example.com
root@example.com jdoe@example.com
root@localhost jdoe@example.com
jdoe@mail.example.com jdoe@example.com
jdoe@localhost jdoe@example.com
# postmap /etc/postfix/sender_canonical
# cat /etc/stunnel/stunnel.conf
[smtp-tls-wrapper]
accept = 12345
client = yes
connect = outgoing.verizon.net:465
# /etc/init.d/stunnel restart
# postfix reload
Test with:
$ echo 'testing 1 2' | sendmail you@somewhere.com
Here's what's going on:
- You hand an outgoing message to your local Postfix, which decides to
send it via port
12345
on your localhost (127.0.0.1
) (relayhost
). - Stunnel picks up the connection from Postfix, encrypts everything,
and forwards the connection to port 465 on
outgoing.verizon.net
(stunnel.conf
). - Postfix identifies itself as
mail.example.com
(myhostname
), and authenticates using your Verizon credentials (smtp_sasl_…
). - Because Verizon is picky about the
From
addresses it will accept, we usesender_canonical
to map addresses to something simple that we've tested.
And that's it :p. If you're curious, there's more detail about all the Postfix config options in the postconf man page, and there's good SASL information in the SASL_README.
There's also a blog post by Tim White which I found useful. Because Verizon lacks STARTTLS support, his approach didn't work for me out of the box.
Verizon blocks outgoing connections on port 25 (SMTP) unless you
are connecting to their outgoing.verizon.net
message exchange
server. This server requires authentication with your Verzon
username/password before it will accept your mail. For the purpose of
this example, our Verizon username is jdoe
, our Verizon password is
YOURPASS
, and were sending email from me@example.com
to
you@target.edu
.
$ nc outgoing.verizon.net 25
220 vms173003pub.verizon.net -- Server ESMTP (...)
mail from: <jdoe@example.com>
550 5.7.1 Authentication Required
quit
221 2.3.0 Bye received. Goodbye.
Because authenticating over an unencrypted connection is a Bad Idea™,
I was looking for an encrypted way to send my outgoing email.
Unfortunately, Verizon's exchange server does not support STARTTLS
for encrypting connections to outgoing.verizon.net:25
:
$ nc outgoing.verizon.net 25
220 vms173003pub.verizon.net -- Server ESMTP (...)
ehlo example.com
250-vms173003pub.verizon.net
250-8BITMIME
250-PIPELINING
250-CHUNKING
250-DSN
250-ENHANCEDSTATUSCODES
250-HELP
250-XLOOP E9B7EB199A9B52CF7D936A4DD3199D6F
250-AUTH DIGEST-MD5 PLAIN LOGIN CRAM-MD5
250-AUTH=LOGIN PLAIN
250-ETRN
250-NO-SOLICITING
250 SIZE 20971520
starttls
533 5.7.1 STARTTLS command is not enabled.
quit
221 2.3.0 Bye received. Goodbye.
Verizon recommends pre-STARTTLS approach of wrapping the
whole SMTP connection in TLS (SMTPS), which it provides via
outgoing.verizon.net:465
:
$ python -c 'from base64 import *; print b64encode("\0jdoe@verizon.net\0YOURPASS")'
AGpkb2VAdmVyaXpvbi5uZXQAWU9VUlBBU1M=
$ openssl s_client -connect outgoing.verizon.net:465
...
220 vms173013pub.verizon.net -- Server ESMTP (...)
ehlo example.com
250-vms173013pub.verizon.net
250-8BITMIME
250-PIPELINING
250-CHUNKING
250-DSN
250-ENHANCEDSTATUSCODES
250-HELP
250-XLOOP 9380A5843FE933CF9BD037667F4C950D
250-AUTH DIGEST-MD5 PLAIN LOGIN CRAM-MD5
250-AUTH=LOGIN PLAIN
250-ETRN
250-NO-SOLICITING
250 SIZE 20971520
auth plain AGpkb2VAdmVyaXpvbi5uZXQAWU9VUlBBU1M
235 2.7.0 plain authentication successful.
mail from: <me@example.com>
250 2.5.0 Address Ok.
rcpt to: <you@target.edu>
250 2.1.5 you@target.edu OK.
data
354 Enter mail, end with a single ".".
From: Me <me@example.com>
To: You <you@target.edu>
Subject: testing
hello world
.
250 2.5.0 Ok, envelope id 4BHMFEZ7PHSETMT6@vms173013.mailsrvcs.net
quit
221 2.3.0 Bye received. Goodbye.
closed
This works, but with the rise of STARTTLS, getting your local Postfix mail server to support SMTPS requires a bit of fancyness with stunnel. The stunnel workaround is not too complicated, but I also wanted to look into the submission protocol (port 587), which adapts SMTP (designed for message transfer) into a similar protocol for message submission. Unfortunately, Verizon does not support STARTTLS here either.
$ nc outgoing.verizon.net 587
220 vms173005.mailsrvcs.net -- Server ESMTP (...)
ehlo example.com
250-vms173005.mailsrvcs.net
250-8BITMIME
250-PIPELINING
250-CHUNKING
250-DSN
250-ENHANCEDSTATUSCODES
250-EXPN
250-HELP
250-XADR
250-XSTA
250-XCIR
250-XGEN
250-XLOOP DA941C5B31BE4B102BB69B809BC66C4A
250-AUTH DIGEST-MD5 PLAIN LOGIN CRAM-MD5
250-AUTH=LOGIN PLAIN
250-NO-SOLICITING
250 SIZE 20971520
starttls
533 5.7.1 STARTTLS command is not enabled.
quit
221 2.3.0 Bye received. Goodbye.
In conclusion, Verizon supports a number of email submission standards, but the only secure approach is to use the outdated SMTPS. See my Postfix post for details on configuring Postfix to use Verizon's server for outgoing mail.
There are a number of good SMTP authentication tutorials out there. I
used John Simpson and Erwin Hoffmann's tutorials. For
cleaner examples of my testing tools (nc
and openssl s_client
),
see my simple servers post.
In the course of my research, I've spend a good deal of time developing clean, Python interfaces to much of our lab equipment. I also tend to have strong opinions on the One True Way® to solve a problem. This means that I occasionaly end up writing script to run other people's experiment, especially when they don't take all that much time to write.
I wrote slow_bend
for Liming Zhao, who was a postdoc in our lab
from 2008 to 2010. Liming coated one side of an AFM cantilever with a
film of cellulose and used slow bend.py (version 0.2) to monitor
the cantilever deflection as he flushed in different buffers
(paper). Unfortunately, the paper claims the data aquisition was
carried out in LabView.
slow_bend
is not a complicated program; it polls analog input
channels using pycomedi (and optionally reads temperatures using
backends from pypid). The polling continues until slow_bend
recieves a KeyboardInterrupt.
$ slow_bend.py --version
0.4
$ slow_bend.py 0 3
#time (second) chan 0 (bit) chan 0 (volt) chan 3 (bit) chan 3 (volt)
1.81198e-05 34727 0.598001 39679 2.10925
4.00409 34956 0.667887 38033 1.60693
8.00408 35074 0.703899 36780 1.22454
12.0041 35041 0.693828 35814 0.929732
16.0041 34917 0.655985 35044 0.694743
^C
I was recently trying to add bookmarks to a PDF I'd generated with pdftk. It turns out to be fairly simple to add bookmarks to a PDF using Ghostscript, following maggoteer's post to the Ubunto forums. The syntax is:
$ gs -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=out.pdf in-*.pdf pdfmarks
Where out.pdf
is the generated PDF, in-*.pdf
are the input PDFs,
and pdfmarks
is a text file with contents like:
[/Title (Title Page) /Page 1 /OUT pdfmark
[/Title (Table of Contents) /Page 3 /OUT pdfmark
...
Nice and easy.
For nested levels, use the /Count
attribute. For example:
[/Count 3 /Title (Chapter 1) /Page 1 /OUT pdfmark
[/Count -2 /Title (Section 1.1) /Page 2 /OUT pdfmark
[/Title (Section 1.1.1) /Page 3 /OUT pdfmark
[/Title (Section 1.1.2) /Page 4 /OUT pdfmark
[/Count -1 /Title (Section 1.2) /Page 5 /OUT pdfmark
[/Title (Section 1.2.1) /Page 6 /OUT pdfmark
[/Title (Section 1.3) /Page 7 /OUT pdfmark
The argument to /Count
gives the number of immediately subordinate
bookmarks. The sign of the argument sets the default display
(negative for closed, positive for open).
You can also setup the document info dictionary with something like:
[ /Title (My Test Document)
/Author (John Doe)
/Subject (pdfmark 3.0)
/Keywords (pdfmark, example, test)
/DOCINFO pdfmark
If you want more detail, take a look at Adobe's pdfmark reference.
I've bundled the whole pdfmarks-generation bit into a script,
pdf-merge.py, which generates the pdfmark file and runs
Ghostscript automatically. Think of it as a bookmark-preserving
version of pdftk's cat
. The script uses pdftk internally to extract
bookmark information from the source PDFs.
The script also adds a bit of PostScript to ignore any bookmarks in
the source PDFs during the Ghostscript run. The only bookmarks in the
output will be the ones you specify explicitly in the pdfmarks file.
If for some reason the automatically generated pdfmarks are not quite
what you want, the script can pause (via --ask
) to allow you to
tweak the pdfmarks manually before running Ghostscript.
I've been streamlining my procedure for burning audio CDs, and I like what I've come up with. Unfortunately, I'll never remember it on my own, so here's a note to myself (any whoever else cares) on what to do.
First, build your playlist in MPD, using my one-liner to calculate the playlist duration (my CD-Rs hold 80 minutes). When you've got your playlist arranged to your satisfaction, convert the files to WAVs using:
$ i=1; for x in $(mpc -f '%file%' playlist); do j=$(seq -f '%02g' $i $i); let "i += 1"; flac -d --apply-replaygain-which-is-not-lossless=t -o $j.$(basename ${x/.flac/.wav}) /var/lib/mpd/music/$x; done
This assumes that all the files in your playlist are FLAC files, which is a good idea (disk space is cheap, FLAC is lossless with good open source support). It also assumes you've already stored ReplayGain settings in your FLAC files. If you haven't, you'll get warnings like:
WARNING: can't get track (or even album) ReplayGain tags
If that happens, go back and read about replay gain, add the tags, and try again ;).
See my replay gain post for more details on the
--apply-replaygain-which-is-not-lossless
option. After the decoding
step, you'll have a directory full of WAVs that have been normalized
to a standard track-level loudness. The bit about i
and j
ensures
that *.wav
will list the tracks in the order in which they appear in
your playlist. Then burn the tracks to a CD using
cdrecord:
$ cdrecord -v speed=1 dev=/dev/cdrom -eject -dao -audio -pad *.wav
If you don't care about the order, use $(ls *.wav | shuf)
instead of
*.wav
.
That's it! Audio CDs from MPD playlists in two lines.
Available in a git repository.
Repository: cookbook
Author: W. Trevor King
I've been running a home-rolled recipe webapp for a year now, and it
worked fairly well in a bare-bones sort of way. However, I recently
had to make some changes to my personal website (since EveryDNS and
aparently most other free DNS providers were bought by Dyn), which
prompted me to translate cookbook
into a Django app. Thanks to
the wonders of Django, Grappelli, and django-taggit, the code
is now leaner, meaner, and prettier!
See the README for details.
Over the last few days I've been trying to teach myself enough genetics to reconstruct Carrion-Vazquez's poly-I27 synthesis procedure. I'm not quite there yet, but I feel like I've made enough progress that it's worth posting my notes somewhere public in case they are useful to others.
Overview
We buy our poly-I27 from AthenaES, who market it as I27O™. Perusing their technical brief, makes it clear that I2O7™ corresponds to Carrion-Vazquez's I27RS₈. In Carrion-Vazquez' original paper they describe the synthesis of both I27RS₈ and a variant I27GLG₁₂. Their I27RS₈ procedure is:
- Human cardiac muscle used to generate a cDNA library (Rief 1997)
- cDNA library amplified with PCR
- 5' primer contained a BamHI restriction site that permitted in-frame cloning of the monomer into the expression vector pQE30.
- The 3' primer contained a BglII restriction site, two Cys codons located 3' to the BglII site and in-frame with the I27 domain, and two in-frame stop codons.
- The PCR product was cloned into pUC19 linearized with BamHI and SmaI.
- The 8-domain synthetic gene was constructed by iterative cloning of monomer into monomer, dimer into dimer, and tetramer into tetramer.
- The final construct contained eight direct repeats of the I27 domain, an amino-terminal His tag for purification, and two carboxyl-terminal Cys codons used for covalent attachment to the gold-covered coverslips.
They also give the full-length sequence of I27RS₈:
Met-Arg-Gly-Ser-(His)₆-Gly-Ser-(I27-Arg-Ser)₇-I27-...-Cys-Cys
They point out the Arg-Ser (RS) amino acid sequence is the BglII/BamHI hybrid site, which makes sense.
Back on the Athena site, they have a page describing their procedure (they reference the Carrion-Vazquez paper). They claim to use the restriction enzyme KpnI in addition to BamHI, BglII, and SmaI.
Carrion-Vazquez points to the following references:
- Kempe et al. 1985 (CV16), the source of the multi-step cloning technique.
- Rief et al. (CV10), for I27 subcloning.
Rief
In their note 11, Rief et al. explain their synthesis procedure:
- λ cDNA library
- Titin fragments of interest were amplified by PCR
- cloned into pET 9d
- NH₂-terminal domain boundaries were as in Politou 1996.
- The clones were fused with an NH₂-terminal His₆ tag and a COOH-terminal Cys₂ tag for immobilization on solid surfaces.
which doesn't help me very much.
Kemp
The Kempe article is more informative, focusing entirely on the synthesis procedure (albiet for a different gene). Their figure 2 outlines the general approach, and used the following restriction enzymes: PstI, BamHI, PstI, and BglII. I'll walk through their procedure in detail below.
Genetic code
Wikipedia has a good page on the genetic code for converting between DNA/mRNA codons and amino acids. I've written up a little Python script, mRNAcode.py, to automate the conversion of various sequences, which helped me while I was writing this post. I'm sure there are tons of similar programs out there, so don't feel pressured to use mine ;).
Restriction enzymes
We'll use the following restriction enzymes:
5' G|GATC C 3'
3' C CTAG|G 5'
BglI (N is any nucleotide)
5' GCCN NNN|NGGC 3'
3' CGGN|NNN NCCG 5'
5' A|GATC T 3'
3' T CTAG|A 5'
5' A|AGCT T 3'
3' T TCGA|A 5'
5' G GTAC|C 3'
3' C|CATG G 5'
5' C TGCA|G 3'
3' G|ACGT C 5'
5' CCC|GGG 3'
3' GGG|CCC 5'
Details
Here's my attempt to reconstruct the details of the polymer-cloning reactions, where they splice several copies of I27 into the expression plasmid.
Kempe procedure
Inserted their poly-SP into pHK414 (I haven't been able to find any online sources for pHK414. Kempe cites R.J. Watson et al. Expression of Herpes simplex virus type 1 and type 2 glyco-protein D genes using the Escherichia coli lac promoter. Y. Becker (Ed.), Recombinant DNA Research and Viruses. Nijhoff, The Hague, 1985, pp. 327-352.)
Synthetic SP
HindIII. ,BamHI_.
| | Met Arg Pro Lys Pro Gln Gln Phe Phe Gly Leu Met |
5’ GA AGC TTC ATG CGT CCG AAG CCG CAG CAG TTC TTC GGT CTC ATG GAT CCG
CT TCG AAG TAC GCA GGC TTC GGC GTC GTC AAG AAG CCA GAG TAC CTA GGC 5’
pHK414
_______Linker_sequence______
/ \
HindIII BamHI
,PstI. BglII.| |,SmaI. |
CTGCAG...AGATCTAAGCTTCCCGGGGATCCAAGATCC
GACGTC...TCTAGATTCGAAGGGCCCCTAGGTTCTAGG
. .
.......................................
Synthesizing pSP4-1
pHK414 + HindIII + BamHI
They cut a hole in the plasmid…
HindIII BamHI.
(PstI) BglII,| |
CTGCAG...AGATCTA GATCCAAGATCC
GACGTC...TCTAGATTCGA GTTCTAGG
. .
.......................................
SP + HindIII + BamHI
… and cut matching snips off their SP gene.
HindIII. ,BamHI_.
| | Met Arg Pro Lys Pro Gln Gln Phe Phe Gly Leu Met |
AGC TTC ATG CGT CCG AAG CCG CAG CAG TTC TTC GGT CTC ATG
AG TAC GCA GGC TTC GGC GTC GTC AAG AAG CCA GAG TAC CTA G
pSP4-1
Mixing the snips together gives the plasmid with a single SP.
HindIII BamHI.
,PstI. BglII.| | MetArgProLysProGlnGlnPhePheGlyLeuMet |
CTGCAG...AGATCTAAGCTTCATGCGTCCGAAGCCGCAGCAGTTCTTCGGTCTCATGGATCCAAGATCC
GACGTC...TCTAGATTCGAAGTACGCAGGCTTCGGCGTCGTCAAGAAGCCAGAGTACCTAGGTTCTAGG
. .
......................................................................
Using -SP-
to abbreviate the HindIII→Met→Met portion (less the
terminal G, which is part of the BamHI match sequence).
,PstI. BglII. BamHI.
CTGCAG...AGATCT-SP-GGATCC
GACGTC...TCTAGA-SP-CCTAGG
. .
.........................
Synthesizing pSP4-2
The single-SP plasmid, pSP4-1, is split in two parallel reactions.
PstI + BamHI
G...AGATCT-SP-G
ACGTC...TCTAGA-SP-CCTAG
PstI + BglII
CTGCA GATCT-SP-GGATCC
G A-SP-CCTAGG
. .
.........................
pSP4-2
Then the SP-containing fragments (shown above) are isolated and mixed together to form pSP4-2.
,PstI. BglII. other. BamHI.
CTGCAG...AGATCT-SP-GGATCT-SP-GGATCC
GACGTC...TCTAGA-SP-CCTAGA-SP-CCTAGG
. .
...................................
where the "other" sequence is the result of the BamHI/BglII splice.
Expanding the -SP-
abbreviation around the SP joint:
....SP,other_.HindIII. SP.....
Leu Met Asp Leu Ser Phe Met Arg
CTC ATG GAT CTA AGC TTC ATG CGT
AGA CGT TCG AGC CTA GGA CGT ATG
So the resulting poly-SP will have Asp-Leu-Ser-Phe linking amino acids.
By repeating the PstI + BamHI / PstI + BglII split-and-join, you can synthesize plasmids with any number of SP repeats.
I27RS₈ procedure
Like Kempe, Carrion-Vazquez et al. flank the I27 gene with BglII and BamHI, but they reverse the order. Here's the output of their PCR:
BamHI-I27-BglII-Cys-Cys-STOP-STOP
From the PDB entry for I27 (1TIT), the amino acid sequence is:
,leader_.
MHHHHHHSSLIEVEKPLYGVEVFVGETAHFEIELSEPDVHGQWKLKGQPLTASPDCEIIEDGKKHILI
LHNCQLGMTGEVSFQAANAKSAANLKVKEL
To translate this into cDNA, I've scanned thorough the sequence of NM_003319.4, and found a close match from nucleotides 15991 through 16248.
15982 CTAATAAAAG TGGAAAAGCC TCTGTACGGA GTAGAGGTGT TTGTTGGTGA
16032 AACAGCCCAC TTTGAAATTG AACTTTCTGA ACCTGATGTT CACGGCCAGT
16082 GGAAGCTGAA AGGACAGCCT TTGACAGCTT CCCCTGACTG TGAAATCATT
16132 GAGGATGGAA AGAAGCATAT TCTGATCCTT CATAACTGTC AGCTGGGTAT
16182 GACAGGAGAG GTTTCCTTCC AGGCTGCTAA TGCCAAATCT GCAGCCAATC
16232 TGAAAGTGAA AGAATTG
This cDNA match generates an amino acid starting with LIKVEK instead of the expected LIEVEK, but the LIKVEK version matches amino acids 12677-12765 in Q8WZ42 (canonical titin), and there is a natural variant listed for 12679 K→E.
Interestingly, this sequence contains a PstI site at nucleotides 16220 through 16225. None of our other restriction enzymes have sites in the I27 sequence.
Carrion-Vazquez et al. list two vectors in their procedure, but I'm not sure about their respective roles.
pQE30
pQE30 (sequence) is listed as the "expression vector", but I'm not sure why they would need a non-expression vector, as they don't reference cross-vector subcloning after inserting their I27 monomer into the plasmid.
From the Qiagen site, the section around the linker nucleotides 115 through 203 is:
,RGS-His epitope__________________. ,BamHI.
Met Arg Gly Ser His His His His His His Gly Ser Ala Cys Glu Leu
ATG AGA GGA TCG CAT CAC CAT CAC CAT CAC GGA TCC GCA TGC GAG CTC
CGT CTC TTC GAT ACG ACA ACG ACA ACG ACA TTC GAA TAC GTA TCT AGA
,SmaI__.
,KpnI_. HindIII
Gly Thr Pro Gly Arg Pro Ala Ala Lys Leu Asn STOP
GGT ACC CCG GGT CGA CCT GCA GCC AAG CTT AAT TAG CTG AG
TTG CAA AAT TTG ATC AAG TAC TAA CCT AGG CCG GCT AGT CT
However, there is no BglII site in this linker. In fact, there is no BglII site in the entire pQE30 plasmid, so they'd need to use a third restiction enzyme to insert their I27 (which does contain a trailing BglII).
pUC19
From BCCM/LMBP and GenBank, the section around the linker nucleotides 233 through 289 is:
,SmaI_.
HindIII. ,PstI__. ,BamHI_. ,KpnI__.
Met STOP
AA GCT TGC ATG CCT GCA GGT CGA CTC TAG AGG ATC CCC GGG TAC CGA
GCT CGA ATT C
However, there is no BglII the entire pUC19 plasmid either, so they'd need to use a third restiction enzyme to insert their I27.
Questions
- Why do Carrion-Vazquez et al. list two different plasmids?
- What is the 3'-side restiction enzyme that Carrion-Vazquez et al. use to insert their I27 into their plasmid?
- What is the remote restriction enzyme that Carrion-Vazquez et al. use to break their opened plasmids (Kempe PstI equivalent).
- The BamHI and SmaI sites in pUC19 overlap, so it is unclear how you could use both to "linearize" pUC19. It would seem that either one would open the plasmid on its own, although I'm not sure you could "heal" the blunt-ended SmaI cut.
Since the Arg-Ser joint is formed by a BglII/BamHI overlap, why are there no BglII-coded amino acids after the last I27 in the I27RS₈ sequence? If there is, why do Carrion-Vazquez et al. not acknowledge it when they write [3]:
The full-length construct, I27RS₈, results in the following amino acid additions: (i) the amino-terminal sequence is Met-Arg-Gly-Ser-(His)6-Gly-Ser-I27 codons; (ii) the junction between the domains (BamHI-BglII hybrid site) is Arg-Ser; and (iii) the protein terminates in Cys-Cys.
Since they don't acknowledge an I27-Arg-Ser-Cys-Cys ending, might there be more amino acids in the C terminal addition?
Working backward
Since I'm stuck trying to get I27 into either plasmid, let's try and work backward from
Met-Arg-Gly-Ser-(His)₆-Gly-Ser-(I27-Arg-Ser)₇-I27-...-Cys-Cys
BglII/BamHI joint
The BglII/BamHI overlap would produce the expected Arg-Ser joint.
BglII BamHI
A + GATCC = AGATCC = Arg-Ser
TCTAG G TCTAGG
Final plasmid (pI27-8)
The beginning of this sequence looks like the start of pQE30's linker, so we'll assume the final plasmid was:
remote ... ,RGS-His epitope__________________. ,BamHI. I27...
... Met Arg Gly Ser His His His His His His Gly Ser Leu Ile ...
??? ... ATG AGA GGA TCG CAT CAC CAT CAC CAT CAC GGA TCC CTA ATA ...
??? ... CGT CTC TTC GAT ACG ACA ACG ACA ACG ACA TTC GAA GAT TAT ...
........I27 joint_. I27 ... final I27 ,BglII. continuation of pQE30?
... Glu Leu Leu ... Leu Arg Ser Cys Cys STOPSTOP...
... GAA TTG AGA TCC CTA ... TTG AGA TCT TGC TGC TAG TAG ...
... CTT AAC TCT AGG GAT ... GAT CTC GAG GTA GTA GCT GCT ...
Penultimate plasmid (pI27-4)
remote ... ,RGS-His epitope__________________. ,BamHI. I27...
Met Arg Gly Ser His His His His His His Gly Ser Leu Ile ...
??? ... ATG AGA GGA TCG CAT CAC CAT CAC CAT CAC GGA TCC CTA ATA ...
??? ... CGT CTC TTC GAT ACG ACA ACG ACA ACG ACA TTC GAA GAT TAT ...
... I27 joint_. I27 ... fourth I27 ,BglII. continuation of pQE30?
... Glu Leu Leu ... Leu Arg Ser Cys Cys STOPSTOP...
... GAA TTG AGA TCC CTA ... TTG AGA TCT TGC TGC TAG TAG ...
... CTT AAC TCT AGG GAT ... GAT CTC GAG GTA GTA GCT GCT ...
pI27-4 + BamHI + remote
remote ,BamHI. I27...
Leu Ile ...
? GA TCC CTA ATA ...
?? A GAT TAT ...
....... I27 joint_. I27 ... fourth I27 ,BglII. continuation of pQE30?
... Glu Leu Leu ... Leu Arg Ser Cys Cys STOPSTOP...
... GAA TTG AGA TCC CTA ... TTG AGA TCT TGC TGC TAG TAG ...
... CTT AAC TCT AGG GAT ... GAT CTC GAG GTA GTA GCT GCT ...
pI27-4 + BglII + remote
remote ... ,RGS-His epitope__________________. ,BamHI. I27...
Met Arg Gly Ser His His His His His His Gly Ser Leu Ile ...
?? ... ATG AGA GGA TCG CAT CAC CAT CAC CAT CAC GGA TCC CTA ATA ...
? ... CGT CTC TTC GAT ACG ACA ACG ACA ACG ACA TTC GAA GAT TAT ...
....... I27 joint_. I27 ... fourth I27 ,BglII.
... Glu Leu Leu ... Leu
... GAA TTG AGA TCC CTA ... TTG A
... CTT AAC TCT AGG GAT ... GAT CTC GA
pI27-8
remote ... ,RGS-His epitope__________________. ,BamHI. I27...
Met Arg Gly Ser His His His His His His Gly Ser Leu Ile ...
??? ... ATG AGA GGA TCG CAT CAC CAT CAC CAT CAC GGA TCC CTA ATA ...
??? ... CGT CTC TTC GAT ACG ACA ACG ACA ACG ACA TTC GAA GAT TAT ...
....... I27 joint_. I27 ... fourth I27 ,other. I27...
... Glu Leu Leu ... Leu Gly Ser Leu Ile ...
... GAA TTG AGA TCC CTA ... TTG AGA TCC CTA ATA ...
... CTT AAC TCT AGG GAT ... GAT CTC GAA GAT TAT ...
....... I27 joint_. I27 ... fourth I27 ,BglII. continuation of pQE30?
... Glu Leu Leu ... Leu Arg Ser Cys Cys STOPSTOP...
... GAA TTG AGA TCC CTA ... TTG AGA TCT TGC TGC TAG TAG ...
... CTT AAC TCT AGG GAT ... GAT CTC GAG GTA GTA GCT GCT ...
Continuing to the first plasmid, pI27-1 must have been
remote ... ,RGS-His epitope__________________. ,BamHI. I27...
... Met Arg Gly Ser His His His His His His Gly Ser Leu Ile ...
??? ... ATG AGA GGA TCG CAT CAC CAT CAC CAT CAC GGA TCC CTA ATA ...
??? ... CGT CTC TTC GAT ACG ACA ACG ACA ACG ACA TTC GAA GAT TAT ...
........I27 ,BglII. continuation of pQE30?
... Glu Leu Arg Ser Cys Cys STOPSTOP...
... GAA TTG AGA TCT TGC TGC TAG TAG ...
... CTT AAC CTC GAG GTA GTA GCT GCT ...
Potential pQE30 insertion points
- Kpn1 (present after BamHI in both plasmids)
Potential remote restriction enzymes
- BglI (pQE30 nucleotides 2583-2593 (GCCGGAAGGGC), Amp-resistance 3256-2396; pUC19 has two BglI sites (bad idea))
Available in a git repository.
Repository: h5config
Author: W. Trevor King
Since the number of packages mooching off pypiezo's configuration scheme was growing, I've split it out into it's own package. Now there's a general package for all your HDF5-based configuration needs.
The README
is posted on the PyPI page.
Powered by ikiwiki.