[{"data":1,"prerenderedAt":404},["ShallowReactive",2],{"published-posts":3},[4,12,21,29,36,42,49,56,63,70,78,85,92,99,106,113,119,125,131,137,144,150,157,164,169,175,181,187,194,200,207,214,220,226,232,238,244,250,256,263,269,275,281,287,294,299,305,311,317,324,330,337,343,349,355,361,368,374,380,386,392,398],{"path":5,"title":6,"date":7,"tags":8,"description":11},"\u002Fposts\u002Ftypescript-basics","TIL: Typescript Basics","2026-09-01T22:12:40-04:00",[9,10],"javascript","til","Typescript:",{"path":13,"title":14,"date":15,"tags":16,"description":20},"\u002Fposts\u002Fread-java-package-version","How to Get the Version of Any Java Package from CFML","2022-09-21T16:13:57-04:00",[17,18,19],"cfml","coldfusion","java","The Apache POI library is an awesome tool for messing with spreadsheets. You can read spreadsheet data, get header rows, total row count, all sorts of wacky stuff. Julian Halliwell's excellent spreadsheet-cfml library uses it to great effect.",{"path":22,"title":23,"date":24,"tags":25,"description":28},"\u002Fposts\u002Fredirecting-hibernate-logs","Redirecting Hibernate Logs to the CommandBox Console","2021-08-30T16:13:57-04:00",[17,18,26,27],"hibernate","log4j","In my last blog post, I covered how to adjust the Hibernate log level with Log4j.",{"path":30,"title":31,"date":32,"tags":33,"description":35},"\u002Fposts\u002Fhibernate-logger-concurrent-exception","Resolving Concurrent Exceptions in Hibernate Logger","2021-08-19T16:13:57-04:00",[17,18,26,34],"orm","Recently while working on a Hibernate ORM project, I ran into an interesting issue when an entity with relationships is saved inside a transaction.",{"path":37,"title":38,"date":39,"tags":40,"description":41},"\u002Fposts\u002Ftransaction-detection-hibernate","Cross-engine transaction detection in Hibernate v3+","2021-08-12T16:13:57-04:00",[17,18,26,34],"",{"path":43,"title":44,"date":45,"tags":46,"description":41},"\u002Fposts\u002Ffive-things-2020","Five Things I'd Like To Learn in 2020","2020-01-13T16:13:57-04:00",[47,17,18,48],"2020","contentbox",{"path":50,"title":51,"date":52,"tags":53,"description":55},"\u002Fposts\u002Fthree-coldbox-learnings","Three ColdBox Features I Learned While Building A URL Shortener","2019-12-18T16:13:57-04:00",[17,18,54],"coldbox","Last night I did another live-stream where I finished the first draft of a URL shortener I'm calling \"cfShorty\". During live-streams I typically end up searching the ColdBox docs for help, but this time Gavin Pickin watched and commented with some cool tips, most of which I'd never used before.",{"path":57,"title":58,"date":59,"tags":60,"description":41},"\u002Fposts\u002Fadobe-piece-of-work","Adobe, You Piece of Work, I'm Through","2019-09-23T16:13:57-04:00",[17,18,61,62],"lucee","webdev",{"path":64,"title":65,"date":66,"tags":67,"description":69},"\u002Fposts\u002Fquickstart-cfml","Getting Started In CFML: A Resource List for Newbies","2019-09-11T16:13:57-04:00",[17,18,68],"beginners","If you are going to learn CFML in 2019, you need the best resources available. In this post I'll share tutorials, video channels, and even podcasts you can use to help you begin learning CFML.",{"path":71,"title":72,"date":73,"tags":74,"description":77},"\u002Fposts\u002Flocalizing-dates-mssql","Localizing Dates In Sql Server","2019-08-20T16:13:57-04:00",[75,76],"sql","localization","Several months ago I added timezone handling to a CF app. This post is my best effort to document how to localize dates using MSSQL timezone functionality.",{"path":79,"title":80,"date":81,"tags":82,"description":84},"\u002Fposts\u002Fgrep-with-file-type","TIL: TIL: How to Grep For a String In .cfc File Type","2019-08-15T21:14:01-04:00",[83,10],"bash","Need to change a variable name across 50 files in 10 folders? Here's how to grep for that variable in .cfc files:",{"path":86,"title":87,"date":88,"tags":89,"description":91},"\u002Fposts\u002Fforms-3-sending-emails","Form Processing in CFScript Part Three: Sending Email Notifications","2019-08-14T16:13:57-04:00",[18,61,17,90],"cfscript","In this series so far, we've looked at how to validate a form entry and how to save that form entry to the database. Today we'll see how we can notify a person (usually a site admin or editor) that a new form entry has been submitted and processed by simply sending an email.",{"path":93,"title":94,"date":95,"tags":96,"description":98},"\u002Fposts\u002Fforms-2-persist-db","Form Processing in CFScript Part Two: Saving Form Entries to the Database","2019-08-01T16:13:57-04:00",[18,90,17,97],"mysql","If a tree falls in a woods with no one to hear, did it actually fall? Likewise, if a user submits a form but it is not persisted in some form, that form submission is worthless.",{"path":100,"title":101,"date":102,"tags":103,"description":105},"\u002Fposts\u002Fforms-1-validation","Form Processing in CFScript Part One: Form Validation","2019-07-23T16:13:57-04:00",[18,90,17,104],"validation","This series will teach you how to process form submissions using ColdFusion's CFScript syntax. In Part One I'll show you the basics of validating form submissions on the backend!",{"path":107,"title":108,"date":109,"tags":110,"description":112},"\u002Fposts\u002Faccess-lucee-extension","Creating an MS Access Lucee Extension","2019-07-15T16:13:57-04:00",[18,61,17,111],"jdbc","I turned a simple task (migrate data from an MS Access database) into a Lucee extension which wraps the UCanAccess JDBC driver.",{"path":114,"title":115,"date":116,"tags":117,"description":118},"\u002Fposts\u002Flucee-datetimeoffset","Storing and Using DateTimeOffsets in Lucee","2019-07-08T16:13:57-04:00",[18,61,17,75],"Recently at Impelos I began storing dates using SQL Server's DateTimeOffset field, which allows us to store a date and time with embedded UTC offset. Unfortunately, I ran into several issues with Lucee's support for the data type.",{"path":120,"title":121,"date":122,"tags":123,"description":124},"\u002Fposts\u002Fcfscript-gotchas","CFScript Gotchas and Syntax Guides","2019-06-28T16:13:57-04:00",[18,17,90],"Now, script syntax is usually straightforward, but as with any language, sometimes it's easy to get confused over certain things in script syntax. In this post I'll cover a quick list of common \"gotchas\" in CFScript, document the proper syntax for each, and finally link to a list of CFScript guides which may help you start writing CFScript today.",{"path":126,"title":127,"date":128,"tags":129,"description":130},"\u002Fposts\u002Fswitching-to-cfscript","Switching from Tag to Script","2019-06-26T16:13:57-04:00",[18,17,90],"Look, I write in CFScript. Most of the CF devs I look up to write in CFScript. But maybe you don't. Here's where I convince you CFScript is worth the jump and, for that matter, just how to \"jump\" to CFScript.",{"path":132,"title":133,"date":134,"tags":135,"description":136},"\u002Fposts\u002Fgetter-and-setter-functions","TIL: Write Getter and Setter Functions in Native Javascript","2019-06-14T08:18:01-04:00",[9,10],"Whoa! You can do getter and setter functions in native Javascript? How cool is that!",{"path":138,"title":139,"date":140,"tags":141,"description":143},"\u002Fposts\u002Fcf-legacy","CF: A Legacy of Legacy","2019-06-03T16:13:57-04:00",[18,17,142],"legacy","I've seen a lot of discussions revolving around ColdFusion and whether it is inherently a \"legacy\" language. There are dozens of blog posts proclaiming the death of the language, and every comment seems to share a story about just how \"legacy\" CF is. Today, I'd like to look closely at why so many dare to call us a legacy language, and what we can do about that.",{"path":145,"title":146,"date":147,"tags":148,"description":149},"\u002Fposts\u002Fcf-unpopular","Yes, ColdFusion is 'Unpopular'. No, I don't care.","2019-05-23T16:13:57-04:00",[18,17,142],"It’s popular to hate on CF. It’s popular to say ColdFusion is \"dying\". It’s popular to call CF a \"legacy\" language, and compare it to COBOL. But is ColdFusion really unpopular? And, more important… does it matter?",{"path":151,"title":152,"date":153,"tags":154,"description":156},"\u002Fposts\u002Frename-column","TIL: Rename a Column in SQL Server","2019-05-09T21:23:52-04:00",[155,10],"sql-server","Trying to rename a column today in an MSSQL database. I expected the standard ALTER TABLE x CHANGE oldColumn newColumn \u003Ctype> to work, but apparently that's a MySQL-only thing? Instead I did a quick Google search and came up with this nugget:",{"path":158,"title":159,"date":160,"tags":161,"description":163},"\u002Fposts\u002Farray-higher-order-funcs","Using ArraySome and ArrayEvery Higher-Order Functions in Lucee","2019-05-07T16:13:57-04:00",[18,17,61,162],"lambdas","In this post I'm going to take two Lucee only higher-order array functions, arraySome() and arrayEvery(), and explain their use and purpose. I'll also review the concept of a higher-order function, as well as the Super Cool (yet very little used) lambda expression available in Lucee 5.",{"path":165,"title":166,"date":160,"tags":167,"description":168},"\u002Fposts\u002Ffive-reasons-cf","Five Reasons to Learn CF in 2019",[18,17,68],"I am happy to present Five Reasons to Learn CF in 2019. I'm trying to be honest here, but you may find some bias because I love ColdFusion. There, I confessed. Read on!",{"path":170,"title":166,"date":171,"tags":172,"description":174},"\u002Fposts\u002Fhello-world-cf","2019-03-28T16:13:57-04:00",[18,17,68,173],"commandbox","Now that you've read my Why Coldfusion? post (you HAVE, right?), let's do a simple Hello World just to try some sample CF code.",{"path":176,"title":177,"date":178,"tags":179,"description":180},"\u002Fposts\u002Fwhy-cf","Why I Program in Coldfusion","2019-03-20T16:13:57-04:00",[18,17,68],"I get asked this a bunch. Why are you programming in Coldfusion, anyway? Isn't Coldfusion dead? Isn't it closed-source? Isn't it expensive?",{"path":182,"title":183,"date":184,"tags":185,"description":186},"\u002Fposts\u002Fignore-rules-in-cflint","TIL: Ignore Linting Rules in CFLint","2019-02-28T17:40:26-05:00",[18,10],"So, CFLint is super useful for CF development. There's a VS Code Extension which can lint your CF tag or script syntax on the fly, and there is also a CommandBox Package which can lint an entire folder of .cfm or .cfc files.",{"path":188,"title":189,"date":190,"tags":191,"description":193},"\u002Fposts\u002Fdate-format","TIL: Formatting Dates in Oracle","2019-02-25T17:30:22-05:00",[192,10],"oracle","Trying to retrieve records by modifiedDate, right?",{"path":195,"title":196,"date":197,"tags":198,"description":199},"\u002Fposts\u002Fget-database-version","TIL: Get (Oracle) Database Version","2019-02-20T08:58:52-05:00",[192,10],"I've been working with Oracle lately, and the first Oracle-specific thing I had to do was check the version.",{"path":201,"title":202,"date":203,"tags":204,"description":206},"\u002Fposts\u002Fstash-specific-files-and-filenames","TIL: Stash Specific Files and Filenames","2019-02-20T08:53:12-05:00",[205,10],"git","Why would you ever want to stash a specific file, as opposed to any and all altered files, you ask? In an ideal world, you probably wouldn't need to. In this specific case, I was attempting to stash files I had modified without stashing other files which had been bulk-edited by a script. In other words, I wished to throw away most of my changes and keep one or two specific changes after a git merge.",{"path":208,"title":209,"date":210,"tags":211,"description":213},"\u002Fposts\u002Fenv-vars-use-equal-signs","TIL: Docker Env Vars Use Equal Signs","2019-02-07T17:59:33-05:00",[212,10],"docker","I did something pretty stupid a week or two ago. I was setting up a MariaDB database using Docker-compose, and I kept getting an error saying that MYSQL_ROOT_PASSWORD was not set. This made no sense to me - of course MYSQL_ROOT_PASSWORD is in the .env file, right?",{"path":215,"title":216,"date":217,"tags":218,"description":219},"\u002Fposts\u002Fdisable-auto-restart-on-container","TIL: How To Disable Auto-Restart on Docker Containers","2019-02-07T17:54:20-05:00",[212,10],"So I've had this docker container hanging around my Ubuntu machine since I first developed\u002Fstarted it. It's there whenever I run docker ps, and I finally decided I need to stop this useless container from hogging my machine's memory. (After three months!)",{"path":221,"title":222,"date":223,"tags":224,"description":225},"\u002Fposts\u002Fformat-date-strings","TIL: How To Format Date Strings in SQL Server","2018-12-26T08:30:00-05:00",[155,10],"Where chr(10) is the myDateField column type to expect and 103 is the date format to use. The 100-plus date format codes will display a 4-digit year, whereas the 0-100 codes will display a 2-digit year. (Not recommended, if you ask me!)",{"path":227,"title":228,"date":229,"tags":230,"description":231},"\u002Fposts\u002Falter-existing-constraint","TIL: Alter Existing Constraint in Transact-SQL","2018-12-20T12:43:25-05:00",[155,10],"First, see this quote from Modify Unique Constraints:",{"path":233,"title":234,"date":235,"tags":236,"description":237},"\u002Fposts\u002Fshow-columns-in-table","TIL: How to Show Column Types like MySQL's \"Show Columns\" statement","2018-12-19T11:02:40-05:00",[155,10],"For all those MySQL devs who miss the simplicity of SHOW CREATE TABLE myTable or SHOW COLUMNS FROM myTable, here's the snippet you are looking for.",{"path":239,"title":240,"date":241,"tags":242,"description":243},"\u002Fposts\u002Ftrim-tab-character-from-field","TIL: Trim the TAB Character From A Field","2018-10-19T17:22:55-04:00",[97,10],"So, I ran into a \"funny\" sorting issue this week. Turns out there was a \u003CTAB> in a product title, causing that title to be sorted first. (Quite logic if you look at the ASCII table.)",{"path":245,"title":246,"date":247,"tags":248,"description":249},"\u002Fposts\u002Fgrant-permissions-for-mysql-dump","TIL: GRANT Permissions for MySQLDump Backups","2018-10-18T03:13:38-04:00",[97,10],"Turns out that running mysqldump against a database takes more than just SELECT permissions. Use this GRANT command to grant the necessary privileges for dumping a database.",{"path":251,"title":252,"date":253,"tags":254,"description":255},"\u002Fposts\u002Fssh-key-permissions-must-be-exact","TIL: SSH Key Permissions Must Be Exact!","2018-09-06T00:10:40-04:00",[83,10],"So, I just re-installed Ubuntu on my dev machine. (18.04, whoop whoop!)",{"path":257,"title":258,"date":259,"tags":260,"description":262},"\u002Fposts\u002Fload-composer-packages-from-vcs-repo","TIL: How To Load Composer Packages from a VCS Repo","2018-08-26T00:05:59-04:00",[261,10],"php","So, I'm building a Formstack API extension for the marvelous Bolt CMS, and I decided to use Josh Gulledge's 'FormStackAPI` PHP integration.",{"path":264,"title":265,"date":266,"tags":267,"description":268},"\u002Fposts\u002Fconvert-putty-ppk-to-openssh","TIL: Convert Putty (PPK) SSH key file to OpenSSH key file","2018-08-08T15:20:54-04:00",[83,10],"See the quick tutorial on SuperUser.",{"path":270,"title":271,"date":272,"tags":273,"description":274},"\u002Fposts\u002Fdelete-remote-branch","TIL: Delete a Remote Branch in Git","2018-07-06T14:56:25-04:00",[205,10],"No explaning here. I've got a branch in my repo, want to get rid of it.",{"path":276,"title":277,"date":278,"tags":279,"description":280},"\u002Fposts\u002Fadd-user-to-sudo-group","TIL: Adding My Developer User to the Sudo Group","2018-07-02T22:30:45-04:00",[83,10],"Yo, ever seen this?",{"path":282,"title":283,"date":284,"tags":285,"description":286},"\u002Fposts\u002Ftoggle-debug-mode","TIL: Toggle Debug Mode","2018-06-26T12:23:19-04:00",[83,10],"Doing a big (ok, small) script to check for SSL certificates on a list of about 200 of our client websites.",{"path":288,"title":289,"date":290,"tags":291,"description":293},"\u002Fposts\u002Foverride-indentation-settings-for-specific-filetype","TIL: Override Vim Indentation Settings for a Specific Filetype","2018-06-16T20:06:57-04:00",[292,10],"vim","I'm working on a project which has thousands of lines of Coldfusion written with tabs. (Now's not the time to start that argument again!) I'm obviously not keen on throwing 2 spaces in the mix for indentation, so I looked up a way to override indentation for .cfm and .cfc files only.",{"path":295,"title":296,"date":297,"tags":298,"description":41},"\u002Fposts\u002Fcherry-pick-commit-from-detached-head","TIL: Cherry Pick a Commit from a Detached Head","2018-06-01T17:23:06-04:00",[205,10],{"path":300,"title":301,"date":302,"tags":303,"description":304},"\u002Fposts\u002Fcant-add-index-to-view","TIL: You Can't Add An Index to a MySQL View","2018-05-31T14:53:28-04:00",[97,10],"I hadn't realized this until today: MySQL views can't have indexes!",{"path":306,"title":307,"date":308,"tags":309,"description":310},"\u002Fposts\u002Fcron-jobs-have-different-server-globals","TIL: Cron Jobs Have Different `$_SERVER` Globals","2018-05-30T06:23:36-04:00",[261,10],"So, I was getting this error message in a new cron job \u002F nightly import I'd set up.",{"path":312,"title":313,"date":314,"tags":315,"description":316},"\u002Fposts\u002Fremove-file-from-last-commit","TIL: Remove File From Last Git Commit","2018-05-29T09:43:16-04:00",[205,10],"Ach! I over-committed! (heh, heh, joke, joke.)",{"path":318,"title":319,"date":320,"tags":321,"description":323},"\u002Fposts\u002Fhide-empty-sidebar-from-template","TIL: Hide Empty Sidebars From Template","2018-05-25T16:14:30-04:00",[322,10],"wordpress","My Foundation theme was showing the sidebar even when the sidebar was totally empty. This caused some wonky-looking main content which was shifted to the left, making room for the useless (and invisible) sidebar.",{"path":325,"title":326,"date":327,"tags":328,"description":329},"\u002Fposts\u002Fcheck-for-empty-string","TIL: Check for Empty String in Bash","2018-05-18T23:26:57-04:00",[83,10],"So, I'm grabbing argument number three.",{"path":331,"title":332,"date":333,"tags":334,"description":336},"\u002Fposts\u002Ffirefox-cant-wrap-flex-elements-in-print","TIL: Firefox Can't Wrap Flex Elements In Print","2018-05-04T09:16:48-04:00",[335,10],"css","Wow! This was a royal pain. See Mozilla bug report for Firefox print mode.",{"path":338,"title":339,"date":340,"tags":341,"description":342},"\u002Fposts\u002Fignore-right-click-in-mousedown-event-handler","TIL: Ignore Right-click Events in a `mousedown` Event Handler","2018-05-03T10:39:17-04:00",[9,10],"Making a \"Print page\" button. You know the drill. Use addEventListener(), pass a callback function.",{"path":344,"title":345,"date":346,"tags":347,"description":348},"\u002Fposts\u002Fdiscover-why-git-wont-track-file","TIL: Discover Why Git Won't Track a File","2018-05-02T17:22:06-04:00",[205,10],"This was frustrating. I couldn't track changes to multiple files buried in a folder!",{"path":350,"title":351,"date":352,"tags":353,"description":354},"\u002Fposts\u002Frestore-deleted-files-from-old-commits","TIL: Restore Deleted Files from Older Commits","2018-05-01T09:10:36-04:00",[205,10],"Ugh. So I saw a bug logged today due to a missing piece of code. What?! That was there yesterday! Turns out I had deleted the file by accident and not realized it.",{"path":356,"title":357,"date":358,"tags":359,"description":360},"\u002Fposts\u002Fescape-ansi-sequences","TIL: Escape ANSI Sequences in Bash","2018-04-30T09:10:57-04:00",[83,10],"So after writing all about my fancy new shell prompt, I had to adjust it a little. I knew I'd gotten it wrong when I started seeing my shell commands wrap before they reached the end of the window.",{"path":362,"title":363,"date":364,"tags":365,"description":367},"\u002Fposts\u002Fturn-on-error-details","TIL: Turn On Error Details In IIS","2018-04-27T09:51:11-04:00",[366,10],"iis","Ran into this today. Debugging a Coldfusion app on IIS, I'm having trouble getting any errors, despite having a nice Coldfusion error handler set up.",{"path":369,"title":370,"date":371,"tags":372,"description":373},"\u002Fposts\u002Fmake-a-custom-shell-prompt","TIL: Make a Short Bash Prompt","2018-04-26T12:53:21-04:00",[83,10],"Ok, so I use VS Code with an integrated terminal on the right. My terminal is really narrow, so I run out of room quickly. My bash  prompt can overflow the narrow screen, so I decided to change it.",{"path":375,"title":376,"date":377,"tags":378,"description":379},"\u002Fposts\u002Foverride-login-messages-with-add-filter","TIL: Override Login Messages with `add_filter()`","2018-04-24T08:51:01-04:00",[322,10],"Using the Wordpress \"Theme My Login\" plugin to display a nice login form on a custom dashboard page. The form by default displays a \"Log In\" message, but what I'd like to see is \"Please log in to view your application status\".",{"path":381,"title":382,"date":383,"tags":384,"description":385},"\u002Fposts\u002Fhighlight-search-matches-in-vim","TIL: Highlight Search Pattern Matches in Vim","2018-04-20T17:30:49-04:00",[292,10],"So, my machine at work is less Vim-ified than my lean, mean, Ubuntu machine at home. When I tried searching for a variable (like \u002F$applications), I couldn't immediately see the matched strings, meaning I have to skip to each match with n.",{"path":387,"title":388,"date":389,"tags":390,"description":391},"\u002Fposts\u002Fget-url-job-listings-page","TIL: How to get the URL of a Job Listings page","2018-04-19T09:45:41-04:00",[322,10],"After installing WP Job Manager on a careers-focused Wordpress site, I needed to set up a job search form. This search form would allow users to enter in a job title, keyword, etc to search the jobs on the site. Clicking \"Go\" would bring them to the job listing page.",{"path":393,"title":394,"date":395,"tags":396,"description":397},"\u002Fposts\u002Fschema-and-database-are-not-same-thing","TIL: \"Schema\" and \"Database\" Are Not the Same Thing!","2018-04-12T17:08:00-04:00",[97,10],"I thought I was a pretty good database developer. I wouldn't call myself a DBA or a \"guru\", but I would have put myself in the upper 50%.",{"path":399,"title":400,"date":401,"tags":402,"description":403},"\u002Fposts\u002Fif-statements-in-bash-scripts","TIL: If Statements In Bash Scripts","2018-04-10T09:39:12-04:00",[83,10],"Ok, so this is nothing mind-blowing. I may spend a lot of time in bash, but very little of that goes into writing scripts. Well, today I was downloading websites using a wget script I wrote specifically for that purpose, and had to add an if statement to construct some conditional wget arguments.",1790471528531]