Peter's Blog

Redefining the Impossible

Items filed under email


I'm back to using Outlook for two reasons:

  • the journal feature may be useable as a desktop notetaking tool. Being integrated into the email program means fewer apps running and a leaner and meaner system (ha). It does look like a half decent note taking tool, entries can be formatted, pictures pasted in etc.
  • was reading how hackers can carry packet sniffers on memory keys and became paranoid about my unencrypted password floating around the ether(net). I looked into setting up ssl authentication on the exchange server but it involves messing around setting up an ssl certificate server and I couldn't be bothered.

I've given up on using folders to categorise my email: I leave it all in the inbox and rely in searching to find stuff. I have google desktop search to speed this up but that still thinks I am still using thunderbird and tries using that to display messages. How to persuade it I have vaccilated back to the evil ones?


4 Comments

There are three ways to blog from a pocketpc that I have found:

  1. open your blog in a web browser and edit it as normal. This doesn't work so well in practise unless your web page has been designed with a css style sheet that works nicely on a pda. I tried modifying my drupal theme accordingly and made it presentable but it's not up to data entry.
  2. try using an application for posting to blogs. There are a couple of these about but those that I tried were buggy or had tiny little edit boxes.
  3. write the article and submit by email. This is how I am posting this, I use phatnotes, a notetaking application that can send the notes via email. I don't use pocket outlook for the simple reason that it doesn't seem to save sent mail so I cannot edit the article and send it again to modify it. I use my old mailbot script on the server to capture posts and poke them into drupal.

So far this has worked ok and I can compose posts offline and upload them at my leisure.

Disadvantages:

  • No preview unless I go online, hence I keep posts simple.
  • cutting and pasting urls is fiddly and I cannot be bothered with it.
  • my script adds tags by scanning the database for existing tags, searching the post for the tag words and adding the tags that it finds. This can give irrelevant tags and I cannot define new tags. I need a neat way to specify tags in the post.

Advantages:

  • the convenience of whipping my pda out and having a quick blog. I don't have to go upstairs and get my laptop.
  • can lay on settee and blog in comfort.

2 Comments

I've discovered Thunderbird saved searches. They allow me to create items in the tree thing on the left that act like folders full of messages that meet certain search characteristics. For example, I can have an item called 'fred' containing all messages from 'fred'. Previously to do this I would create a folder and get my filtering rules to try to shuffle incoming messages into the right folder. In outlook this was always flaky, in thunderbird I've never bothered. Saved searches are much easier to set up and have the advantage that if you change the search terms then the changes are applied immediately, you don't have to run all your messages through filtering rules again. Also messages can meet more than one search pattern: I could have a search for everyone in project X and I could also have searches for specific people in project X: the same messages could appear in both.

It's working nicely with Microsoft Exchange via IMAP: the searches occur instantly, no real overhead. This may be because the IMAP is offloading the search to the server. If the search was done locally I doubt that it would be so transparent.

Hum, as a concept these stored searches could be considered an alternative to tagging. Instead of manually having to mark an article as being about, say, ubuntu, the stored search would automatically search for the word ubuntu in the article and list the matches. It is more fiddly to create a search than a tag but they would require less maintenance. Tagging does give the possibility of structuring articles. Something else to think about.


2 Comments

Servant Salamander: coming to rely on this. Pretty much destined to register it. Today I discovered that I can get it to calculate space used in subdirectorys and then send a report of directory names and sizes, sorted by size, to the clipboard. Try doing that with Windows Explorer. I've stopped using filezilla, Salamander is a useful sftp client. Things I do wish it could do:

  • copy directly from one sftp site to another. Similarly, since you can browse straight into a zip or tgz file, it would be nice to be able to copy a file from within an archive on one window to other window showing an sftp site. The user interface spoils you, you start thinking these things are possible, you try them and are thwarted.
  • create tar.gz files. I have actually learned the incantation for this, I am becoming such a command line junkie:
    tar cvfz blah *
    
    It can do zips and rars and stuff.
  • It sometimes goes a bit crazy with the confirmation dialogs, sometimes giving two or three in a row. I don't have faith enough to disable them, combining them into one dialog would be nice (e.g. yes I want to copy, I want to copy it there, I want to overwrite everything).

Thunderbird: since I fixed the exchange server I have been using this instead of outlook and have not looked back. I use an IMAP connection to the Exchange server and it is working just fine. I used to have problems with it when my network connection was flakier (it kept asking me for my password) but since I installed XP on my pc the network has been ok (one of those software decay things on my old Win2k install). I think outlook was tainted by spambayes which was pretty lethargic in moving spam around (to get around outlook's flaky message filtering it does lots of sleeps to keep out of the way). So you go to look at a message and find that spambayes is still in the process of moving it to the junk folder. Thunderbirds integrated bayesian spam filter is working for me. Another thing I like about thunderbird, the flag thing that pops up and goes away again when new mail arrives. The outlook taskbar thing always used to get stuck on, even after deleting new messages, to the extent that I disabled it.


Add a comment

I put postfix on my linode for mail handling. The installation went smoothly enough, loading the ubuntu package and editing /etc/postfix/main.cf to set up the domain names to be accepted. However, I had trouble receiving mail from outside. Trying to telnet in on port 25 told me that the smtp daemon was not listening.

The solution to this was to edit the /etc/postfix/master.cf file and change the lines:

127.0.0.1:smtp inet n   -       -       -       -       smtpd
::1:smtp       inet n   -       -       -       -       smtpd

to

smtp      inet  n       -       -       -       -       smtpd

which tells it to listen to any connection to the smtp port, not just local connections.

According to this site I haven't put up another open relay. (note to self: publish open relay test, lie about results and build nice list of open relays to sell to spammers).


Filed under: email linode postfix ubuntu

Add a comment

Someone at work got a phishing email. Looking through the html, I found this:

 <p class=MsoNormal><font size=2 color=black face=Verdana><span
  style='font-size:10.0pt;font-family:Verdana;color:black'><a
  href="http://www.paypal-3089740289dsdasdfedd.8800.org/navbar/34098.html"><span
  style='text-decoration:none'><img border=0 width=117 height=35
  id="_x0000_i1025" src="http://paypal.com/en_US/i/logo/paypal_logo.gif"
  onMouseOver="click('')"></span></a><o:p></o:p></span></font></p>

I'm no expert in javascript but it looks to me like just moving the mouse over an image is going to cause it to be clicked, taking you to a paypal clone site and filling your hard disk with spyware. Outlook XP disables javascript in emails, and just as well.


Filed under: email outlook phishing

2 Comments

Latest MTA to use under linux is postfix as this appears to be a ubuntu standard. I fancy trying something a bit lighter than exim and there doesn't appear to be a debian package for qmail and I can't be bothered to build it.

As this mail server is running on my little intranet box at work I need it to forward internal email to the company internal email server. If I email pcw@mycompany.com from the box the email gets bounced with "Name or service not known" because the DNS server configuration is screwed up and mycompany.com resolves to the internal file server, not the mail server.

Anyway, I worked out the postfix incantation to do this and it's not a pretty thing, it doesn't bode well for postfix ease of use:

  • Create/edit a file called /etc/postfix/transport
  • Add relay instruction along the lines of:
    mycompany.com        smtp:192.168.0.5
    
    or wherever you want to relay to.
  • execute the command
    sudo postmap /etc/postfix/transport
    
  • edit /etc/postfix/main.cf and add the following:
    relay_domains = $mydestination, mycompany.com
    transport_maps = hash:/etc/postfix/transport
    
  • execute the command
    sudo postfix reload
    
    to reload the configurations (or /etc/init.d/postfix restart).

This worked for me, from my server box I can email myself on internal email allowing me to get messages from servers etc.


Filed under: email linux postfix ubuntu

1 Comment

email, electronic mail. If you want to know more, email me and ask.


Filed under: email

Add a comment

I've been contemplating some python web development. This is mainly for the following reasons:

  • I'd like my blog to have features for threading subjects based on keywords, a kind of related articles list. This would be dynamically updated, old articles could link to newer articles. This is possible in Drupal but the taxonomy system is laborious to configure through the web interface. There is a new keyword feature (folksonomies) but it appears to be a library for other modules to use. There are some modules that promise this kind of thing but they are not what I am looking for. The most important thing is that old articles are displayed with links to new articles, which involves messing around with themeing to add links to a cached page or figuring out how to flush the cache and put articles through a filter that would add the links.
  • I'd rather spend my limited programming time being creative with technologies I am already familiar with. I don't like php enough to want to learn it any more. I know and like python.
  • I don't want to spend my time trying to figure out how the Drupal code base works. Ok, I'm lazy and I have a short attention span and I'm not very interested in how it works.
  • If I do this as a spare time project I want to enjoy it, I don't want it to feel like a maintenance exercise. I can do that at work.
  • I have found that using librarys etc written by third partys can give you 95% of what you want, then you spend weeks trying to hack them to get the extra 5%. The only exception to this rule I can think of is the python standard library which is way cool.

So I looked at a few web application frameworks. This is a little lightweight and short on detail, I did most of it a few weeks ago and I didn't take notes.

cherrypy: Requires python 2.3 and my hosting service will only give me python 2.2 with cgi. I think generator functions are way cool and I'd love to use them. Do I stand any chance of getting my hosting service to upgrade? I'll email them and ask.

quixote: got the demo going, although I had to fix some of the urls within it as they appeared to be broken. It worked easily enough with cgi, the 1.3 version worked with python 2.2. However, again they have just released version 2 which has a couple of yield statements in it, limiting it python 2.3.

webware: I don't think I could see the advantage of 'servlets' and their web site (presumably powered by webware but it only says 'python powered') is not an impressive display of it's capabilities.

zope/plone: I've toyed with zope in the past (version 2) and found it's learning curve to be almighty. It may be very capable but you have to learn the zope way to do everything. The developers seem to be concentrating on inventing new object-orientated paradigms rather than keeping things simple and I hate huge complex object models. I don't like the web-based source editor (what, no syntax highlighting?: although I could use mozex and edit in vim). Also, non-cgi.

I was most interested in quixote until I came to the python 2.3 stumbling block with the new version 2. I don't want to settle for an old version. This led me on to think about what these frameworks actually give me:

  • map urls to class/method calls
    • big deal
  • session management
    • do I need it for my simple purposes?
  • templating systems
  • interface to cgi/mod_python/fastcgi/whatever
    • I can only have cgi anyway
  • easy form generation
    • classes to build the contents of a form. How many forms will I need? Can't templates do this?
  • already used on the internet and exposed to hackers
    • lets not be too ambitious with what we do. Keep drupal in the background for data entry.
  • learning curves

Which has led me to... straight cgi. Run my own scripts from cgi, using the cgi module in the standard python library to get the url parameters and generate a nice error page when things go wrong. I can get it going easily enough and below, with just a few hours hacking, is something that can display nodes from the drupal database. The output is themed through the Cheetah template engine and gives me the same look as my drupal theme. Given that it is only cgi it is not massively scalable, but I understand every line of it and that means a lot in terms of development time. Given that it generates pages that look like the drupal pages, I can chop and change, leaving some bits to drupal (data entry) and others in python (presentation). It's a lash up but so what?

The main challenge is porting my wilki module to python, particularly the geshi syntax highlighting.

I am not planning to rewrite Drupal and I probably won't release Yet Another Python Web Framework. I may not even finish it. It is something for me to play with.

   1  #!/usr/bin/python
   2  #
   3  import Cheetah.Template
   4  import cgi
   5  import cgitb; cgitb.enable()
   6  import time
   7  import datetime
   8  import os
   9  import pdo
  10  
  11  def ThemeAndOutput( strPageTitle, strContent, oParams={}):
  12      "Theme the site"
  13  
  14      strSideBar = """
  15      <div class="block">
  16      <h2>Reports</h2>
  17      <ul>
  18          <li><a href="Intranet.cgi">Drupal Emulator</a></li>
  19      </ul>
  20      </div>"""
  21  
  22      oDict = {
  23          'Root': '/SMB',
  24          'Url': '/Intranet/Intranet.cgi',
  25          'Title': 'Drupal Emulator',
  26          'Slogan': 'There are no Problems, only Challenges',
  27          'PrimaryLinks': [ '<a href="http://intranet.org">Intranet</a>',
  28                              '<a href="http://www.google.co.uk">Google</a>'],
  29          'PageTitle': strPageTitle,
  30          'SideBar': strSideBar,
  31          'Footer': 'Copyright 2005 Peter Wilkinson'
  32      }
  33  
  34      #
  35      # Read page template and shove in the content.
  36      #
  37      strTemplate = open( 'PageTemplate.html').read() % { 'Content': strContent}
  38  
  39      #
  40      # Run template and content through cheetah in one go.
  41      # Is this faster? Doubt it.
  42      #
  43      oHtml = Cheetah.Template.Template( strTemplate, [oDict, oParams])
  44  
  45      print str(oHtml)
  46  
  47  def MainPage( oForm):
  48      "Main welcome page: tell user what is going on"
  49  
  50      #
  51      # Determine how many links to show.
  52      #
  53      strFrom = oForm.getfirst( 'from')
  54      if strFrom == None:
  55          strLimit = ' LIMIT 10'
  56      else:
  57          try:
  58              nLimit = int(strFrom)
  59              strLimit = ' LIMIT %d, 10' % nLimit
  60          except:
  61              strLimit = ' LIMIT 10'
  62  
  63      c = pdo.connect( 'Module=MySQLdb;user=drupal;passwd=secret;db=drupal')
  64      rs = c.open( 'SELECT * FROM node ORDER BY created DESC %s' % strLimit)
  65  
  66      strTitles = []
  67      while rs.next():
  68          strTitles.append( '<a href="Intranet.cgi?node=%s">%s</a>' %
  69                (rs.fields['nid'].value, rs.fields['title'].value))
  70  
  71      strPage = """
  72  <ul>
  73  #for $strTitle in $titles
  74  <li>$strTitle</li>
  75  #end for
  76  </ul>
  77      """
  78  
  79      ThemeAndOutput( "Welcome", strPage, { 'titles': strTitles})
  80  
  81  def NodePage( oForm):
  82      "Display a node"
  83  
  84      strNode = oForm.getfirst( 'node')
  85      if strNode == None:
  86          ErrorPage()
  87          return
  88      else:
  89          try:
  90              nNode = int(strNode)
  91          except:
  92              ErrorPage()
  93              return
  94  
  95      c = pdo.connect( 'Module=MySQLdb;user=drupal;passwd=secret;db=drupal')
  96      rs = c.open( 'SELECT * FROM node WHERE nid = %d' % nNode)
  97  
  98      if rs.next():
  99          strTitle = rs.fields['title'].value
 100          strBody = rs.fields['body'].value
 101      else:
 102          ErrorPage()
 103          return
 104  
 105      strPage = """
 106  <h2>$strTitle</h2>
 107  
 108  <pre>
 109  $strBody
 110  </pre>
 111      """
 112  
 113      ThemeAndOutput( strTitle, strPage,
 114            { 'strTitle': strTitle, 'strBody': strBody})
 115  
 116  def ErrorPage():
 117      strPage = """<p>There has been some kind of navigation error, the link
 118  you just clicked is broken</p>
 119  <p>Better <a href="mailto:someone@somewhere.com">complain about it</a>.</p>
 120      """
 121  
 122      ThemeAndOutput( "Drupal emulator", strPage)
 123  
 124  oForm=cgi.FieldStorage()
 125  
 126  node = oForm.getfirst( 'node')
 127  if node:
 128      NodePage( oForm)
 129  else:
 130      MainPage( oForm)

The page template is kept in a seperate file. It is based on the phptemplate of my drupal theme and was ported over in less than an hour. Theming engines? A specialisation of templates.

   1  Content-Type: text/html
   2  
   3  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
   4   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
   5  <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
   6  <head>
   7  <title>$Title</title>
   8  <meta http-equiv="Content-Style-Type" content="text/css"/>
   9  <style type="text/css">@import url(style.css);</style>
  10  </head>
  11  <body>
  12      <div id="headerleft">
  13      </div>
  14      <div id="headermain">
  15          <div id="ie6hack">
  16          </div>
  17      </div>
  18      <div id="headertitle">
  19          <h1>
  20              <a href="$Url" title="$Title">
  21              $Title</a>
  22          </h1>
  23      </div>
  24      <div class="slogan">
  25          $Slogan
  26      </div>
  27      <div id="logo">
  28          <a href="$Url" title="$Title">
  29              <img src="ITL.gif"/>
  30          </a>
  31      </div>
  32      <div id="headerright">
  33      </div>
  34  #if len($PrimaryLinks) > 0
  35      <div id="primarylinks">
  36          <ul>
  37  #for $PrimaryLink in $PrimaryLinks
  38              <li>$PrimaryLink</li>
  39  #end for
  40          </ul>
  41      </div>
  42  #end if
  43  
  44      <div id="ie5forcemargininsidehack">
  45          <div id="main">
  46              <div class="tab">
  47                  <div class="tabbackground">
  48                      <div class="tableft">
  49                          <h3>
  50                              $PageTitle
  51                          </h3>
  52                      </div>
  53                  </div>
  54              </div>
  55              <div class="tabbody">
  56                  <div class="ieisbuggy">
  57                  </div>
  58                  <div id="content">
  59                      %(Content)s
  60                  </div>
  61                  <div class="ieisbuggy">
  62                  </div>
  63              </div>
  64          </div>
  65          <div id="footer">
  66              <div class="footerleft">
  67                  <p>
  68                  $Footer
  69                  </p>
  70              </div>
  71          </div>
  72      </div>
  73      <div id="sidebarright">
  74          <div id="sidebar">
  75              <div class="sidebarbox">
  76                  $SideBar
  77              </div>
  78          </div>
  79          <div id="sidebarbottom">
  80          </div>
  81      </div>
  82  </body>

Add a comment

Been playing with The Brain some more:

  • By linking a folder to a thought and creating virtual thoughts for all files in the folder, I can apply meta-data and define new relationships between files, beyond what a simple folder hierarchy can do. It's an interesting concept, but I need to think of a use for it. Maybe creating shortcuts to useful files, each shortcut having a note to remind me what the file does beyond it's name.
  • The context menu for virtual thoughts gives some of the windows explorer options such as 'open', 'edit', 'edit with VIM' etc, it is not restricted to opening them. This is useful to me, giving me the option of running or editing python files.
  • Similarly, brain promises it can spider a web site, building a map of all the pages, each thought linking to the corresponding page. Unfortunately this seems to be broken:
    1. it stopped with a weird access error half way through my test
    2. the links it did create didn't work, some problem with absolute vs relative urls.
  • It has some nice keyboard shortcuts, it is possible to do extensive navigation and map buildng using just the keyboard.
  • If I just start typing a word then by default this goes into the search box and does an incremental search. Very fast way of finding things.
  • I don't think the virtual thoughts for files appeared in the search list.
  • Dragging an email from outlook causes the corresponding .eml file to be stored in the brain and opened when the thought is clicked on: nice way to organise email.
  • Since the RTF notes support OLE I can embed excel spreadsheets in them. Maybe RTF isn't so bad.
  • Except the program create a 388 byte empty RTF file for every though, even when I don't put anything in them.
  • Program was last modified in March 2004. It's not perfect so is it still under development?
  • It is supposed to be version 3.0.2 but the tooltip in the task bar and at least one comment in the help file says version 2.0.
  • Despite it's flash graphics it is nice and fast. I can imagine the new graphical UI coming out, based on Avalon and similar, providing gimmicky interfaces like this.

Conclusion: I still like it.


Add a comment