Build: 2026-06-08-816
Release Notes:
-
Friday, December 5, 2025:
- Updated libraries from libman.
- Updated various nuget packages.
- Corrected database connection string in HealthyEatingMaintenance Azure function.
-
Thursday, November 20, 2025:
- Rationalized variable names to explanatory as needed.
- Established repo in github, rather than Visual Studio online.
- Defined kestral port endpoints in appsettings.
- Switched to slnx format for solution file.
- Removed old admin and database projects from solution.
- Added .vscode files and established compatibility with Visual Studio Code.
-
Wednesday, November 12, 2025:
- Updated to Visual Studio 2026.
- Updated to .NET 10, C# 14.
- Updated to SQL Server Management Studio 21.
- Updated nuget packages.
-
Tuesday, November 11, 2025:
- Moved base js includes to head section of layout to eliminate various spurious not defined errors.
-
Thursday, October 30, 2025:
- Fixed Food Diary to fully handle session and login timeouts.
-
Wednesday, October 29, 2025:
- Browse foods was wrong! Broken since 7-30-2021!!!
- Fixed by getting the measureIndex correct.
- Removed superfluous ApplicationCache.Cache.Set() entries in food browser.
- Updated nuget packages and libman libraries.
-
Tuesday, October 28, 2025:
- Fixed missing HttpUtility.JavaScriptStringEncode() in recipe analyzer.
- Added additional register domain exclusions.
-
Thursday, October 23, 2025:
- Cleaned up legacy "@section scripts" odds and ends.
-
Fixed product label buffering on page change:
- Changed to beforeunload, as onunload is deprecated.
- Moved beforeunload from body to window, so that it would make the QuickBufferLabel() call.
- Fixed QuickBufferLabel() to actually work.
- To be fair, this code was 10+ years old, and changes/updates rusted it.
-
Wednesday, October 22, 2025:
- Added a max width to container-fluid (Bootstrap). On 4K screens, full width was silly.
-
Saturday, October 4, 2025:
- Switched layout to container-fluid to best use width on smaller devices.
-
Friday, October 3, 2025:
-
Fixed inputmode on html inputs to use decimal and text keyboards where appropriate.
- It was set to numeric even where decimal was called for!
- Holy crap! This was wrong all over the place!
- This only affected phones.
- Mea culpa! I'm an idiot!
-
Fixed inputmode on html inputs to use decimal and text keyboards where appropriate.
-
Wednesday, October 1, 2025:
- Fixed a Quill initialization error.
- Added tooltips to the Quill toolbar.
- Generalized the pauseCompletion/synchronization javascript code in the food diary.
- Finished the Entrée/Recipe Manager re-factor in the food diary.
-
Saturday, September 27, 2025:
-
Recipe analyzer deprecation work:
- Recipes will be replaced by master entrées. These will still be called recipes.
- Entrées are created (cooked, prepared) from recipes, formerly master entrées.
- Entrées are what we can enter into the food diary as part of a meal.
- The Entrée Manager view has been refactored to use the current recipe analyzer look and feel.
- Diary.ts and RecipeAnalyzer.ts have been reconciled.
- The Master Entrée manager is now accessible in the food diary even when not logged in.
- This work is ongoing.
- Fixed a cog bug in Food Diary.
-
Recipe analyzer deprecation work:
-
Tuesday, September 23, 2025:
- Added a new bad registration rule.
- Decoupled DiaryEntreeManager and DiaryFoodDay views from the index view in Food Diary.
- Miscellaneous bug fixes.
- Nuget package updates.
-
Friday, September 12, 2025:
-
Expanded and fixed the guarantee of event ordering as needed.
- For example, you might click "Save" after editing an amount or measure.
- The onchange for the amount MUST complete a server call, and its adjustments to the DOM.
- This completion MUST happen BEFORE the subsequent call to Save.
- The DOM adjustments may include javascript, which may initialize controls.
- If that javascript has not completed, references to controls updated by the Save may fail.
-
Expanded and fixed the guarantee of event ordering as needed.
-
Tuesday, September 9, 2025:
- Finally, after years of annoyance, blocked all clicks during login. Lazy me.
-
Monday, September 8, 2025:
- Cleaned up some html formatting on the recipe and entrée screens.
-
Sunday, September 7, 2025:
- Updated TypeScript in IDE to ES2024.
- Fixed next/prev bug when adding new entrée to food diary.
- Fixed the issue around guaranteeing that textarea onchange event always completes before save button onclick.
-
Friday, September 5, 2025:
- Fixed SimpleEntree initialization in EntreeRebuildAnalyzerObjects(). Dopey me!
- Disallowed no match ingredients on SaveRecipe() and SaveEntree().
- Fixed onchange webapi call for textareas to complete prior to onclick from save button.
- Fixed collapse of editor and instructions to animate as intended.
- Added hide variant on notes/instructions buttons.
-
Thursday, September 4, 2025:
- Added AnalyzerData and SimpleEntree columns to Entrees table.
- Added initialization, create and update refactors for the new columns.
- Removed legacy json attributes from diary model.
- Improved Font Awesome icons for lock, info, delete in EntreeManager.
- Added nutrition label view for individual items in EntreeManager.
- Fixed injected style bug in common.ts.
- Gram weights on nutrition labels round to nearest int. The fractions were stupid.
- Improved Font Awesome icons for lock, info, delete in RecipeAnalyzer.
- Added nutrition label view for individual items in RecipeAnalyzer.
- Fixed bugs related to jquery replacement.
-
Monday, September 1, 2025:
- Quill now clears and closes as needed when we load or delete recipes and entrées.
-
Friday, August 29, 2025:
- DeleteMasterEntree() stays on entree management screen, with a clear.
- clearAutoComplete() now clears the control even when it is disabled.
-
If we re-add a Master Entrée that was previously disabled:
- The master entrée is restored with updated servings, weight and ingredients.
- The master entrée chain (if there were any uses) is restored, unchanged.
-
Thursday, August 28, 2025:
- Fully refactored SetDiaryView(). It was a redonculous mess.
- Refactored EntreeManager() to reflect (no OO pun intended) new chain structures.
- Requests to the database are greatly reduced.
- Fixed a critical bug in EntreeReadAllAsync(). Your future is my past, and your past is my future!
-
Wednesday, August 27, 2025:
- Fixed text0 javascript exception in SetDiaryView().
- SetDiaryView
-
Saturday, August 23, 2025:
- Fixed empty amount bug in diary input editor.
-
Wednesday, August 20, 2025:
- Fixed the sorting of favorites/recents dropdown in diary.
- Limited favorites/recents dropdown to 100 entries.
- Updated favorites/recents list when a new food gets added to diary.
- Leftovers older than 14 days have been eliminated.
- Fixed/upgraded "leftover food" bugs and annoyances.
-
Monday, August 18, 2025:
- Added additional rules to bad actor detector in register.
- Fixed the vertical controls on left to not scroll off-screen.
-
Refactored entrée chains to use a double linked list.
- Entrées were developed more than ten years ago as a solution for the food diary.
- They enabled the concept of leftovers from recipe derived meals.
- As the code evolved, I used an int column used to indicate deprecation to indicate a single linked list of changes.
- This was a bad choice which I have now rectified.
- This lays the groundwork to replace recipes with master entrées.
- Master entrées are indeed recipes, and exhibit all their properties.
-
Sunday, August 10, 2025:
- Added checks (minimal) for bad actors on registration.
-
Saturday, August 9, 2025:
- Removed the legacy columns DateAccessed, PrepTime, CookTime and ReadyTime from Recipe.
- Fixed secondary input html. We needed "module" rather than "text/javascript".
- Added call to DeleteBadUsers stored procedure in Admin maintenance.
- Updated nuget packages.
-
Friday, August 8, 2025:
- Removed legacy and bot users and their associated data.
- Created DeleteBadUsers stored procedure to do the bad user and associated data deletes.
- Removed the legacy "Sample" column from entrées and diary items.
- Set Quill debug level to "warn". It was way too chatty.
-
Secondary input partial view (recipes and entrées) updated to use current controls and styles.
- The original code dates to 2011. Wow.
-
Updated partial view (html) insertion
- Any scripts with an id now delete an existing matching script from the dom.
- Scripts of javascript now insert as such, rather than as modules.
- All scripts inserted preserve id if it exists.
-
Saturday, August 2, 2025:
- Font Awesome kit downloaded and minimum needed files added directly to project.
- Adjusted/corrected asp-append-version and crossorigin in layout file.
-
Thursday, July 31, 2025:
-
Finishing an effort that began in January 2025, dependence on jQuery has been removed!
- I have used jQuery for 15+ years.
- In that time, JavaScript has evolved greatly.
- For me, jQuery is no longer necessary. It is a bloated crutch.
- Once Bootstrap eliminated jQuery dependence in version 5, the writing was on the wall.
- Special thanks to Paul for shaming me into doing the right thing!
- Lots of rusted code was sanded off, lingering bugs and annoyances fixed, and some folder structure adjusted.
- This was a heck of an effort and a very satisfying scrum!
-
The last remaining libraries with jQuery dependence have been replaced:
- Quill has replaced Summernote as our WYSIWYG editor.
- BootboxJS has been replaced with direct Bootstrap 5 modals.
-
GitHub Copilot Chat (GPT-4o) used for much re-factoring. Here are just two examples:
-
Example 1: Refactor of $.post to fetch
- $.post() was used in 103 calls.
- I had Copilot refactor a single instance of $.post to fetch.
- I edited and tested with any eye to minimizing .net controller changes in c# post controllers.
- I then had Copilot refactor all $.post() instances in the file.
- It made the correct implementation of a single wrapper function, then applied it everywhere needed.
- The wrapper function was moved to the global heartBeat.ts file.
- I then refactored and tested file by file. This was incredibly fast!
-
Example 2: Replacement of Bootbox library with vanilla Bootstrap/JavaScript modals.
- Four flavors of Bootbox dialogs were used in 51 calls.
- I asked Copilot to create Bootstrap functions to replace each of the four Bootbox flavors.
- Code footprint reduced from 1200+ lines to 184 lines of JavaScript.
- I tested each one.
- I replaced and tested a file at a time. Very, very fast refactor!
- Amazing amount of saved time overall!
-
Example 1: Refactor of $.post to fetch
-
Finishing an effort that began in January 2025, dependence on jQuery has been removed!
-
Wednesday, July 23, 2025:
- Adjusted recipe/entrée tooltips in food diary to show normalized portions, with header.
-
Tuesday, July 22, 2025:
- Fixed minor nutrition label serving size anomaly.
- Adjusted javascript uncaught exception handling.
-
Thursday, July 10, 2025:
- Finished refactoring all jquery to javascript in common.ts.
- Moved toggleCheck(controlId) to recipeAnalyzer.ts where it belongs.
-
Wednesday, July 9, 2025:
- Cleaned up javascript exception reporting.
- Removed incorrect result.AddText(..., "timeMilliseconds") when not logged in as admin.
- Generalized timeMilliseconds performance display to users with "superuser" role.
- Miscellaneous nuget updates.
-
Sunday, July 6, 2025:
-
Fixed FixupLine() for " - " regex error.
- This has been broken for many, many years.
- Mostly benign, with VERY annoying ui dissonance.
- Very, very subtle. Took some hours to understand.
- Removed several invalid (but benign) valueSet() insertions.
-
Refactored common.ts to remove jQuery.
- Refactored the lines GitHub Copilot failed on.
- This was "rust" from code written way prior to 2015.
-
Updated libman.json and post build commands:
- All libraries now update with minimum required files.
- All libraries load to proper, common ""wwwroot/lib"" folder.
- Basically, continued to modernize and reduce the code.
-
Fixed FixupLine() for " - " regex error.
-
Friday, July 4, 2025:
- Fixed diary entries caching bug, greatly improving speed.
-
Fixed issues with libman restores obliterating custom mods to:
- lekoala-bootstrap5-autocomplete: Autocomplete for Bootstrap 5
- flatpickr: Datetime Picker.
-
Thursday, July 3, 2025:
- Updated nuget libraries to latest.
-
Began the final effort to remove all jquery references, which requires (mostly):
- 1. Replace all $.post() with js fetch equivalent.
- 2. Replace all $() references.
- 3. Replace all bootbox calls with native bootstrap.
- GitHub Copilot makes the jquery removal a breeze!
-
Wednesday, July 2, 2025:
- Removed legacy jquery-validate libraries.
- Updated bootstrap, bootbox.
- Removed the deprecated signalR library.
- Confirmed endemic signalR functionality.
- Updated libman and npm processes.
-
Tuesday, July 1, 2025:
- Fixed the missing Autocomplete.init("#searchMeasuresSelect"); bug.
-
Monday, June 30, 2025:
-
Adjusted session/login expired.
- If we hit the logout icon after expiry, we automatically start on the login page.
- You have to log in to logout.
- Rather than then redirect to the logout page after re-logging in, we redirect to the food diary.
- This was the common use case I always executed during use.
-
Adjusted session/login expired.
-
Sunday, June 29, 2025:
- Adjusted label entry sanity check to allow acceptance.
-
Saturday, June 28, 2025:
- Fixed portion = 1 bug in master entrée save.
-
Monday, June 23, 2025:
-
Added sanity check to calories on label entry.
- I had a typo of 99g (rather than 9g) of fat on a label.
- It had an entered value of 160 calories.
- This led to cognitive dissonance in reports and diaries!
-
Added sanity check to calories on label entry.
-
Sunday, June 22, 2025:
- Fixed rename labels.
- Fixed master entrée manager labeling error.
- Removed searchable entreeFilter from entrée edits.
-
Saturday, June 21, 2025:
- Fixed date change to work in food diary when not logged in.
- Fixed session/login expire in food diary to clear model.
-
Friday, June 20, 2025:
-
Adjusted bootstrap tooltips on iPad to display appropriately.
- I had a hideAllBootstrapToolTips(); in Diary.ItemClick() after ajax post.
- hideAllBootstrapToolTips() re-factored to optionally NOT hide the calling element's tooltip.
-
Adjusted bootstrap tooltips on iPad to display appropriately.
-
Tuesday, June 17, 2025:
- Fixed adjudicate cache git merge errors.
-
Tuesday, June 17, 2025:
- Re-worded carbohydrate label in progress reports. It bugged me.
- Fixed the display bug in nutrition label to indicate proper unary serving size amount, i.e., "1".
- Re-factored nutrition label BuildStrings() to always use human readable number notation.
- Added more info to uncaught javascript bugs logged by elmah.
-
Thursday, June 12, 2025:
- Fixed a minor javascript exception managing a bootstrap tooltip.
- Moved all deleteAllBootstrapToolTips() calls to before ajax posts, fixing potential minor js exceptions.
-
Tuesday, June 11, 2025:
- Outlines on some controls in progress reports were too fine. Increased line thickness.
- Outlines on some controls in recipe analyzer were too fine. Increased line thickness.
- Outlines on some controls in diary/entrée manager were too fine. Increased line thickness.
-
Monday, June 10, 2025:
- Fixed master entrée edit bug introduced yesterday. Oopsie.
- Fixed javascript autocomplete exception on entreeFilter control.
-
Monday, June 9, 2025:
- Closed gaps and added curve in progress reports weight line graph.
-
Saturday, June 7, 2025:
-
Fixed edge case where the food name and the amount are the same.
- Example "1 leek".
- This becomes "1 leek leek".
- This is because one of the default amounts for "leek" is "leek."
- This is contained in a USDA dataset.
- This has been there for 10+ years. Weird.
- Moved to SQL Server 2022 on Everleap.
- Updated all Nuget packages.
- Merged the "ReplaceTelerik" branch to "Main".
- Refactored redundant initialization code.
- Fixed a next/prev food diary bug introduced by the removal of Telerik.
- Switched from SendGrid to Everleap for our smtp email.
-
Fixed edge case where the food name and the amount are the same.
-
Monday, March 24, 2025:
- Refined the foods search filter for a bit more speed and efficiency.
-
Sunday, March 23, 2025:
- Refactored the foods search for speed and efficiency.
- This fixed an out of memory error serializing a humongous json object.
- The json serialization was bogus, and is removed.
- Foods search is noticeably quicker.
-
Sunday, March 16, 2025:
- It's been a while! And yes, not dead yet!
- The Progress Telerik framework has been completely removed and replaced with open source widgets!
- Updated to .Net 9, C# 13.
- Updated to latest Entity Framework.
- Updated all other nuget packages to latest.
- Many bugs and edge cases fixed.
-
Sunday, April 7, 2024:
-
Fixed/updated Azure Function that manages SQL exception table.
- Switched to isolated worker model.
- Added deletes for bootstrap and signalR not found.
- Updated nuget packages to latest.
-
Fixed/updated Azure Function that manages SQL exception table.
-
Monday, March 11, 2024:
- No site crashes since the March 1 update.
- The intermittent 503 locks when in .net 8 appear solved!
-
Friday, March 1, 2024:
- Added options.EnableRetryOnFailure() in several places where it was missing.
- This may affect the intermittent 503 locks when in .net 8.
- Updated nuget packages, mainly entity framework core.
-
Saturday, January 20, 2024:
- Looking into the intermittent 503 locks when in .net 8.
- Executed a completely clean build and deploy, with website wiped of files previous to deploy.
-
Sunday, January 14, 2024:
-
Added [HttpPost] to DeleteRecipeLine().
- Some oddball crawler blasted the site with GETs, and it surfaced this missed attribute.
- Thank you to whoever or whatever you are using servers in California and Germany.
- I still wasn't compromised.
- SetRecipeJsVars() made private.
-
Added [HttpPost] to DeleteRecipeLine().
-
Friday, January 12, 2024:
- Application returned to .net 8.
-
Fixed wrong amount update in foods browser, UpdateNutritionLabel().
- This has been there for years!
- Only caused display dissonance when a default serving amount was not one, e.g., "2 oz".
-
Removed ChangeMeasureRetainWeight() from FoodItem model.
- It was only called once.
- Replaced with two lines of code.
-
Thursday, December 14, 2023:
- Fixed a diary issue related to user login and timeouts.
-
Application reverted to .net 7
- With .net 8, the application hangs after ~96 hours, no exceptions, no logs, no stdout.
- Verified with several restarts.
- Unsure whether it is the hosting environment or .net 8 itself.
- Deferred until I have some time to solve.
-
Tuesday, October 31, 2023:
- Added logging to track memory cache use.
- Verified cache use and memory stability (no leaks).
-
Sliding expiration in minutes split to user vs anonymous, stored in HealthyEatingDomain.Constants.
- User session objects sliding expiration increased to 60 minutes.
- Anonymous session objects sliding expiration reduced to 15 minutes.
-
Sunday, October 29, 2023:
-
Added a ClearPreviousCachedLoginEntries() to Login, Logout and session expiry in SessionAuthController abstract base class.
- This cleans up application cache entries associated with a logged in user.
- It occurred to me that we would (and did) have memory leaks associated with session and identity expirations.
- We must always remember that session timeout and identity timeout are independent, even if set to the same value.
- This is also called to clean up expired user sessions via SessionAuthController, see the next comments.
-
Added a cache entry on login to save sessionId against userId (as key) in application cache.
- This has a 30 minute sliding expiration, after which the key returns a null value.
-
This also has a PostEvictionCallback to clear expired cached values associated with this user.
- The PostEvictionCallback executes ClearPreviousCachedLoginEntries().
- This entry is queried by SessionAuthController abstract base class in every controller constructor.
- Remember, PostEvictionCallback is NOT called on the sliding expiration, but on the eviction.
- Eviction occurs on the next action on the cache, resulting in the callback and cleanup.
- This works, as the callback occurs before the return to the cache action call.
-
Added a ClearPreviousCachedLoginEntries() to Login, Logout and session expiry in SessionAuthController abstract base class.
-
Thursday, October 26, 2023:
- Updated nuget packages, mainly entity framework and identity.
- Updated bootstrap, signalr, jquery and jquery-validate to latest versions (libman.json).
-
Tuesday, October 24, 2023:
- Removed all code and references to Branded Food Products Database (BFPD, from USDA).
- Added "::MainFoods" override to label entry filter, to allow back fills from the main foods database.
-
Saturday, October 14, 2023:
- Adjudicate.cshtml was missing script tag for kendoGrid.min.js. Oops.
-
Tuesday, October 10, 2023:
- Fixed recipe analyzer where changes from secondary input are not recognized.
-
Wednesday, October 4, 2023:
- Updated favicon and manifest files for such.
-
Sunday, October 1, 2023:
- Fixed issue with guest labeling on progress screens.
- Fixed background launch task for diary model and progress model on login.
- Updated numerous nuget packages, mainly entity framework and support packages.
-
Friday, September 29, 2023:
- Fixed thrown exception when entrée input line ends in a number.
- Updated maintenance SQL stored procedures to better screen logged elmah exceptions.
-
Monday, August 7, 2023:
- Increased to 225ms the delay in the dispose function in deleteAllBootstrapToolTips().
- Added option EnableRetryOnFailure() to AddDbContext in Program.cs.
- Fixed food diary exception when "item" view is mistakenly propagated on an item delete.
-
Monday, July 31, 2023:
- Fixed error in ReportSeriesUpdateAsync().
-
Tuesday, July 25, 2023:
- Fixed deleteAllBootstrapToolTips() to hide and wait for completion prior to delete.
-
Sunday, July 23, 2023:
-
Tech Debt (.NET 7, C# 11.0):
- Cleared unnecessary async/await.
- Minimal new() declarations.
- Changed regex to use regular expression source generators via [GeneratedRegex] attribute.
- Changed string functions to use Span<> where applicable.
- Changed string functions to use Concat with spans where applicable.
-
Tech Debt (.NET 7, C# 11.0):
-
Wednesday, July 19, 2023:
- Fixed account settings weight options.
- Fixed account settings nutrition label options.
- Optimized account settings.
- Optimized the flow through of account setting changes.
- Optimized and cleaned up the login async initializers.
-
Monday, July 17, 2023:
- Updated nuget packages (Entity Framework, etc.)
- Tweaks to tooltips.
- Fixed userPrefs null exception issue in admin functions.
-
Sunday, July 9, 2023:
- Updated nuget packages.
- Fixed minor labeling problem in food diary DailySummaryString() with edit to GetNutritionByMasterLabelString().
- Added semaphore to UpdateSeriesForDay() to gate database update.
-
Re-factored Admin, Diary, Foods, Progress Reports, Labels, and Recipe Analyzer controllers:
- Replaced Session Set/Get (serializers) with direct use of ApplicationCache.
- Added semaphores to code that needed to be gated.
- Replaced Session Set/Get (serializers) with direct use of ApplicationCache in all other cases.
- Cleaned up and simplified SessionAuthController abstract class.
- Cleaned up and updated Logout(OnPost) to correctly delete login dependent cache entries.
- Cleaned up and re-factored LoginHealthyInitializer() to reflect cache re-factoring.
-
Wednesday, June 28, 2023:
- Updated Bootstrap to 5.3.0.
- Re-factored html in Food Diary, with flex in mind. It was a Frankenstein mess implemented over 10+ years.
- Re-factored food diary UI for useability, appearance and speed.
- Object semaphoreSlimDiary now instantiates specific to user.
- Moved DiaryModel to the main cache for speed, with sliding expiration.
-
Saturday, June 24, 2023:
-
Fixed Food Diary issues involving multiple simultaneous posts:
- Added await HttpContext.Session.CommitAsync() to _semaphoreSlimDiary protected code locks.
- Refactored constructor and index of DiaryController.
- Re-added OnPostInitializeModel() to all posts.
- Fixed issue with client DateTime and iso time string.
-
Fixed Food Diary issues involving multiple simultaneous posts:
-
Saturday, June 17, 2023:
-
Fixed UpdateEditFoodAmount():
- Added ParseFirstLeadingNumber() to get first leading number and pending operation.
- Properly replace leading number string with underlying float value as necessary.
-
Fixed UpdateEditFoodAmount():
-
Friday, June 16, 2023:
- Fixed display issues with food diary nutrition labels. Buildstrings() was required prior to label serialization.
- Added !string.IsNullOrEmpty(TodayDiaryItems[ItemIndex].Entity.AmountString) in UpdateEditFoodAmount() to fix null exception.
-
Monday, June 5, 2023:
- Fixed slight round off errors when adding or editing food diary entries.
- General code cleanup and commenting.
-
Thursday, June 1, 2023:
-
Continued refactoring and documenting NutritionLabel:
- Removed redundant LOADRECIPE type.
- Fixed NutritionLabel adder LOADRECIPE executions.
- Renamed properties to reflect current, rather than historical, origins/use.
- Renamed nutrition label types to better represent use.
- Eliminated CompositeLabel boolean. It was unnecessary.
- Removed dead code in NutritionLabel adder after CompositeLabel elimination.
-
Continued refactoring and documenting NutritionLabel:
-
Monday, May 29, 2023:
- Updated node and lint.
- Cleaned up typescript files with lint.
- Rebuilt diary nutrition labels in the database to correct for yesterday's fixes.
-
Sunday, May 28, 2023:
- Fixed Twilio/SendGrid account settings. Email was out. Sorry about that.
- Removed LabelNutritionUnits, as it was extraneous.
- Debugged using MasterNutritionUnits directly.
- Fixed a lingering issue rendering nutrition strings to the displayed nutrition label.
- Fixed nutrition label adder to preserve display order of nutrition units.
-
Saturday, May 27, 2023:
- Removed the deprecated nutrition label version.
- Removed options allowing display of the deprecated nutrition label version.
-
Thursday, May 25, 2023:
- Cleaned up Measure() code.
- Updated nuget packages.
- Updated libman libraries.
-
Wednesday, May 3, 2023:
- Shortened portion descriptions with trailing parentheses when they are applied to labels.
- Screened pluralization of portions for end words like raw, frozen, etc.
- Added a pluralization function with simple lookup, and pluralization rules when lookup fails.
-
Tuesday, May 2, 2023:
- Fixed HumanReadableAmountStr() to retain/return float amount un-rounded to the readable string amount.
- Fixed BuildStrings() to adjust for un-rounded floats from HumanReadableAmountStr().
- Fixed DiaryController constructor to initialize _diaryModel, which is needed by post(s).
-
Monday, May 1, 2023:
- Updated UpdateSeriesForDay() to retrieve ("Calories").CalculatedForPortion rather than ("Calories").BasisWeight.
- Updated nuget packages.
-
Wednesday, March 8, 2023:
- Fixed issues around asynchronous/out-of-order calls to DiaryItemInsert, DiaryItemSave, ItemEditAmountChanged, and DiaryItemDelete in the Food Diary.
- Fixed the lack of EntreesRestoreNextPrev() in the re-factored code from last week.
- Fixed issues around login/logout and diary model initialization.
- Updated TypeScript to ES2021. Don't know why I haven't done this sooner.
-
Friday, March 3, 2023:
- Added inputmode="numeric" where appropriate to use numeric keyboard on mobile devices.
-
Monday, February 27, 2023:
- Fixed FoodDiaryModel.GetNutritionLabel() when just a single diary entry.
- Cleaned up diary daily summary.
-
Fixed concurrency issues when Diary amount changes.
- If insert new item or save item are pressed after the amount edit, multiple concurrent posts occur.
- These are onchange for the amount field, and the insert or save for the button.
- Amount is now posted with the insert/save and updated if necessary.
- A semaphore slim is used to allow each call to complete synchronously.
-
Saturday, February 25, 2023:
- Fixed save edit after other item click exception in diary.
- Added a GetDiaryModel to diary "inProcess" loops to ensure that a changed amount is caught.
- Corrected a typo in the diary food input partial view.
-
Friday, February 24, 2023:
-
Cleaned up Diary controller.
- Moved entries cache generation in model to constructor.
- Entries cache retains cache entries on date changes and when data user id doesn't change.
- Cleaned up the timeout logic.
- Verified single model creation as needed, no multiple calls.
- Cleaned up and sped up diary initialization.
- This speeds up diary overall.
- Fixed single quotes in toISOStringWithTimezone() javascript.
- Updated various libraries.
-
Cleaned up Diary controller.
-
Sunday, February 5, 2023:
- Eliminated the use of moment.js. It is no longer required.
- Upgraded TypeScript to ES2017.
- Upgraded to .NET 7.0.
- Removed unused code/arguments in diary.ts.
- Updated nuget packages, including Entity Framework, Serilog, various build and code analysis libraries, etc.
- Replaced checkboxes with javascript Font Awesome control in order that Mac Safari displays them correctly.
- Checked diary local time for zero, re-adjust as necessary.
- This was actually a fairly large set of updates.
-
Thursday, November 3, 2022:
- Updated nuget libraries, mainly entity framework.
- Read the release notes from Monday. Scared myself.
-
Wednesday, November 2, 2022:
- Fixed issues around changing diary views with an edit open.
-
Tuesday, November 1, 2022:
- Fixed return from entrée edit bug I introduced yesterday.
- Fixed the non-persistence of text lock in entrée edit. This has eluded me for years!
-
Monday, October 31, 2022:
- BOO!
- Fixed nutrition label update for current DiaryItem on SaveEntree().
- Fixed entrée tooltip to reflect description lock.
- Fixed entrée tooltip to update after an edit.
- Fixed recipe tooltip to reflect description lock.
- Updated FoodDiaryModel.GetNutritionLabel() to use persisted nutrition labels.
-
Sunday, October 30, 2022:
- Fixed administration recipe label regeneration to output correct entrée labels.
- Fixed SaveEntree() to update its persisted NutritionLabel.
- Fixed SaveEntree() to update corresponding DiaryItem.
- Fixed bug in EntreeFoodsPortionsUpdateAsync() to correctly update portions and ingredients.
- Fixed NutritionLabel update in EntreeMasterSaveFromParsedRecipe().
- Fixed EntreeUpdateFromParsedRecipe() to persist NutritionLabel.
-
Friday, October 28, 2022:
- Fixed insert entrée error introduced by refactor.
-
Thursday, October 27, 2022:
- Fixed ParseLineToMeasure() to correctly output human readable amount strings on edge cases.
- Fixed GetNutritionByMasterLabelString() to return proper display string.
- Fixed up entrée amount strings where they were not in kitchen readable form.
-
Saturday, October 22, 2022:
- Added [JsonIgnore] to NutritionLabel.LabelUnits, as they are display only.
-
Friday, October 21, 2022:
- Corrected rebuild of entrée and diary buffered nutrition labels.
- Ensured proper nutrition label typing in food diary model.
- Removed useless nutrition label calls in food diary model.
- Removed unused column in entrée ingredients table.
- Corrected the nutrition label string builders to properly handle entrées and diary entry types.
-
Thursday, October 20, 2022:
- Fixed entrée nutrition label errors introduced by re-factor.
- Sped up processing of entrées when adding as a diary entry.
- Sped up processing of entrées when loading in general.
- Fixed edit amount as one error introduced by re-factor.
-
Monday, October 17, 2022:
- Fixed recents select bug. Javascript property needed rename.
-
Sunday, October 16, 2022:
- Fixed entrée save when deprecated, where deprecated was not properly cleared.
- Fixed master entrée select list to exclude deleted/deprecated entrées.
-
Saturday, October 15, 2022:
- Complete re-factor of Food Diary model. Vast speed improvements!
- Fixed entrée add bug introduced on October 10. Mea culpa.
-
Monday, October 10, 2022:
- Added multi-day loading/caching of food diary entries for performance increases when browsing diary history.
- Added additional use of saved serialized nutrition labels, increasing food diary performance.
- Updated nuget packages and various libraries.
-
Friday, September 2, 2022:
- Massive speed-ups (again) to the food diary by greatly reducing redundant sql server queries.
-
Saturday, August 27, 2022:
- Fixed the sample progress message on the progress page, as it did not disappear on login.
-
Thursday, August 18, 2022:
- Added crossorigin="anonymous" to javascript requests as needed.
- Corrected some references to signalr.js causing unnecessary javascript errors in the debug environment.
- Added try/catch to commom.js/action.action(execScript) to ignore selected and spurious 3rd party errors.
- Added sodium to progress reports series table in the database.
-
Friday, August 5, 2022:
-
Fixed and greatly sped up food diary initialization and sundry routines.
- Mostly, this involved greatly reducing reads to the SQL database.
-
Fixed and greatly sped up food diary initialization and sundry routines.
-
Thursday, August 4, 2022:
-
Fixed and greatly sped up login process:
- The asynchronous food diary initialization was being called twice. Fixed.
- Maximized asynchronous food diary initialization.
- Updated nuget packages.
-
Fixed and greatly sped up login process:
-
Wednesday, August 3, 2022:
- Added tooltip to food diary entrée/recipe field when in edit mode.
- Defaulted food diary entrée amount/measure to most recent entry when adding a new entrée entry.
-
Monday, June 6, 2022:
- Food diary move up/down bug on new entries fixed.
-
Thursday, June 2, 2022:
- Added the ability to scan (with text scan) nutrition labels with your phone, or pad, or initialize via a paste.
-
Friday, May 27, 2022:
- Fixed diary error when a label portion is changed in an update.
-
Wednesday, May 25, 2022:
- Fixed wait spinner to be centered on VISIBLE screen.
- Added the desired Unit at all levels, to facilitate international unit changes to grams.
- Added fixup maintenance for labels and recipes, tu update/convert nutrient units.
- Nutrition units now convert iu <==> mcg, mg as needed.
-
Saturday, May 14, 2022:
- Renamed [FoodDiary].[DiaryItems].[Alias] to [FoodDiary].[DiaryItems].[RecentsGroup].
- Fixed food diary save RecentsGroup omission.
- Added rename function for user entered labels.
-
Wednesday, May 11, 2022:
- Meal name property 'Hidden' is now implemented.
- If all meals hidden, a generic 'Add to Diary' is used.
- Legacy meal assignments are preserved (as much as possible) when hidden is enabled later.
- Updated nuget packages, mainly entity framework.
- Updated bootbox to 5.5.3 (with added fix for bootstrap 5), moment to 2.29.3, and signalr to 6.0.5.
-
Saturday, May 7, 2022:
- Updated nuget packages.
- Meal Names may now be customized on a per user basis.
- Meal name 'Hidden' property stored, but not yet implemented.
-
Thursday, April 28, 2022:
- Added UserId and Hidden to Meal definitions.
- Refactored to get Meal definitions by UserId, allowing for individual customization.
- Refactored to use MealOrder in diary entries, rather than MealId.
- Added Elmah to admin dropdown.
-
Monday, April 18, 2022:
- Fixed issues in account options razor pages resulting from session expiration.
-
Saturday, April 16, 2022:
- Fixed masking of deprecated entrées in diary recent list.
- Regenerate diary model on label or recipe delete.
-
Wednesday, April 13, 2022:
- Re-ordered maintenance dropdown.
- Cleaned up imminent shutdown message.
-
Wednesday, April 6, 2022:
- Fixed entrée issue involving past versions with changed portions.
-
Monday, April 4, 2022:
- Added signalR and bootstrap not found clears to elmah admin.
-
Sunday, April 3, 2022:
- Converted diary recipe/entrée tooltips to Telerik, for better behaviour on touch screens.
-
Thursday, April 1, 2022:
- Added tooltip to diary entries showing ingredients for recipes and entrées.
- Fixed additional issue around bootstrap tooltips.
-
Tuesday, March 29, 2022:
-
Fixed issue in progress report graphs, where total calories appear higher than those reported in the diary.
- A manufacturer's carb calories may be less than x*4, since they account for metabolically dead carbs used in low carb products
- Examples include Atkins Shakes and Mission low carb tortilla.
- This is to be expected.
- Updated nuget and libman libraries.
-
Fixed issue in progress report graphs, where total calories appear higher than those reported in the diary.
-
Sunday, March 27, 2022:
- Fixed error in asynchronous application bootup process.
-
Friday, March 25, 2022:
- Added net carbs column to report series sql server database table.
- Updated database with net carbs series data.
- Added net carbs and grams info to pie chart progress report tooltips.
- Moved BuildReportSeries() to administration functions.
-
Thursday, March 24, 2022:
-
Fixed issue with entrée past/future related to conversion to System.Text.Json from newtonsoft.
- There was a missing { get; set; } in the cached model. Silly me!
- Clarified text hints in entrée manager for 'Last Time' and 'Next Time' buttons.
-
Fixed issue with entrée past/future related to conversion to System.Text.Json from newtonsoft.
-
Wednesday, March 23, 2022:
- Added calories and grams to pie chart progress report tooltips.
-
Saturday, March 19, 2022:
- Changed PostLocalDateTimeOffset() to always post on a get.
- Fixed more issues with "sticky" bootstrap tooltips in food diary and recipe analyzer.
-
Monday, March 14, 2022:
- Fixed issues with "sticky" bootstrap tooltips in food diary.
- Fixed issue with progress reports when we enter weight into diary immediately after login.
-
Tuesday, March 8, 2022:
- Removed some noisy logging.
- Log user name on logins and logouts.
- Threaded off login initializations, greatly speeding up the login process.
- Removed redundant calls in food diary.
-
Friday, March 4, 2022:
-
Adjusted recipe analyzer when trying to add a recipe name AFTER we have entered ingredients.
- We now ask before obliterating work in progress.
- Fixed issues around changing entrée entries in the food diary.
-
Adjusted recipe analyzer when trying to add a recipe name AFTER we have entered ingredients.
-
Wednesday, March 2, 2022:
- Tuned javascript and css loading for performance.
-
Tuesday, March 1, 2022:
- Fixed bootstrap tooltip issues.
-
Monday, February 28, 2022:
- Bundled kendo scripts to reduce loads.
-
Monday, February 21, 2022:
- Fixed issue in recipe analyzer where the portion is incorrectly swapped to "1 Recipe".
-
Saturday, February 19, 2022:
- Moved landing page content to static file for easier updates.
- Updated various nuget packages.
- Cleaned up login and register pages.
- Admin can now read log file from ui.
- Cleaned up logger messages.
-
Thursday, February 17, 2022:
- Cleaned up the deploy, reducing file load and footprint.
-
Wednesday, February 16, 2022:
- Added sitemap.xml generator. It was about freakin' time.
- Updated various nuget packages to latest.
-
Monday, February 14, 2022:
- Generalized some static html content for non-deploy content/documentation updates.
-
Sunday, February 13, 2022:
- Additional UI cleanup.
-
Saturday, February 12, 2022:
- Cleaned up various html/bootstrap formatting issues.
-
Friday, February 11, 2022:
- Cleaned up navbar html.
- Added vertical navbar for major functions.
- Added instruction areas in label and recipe functions.
- Added a cute salad to the logo, with egg.
- Cleaned up tooltips, still some to go.
- Continuing signalR work.
-
Tuesday, February 8, 2022:
- Adjustments to address errant signalR not defined.
-
Monday, January 31, 2022:
- Updated to ElmahCore 2.1.1.
- Fixed navbar toggle set point.
- Continued work on diet partnerships, chat and signalR.
-
Wednesday, January 26, 2022:
- Fixed/refactored various bootbox scripts.
- Removed/replaced deprecated HTML.
-
Tuesday, January 25, 2022:
- Switched to Font Awesome Kit for CDN loading, which fixes previous FA loading bug.
- Re-started signalR work for diet clubs and chat.
-
Sunday, January 16, 2022:
- Entrée cog now spins when active/available.
-
Saturday, January 15, 2022:
- Expanded profile and settings navbar dropdown.
- Updated to Font Awesome Pro 5.15.4
-
Wednesday, January 5, 2022:
- Centered "Nutrition Facts" at top of nutrition labels.
- Preliminary work to allow upload of food images.
- Preliminary work to enable Azure blob storage.
-
Wednesday, December 29, 2021:
- Updated icons for various operating systems and devices. This hadn't been looked at in years.
-
Monday, December 27, 2021:
- Fixed bootstrap fallback path in layout.
- Fixed missing DateCreated on new user registers.
- Defaulted DateCreated to latest DateLastAccess for remaining legacy null DateCreated.
- Fixed the cookie opt-in dialog.
- Fixed Bootstrap 5 CDN fallbacks. Silly me.
-
Saturday, December 18, 2021:
- Added AddSessionStateTempDataProvider(); as appropriate to program.cs, to resolve lost status messages in identity UI.
-
Friday, December 17, 2021:
- Updated to Bootstrap 5.
- Cleaned up scaffolded identity and management pages.
- Fixed up bootbox close button styleing for Bootstrap 5.
- Embedded bootbox in site.min.js, at least until a Bootstrap 5 version of bootbox becomes available.
-
Tuesday, December 14, 2021:
- Fixed problems with displayed nutrition info when selecting recipes and entrées in the food diary.
- All files edited to file scoped namespaces to improve readability.
-
Monday, December 13, 2021:
- Replaced Microsoft.AspNetCore.Mvc.NewtonsoftJson with System.Text.Json.
- Fixed clear measure javascript error in browse foods.
- Fixed default measure when entering from a label, on submit/verify.
- Fixed delete master entrée from add/delete screen when no name.
- Fixed various and sundry .net 6 conversion issues.
-
Thursday, December 2, 2021:
- Disabled nullable context across all projects. This is a non-trivial migration.
- Fixed issue in Convert() in MeasurementTranslator that caused exception on non-convertible measures.
-
Wednesday, December 1, 2021:
- Enabled nullable context and implicit global usings across all projects.
- Fixed EF core/database issues enabled due to nullable context.
- Removed all unnecessary "using" statements.
- Moved all startup.cs code to top level code in program.cs, preserving asynchronous startup tasks.
-
Wednesday, November 17, 2021:
- Updated all projects to .net 6.0
- Updated nuget packages, mostly 6.0 updates.
-
Saturday, September 25, 2021:
- Fixed various Typescript issues
- Fixed issues with tsconfig.
- Updated various nuget packages.
-
Wednesday, September 22, 2021:
- Added ChangeMeasureRetainWeight() to FoodItem model.
- Added CurrentAmount to FoodItem model.
- The food browser now maintains weight equivalence when changing the measurement units.
- The food browser now maintains the current FoodItemWithNutritionLabel across posts, greatly speeding up queries.
-
Wednesday, August 25, 2021:
- Fixed the recents query in the diary database.
- Fixed error in measurement converter synonym lookup.
-
Monday, August 23, 2021:
- Fixed exception in add label when serving size is inconsistent.
- Minor html formatting in secondary lists.
- Restored full length recents list in food diary.
-
Thursday, August 12, 2021:
- Fixed several entrée chaining bugs.
- Updated various libraries, mostly Microsoft framework stuff, via Nuget Package manager.
-
Monday, August 9, 2021:
- Fixed update errors in foods database and re-consolidated SR, FNDDS, and CN.
- Added leftovers to recents list in food diary.
-
Monday, August 2, 2021:
- GetRecents() stored procedure adjusted to return only top 100.
-
Sunday, August 1, 2021:
- Improved default measure selection when searching for food items in food browser, food diary and recipe analyzer.
- Added options (user and global levels) to display sugars as teaspoons.
-
Added global and user preference levels of "display sugars as teaspoons" toggle.
- User level SugarsAsTeaspoons defaults to true, takes precedence over global level.
- Global level SugarsAsTeaspoons defaults to true.
- Fixed missing "drop" entry in "DefaultConversions.txt".
- Fixed error in CompareInexact() that excluded some matches in food searches.
- Added sugars imputed to zero when total sugars are zero.
- Fixed display of imputed sugars on nutrition label.
-
Wednesday, July 28, 2021:
- Guid integrity check on save preferences added.
- Preferences date modified on save fixed.
-
Tuesday, July 27, 2021:
- Reset various food models when nutrition label options are set/reset.
- Fixed edge case in product label add/edit involving non-weight and non-volumetric serving size.
- Fixed food browser to use proper userId when logged in.
- Label entry with mixed weight and volume measures enters both.
-
Wednesday, July 21, 2021:
- Updated json packages and nuget packages.
- Fixed javascript errors in SelectedFavoriteChanged().
-
Sunday, July 18, 2021:
- Fixed miscellaneous javascript quote mark bugs in 'diary.ts'.
-
Saturday, July 17, 2021:
- When adding entrée to diary, default to former measure if entrée was used previously.
-
Thursday, July 15, 2021:
- Additional javascript errors related to diary editing fixed.
-
Tuesday, July 13, 2021:
- Fixed javascript error on return from master entrée edit.
- Fixed disable food selection on edit of existing diary entry.
-
Sunday, July 11, 2021:
- Updated elmahcore from local build to get current fixes.
-
Saturday, July 10, 2021:
- Added javascript error capture with post to elmahcore.
- Added the elmahcore font resources.
-
Friday, July 9, 2021:
- Complete refactor of smart cache rebuild for speed and accuracy.
- Moved log files to the Everleap default logfile directory.
-
Thursday, July 8, 2021:
- Refactored smart cache rebuild.
- Added entrée ingredients to smart cache rebuild.
- Added original text column to smart cache table.
- Fixed duplicate id in administration cshtml/javascript.
-
Monday, July 5, 2021:
- In food diary model, skip hints required in AnalyzeHeuristics() when screening recents and entrées. Fixed.
- Javascript error (benign) related to new nutrition label fixed.
-
Sunday, July 4, 2021:
- Fixed DateTimeOffset error in progress series update/save.
-
Saturday, July 3, 2021:
- Changed the term "Menu" to "Entrée" across the app and the database.
- Fixed edge case in add food from label where we needed >=1 rather than > 1.
- Fixed label display error in add food from label when specifying an ad hoc container/package.
-
Tuesday, June 29, 2021:
- Adjusted update on amount change when making diary entries.
-
Sunday, June 20, 2021:
- Site hosting migrated to Everleap.
- This results in an almost 3x performance boost.
-
Saturday, June 19, 2021:
- Re-implemented food grid used for browsing foods.
- Fixed weight units error when entering body weight in diary.
-
Friday, June 18, 2021:
- Smoothed graph when displaying weight in stone.
- Re-implemented the footer.
- Fixed (somewhat) the data grid size when browsing foods.
-
Thursday, June 17, 2021:
- Edited about and release notes layout.
- Increased session timeout to 60 minutes.
-
Tuesday, June 8, 2021:
- Fixed MenuUpdateFromParsedRecipe() exception when there are no matches for an item.
-
Monday, June 7, 2021:
- Menu previous/next added dates of entry.
- Diary menu small format (phones) fixes.
-
Sunday, June 6, 2021:
- Layout updates begun.
-
Friday, June 4, 2021:
- Fixed a subtle regex problem affecting subtraction on an edge case.
-
Wednesday, June 2, 2021:
- Added an image of The Programming Chef. It only took 10+ years...
-
Wednesday, May 26, 2021:
- Moved special rules from ParseLeadingNumber to NormalizeRawrecipe for efficiency.
- Fixed special rule that broke subtraction of string amounts.
-
Tuesday, May 25, 2021:
- Fixed issue where unicode thin space (0x2009) is pasted into a recipe, generally directly from a web page.
- Generalized white space solution for pasted recipes.
-
Monday, May 24, 2021:
- Fixed newly exposed Datetime/DateTimeOffset issue in food diary entries.
- Fixed javascript ajax post error that sometimes called Diary/RecentChanged twice.
-
Wednesday, May 19, 2021:
- Updated nuget and libman libraries.
-
Monday, May 17, 2021:
- Additional smarts (heuristics) added to portion/measurement interpolation.
-
Sunday, May 16, 2021:
- New menus now insert in date order.
- Fixed javascript disabled on menu next.
- Added tooltips for menu next/prev to indicate day of entry.
- Publish is now self-contained, winx-64, and pre-compiled.
-
Monday, May 10, 2021:
- Fixed additional display errors when adding from a commercial label.
-
Monday, May 3, 2021:
- Fixed save new master menu error (Newtonsoft.Json.JsonSerializationException).
- Fixed amount display error when adding from a commercial label.
-
Sunday, May 2, 2021:
- Increased nutrition label width.
- Fixed revised nutrition label formats.
-
Wednesday, April 28, 2021:
- Fixed edge case size error in saving commercial labels.
- Fixed sugar amount hints when total carbohydrates is zero.
- Fixed some minor javascript errors.
-
Wednesday, March 10, 2021:
- Turned off BFPD database to increase performance.
- Fixed legacy bad data in food diary entries.
- Added disable/enable during update posts in food diary.
- Added search memory to grid food filtering.
-
Wednesday, February 24, 2021:
- Added delays to incremental searches to increase responsiveness.
- Fixed grid filtering to return mimimum result.
-
Tuesday, February 23, 2021:
- Fixed bootup initialization out of memory problem.
-
Thursday, February 4, 2021:
- Updated Telerik libraries.
- Updated Nuget packages.
- Updated robots.txt.
- Updated InitializeDomain for faster debug time.
- Miscellaneous edits.
-
Tuesday, January 5, 2021:
- Fixed progress report update on weight changed.
-
Monday, January 4, 2021:
- Fixed "second operation was started on context" errors that occurred on production database.
- Fixed food search in diary.
- Fixed diary menu management errors.
- Fixed recipe analyzer delete error.
- Added wait cursors to several diary commands.
-
Sunday, January 3, 2021:
- Happy Birthday Matthew G!
- NuGet updates.
- Elmah 2.x update.
- Finer admin detail on delete unconfirmed registrations.
- Added last accessed datetime to user login.
-
Friday, January 1, 2021:
- Fixed created date on new user registrations.
- Added deployment slots in Azure.
-
Wednesday, December 30, 2020:
- Added "Friend" as screen nickname when nickname not set.
-
Monday, December 28, 2020:
- Register new user clean up.
-
Sunday, December 27, 2020:
- Debugged password reset.
- Refactored email for DI.
- Adjusted SendGrid settings.
-
Friday, December 25, 2020:
- Food search fixed to filter correctly.
- Food search refactored for speed.
-
Wednesday, December 23, 2020:
- Fixed weight diary bugs.
- Fixed home page links.
- Added Application Insights telemetry.
-
Tuesday, December 22, 2020:
- Removed legacy directories and paths.
- Fixed delete ingredient buttons on the recipe analyzer view.
-
Monday, December 21, 2020:
- Label entry button fixup.
- Analyze recipe button fixup.
- Logging levels adjusted.
-
Sunday, December 20, 2020:
- Deployed refactored site to production.
-
Saturday, December 19, 2020:
- --- Updated to .NET 5.0 ---
- Fixed up error page handling with custom pages and proper ajax failure response.
-
Sunday, November 29, 2020:
- Not dead yet!
- Full tech stack retooling to .net Core 3.1
- New updated USDA nutrition label added.
- Many bug fixes during the single ship transit out (and back) to the Kuiper Belt
-
-
..... DISCONTINUITY.....
-
Thursday, May 16, 2019:
- Added menu repair on the fly. Fixes multiple chain issue in Food Diary menus.
- Fixed time resolution (milliseconds) from moment.js and Food Diary model and controller.
-
Friday, March 15, 2019:
- KM entered 3000 for the year in Diary. Good one! Patched.
-
Monday, February 11, 2019:
- Fixed the Recipe and Menu comment editor.
-
Monday, January 28, 2019:
- Updated to Telerik UI for ASP.NET MVC 2019.1.115.
- Fixed editor access error in diary. (Menus comments still do not edit.)
-
Thursday, August 16, 2018:
- Fixed major bug calculating data series in progress reports when alcohol is reported.
-
Friday, July 27, 2018:
- Updated all nuget packages.
- Updated to Telerik UI for ASP.NET MVC 2018.2.620.
-
Sunday, June 24, 2018:
- Fixed recipe portion string loses count after page switch bug.
- Fixed egg/eggplant, water/watermelon type search bugs.
-
Tuesday, June 19, 2018:
- Fixed rounding error on number to human readable string.
-
Saturday, March 24, 2018:
- Fixed create/update food label bug.
- Fixed two menu chain issues in the food diary.
-
Saturday, February 17, 2018:
- Fixed portion bug(s) in Menu Add/Delete.
-
Sunday, January 28, 2018:
- Updadated Telerik libraries to 2018.2.620.
- Updated all nuget packages (bootstrap, jquery, etc.) to latest versions.
-
Wednesday, January 17, 2018:
- Fixed menu chaining bug.
-
Tuesday, September 19, 2017:
- Meaningless first word exclusion added to search.
- "thick" added to ignore list.
- Foods and Recipe controller null model fixes.
- On meal stacked bar chart, you can click through to the meal diary for that day.
-
Thursday, July 6, 2017:
-
Recipe line analysis is improved:
- Mixed quantities are now combined if possible (1 tbsp + 1 tsp = 1 1/3 tbsp, etc.)
- The word "plus" used in a line actually adds quantites together.
-
Recipe line analysis is improved:
-
Monday, June 26, 2017:
- Added endsWith() polyfill. Damn you, IE12!
- Fixed null reference in RecipeEditor.
-
Sunday, June 25, 2017:
- Fixed edge case string compare on portions. Curse you StringComparison.OrdinalIgnoreCase!
- Fixed edge case in ParsLineToMeasure introduced with inclusions/exclusions.
- Updated Telerik libraries to 2017.2.621.
- Re-activated efficient Telerik script bundling.
-
Sunday, June 11, 2017:
- Re-implemented "Delete Recipe" for users and admins on recipe analyzer screen.
- Recipes and Diary Menus now allow for comments, directions, pictures, etc.
- This latest feature will need debugging, and will be added to the diary going forward.
- You cannot upload pictures yet, but that will be coming. This will be useful for recipes.
-
Monday, June 5, 2017:
- Fixed edge case bug in Food Diary Recents/Favorites.
-
Tuesday, May 30, 2017:
- Excluded "NS" from plural processing.
- Turned "Suggest" and "HighlightFirst" off for combo controls on food diary entry.
-
Monday, May 29, 2017:
-
Added exclusions (skips) and inclusions (required) to recipe and diary food item searches.
- Any word that starts with a minus sign is used to exclude matches that contain that word.
- Any word that starts with a plus sign is used to only include matches that contain that word.
- This is useful when a search produces a long list, and you wish to winnow it quickly.
-
For instance:
- "2 oz asparagus -boiled", will not return any matches that contain the word "boiled".
- "8 oz ribeye +australian -petite", will only return matches that contain the word "australian" and not "petite".
- Food Diary dropdowns now manage their widths.
-
Added exclusions (skips) and inclusions (required) to recipe and diary food item searches.
-
Saturday, May 20, 2017:
- Fixed 1 5/8+1-1/4 math/regex bug.
- Fixed LocalBootTime null error.
- Fixed food diary menu future/past/save issues.
- Generalized Session expiry/auth code.
- Sample reports and food diary are now displayed for the current live Programming Chef entries.
- Fixed reports public name bug.
- Various admin refactors and fixes.
- Label save bug fixed.
- Default label measure bug fixed.
- Report alcohol threshold value added to suppress very small percentages.
- Fixed return from Add/Delete Menu to food diary bug.
-
Monday, March 27, 2017:
-
Fixed Chrome rendering of input on a Macbook that caused overflow/visibility problems.
- This was a real pain in the rear! Very subtle stuff.
- Slight overflows were being hidden, but only in Chrome on the iPad and Macbook, with retina display.
- Again, only Chrome failed, and only on iPad and Macbook.
- Setting overflow to visible on the enclosing div solved the problem.
- Fixed Chrome autocomplete problem on label input, by setting autocomplete to "off" on enclosing form.
-
Fixed Chrome rendering of input on a Macbook that caused overflow/visibility problems.
-
Saturday, March 25, 2017:
- Fixed issues around past/future menu choices (leftovers).
- Refactored diary code to reduce unnecessary and complicated code blocks.
-
Friday, March 24, 2017:
- Recipes and menus with unknown items save and restore properly.
- The unknown items are preserved.
- This refines yesterday's fix to preserve information as expected.
-
Thursday, March 23, 2017:
- Save Recipe with unknown item bug fixed. Unknown items are dropped on a save.
-
Sunday, March 19, 2017:
- Menus now appear in Recipe Analyzer searches when a user is logged in.
- Menus can now be saved as a recipe in the Recipe Analyzer.
-
Saturday, March 11, 2017:
- Major clean up/fixes of session and identity timeouts.
- Fixes/adjustments to login and threaded initialization.
- Telerik library updated to 2017.1.223.
- Updated to Microsoft.Net.Compilers.2.0.1.
-
Friday, March 10, 2017:
- Progress indicators added to ajax calls.
- Admin clear elmah 404 functionality.
- Elmah 404 filter for emails.
- Google AdSense preliminary work.
- Bread crumbs at top removed. They were pointless.
-
Tuesday, March 7, 2017:
-
Safari textarea issues "fixed":
- Safari displayed menus/recipes raw text as a single line.
- It appeared to ignore the CR/LF between lines.
- This required "white-space: pre" rather than "white-space: nowrap".
- Interestingly, I think Safari is correct, and Chrome is wrong!
- Textarea resize in menu management fixed.
- Guest user copy menu links fixed.
-
Safari textarea issues "fixed":
-
Monday, March 6, 2017:
-
Major rewrite of Food Diary Menus:
- There has always been a problem logging leftovers from a menu.
- Menus are now added/updated via an Add/Delete dialog. These are the "Master" copies.
- Logging a menu in a meal adds a local/temporal copy.
- Local/temporal copies are editable without affecting the master or other entries.
- When one adds a menu, previous copies can be called up via "Last Time"/"Next Time" buttons.
- So a tweaked menu from yesterday (or last week) can immediately be used to log leftovers.
- Various guest user fixes various.
- Data caching fixes.
- Progress (graph) fixes and adjustments.
- Various maintenance stored procedures re-factored / added.
- Pulldown resize adjustments.
-
Major rewrite of Food Diary Menus:
-
Sunday, February 26, 2017:
- Quick fix: Register emails are now re-enabled.
-
Monday, January 30, 2017:
-
Recipe/Menu analysis views refactored for ease of use:
- Analysis results/editors and controls moved above text area.
- Delete button per line added.
- Search result combobox now uses optgroup to display user's value.
- Textarea controls now dynamically size.
- Edge case bug involving letter case correction fixed.
- 100 day trial begins for The Programming Chef!
-
Recipe/Menu analysis views refactored for ease of use:
-
Sunday, January 29, 2017:
- Orphaned recipes have been deleted.
- The SearchCache has been regenerated.
- The SmartCache has been regenerated.
- The SmartCache has been adjudicated.
- We are ready for a trial!
-
Saturday, January 28, 2017:
- Menus are now fully integrated with SmartCache learning AI and adjudication.
- Menus now include 'Lock Text' buttons (like the recipe analyzer).
- Several menu/analyzer bug fixes, edge cases around locked text.
-
Friday, January 27, 2017:
- Menu save bug when no entry chosen fixed.
- Menu 'alias'/'original text' issues.
-
Thursday, January 26, 2017:
- Telerik library updated to 2017.1.118.
- Kendo 'All' bundle duplication fixed.
- Robots.txt updates.
- Orphaned recipe cleaner added and exposed to admins. Recipes from the old site whose users have not migrated are deleted.
- Fixed cache bug that duplicated search/analyze entries.
-
Sunday, January 22, 2017:
- SmartCache adjudication is in place for admins.
-
Wednesday, January 18, 2017:
- Updated Cache administration views.
- Added SmartCache statistics to admin view.
- SmartCache statistics persists adjudication information on rebuild.
- SmartCache potential deadlock fixed.
-
Tuesday, January 17, 2017:
-
Added the SmartCache!
- Learning AI: When a person selects an alternative choice from an analyzer search, it can be remembered.
- Knowledge persistence is predicated on recipe saves.
- This was previously implemented and removed, because that version was crap.
- Frequency of use for such a search is remembered.
- Different choices for the same search are remembered.
- These alternate choices and frequencies are used to make subsequent analysis smarter.
- These smart entries are human adjudicated for global use, though still TBD.
- Broke out admin functions to partial views.
- SmartChoice Adjudication is still TBD.
-
Added the SmartCache!
-
Tuesday, January 10, 2017:
- Streamlined the food browser.
- Added creation date for user registrations.
- Added some admin information on user registrations.
-
Wednesday, January 4, 2017:
- Fixed a rounding issue caused by inconsistent food labels affecting Progress Reports.
-
Tuesday, January 3, 2017:
- Hello from Denver, Colorado!
- Happy Birthday, Matt!
- Fixed a null reference in Progress Reports.
-
Sunday, January 1, 2017:
- Updated to jQuery 3.1.1.
-
Worked with Telerik to resolve jQuery 3.x.x issue(s).
- Updates to the DOM are now asynchronous, and execution order is guaranteed.
- See: Breaking change: document-ready handlers are now asynchronous
- On an ajax update, javascript executed after an html update needs to execute on document ready to allow full DOM update.
-
This required a closure on the json array returned, and passing an eval() function to document ready, e.g.:
- var scriptFunc = function (text) { return function () {eval(text);}; };
- $(scriptFunc(views[v].script));
- Interestingly, the previous code was NOT correct, since execution order was not guaranteed. We and everyone else lucked out.
- Fixed a scrolling/positioning annoyance on mobile devices when a soft keyboard opens.
- Fixed email repository async error when called as part of asp.net page life cycle.
- Fixed mis-nested recipe update using(context) code.
- Fixed mis-nested label update using(context) code.
- Fixed save/update recipe to already deprecated owner/name; we now un-deprecate!.
- Happy New Year!
-
Thursday, December 22, 2016:
- Fixed minor update issue with weight report.
-
Attempted to create a test web site for Telerik over on GoDaddy.
- Myriad bogus security failures.
- GoDaddy Windows hosting not up to running a complex MVC site.
- That was a day I will never get back.
- The decision made previously to migrate all my hosting off GoDaddy was correct.
- That said, GoDaddy is good for simple sites and blogs, and cost effective for that.
-
Monday, December 19, 2016:
- Telerik is still incompatible with jQuery 3.x.x. This is getting old. Reverted to 2.2.4.
- Progress Reports data loading has been re-factored/optimized.
- Added "Nested Files" to solution to clean up Visual Studio solution view.
- Updated multiple libraries via nuget.
- jQuery is now current (3.1.1). It had been held back by Telerik compatibility, but the latest release fixes this.
- Note: "Santa Claus" is and was the first White Walker, the "Night King". Close your flue.
-
Friday, December 16, 2016:
- Re-factored some strong name conflicts and issues.
-
Thursday, December 8, 2016:
- Added food database source table.
- Added source field to all USDA food sources. This enables audit trailed recipe analysis.
- Updated to SR28rev, FNDDS 2013-2014, and CN20.
- Wrote a wee triple left joined stored proc to delete all unused deprecated food items across all tables.
- Re-factored the Admin update database functions to handle all the above.
-
Saturday, December 3, 2016:
- Updated some nuget packages.
- Refactored the build number to a global static.
- Improved initialization thread for progress reports, including LocalBootDateTimeOffset(), login, and logoff.
-
Friday, December 2, 2016:
- Oops. Had [Authorize] decorating "Contact". My bad.
-
Thursday, December 1, 2016:
- Progress reports had a mis-named cached object, fixed.
- Added a thread upon login to pre-load initial progress report series.
- Added sample data to the progress reports when not logged in.
-
Wednesday, November 30, 2016:
- Spelling and admin screen edits.
- Removed volume after cooking from recipe analyzer. It is never used.
-
Tuesday, November 29, 2016:
- ProcessDegenerateSingle: startswith for cases like "egg" vs "eggs".
- Added enable/disable AI search cache to superuser administration.
- Added regenerate AI SQL-server cache to superuser administration.
-
Monday, November 28, 2016:
- Regenerate guest user cleaned up.
- Guest preferences now reset for a better view.
- Login now properly clears cached preferences.
- NormalizeRawRecipe: Fixed bug that improperly split a line when adding line breaks to raw recipe pasted from allrecipes.com.
- Fixes to caching and cache regeneration.
- Slight improvement to raw ingredients in targets of heuristic compare.
- Edge case in elimination of measures from existing analyzer recipe lines.
-
Sunday, November 27, 2016:
- De-coupled reports from meal diary.
-
Saturday, November 26, 2016:
- Simplified menus in the food diary.
- Fixed update issues associated with menus in the food diary.
-
Tuesday, November 22, 2016:
- Fixed personal preference persistence. This broke when I robustified contexts for thread safety.
- Added personal preferences to display fructose and/or alcohol on nutrition labels.
- Fixed edge case indexof bug in recipe analyzer.
- Fixed "crumbs" ==> "crumb" in AnalyzerHeuristicItem.ScoreDietItem.
- Fixed false promotion of "raw" in AnalyzerHeuristicItem.ScoreDietItem.
- Advanced menu exclusions moved to a pref and reflected in UI. Default is hidden.
-
Monday, November 21, 2016:
-
Since January 9, 2016:
- There have been 643 commits.
- Hundreds of bugs have been fixed.
- Myriad improvements to the algrothms and heuristics have been added.
- Countless deploys to Azure have been pushed.
- The landing page has been updated.
-
Since January 9, 2016:
-
Saturday, January 9, 2016:
- I got tired of waiting for view compiles on the app server. All views now deploy compiled.
- Tonight continues Elvis Fest in Chapel Hill, NC. Team Chef drop-shipped yesterday.
- See you all again tonight!
-
Friday, January 8, 2016:
- There have been daily builds and deploys since my last entry here.
- Many bugs fixed, many bottlenecks opened up.
- Recipes and labels can be entered and saved, but please use the old site if you wish the data preserved.
- Programming Team Chef is currently re-establishing the Meal Diary function.
-
Thursday, December 17, 2015:
- Well, here we are on Azure...
- USDA databases are all current.
Comments from the original site...
-
Monday, March 23, 2015:
- Fixed a bug in the recipe analyze page for LEROY9804. I cannot email back as his account blocks me.
- Fixed a number of bugs in the Food Log. Editing favorites now works as it should.
- In Food Log, I now default to a custom portion in a recipe, if it exists.
-
Sunday, November 2, 2014:
- Myriad bugs and adjustments.
- Updated with SR27, CN18, and FNFDDS 2011-2012; this adds 4900+ items from the USDA databases.
-
Sunday, April 6, 2014:
- Added a report tab for logged food. One must log in for this to enable.
- Pie chart displays percentage energy from each energy source, plus calories.
- Stacked bar chart displays daily consumption over time.
- Options for today only, end time series on today, skip days under a threshold, and start and end dates.
- Options auto-save to preferances and are in effect on subsequent visits.
- Added an admin tab, just for me.
-
Sunday, March 29, 2014:
- Fixed some annoying bugs in the diet logger (I am using it to lose weight).
-
Sunday, January 12, 2014:
-
I have decided to keep this sandbox active for a few more months in order to:
- Implement an HTTP web service using ASP.NET Web API and Json
- Start re-implementing functionality for GeeksWhoCook using MVC
- Implement reasonable authentication/authorization
- Open the API to those who might find it useful, especially cooking apps on mobile devices
- Bottom line, this looks like fun.
- Stay tuned!
-
I have decided to keep this sandbox active for a few more months in order to:
-
Sunday, January 5, 2014:
- Added some location path="." inheritInChildApplications="false" tags to accommodate downstream sites.
- Implemented an instance of blogengine.net to experiment with. It may still be running at geekshocook.net.
- Redid the table SQL scripts for all the data bases to preserve structure, keys, constraints and indexes.
- If a fog person reads this, ping me. It would be interesting.
-
Sunday, December 29, 2013:
- We celebrate the birth of Kahless, on this most Klingon Khristmas! Qapla'!
- The nutrition label now has information decoupled from flow on extended nutrition information.
- I added Vitamin D. About time!
- The extended nutrition label can optionally skip any N/A values, and auto size.
- Duplicates from USDA databases are removed. Specifically, CN has many duplicated from SR.
- All things being equal, food searches sort with most complete data nutrition information first.
- Created admin routines to regenerate the search cache. Useful for deprecations and updates.
- Worked on admin routines used to update databases and references to databases as updates from outside occur.
- Julia's associative memory is more specific. Duplicates with base references eliminated.
- Search results are now cached. The second time a phrase is analyzed, the results can be retrieved directly.
- The food logger now saves alias strings, to aid in admin functions and recovery.
- Fixed a LINQ to SQL Optimistic Concurrency problem when deleting recipes in production.
-
Wednesday, November 27, 2013:
- This site will NOT move to Azure after all!
- I implemented a full copy of this site and its data in Azure.
- I tested across free, shared, standard, and even 2-processor sized sites.
- Azure was always slower by at least a factor of three, and often much, much more.
- Often, identical back to back runs had significantly different times (all slower) for no reason.
- Holy moly! Who would have thunk!
-
Sunday, November 24, 2013:
- Many changes are coming!
- This site will migrate by late January.
- The new sites, GeeksWhoCook and GeeksWhoEat, will replace this development site.
- These sites will emphasize cooking skills, weight loss and maintenance, and meeting others.
- Hosting will migrate to Azure, with a test site extant later today.
- All USDA databases (SR, CN, FNDDS) are now consolidated.
- Various admin tools have been implemented to allow me to update USDA and other databases as regular updates of them are released.
-
Sunday, October 27, 2013:
- Julia has undergone some surgery.
- Julia associative memory wipe/regenration implemented.
- Administrator can now edit and resave any recipe.
- Loaded recipes can be re-analyzed.
- If they send back a Terminator from the future to shut down SkeyChef and Julia...
- ... it will look like Chef Ramsay.
-
Sunday, October 13, 2013:
- Today is the day the artificial intelligence Julia has gone live.
- This was the last major brain section for the food analysis AI.
- This is the part that learns patterns from users who save and edit recipes.
- The more people analyze and refine food choices, the smarter Julia gets at choosing her matches.
- Queue the SkeyChef Terminator jokes...
-
Saturday, September 28, 2013:
- Many new heuristic additions.
- Nut Butter Dude, ping me if you see this....
-
Sunday, September 22, 2013:
- Converted all varchar to nvarchar in databases.
- Duh.
-
Friday, September 13, 2013:
- Spooky day...
- Recipe measurements now round to nearest 1/8, 1/4, or 1/3, in keeping with common kitchen measurements.
- Number rounding and string conversion is now more regular.
- Updated help info on analyzer tab.
- Added item to "No Matches" message.
- Fixed "Do NOT Copy Food Name" issues.
-
Wednesday, September 11, 2013:
- Bug! Edge case!
- When a database supplies a measure in grams with Amount greater than 1, the converter got crazy.
- Amount and weight are now normalized around one in ParsePortionLoadedFromDatabase().
- One pound of basmati rice no longer weighs 22680 grams!
-
Monday, August 12, 2013:
- Noticed that micro-nutrient percentages were displaying incorrectly on the long label. Fixed.
- Holy crap! I forgot to re-initilaize HA objects on some search list regeneration! Fixed!
-
Sunday, July 21, 2013:
- Working on better structured exception handling.
- Errors email directly to me.
-
Wednesday, July 17, 2013:
- A bunch of clean-up entering food items from their nutrition labels.
-
Saturday, July 13, 2013:
- Recipes and foods entered from labels can be deleted by their owners. (or me!)
- Recipes or foods entered from labels are deleted smart: if referenced by a log or another recipe, they are deprecated, else they are removed.
- Recipe analyzer matching lists are now ajaxified with search. Hoo ya!
- Recipes can now "lock" user text. A food typed by a user can prevent the description from the backing database item from replacing that text.
- As always, numerous bug and display fixes.
-
Sunday, June 30, 2013:
- Food logger fixes. I had become too clever by half. Better now.
- Food, recipe, label, and food logger databases tuned for performance (indexes added or fixed).
- Various layout and bug fixes.
-
Sunday, June 16, 2013:
- A lot of work on the recipe analyzer has been done.
- Many errors corrected, two factor analyzer moved into the object, portions works as it should, etc.
- A user brought to light problems, so I dove in all the way on the recipe analyzer.
-
Sunday, June 2, 2013:
- Added favorites to food logger.
- Still needs deletes and some debugging, but still kind of cool.
-
Tuesday, May 28, 2013:
- Whoa! Food Label addition was screwed up.
- Hopefully fixed now...
-
Sunday, May 26, 2013:
- Lots of work cleaning up and robustifying Food Log.
- Food Log may be ready for prime time!
- Have begun cleaning up the overall de-modeling creep: Moving inappropriate functionality to model from controller and view.
-
Sunday, May 19, 2013:
- Un-oops, sigh of relief. Primary keys were set incorrectly in the production database. Silly me.
- OOOPS... Cannot add a new foodItem. Well, I'll be fixing... Odd, it works in the local test environment.
- You may now log your food habits.
- There may be bugs, but a LOT of work is finished!
- WOO DAMN HOO!
-
Saturday, May 18, 2013:
- More work on the food logger...
- If the hot dog guy from the Farmers Market reads this, please email me.
- I will be cooking some duck breasts tonight.
-
Sunday, May 12, 2013:
- Login required for food logger.
- Food logger persists selection across tab changes.
- Other food logger controls persist states.
- Login pops back to page you logged in from.
- I will next finish entry of food log foodItems and their persistence.
-
Saturday, May 11, 2013:
- Telerik update.
- More food logger work...
- I have been to Yosemite. It was grand.
-
Monday, Thursday 28, 2013:
- Fixed nasty little exception in recipe analyzer.
- Playing with on demand combo box in food logger.
-
Monday, March 25, 2013:
- Monkeyed around with food logger...
-
Sunday, March 3, 2013:
- Improved drag and drop on the food logger.
- Drag and drop on the food logger should now work as advertised.
- Slow cooking two kinds of pork ribs this afternoon.
-
Saturday, February 23, 2013:
- Resumed work on logging one's food consumption. See the "Food Log" tab.
- AJAX-ified the nutrition label and data grid.
- Wired up the nutrition label to the current meal in context.
- Making a goat cheese, chard, and herb pie in a phyllo crust tonight.
-
Monday, February 18, 2013:
- Added synonyms. This came as a result of "oe" plurals, like tomatoes and potatoes. Very gnarly.
- BTW, Dan Quayle was treated unfairly over this.
- Recipe analyzer now handles duplicates much better.
- Recipe analyzer algorithm optimized. Only new foodItems are re-analyzed.
- Better handling of updated recipe via the text box.
- Better handling of updated recipe via the controls after an initial analysis.
- Better resolutuion of contention when changes occur in both text and controls.
- Better handling of wordy measures supplied by the databases.
- Addition of a new RawRecipeCompare object, allowing fast and intelligent detection of differences between two text recipes.
-
Friday, January 25, 2013:
- Added a ReaderWriterLock() to manage access to the treeview node map in BrowseFoods. This was needed because when a session adds a recipe or label, the first session to hit BrowseFoods performs an application wide update of the TreeNodes.
-
Thursday, January 24, 2013:
- Happy Birthday to me! (Unlike Gandalf, I have not been on (middle) Earth for ~18,000 years.)
- Fixed insidious timing/lock bug involving static initialization during the application start thread.
-
Fixed a number of little irregularities from my "C" level to do list:
- Fixed RadTreeView to restore selection on return to browse food tab.
- Made recipe and label treeview updates application global.
- Moved buffered treeview structure creation to application start thread.
- Sorted the recipe list.
- Etc.
-
Wednesday, January 16, 2013:
- Adding new databases is now completely independedent of the NutritionDataCollection dll. A custom configuration section in web.config now registers a database and allows deprecation and visiblity.
- This had been bugging me for a while, so kudos to me for finally fixing this once and for all!
-
Monday, January 14, 2013:
- Added FNDDS5.
- Excluded old databases from recipe analysis.
- Turned search threading back on.
-
Saturday, January 12, 2013:
- Added SR25 and CN16 updated USDA databases.
- Updated FNDDS5 tomorrow...
-
Wednesday, January 9, 2013:
- The managed environment launches multiple instances of the application. Modified rolling log file to be on a per instance basis to ease debugging.
- Fixed centering issue on nutritition label (only appeared on mobile devices).
- Cooking a goat cheese/bacon omelette from local ingredients tonight.
-
Sunday, January 6, 2013:
- Leptonica and Tesseract successfully compiled and run. I need to scan nutrition labels from products on store shelves for use in lookups.
- Work on an Apple iOS app to facilitate this site has begun.
- Food Log begun.
- Cooked a very nice pork loin roast with a pomegranate and balsamic glaze last night.
-
Sunday, October 7, 2012:
- Fixed issues around duplicate derived measures for food foodItems.
- Fixed issues around deleting measure from raw recipe box on Analyze Recipes screen.
-
Saturday, October 6, 2012:
- I spent the past week in the mountains kayaking, hiking and programming.
- The AI has been completely refactored into a HeuristicAnalyzer object.
- The new AI object is 750% faster at analyzing a recipe than previous to today.
-
Very much work was done on the heuristics used to select recipe ingredient matches.
Hit rate is HUGELY improved.
- The way saved recipes are used as ingredients is fixed. Searches only against title.
- T and t common measurement usage fixed.
- Many, many proprietary additions to the heuristic analyzer.
-
Saturday, August 11, 2012:
- I am writing this from the outer banks of North Carolina. Sweet!
- There have been many, many deploys since my last notes here.
- Yes, I know I broke the recipe analyzer and label entry. FIXED!
- Newest Telerik controls deployed, licensed version.
- Label entry may be complete. Testers still testing.
-
Next foodItems to implement:
- Personal Food Log.
- Look and Feel: Working with designer to move from a developer sandbox to a functioning public site.
- Look and Feel: Enable site wide skinning with control overrides as needed.
-
Monday, June 25, 2012:
- Happy Birthday, Pam!
- Input label on Add Items From Label tab way smarter!
- Myriad refactors refactored and bugs de-bugged.
-
Sunday, June 10, 2012:
- Much more done!
- See the new label on the add foodItems from label tab.
- Wow! Still almost there!
-
Sunday, April 22, 2012:
- Lot's more done!
- Save and load recipes complete.
- Label ready for extended micro-nutrient values.
- Various bug fixes and optimizations, of course.
-
Next foodItems to implement:
- Add foodItems to database from the nutrition label on a purchased foodItem.
- Enable use of recipes and purchased foodItems in a recipe.
- Add "Format Recipe" with directions, picture, cooking time, etc. and a "Print" function.
- Add personal food log with reports.
- Wow! Almost there!
-
Sunday, April 1, 2012:
- Much has been done, though I have not been consistent updating these comments. Apologies for that.
- Recipe save database is in place.
- "Load Saved Recipes" tab is almost complete, but controls are not yet "wired" up. Take a look.
- Telerik controls updated and re-integrated with the development environment.
- Various bug fixes and optimizations.
-
Tuesday, January 24, 2012:
- Today is my birthday.
- So many fixes, refactors, and AI tuning, I will not describe today.
-
Saturday, January 7, 2012:
- Added heuristics to sort and search algorithms. Food matching greatly improved.
- Bug fix when switching between browse and analyze tab.
- Database and tables for recipe "Save" implemented.
-
Thursday, December 29, 2011:
- ALL implementation specific dependencies removed from NutritionDataCollection dll in preparation for move to MVC3.
- TreeView data intializer refactored (Browse food tab). LINQ queries optimized. 400% increase in performance!
-
Sunday, December 18, 2011:
- LINQ optimizations on nutrition info query, as suggested by S.R. Nice catch!
- Bug fixes to nutrition label adder. Fixes values in recipe analyzer tab.
- Better maintenence of common measure on browse tab when changing foods.
-
Tuesday, December 13, 2011:
-
Build Recipes tab activated:
- This will link with the anlayzer on the next tab.
- Nutrition label to be included.
- Formatted print to be implemented.
- Keep checking, I am working....
-
Build Recipes tab activated:
-
Saturday, December 10, 2011:
- Analyze Recipes portioning (slice, cookie, serving, etc.) and number of servings per recipe now works.
-
Wednesday, December 7, 2011:
- Fixed default portion size to first non-derived portion.
- Working on portioning in recipe analyzer...
-
Wednesday, December 7, 2011:
- Working on portioning in recipe analyzer...
-
Sunday, November 27, 2011:
- The recipe analyzer has been debugged and appears robust. Of course, testing will tell.
- Analyzer threads off each line to a task.
- Dynamic controls created and maintained against the "raw" recipe.
- Scoring algorithm/AI continues to add heuristics.
-
Saturday, October 8, 2011:
- I am back. A trip to France and a new contracting opportunity consumed time.
- The full cut and paste recipe analyzer with AI ingredient analyzer is done in a thick client prototype. I will add this over the next several weeks.
- The look and feel is being revised by a web designer here in NC. Stay tuned.
- Conversion to WCF to expose service, operation and data contracts under way.
- It's good to be back!
-
Sunday, July 17, 2011:
- Paging now makes sure the top row is selected via PreRender and PageIndexChanged events, eliminating an exception.
- The measure (oz, egg, piece, etc.) now resets properly when the selected food changes, eliminating an exception.
- The measure (oz, egg, piece, etc.) now persists intelligently as food selections change.
-
Saturday, July 16, 2011:
- Search Foods is now much, much clearer and cleaner
-
Wednesday, June 29, 2011:
- Viewstate now persisted on server, increasing performance.
- Application and Session timeouts now handled with a re-direct to Home
- Some Ajax update problems fixed