Vimmy 1.4.1

What’s New in Version 1.4.1
Minor bug fixes, better landscape support.

Download Now!

APG 2Go 1.3

What’s New in Version 1.3
No more ads!

Download Now!

Vimmy 1.4

What’s New in Version 1.4
I listen to feedback. Here’s proof:
- No more ads!
- Full support for multiple orientations (landscape)
- Full support for Retina display iPad
- Prettier colors and easier to read on iPad

PLEASE show your support by rating Vimmy!

Download Now!

Vimmy 1.3

What’s New in Version 1.3
Ready for iOS 5.1, new icon, iPad Retina support, added new content to Miscellaneous section. Now utilizes Apple iAd to help support future development of this and other 13Cubed apps.

Download Now!

APG 2Go 1.2

What’s New in Version 1.2
Ready for iOS 5.1, new icon.

Download Now!

Objective-C – Full-screen WebView

This is a quick-and-dirty way to write a simple locked-down web browser perfect for kiosks or other similar scenarios. This code opens a pre-defined URL in full-screen mode and works with Snow Leopard and Lion. Instead of the overhead of a full browser like Firefox, the compiled size of this code is around ~500k and is designed to serve a very simple function.

AppDelegate.h:

//  AppDelegate.h
//  QuickWeb
//
//  Please edit below to define URL, font and font size.

#import <Cocoa/Cocoa.h>
#import <WebKit/WebKit.h>

#define MY_URL          @"http://www.example.com"
#define FONT            @"Times"
#define FONTSIZE        16

@interface AppDelegate : NSObject <NSApplicationDelegate> {
    NSWindow *mainWindow;
}
@end

AppDelegate.m:

//  AppDelegate.m
//  QuickWeb
//
//  Please edit "AppDelegate.h" to define URL, font and font size.

#import "AppDelegate.h"

@implementation AppDelegate

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    int windowLevel;
    NSRect screenRect;
    // Capture the main display
    if (CGDisplayCapture( kCGDirectMainDisplay ) != kCGErrorSuccess) {
        NSLog( @"Couldn't capture the main display!" );
    }
    // Get the shielding window level
    windowLevel = CGShieldingWindowLevel();
    // Get the screen rect of our main display
    screenRect = [[NSScreen mainScreen] frame];
    // Put up a new window
    mainWindow = [[NSWindow alloc] initWithContentRect:screenRect
                                             styleMask:NSBorderlessWindowMask
                                               backing:NSBackingStoreBuffered
                                                 defer:NO screen:[NSScreen mainScreen]];
    [mainWindow setLevel:windowLevel];
    [mainWindow setBackgroundColor:[NSColor blackColor]];
    [mainWindow makeKeyAndOrderFront:nil];

    // Load content view
    NSString *urlAddress = MY_URL;
	NSURL *url = [NSURL URLWithString:urlAddress];
	NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
    WebView *webView = [[WebView alloc] initWithFrame:screenRect];
    [[webView preferences] setStandardFontFamily:FONT];
    [[webView preferences] setDefaultFontSize:FONTSIZE];
    [[webView mainFrame] loadRequest:requestObj];
    [mainWindow setContentView:webView];
}

- (void)applicationWillTerminate:(NSNotification *)notification
{
    [mainWindow orderOut:self];

    // Release the display(s)
    if (CGDisplayRelease( kCGDirectMainDisplay ) != kCGErrorSuccess) {
        NSLog( @"Couldn't release the display(s)!" );
    }
}

- (BOOL)canBecomeKeyWindow
{
    return YES;
}

@end

CCNP Security SECURE Notes

I recently took and passed Cisco CCNP Security SECURE (642-637). I used CBT Nuggets video training and the official Cert Guide from Cisco Press to study for the exam. In case anyone is interested, I’ve decided to share the notes I took in preparation. Have fun!

CCNP Security SECURE Notes (PDF)
Cisco VPN Chart (PDF)

Bash – RHEL Service Script

This template can be used to create a service script for Red Hat Enterprise Linux. It will enable you to use “service myservice start”, “service myservice stop”, or “service myservice status” to control a particular process. It also supports the familiar Red Hat “OK” or “FAILED” green and red status messages. Other options can be easily added by modifying the case statement below. This script also supports chkconfig, so you can set the service to start on boot by issuing the command “chkconfig myservice on”, or remove it from boot start with “chkconfig myservice off.” This script should be placed in /etc/init.d with the proper permissions.

#!/bin/bash
# Replace myservice with your service name. Insert commands where noted.
# chkconfig: - 99 00

# Source function library.
. /etc/rc.d/init.d/functions

case "$1" in
  start)
    echo -n "Starting myservice"
    if [ -f /var/run/myservice.pid ]
    then
      echo
      echo -n "myservice is already running!"
      echo
      exit 1
    fi
    # insert commands here ...
    if [ -f /var/run/myservice.pid ]
    then
      echo_success
      echo
    else
      echo_failure
      echo
    fi
    ;;

  stop)
    echo -n "Stopping myservice"
    if [ ! -f /var/run/myservice.pid ]
    then
      echo
      echo -n "myservice is not running!"
      echo
      exit 1
    fi
    # insert commands here ...
    echo_success
    echo
    ;;

  status)
    # insert commands here ...
    ;;

  *)
  echo "Usage: /sbin/service myservice {start|stop|status}"
  exit 1
esac

exit 0

APG 2Go 1.1

What’s New in Version 1.1
Ready for iOS 5.

Download Now!

Vimmy 1.2

What’s New in Version 1.2
Ready for iOS 5, added new content to Miscellaneous section.

Download Now!