Build: 2024-04-07-583
Release Notes:
-
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 entree 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.
-
Friday, 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.
-
Thursday, 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.
- Varoius admin refactors and fixes.
- Label save bug fixed.
- Default label measure bug fixed.
- Report alchohol threshhold 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 excecution order was not guranteed. 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