- aw li vee eh
- aw liver
- dah gue naiz
- dah gue nah
- day je naiz
- day je neh
As a result, I try to go by Oli, but this has proven to be equally as elusive as many people will write down Ali or even Holly! (WTF?)
Behold the power of stupidity on the internet, as I tried to e-mail a university computer science assignment to my professor:
OlivierDagenais-Assignment1.zip contains an executable file. For security reasons, Gmail does not allow you to send this type of file.
I can sort of see how something like this could have come about: logs show users e-mailing executable files of various degrees of maliciousness. Google reacts by deciding one malicious executable file is one too many and refuses to accept executable files as Gmail attachments.
Some clever user then thinks "My nefarious H@xx0Rz.EXE must be e-mailed to my clueless buddies... I know: I'll just zip it!". Google notices again and here we are. Encrypting my ZIP file would probably do nothing as you can list the names of the files without the key and so Google's clever little ZipSecurityPeeker.py
only needs to check for the presence of files ending with .exe
.
I ended up submitting the assignment using another e-mail account. I bet I could have CCed my GMail account and received the "insecure" attachment no problem.
UPDATE: Whoa! I didn't even have a .exe
file in my ZIP archive! I have some .bat
, some .cmd
and some .pl
, as well as one or two shell scripts without an extension. Most of those files, incidentally, shipped as part of Apache Ant, which I included in my assignment's ZIP archive so the professor wouldn't have to go hunt it down, install it, etc.
UPDATE 2: Nope, I can't receive it either because I apparently broke the law:
Your message cannot be delivered to the following recipients:
(...)
Reason: SMTP transmission failure has occurred
Diagnostic code: smtp;552 5.7.0 Illegal Attachment c5si5493294qbc
(...)
Here's a snippet of testing code from a university assignment I did last term where we had to create a model of an alarm clock using finite state machines and then test using the FSM testing techniques we learned in class. This is Java 5 code with some JUnit goodness.
/**
* It's 21:30 and I'm going to bed. I set the alarm time for 06:00 and then
* sleep until the damn thing wakes me up, but I don't want to get up just
* yet and I think 4 more minutes will change my mood today from
* "didn't get enough sleep" to "downright chipper" and so I slam my hand in
* the general direction of the drowse button (it has an 80%, no 70% chance
* of hitting it the first time) and then wake up a new man 4.2 minutes
* later, turning off the alarm functionality until I need it again the
* following night.
*/
@Test
public void SetTickRingDrowseTickRingStop ( ) {
// set clock time from 01:00 to 21:30
super.SwitchTimeSet();
// that is to say add 20 hours
for (int c = 0; c < 20; c++) {
super.HourButtonClick();
}
// and 30 minutes
for (int c = 0; c < 30; c++) {
super.MinuteButtonClick();
}
areEqual(21, 30, super.clockTime);
// set switch to Run
super.SwitchRun();
// set alarm time from 13:00 to 06:00
super.SwitchAlarmSet();
// which is to add 11 + 6 hours
for (int c = 0; c < 11 + 6; c++) {
super.HourButtonClick();
}
areEqual(06, 00, super.alarmTime);
// set switch to Run
super.SwitchRun();
assertTrue(super.IsAlarmOn());
// go to sleep for 8.5 hours
for (int c= 0; c < 8.5 * 60; c++) {
super.TickMinute();
}
areEqual(06, 00, super.clockTime);
// whoa, it's ringing!
assertTrue(super.IsTriggered());
assertTrue(super.IsRinging());
assertFalse(super.IsDrowsing());
// leave me alone for 240 more seconds!
super.DrowseButtonClick();
for ( int c = 0; c < 4; c++ ) {
assertTrue(super.IsTriggered());
assertFalse(super.IsRinging());
assertTrue(super.IsDrowsing());
super.TickMinute();
}
areEqual(06, 04, super.clockTime);
// whoa, it's ringing again!
assertTrue(super.IsTriggered());
assertTrue(super.IsRinging());
assertFalse(super.IsDrowsing());
// that's it, I'm getting up and turning this thing off
super.SwitchAlarmOff();
assertFalse(super.IsAlarmOn());
}
The test depends on some @Before method which resets the model (i.e. makes it just like the alarm clock just had batteries put in for the first time) and thus the the initial clock time is 01:00 and the initial alarm time is 13:00. The model was created from observing the behaviour of an old Westclox travel alarm clock.
Path type | Windows | *nix |
---|---|---|
the subversion repositories are located | d:\svnrepo | /home/svn |
the backup root folder | d:\backups | /home/backups |
the subversion CLI | (in the path) | (in the path) |
Windows | *nix |
---|---|
BackupAndDump.bat
| backupanddump
|
Windows | *nix |
---|---|
SubversionBackup.bat
| svnbackup
|