All blogs / Software / engineering practice
Donn Felker
The psychology of doing your best work while everything changes. Weekly essays on Substack, products, and two decades of writing by Donn Felker.
Software / engineering practiceAI / MLMobile / iOS / AndroidRuby / RailsEssays / personal
- Posts
- 515 from 6 Jan 2007 to 23 Jul 2026
- Posting
- now and then (4 in the last year)
- Kind
- personal blog
2026 3
- Why we moved software development into SlackAn agent on your laptop is yours. An agent in the channel is the team's. How Polygon's non-engineers ship code without opening an IDE, and what it took to get there.2026.10.19Read →
- Reducing OpenClaw Token Costs with claw-llm-routerRight model, right time. Save tokens.2026.02.25Read →
- The Passive AI Learning Stack That Changed the Way I LearnLearn more with less effort.2026.02.08Read →
2025 11
- Learn Agentic Coding in 2 Days (and unlock a decade of productivity)Evolving into an Agentic Coding Architect2025.11.10Read →
- The Single Most Important Thing You Need as a One-Person Business to Guarantee You Get PaidGet paid or go broke.2025.08.06Read →
- Vibe Coding with AI and the Future of SoftwareSoftware’s Industrial Revolution Moment2025.04.16Read →
- Productive LLM Coding with an llm-context.md FileAvoid repeat prompts with context.2025.03.24Read →
- Invisible MentorsMentorship without direct connection.2025.03.07Read →
- The Life Changing Magic of Doing Things For FreePlant Seeds of Opportunity.2025.03.01Read →
- Done is Better Than PerfectPerfection delays real progress.2025.02.21Read →
- Master the BasicsSkill beats high-end tools.2025.02.20Read →
- How to Backup A Digital Ocean Managed DatabaseDigital Ocean backup with pg_dump.2025.02.19Read →
- Migrating from Sidekiq to Solid QueueGoodbye Sidekiq, Hello Solid Queue.2025.01.08Read →
- Rails ImportMap Pin with VersionPin specific versions in ImportMap.2025.01.02Read →
2024 5
- Ruby Script for Telegram NotificationsSkip paid alerting services. A small Ruby script and Telegram bot let you send yourself server notifications for free using MarkdownV2 messages.2024.10.15Read →
- The Decline Of Mobile DevelopmentConstant forced OS updates, mandate deadlines, and over-engineered patterns are driving mobile developers to abandon native apps for the web.2024.07.25Read →
- Obtaining More Freedom (and Money) with FreelancingI once worked straight through a client's company holiday by accident. It's a reminder of why freelancing trades meetings for freedom and money.2024.05.29Read →
- I Removed JetPack Compose from My AppWhy I ripped a Compose AppBar back out of Jumpstart Android in favor of a plain XML Toolbar to make Turbo Android and Strada integration simpler.2024.04.15Read →
- Why Grandparents Spoil GrandchildrenA theory on why grandparents spoil their grandchildren: it's a second chance to do right what regret and exhaustion got in the way of as parents.2024.01.16Read →
2023 14
- Make Every Second Count: Strategies to Unleash Creativity and Success at Any TimeWe all get the same 86,400 seconds a day. How I cut phone time from 6-9 hours to reclaim mine and used small 10-minute blocks to ship more.2023.11.28Read →
- Bootstrapping to 7k MRR with WordPress and No CodeHow I built Caster.IO into a $7,500 MRR membership business on WordPress, RestrictContentPro, and Wistia without writing a single line of code.2023.11.13Read →
- Why Kotlin Multiplatform Won’t SucceedKotlin Multiplatform is impressive tech, but human nature, ego investment in tool choice, and a scarcity of polyglot devs will keep it niche.2023.11.06Read →
- Listomo – A New Cheaper and Easier Way To Build Your Email ListsI was paying $400/month across multiple email list providers, so I built Listomo: one account, unlimited contacts, bring your own SMTP.2023.11.01Read →
- Native Where You Need It (Hybrid Mobile Apps)Why hybrid Native Where You Need It apps -- native only where it matters, web everywhere else via Turbo and Hotwire -- beat building native twice.2023.10.30Read →
- The Power of the Clarity Doc: Your Tool for Clearer ThoughtsAn 8-step writing exercise for breaking analysis paralysis: dump your thoughts, weigh pros and cons, war-game the worst case, then decide and act.2023.10.14Read →
- Bootstrapped vs. Self-FundedBootstrapped and self-funded get used interchangeably, but they're not the same thing. Here's the real difference and why it matters.2023.08.31Read →
- Deploying Middleman Sites on HatchboxHow to deploy a Middleman static site on Hatchbox with a custom build script, plus auto-deploying on every git push - after ditching Heroku.2023.08.21Read →
- Disable Attachments in the Trix EditorA drop-in Stimulus controller that strips the attachment button, blocks pasted images, and disables file uploads in Rails' Trix editor.2023.07.05Read →
- Opportunity Cost and Letting Go: How to Profit from Your Stalled ProjectsYou want your time back so you can focus on other things. How do you do it though? Learn how in this article2023.06.21Read →
- The 15-Minute Meeting: Change Your Workday, Change Your LifeMost meetings do not need an hour. Set your default to 15 minutes, give every meeting a goal and a leader, and block them into one part of the day.2023.05.09Read →
- How to Migrate to Rails Encrypted AttributesHow to migrate an existing unencrypted Rails column to Rails 7's built-in encrypted attributes without breaking data already in the database.2023.04.26Read →
- Status Updates Should Be 60-90 SecondsStandup status updates should take 60-90 seconds per person, no more. Longer updates waste everyone's time - save the deep dives for after the meeting.2023.04.10Read →
- Building a Stronger Mind and Body: Reflections on 1000 Days of Working OutI worked out for 1000 days straight, this is what I learned about myself mentally, physically and more …2023.03.28Read →
2022 4
- HowTo: Setup Tailwind CSS 3 with MiddlemanA step-by-step guide to wiring Tailwind CSS 3 into a Middleman static site with an external_pipeline, plus the gotchas I hit and a ready-to-fork template.2022.08.02Read →
- MultiTenant PgSearch: A How ToHow to scope Rails PgSearch multisearch results to a tenant: add an account_id column, wire up additional_attributes, and rebuild the index right.2022.03.28Read →
- PgSearch multisearch with ActionText::RichTextHow to make a Rails model's ActionText::RichText field searchable with PgSearch by hooking multisearchable into its on_load initializer.2022.03.27Read →
- How to Fix – NameError: uninitialized constant Vips on HerokuFixing NameError: uninitialized constant Vips on Heroku for a Rails 7 app: the ruby-vips gem, an Aptfile, and two buildpacks in the right order.2022.02.10Read →
2021 11
- Master the Essentials of Git in Under 2 HoursA free 2-hour YouTube course covering the 20% of Git commands, branch, merge, stash, cherry-pick and more, that cover 80% of daily use.2021.11.20Read →
- How Often You Should Visit Your ClientsA freelancer's framework for deciding which clients are worth an in-person visit, how far is too far to travel, and how often to show up.2021.08.28Read →
- How to Ship Side Projects 🚀Seven blunt lessons from 20 years of shipping side projects: expect to fail, ship before it's ready, skip the emotional attachment, have an exit plan.2021.06.09Read →
- How to increase your productivity with outsourcing and SOPsHow to outsource tasks without losing your mind: write a standard operating procedure for every task so contractors can run it without you.2021.06.02Read →
- How to Start Freelancing If You Have Existing ResponsibilitiesA four-step stair-step plan for building a freelance career on nights and weekends while still working full-time and raising a family.2021.05.26Read →
- 5 Freelance Estimating Tips That Will Land You More ClientsFive practical rules for estimating freelance projects: never quote on the spot, scope with a discovery call, and always give a range, not a number.2021.05.19Read →
- Freelancing vs ConsultingIn this post you'll learn what the differences between freelancing vs consulting are in regards to you being a software developer and mobile app developer.2021.05.10Read →
- Get Known or Get NoneNo online presence means no freelance clients. Build a track record with a blog, GitHub, and social so prospects trust you before they call.2021.05.03Read →
- Why you need to step out of your comfort zoneLearning Solidity and building on Ethereum taught me more than comfort-zone tech ever could. Real growth happens when you're in over your head.2021.04.26Read →
- Why you should never quit too early …I shut down my CrossFit gym billing SaaS when competitors showed up, only to watch customers later abandon them and come back to simplicity.2021.04.19Read →
- lvh.me Not Working (with Verzion Fios/My ISP/etc)lvh.me suddenly stopped resolving on Verizon FiOS. Switching to Google's DNS (8.8.8.8) on my router or Mac fixed it. Here's how I diagnosed it.2021.04.02Read →
2020 4
- What Gets Measured, Gets ManagedWhy tracking sleep, spending, workouts, and even words-per-hour while writing turns vague goals into things you can actually manage.2020.12.10Read →
- You Are Not Your CreationsA story from my Groupon days: A/B testing killed a feature I'd poured two months into, and it taught me to stop being emotionally attached to my code.2020.11.10Read →
- Why Mobile is Not the Future …Why I think the web browser, not native mobile apps, is the real future platform, and why even the Gmail app is mostly just a WebView.2020.11.02Read →
- Freehold Township LogoCouldn't find a vector version of the Freehold Township, NJ seal online, so I made one, free to download in PNG, JPG, AI, and SVG.2020.10.06Read →
2019 12
- Dagger Open JDK Version MismatchFixing 'not a valid name: <set-?>Provider' in Android Studio - it's a JDK version mismatch between your terminal and Android Studio.2019.10.25Read →
- Code CommentsMy rule for code comments: refactor confusing code first, and when you can't, document the why, not the how - the code already explains that.2019.10.25Read →
- How To Fix: Jest Did Not ExitJest hanging after your test run finishes? It's probably an open Knex connection, destroy it in afterAll() and the hang goes away.2019.10.23Read →
- Fix: Deploying Docker Instances to AWS Elastic Beanstalk without Default VPCDocker on Elastic Beanstalk failing because your old AWS account has no default VPC? Here's how to get AWS to convert you from EC2-Classic to VPC.2019.08.21Read →
- Flutter Just Might WorkAfter 11 years of Android dev and testing React Native, Xamarin, and Kotlin Multiplatform, here's why Flutter is the cross-platform bet I'd make.2019.05.23Read →
- What Blog Platform Should I Use?Medium, WordPress, Ghost, or a static site generator? A blunt comparison of blogging platforms, and why WordPress still wins for most writers.2019.05.09Read →
- Podcast Equipment and SoftwareOur full podcasting gear guide: the mics and interfaces we use on Fragmented, a travel rig, fixing room echo, and Auphonic post-production.2019.04.28Read →
- You Need a BlogWhy you need to blog: it landed me a contract that turned into an Android book deal, all because a stranger found my blog through a Google search.2019.03.18Read →
- That One PersonMy rule for talks, blog posts, and podcasts: if it genuinely helps just one person, it was worth doing, regardless of audience size.2019.02.27Read →
- Achieving Your Goals Feels GoodSmall wins compound: unpacking bags, scheduling a call, writing 1000 words. Knocking out goals, however tiny, builds real momentum and self-discipline.2019.02.19Read →
- Being Absent While Being Present (don’t do this)A confession about coasting for three years while looking busy, and why real change requires deliberate discipline, not just showing up.2019.02.10Read →
- Light TherapyI tried a Verilux HappyLight for winter blues after a Tim Ferriss mention. A month in, here's my routine and whether it actually works.2019.01.07Read →
2018 5
- VSCode New File Shortcut Stops WorkingVS Code's CMD+N (New File) shortcut suddenly stopped working. The fix: reload the language plugin (Dart, in my case) causing the conflict.2018.11.29Read →
- Looking for an Android Job?Caster.IO now runs AndroidJobs.IO, the independent Android job board, with free 4-week postings pushed to our newsletter and email list.2018.09.24Read →
- Pixel 2 and ADB Not ConnectingPixel 2 won't show up in adb devices? Plug it into a USB 2.0 port instead of USB 3.0, or use a USB 2.0 hub. That fixed it for me instantly.2018.06.28Read →
- WP Markdown Themes for Google Code PrettifyHow to swap in a custom Google code-prettify theme for the WP Markdown plugin by editing prettify.css, plus the caching and update gotchas to watch for.2018.06.05Read →
- Your First Test: The Launch TestNo tests yet? Start with a launch test, a simple check that your app boots and the home screen loads, before you refactor anything with confidence.2018.03.06Read →
2017 4
- I Don’t Have Time is a MythYou have the time, you're just spending it on TV and social media. Practical ways to reclaim hours a day for the things you actually want.2017.11.06Read →
- Android MVVM with DataBinding – Removing Logic from Your Views with BindingAdaptersRemove logic from your Android MVVM DataBinding views by using custom Binding Adapters. This post will show you how to write one and test a Binding Adapter.2017.10.20Read →
- Make the Most of Your TimeHe said "You are a rockstar, I don't know how you get so much stuff done. I don't know how you do it." Time optimization, 100%. I value every single minute.2017.09.14Read →
- TDD Your UI Layer – #uitestsmatterYes, you can TDD your Android UI with Espresso. Here's the 5-step TDD process applied to UI code, and why the common objections don't hold up.2017.01.24Read →
2016 3
- Automating Screenshots: Simplifying Internationalization on AndroidThis post outlines how you can simplify Android internationalization by using the screengrab tool to help automate your QA process, per locale.2016.02.11Read →
- The Three Buckets (The Rule of Thirds)Making everyone happy is impossible. Using the Rule of Thirds system you can help eliminate negative cognitive load in under 10 seconds.2016.02.05Read →
- Why Podcasts Have Become PopularPodcasts exploded for the same reason Netflix and Uber did: they're on-demand. Live radio never had a chance once we had a choice.2016.01.03Read →
2015 19
- Staying Sane and Productive While Working RemotelyI've worked remotely for over 10 years. I've comprised a list of tips that will help you stay sane and productive while working remotely.2015.12.30Read →
- Genymotion Will Not Start Virtual DeviceGenymotion failing with VERR_SUPLIB_OWNER_NOT_ROOT on Mac? It's a permissions issue, fix it with diskutil repairPermissions or a manual chown.2015.12.18Read →
- Killing Your Project Quietly – The NIH AssassinNot Invented Here syndrome quietly kills projects -- the math on why building your own analytics or monitoring tool costs far more than buying it.2015.12.09Read →
- Standing Desk – Three Years LaterI've been working at a standing desk for over 3 years and this post outlines what I've learned, tips and tricks and the path towards a real standing desk.2015.11.23Read →
- You Need a Status PageIf you don't have a status page, you're failing as a company. You need a status page. I'll explain why in this post, learn why customers are leaving you ...2015.11.10Read →
- Free Android Development VideosNew free Android screencasts on Caster.io covering RxJava, Timber logging, build variants, CircleCI, Espresso 2, and Android Studio shortcuts.2015.10.27Read →
- RxJava with AIDL ServicesA 3 minute read that demonstrates how to use RxJava with AIDL Services in order to make the interaction with AIDL much cleaner and easier to consume.2015.09.08Read →
- Quick and Easy StateListDrawables in Android with ONE PNGSkip exporting a PNG per button state. Build an Android StateListDrawable from one PNG at runtime with a small DrawableUtil helper class.2015.06.29Read →
- Why You Should Use a GIT SHA in Your Crash ReportingStop guessing which release a crash came from. Embed your git SHA in Crashlytics via BuildConfig so every crash traces to an exact commit.2015.06.24Read →
- A Stereotypical DayA tattooed coffee shop owner and a doctor drinking beer at 8am taught me how fast and wrong snap judgments about people really are.2015.05.19Read →
- The Single Best Thing You Can Do For Your CareerPublic speaking changed my career more than anything else. My first terrifying talk in 2008 eventually led to going full-time independent.2015.04.02Read →
- RxJava with Dan LewPart 2 of our two-part Fragmented Podcast series on RxJava with Dan Lew is out now on iTunes, Stitcher, PocketCasts, or streaming online free.2015.04.01Read →
- Fragmented Podcast Episode 2We just released Episode #2 of the Fragmented Podcast. This week Kaushik and I discuss our IDE of choice – Android Studio (and IntelliJ). Enjoy. 🙂2015.03.03Read →
- Learning To Program SucksI didn't touch a computer until age 21. Here's the messy truth about learning to code from scratch, and why quitting is the only real failure.2015.02.25Read →
- Announcing Fragmented – A Podcast for Android DevelopersAnnouncing Fragmented, a new podcast on Android development I'm co-hosting with Kaushik Gopal, covering best practices and patterns.2015.02.20Read →
- Is Google IO Worth It?Running the real numbers on whether Google I/O is worth roughly $7,500 for an independent consultant, plus what a disappointing 2014 conference taught me.2015.02.16Read →
- 3 Things You Can Do To Improve Your Quality of Life On Social MediaThree simple social media habits that improved my life: kill negative posts, unfollow people who drag you down, and never feed the trolls.2015.02.06Read →
- It Ships. It’s Profitable. It’s Important.A story about a poorly built insurance app generating six million a month -- why shipped and profitable beats elegant code, regardless of stack.2015.01.21Read →
- Android Studio Espresso 2.0 ClassNotFoundExceptionEspresso 2.0 throwing ClassNotFoundException in an app that also uses Dagger? Exclude the javax.inject group from the espresso-core dependency.2015.01.13Read →
2014 16
- Diff Before CommitWhy you should always review a diff before committing - plus how to do it fast from the CLI or with a one-key IDE shortcut in Android Studio.2014.12.08Read →
- Three of the Best Audio Purchases I’ve Ever MadeMy top three audio purchases after years of daily use: cheap JVC in-ear earbuds, a Bose SoundLink Mini, and a Sonos Play 5 speaker system.2014.08.27Read →
- Why I Use Crashlytics – Part 2Part 2 on Crashlytics: how MyFitnessPal used crash and device data to decide which bugs deserve a hotfix versus the next release cycle.2014.08.14Read →
- Why I Use CrashlyticsWhy Crashlytics beats Bugsense, Crittercism, and ACRA for free, scalable crash reporting, and how I set it up across Android apps.2014.07.23Read →
- Your Desk Job is Killing You and Your Posture SucksMy desk job wrecked my posture. Here's how a standing desk, Esther Gokhale's book, and daily foam rolling and lacrosse ball work fixed it.2014.06.13Read →
- Inspiration is PerishableInspiration has a short shelf life -- when peak creative energy hits, drop everything and use it now, because it rarely comes back the same way twice.2014.05.30Read →
- Android From The TrenchesIn this video I cover my experience in having two apps featured in the top 100 free category on Google Play for the last 3 years. Tips, Tricks and more ...2014.04.29Read →
- AARRR Metrics Apply To All BusinessesA contractor refused to let me sign and pay remotely, forcing an office visit -- a textbook failure of the Referral step in Dave McClure's AARRR metrics.2014.04.21Read →
- Bootstrap Faster In One StepBootstrap faster by simply doing less. Test your assumptions then refactor to find the optimal path. Use lean methodologies to your advantage.2014.03.22Read →
- The Best Parent I Ever KnewThis is a story of the best parent I ever knew. Funny thing is ... I was the best parent I ever knew ... before I had kids.2014.03.21Read →
- Android JobsI just launched AndroidJobs.IO, a site that lists only the best Android Jobs from top notch companies such as Square, Etsy, Pandora and many more.2014.03.18Read →
- Monetizing FailureIf I told you that a company has recently made over 3 million dollars monetizing failure, would you believe me? Well, its true. Keep reading for more info.2014.02.26Read →
- Only Perform The Most Valuable Task and Outsource the RestGet your time back. Learn how to break down a task so that you can identify your most valuable input and how to outsource the rest.2014.01.30Read →
- How To Hire Outsourced DevelopersI devised a process on how to hire outsourced developers using a simple four step process - Job Posting, Prelim Review, Programming Challenge and Final ...2014.01.15Read →
- How to Hire ProgrammersI figured out how to hire programmers while saving time/money using a four step process - HR/Tech Screening, Programming Challenge and culture fit eval.2014.01.13Read →
- Robolectric ShadowTaskStackBuilderRobolectric has no ShadowTaskStackBuilder, so tests relying on TaskStackBuilder fail. Here's a minimal custom shadow to get them passing again.2014.01.06Read →
2013 11
- Working RemoteHappier & more productive employees work remotely. Working remote has proven to be more effective for a company. This is a review of the book, Remote.2013.11.12Read →
- Android Bootstrap and Android StudioPorting Android Bootstrap to Gradle and Android Studio, plus AppCompat, a navigation drawer, and Picasso -- and why raising minSdkVersion to 15 makes sense.2013.11.09Read →
- Loading Remote Images in Android with UrlImageViewTired of scattering Picasso calls across your Android codebase? Wrap it in a custom UrlImageView with Dagger injection. Code included.2013.08.15Read →
- Android Bootstrap Updated to Include a Navigation DrawerAndroid Bootstrap gets a navigation drawer via SimonVT's Menu Drawer library, plus updated Dagger, Otto, and HTTP-Request dependencies.2013.07.09Read →
- Android Studio – Tips and Tricks Part 2Part 4 of my Android Studio series: create layout files on the fly, generate XML drawables in seconds, and speed up day to day coding.2013.06.21Read →
- Android Studio – Tips and Tricks Part 1Part 3 of my Android Studio tips and tricks series: quick file navigation, plus creating string and dimens.xml resources on the fly.2013.06.06Read →
- Android Studio – Setting up an EmulatorPart 2 of my Android Studio video series: where the SDK actually lives now, and how to set up and launch an emulator for development.2013.05.20Read →
- Getting Started with Android StudioLearn the how to use Android Studio in this quick Getting Started video, produced by best Selling Android development author Donn Felker2013.05.16Read →
- Hi Performance JSON Parsing in AndroidLearn how to parse large JSON files and streams (from API's) using Jackson's Streaming Parser.2013.04.15Read →
- Ruby 1.9.3 [BUG] Segmentation with rspecA leftover binding_of_caller gem in the Gemfile caused segmentation faults running rspec under Ruby 1.9.3. Here's how I tracked it down.2013.03.21Read →
- Android Fragmentation – The Business ReasonAndroid Fragmentation exists, its rampant and developers and companies are paying the price in development costs. Why does it happen? Business decisions ... 2013.01.03Read →
2012 13
- The Innocence is LostA reflection on the Sandy Hook shooting after realizing my family once shopped at the same Walmart the victims' parents likely also shopped at.2012.12.15Read →
- Introducing Android Bootstrap – A Comprehensive Android Template ProjectThe most comprehensive Android Template Project available - Android Bootstrap. Includes RoboGuice, Action Bar Sherlock, GSON, http-request, and much more.2012.10.17Read →
- Overcoming Coffee with Yerba MateI was hooked on coffee for years. Not anymore! Learn how to quit drinking coffee by enjoying Yerba Mate.2012.08.15Read →
- IKEA Standing Desk – Two Weeks LaterA positive and negative report of the effects of working at my IKEA Stand Up Desk after two weeks. After two weeks I felt great ..2012.07.23Read →
- Android Native Emulator with Google Maps – ProTipLearn how to speed up development by using the Android Native Emulator and how to start the emulator via a bash_profile alias.2012.07.02Read →
- Node.js with Express 3 res.json ChangesUpgrading to Node 0.8 and Express 3 broke res.json(data, status), the param order flipped to res.json(status, data). Here's the fix.2012.06.27Read →
- Stop Asking How and Just Do ItStop hunting for a technical co-founder before you've proven your idea works. Start executing yourself first - that's what actually attracts one.2012.06.18Read →
- Maintain Velocity or SinkA startup is like an ATV hydroplaning over water: lose velocity and you sink. Why momentum, not perfection, keeps a project alive.2012.05.31Read →
- Phoenix Mobile FestivalA new Phoenix-area conference just launched, the Phoenix Mobile Festival, and I'm speaking on working with Android Fragments this Saturday.2012.04.16Read →
- Robolectric and Roboguice not Injecting ViewsRoboguice will inject views under test when using Robolectric, but if the xmlns is anything other than android then the view will be null.2012.03.27Read →
- Waterbottles for NerdsAfter years of leaky bottles, the CamelBak Podium Chill and Nalgene Tritan Grip-N-Gulp for kids finally solved my desk-hydration problem.2012.03.24Read →
- Airport Extreme and Brother 2170w SetupStep-by-step fix for pairing a Brother HL-2170W wireless printer with an Apple Airport Extreme when the official setup instructions don't work.2012.02.01Read →
- Minimum Viable ProgrammingStop over-engineering your MVP. Minimum viable programming means shipping the ugly hack first and cleaning up code only once it makes money.2012.01.10Read →
2011 24
- The Wrong Time and Wrong Market (or Failing in the Entertainment Industry)How I sank $140K over 7 years running an indie record label, why it failed, and the hard lessons on accounting, contracts, and cutting losses early.2011.12.14Read →
- Building an Android Notification BubbleHow to build an iOS-style red notification bubble in Android using an XML drawable and FrameLayout, with no 9-patch images required.2011.12.02Read →
- Android Validation with EditTextSkip the validation dialog box. Android's EditText has a built-in setError method that shows an inline icon and popup message instead.2011.11.23Read →
- What’s New in Android Development SlidesSlides from my 'What's New in Android Tablet Development' session at AnDevCon, covering the latest tablet APIs, tools, and SDK changes.2011.11.07Read →
- AnDevCon Tablet Programming Workshop PresentationFor those of you who attended todays workshop at AnDevCon II, here is the PDF of the presentation that we covered today. Enjoy!2011.11.06Read →
- Android Tablet Programming Class at AnDevCon IIILogistics for my Hands-On Android Tablet Programming class at AnDevCon III: prerequisites, what to install, and what to bring to keep up.2011.10.26Read →
- I’m Teaching a Free Android Tablet Programming Class Oct. 25th in AZI'm teaching a free, hands-on Android Tablet Programming class October 25th at Gangplank in Arizona -- seats are limited, register only if you're sure.2011.10.13Read →
- Android’s Locale Implementation Is BrokenAndroid devices only ship with a subset of locales installed, so Currency and DateFormat can render wrong or garbled for locales you need.2011.08.23Read →
- Android: Centering text between two other ViewsUse layout_weight on a middle TextView to spring-load a bullet separator that stays centered between two dynamic-length text views in Android.2011.08.03Read →
- Android: Rounded Corners with a Bevel/Drop ShadowHow to give Android layouts rounded corners with a bevel/drop shadow using one XML layer-list drawable instead of many 9-patch images.2011.08.01Read →
- Retaining and Acquiring Talent in the Face of Rising (Energy) CostsHiring is expensive and gas prices keep rising. Why letting employees work remotely is the simplest way to cut costs and keep good people.2011.06.28Read →
- Trusting Android Certificates, Part DuexHow to get Android to trust a server signed by a real CA like Thawte, not just a self-signed cert, by building the keystore correctly.2011.06.13Read →
- IntelliJ – Waiting for ADBFix for IntelliJ 10.5 freezing on Waiting for ADB during Android debugging -- invalidating caches and restarting the IDE clears it right up.2011.05.19Read →
- Taxman, You’re Just Too Much (Why I’m Moving)Why I'm moving my bootstrapped startups from Minneapolis back to Phoenix - mostly taxes and cost of running a lean business, plus what's next for me.2011.04.29Read →
- Living Together Harmoniously – IntelliJ and MavenGetting No valid Maven installation found in IntelliJ? Skip the env variable rabbit hole and just set the Maven home path in IDE settings.2011.03.16Read →
- JSONView – The Sweet little FireFox PluginJSONView turns ugly raw JSON API responses into readable, formatted output right in Firefox -- a small plugin that's a real productivity boost.2011.02.18Read →
- Android: A Simple Eula for your Android AppsA drop-in SimpleEula.java class that shows your Android app's EULA once per version using shared preferences, instead of nagging users on every launch.2011.02.17Read →
- ASP.NET MVC: Building Web API’s with HeaderValueProviderBuild a custom IValueProvider for ASP.NET MVC that hydrates your models straight from HTTP request headers instead of scrubbing them by hand.2011.02.16Read →
- Empty Folders: A git svn gotchaA git-svn gotcha: git ignores empty folders, so deleting one only removes it for git users, leaving SVN users with a route-breaking folder.2011.02.15Read →
- MonoTouch: Copying a Preloaded DBHow to ship a preloaded SQLite database with a MonoTouch iOS app and copy it to the documents folder on first launch instead of seeding it live.2011.02.10Read →
- My Book Hits #1 on Nielsen BookscanMy book hit #1 across all programming book categories on Nielsen BookScan, outselling every .NET, iPhone, Java, and Rails title that week.2011.01.28Read →
- Android App Dev For Dummies: USB Driver InstallationGoogle moved the Android USB driver in SDK v9 from Available Packages to Third Party Add-ons -- an update to page 50 of my Dummies book.2011.01.13Read →
- Dummies Book: SDK PathAndroid Dummies book readers hitting a 'Could not find adb' error after an SDK update? Update your Eclipse ADT Plugin to fix the path.2011.01.11Read →
- My Favorite Git AliasTired of unreadable git log output, I found the git lg alias -- a one-line git config addition that makes your commit history actually scannable.2011.01.04Read →
2010 67
- Already a Second Pressing of Android App Dev for DummiesAndroid Application Development For Dummies sold out its first print run and went back to press in under a month -- thanks to readers who picked it up.2010.12.30Read →
- Android App Dev for Dummies & Motorola DroidsMotorola Droid won't connect to Eclipse for debugging? Grab this specific USB driver version and installer link that fixed it for a reader.2010.12.26Read →
- IntelliJ Android Layout LiveTemplatesA set of free IntelliJ live templates for Android XML layouts -- shortcuts for buttons, list views and more to speed up writing view code.2010.12.23Read →
- An Annoying IntelliJ Android Build IssueIntelliJ threw a phantom 'apk.res not found' build error after a Git branch switch -- the fix was re-selecting the target Android platform in project settings.2010.12.21Read →
- Beyond Dummies: Improving Performance on the ListViewA follow-up to my Android Dummies book showing how view recycling with convertView speeds up ListView rendering on lists with thousands of items.2010.12.07Read →
- IntelliJ Keyboard ShortcutsWhy I switched from Eclipse to IntelliJ for Android development, plus a link to the keyboard shortcuts PDF I couldn't easily find anywhere else.2010.11.15Read →
- Setting up an Android Build Server – Part 4: Communicating With GithubPart 4: connecting a headless Android build server to GitHub by installing Git, generating SSH keys for the hudson user, and setting identity.2010.10.26Read →
- Setting up an Android Build Server – Part 3: Installing the Android SDKPart 3: installing the Android SDK on a headless Ubuntu server by tunneling the GUI installer over SSH -X since there's no CLI installer.2010.10.25Read →
- Setting up an Android Build Server – Part 2: Installing HudsonPart 2 of setting up an Android build server: installing Hudson CI as a Debian package on headless Ubuntu, plus the daemon dependency fix.2010.10.22Read →
- Setting up an Android Build Server – Part 1: The ServerPart 1 of building an Android CI server on headless Ubuntu 10.04: getting add-apt-repository working and installing Java before Hudson.2010.10.21Read →
- Presentation Materials from TCCC9Slides from my Advanced Android talk at Twin Cities Code Camp 9 are now posted on SlideShare for anyone who attended or missed it.2010.10.14Read →
- Minnesotas Developers Conference MaterialsDownload the full working Android demo app I ran out of time to finish building live during my Minnesota Developers Conference presentation.2010.10.05Read →
- The WP7 Fragmentation ChallengeComparing how Android, iPhone, and WP7 handle OS fragmentation across carriers, and why Microsoft's carrier-approval model will not stay fast.2010.09.07Read →
- HDC10: Hands-on-Lab – Project SolutionsSource code and module-by-module GitHub branches for the HDC10 Android hands-on lab, including extra menus, dialogs, and custom styling.2010.09.06Read →
- Heartland Developers Conference – Next WeekHeading to Heartland Developers Conference to teach a 4-hour Android development lab and give a talk on building and shipping an app live.2010.09.02Read →
- ModelBinding ASP.NET MVC and Multiple Field ValidationIn ASP.NET MVC, add two ModelState errors -- one with an empty message -- to highlight both fields while showing only one validation message.2010.08.17Read →
- MacBook Pro – Windows 7 Boot to VHDHow to run Windows 7 from a bootable VHD on a Boot Camp MacBook Pro, including the bcdedit fix for duplicate boot loader name entries.2010.08.17Read →
- Android Library Project Reference Not ShowingEclipse wouldn't recognize my Android Library project reference. The fix: spaces and periods in project names break it. Rename and restart.2010.08.13Read →
- HowTo: Android – Full and Lite VersionsHow to share one codebase between full and lite Android app versions using project libraries instead of duplicating projects or repackaging.2010.08.05Read →
- Android For Dummies & TekPubMy Android book and the Introduction to Android TekPub video series aren't competing, they cover different example apps, so pair them up.2010.07.22Read →
- Android Development For DummiesAnnouncing that I'm writing the first official Android Application Development For Dummies book, due out this fall. Pre-order now.2010.07.21Read →
- Android: ‘Must Override a Superclass Method’ ErrorsGot flooded with Must Override a Superclass Method errors after a teammate imported my GitHub project? Set Eclipse's compiler to Java 1.6.2010.07.06Read →
- Gotchas with Rooting a MyTouch SlideRooting a MyTouch Slide and stuck in the recognition loop? Two gotchas that fixed it for me: precise USB timing and using the stock SD card.2010.06.29Read →
- Android App – Eventdroid ReleasedReleased Eventdroid, the first Android barcode scanner app for Eventbrite check-ins, with manual check-in as a fallback for attendees without a scan.2010.06.28Read →
- Pruning Elmah Files with PowershellA simple PowerShell script to prune old ELMAH XML error logs, keeping only the most recent N files so Elmah.axd stops crawling to a load.2010.06.22Read →
- Android: Db4o StackOverflowErrordb4o was throwing StackOverflowError on Android after weeks of trimming the object model -- implementing TransparentActivation finally fixed it.2010.06.21Read →
- Db4o’s Java Doc/Documentation/Help in EclipseHow to wire up db4o's Javadoc in Eclipse so hovering over an API call in your editor shows the real documentation instead of nothing.2010.06.12Read →
- A Poll: Web Api CallsA quick take on API design: empty result sets are valid responses, not errors -- reserve error documents for actual failures like a bad API key.2010.06.11Read →
- The Customized Android UI ProblemHTC and T-Mobile's Sense/Espresso skins bury stock Android under gradients and glass icons. Just let users choose vanilla Android at setup.2010.06.10Read →
- Going Android: Which Device To Pick?Rating the early Android phones, G1, Behold II, MyTouch, Droid, Nexus One, Incredible, Evo 4G, and why you should just buy the best one you can afford.2010.06.07Read →
- ASPNET MVC: Handling Multiple Buttons on a Form with jQueryHow to handle multiple submit buttons in one ASP.NET MVC form using jQuery to swap the form action, keeping controller actions clean and simple.2010.06.04Read →
- Desert Code Camp: AndroidSlides and code from my Introduction to Android Development talk at Desert Code Camp - grab the demo repo and follow along yourself.2010.05.15Read →
- Desert Code Camp Tomorrow!Announcing two talks at Desert Code Camp: Introduction to Android Development and ASP.NET MVC2 with the Spark View Engine. Come say hi.2010.05.14Read →
- Android: Odd Error in DefaultHttpClientDefaultHttpClient throwing Target host must not be null? Check your URI first, it is probably missing the http:// scheme prefix entirely.2010.04.29Read →
- New TekPub Episode is LiveEpisode 2 of my Introduction to Android series just went live on TekPub, and I'm speaking on the same topic at Iowa Code Camp this Saturday.2010.04.27Read →
- Android: Escaping Strings in EclipseEclipse has a hidden setting that auto-escapes strings pasted into a literal, so you stop hand-escaping huge JSON blobs for unit tests.2010.04.27Read →
- MVC: Unit Testing Action FiltersHow to unit test an ASP.NET MVC action filter by mocking ActionExecutedContext, RouteData, and the service locator instead of fighting HttpContext.2010.04.21Read →
- jQuery Tip: Brute Force Dirty Form DetectionA quick jQuery hack to auto-enable a disabled save button the moment any input on the form changes -- simple, if not the most performant, approach.2010.04.20Read →
- TCDG – Android Talk CodeYou can get the code from tonight’s talk on my GitHub page, located here. The code includes the actual application and all files required to run the app. Enjoy!2010.04.13Read →
- Intro to Android Development MaterialsSlides and sample code from my Intro to Android Development talk at Twin Cities Code Camp, posted here for anyone who came out or missed the session.2010.04.10Read →
- Twin Cities XNA Fragathon IIJoin the 2nd annual Twin Cities XNA Fragathon: a Halo gaming tournament and food drive for Second Harvest, with prizes at Microsoft.2010.04.05Read →
- Twin Cities Code Camp 8Giving an Android dev intro at Twin Cities Code Camp 8: SDK setup, OS architecture, and building a real app live for the Marketplace.2010.04.04Read →
- New DimeCast: Introduction to WP7New DimeCast screencast walks through creating a new Windows Phone 7 app from scratch and taking the WP7 emulator for a test spin.2010.04.02Read →
- TekPub: Introduction to Android SeriesA new TekPub video series where I build a real Android app from scratch, covering Eclipse, the Android framework, Java, and publishing to the Market.2010.03.31Read →
- No IE6 ActionFilter for ASP.NET MVCA crude but effective ASP.NET MVC ActionFilter, plus a follow-up jQuery plugin, that blocks IE6 visitors with a friendly upgrade message.2010.03.31Read →
- WP7 Emulator Screen Size ManagementUnlike bloated Android emulators, the WP7 emulator lets you scale its window size from the settings menu so it actually fits on your screen.2010.03.16Read →
- WP7 Boot to VHDSetting up WP7 dev tools on a Boot to VHD drive was painless: a Hello World app running in under 5 minutes, and it beats a VPC for real development.2010.03.15Read →
- ASP.NET MVC REST API WINDSOR CONTROLLER FACTORYWiring the ASP.NET MVC REST Toolkit's ResourceControllerFactory to use the Windsor container, so a REST API serving mobile clients gets DI throughout.2010.03.11Read →
- Slides from MVC2 TalkSlides from my What's New in ASP.NET MVC2 talk at the Twin Cities .NET User Group meeting are up for download, covering what changed in the new release.2010.03.07Read →
- I’m a Considered a Top Android Dev, Cool!Google's Android Market Seeding Program picked me as a top developer and offered a free Droid or Nexus One -- here's why, and which phone I'm hoping for.2010.03.04Read →
- Editable Grid / List Binding in MVC2How ASP.NET MVC2's built-in EditorFor and incremental sequencing let you build an editable grid/list without custom HTML prefix scoping.2010.02.27Read →
- ASPNET MVC2: TempData Now PersistsMVC2 changed how TempData persists: values now stick around until read, not just for one request, which can bite you with ModelStateToTempData.2010.02.26Read →
- My CODE Magazine Article Is LiveMy first CODE Magazine article is live, covering ASP.NET MVC with the Spark View Engine -- inline code, element constructs, partials, and layouts.2010.02.25Read →
- ASP.NET MVC TempData Extension MethodsStrongly typed TempData extension methods for ASP.NET MVC: Put and Get generics so you stop using stringly typed keys and casting exceptions.2010.02.25Read →
- Spaghetti Code Podcast: Android DevelopmentI joined the Spaghetti Code Podcast to talk Android development, mobile trends, and what Microsoft needed to do to compete in the mobile platform race.2010.02.23Read →
- Expanding Your Career: Mobile & API DevelopmentWhy REST APIs and mobile development, not just mobile apps, are becoming central to a software developer's career, using Twitter as the example.2010.02.17Read →
- Google Buzz: First ImpressionsFirst impressions of Google Buzz in 2010: a handy all-in-one inbox add-on, a privacy fiasco, and one more noisy input in an already crowded feed.2010.02.13Read →
- LINQ: ToLookup vs ToDictionaryToLookup and ToDictionary look alike but behave differently: one allows duplicate keys, the other doesn't. Here's the difference with code.2010.02.12Read →
- M-Audio with Windows 7 64bit and CamtasiaM-Audio MobilePre went silent after upgrading to Windows 7 64-bit. Here's the driver fix that got my Camtasia screencast audio working again.2010.02.09Read →
- Medium Trust is a PITAMedium Trust hosting turned a deleted controller reference into a 2.5-hour debugging nightmare. Why partial-trust .NET environments are a pain.2010.01.31Read →
- New DimeCast: Spark Partials Part 2Part 2 of the Spark View Engine Partials DimeCast digs deeper into undocumented features for building clean, well organized views.2010.01.28Read →
- I’ve Moved to WordPressWhy a die-hard .NET developer moved his blog to WordPress -- BlogEngine.NET kept breaking on RackSpace Cloud, and it was time to use what works.2010.01.28Read →
- MVC vs. WebForms. Stop It.Stop the ASP.NET MVC vs WebForms flame war -- pick whatever ships working software fastest for the team and problem in front of you.2010.01.22Read →
- GiveCamp 2010 A SuccessRecapping the first Twin Cities GiveCamp, a weekend where volunteer developers built a free software solution for the Animal Humane Society.2010.01.18Read →
- Shortcut: Including a NamespaceWithout ReSharper, the Visual Studio shortcut to auto-include a missing namespace changed in VS2010: it's now Ctrl+. instead of Shift+Alt+F10.2010.01.11Read →
- FIX: Failed to Generate a User Instance …Fix for SQL Server's failed to generate a user instance error: run your IIS app pool under an account with rights to create the DB.2010.01.10Read →
- New DimeCast Is Up: Spark Partials Part 1New DimeCast, part 1 of 2, covers using Partials in the Spark View Engine to keep your views clean, compartmentalized, and organized.2010.01.09Read →
2009 86
- New DimeCast is UpNew DimeCast covers Named Content Areas in the Spark View Engine and how to use them to keep your view content organized and structured.2009.12.29Read →
- Suspending Resharper 5ReSharper 5 replaced the old disable toggle with Suspend - here's how to map it to a shortcut so huge generated files don't lock up your IDE.2009.12.04Read →
- Frugally Increasing Employee MoralCutting free coffee and soda to save a few bucks tanks morale far more than it saves. Cheap perks are a cheap insurance policy on retention.2009.11.07Read →
- Android Tip: Watch Screen SizesWith more Android phones shipping in different screen sizes and densities, test your app across all of them in the emulator, not just one.2009.11.07Read →
- Sending Email Through .NET Blog Engine on RackSpace CloudBlogEngine.NET contact form email silently failing on Rackspace Cloud? Here's the exact SMTP auth, port, and user settings that actually work.2009.11.04Read →
- TCCC7 MaterialsBelow are the materials from my Twin Cities Code Camp 7 Presentation. Both code and PowerPoint are included. Enjoy! Code (~6MB) PowerPoint (489K)2009.10.27Read →
- Twin Cities Code Camp 7Speaking at Twin Cities Code Camp 7 on ASP.NET MVC with the Spark View Engine, a free event at the U of M. Register ahead of time.2009.10.22Read →
- Materials from HDC09 – Testing With Mocks TalkSlides and buildable source code from my Testing With Mocks lightning talk at Heartland Developers Conference, built around TypeMock Isolator.2009.10.18Read →
- Twin Cities Dev. Guild – Testing With Mocks MaterialsSlides and code from my Testing with Mocks talk at the Twin Cities Developers Guild. You'll need TypeMock installed to build the sample.2009.10.16Read →
- Materials from HDC 09 – Spark View Engine TalkDownload the slides and full demo code from my Heartland Developers Conference 2009 talk on ASP.NET MVC with the Spark View Engine.2009.10.15Read →
- MDC 2009 PresentationOur projector died mid-talk at MDC 2009, so here's the full screen recording, slides, and source code for the Spark View Engine session.2009.10.12Read →
- MDC 2009 – PresentationSlides and source code from my MDC 2009 talk on ASP.NET MVC with the Spark View Engine. The original screencast has since been retired.2009.10.12Read →
- I’m an ASP InsiderAnnouncing that I've joined the ASP Insiders, a small group of developers giving Microsoft's ASP.NET product teams direct feedback and access.2009.10.10Read →
- TypeMock 5.3.5 – WasCalledWithArgumentsTypeMock Isolator 5.3.5 finally adds WasCalledWithArguments, letting you assert mock call arguments the way Rhino Mocks always could.2009.09.21Read →
- An Article Every Manager, VC and Angel Investor Should ReadPaul Graham's Maker's Schedule vs. Manager's Schedule explains why meeting-packed days kill developer output -- required reading for anyone who schedules devs.2009.08.25Read →
- Mobile Software DevelopmentWhy a .NET developer dove into Android in 2009: mobile is the future, relearning Java, and getting Android talking to .NET over REST/JSON.2009.08.21Read →
- Android & ASP.NET MVCPaired Android with ASP.NET MVC and Spark to build a REST/JSON backend instead of wrestling with WCF's REST implementation -- worked great.2009.08.19Read →
- Auto-Creating Your DB with Active RecordHow to auto-create a SQL Express database and schema on the fly with Castle ActiveRecord, so new devs can spin up a working DB with zero setup pain.2009.07.13Read →
- Unit Testing you Container DependenciesA unit test that catches missing Castle Windsor container registrations before runtime, by walking every handler and forcing resolution.2009.07.10Read →
- ASP.NET MVC – Windsor Container Controller FactoryHow to build a custom ASP.NET MVC ControllerFactory backed by the Windsor container, so controllers can take dependencies via constructor injection.2009.07.10Read →
- A True Life Git Story …A week with zero WiFi in rural South Carolina turned me into a Git convert -- full branch, merge, and revert history with no connection required.2009.07.07Read →
- Running Your Android App on a DeviceThe Android dev guide's device-testing steps left out one thing: switching Eclipse's Run Configuration target to manual to get the device chooser.2009.06.29Read →
- Could Not Import Contacts Into G1 From CSV…Google Contacts CSV import silently dumps phone numbers into Notes unless you fill the Section 1/2 Description fields with 'Personal'.2009.06.26Read →
- Twin Cities Pragmatic/ALT.NET Beer TomorrowReminder: the Twin Cities Pragmatic Beer meetup, also known as Twin Cities ALT.NET Beers, happens tomorrow at the Herkimer in Uptown Minneapolis.2009.06.24Read →
- LINQ: Single() vs First()First() and Single() look similar but throw under different conditions. A quick reference table for when each LINQ method fails or succeeds.2009.06.23Read →
- LINQ: Any() vs. Count()Checking Count() > 0 enumerates your whole LINQ sequence. Any() stops at the first match. Here's why that swap matters for performance.2009.06.22Read →
- Hangin’ in the LoungeWhy I picked The Lounge as my blog's exclusive ad network over the big clunky banners I'd used before, and how the deal came together.2009.06.19Read →
- Beginning Google Android DevelopmentFirst steps into Android development with Eclipse, the ADT plugin, and the emulator, plus early plans to experiment with the accelerometer.2009.06.19Read →
- New DimeCast: Exploring Expressions with SparkNew DimeCast covers using expressions in the Spark View Engine, from simple math-based expressions up to nested if-then-else logic in views.2009.06.18Read →
- ASP.NET MVC without Installing the MVC BitsCan't open an ASP.NET MVC project without the full MVC bits installed? Strip the MVC ProjectTypeGuid from the csproj file and fix your references.2009.06.16Read →
- New DimeCast: Exploring how to use Global Vars & View Data in SparkNew DimeCast on the Spark View Engine covers global and local variables, plus strongly typed and weakly typed ViewData in your views.2009.06.11Read →
- Auditing with Castle Active RecordHow to audit every save, update, and delete in Castle ActiveRecord using an NHibernate interceptor, without touching a single line of existing code.2009.06.09Read →
- Running the M-Audio Mobile-Pre under Windows 7 RCThe M-Audio Mobile-Pre's Vista driver won't install on Windows 7 RC as-is. Running the installer in Vista compatibility mode gets it working.2009.06.05Read →
- Presenting at the Minneapolis ALT.NETGiving my Testing with Mocks talk at the Minneapolis ALT.NET meeting on September 17th. Space is limited, so sign up on the site early.2009.06.05Read →
- Bing Ringtone – The RemixA remix of Bing's original ringtones, made because the real ones sounded far too soft and cutesy for a company trying to take over search engines.2009.06.05Read →
- DimeCast – Adding Intellisense to your ASP.NET MVC Spark ProjectA new DimeCast screencast shows exactly how to get Intellisense working in Visual Studio 2008 with the Spark View Engine for ASP.NET MVC.2009.06.04Read →
- Spark View Engine @ the Minneapolis ALT.NET Meeting – June 18th @ 6pmLouis DeJardin is giving an intro to the Spark View Engine at the Minneapolis ALT.NET meeting, June 18th at 6pm - registration required, space limited.2009.06.02Read →
- Setting up a Default Sequence Template for the MPC1000Tired of renaming the same MPC1000 tracks every session? Save a named template sequence to the AUTOLOAD folder so it loads automatically at boot.2009.05.31Read →
- Spark Part 1 DimeCast AmendmentA correction to my Spark View Engine DimeCast: running ASP.NET MVC on IIS 7 needs extra UrlRoutingModule and UrlRouting.axd entries in web.config.2009.05.29Read →
- Saying Hello to the Spark View EngineThe first episode of a new DimeCasts.net screencast series introducing the Spark View Engine for ASP.NET MVC development is now live and posted.2009.05.27Read →
- Updated Visual Studio SettingsUpdated my dark Visual Studio theme settings to properly support Spark View Engine syntax highlighting, with a free download included.2009.05.26Read →
- Code Review Tip: Using the ‘warning’ Preprocessor DirectiveUsing C#'s #warning preprocessor directive to flag remote code review feedback so it shows up as a build warning instead of getting lost in email.2009.05.26Read →
- Booting to a VHDA quick pointer to Hanselman's writeup on booting Windows directly from a VHD, handy for anyone who runs all their development inside a VM.2009.05.22Read →
- Twin Cities Pragmatic Beer TonightIts tonight at Kierans in Downtown Minneapolis. See you there! More info here.2009.05.21Read →
- The new MarketWatch.comAfter 5+ months and an NDA, I can finally share that I helped lead the Magenic team behind the complete ASP.NET MVC overhaul of MarketWatch.com.2009.05.18Read →
- MVC HtmlHelper.ActionLink with Css ClassASP.NET MVC's HtmlHelper.ActionLink chokes on class as a reserved word in htmlAttributes -- use @class instead and your CSS class renders fine.2009.05.14Read →
- Productivity Boost: The SVN Switch CommandSwitching branches by re-checking out a huge SVN tree wastes time. The svn switch command repoints your working copy in seconds, not minutes.2009.05.11Read →
- New Twin Cities Pragmatic Beer EventsTwo new Twin Cities Pragmatic Beer meetups are on the calendar: a repeat at Kierans Irish Pub and a June gathering at The Herkimer.2009.05.08Read →
- Tonight, ReMixLast week, I posted info about the reMix event happening here in Minneapolis. It's tonight! Don't forget! See you there.2009.05.08Read →
- Dual Monitor Support for Windows 7 RC Dell D630Dual monitor support broken after installing Windows 7 RC on a Dell D630 laptop? Here's the exact video driver that fixes it for good.2009.05.07Read →
- Castle Windsor 2.0 RTMCastle Windsor 2.0 has finally RTM'd after years of running off the trunk build. A quick note on the release and where to grab the new bits.2009.05.06Read →
- reMix Event in MinneapolisA Minneapolis .NET/Silverlight user group meetup recapping MIX09 highlights, Silverlight 3, Expression Blend 3, plus a private Star Trek screening.2009.05.01Read →
- ASPNET MVC IIS7 and Bad RequestCustom 404 handling working in Cassini but IIS7 returns Bad Request instead? Unlock the httpErrors config section with appcmd to fix it.2009.05.01Read →
- NCover Hangs on Configuring Profiler…NCover 1.5.8 hangs at Configuring Profiler on a large 53-project solution. The fix: switch to a licensed NCover 2 build for your CI server.2009.04.22Read →
- Twin Cities Give Camp PostponedIt has been moved to November 14th and 15th of 2009. Why? Get the inside scoop here.2009.04.21Read →
- Finding App_Data ProgrammaticallyServer.MapPath breaks in unit tests. Here's the AppDomain.CurrentDomain.GetData trick to find your ASP.NET MVC App_Data path anywhere.2009.04.14Read →
- IoC Auto Registration & Setter InjectionHow to inject a single config-driven property into one auto-registered controller in your IoC container without touching all the others.2009.04.13Read →
- A Very Cool WCF Tool: WCFTestClient.exeWcfTestClient.exe, bundled with Visual Studio, lets you invoke and test any WCF service endpoint without writing a client or generating a proxy.2009.04.10Read →
- Sending & Receiving Large FilesSending gigabytes of studio session files to collaborators without an FTP server: how I split, upload, and download large file batches.2009.04.09Read →
- Featured in the Spaghetti Code PodcastDonn talks mocking, testing, and day-to-day development practices in an interview on the Spaghetti Code Podcast with Microsoft's Jeff Brand.2009.04.07Read →
- TCCC6 Video InterviewTwin Cities Code Camp organizer Jason Bock caught me on camera again for a video interview, plus a short clip from my session at the event.2009.04.07Read →
- Twin Cities Code Camp 6 – Testing with Mocks – Code and PresentationCode and slides from my Testing with Mocks talk at Twin Cities Code Camp 6, including the TypeMock Isolator examples used in the demo.2009.04.04Read →
- Presentation Settings for Visual StudioA downloadable Visual Studio settings file with 16pt fonts everywhere, so your audience can actually read your code during a talk.2009.04.03Read →
- How to Use Rhinos AssertWasNotCalledHow to use Rhino Mocks' AssertWasNotCalled to prove a service method never fires when validation fails, with a working ASP.NET MVC example.2009.03.30Read →
- Castle ActiveRecord – NonUniqueObjectExceptionFixing Castle ActiveRecord's NonUniqueObjectException by evicting a cached NHibernate object from the session after you're done reading it.2009.03.29Read →
- Nine Questions with MeI sat down for Chris G. Williams' long-running Nine Questions interview series, joining a list of some pretty notable names. Here's the interview.2009.03.26Read →
- A New Development Term: Blackfield DevelopmentBrownfield development gone nightmare mode: legacy code so obscure and untested even its original authors can't explain it. I call it blackfield development.2009.03.25Read →
- ASP.NET App – is not a valid Win32 applicationGetting is not a valid Win32 application on an ASP.NET MVC app under IIS7? Enable 32-Bit Applications in the app pool's advanced settings.2009.03.24Read →
- Unit Testing JsonResult in MVCA simple trick for unit testing JsonResult in ASP.NET MVC: cast the anonymous type to a RouteValueDictionary and assert on its keys.2009.03.20Read →
- Cool YouTube Tip : SeekQuick YouTube trick: append #t=2m13s to any URL to jump straight to that timestamp, and use the start parameter when embedding videos.2009.03.20Read →
- AHK Script for Enabling/Disabling Spark IntellisenseAn AutoHotkey script that toggles Visual Studio between ReSharper and Spark View Engine intellisense with one keyboard shortcut, no manual menu digging.2009.03.02Read →
- An Exercise in Managing the MeasurementsNCover only profiles assemblies touched during test runs, so untested code vanishes from coverage reports. Here's the hack that forces it to load everything.2009.02.19Read →
- Fluent Func/Expression ReflectorA reader's cleaner take on getting property and method names via C# Expression/Func reflection, wrapped in a fluent, static NameOf<T> helper.2009.02.12Read →
- Build Report Will Not Show in CCNETA CruiseControl.NET gotcha: adding NCoverExplorer to dashboard.config needs both a CCNET service restart and an IIS reset, or the report never shows.2009.02.12Read →
- Using Expressions and Func as a Reflection ToolTired of magic string column names in Castle Active Record queries? Use Expression<Func<T>> lambdas to resolve property names at compile time.2009.02.10Read →
- Excluding Integration Tests from your Automated BuildHow to tag tests as Integration and exclude them from your CruiseControl.NET build using NUnit categories and the NAnt NUnit2 task.2009.02.09Read →
- Cannot Install Programs on Virtual PCA fix for Virtual PC installs hanging forever after joining a domain: uninstall the Virtual Machine Additions, install your app, then reinstall them.2009.02.02Read →
- MNGroupsI started MNGroups, a single Google Group uniting the Twin Cities' scattered tech meetups so we can collaborate across community lines.2009.01.30Read →
- Introducing Twin Cities Pragmatic BeerLaunching Twin Cities Pragmatic Beer, a casual no-RSVP happy hour where technologists on any stack show up to a local pub and talk shop.2009.01.28Read →
- My ReSharper TemplatesFree ReSharper live templates and file templates for NUnit tests and Rhino Mocks, built on Bellware's snippets plus my own additions. Downloadable.2009.01.24Read →
- PowerShell TFS WorkSpace Initialization ScriptA PowerShell script that automates TFS workspace setup for new developers, so they don't have to learn workspace mapping by trial and error.2009.01.22Read →
- New Dime Cast upI’ve got another Dime Cast up here. The theme of this Dime Cast is Learning how to consume a WCF Service. View the Dime Cast here.2009.01.22Read →
- NAnt: SdkInstallRoot has not been setFix the NAnt build error where sdkInstallRoot has not been set by pointing nant.exe.config at the correct Windows SDK registry key instead.2009.01.14Read →
- ASP.NET MVC Managed RequestsFixing SessionStateTempDataProvider requires SessionState to be enabled in ASP.NET MVC: add runAllManagedModulesForAllRequests to your config.2009.01.14Read →
- Using Prisms (CompositeWPF) EventAggregatorA walkthrough of Prism's EventAggregator pattern, how it decouples publishers and subscribers in WPF apps without bubbling events through every layer.2009.01.06Read →
- Stereotyping Social-Network UsersA tongue-in-cheek field guide to social network user types - the Weekday Warrior, the Extremist, the Politician, and more patterns I've noticed.2009.01.02Read →
2008 108
- Update to Store Locator ProjectFixed a rookie JavaScript bug in my open source Store Locator project after learning real companies were quietly using it in production.2008.12.31Read →
- Sometimes you just have to burn oneWhy I moved my blog's RSS feed to FeedBurner: real subscriber stats, less bandwidth strain, and a feed URL that survives moving your blog.2008.12.30Read →
- New Dime Cast: Migrating from .asmx web services to WCF web servicesNew DimeCast screencast walks through migrating an old ASMX web service over to a modern WCF web service, covering the why and the how.2008.12.30Read →
- Beginning Programming Audio: ASIO4ALL Is PickyFixing crackly MIDI audio latency in NAudio projects with ASIO4ALL, and the odd fix: closing any browser tab playing YouTube in the background.2008.12.29Read →
- Prism Drop 8 Breaking ChangesPrism Drop 8 renames CompositeWpfEvent to CompositePresentationEvent and replaces ModuleCatalog.Groups.Add with a simpler AddModule call.2008.12.23Read →
- Intro to WCF Screen Cast Now AvailableA new screencast on DimeCasts.net walking through the ABCs of WCF and showing, step by step, how to build and run your very first WCF service.2008.12.16Read →
- Speaking at the Twin Cities Code Camp 2009Speaking on Testing With Mocks at Twin Cities Code Camp 2009 - how mocks let you test interactions and state without building full object graphs.2008.12.10Read →
- Twin Cities Give Camp – April 26th and 27th 2009Twin Cities Give Camp is set for April 26-27, 2009, and we're lining up charities focused on kids, the disabled, elderly, and animals.2008.12.05Read →
- How To: REST Services in WCF 3.5 Part 2 – The POSTPart 2 of the WCF REST series: adding a POST endpoint with WebInvokeAttribute and testing it with Fiddler, using a silly insult service as the demo.2008.12.04Read →
- Dime Cast on RESTful WCFA 10-minute screencast on DimeCasts.net walks through building a WebGet-based RESTful WCF service - part 1 of a series on WCF REST.2008.12.02Read →
- SVCUtil & VS2008Correcting myself: Visual Studio 2008 doesn't actually use SvcUtil under the hood for service references - it has its own internal proxy generator.2008.12.02Read →
- Technical Timeout 1Introducing Technical Timeout: a short break from tech talk for a laugh, starting with the Terry Tate Office Linebacker video (headphones on, PG-13).2008.11.25Read →
- Store Locator – Moved to CodeplexMy ASP.NET Store Locator project outgrew its old home, so I moved the source and ongoing development over to CodePlex to manage it more effectively.2008.11.23Read →
- Debugging Silverlight TipSilverlight app showing a blank screen with a vague 'Error on page'? Turn on Common Language Runtime Exceptions in Visual Studio to see the real error.2008.11.21Read →
- TCCC 5 Interview on You TubeA short YouTube interview from Twin Cities Code Camp where Jason Bock and I talk about my session and my time working at McFarlane Toys.2008.11.17Read →
- XamlParserException – AG_E_PARSER_BAD_TYPEFixing Silverlight's cryptic AG_E_PARSER_BAD_TYPE error: add a Microsoft.Windows.Controls reference to your Prism Shell project, not just the module.2008.11.14Read →
- Silverlight Cross Domain IssueA Silverlight app calling a Java web service threw cross-domain security exceptions when run from disk, not from a web server. Here's the fix.2008.11.12Read →
- Speaking at Twin Cities Developers GuildSpeaking at the Twin Cities Developers Guild on the Dependency Inversion Principle, dependency injection, and IoC containers to make your code testable.2008.11.06Read →
- New GMail Mobile VersionThe new Gmail Mobile adds account switching and offline reading, but on Windows Mobile it is still Java and the address book keyboard is broken.2008.11.06Read →
- How To: Implement a simple REST Services in WCF 3.5 Part 1Part 1 of building a REST service in WCF 3.5: WebGetAttribute, WebHttpBinding, and WebServiceHost, walked through with a simple gas-price API.2008.11.03Read →
- Disabling/Turn off the WcfSvcHost Test Client in VS2008Stop Visual Studio 2008's WcfSvcHost test client from launching automatically - just delete one GUID from your project file's PropertyGroup.2008.11.03Read →
- How Can You Learn WCF?The two WCF books I actually recommend, in the order to read them, plus a complexity chart showing which one covers what topics best.2008.11.02Read →
- Loading PowerShell Profiles from Other Script FilesHow to load external functions into your PowerShell profile.ps1, plus a script to pull shared team profiles from a network share automatically.2008.10.29Read →
- TFS Dependency Replicator GotchaTFS Dependency Replicator throws a DirectoryNotFoundException when the destination file does not exist yet. Here is the workaround and a real fix.2008.10.28Read →
- How Did C# Get Its Name?C# was originally called Cool. Anders Hejlsberg explains why the name changed and where the sharp symbol's wordplay on C++ came from.2008.10.28Read →
- Integration TestingWhat integration testing actually means versus unit testing, with a worked C# example showing how to mock dependencies and test how layers interact.2008.10.24Read →
- Visual Studio Project MSBuild Import Error FixGetting a 'Microsoft.CSharp.targets was not found' error in Visual Studio? Swap $(MSBuildToolsPath) for $(MSBuildBinPath) in your project file.2008.10.20Read →
- TFS – Disabling Continuous Integration with NO-CIHow to stop a TFS 2008 check-in from triggering an endless continuous integration build loop, using the ***NO_CI*** comment trick.2008.10.17Read →
- GMail Tip – Finding Un-Read EmailThe fastest way to find unread email in Gmail: type label:unread into the search box and hit search, no digging through pages of mail.2008.10.17Read →
- The Importance of Incremental BuildsTFS 2008's default 'Full Build' cleans and re-fetches everything on every check-in. Switching to IncrementalBuild cut our 20-minute build to 4.2008.10.15Read →
- Google IG Home Page – RSS Feed IssuesGoogle IG's RSS reader silently stops updating when your feed has too many items, showing months-old posts. Keep feeds to 5-30 items to avoid it.2008.10.15Read →
- Windows se7en?Microsoft named its next OS Windows 7, so I gave it a better name: Windows se7en, an OS so gangster it'll cut you if you slip, son.2008.10.14Read →
- TFS Users & Groups with Active Directory PoliciesAD group changes can take up to 60 minutes to reach TFS security. Restart the TFS Task Scheduler service to force an immediate policy refresh.2008.10.14Read →
- Twin Cities Code Camp Presentation and CodeSource code and slides from my Twin Cities Code Camp talk on wiring the Windows Workflow Rules Engine into a WCF service for flexible rules.2008.10.13Read →
- Sleep Deprived WCF ErrorA WCF 'metadata unavailable' error, caused by a missing type in the namespace path or an enum using DataMemberAttribute instead of EnumMemberAttribute.2008.10.11Read →
- Dependency Walker & SP1 TFS 2008 Upgrade IssuesTFS 2008 SP1 upgrade fatal-erroring? A stray Dependency Replicator service was blocking IIS Admin - uninstall it, patch, then reinstall it.2008.10.10Read →
- Twin Cities Code Camp This WeekendQuick reminder: Twin Cities Code Camp is this weekend and I'm speaking on using the Workflow Rules Engine within WCF for business logic.2008.10.07Read →
- .NET 4.0 and Visual Studio 2010.NET 4.0 and Visual Studio 2010 are already coming with ALM features like Test Impact View, gated check-in, and branch visualization tooling.2008.10.07Read →
- My Visual Studio Settings – My Altered Vibrant Ink Settings SetupMy dark Visual Studio color scheme, an altered version of Vibrant Ink, as a downloadable vssettings file. Requires the Consolas font to look right.2008.10.07Read →
- 4 Common Follies Made In Unit/Integration TestingFour testing mistakes I've been burned by: skipping getters/setters, sharing a dev database, testing against live external services, and unfinished test stubs.2008.10.03Read →
- RuleSetDialog & LINQ QueriesCan you use LINQ inside the WF RuleSetDialog editor? No. Here's why it fails validation and a workaround using properties and methods instead.2008.10.02Read →
- That Sneaky .NET 3.5 External RuleSet Toolkit SampleThe .NET 3.5 External RuleSet Toolkit sample for externalizing Workflow's rule engine is oddly buried in the WCF samples download, not the WF ones.2008.09.30Read →
- Resizing a VHD and a VolumeRan out of disk space in a Virtual PC VHD? Here's how to resize it with VHDResizer, remount it, and extend the volume with diskpart.2008.09.26Read →
- New DigsI moved to Minneapolis and joined Magenic, a .NET consulting shop packed with MVPs, including Rockford Lhotka, creator of CSLA.NET.2008.09.24Read →
- Unit Testing – It’s not what most of you think …Most tests developers call unit tests are actually integration tests. Here's how dependency injection and mocking fix that, with real code.2008.09.19Read →
- Testing For Developers SeriesKicking off a series untangling the confusion around unit, integration, functional, regression, and load tests, with my own opinionated definitions.2008.09.19Read →
- Custom Google Maps Geocode Powershell CmdLetA custom Get-GoogleGeocode PowerShell cmdlet that geocodes one address, a list of addresses, or an entire file of them via the Google Maps API.2008.09.18Read →
- Why Windows Task Manager SucksWindows Task Manager can't tell you what's hammering your disk when svchost spikes. AnVir Task Manager Free actually shows you why.2008.09.17Read →
- Restoring a Dell Inspiron 6400 To FactoryDell's PCRestore.exe utility fails silently with no error text. Here's the actual System Restore path that resets an Inspiron 6400 to factory.2008.09.17Read →
- My 2009 Browser ForecastA gut-feeling, Twitter-fueled forecast for how the 2009 browser market shakes out, with a buzzy new upstart called Chrome stirring things up.2008.09.17Read →
- Little SophiaA rare non-technical post here: my daughter Sophia arrived September 10, 2008, a healthy 7lbs 8oz, via natural water birth. Mom and baby are great.2008.09.12Read →
- Book Review: Be PreparedA review of Be Prepared: A Practical Handbook for New Dads, the no-nonsense, funny alternative to typical sugar-coated new-parent books.2008.09.18Read →
- My Blog was down, Like Whoa.My old host accidentally deleted my account and the blog only survived by luck, not my backup plan. Moved hosts and learned the lesson the hard way.2008.09.09Read →
- You Received an Error. So what. Deal with it.A ThoughtWorks forum's ugly crash page is a reminder: always give users a friendly error message and a way to contact support, or you're losing them.2008.08.29Read →
- Mozilla UbiquityHands-on with Mozilla Ubiquity, the Firefox add-on that lets you type natural-language commands for weather, Wikipedia, translation, and email.2008.08.29Read →
- Unnecessary AbstractionsA code review facepalm: someone hand-rolled IP address parsing logic that .NET's built-in IPAddress class already handles perfectly.2008.08.27Read →
- Twin Cities Code Camp – Oct 11I'm speaking at the 5th Twin Cities Code Camp on Oct 11 about using the Workflow Rules Engine inside a WCF service for flexible rules.2008.08.27Read →
- Twin Cities Give Camp UpdateAn update on the Twin Cities Give Camp website, some ongoing hosting hiccups, and how to sign up to volunteer or sponsor the event.2008.08.23Read →
- Insane Flight PricesA quick rant about flight prices -- a short hop from Minneapolis to Des Moines quoted at over $700, cheaper to just make the 3.5-hour drive.2008.08.22Read →
- The Twin Cities Give CampLaunching Twin Cities Give Camp: a weekend where developers, designers, and DBAs build free custom software for local non-profits.2008.08.13Read →
- DiscountASP vs. MeA rant about DiscountASP.NET recycling its app pool every few minutes because of Community Server 2007's memory footprint, logging everyone out mid-post.2008.08.08Read →
- Is Premature Optimization Really Evil?A real story about an order system that broke under a sales spike, used to argue premature optimization is only evil when you optimize the wrong thing.2008.07.24Read →
- Passed the ASP.NET 3.5 ExamI passed the ASP.NET 3.5 beta exam at Tech-Ed 2008, which makes me a certified MCTS in both ASP.NET 2.0 and ASP.NET 3.5 now. Woohoo!2008.07.17Read →
- Mobilizing Your/My Blog – mobile.blog.donnfelker.comHow I used Mofuse to mobile-enable my blog and pointed a custom subdomain at it with a simple CNAME record, no code required at all.2008.07.17Read →
- Tree Surgeon 2.0 ReleasedTree Surgeon 2.0 is out: support for VS 2003/2005/2008, a choice of NUnit or MbUnit, and updated NAnt scripts for .NET 1.1 through 3.5.2008.07.14Read →
- Calgary ALT.NET Open Space – August 15-17Details on the Calgary ALT.NET Open Space, an unconference covering TDD, BDD, DDD, Agile, and Lean, with sessions set by whoever shows up.2008.07.14Read →
- Virtual Earth – End of LifeMicrosoft is retiring Virtual Earth versions 3, 4, and 5 in the coming months. Here's what it means, and why my MapPoint geocoding class is unaffected.2008.07.02Read →
- Recommended ReadingA running list of the software and IT books I actually recommend, from Fowler's enterprise patterns to Hunt's Pragmatic Programmer.2008.06.21Read →
- GMail = Dog SlowGmail crawling because of all its AJAX and JavaScript? Switch to the Older Version or Standard HTML view for a noticeably faster inbox.2008.06.13Read →
- I Took The ASP.NET 3.5 Beta Exam, and then the red pillI took the ASP.NET 3.5 beta exam with almost no prep -- 70 tough questions covering WCF, AJAX, and mobile, plus tips on surviving Microsoft's exam tricks.2008.06.10Read →
- Resources from Desert Code CampSlides, source code, and a fix for a Unity DynamicMethod bug from my Dependency Injection and Inversion of Control talk at Desert Code Camp.2008.06.03Read →
- Intro to Microsoft Unity – Dependency Injection ContainerA hands-on intro to Microsoft's Unity dependency injection container, covering manual and XML-based type registration with a downloadable sample app.2008.05.26Read →
- TIP: Utilizing Fluent Syntax with the "Is" Keyword in Rhino Mocks and NUnitRhino Mocks and NUnit both use an Is keyword, which collides. Use NUnit's Iz syntax helper instead so both fluent APIs work together.2008.05.23Read →
- Presenting at the Phoenix Arizona Desert Code CampI'm teaching a course on Dependency Injection and Inversion of Control at the Phoenix Arizona Desert Code Camp on May 31st, 2008. See you there.2008.05.14Read →
- Using iTextSharp To Watermark/Write Text To Existing PDF’sHow to watermark existing PDFs with real text (not clunky images) using iTextSharp, complete with orientation detection and working C# code.2008.05.11Read →
- The Importance of Unit Testing WCF AttributesA WCF gotcha: removing the IsOneWay attribute silently turns an async call into a blocking one. You need unit tests on your service contracts too.2008.05.07Read →
- Upgraded Personal Blog to DasBlog 2.xUpgraded my blog to DasBlog 2.0.7 in about 10 minutes flat, then spent 30 more verifying cross-posting and admin login still worked.2008.05.06Read →
- Software Development: Greeenfield vs. BrownfieldGreenfield vs brownfield development, explained with real examples of each, plus my own breakdown of how much of my career was spent in each camp.2008.05.05Read →
- By Far, The Coolest Flash App I’ve EVER Played WithWhy Atmosphere's paintitgold.com Flash graffiti app, letting you spray-paint any URL's screenshot, is the most fun web app I've played with.2008.05.01Read →
- TechEd Developer 2008 & Party With PalermoI'll be at TechEd Developer 2008 and the Party With Palermo event - drop me a line if you're going too so we can meet up in person.2008.04.29Read →
- Simple Download Counter HttpHandlerA quick-and-dirty ASP.NET IHttpHandler that counts file downloads using a simple XML counter, built in minutes to test if an idea was worth pursuing.2008.04.29Read →
- 3.5 Beta Exams Not Available In PhoenixPhoenix is a top-5 US city, but no local testing center was rated high enough to proctor the ASP.NET 3.5 beta exams -- the nearest was in Prescott.2008.04.29Read →
- WTF’s Per MinuteA quick repost of the classic WTFs-per-minute code quality chart I found on digg, saved here mainly so I have my own copy to reference.2008.04.07Read →
- NUnit 2.4.7 and the RowTest Attribute with ExampleNUnit 2.4.7 shipped with the RowTest add-in, letting you run one test method against multiple data rows instead of duplicating tests.2008.04.01Read →
- PhotoShop Express vs. Paint.NETI hoped Photoshop Express would be a Photoshop Lite like Paint.NET. Instead it's a slow, upload-dependent browser app. Paint.NET still wins.2008.03.31Read →
- I Can’t Read Your Screen, Mr. PresenterA pet peeve about presenters with unreadable tiny fonts, and the fix: ZoomIt for live zooming plus a dedicated big-font account for demos.2008.03.31Read →
- Implicitly Typed Locals – R# V4Why I disabled ReSharper 4's suggestion to use var everywhere -- implicit typing doesn't improve naming or your API, it just adds noise.2008.03.28Read →
- TIP: Getting the Base Directory of where your App is RunningNeed your app's running directory in .NET? Use AppDomain.CurrentDomain.BaseDirectory, which works for both web and non-web projects.2008.03.23Read →
- Beginner Test Driven Development HabitsFive habits new TDD teams fall into, like skipping the refactor step and treating tests as a debugger, plus how to coach developers past them.2008.03.23Read →
- The Calendar and the CloudGoogle's new two-way Outlook Calendar sync lets a consultant merge client and personal calendars into one master schedule, with SMS agenda alerts.2008.03.11Read →
- Knock Knock. Who’s There? Me. Too Bad. Go Away.After a fresh Windows rebuild, Team Foundation Server locked out its own administrator -- turns out McAfee antivirus was silently blocking the connection.2008.03.03Read →
- Free Conferencing UtilitiesA roundup of free conference call services for consultants and freelancers who need to host calls without paying for a dial-in line.2008.02.29Read →
- Creating .NET Event Sources with PowerShellSkip writing a whole app to register a Windows Event Log source - a two-line PowerShell command checks for it and creates it if missing.2008.02.26Read →
- Notepad? THE PowerShell IDE? Please, Save Me – Give Me Some IntelliSenseWriting PowerShell in Notepad is like driving when you could fly. PowerGUI gives you IntelliSense, debugging, and a watch window instead.2008.02.22Read →
- Is Your Network Slow?A quick screenshot of a network transfer estimated to take about 32 years -- proof that some slow networks are beyond even agile fixes.2008.02.19Read →
- A FREE Remote-Collab Tool From Microsoft? (And a list of others)Microsoft's free SharedView beta impressed me for pair programming and screen sharing -- plus a roundup of other remote collaboration tools worth trying.2008.02.19Read →
- Frustrated… Party of 1! MSBuild … PLEASE JUST WORK!An MSBuild plus TeamBuild gotcha: why $(OutDir) file lists come up empty, and how creating them in a separate target with CreateItem fixes it.2008.02.18Read →
- About MeSoftware architect turned entrepreneur -- my background across ASP.NET, agile consulting, motocross racing, motorcycle mechanics, and Brazilian Jiu Jitsu.2008.02.13Read →
- VS2008 HotFix Posted YesterdayMicrosoft posted a VS2008 hotfix with HTML source view, design view, editing, and web site build performance fixes. Grab the download here.2008.02.10Read →
- The FooTheory CommunityI've joined the FooTheory blog community and will cross-post everything here too. Check out two of my favorite blogs there: Matt's and Bennie's Weblogs.2008.02.09Read →
- Podcast for PowerShell – PowerScripting.netPowerScripting.net is a solid podcast covering all things PowerShell, worth adding to your toolbelt if you're learning the language.2008.02.09Read →
- Gleaning Clarity Through Unit Test NamesA naming convention for bug-fix unit tests, FIX_TicketNumber_Method_State_ExpectedResult(), that documents the fix right in the test name.2008.02.08Read →
- MSN Run Once Bombs…It happens to the best of us, even the creators of the technology…2008.01.21Read →
- Works in Firefox, But Not in IE? (or vice versa) WTF!!!!Cross-browser CSS bugs are a nightmare compared to WinForms rendering. My go-to fix: the CSS Creator Forum, which has solved every issue I've hit.2008.01.14Read →
- Usability – Don’t Make Me Think/Remember…Why do UPS, FedEx, and your health portal make you re-enter info they already have? A rant on usability, autocomplete, and not making users think.2008.01.14Read →
- TFS – ItemExistsException FixTracking down and fixing a TFS ItemExistsException caused by duplicate labels left behind after moving a project, across two build servers.2008.01.09Read →
- TFS Build Not Publishing Web ApplicationsWhy TFS builds silently skip copying web apps to _PublishedWebsites: a commented-out MSBuild import in the .csproj file, and the one-line fix.2008.01.08Read →
- Sending Email in a Development Environment without an SMTP ServerNo local SMTP server? Configure .NET's mailSettings to drop emails into a pickup directory so you can test sending without actually sending.2008.01.08Read →
2007 95
- Visual Studio Hangs on a Team Foundation Server UNDO CommandVisual Studio 2005 hanging on a Team Foundation Server Undo command? The undocumented devenv /resetuserdata switch fixed it for me.2007.12.13Read →
- Full path to the solution file… too long?Hitting Visual Studio's 260-character MAX_PATH limit creating a solution? Build it elsewhere and copy it over, or map a share for a shorter path.2007.12.05Read →
- Weird Error after VS2005 Crash & The K.I.S.S. PrincipleAfter a VS2005 crash corrupted a project file beyond repair, the fix was simple: restore from backup first, troubleshoot second. K.I.S.S.2007.12.01Read →
- Syntax Highlighting for .build and .msbuildA simple Visual Studio trick I wish I'd known sooner: map .build and .msbuild file extensions to the XML editor to get proper syntax highlighting.2007.12.01Read →
- Google.com/ig/ and Big Feeds (over 512K in size)Bumped your RSS feed to 1000+ items for a BlogEngine migration and forgot to change it back? FeedBurner chokes past 512K and serves stale posts.2007.12.01Read →
- Cruise Control.NET & Visual Source Safe – SS.EXE HangsCruiseControl.NET hanging on 'Checking For Modifications' with Visual SourceSafe? A stray space in the password field was silently blocking SS.EXE.2007.11.30Read →
- Frustrating MS Test Issue – blah blah blah is not trustedMSTest throwing the location of the file is not trusted on a referenced DLL? Right-click it, hit Unblock, and the error disappears.2007.11.19Read →
- Comma Delimiting Strings in .NET – The Framework WayStop using StringBuilder to join comma-separated strings in .NET - the built-in CommaDelimitedStringCollection class does it for you.2007.11.15Read →
- Vitamin or Prescription?A simple framework for prioritizing feature requests: ask if it's a 'vitamin' (nice to have) or a 'prescription' (required to survive).2007.11.14Read →
- MODI – The Lightweight DOM Inspector BookmarkletMODI is a bookmarklet DOM inspector: hover over any element to see its parents and classes, no install required, works on any machine.2007.11.13Read →
- Becoming a Better Developer in Six MonthsA personal list of skills and certifications to tackle over six months, from AForge.NET's AI and computer vision libraries to WCF and Silverlight.2007.10.29Read →
- VS2008 VPC’s Are Expiring Prematurely on Nov 1stVS2008 Beta2 virtual PCs are set to expire prematurely on Nov 1, 2007 due to an OS timeout. Back up your TFS database before it happens.2007.10.27Read →
- Content Type Class FileTired of looking up MIME content types every time? Here's a free downloadable static C# class with constants for every common file extension.2007.10.24Read →
- A Geek’s Checkbook RegisterI hate balancing a checkbook, so I automated it with ClearCheckBook.com and its CheckBot texting feature -- log transactions by SMS, no spreadsheet required.2007.10.17Read →
- The Ergonomic ConsultantA consultant's survival kit for bad client desks: the Natural Ergonomic keyboard, a wired mouse, a laptop riser, and tricks for scoring a decent chair.2007.10.12Read →
- Map a Drive in .NET and PowerShellQuick code snippets for mapping, checking, and deleting a network drive at runtime, shown both in .NET (System.Diagnostics.Process) and PowerShell.2007.10.12Read →
- Auto-Insert Attribute Quotes in HTMLA quick Visual Studio tip: enable automatic attribute-value quotes when typing HTML in the ASPX editor, so you stop typing them by hand.2007.10.12Read →
- A Sandbox/Test Server Is a Sandbox For A ReasonWhy every service provider needs a sandbox environment that actually mirrors production -- and what happens to your code (and trust) when it doesn't.2007.10.06Read →
- Watermarking Images in ASP.NET with an HttpHandlerHow to watermark JPG, PNG, GIF, and BMP images on the fly in ASP.NET using a simple HttpHandler, with working C# code you can drop in today.2007.09.18Read →
- Belkin is GangsterA short, tongue-in-cheek post noting that Belkin's corporate headquarters is located right in Compton, California - which is objectively gangster.2007.09.14Read →
- Automated Form Posting with .NET / ASP.NET’s CURLHow to use .NET's HttpWebRequest to post form data to a site with no API, capturing headers with Fiddler to automate an SMS-sending web form.2007.09.13Read →
- Google AdWords & Discover CardGoogle AdWords wouldn't accept my Discover Card back in 2007. Here's the payment rant, Google's canned response, and why it still bugged me.2007.09.11Read →
- Texting/SMS Your Mobile Phone From .NET (or any other technology)A running list of carrier email-to-SMS gateways and third-party services for sending text messages from .NET or any code, plus which ones to trust.2007.09.10Read →
- SubSonic on GoDaddy Shared HostingSubSonic throws a SecurityException on GoDaddy's medium-trust hosting because of trace logging calls - comment out these lines and recompile to fix it.2007.09.10Read →
- Simulating Bandwidth in Web ApplicationsNet Limiter lets you throttle your own connection to 56k so you can actually feel how your AJAX, Flash, or Silverlight app performs for slow users.2007.09.10Read →
- CodeSmith ScreencastA screencast showing how to use CodeSmith to loop through a database schema and generate a text file for every table automatically.2007.09.05Read →
- DB2 / SQL SERVER 2005 / .NETNotes from moving DB2 data into SQL Server 2005 via SSIS: the Microsoft OLE DB2 driver chokes on BLOBs, the IBM ODBC driver on DateTime precision.2007.08.22Read →
- SQLyog MySQL GUI ToolSQLyog is the MySQL GUI client I switched to after years on the command line and phpMyAdmin - faster for everyday tabular data work.2007.08.21Read →
- Outlook Live Mail ConnectorMicrosoft's Outlook connector for Windows Live Mail syncs email and contacts, but locks calendar sync behind a paid account. Still team Gmail.2007.08.18Read →
- Installing BlogEngine.NET on GoDaddy Shared HostingStep-by-step fix for installing BlogEngine.NET on GoDaddy shared hosting, working around trust-level restrictions and App_Data permission issues.2007.08.17Read →
- Postponing .NET User Group PresentationHad to postpone tomorrow night's .NET User Group talk due to unforeseen circumstances. A new date is coming in the next couple months.2007.08.14Read →
- Windsor LinksBookmarking Ayende's collection of Castle Windsor IoC container tutorials and patterns, saved here mostly so I can find them again myself.2007.08.10Read →
- SubVersion / TortoiseSVN Global Ignore PatternTortoiseSVN's Global Ignore Pattern setting keeps bin, obj, dll, pdb, and other build junk out of source control - here's the exact pattern I use and why.2007.08.10Read →
- DbDataReader MishapA debugging gotcha: leaving a DbDataReader sitting in an unpinned Watch window during a test run triggered it early and broke a unit test.2007.08.09Read →
- Portable Applications – A Life Saver on a USB StickPortableApps lets you carry Notepad++, FileZilla, Firefox, and more on a USB stick, a lifesaver when you're working on a client's machine.2007.08.06Read →
- Presenting at Arizona .NET User Group – Dependency Injection & Inversion of ControlI'm presenting Dependency Injection and Inversion of Control at the Arizona .NET User Group on August 14th at 6pm at the Microsoft office.2007.08.03Read →
- IIS 6 & PHP – Mimicking .htaccess User/Pass FunctionalityHow to password-protect a directory on a PHP site running on IIS 6 using ASP.NET forms authentication, since .htaccess doesn't work on Windows.2007.08.03Read →
- Tip: DirectorySeparatorCharStop hardcoding backslashes in file paths. Use .NET's Path.DirectorySeparatorChar so your code works on Windows, Mac, and *NIX alike.2007.07.29Read →
- Ubuntu and Virtual PC 2007 Mouse IssuesInstalling Ubuntu 7.04 inside Virtual PC 2007 leaves the mouse completely unrecognized. Here are the two links that fixed it for me.2007.07.28Read →
- Returning XML Data as a Record Sets through the CLR in SQL Server 2005How to use a SQL Server 2005 CLR stored procedure to return a row plus its embedded XML column data as proper record sets in one query.2007.07.27Read →
- HOW TO: Display Required Field Validators at Page LoadA short snippet to force ASP.NET RequiredFieldValidators to run on page load, so required-field asterisks show up before the user submits.2007.07.20Read →
- ASP.NET AJAX Always Visible Control FrustrationsASP.NET AJAX's Always Visible Control won't target a user control directly. Here's the hacky but working fix: wrap it in a panel instead.2007.07.17Read →
- ASP.NET Projects Take Forever To Load in Internet ExplorerASP.NET projects taking minutes to load in Internet Explorer during debugging while other sites load instantly? Resetting IE's settings fixed it.2007.07.09Read →
- HTML 5 vs HTML 4Early notes on HTML5 vs HTML4: the new browser-native input types like date, email, and range that promised to kill custom UI widgets.2007.06.23Read →
- .NET ScaffoldingTree Surgeon scaffolds a consistent .NET project layout, borrowing Rails' convention-over-configuration approach to keep code where you'd expect it.2007.06.21Read →
- Teamprise Explorer Client vs. Visual Studio Team ExplorerComparing Teamprise Explorer and the Visual Studio Team Explorer plug-in for working with CodePlex's TFS-hosted source - and why the VS plug-in won out.2007.06.07Read →
- Windows SurfaceA first look at Microsoft's original Surface: a 30-inch multi-touch tabletop that lets you grab data by hand, no keyboard or mouse required.2007.05.31Read →
- Microsoft Astoria ProjectA look at Microsoft's Codename Astoria, an early REST-based data services project poised to compete with SOAP and WS-* web services.2007.05.28Read →
- Live Maps Send to MobileGoogle Maps needs a Java client on your phone, Live Maps doesn't. Here's how to text driving directions to any mobile without one installed.2007.05.28Read →
- Complexity and Staying Up To SpeedFeeling overwhelmed by how fast software moves? Practical advice on picking a niche and using blogs, podcasts, and screencasts to keep up.2007.05.25Read →
- Blogs, Podcasts and ScreencastsMy go-to list of developer blogs, podcasts, screencasts, and magazines circa 2007, from Hanselman and Fowler to .NET Rocks and MSDN Magazine.2007.05.25Read →
- Wireless Rest AreasDriving cross-country, I found highway rest areas in Louisiana and Texas with free wifi, clearly signposted. Worth a search before your next road trip.2007.05.19Read →
- Simplifying Database Modeling in Visio 2002/2003 through SQL GenerationVisio 2002/2003 can't forward-engineer databases, so I used the Orthogonal Toolbox plugin and a custom XSLT to turn ERD diagrams straight into SQL DDL.2007.05.11Read →
- New Version Notepad++A new Notepad++ release brings multi-file recursive search/replace, an NppExec script runner, clickable links, and Aspell spell-check support.2007.05.09Read →
- Temporary Projects in Visual Studio 2005A hidden Visual Studio 2005 option lets you create in-memory throwaway projects that never touch disk or clutter your recent projects list.2007.05.08Read →
- C# Microsoft MapPoint 4.5 Geocode (Latitude and Longitude) ClassA C# geocoding class built on the Microsoft MapPoint 4.5 SDK, for developers who want an alternative to my Google Maps geocode class.2007.05.07Read →
- Good SharePoint HowTo VideosA short list of solid SharePoint how-to videos from Microsoft and DNR TV covering search, InfoPath forms, content types, and the Business Data Catalog.2007.04.26Read →
- Unit Testing .NetTiers Processors with Dependency InjectionHow to unit test tightly-coupled .NetTiers Processors by injecting a CountryService through the constructor instead of the database.2007.04.17Read →
- Tree Surgeon DevelopmentI've joined the Tree Surgeon open source project, now on CodePlex under Bil Simser, to help build out its dev tree and build tooling.2007.04.16Read →
- The .NET Developer Search EngineDan Appleman's SearchDotNet.com is a custom Google search scoped to expert .NET sites, cutting through generic noise when Google fails you.2007.04.13Read →
- Codeplex is down?This morning, I went to log into Codeplex and I got the dreaded YSOD2007.04.12Read →
- Keyboard Shortcuts for TestDriven.NETHow to bind a keyboard shortcut in Visual Studio for TestDriven.NET's Run Tests command, so you can stop right-clicking to run your tests.2007.04.06Read →
- Handling unexpected exceptions and tracingHow to catch unhandled ASP.NET errors globally with Application_Error, log them via trace listeners, and stop leaking YSOD details to users.2007.04.01Read →
- ASP.NET HOWTO: Enable Default Enter Button in ASP.NET 2.0How to make the Enter key submit an ASP.NET 2.0 form: set the HtmlForm's DefaultButton property instead of writing custom JavaScript.2007.03.29Read →
- Overcomplicating simple things – ASP.NET AJAX Confirmation Button ExtenderThe ASP.NET AJAX ConfirmButtonExtender does the same job as a one-line OnClientClick confirm() call, just with a lot more overhead.2007.03.28Read →
- error CS0030: Cannot convert type (Login.master)CS0030 'cannot convert type' error after precompiling? Don't name your master page code-behind class Login - it collides with ASP.NET's own class.2007.03.27Read →
- IIS 7 – This configuration section cannot be used at this path.Fixing IIS 7's 500.19 configuration lock error by changing overrideModeDefault to Allow in applicationHost.config, or unlocking it via appcmd.2007.03.26Read →
- Using Excel to help with Data formatting (SQL Scripts)How to use Excel's LEFT, MID, RIGHT, and SEARCH functions to turn messy copy-pasted address data into ready-to-run SQL INSERT scripts.2007.03.23Read →
- HOWTO: Build a Store Locator in ASP.NETA full ASP.NET store locator: geocoding addresses with the Google Maps API, a SQL distance calculation, and downloadable source code.2007.03.17Read →
- HOWTO: Debugging JavaScript using “debugger;”How to debug JavaScript inside Visual Studio using the debugger keyword, plus the Internet Explorer settings you need to flip to enable it.2007.03.15Read →
- Notepad++ Shortcuts – Vista 64bit UpdateMy old XP registry trick for launching Notepad++ by typing n broke on Vista x64, so here's the updated reg file plus shell integration.2007.03.14Read →
- C# Google Geocode (Latitude and Longitude) ClassA free C# class for geocoding US, Canadian, and European addresses into latitude and longitude using the Google Maps API, with code and download.2007.03.13Read →
- aspnet_wp.exe could not be started?Getting aspnet_wp.exe could not be started with error 80070545? Check which .NET Framework version is actually configured to run the app pool.2007.03.12Read →
- Open Source .NET WikiScrewTurn Wiki is a GPL, medium-trust-friendly open source .NET 2.0 wiki that needs just IIS and one writable folder, no SQL Server required.2007.03.11Read →
- Visual Studio SP1 with VistaInstalling Visual Studio 2005 SP1 on Windows Vista? You need the regular SP1 first, then the separate Vista update, in that order.2007.03.10Read →
- Tree Surgeon – .NET 2.0 Reference IncorrectTree Surgeon's NAnt.exe.config still points at .NET 2.0 Beta 1, breaking the msbuild task. Here's the exact config fix to get it building.2007.03.06Read →
- Running Notepad++ From the command lineLaunch Notepad++ from the command line just as fast as Notepad2 by remapping its App Paths registry key to a quick two-letter shortcut, nn.2007.03.03Read →
- Gemini Webservice interacting with SharePoint Business Data CatalogHow to hook Gemini's issue tracker web service into SharePoint MOSS 2007 using the Business Data Catalog and a hand-written metadata XML file.2007.03.02Read →
- Confluence Tree SurgeonTree Surgeon, ThoughtWorks' free .NET tree generator, scaffolds a full solution with NUnit, NCover, and NAnt build scripts in seconds.2007.02.28Read →
- Gemini 2.0.5 “The Redirect Loop”Debugging a maddening 401/302 redirect loop between Gemini's default.aspx and main.aspx: the fix that worked was an uninstall and reinstall.2007.02.27Read →
- Namespace Aliasing – The using directiveHow to alias a C# namespace or a class with the using directive -- handy when two libraries share a namespace or a type name is painfully long.2007.02.22Read →
- Google Maps on your MobileGoogle Maps for mobile phones back in 2007 let you find stores, get directions, and save favorite spots right on your BlackBerry or J2ME phone.2007.02.21Read →
- Updated: Formatted XML From SQLHow to return SQL Server query results as formatted XML elements, using FOR XML AUTO, the ELEMENTS option, and a custom ROOT name.2007.02.21Read →
- Generate XML in SQLSkip DataTable.WriteXml() entirely. SQL Server 2005's FOR XML AUTO clause can generate XML straight from a query. Here's a quick example.2007.02.19Read →
- The hidden Trace page, trace.axdASP.NET's built-in trace.axd page shows detailed per-request timing and stats once you flip on tracing in web.config, plus how to log custom output.2007.02.13Read →
- Simian UpgradeSimian's new release quietly dropped the -recurse flag, breaking my CruiseControl.NET build. Here's the fix, plus how fast the vendor patched it.2007.02.07Read →
- Force HTTPS on all requests, HttpModuleHow to force every request to HTTPS in classic ASP.NET with a simple IHttpModule, instead of relying on IIS settings or per-page redirects.2007.02.03Read →
- Prototype/Proof of Concept code is not production code!Prototype and proof-of-concept code exists to align with clients, not to ship. Why POC code should never be repurposed into your production app.2007.02.02Read →
- The “as” KeywordA C# 'as' cast gotcha: casting a boxed value type to string silently returns null instead of throwing, unlike a direct cast. Know your types.2007.01.30Read →
- New LinesStop hardcoding carriage-return-and-newline pairs in your C# strings. Use the built-in Environment.NewLine property so your code adapts to any platform.2007.01.17Read →
- Escaping String LiteralsA simple C# trick: prefix a string with @ to stop escaping backslashes in file paths, plus the one case where it still trips you up.2007.01.14Read →
- Warnings as ErrorsWhy I configure every .NET project to treat compiler warnings as build-breaking errors, and how to turn it on in Visual Studio or csc.exe.2007.01.11Read →
- ASP.NET File Name at RuntimeA quick ASP.NET snippet and base Page class for grabbing the current page's file name at runtime without repeating the same helper everywhere.2007.01.10Read →
- Hiding Code From The DebuggerTired of stepping through helper methods you already know work? The DebuggerHidden attribute tells the debugger to skip that code entirely.2007.01.09Read →
- Conditional Switch Statement with Enumeration String ValueHow to switch on a string value of a C# enum without hitting the 'a constant value is required' compiler error - just Enum.Parse it first.2007.01.06Read →