Thursday, April 27, 2017

Bash Scripts Auto Download Dependencies

Often times bash scripts I run depend on other tools. Tools that are sometimes updated. So once in a while I add the following curl command to download the latest tool.

  curl -O [filenameURL]

Tuesday, April 25, 2017

Building a Raspberry Pi Security Camer - Part 1

1. Download motionEyeOS (https://github.com/ccrisan/motioneyeos/releases). For example I have a Raspberry Pi 2 so I downloaded "motioneyeos-raspberrypi2-20161125.img.gz".

2. Next, figure out which volume your SD card is. Insert your SD or micro SD card. On macOS, run terminal and type:

>diskutil list
/dev/disk0
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *480.1 GB   disk0
   1:                        EFI EFI                     209.7 MB   disk0s1
   2:          Apple_CoreStorage                         479.2 GB   disk0s2
   3:                 Apple_Boot Recovery HD             650.0 MB   disk0s3
/dev/disk1
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:                  Apple_HFS Main                   *478.9 GB   disk1
                                 Logical Volume on disk0s2
                                 B465E1FC-701D-4C31-A2B9-F728FB903B40
                                 Encrypted
/dev/disk2
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *15.9 GB    disk2

   1:             Windows_FAT_32 NO NAME                 15.9 GB    disk2s1

3. If the card has already been partitioned and mounted then continue with this step. Run diskutil unmountDisk /dev[disk#]. For example: diskutil unmountDisk /dev/disk3 will unmount the SD card volume. Alternatively you can run Disk Utility and unmount the SD card volume.

4. Run:

>sudo dd if=motioneyeos-raspberrypi2-20161125.img of=/dev/disk2 bs=1048576

then wait a little while as the image is written to the SD card.

5. Put the SD card in the pi with a video camera installed and viola!

Next I'll post about some options for housings for the pi.

Monday, April 24, 2017

macOS Window of Application has gone off screen

Once in a while a window of an application goes off screen and it can't be moved or resized. I've seen various approaches to get the window back but by far the easiest is to change the resolution. Once you change the resolution all windows are moved to be back within the screen and you'll get the window back.

Tuesday, April 11, 2017

Super Awesome Debugging Technique with Comments

Here is a trick I learned many many years ago and it remains one of the best tools in my debugging toolbox for all programming languages. This example just happens to be in C++.


#include <iostream>


int main(int argc, const char * argv[]) {
    std::cout << "Hello\n";
    
//*
    std::cout << "Hello, World!\n";
    
/*/
    std::cout << "A different Hello!\n";
//*/
    return 0;

}

now remove the first slash in the front of the first comment and you get:


#include <iostream>


int main(int argc, const char * argv[]) {
    std::cout << "Hello\n";
    
/*
    std::cout << "Hello, World!\n";
    
/*/
    std::cout << "A different Hello!\n";
//*/
    return 0;

}


This is such a handy debugging technique.

Thursday, April 6, 2017

Programmatically Creating a Window on macOS

Programmatically creating windows without using a NIB file can be tricky on the Mac. Especially if you're developing in C or C++ instead of Objective-C. Here's one of the issue most common that may come up.

Assuming you got the window creation code right, you may be thinking everything is going to work, but you get this error:

Oct 30 17:34:39  myapp[48617] : kCGErrorInvalidConnection: CGSGetCurrentCursorLocation: Invalid connection
Oct 30 17:34:39 myapp[48617] : kCGErrorFailure: Set a breakpoint @ CGErrorBreakpoint() to catch errors as they are logged.



This means your NSApplication is not being initialized. In other words, the Objective-C side of your system needs to be properly initialized. Adding the following line may help:

[NSApplication sharedApplication];

Most likely you aren't trying to do this so it is never an issue, but for those few souls out there this might just save you some serious time.