How I like to code

Building OpenCV as a macOS Universal Intel Binary

OpenCV

So, for my project, I needed an Intel Universal build of the OpenCV library. The copy of the OpenCV source I have on my machine is version 3.0.0 and it has worked well for me, so I'll start with that. My build machine is running macOS 10.12 and has Xcode 8 installed on it. OpenCV uses cmake for its build system, so you have to download and install the CMake app for macOS. I got my copy from https://cmake.org I referred to the article listed on Wired Watershed to help me get started. I made the following changes to the project once CMake.app was done processing the source folder.
  • Set CMAKE_OSX_ARCHITECTURES value to $(ARCHS_STANDARD_32_64_BIT)
  • Set CMAKE_OSX_DEPLOYMENT to 10.8, since my project needed it.
  • Unchecked 1394
However, when the 32-bit portion of the project went to build, it reported the following error: cap_qtkit.mm:46:9: fatal error: 'QTKit/QTKit.h' file not found. Apparently, this is a known issue. So, I thought I could solve this problem by going to version 3.2.0... off to GitHub I cloned the master branch to my machine and ran CMake again on the new source, but when I build the project with Xcode 8, I saw other problems. So..
  • I unchecked WITH_LAPACK
  • I had to go into the Xcode project and set the C version to c11, and the C++ version to c++14.
Ok, things are getting better, but... the code doesn't compile for 32-bit. Dangit! This can be fixed by ... fixing the code? Off to GitHub again, where I forked the OpenCV project and fixed the Obj-C++ code so that it will build for 32-bit Intel. With that done, I create a pull request. If you would like your own copy of the code I modified, you can clone the forked OpenCV repo.

Creating a remote from an already existing depo



Today, I created a remote depo, so that I can use the DVCS functionality in P4 with one of my projects. First, I connected to my perforce server and typed: $p4 remotes To see all of the remotes that were on the server. Before doing this command you have to type: $p4 login Which thankfully, my username on the linux server is the same as my username in the Perforce server so I didn't have to type that again. Once I was logged in and saw that there was no remote set up for the project I wanted to use with DVCS, I typed: $p4 remote PROJECT_CODE_NAME This brought up NANO (I know some of you out there are rolling your eyes) and I modified the //local/... //remote/... paths to my liking. Remember, the left side represents the local depo representation on your computer and the right side of that mapping is the remote depo representation that is on your Perforce server. Now, in another terminal, I typed: $cd PATH_WHERE_YOU_HAVE_YOUR_DEVELOPMENT_WORK $mkdir PROJECT_CODE_NAME $cd PROJECT_CODE_NAME $p4 -u jaimerios clone -p 192.168.1.10:1666 -r PROJECT_CODE_NAME The last command then takes the files specified in the mapping and clones it to your local filesystem. You can check that the origin server is set up by typing: $p4 remote -o origin Now, in my project, I had two read-only depos in my Perforce server that was for the Boost headers and the Google gtest framework libs. For those normally import+ folders, I created a symbolic link to those folders that were already on my local filesystem: $cd PROJECT_CODE_NAME/libs $ln -s /Users/jaimerios/Development/Perforce/READONLY/libs/Boost ./Boost $ln -s /Users/jaimerios/Development/Perforce/READONLY/libs/Google ./Google And so far, everything seems to work well ... except there are a few files I want p4 status to ignore, so: $cd PROJECT_CODE_NAME $nano .p4ignore I added some folders and files to ignore and life is good. So, onto happy coding 🙂

How to install Perforce DVCS

Introduction For 9 years now, I’ve used Perforce; before that, it was MKD, Subversion, VisualSourceSafe, CVS and a few others. In the past year, I used Git. One cool thing that Git has that Perforce didn't have was being able to save your changes while not being connected to a central server. However, Perforce recently added native DVCS to their source control tools so, checkouts and submits are now possible while offline. Here are the steps you need to take if you want to use Perforce DVCS on your computer. Note, I’m using macOS, so my instructions are for that platform only. Installation steps Step 1: download Helix server at https://www.perforce.com/downloads/helix You will need both p4d and p4 command line utilities, so head over to https://www.perforce.com/downloads/helix and download the “Helix Server” for your machine. Step 2: Double-click the tar file to extract it I think this step speaks for itself; on my computer I was able to double-click the tar file and everything appeared in a new folder. Step 3: Make a folder for the binaries to live in I created a bin folder in ~/Perforce/. I happen to have a dedicated Perforce folder in my home directory that I use for a lot of projects and the bin directory seemed to be a logical place to store the files. From the command line you can type the following to make the folder: mkdir -p ~/Perforce/bin Step 4: Copy the binaries to the bin folder Copy the p4d and p4 command line utilities to the ~/Perforce/bin folder (or whatever folder you just created) Step 5: Add the path to the PATH environment variable I edited my ~/.bash_login file using emacs to add the following: export PATH=~/Perforce/bin:$PATH Step 6: Load the Perforce bin path Relaunch Terminal.app or open a new Terminal Window or source your .bash_login via source ~/.bash_login Step 7: Init your offline project Here is how I got up and running: cd WATEVA/PROJECT/FOLDER/ p4 init -C1 -xi The extra settings after init tell p4 what case-sensitivity is should use and whether or not to enable Unicode support. If I didn't add those, p4 would try to find a server to copy those settings from and that won't work for me. Step 8: Enjoy From here, you use the Terminal.app and p4 to perform all of your Perforce commands and enjoy the goodness that is Perforce... like the super-large-file-support-without-choking feature 😉

Haversine formula now on GitHub

The C implementation of the Haversine formula I ported from Javascript is now hosted on GitHub. The project from this website is now up on GitHub for anyone to view. I also plan to do some updates to the code since C++14 has been out and has a lot of good features to add.

Using P4Plugin with Jenkins to publish assets

perforce

I was previously using the Perforce Plugin in Jenkins to handle my tasks with Perforce, including adding files that needed to be released from a build, but in the past year, I've experienced some weirdness that lead me to evaluate the P4Plugin by Perforce. All of the weirdness that I saw in the prior plugin went away, but I couldn't figure out how to publish only certain files from a build. There wasn't anything in the documentation instructing you on how to do this feature and when I would use the Publish Assets feature, all of the extra files created in a build would be potentially added to my project, which was not the intent of the build. It wasn't until I found a bug report that said the following:
The shelve publish step should use a different workspace from the populate step. The view for this workspace should be very narrow (a Virtual stream, if using streams). Typically the view should be one or two files, limiting the files it will run the reconcile over.

By the way, I still haven't figured out how to get Virtual streams to work in the P4Plugin as the plugin won't recognize them.
So, to be able and isolate what you want published back to your Perforce server, you have to create another workspace to isolate the files, or directories, in question. Hopefully, Perforce will include this text in their plugin documentation sometime soon.

When you have Jira and Confluence running on the same server …

You have to change the Context path for each app to be in a different directory. That is one option, which is listed on atlassian.com If you don't set this option, you may be logged out of one Atlassian product when you go to log into the other.

Xcode plugin for Perforce

perforce-small-logo I use Perforce as my version control system and Xcode as my IDE. Unfortunately, Apple removed Perforce support from Xcode a whiles back for reasons unknown. So, to work around the problem, I started to use of DTerm... but I wanted more. I created AppleScripts for both Xcode4 and Xcode5 which was better, but... I wanted more. So, I took the plung and wrote a plugin for Xcode using Swift. The plugin is hosted on Perforce's Swarm website, which you can download and build in Xcode. Once you build the project, the plugin is automatically installed for you. Pay attention to the README.md file: you will need set up files that contain the settings for your workspace, or workspaces, and those settings file are used by the plugin to do it's work. A big thanks to Delisa Mason for writing a Xcode plugin template. This template was a huge help in creating the plugin and the template available in the Alcatraz package manager as well as in GitHub: https://github.com/kattrali/Xcode-Plugin-Template If you don't know what Alcatraz is, you should check out at http://alcatraz.io

Xcode dylib constructor destructor

I meant to post this link a while ago, but here it is anyway: TP40002013-SW17 So, in a dylib, you can have code execute when the dylib is loaded and execute code when the dylib is being unloaded:
__attribute__((constructor))
static void initializer1() {
    printf("[%s] [%s]\n", __FILE__, __FUNCTION__);
}
 
__attribute__((constructor))
static void initializer2() {
    printf("[%s] [%s]\n", __FILE__, __FUNCTION__);
} 
__attribute__((destructor))
static void finalizer1() {
    printf("[%s] [%s]\n", __FILE__, __FUNCTION__);
}
 
__attribute__((destructor))
static void finalizer2() {
    printf("[%s] [%s]\n", __FILE__, __FUNCTION__);
}

openframeworks plugin for Xcode

Sweet! Now you can add open frameworks add ons to your project from a Xcode plugin: https://github.com/admsyn/OFPlugin Of course, if you have Alcatraz, you won't need to go to the github site to download the plugin, just get it from "Package Manager" within Xcode

You can run Swift code from the command line?

WAT? Now this is something else! practicalswift.com