Permalink
Browse files

hide blog and publications, add new role

  • Loading branch information...
eddiewebb committed Dec 22, 2018
1 parent 9e417ec commit 15a22e64b023e15e55e24e010f0eed1dd081a12e
Showing with 8,666 additions and 12 deletions.
  1. +3 −4 src/config.toml
  2. +4 −6 src/content/_index.md
  3. +8 −0 src/content/blog/_index.md
  4. +135 −0 src/content/blog/add-rss-feed-cakephp-models.md
  5. +19 −0 src/content/blog/appengine-jpa-spring-maven.md
  6. +34 −0 src/content/blog/assign-custom-object-identities-jpa.md
  7. +80 −0 src/content/blog/automatically-choose-database-connections-cakephp.md
  8. +77 −0 src/content/blog/automatically-subscribe-users-dreamhost-announce-lists.md
  9. +197 −0 src/content/blog/backup-subdirectories-bash-array-loop.md
  10. +95 −0 src/content/blog/bluegreen-cloud-foundry-deployments-in-circle-ci.md
  11. +8 −0 src/content/blog/books-recommend.md
  12. +10 −0 src/content/blog/carbon-neutral-hosting.md
  13. +114 −0 src/content/blog/cell-phone-favorites-aka-free-calls.md
  14. +48 −0 src/content/blog/clickheat-cakephp.md
  15. +77 −0 src/content/blog/clickheat-plugin-phpmyvisites.md
  16. +246 −0 src/content/blog/complex-data-model-jpa-inheritance-stateful-join-tables.md
  17. +116 −0 src/content/blog/complex-validation-cakephp-12.md
  18. +264 −0 src/content/blog/create-nested-trees-expand-collapse-cakephp.md
  19. +87 −0 src/content/blog/create-subdomains-apache-easy.md
  20. +94 −0 src/content/blog/custom-jsf-input-validation-styling-component.md
  21. +39 −0 src/content/blog/custom-ringtones-tmobiles-g1-free.md
  22. +7 −0 src/content/blog/cygwin-user-group-issues-vista.md
  23. +8 −0 src/content/blog/details-htc-evo-root.md
  24. +16 −0 src/content/blog/did-google-really-say-that.md
  25. +84 −0 src/content/blog/disable-page-show-translucent-progress-bar.md
  26. +29 −0 src/content/blog/drop-tables-mysql-database-deletion.md
  27. +108 −0 ...content/blog/escaping-ibm-rational-products-simple-java-ee-web-application-development-eclipse.md
  28. +364 −0 src/content/blog/facebook-login-modx-sites.md
  29. +28 −0 src/content/blog/fedore-13-beta-impressions.md
  30. +53 −0 src/content/blog/forcing-visits-ssl.md
  31. +12 −0 src/content/blog/free-google-phone-arrived.md
  32. +79 −0 src/content/blog/generating-dynamic-sitemaps-cakephp.md
  33. +202 −0 src/content/blog/global-site-settings-component-cakephp.md
  34. +8 −0 src/content/blog/google-app-engine.md
  35. +22 −0 src/content/blog/google-nexus-one-forty-nine-dollars-49.md
  36. +42 −0 src/content/blog/google-offer-phone-direct-consumers-2010.md
  37. +14 −0 src/content/blog/google-recaptcha-validate-street-view-addresses.md
  38. +7 −0 src/content/blog/google-recapthca.md
  39. +73 −0 src/content/blog/google-tv-logitech-revue-thoughts.md
  40. +8 −0 src/content/blog/google-voice-gmail-play-nice-deliver-telephone-pc-calls.md
  41. +8 −0 src/content/blog/graphing-in-php.md
  42. +19 −0 src/content/blog/great-web-applications-experiments-google-chrome.md
  43. +103 −0 src/content/blog/heavy-duty-password-validation-cakephp.md
  44. +27 −0 src/content/blog/inbox-clean-email-aliases.md
  45. +36 −0 src/content/blog/ip-addresses-remote-nodes.md
  46. +212 −0 src/content/blog/keys-putty-cygwin-passwordless-login-ssh-scp.md
  47. +123 −0 src/content/blog/link-element-ids-jquery-tabs-read-stateless.md
  48. +10 −0 src/content/blog/linux-turns-20.md
  49. +223 −0 src/content/blog/log-recycler-script.md
  50. +317 −0 src/content/blog/logical-bot-check-cakephp-captcha.md
  51. +8 −0 src/content/blog/lovin-cake-with-each-new-bake.md
  52. +21 −0 src/content/blog/manual-update-nexus.md
  53. +40 −0 src/content/blog/migrate-apache-nginx-rewrites-intact.md
  54. +54 −0 src/content/blog/modx-revolution-bring-change.md
  55. +26 −0 src/content/blog/multiple-sites-piwik.md
  56. +8 −0 src/content/blog/multiple-ssl-domains-apache-unique-ips.md
  57. +25 −0 src/content/blog/near-and-dear.md
  58. +39 −0 src/content/blog/nested-trees-cakephp.md
  59. +46 −0 src/content/blog/netflix-on-android-g1-droid.md
  60. +96 −0 src/content/blog/netflix-queue-manager-android-phones.md
  61. +32 −0 src/content/blog/open-source-project-piwik-puts-google-analytics-notice.md
  62. +371 −0 src/content/blog/passing-parameters-hcommandlink-jsf.md
  63. +107 −0 src/content/blog/performance-tip-boost-sax-life.md
  64. +43 −0 src/content/blog/perks-pains-google-voice.md
  65. +116 −0 src/content/blog/piwik-analyze-visits-cakephp-site.md
  66. +119 −0 src/content/blog/plugins-full-featured-wordpress-content-manager.md
  67. +32 −0 src/content/blog/prevent-image-sites.md
  68. +44 −0 src/content/blog/queueman-netflix-manager-android-major-updates.md
  69. +8 −0 src/content/blog/rapid-prototyping-as-a-job.md
  70. +98 −0 src/content/blog/redirecting-users-sitedown-message.md
  71. +60 −0 src/content/blog/rename-cakephp-template-files.md
  72. +274 −0 src/content/blog/reset-lost-passwords-cakephp.md
  73. +17 −0 src/content/blog/running-android-sdk-64bit-fedora-11.md
  74. +496 −0 src/content/blog/running-pligg-nginx-rewrite-rules.md
  75. +61 −0 src/content/blog/running-rails-dreamhost.md
  76. +121 −0 src/content/blog/scope-issue-bash-loops.md
  77. +96 −0 src/content/blog/script-backup-edit-files-version-history.md
  78. +31 −0 src/content/blog/scrum-standups-status-readout.md
  79. +7 −0 src/content/blog/search-results.md
  80. +166 −0 src/content/blog/serving-files-cakephp.md
  81. +143 −0 src/content/blog/simple-email-component-cakephp.md
  82. +174 −0 src/content/blog/simple-feedburner-ticker-php.md
  83. +186 −0 src/content/blog/simple-shell-script-backup-multiple-mysql-databases.md
  84. +77 −0 src/content/blog/small-scripts-and-achievements.md
  85. +318 −0 src/content/blog/started-acl-cakephp.md
  86. +16 −0 src/content/blog/support-dzone.md
  87. +128 −0 src/content/blog/sysdate-determine-start-previous-month-year-oracle-sql.md
  88. +8 −0 src/content/blog/tempting.md
  89. +7 −0 src/content/blog/thank-you.md
  90. +24 −0 src/content/blog/the-greenlife-list-goes-alpha.md
  91. +16 −0 src/content/blog/tmobile-g1-adp-android-developer-phone.md
  92. +93 −0 src/content/blog/transferring-files-between-hosting-providers.md
  93. +163 −0 src/content/blog/using-cakephp-pagination-with-habtm-tables.md
  94. +58 −0 src/content/blog/using-pagination-and-habtm-relationships-in-cakephp-11.md
  95. +75 −0 src/content/blog/validating-complex-passwords.md
  96. +138 −0 src/content/blog/validating-optional-fields-cakephp-dreaded-scenario.md
  97. +43 −0 src/content/blog/verify-file-checksum-windows-context-menu.md
  98. +32 −0 src/content/blog/web-hosting-deal-celebration-julygustember-495-free-domain.md
  99. +7 −0 src/content/blog/what-is-mis.md
  100. +9 −0 src/content/blog/where-to-find-me.md
  101. +8 −0 src/content/blog/wireless-tethering-android-phones.md
  102. +238 −0 src/content/blog/writing-custom-widget-google-calendars.md
  103. +38 −0 src/content/blog/xml-json.md
  104. +8 −2 src/data/experience.json
@@ -16,16 +16,16 @@ enableGitInfo = true
contactNote = "DevTools Engineer and DevOps Culture advocate"
address = "Plattsburgh, NY"
email = "OlliTech@gmail.com"
description = "Eddie has over a decade of experience enabling agile and CI/CD. Previously the Director of Enterprise DevOps influencing the culture and technology of a Fortune 100 company, Eddie now helps CircleCI customers adopt the best practices on their DevOps journey."
description = "Eddie has over a decade of experience enabling agile, CI/CD and DevOps culture in the enterprise. Previously the Director of Enterprise DevOps Platforms influencing culture and technology at a Fortune 100 company, Eddie now helps CircleCI customers of all sizes adopt the best technologies and practices on their DevOps journey."
favicon = "images/favicon.ico"
# what sections
showSkills = true
showProjects = true
showOpenSource = true
showPublications = true
showPublications = false
showExperience = true
showEducation = true
showBlog = true
showBlog = false
showQr = false

# do you want to show git hash on page footer and link to repo? Add commit prefix here.
@@ -36,7 +36,6 @@ enableGitInfo = true
name = "LinkedIn"
link = "https://www.linkedin.com/in/edwardwebb/"


[[params.handles]]
name = "Twitter"
link = "https://twitter.com/edwardawebb/"
@@ -1,15 +1,13 @@
---
title: "Home"
date: 2018-02-10T18:56:13-05:00
date: 2018-12-10T18:56:13-05:00
sitemap:
priority : 1.0
---
Eddie has over a decade of experience enabling agile and CI/CD practices for teams of every sort.
Director of Solutions @ [CircleCI](https://circleci.com)

Previously the Director of Enterprise DevOps influencing the culture and technology of a Fortune 100 company, Eddie now helps CircleCI customers adopt the best practices on their DevOps journey.
Eddie has over a decade of experience enabling agile, CI/CD and DevOps culture in the enterprise. Previously the Director of Enterprise DevOps Platforms at a Fortune 100 company, Eddie now leverages his experience influencing culture and technology to help CircleCI customers of all sizes adopt the best technologies and practices along their DevOps journey.



This site was generated using [HUGO](https://gohugo.io/) from an open [github repository](https://github.com/eddiewebb/json-resume) via a [CircleCI](https://circleci.com/gh/eddiewebb/json-resume).
This site was generated using [HUGO](https://gohugo.io/) from an [open source theme](https://github.com/eddiewebb/json-resume) via a [CircleCI](https://circleci.com/gh/eddiewebb/json-resume).

![CircleCI Status Badge](https://circleci.com/gh/eddiewebb/json-resume.svg?style=svg)
@@ -0,0 +1,8 @@
---
title: "Blog"
sitemap:
priority : 0.9
---
This section contains articles migrated from my old Wordpress site. Forgive the formatting please :)

The "featured" articles are those with highest comment count from WP.
@@ -0,0 +1,135 @@
---
title: 'Add an RSS Feed to your CakePHP Models'
date: Wed, 28 Jan 2009 00:27:10 +0000
draft: false
tags: [CakePHP, CakePHP, feed, rss]
---

I recently developed a prototype for a client who insisted that the site **include an RSS feed for the articles of the site**. Not being one to turn down a challenge, and being aware of the Power of Cake, I assured them it could be completed with such a feature. The newsfeed would provide the latest articles to be consumed by an aggregation software or other feed reader. So in the text that follows I'll outline what is involved to **add news feed or rss feeds to a particular model of your CakePHP site.**

The Problem
-----------

News feeds are everywhere and essential in todays web development.  Your sites are just as good as anyone elses, and deserve this critical feature.

The Solution
------------

**Implement a url that can be consumed by web browsers or feed readers to publicize your latest content to the world.**

Implementing a Feed Generator in CakePHP
----------------------------------------

If we think about this rationally there are 3 peices;

* A controller action to retrieve the latest articles
* A view to generate the xml formatted excerpts
* A routing piece to provide an acceptable url

### The RSS Feed Action

No need to over complicate things here. Imagine you have a standard Model, oh let's say 'Posts'.  All we need to do here is add a newsfeed action. By default the action will pull 5 posts within the last month, but the number can be overridden by passing a different number in the url (as with any action parameter).

#### app/controllers/posts_controller.php -snippet

/\*\*
\* Returns an array of all public posts less than one month old, orderd by date
\*
\* @return unknown
*/
function newsfeed($count=null) {
if(!$count) $count=5;
$this->Post->recursive = 0;
$posts=$this->Post->findAll('is_public = 1
AND is_published = 1
AND Post.date_modified >= now() - INTERVAL 1 MONTH'
,null,'Post.date_modified DESC',$count);
if(isset($this->params\['requested'\])) {
return $posts;
}
$this->set('posts',$posts );
}
It would be really helpful if CakePHP provided an RSS helper. Zoot alors !  They do!
#### app/controllers/posts_controller.php -snippet
var $helpers = array('Rss');
var $components = array ('RequestHandler');
### The XML Generating View
Just like any other view, all we need to do is transform some provided data into a formatted page. This time it will be strict XML without all the html clutter.
#### app/views/posts/rss/newsfeed.ctp
$item\['Post'\]\['title'\],
'link' => array('controller' => 'posts', 'action' => 'view', $item\['Post'\]\['id'\]),
'guid' => array('controller' => 'posts', 'action' => 'view', $item\['Post'\]\['id'\]),
'description' => strip_tags($item\['Post'\]\['body'\]),
'pubDate' => $item\['Post'\]\['date_added'\],
);
}
$this->set('items', $rss->items($posts, 'rss_transform'));
$this->set('channelData', $channelData);
?>
And of course sticking with format we should want to add an RSS layout.
#### app/views/layouts/rss/default.ctp
header();
$channelData = array('title' => 'Recent News | Digital Business',
'link' => array('controller' => 'posts', 'action' => 'index', 'ext' => 'rss'),
'url' => array('controller' => 'posts', 'action' => 'index', 'ext' => 'rss'),
'description' => 'The best Digital Business RSS Feed on the web',
'language' => 'en-us'
);
$channel = $rss->channel(array(), $channelData, $items);
echo $rss->document(array(), $channel);
?>
### The RSS compliant URL
You only need to add 2 lines to your routes configuration file for CakePHP to catch and handle the url to pint to your RSS feed. You might use feed.rss, I choice live.rss.
#### app/config/routes.php -snippet
/\*\*
\* ...allow rssextensions
\* and send live.rss to the rss feed
*/
Router::connect('/live', array('controller' => 'posts', 'action' => 'newsfeed'));
// see my posts on sitemaps to use this next line ;)
Router::connect('/sitemap', array('controller' => 'sitemaps', 'action' => 'index'));
Router::parseExtensions('rss','xml');
Yes, you'll notice an additional route there for [dynamic sitemaps](https://blog.edwardawebb.com/programming/php-programming/cakephp/generating-dynamic-sitemaps-cakephp), very useful as well. Sweet! Now just visit http://example.com/live.rss, or throw that url in your favorite Feed Reader to see the results.
#### http://example.com/live.rss
Recent News | Digital Business
http://digbiz.localhost/posts.rss
The best Digital Business RSS Feed on the web
en-us
This is a Public, Published General News Article
http://digbiz.localhost/posts/view/1
http://digbiz.localhost/posts/view/1
It should be visible by ALL users and guests.
Tue, 22 Jul 2008 11:22:51 -0400
New Public News
http://digbiz.localhost/posts/view/6
http://digbiz.localhost/posts/view/6
Lets spice this up a bit...
Fri, 01 Aug 2008 13:00:25 -0400
Neil Hair Guest Essay in Democrat and Chronicle
http://digbiz.localhost/posts/view/9
http://digbiz.localhost/posts/view/9
Dr. Neil Hair comments on the Virtual Workforce of the
future.
http://www.democratandchronicle.com/apps/pbcs.dll/article?AID=2008810050343
Mon, 06 Oct 2008 09:03:36 -0400
@@ -0,0 +1,19 @@
---
title: 'AppEngine with JPA, Spring, and Maven'
date: Mon, 30 Nov -0001 00:00:00 +0000
draft: false
tags: [Site News]
---

Assumptions

1. Eclipse
2. M2eclipse
3. Spring

Additiona Steps

2. Install Eclipse Google Plugin
3. Install AppENgine SDK
4. DOwnload datanucleus-appengine-plugin
5. Install to local repo eddie@eddie-HP-Pavilion-dv6-Notebook-PC:~/workspace/food-off-service$ mvn install:install-file -DgroupId=com.google.appengine.orm -DartifactId=datanucleus-appengine-jpa -Dversion=2.0.0-final -Dpackaging=jar -Dfile=/home/eddie/Downloads/datanucleus-appengine-2.0.0-final-dist.zip
@@ -0,0 +1,34 @@
---
title: 'Assign Custom Object Identities with JPA'
date: Mon, 30 Nov -0001 00:00:00 +0000
draft: false
tags: [java, Java, jpa, persistence]
---

JPA provides the ability to assign primary keys automatically out of the box. Unfortunately the only strategies JPA provides rely on the database, or sequence tables to manage ids. But **if you want to assign your own ids from a id service, or cycles of the moon it can be done. Any possible way you can think of to get a unique ID, you can use with JPA.** This article introduces a custom jpa sequence generator for JPA.  My implementation is OpenJPA, but this is part of the standard JPA 1.2 specification.

The Problem
-----------

None of the provides JPA Id generation strategies meet our needs. We do not want to have to set each object's @Id field manually (although we could ). **We need a way to tell JPA to use a custom id generator or strategy.**

The Solution
------------

We can **write a custom class that will be called by JPA on inserts to automatically assign values to all Id or Identity fields**.

### My Unique ID Source - an Object ID web service

My source is a web service provide by random.com that provides a globally unique object id that I can migrate across all my databases and maintain historically unique ids for all records. I access that through the sample singleton below. This is not required by JPA, but just provides an example to leverage external sources. You can easily use any source of Ids. The two methods to note are getNextId() and getMoreIds()

### My sequencer or sequence generator class

This is the class that JPA cares about. It must respect the interface laid-out by the JPA spec for a sequencer class.  Even so, the only two you really need to obey are the getcurrentid, and getnextid.  I highly recommend you also implement the allocate method to efficiently assign a specified range of ids. This can dramatically increase batch insert performance.

### Sample Entity Annnotations for Custom Identity Field

Next we tell each entity to use the SEQUENCE id generation strategy to generate the unique Ids.  The name we pass is always "system" which we set later in the persitence.xml. BONUS: you could, for whatever reason, use different strategies for particular entities. Maybe only user payouts need a globally unique id..  Just specify each individual sequence class instead of system.

### Sample Persistence.xml to declare the custome id generator

The only secret here is to set the system property for our custom class. Again this is only if you have one custom sequencer. To use multiple classes you will need to specify the fully qualified class name (including "()" even if not required) with each entity for the Sequencer name. If you do specify one here it will be available under the name "system" for any entity that declares it.
@@ -0,0 +1,80 @@
---
title: 'Automatically choose database connections in CakePHP '
date: Sat, 05 Jul 2008 22:04:40 +0000
draft: false
tags: [CakePHP, CakePHP, database]
---

**When developing applications it is wise to isolate development environments from live production environments**. This is true of your code and your database structures For me this means my local SuSE server runs any developmental code before I push it off to a shared hosting account out on the real live web. **The frustrating part for me was changing between two distinct database connections.** Every time I uploaded the complete application I would need to manually change connection strings. Well no more! A simple logic switch can do the work for me (and you), hooray!.

### Old database.php

class DATABASE_CONFIG
{
var $default =
array(
'driver' => 'mysql',
'connect' => 'mysql_connect',
'host' => 'localhost',
'login' => 'cakeuser',
'password' => 'cake4ever',
'database' => 'site_db',
'prefix' => 'mydb_'
);
}

### Improved database.php

class DATABASE_CONFIG
{
//initalize variable as null
var $default=null;

//set up connection details to use in Live production server
var $prod =
array(
'driver' => 'mysql',
'connect' => 'mysql_connect',
'host' => 'mysql123.example.com',
'login' => 'username',
'password' => 'pa55word',
'database' => 'dbname',
'prefix' => 'dbpre_'
);

// and details to use on your local machine for testing and development
var $dev =
array(
'driver' => 'mysql',
'connect' => 'mysql_connect',
'host' => 'localhost',
'login' => 'username',
'password' => 'password',
'database' => 'baungenjar',
'prefix' => 'dbpre_'
);

// the construct function is called automatically, and chooses prod or dev. UPdate! works for baking now
function __construct ()
{
//check to see if server name is set (thanks Frank)
if(isset($\_SERVER\['SERVER\_NAME'\])){
switch($\_SERVER\['SERVER\_NAME'\]){
case 'digbiz.localhost':
$this->default = $this->dev;
break;
case 'digbiz.example.com':
$this->default = $this->prod;
break;
}
}
else // we are likely baking, use our local db
{
$this->default = $this->dev;
}
}
}
### What's Happening
PHP provides a whole bunch of useful server variables, one of which is the name of the server hosting the scripts. When the database class gets created, the construct function (if present) is called. This is true of any PHP class. We take advantage of this to check our server's name before actually setting up the connections. If we are not using the local server, then we set the default connection to use our production connection, otherwise we use our local connection. NOTE: The order is important here, since CakePHP's bake script will not have a server name, so we should always default to localhost, since thats where any backing would occur anyhow.
Oops, something went wrong.

0 comments on commit 15a22e6

Please sign in to comment.