Category: Uncategorized

  • Proxy Dashing Dashboard behind Apache with SSL

    I needed to allow access to my Dashing dashboard over ssl from the Internet.  I decided to proxy it behind Apache and get Apache to do all the SSL heavy lifting, mainly because I couldn’t work out if and how you could enable SSL within Dashing itself.
    It turned out to be quite simple to implement. I simply created a vhost configuration for my dashboard and enabled it in Apache.
    Create a file  called dashboard in /etc/apache2/sites-available/ with the following content:

    <VirtualHost *:80>
     ServerName dashboard.example.com
     Redirect permanent / https://dashboard.example.com/
    </VirtualHost>
    NameVirtualHost *:443
    <VirtualHost _default_:443>
     SSLEngine On
     SSLCertificateFile /etc/ssl/CAcert.cert.pem
     SSLCertificateKeyFile /etc/ssl/private/key.pem
     ServerAdmin webmaster@localhost
     ServerName dashboard.example.com
     ErrorLog "/var/log/apache2/dashboard-error_log"
     CustomLog "/var/log/apache2/dashboard-access_log" common
     <Proxy *>
       Order allow,deny
       Allow from all
     </Proxy>
     ProxyPass / http://mylocalserver.example.com:3030/
     ProxyPassReverse / http://mylocalserver.example.com:3030/
    </VirtualHost>

    Ensure the proxy modules are enabled:

    $ sudo a2enmod proxy
    Enabling module proxy.
    To activate the new configuration, you need to run:
    service apache2 restart
    $ sudo a2enmod proxy_http
    Enabling module proxy_http.
    To activate the new configuration, you need to run:
    service apache2 restart
    $

    Enable the new dashboard site:

    $ sudo a2ensite dashboard

    Check your configuration is working before restarting apache:

    $ sudo apachectl configtest
    Syntax OK
    $ sudo service apache2 restart
    [ ok ] Restarting web server: apache2 ... waiting .
    $

    Don’t forget to delegate your dashboard.example.com hostname to resolve to your apache server’s IP address.
    Now visit http://dashboard.example.com/name_of_your_dashboard. Your browser should automatically get redirected to https://dashboard.example.com/name_of_your_dashboard and you should see your dashboard.

  • 3D Printed Heated Towelrail Brackets

    3D Printed Heated Towelrail Brackets

    Our heated towel rail’s brackets broke from old ages recently. After investigating getting a new towel rail and finding out they were quite expensive, I decided to try and design and 3D print new brackets for it.
    The first cut of the design turned out to have too little space for the nuts. A second draft with a little more space and it worked perfectly.
    The top left of the above image shows the broken parts and the bottom center shows 2 of the 3d printed replacement parts.
    3D Printed bracket holding the heated towelrail

    Update 2016-03-26

    Someone emailed me mentioning that their “Posh” heated towel rail had the same problem. A bit of googling around revealed a link a Goldair Towel Rail Bracket and Strap kit that looks like it contains the same straps as mine. This might help others find the relevant parts. Goldair have an Australian site too but it makes no mention of the strap kits.

  • Preserve file permissions 664 under subdirectories in linux with ACLs

    Have you ever wanted to give several users permission to work on files within a directory, but then struggled with what permissions and user:group ownership to set them to so users can always edit the files?
    You might think the solution is to make the parent directory owned by a common group, lets say dev, and then try and make the permissions flow through to the files within. This doesn’t work though, and new files will still be created with the user’s umask, typically 644, which is no good as it results in the other users not being able to edit the file.
    The solution lies in ACLs (Access Control Lists). Thanks to Pelle at Stackoverflow for making such a concise set of steps to set this up. Blatantly copied here:
    First add the acl option to the mounted partition where the directory is you want to apply this to. Add the acl option to the mount point in /etc/fstab:

    /dev/xvda1      /               ext3    errors=remount-ro,acl 0       1
    

    Then remount the filesystem to enable it:

    # mount -oremount /
    

    Then set the permissions using the setfacl command:

    # setfacl -dm u::rwx,g::rwx,o::r /shared/directory
    

    Test by creating a new file in /shared/directory:

    /shared/directory$ touch test
    /shared/directory$ ls -al test
    -rw-rw-r-- 1 jason dev 0 Feb 20 12:37 test
    

    Marvel in the wonders of modern filesystems.

  • FreeCAD

    screenshot of FreeCAD showing a cylinder intersecting a cube and the Boolean operation window visible
    Cylinder intersecting a cube

    Hack A Day has a great article introducing FreeCAD.

    FreeCAD is a parametric 3D modeler. Parametric modeling allows you to easily modify your design by going back into your model history and changing its parameters. FreeCAD is open source (LGPL license) and completely modular, allowing for very advanced extension and customization.

    There are several great things about this.

    1. It’s free as in beer
    2. It’s free as in libre
    3. It’s available for Windows, Linux and Mac OS X
    4. It’s scriptable in python
    5. you can draw things using constructive solid geometry (CSG)
    6. you can create objects by extruding 2D drawings similarly to Solidworks

    If this article is of interest to you, see my other list of OpenSCAD alternatives, and my other posts about free CAD packages.

  • typing mathematical symbols into emacs using the TeX input method

    typing mathematical symbols into emacs using the TeX input method

    You can type mathematical symbols into emacs using the TeX input method.

    C-\
    TeX <enter>
    \ohm
    \therefore
    \pi

    C-\ will toggle the input method on and off. Note the \ indicator in the bottom left of the status bar.

  • LED down light comparison website – www.ledbenchmark.com

    LED down light comparison website – www.ledbenchmark.com

    I’ve wanted a reliable source of information on LED light bulbs for a long time. Well apparently it does exist. ledbenchmark.com have brief reviews and comparisons of many blubs and it seems to be done in a nice scientific way.
     
    Image By Mcapdevila [CC-BY-SA-3.0], via Wikimedia Commons

  • Top 3 tips for migrating a server to a virtual machine

    I recently migrated a server to a virtual machine, and while it was mostly a smooth process, I did encounter a couple of problems.

    • Ensure that any licensing services will run on the new virtual hardware. Our accounting system’s license server wouldn’t run until it was set up with new licenses.
    • Check date and time are correct on the new host and guest vm.
    • Make sure the server is set to use a static IP addresses before migrating.
  • Anacron run-parts: /etc/cron.daily/amavisd-new exited with return code 1

    I’ve been getting messages like the ones below from cron my debian box for some time now. I finally got sick of seeing them and I tracked down the error.
    /etc/cron.daily/amavisd-new:
    Please run this cronjob as user amavis
    run-parts: /etc/cron.daily/amavisd-new exited with return code 1

    At some point the debian package moved the cron config file from /etc/cron.daily/amavisd-new to /etc/cron.d/amavisd-new but for some reason when upgrading, it does not remove the old config file, leaving you with an erroneous file.
    All you need to do is delete /etc/cron.daily/amavisd-new and the messages should go away.

  • Programmatic CAD, OpenSCAD alternatives

    There are quite a few programatic CAD, OpenSCAD alternatives out there. I am collecting a list of them and providing links to them here. The requirements to be included in this list are:

    • Free and libre.
    • They are a programming language as opposed to a GUI.

    OpenSCAD: The most well known programmatic CAD program. Probably the original open source one that I am aware of.openscad screenshot
    CoffeeSCad: Solid CAD modeling in your browser, with a CoffeeScript based syntax (and lots more!)coffeescad screenshot showing code edit window and a rendered cube
    ImplicitCAD: Powerful, Open-Source, Programmatic CAD. Haskell and extopenscad.edit area and rendered object in ImplicitCad
    RapCAD: Rapid prototyping CAD IDE for RepRap and RepStrap 3D printing machines.code edit window of RapCAD with rendered line next to it
    OpenJSCAD: OpenSCAD + JavaScript = OpenJSCAD, edit locally or remote online, preview in browser direct via WebGL.
    screenshot of OpenJSCAD
    FABFabbers bills itself as “a new site for the 3d printing community”. It provides in browser OpenSCAD compilation and linking to github projects.FABFabbers screenshot
    Update: Atomic let me know about BRL-CAD, the free military-grade antecessor to all of these.
    BRL-CAD mged graphics window
    BRL-CAD mged command window
    Update 2: gzmask pointed out SchemeCad, a programmable 3D CAD tool that supports wireframe models and features animation. Users can program Scheme Cad by writing extensions in Scheme (a dialect of LISP). It’s available for Windows and Linux.
    screenshot of scheme-cad
    Update 3: CScheme is the integration of geometric kernels in a functional language.
    screenshot of cscheme website

    ;export the model
    (define (print-brep shape filename)
      (BRepTools_Write shape filename))
    ;translate an object
    (define (translate obj x y z)
      (let ((vec (make-object gp_Vec% x y z))
            (trsf (make-object gp_Trsf%)))
        (begin
          (send trsf SetTranslation vec)
          (send (make-object BRepBuilderAPI_Transform% obj trsf #t) Shape))))
    ;make a structure from two given object
    (define (structure obj1 obj2)
      (let ((compound (make-object TopoDS_Compound%))
            (builder (make-object BRep_Builder%)))
        (begin
          (send builder MakeCompound compound)
          (send builder Add compound obj1)
          (send builder Add compound obj2)
          compound)))
    ;make a structure from a list of object
    (define (composite lis)
      (if (list? lis)
        (cond
          ((= (length lis) 0) (error "empty list"))
          ((= (length lis) 1) (car lis))
          (else (make-compound (car lis) (composite (cdr lis)))))
        (error "Not a list")))
    ;build a torus
    (define (torus radius circle)
      (make-object BRepPrimApi_MakeTorus% radius circle))
    ;build a sphere
    (define (sphere radius)
        (make-object BRepPrimApi_MakeSphere% radius))
    ;calculate the torus dimension
    (define (radius z)
      (sqrt (- 1 (* z z))))
    ;make all torus objects
    (define (torus-on-sphere the-list)
      (composite
        (map
          (lambda (z) (translate (torus (radius z) 0.05) 0.0 0.0 z))
          the-list)))
    Final export operation
    ;export the model
    (print-brep
      (structure
        (sphere 0.3)
        (torus-on-sphere (list -0.93 -0.75 -0.5 -0.25 0 0.25 0.5 0.75 +0.93)))
      "./torus.brep")

    and PLaSM: a functional language for computing with geometry.

    screenshot of plasm website

    DEF points1 = <<0,0,0>,<0,3,4>,<0,6,3>,<0,10,0>>;
    DEF points2 = <<3,0,2>,<2,2.5,5>,<3,6,5>,<4,8,2>>;
    DEF points3 = <<6,0,2>,<8,3,5>,<7,6,4.5>,<6,10,2.5>>;
    DEF points4 = <<10,0,0>,<11,3,4>,<11,6,3>,<10,9,0>>;
    DEF dom = intervals:1:12;
    MAP:(beziersurface:< points1 , points2 , points3 , points4 >):
    (dom * dom);

    Thanks to Kristoffer Josefsson for those two.
    Update 4: Parametric Parts allows consumers to create and print 3D parts through our web-based platform. Anyone can make an idea come to life, even without technical expertise or prior 3D experience. It apparently uses  CadQuery for its backend.
    CadQuery is an intuitive, easy-to-use python based language for building parametric 3D CAD models. CadQuery is for 3D CAD what jQuery is for javascript. Imagine selecting Faces of a 3d object the same way you select DOM objects with JQuery! Thanks to Monique for pointing them out.
    screenshot of parametricparts website
    Pierre left a comment to let me know about POV-Ray.  The Persistence of Vision Raytracer (POV-Ray) is a high-quality, Free Software tool for creating stunning three-dimensional graphics. The syntax looks very similar to OpenSCAD and C.

    #include "colors.inc"
    camera{
      location <4, 4, -10>
      look_at 0
      angle 36
    }
    light_source{ <500, 500, -1000> White }
    plane{ y, -1.5
      pigment{ checker Green White }
    }
    union{
      box{ -1, 1 }
      sphere{ 0, 1.375 }
      pigment{ Red }
    }

    screenshot of povray of sphere unioned with a cube
    Let me know if I’ve left any off the list?

  • Emacs: yank a line multiple times from the kill ring

    Emacs: yank a line multiple times from the kill ring

    Today I needed to copy a line multiple times in emacs. I needed 8 copies, but how to do that in emacs short of pressing C-y to yank 8 times? My initial guess was to try C-u 8 C-y but that yanks the 8th item from the kill ring.
    Fuco on #emacs supplied the awesome answer:
    F3 C-y C-8 F4
    So what does that do? F3starts recording a macro, C-yyanks the line, then within the macro itself you can add a numeric argument of 8 using C-8. End recording of the macro with F4. Emacs then runs the macro 8 times. Recall that pressing F4 after ending recording of the macro runs the macro.