https://nam03.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.vocareum.com&data=02%7C01%7Cfoobag%40uwec.edu%7C372342a6fa3b4f1adab108d748d9342f%7Cdd068b97759349388b3214faef2af1d8%7C0%7C0%7C637057970042004514&sdata=jYmiTB4vWrZY6P16O4NoYMdw0HpV8vgDM5BYKTc66%2FE%3D&reserved=0 Cloud computing is disrupting all aspects of educational infrastructure. Learning Labs are no exception. If you are looking to upgrade your student or research lab infrastructure, please consider Vocareum Campus Cloud https://nam03.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.vocareum.com%2Fcampus&data=02%7C01%7Cfoobag%40uwec.edu%7C372342a6fa3b4f1adab108d748d9342f%7Cdd068b97759349388b3214faef2af1d8%7C0%7C0%7C637057970042004514&sdata=lz93Q3wU0csfDM2IFPHdT5S1TkL4%2BuBTh%2FSVwisyh%2B8%3D&reserved=0. Just as cloud storage dramatically improves the efficiency of saving and sharing content, we believe the next natural step includes “virtual labs” that combine compute with storage and accelerate learning and collaboration among all stakeholders in educational contexts - instructors, graders, learners, researchers and administrators. Vocareum Campus Cloud provides university IT departments with a valuable tool to deploy and manage cloud resources. The use cases range from providing windows based applications to learners, supporting HPC computing needs, or helping research groups manage cloud computing resources as a part of a research grant We can deliver these labs at scale, securely and at low cost -- hundreds of thousands of learners are on our platform at any given time. LEARN MORE https://nam03.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.vocareum.com%2Fcampus&data=02%7C01%7Cfoobag%40uwec.edu%7C372342a6fa3b4f1adab108d748d9342f%7Cdd068b97759349388b3214faef2af1d8%7C0%7C0%7C637057970042004514&sdata=lz93Q3wU0csfDM2IFPHdT5S1TkL4%2BuBTh%2FSVwisyh%2B8%3D&reserved=0 Vocareum Campus Cloud is built on a diverse cloud infrastructure to support exactly what you need at the right price point. Following are some of the lab infrastructures we support - A single container or a network of containers A network of virtual machines Shared virtual machines isolated by user account Budgeted credentials for AWS cloud Some of the features of our labs are - Integration to popular Learning Management Systems Integration to online proctoring systems Ability for instructors to view student’s work live and provide feedback Use pre-built images from Vocareum or upload your own Secure license management infrastructure to deliver commercial software Automated assessment REQUEST INFO https://nam03.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.vocareum.com%2F%23contact&data=02%7C01%7Cfoobag%40uwec.edu%7C372342a6fa3b4f1adab108d748d9342f%7Cdd068b97759349388b3214faef2af1d8%7C0%7C0%7C637057970042004514&sdata=LYU5pf4WpFP0SdZdRcAnwSg1m99nQV%2Fum3dfHDnAOU4%3D&reserved=0 UPCOMING EVENTS: Please join us at Educause https://nam03.safelinks.protection.outlook.com/?url=https%3A%2F%2Fevents.educause.edu%2Fannual-conference&data=02%7C01%7Cfoobag%40uwec.edu%7C372342a6fa3b4f1adab108d748d9342f%7Cdd068b97759349388b3214faef2af1d8%7C0%7C0%7C637057970042004514&sdata=hRTJo8IyG8FGm4j1eVpY9DZum8m2gojsSZCtp5NIrl0%3D&reserved=0 (Chicago, October 14-17) and DevLearn https://nam03.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.elearningguild.com%2Fdevlearn%2Fcontent%2F5800%2Fdevlearn-2019-conference--expo--home%2F&data=02%7C01%7Cfoobag%40uwec.edu%7C372342a6fa3b4f1adab108d748d9342f%7Cdd068b97759349388b3214faef2af1d8%7C0%7C0%7C637057970042004514&sdata=raHxrQ45wiq8jEH68%2F8Kn0yP99EHHeexq7w%2BTfL3T88%3D&reserved=0 (Las Vegas, October 23-25) to learn about the most innovative and revolutionary new strategies for scaling campus and online learning labs! Vocareum 2025 Gateway Place, Suite 205 San Jose, CA 95110
The original URLs are no longer intelligible; they are HTML-encoded and sent as parameters to the safelinks service. The result is that users of this service are less informed and more reliant on automation. Additionally, my email address is sent to the service. I see no reason why Microsoft needs my identity.
I really don’t like this feature.
Thankfully, I use an email client that lets me apply filters to messages before showing them. I wrote this short preprocessor that replaces the safelink URLs with the original URLs decoded:
#!/usr/bin/env ruby
require 'uri'
safe = STDIN.read
# Match all URL characters except not terminal periods...
unsafe = safe.gsub(%r{https://nam03\.safelinks\.protection\.outlook\.com/\?url=(.*?)&[a-zA-Z0-9.%=&;]*(?<!\.)}) do |url|
URI.unescape($1)
end
puts unsafe
In my Mutt configuration file, I set this filter to be applied to all messages:
set display_filter = "$HOME/bin/unsafelinks"
Now the message above looks like this:
https://www.vocareum.com Cloud computing is disrupting all aspects of educational infrastructure. Learning Labs are no exception. If you are looking to upgrade your student or research lab infrastructure, please consider Vocareum Campus Cloud https://www.vocareum.com/campus. Just as cloud storage dramatically improves the efficiency of saving and sharing content, we believe the next natural step includes “virtual labs” that combine compute with storage and accelerate learning and collaboration among all stakeholders in educational contexts - instructors, graders, learners, researchers and administrators. Vocareum Campus Cloud provides university IT departments with a valuable tool to deploy and manage cloud resources. The use cases range from providing windows based applications to learners, supporting HPC computing needs, or helping research groups manage cloud computing resources as a part of a research grant We can deliver these labs at scale, securely and at low cost -- hundreds of thousands of learners are on our platform at any given time. LEARN MORE https://www.vocareum.com/campus Vocareum Campus Cloud is built on a diverse cloud infrastructure to support exactly what you need at the right price point. Following are some of the lab infrastructures we support - A single container or a network of containers A network of virtual machines Shared virtual machines isolated by user account Budgeted credentials for AWS cloud Some of the features of our labs are - Integration to popular Learning Management Systems Integration to online proctoring systems Ability for instructors to view student’s work live and provide feedback Use pre-built images from Vocareum or upload your own Secure license management infrastructure to deliver commercial software Automated assessment REQUEST INFO https://www.vocareum.com/#contact UPCOMING EVENTS: Please join us at Educause https://events.educause.edu/annual-conference (Chicago, October 14-17) and DevLearn https://www.elearningguild.com/devlearn/content/5800/devlearn-2019-conference--expo--home/ (Las Vegas, October 23-25) to learn about the most innovative and revolutionary new strategies for scaling campus and online learning labs! Vocareum 2025 Gateway Place, Suite 205 San Jose, CA 95110
Much better.
]]>As I return to Mutt, I also miss a few things from Thunderbird. The most prominent of these is autocompletion of my recipients. Mutt will tab-complete aliases that you’ve previously registered in its configuration files, but Thunderbird one-ups Mutt by automatically storing the addresses of people you send messages to. I wanted to make Mutt do that too.
I looked around for hooks, but I didn’t see a way for Mutt to automatically record aliases when I sent a message. However, since I was using Vim to edit my messages, I saw that I could create an autocommand that would strip out the recipients’ addresses from my message and append them to my alias file. So, I first wrote a function to do the heavy-lifting:
" This function, which is to be run only on a Mutt email message,
" finds all the addresses in the To, Cc, and Bcc headers. If
" no aliases exist for these addresses, they are added to the
" alias file.
function! AddMuttAliases()
" This is where my alias file lives. Change this to something
" that suits you.
let aliasfile = $UU . '/configs/mutt/aliases'
" Why isn't there a match + matchstr? match only gives me the
" start, which is not enough to extract the substring.
" matchstr doesn't give me the location, which is not enough
" information to advance forward.
" Find all email addresses. My pattern may not be the best yet.
let addresses = []
silent vimgrep /^\(To\|Cc\|Bcc\):/j %
for line in getqflist()
let pattern = '[-A-z._]\+@[-A-z._]\+'
let start = match(line.text, pattern)
let address = matchstr(line.text, pattern, start)
while address != ""
call add(addresses, address)
let start += len(address)
let address = matchstr(line.text, pattern, start)
endwhile
endfor
" Check to see if each is in aliases file. If not, add it.
" Mutt's alias registration command has this form:
"
" alias name address
"
" Usually the name is something short and mnemonic. I prefer
" to continually work with people's addresses so that I'm not
" too crippled when I lose my configuration. So, my aliases
" have this form:
"
" alias address address
"
" Isn't this overly verbose? Yes. What have I gained? Well,
" mutt will tab-complete the addresses for me. Verbosity
" doesn't matter. And that's sweet.
for address in addresses
execute 'silent! vimgrep /' . address . '/j ' . aliasfile
if len(getqflist()) == 0
let aliasline = 'alias ' . address . ' ' . address
silent! execute '!echo ' . aliasline . ' >> ' . aliasfile
endif
endfor
endfunction
To call this function when Mutt messages are written, I registered the following autocommand in my .vimrc file:
autocmd BufWritePost ~/.tmp/mutt-* call AddMuttAliases()
This command assumes Mutt messages are temporarily stored in ~/.tmp, which I set in my .muttrc.
Now everytime I write a message to someone new, I get an alias added to my aliases file. The next time, I can simply tab-complete to enter the person’s address!
]]>