AWS Lambda is I think one of the best additions to AWS, however it does have some issues becuase the architecture has changed over the years and one such problem the default VPC that it runs in. Default configuration runs great, but if you want better security, then not so much. But I digress. One of the most compelling features of Lambda is that you don't have to manager the VM or Docker Container. However because of that you might want to break up the responsibility between multiple Lambda functions, and in this case one Lambda will most certainly want to call another Lambda. So here's how you do that:
const aws = require('aws-sdk');
const lambda = new aws.Lambda({region: 'us-west-1'});
lambda.invoke({
FunctionName: 'LambdaFunctionName',
Payload: JSON.stringify(event, null, 2)
},
function(error, data) {
if (error) {
context.done('error', error);
}
if (data.Payload){
context.succeed(data.Payload)
}
});
Note: I really appreciate Lambda. But to be honest they are difficult to use. There is a time and a place to use them and it should be in every AWS developer's bag of tricks. The real trick I alluded to above is the VPC, but that's for a proper DevOps person to discuss the nuances of that. Also know that while in small uses Lambda is cost effective there is a cross over point where Lambda becomes more expensive than EC2 or Elastic Container Services (Docker).
Tuesday, June 26, 2018
Call an AWS Lambda Function from another Lambda Function
Posted by
Chris Bensen
at
7:00 AM
1 comments
Thursday, June 14, 2018
Docker ENV vs ARG
There are two types of variables in a Dockerfile, ENVs and ARGs. YOu define them in the Dockerfile like this:
ARG some_argument
This requires that you run:
$docker build --build-arg some_argument=something
Then there's ones with a default value.
ARG some_argument="default value"
You don't have to specify it during the docker build, but you can if you want.
ENV some_value=something
ENV some_other_value=${some_argument}
You can override these when you do docker run:
$docker run -e "some_value=others_stuff" ...
Posted by
Chris Bensen
at
7:00 AM
0
comments
Thursday, March 22, 2018
Sync a Shared Google Calendar with Calendar in iOS or macOS
https://www.google.com/calendar/syncselect
You must go directly to this link as there doesn't appear to be any way of getting there otherwise, and you must check or uncheck the calendars to share and then save the settings. Good luck!
Posted by
Chris Bensen
at
7:00 AM
2
comments
Monday, January 8, 2018
vlog 03 - Building a Death Star Ornament
Here is a Death Star Christmas ornament build with STl files provided on thingiverse here. A little bit of 3D printing, remixing an existing item on thingiverse and some electronics. Enjoy!
vlog 02
Posted by
Chris Bensen
at
7:00 AM
1 comments
Thursday, September 7, 2017
macOS How to create an ISO from a CD or DVD
Put in your CD or DVD, Open Terminal, type:
>ls /Volumes
Find the volume in the list, then type where /path/to/volume is the CD or DVD you want:
>hdiutil makehybrid -iso -joliet -o Image.iso /path/to/volume
Posted by
Chris Bensen
at
7:00 AM
1 comments
Thursday, August 24, 2017
Java Packager and Custom Resources
The Java Packager allows for resources within the app bundle to be replaced by your own custom resources. For example, on macOS the default Info.plist may not work for you. Here is a JDK 9 example that demonstrates replacing the default Info.plist. It's worth noting there is difference between JDK 8 and JDK 9. JDK 8 uses the classpath to search for the resources and JDK 9 requires a new argument. The argument documented here. The documentation about this feature is here:
https://docs.oracle.com/javase/9/deploy/self-contained-application-packaging.htm#JSDPG593
However, note that resource handling is different in the modular world (as I mentioned above about the differences between JDK 8 and JDK 9), and the docs weren't updated (at the time of writing this post, and we didn't catch the bug until recently, sorry). It is no longer possible to load resources via the classpath with the Java Packager. The correct way to do this is with the following ant task so specify the custom resource directory:
<fx:bundleArgument arg="dropinResourcesRoot" value=directory/>
Or if you are using the CLI use the following argument:
-BdropinResourcesRoot=directory
If you add this bundler argument the example in the docs will function the same; The current directory will be where custom resources such as the Info.plist searched for.
Here is the example:
HelloWorld.java
build.xml:
<project name="Test" default="package" xmlns:fx="javacom.sun.javafx.tools.ant">
<taskdef resource="com/sun/javafx/tools/ant/antlib.xml"
uri="javacom.sun.javafx.tools.ant"
classpath="${java.home}/lib/ant-javafx.jar"/>
<property name="src.dir" value="src"/>
<property name="build.dir" value="build"/>
<property name="classes.dir" value="${build.dir}/hello.world"/>
<property name="bundles.dir" value="output"/>
<target name="clean">
<delete dir="${build.dir}"/>
<delete dir="${bundles.dir}"/>
</target>
<target name="compile">
<mkdir dir="${build.dir}"/>
<mkdir dir="${classes.dir}"/>
<javac includeantruntime="false"
srcdir="${src.dir}"
destdir="${classes.dir}"/>
<copy todir="${classes.dir}">
<fileset dir="${src.dir}">
<exclude name="**/*.java"/>
</fileset>
</copy>
</target>
<target name="jar" depends="compile">
<mkdir dir="${build.dir}/jars"/>
<jar destfile="${build.dir}/jars/hello.world.jar" basedir="${build.dir}/hello.world">
<manifest>
<attribute name="Main-Class" value="HelloWorld"/>
</manifest>
</jar>
</target>
<mkdir dir="${bundles.dir}"/>
<target name="package" depends="jar">
<fx:deploy outdir="${bundles.dir}"
outfile="Test"
nativeBundles="image"
verbose="true"
versionCheck="false">
<fx:application id="Test"
name="Test"
version="1.0"
mainClass="HelloWorld">
</fx:application>
<fx:runtime strip-native-commands="false"/>
<resources>
<fileset dir="${build.dir}/jars" includes="**/*"/>
</resources>
<fx:info title="Test"
description="Java Packager Demo"
category="Test"
copyright="(c) 2017"
license="3 Clause BSD">
</fx:info>
<fx:bundleArgument arg="mainJar" value="hello.world.jar"/>
<fx:bundleArgument arg="classpath" value="hello.world.jar"/>
<fx:bundleArgument arg="win.exe.systemWide" value="true"/>
<fx:bundleArgument arg="win.menuGroup" value="Games"/>
<fx:bundleArgument arg="mac.dmg.simple" value="true"/>
<fx:bundleArgument arg="signBundle" value="false"/>
<fx:bundleArgument arg="mac.CFBundleName" value="Test"/>
<fx:bundleArgument arg="dropinResourcesRoot" value="."/>
</fx:deploy>
</target>
</project>
Now, I'll be honest, I don't like this method of copying custom files into an app bundle, and we have some ideas to simplify the Java Packager and make custom resource handling a lot easier in the future and not so error prone.
Posted by
Chris Bensen
at
7:00 AM
0
comments
Labels: Java, javapackager, packager
Wednesday, August 23, 2017
JavaOne Promotion
If you want to go to JavaOne you can go for a grand ($999 to be exact). Use the code DJFS2017 at registration. But wait there's more. It expires August 28th.
Posted by
Chris Bensen
at
2:00 PM
0
comments
Cura on macOS Problems
I've run into this issue a few times so I figured others have too.
Once in a while Cura's main window doesn't show up. Here's what I think fixes the problem. I say I think because I don't entirely know because I've tried so many things.
1. Reboot the computer
2. Rename the file:
/Users/cbensen/Library/Application Support/Cura
Posted by
Chris Bensen
at
7:00 AM
0
comments
Labels: 3D Printing
Monday, August 21, 2017
vlog02 - Pringles eclipse viewer
This morning I made an eclipse viewer. If you can't make one, just go out and look under a tree. Where there should be sun spots you will see eclipse spots, which are crescent shaped unless you happen to be where there's a total eclipse.
vlog 02
Posted by
Chris Bensen
at
7:00 AM
0
comments
Labels: vlog
Sunday, August 20, 2017
vlog01 - So I'm starting a vlog
This has been a long time coming, and it is no coincidence that this is my 500th blog post, but after multiple family emergencies and about 6 months, it's finally here. Introducing my vlog:
P.S. I might be copying existing vloggers styles that I like until I get a style of my own.
Posted by
Chris Bensen
at
7:00 AM
0
comments
Labels: vlog
Tuesday, June 13, 2017
How to Find The Entitlements a macOS App
Sandboxed apps have their entitlements embedded into the signing data. To see what any app's entitlements are, type the following in Terminal:
codesign -d --entitlements - /Applications/Some.app/
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.network.client</key>
<true/>
</dict>
</plist>
Posted by
Chris Bensen
at
7:00 AM
0
comments
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]
Posted by
Chris Bensen
at
7:00 AM
0
comments