diff --git a/dist/about/index.html b/dist/about/index.html new file mode 100644 index 0000000..1e8265a --- /dev/null +++ b/dist/about/index.html @@ -0,0 +1,5 @@ + About — dd0c.net

About

After a childhood spent tinkering on subjects such as Java programming and Linux, Brian's professional experience started with VoIP testing at 3Com in suburban Chicago. He then spent two years studying Computer Engineering at Purdue University before leaving to pursue freelance consulting in Los Angeles.

Following several years of freelancing, he developed his expertise in enterprise infrastructure and cloud computing by working for a variety of startups and large corporations. Later he completed a Bachelor's in I.T. while working at Citrix. Brian is currently working on Citrix's Cloud Engineering and Systems Architecture team in Santa Barbara, California.

\ No newline at end of file diff --git a/dist/favicon.ico b/dist/favicon.ico new file mode 100644 index 0000000..3016f98 Binary files /dev/null and b/dist/favicon.ico differ diff --git a/dist/images/grid.png b/dist/images/grid.png new file mode 100644 index 0000000..129d4a2 Binary files /dev/null and b/dist/images/grid.png differ diff --git a/dist/images/smalllogo.png b/dist/images/smalllogo.png new file mode 100644 index 0000000..bfd1796 Binary files /dev/null and b/dist/images/smalllogo.png differ diff --git a/dist/index.html b/dist/index.html index e795b82..6a7887d 100644 --- a/dist/index.html +++ b/dist/index.html @@ -1,4 +1,6 @@ - dd0c Tools
dd0c Tools

dd0c Tools

dd0c Tools — Personal productivity tools for Google Workspace.

\ No newline at end of file + dd0c.net — dd0c.net

dd0c.net

Infrastructure, cloud, and systems engineering by Brian Galura.

Posts

\ No newline at end of file diff --git a/dist/posts/cloudstack-devops/index.html b/dist/posts/cloudstack-devops/index.html new file mode 100644 index 0000000..5daeef7 --- /dev/null +++ b/dist/posts/cloudstack-devops/index.html @@ -0,0 +1,8 @@ + CloudStack Collab 2013: Lessons Learned at Citrix OSD — dd0c.net
← All posts

CloudStack Collab 2013: Lessons Learned at Citrix OSD

2013-06-23

Open@Citrix

+

Slides

+
\ No newline at end of file diff --git a/dist/posts/foreman-hooks-aws-vpc/index.html b/dist/posts/foreman-hooks-aws-vpc/index.html new file mode 100644 index 0000000..c9319d3 --- /dev/null +++ b/dist/posts/foreman-hooks-aws-vpc/index.html @@ -0,0 +1,25 @@ + AWS VPC Buildout With Foreman Hooks for RDNS Creation — dd0c.net
← All posts

AWS VPC Buildout With Foreman Hooks for RDNS Creation

2014-01-15

Originally posted on Digital Ducttape

+

Foreman is a tool I have used for a long time as an external node classifier for Puppet and its smart-proxy for integration with DNS. However when Foreman recently added support for building EC2 instances inside a VPC, I thought it was a great opportunity to use the same tool for a new buildout.

+

Shortly after starting I discovered that reverse DNS is unfortunately broken for EC2 VPC builds. Foreman does not map a relationship between VPC subnets and any DNS smart-proxy. Unswayed I took to #foreman and was guided to a potential solution.

+

Enter foreman_hooks. This plugin for foreman allows you to subscribe to create/update/destroy events and invoke any executable. Lucky for me this was a great workaround for the functionality lacking in the recent 1.3 release. Initially I wrote a script utilizing the smart-proxy API to create PTR records but it complained that the IP address was already assigned. Fair enough. Without further investigation I wrote instead a short shell script which does the same thing using nsupdate with tsigs and viola! Integrated forward and reverse DNS for EC2 VPC deployments. A few more lines of code added support for the destroy hook and now the feature is complete.

+

I named this script rdns.sh and placed it in /usr/share/foreman/config/hooks.d and created symlinks to it in both:

+

/usr/share/foreman/config/hooks/host/managed/destroy/
+/usr/share/foreman/config/hooks/host/managed/create/

+

source for rdns.sh

+ +

source for utils.sh
+source for hook_functions.sh

+

Of course, after implementing this I saw many uses for foreman_hooks including:

+ +

I will post updates on these implementations at another time.

\ No newline at end of file diff --git a/dist/privacy/index.html b/dist/privacy/index.html index a629e65..55ad712 100644 --- a/dist/privacy/index.html +++ b/dist/privacy/index.html @@ -1,4 +1,5 @@ - Privacy Policy — dd0c.net

Privacy Policy

Effective Date: March 22, 2026

This application ("App") is a personal-use tool operated by Brian Galura ("Operator"). It is not offered as a commercial service.

Data Collection

The App accesses Google Workspace data (Gmail, Calendar, Drive, Sheets, Photos) solely on behalf of the authenticated account holder. No data is collected from third parties.

Data Use

Data retrieved from Google APIs is used exclusively to provide the functionality requested by the account holder, such as reading emails, managing calendar events, organizing files, and managing photos. Data is processed in transit and is not sold, shared, or disclosed to any third party.

Data Storage

OAuth tokens are stored securely on the Operator's private infrastructure. Cached data (e.g., downloaded attachments) is stored temporarily and deleted after processing.

Data Retention

The App does not retain personal data beyond what is necessary to fulfill the immediate request. OAuth refresh tokens are retained until revoked by the user.

Third-Party Services

The App uses Google APIs subject to the Google API Services User Data Policy.

Your Rights

You may revoke the App's access at any time via Google Account Permissions.

Contact

For questions, contact: bgalura@gmail.com

\ No newline at end of file + Privacy Policy — dd0c.net

Privacy Policy

Effective Date: March 22, 2026

This application ("App") is a personal-use tool operated by Brian Galura ("Operator"). It is not offered as a commercial service.

Data Collection

The App accesses Google Workspace data (Gmail, Calendar, Drive, Sheets, Photos) solely on behalf of the authenticated account holder. No data is collected from third parties.

Data Use

Data retrieved from Google APIs is used exclusively to provide the functionality requested by the account holder, such as reading emails, managing calendar events, organizing files, and managing photos. Data is processed in transit and is not sold, shared, or disclosed to any third party.

Data Storage

OAuth tokens are stored securely on the Operator's private infrastructure. Cached data (e.g., downloaded attachments) is stored temporarily and deleted after processing.

Data Retention

The App does not retain personal data beyond what is necessary to fulfill the immediate request. OAuth refresh tokens are retained until revoked by the user.

Third-Party Services

The App uses Google APIs subject to the Google API Services User Data Policy.

Your Rights

You may revoke the App's access at any time via Google Account Permissions.

Contact

For questions, contact: contact@dd0c.net

\ No newline at end of file diff --git a/dist/services/index.html b/dist/services/index.html new file mode 100644 index 0000000..06373eb --- /dev/null +++ b/dist/services/index.html @@ -0,0 +1,6 @@ + Services — dd0c.net

Services

Hourly and flat-cost projects.

Contact: contact@dd0c.net

Successful projects include

Skills

\ No newline at end of file diff --git a/dist/terms/index.html b/dist/terms/index.html index 29ec4e2..cb18a5c 100644 --- a/dist/terms/index.html +++ b/dist/terms/index.html @@ -1,4 +1,5 @@ - Terms of Service — dd0c.net

Terms of Service

Effective Date: March 22, 2026

Acceptance

By using this application ("App"), you agree to these terms. The App is a personal-use tool and is not offered as a commercial service.

Description

The App provides automated access to Google Workspace services (Gmail, Calendar, Drive, Sheets, Photos) for the authenticated account holder's personal use.

Eligibility

Use of this App is limited to the account holder and authorized users explicitly granted access by the Operator.

Acceptable Use

The App is intended for lawful, personal use only. You agree not to use the App to violate any applicable laws or third-party rights.

Disclaimer

The App is provided "as is" without warranties of any kind. The Operator is not liable for any damages arising from the use of the App.

Modifications

These terms may be updated at any time. Continued use constitutes acceptance of the updated terms.

Contact

For questions, contact: bgalura@gmail.com

\ No newline at end of file + Terms of Service — dd0c.net

Terms of Service

Effective Date: March 22, 2026

Acceptance

By using this application ("App"), you agree to these terms. The App is a personal-use tool and is not offered as a commercial service.

Description

The App provides automated access to Google Workspace services (Gmail, Calendar, Drive, Sheets, Photos) for the authenticated account holder's personal use.

Eligibility

Use of this App is limited to the account holder and authorized users explicitly granted access by the Operator.

Acceptable Use

The App is intended for lawful, personal use only. You agree not to use the App to violate any applicable laws or third-party rights.

Disclaimer

The App is provided "as is" without warranties of any kind. The Operator is not liable for any damages arising from the use of the App.

Modifications

These terms may be updated at any time. Continued use constitutes acceptance of the updated terms.

Contact

For questions, contact: contact@dd0c.net

\ No newline at end of file diff --git a/node_modules/.cache/wrangler/pages.json b/node_modules/.cache/wrangler/pages.json new file mode 100644 index 0000000..5e1d51d --- /dev/null +++ b/node_modules/.cache/wrangler/pages.json @@ -0,0 +1,4 @@ +{ + "account_id": "3fac2810084531aeee0ac157b792ef98", + "project_name": "dd0c-site" +} \ No newline at end of file diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000..3016f98 Binary files /dev/null and b/public/favicon.ico differ diff --git a/public/images/grid.png b/public/images/grid.png new file mode 100644 index 0000000..129d4a2 Binary files /dev/null and b/public/images/grid.png differ diff --git a/public/images/smalllogo.png b/public/images/smalllogo.png new file mode 100644 index 0000000..bfd1796 Binary files /dev/null and b/public/images/smalllogo.png differ diff --git a/src/layouts/Base.astro b/src/layouts/Base.astro index fcf9eec..d13302a 100644 --- a/src/layouts/Base.astro +++ b/src/layouts/Base.astro @@ -6,23 +6,92 @@ const { title } = Astro.props; - {title} + {title ? `${title} — dd0c.net` : 'dd0c.net'} + - + +
+ +
diff --git a/src/layouts/PostLayout.astro b/src/layouts/PostLayout.astro new file mode 100644 index 0000000..5daf29d --- /dev/null +++ b/src/layouts/PostLayout.astro @@ -0,0 +1,19 @@ +--- +import Base from './Base.astro'; +const { frontmatter } = Astro.props; +--- + + + ← All posts +

{frontmatter.title}

+

{frontmatter.date}

+
+ +
+ diff --git a/src/pages/about.astro b/src/pages/about.astro new file mode 100644 index 0000000..fb5f2cc --- /dev/null +++ b/src/pages/about.astro @@ -0,0 +1,8 @@ +--- +import Base from '../layouts/Base.astro'; +--- + +

About

+

After a childhood spent tinkering on subjects such as Java programming and Linux, Brian's professional experience started with VoIP testing at 3Com in suburban Chicago. He then spent two years studying Computer Engineering at Purdue University before leaving to pursue freelance consulting in Los Angeles.

+

Following several years of freelancing, he developed his expertise in enterprise infrastructure and cloud computing by working for a variety of startups and large corporations. Later he completed a Bachelor's in I.T. while working at Citrix. Brian is currently working on Citrix's Cloud Engineering and Systems Architecture team in Santa Barbara, California.

+ diff --git a/src/pages/index.astro b/src/pages/index.astro index 264602a..fffdde8 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -1,10 +1,29 @@ --- import Base from '../layouts/Base.astro'; + +const posts = [ + { title: 'AWS VPC Buildout With Foreman Hooks for RDNS Creation', date: '2014-01-15', slug: 'foreman-hooks-aws-vpc' }, + { title: 'CloudStack Collab 2013: Lessons Learned at Citrix OSD', date: '2013-06-23', slug: 'cloudstack-devops' }, +]; --- - -
- dd0c Tools -

dd0c Tools

-

dd0c Tools — Personal productivity tools for Google Workspace.

-
+ + +

dd0c.net

+

Infrastructure, cloud, and systems engineering by Brian Galura.

+

Posts

+ diff --git a/src/pages/posts/cloudstack-devops.md b/src/pages/posts/cloudstack-devops.md new file mode 100644 index 0000000..62f2434 --- /dev/null +++ b/src/pages/posts/cloudstack-devops.md @@ -0,0 +1,11 @@ +--- +layout: ../../layouts/PostLayout.astro +title: "CloudStack Collab 2013: Lessons Learned at Citrix OSD" +date: "2013-06-23" +--- + +[Open@Citrix](http://open.citrix.com/cloud-computing-vids/video/six-months-into-cloudstack-lessons-learned-at-citrix-osd-by-brian-galura.html) + +[Slides](http://prezi.com/2sgvlsz2bqoz/?utm_campaign=share&utm_medium=copy) + + diff --git a/src/pages/posts/foreman-hooks-aws-vpc.md b/src/pages/posts/foreman-hooks-aws-vpc.md new file mode 100644 index 0000000..9f801a7 --- /dev/null +++ b/src/pages/posts/foreman-hooks-aws-vpc.md @@ -0,0 +1,34 @@ +--- +layout: ../../layouts/PostLayout.astro +title: "AWS VPC Buildout With Foreman Hooks for RDNS Creation" +date: "2014-01-15" +--- + +Originally posted on [Digital Ducttape](http://digital-ducttape.com/2013/10/23/aws-vpc-buildout-with-foreman_hooks-for-rdns-creation/) + +[Foreman](http://theforeman.org/) is a tool I have used for a long time as an external node classifier for Puppet and its smart-proxy for integration with DNS. However when Foreman recently [added support](http://projects.theforeman.org/issues/1871) for building EC2 instances inside a VPC, I thought it was a great opportunity to use the same tool for a new buildout. + +Shortly after starting I discovered that reverse DNS is [unfortunately broken](http://projects.theforeman.org/issues/3166) for EC2 VPC builds. Foreman does not map a relationship between VPC subnets and any DNS smart-proxy. Unswayed I took to #foreman and was guided to a potential solution. + +Enter [foreman_hooks](https://github.com/theforeman/foreman_hooks). This plugin for foreman allows you to subscribe to create/update/destroy events and invoke any executable. Lucky for me this was a great workaround for the functionality lacking in the recent 1.3 release. Initially I wrote a script utilizing the smart-proxy API to create PTR records but it complained that the IP address was already assigned. Fair enough. Without further investigation I wrote instead a short shell script which does the same thing using nsupdate with tsigs and viola! Integrated forward and reverse DNS for EC2 VPC deployments. A few more lines of code added support for the destroy hook and now the feature is complete. + +I named this script `rdns.sh` and placed it in `/usr/share/foreman/config/hooks.d` and created symlinks to it in both: + +`/usr/share/foreman/config/hooks/host/managed/destroy/` +`/usr/share/foreman/config/hooks/host/managed/create/` + +[source for rdns.sh](https://gist.github.com/ddoc/8447483) + + +[source for utils.sh](https://gist.github.com/ddoc/8446722) +[source for hook_functions.sh](https://github.com/theforeman/foreman_hooks/blob/master/examples/hook_functions.sh) + +Of course, after implementing this I saw many uses for foreman_hooks including: + +- resizing an EC2 root volume at build time +- attaching additional volumes +- EIP associations and DNS +- different hooks for different domains +- adding and removing hosts to an external monitoring system + +I will post updates on these implementations at another time. diff --git a/src/pages/privacy.astro b/src/pages/privacy.astro index 0ee209e..10c1ce8 100644 --- a/src/pages/privacy.astro +++ b/src/pages/privacy.astro @@ -1,7 +1,7 @@ --- import Base from '../layouts/Base.astro'; --- - +

Privacy Policy

Effective Date: March 22, 2026

This application ("App") is a personal-use tool operated by Brian Galura ("Operator"). It is not offered as a commercial service.

@@ -25,5 +25,5 @@ import Base from '../layouts/Base.astro';

You may revoke the App's access at any time via Google Account Permissions.

Contact

-

For questions, contact: bgalura@gmail.com

+

For questions, contact: contact@dd0c.net

diff --git a/src/pages/services.astro b/src/pages/services.astro new file mode 100644 index 0000000..89c8d2d --- /dev/null +++ b/src/pages/services.astro @@ -0,0 +1,39 @@ +--- +import Base from '../layouts/Base.astro'; +--- + + +

Services

+

Hourly and flat-cost projects.

+

Contact: contact@dd0c.net

+ +

Successful projects include

+ + +

Skills

+ + diff --git a/src/pages/terms.astro b/src/pages/terms.astro index 5fd4e8b..799449c 100644 --- a/src/pages/terms.astro +++ b/src/pages/terms.astro @@ -1,7 +1,7 @@ --- import Base from '../layouts/Base.astro'; --- - +

Terms of Service

Effective Date: March 22, 2026

@@ -24,5 +24,5 @@ import Base from '../layouts/Base.astro';

These terms may be updated at any time. Continued use constitutes acceptance of the updated terms.

Contact

-

For questions, contact: bgalura@gmail.com

+

For questions, contact: contact@dd0c.net