HomeSchool Software: Getting Close

I’ve recently been working against a deadline this month to get our Portfolio rendered, printed, and turned into the local Altoona Area School District.

The software has many improvements from the last couple days alone.  A background page renderer runs at all times, and will re-render a book’s page if anything on it changed.  The user interface for positioning images on a page is nearly complete.  I’ve enhanced the database with storage of full size JPEG images as well as info about the image (width, height, type, size).

Here is a screen shot of the page editor:

PVC Pipe Bench?

Someone contacted me about ideas for building a bench for a youth center out of PVC pipe.  Based on this information, I thought it should:

  1. Look cool
  2. Be inexpensive to build
  3. Be safe
  4. Comfortable!
  5. Fun

Here is what I came up with as a rough draft.  I’m not sure how to position the pipes so that it provides #4 above, but this was a rough guess.  I’m using a SPLINE curve in SolidWorks with pipes 3″ on center.

Any ideas about how to make something like this comfortable?
Also, anyone know where to get load calculations for structural use of PVC pipe?
It would be my preference to use thick walled aluminum tubing (or solid rod!) but again, #2 above needs to be satisfied.

HomeSchool Software: Page Rendering (Also ImageMagick Text Example)

Last couple days have had me working on the page rendering functionality of the HomeSchool software.  I’ve made some design decisions (for now) to speed up development like fixed 8.5″ x 11″ pages.  Hopefully later I will be able to go back and improve some aspects, but for now, time is of the essence.

Here is an example page render without the photographs included.  Still need a UI for selecting photographs and positioning them on the white area of the page.

At the bottom, see an ImageMagick Text Example about the python code used to render multiple text areas and color blocks on one image…

It took me a long time to figure out how to use ImageMagick to place multiple text areas on one image.  Here are some keywords for google:

ImageMagick, ImageMagick multiple text areas, ImageMagick pdf rendering, ImageMagick text.

      PrimerFont = join(App.Path, 'Static', 'Primerb.ttf')
      PrimerFontBold = join(App.Path, 'Static', 'Primer.ttf')
      RenderFile = join(TempDir, 'Render.jpg')

      # Build the full image
      subprocess.check_call((
        '/usr/bin/convert',

        # Setup the background
        '-size', '2550x3300',
        'xc:white',

        # Title Bar
        '-fill', 'grey14', '-draw', 'rectangle 0,0 2550,300',

        # Summary bar
        '-fill', 'RoyalBlue4', '-draw', 'rectangle 0,300 2550,600',

        # Description Bar
        '-fill', 'LightGrey', '-draw', 'rectangle 0,600 2550,1050',

        # Now draw the Name
        '(',
          '-density'    , '300',
          '-fill'       , 'white',
          '-background' , 'grey14',
          '-font'       , PrimerFont,
          '-size'       , '1650x150',
          '-gravity'    , 'West',
          '-pointsize'  , '20',
          'caption:'    + self.Book.Name,
        ')',
        '-gravity', 'NorthWest', '-geometry', '+150+150', '-composite',

        # Now draw the Date
        '(',
          '-density'    , '300',
          '-fill'       , 'white',
          '-background' , 'grey14',
          '-font'       , PrimerFont,
          '-size'       , '600x150',
          '-gravity'    , 'East',
          '-pointsize'  , '20',
          'caption:' + Activity.Date.strftime('%B %d, %Y'),
        ')',
        '-gravity', 'NorthEast', '-geometry', '+150+150', '-composite',

        # Now draw the Summary
        '(',
          '-density'    , '300',
          '-fill'       , 'white',
          '-background' , 'RoyalBlue4',
          '-font'       , PrimerFontBold,
          '-size'       , '2250x300',
          '-gravity'    , 'Center',
          '-pointsize'  , '20',
          'caption:'    + Activity.Summary.replace("\n", " "),
        ')',
        '-gravity', 'North', '-geometry', '+0+300', '-composite',

        # Now draw the Description
        '(',
          '-density'    , '300',
          '-fill'       , 'black',
          '-background' , 'LightGrey',
          '-font'       , PrimerFont,
          '-size'       , '2250x450',
          '-gravity'    , 'Center',
          '-pointsize'  , '14',
          'caption:'    + Activity.Description.replace("\n", "\\n"),
        ')',
        '-gravity', 'North', '-geometry', '+0+600', '-composite',

        # Now draw the Page
        '(',
          '-density'    , '300',
          '-fill'       , 'black',
          '-background' , 'white',
          '-font'       , PrimerFont,
          '-size'       , '2250x150',  #entire right half minus 150pt margin
          '-gravity'    , 'Center',
          '-pointsize'  , '14',
          'caption:'    + 'Page {0}'.format(self.PageNumber),
        ')',
        '-gravity', 'South', '-geometry', '+0+150', '-composite',

#        NameFile, '-geometry', '+0+0', '-composite',
#        DateFile, '-geometry', '+1275+0', '-composite',
#        SummaryFile, '-geometry', '+0+150', '-composite',
#        DescriptionFile, '-geometry', '+0+450', '-composite',

        RenderFile,
        ))

Home School Software Update: Portfolio Time

It’s that time of year again… Time to get the log and portfolio to the Altoona Area School District.  One problem — the software isn’t quite ready!

However, I’ve been making daily progress on getting the “output” working.  Here is how it is structured in this initial version:

  • You can create a book, “Eli Daniel Garber 2010-2011 Portfolio” for example.
  • Activities are added to the book, one activity per page.
  • The activity summary and description, date and pictures come along.
  • You can move the pictures around, crop, and choose the exact ones you want.
  • Pages in the book can be sorted any way you want.
  • Once the book is “ready”, you can output a print-quality PDF.  This PDF could be printed or sent to a printer to turn into a hardback book.
So far, we have recorded about 500 activities this year covering nearly 200 days — and we are still catching up on things that didn’t get entered.  One of the neat aspects of this project is to be able to really see what we’ve been up to all year.
Due to time constraints, I’m just focusing on getting good output.  Bells and whistles (chapters, cover pages, extra documents, table of contents, etc…) will have to come later.
Also, I added extensive filtering to the activity list, to help make it faster and more manageable.  Here are a couple of screen shots:

 

Optimal PuTTY Settings for SSH Connections to Linux

PuTTY is a great program.  I think it tops the cake for most-useful-utility-on-windows that I have ever encountered.  I’ve used it to connect to telnet, ssh, linux, unix, windows, hypervisors, and even IBM iSeries (AS-400).  However, despite all the cool things one can do with PuTTY, the default out-of-the-box-settings leave a good bit to learn.

For a long time, I put up with some less than optimal settings.  But over time, I learned what worked best for me.  The purpose of this post is to share that with you.

Enjoy!

Download from: http://www.chiark.greenend.org.uk/~sgtatham/putty/

Hint: I prefer the windows installer.  However, whatever you do, make sure you get the whole suite (unless you know you don’t need it)

Launch PuTTY and configure “Session” section

user@host is handy for auto-login.  I prefer to place my server name before my username in the saved sessions because the sort order will be maintained as the list grows.

Configure the “Terminal > Bell” section

I have found it preferable not to disable the bell if it is overused.

Configure the “Window” Settings

This is one of the most important settings.  The default of 200 lines of scrollback is just not enough.  I find 20000 to be more useful.  Also, the window size should be set according to your screen size and preferences.

Configure “Window > Appearance” settings

I find that the Luicida Console 14 point font is very easy on the eyes.  Keep in mind I’m usually using a 27″ or 30″ display at 2560 pixels wide, so I can afford the extra size of 14pt.  However, even on smaller screens, I still find it nicer to be able to read effortlessly and see less than the other way around.  Just give it a try :)

Configure the “Window > Translation” settings

As of a few years ago, Linux began to use UTF-8 character encoding by default.  This means that if your terminal is set to latin1 or similar, then each single multi-byte-character is literally interpreted as multiple latin1 characters, mostly drawn as out-of-place accented letters and various symbols.

So in my experience, it is best to use UTF-8 when connecting to Linux.

Configure “Window > Selection” settings

You need to decide here if you want an important safety precaution.  Under the “Compromise” setting above, right-click will paste whatever is on the clipboard… even if you were just blogging about sudo rm -rf /

So, think that over pretty hard.  The first option of “Windows” will bring up a right-click menu with a convenient “Paste” option.  Also, you can simply us SHIFT+INSERT to paste in PuTTY.

Configure “Window > Colours” settings

If you can read dark-blue-on-black, then your vision is in another “spectrum” than mine.  Check out the difference here:

Simply select “ANSI Blue” and change the RGB values to 112, 112, 255.

Configure “Connection” settings

It is helpful to send a null packet every once in a while to keep sessions alive.

Configure “Connection > SSH” settings (Update)

David Aldrich pointed out in a helpful comment that  “I also think it is probably worth enabling SSH compression if working over a slow connection.”

Configure “Connection > SSH > Auth” settings

If you use SSH Agent forwarding (eg pagent) to allow you to “hop” from one server to another, then PuTTY must be told to enable Agent Forwarding.  There are some security issues with this setting when connecting to an untrusted server, so please understand them first.

Configure “Connection > SSH > Tunnels”

If you want to connect to a MySQL or PostgreSQL service running on the host you are connecting to, but have all communication encrypted and sent via SSH tunnel, here is how to set that up.

Keep in mind that your Windows OS you are on must have the source port free, so if you are ALSO running MySQL locally, then pick a different local port number like 13306.

Once your SSH session is established, then you can connect to localhost port 13306 and it will be tunneled to the remote server on 3306.  Cool!

Finally!!! Don’t forget to save your session.

(hint: press the “Save” button)

And that’s it!  The basic PuTTY settings that I use which work quite nicely.

Hope this helps.