Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: preg_replace(): Compilation failed: invalid range in character class at offset 4 in /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php on line 340

Warning: Cannot modify header information - headers already sent by (output started at /home/codema10/public_html/wp-content/plugins/crayon-syntax-highlighter/crayon_langs.class.php:340) in /home/codema10/public_html/wp-includes/feed-rss2.php on line 8
Software Development – Programmer in a Strange Land https://codemastershawn.com Fri, 10 Mar 2017 00:00:13 +0000 en-US hourly 1 https://wordpress.org/?v=6.3.4 103057843 Creating a custom Azure Logic Apps connector https://codemastershawn.com/2017/03/09/creating-a-custom-azure-logic-apps-connector/ https://codemastershawn.com/2017/03/09/creating-a-custom-azure-logic-apps-connector/#comments Fri, 10 Mar 2017 00:00:13 +0000 http://codemastershawn.com/?p=462

Objective

Drop-down dialog allowing selecting, scrolling through and searching for available connectors.
Visual Studio

To create, deploy and use a custom Connector that can be used in Azure Logic Apps. We also want to be able to publish this connector in the gallery (so that it shows up in the list with other connectors). For now the latter appears to be primarily available as invite-only for Microsoft partners.

Disclaimer

During my research it became clear that Azure and the Microsoft Flow services are constantly changing, both in terms of functionality and user interface. What follows are based on my experience at the time of this writing. By the time you read this there have likely been additional changes.

What you need to know first

Drop-down dialog allowing selecting, scrolling through and searching for available connectors.
Azure web UI
  1. Custom connectors are just ASP.NET Web API applications.
  2. An action (the functionality provided by a connector) in Microsoft Flow and Logic Apps relates directly to an operation in your Web API – The connector/action executes the configured operation from your Web API.
  3. While it’s technically not required, you’re going to want your Web API to be described using Swagger (aka OpenAPI Specification). Microsoft uses an extended Swagger spec to provide additional information and functionality to the connector.
  4. Logic Apps will timeout an HTTP request after 1 minute (the documentation for Flow says 90 seconds). If the call to your Web API might take longer you will need to implement the async pattern.

Microsoft Flow / Azure Logic Apps

Logic Apps are an outgrowth of BizTalk and various workflow platforms from Microsoft. They are a way to build workflows that can integrate with a variety of external services. Think IFTTT with the ability to provide more logic, or Yahoo! Pipes.

Flow is kind of a “lite” version of Logic Apps. Flows use the same connectors as Logic Apps, but expose less of their functionality and have fewer options for linking connectors. Microsoft Flow is a direct competitor to IFTTT.

Workflows in both consist of actions. These actions come in two flavors:

  • Triggers – Every workflow must start with a trigger action. Triggers are executed in response to some event. There are two types of triggers:
    • Polling triggers periodically check status (e.g. by calling a Web API) and only take action when the status conditions are met.
    • Push triggers, sometimes called webhooks, provide a special endpoint for the Logic App. When that endpoint is called from an external process with the appropriate values the workflow starts.
  • “Normal” actions – This encompasses all non-trigger actions. These respond to the previous action and may pass their data on to the next action.

There are already several good tutorials on-line that cover the basics of creating Flows and Logic Apps, so I’m not going to go into that here. These are a few that I recommend:

Because Microsoft Flow and Logic Apps both allow the user to select the same connector/actions from the gallery, we will start by adding our Custom API to Flow. Once there it can be rolled out for Logic Apps.

The built-in HTTP connectors

If you don’t need your custom API to be in the gallery where other users can select it to include in their own Flows the easiest way to access it is with one of the built-in connectors:

HTTP Connectors

Custom APIs

Options menu

What we’re looking to do, however, is provide our own branded connector that customers can choose from the gallery instead of one of the built-in HTTP connectors. In Microsoft Flow, this is referred to as a Custom API. In Logic Apps this is referred to as a connector.

To register a Custom API for use in your flows click the gear icon in the top right and select Custom APIs.

On the next page click the Create custom API button:

  1. Upload the Swagger file that describes your API. (As of this writing the process will only accept an uploaded file. It will not accept a URL.)
  2. Upload an icon that represents your service. While the icon is required, it is already pre-populated with a generic image.
  3. Provide a description if you like.
  4. The Host and Base URL should be filled in from the contents of the Swagger file.
  5. Click Continue.
  6. Select the authentication method required by our API. You may be prompted for additional information.
  7. Click the Definition tab. This page shows the operations, parameters, entities, etc. that Flow found in your Swagger file. You may fine-tune names, descriptions, etc. here.

When done click Create API in the top right. If successful, your API should be listed on the Custom API page. From here you can create Connections, edit or remove the API.

T-Rex = Swagger + MS extensions

You may have noticed near the end of the steps in the previous section that a lot of cleanup was needed on the Definition screen. Maybe you needed to provide friendlier names, descriptions or set visibility.

Microsoft has provided the following extensions to the Swagger specification which covers some of these situations:

  • x-ms-summary provides a display name.
  • x-ms-visibility allows an element to be hidden from the UI or behind an “advanced” dialog.
  • x-ms-trigger denotes a trigger as well as what type.
  • x-ms-dynamic-values indicates that the values come from some other process (e.g. the result of another operation).
  • x-ms-dynamic-schema indicates that the format of the values is dynamic.

For more details see Customize your Swagger definition for Microsoft Flow.

Maintaining these extensions in your API’s Swagger by hand could become a real headache, so a Microsoft MVP by the name of Nick Hauenstein has created a library for that. T-Rex extends the Swashbuckle library, which generates Swagger for ASP.NET WebAPI applications, with additional attributes to generate the Microsoft extensions listed above.

Here is an example from the T-Rex documentation:

[Trigger(TriggerType.Poll, typeof(SamplePollingResult))]
[Metadata("Roll the Dice", "Roll the dice to see if we should trigger this time")]
[SwaggerResponse(HttpStatusCode.BadRequest, "Bad configuration. Dice require 1 or more sides")]
[HttpGet, Route("diceRoll")]
public HttpResponseMessage DiceRoll(string triggerState,
                                    [Metadata("Number of Sides", "Number of sides that should be on the die that is rolled")]
                                    int numberOfSides,
                                    [Metadata("Target Number", "Trigger will fire if dice roll is above this number")]
                                    int targetNumber)

NOTE: At the time of this writing the stable release of T-Rex only includes support for the summary, visibility and trigger extensions.

Creating a connection

After the Custom API has been registered you will need to create a connection to it before it can be used in a Flow.

image

From the Custom API page, click the plus (+) icon for the API you want to connect to. Enter the connection information when prompted then click the Create Connection button.

That’s it! You can now select your Custom API from the list of actions in a Flow.

image

Getting into the public gallery

Following the previous steps, your Custom API will only be available to you, your team and others you share it with – using the same connection (including credentials) you created. It will not be available to all Flow users. Nor will it be available to Logic Apps.

To get your Custom API into the public gallery, where it can be used by anybody, you will need to contact Microsoft. They will review and test the Custom API and, if approved, make the necessary changes to require each user to set up their own connection. Only then will they make it available to all users.

Once your Custom API is in the Flow gallery Microsoft will incrementally roll it out across data centers for use in Azure Logic Apps.

Additional references

]]>
https://codemastershawn.com/2017/03/09/creating-a-custom-azure-logic-apps-connector/feed/ 1 462
Microsoft.Data.Edm.Library https://codemastershawn.com/2016/02/16/microsoft-data-edm-library/ https://codemastershawn.com/2016/02/16/microsoft-data-edm-library/#respond Wed, 17 Feb 2016 00:40:39 +0000 http://codemastershawn.com/?p=455

If you have experience dynamically generating entity models for OData I could use a bit of help with getting the finer bits of manually defining Navigation Properties. If not, do you know somebody who’s an Edm Goddess?

For more details see my forum post in the ADO.NET, Entity Framework, LINQ to SQL, NHibernate forum:

https://forums.asp.net/p/2085521/6022522.aspx?p=True&t=635912368648167847

I’m really close – just need some others who are also familiar with these libraries to brainstorm with.

Thanks 🙂

]]>
https://codemastershawn.com/2016/02/16/microsoft-data-edm-library/feed/ 0 455
A peek at my work https://codemastershawn.com/2016/01/28/a-peek-at-my-work/ https://codemastershawn.com/2016/01/28/a-peek-at-my-work/#respond Fri, 29 Jan 2016 01:18:42 +0000 http://codemastershawn.com/?p=449

So, I’ve been working for K2 for about a year-and-a-half now and am still enjoying being part of an actual software company again. Today I found out they’ve produced a new How To video for the product I’ve been the primary developer on for the last year or so.

This component is a broker that connects to a RESTful web service and exposes its entities and methods as K2 SmartObjects – which can be used in workflows, reports and other K2 blackpearl or Appit processes.

The area outlined by the blue box below is the functionality I am responsible for:

Screenshot from video with box around components I am responsible for.

]]>
https://codemastershawn.com/2016/01/28/a-peek-at-my-work/feed/ 0 449
You don’t know Javascript https://codemastershawn.com/2015/12/23/you-dont-know-javascript/ https://codemastershawn.com/2015/12/23/you-dont-know-javascript/#respond Wed, 23 Dec 2015 20:44:51 +0000 http://codemastershawn.com/?p=443

Last month the Hanselminutes podcast had a great interview titled You don’t know JS with Getify (Kyle Simpson) about his book of the same name. While the book series sounds like a great resource, I really enjoyed hearing a constructive discussion of many of the concerns I’ve had about the rapidly growing popularity of Javascript. Like any language, it has strength and weaknesses. As always, I’m a firm believer in using the right tool for the job.

]]>
https://codemastershawn.com/2015/12/23/you-dont-know-javascript/feed/ 0 443
Weekly roundup – April 28th https://codemastershawn.com/2014/04/28/weekly-roundup-april-28th/ https://codemastershawn.com/2014/04/28/weekly-roundup-april-28th/#comments Mon, 28 Apr 2014 15:59:38 +0000 http://codemastershawn.com/blog/?p=403

Topics:  Free MS ebooks, Xamarin podcast, cloud server in 55 sec., squash your PNGs, Heartbleed fallout, RDP from Android.

Tools, etc.

Projects, etc.

  • Less than 30 days left in the FoodStats app fundraiser. We’re at $250 now. Pledge as little as a $1 or as much as you feel like – every little bit helps. Or just help spread the word: Use the share buttons on the campaign site or give this easier-to-remember URL to friends, family and those who might be interested: http://tiny.cc/foodstats
  • Released an initial alpha version of Commit Message Editor – a simple, cross-platform GUI editor for commit messages in Git. The goal is to provide a light-weight editor with key features useful for writing commit messages. (This was a request from my friend and former co-worker Jonathan.)
]]>
https://codemastershawn.com/2014/04/28/weekly-roundup-april-28th/feed/ 1 403
Weekly roundup – April 21st https://codemastershawn.com/2014/04/21/weekly-roundup-april-21st/ https://codemastershawn.com/2014/04/21/weekly-roundup-april-21st/#respond Mon, 21 Apr 2014 16:43:45 +0000 http://codemastershawn.com/blog/?p=397

A short roundup this week; been busy with the funding campaign for the FoodStats mobile app.

Topics: VMWare re-certification, “you want to be a programmer?”, symlinks for WordPress plugins, open source HTML5 widgets, 1-click VM deployment.

  • In an interesting development, VMWare has started expiring their certifications. It actually makes sense to me, but then I’m not the one with a certification that’s going to be outdated in 2 years.
  • When someone who wants to be a programmer asked maymay which language to learn, they offered a response that really resonates with me. (Note: post contains language that some may find offensive.)
  • Maymay also points out that the new 3.9 upgrade of WordPress now supports symlinked folders for plugins. (See the Under The Hood -> General section.)
  • Telerik open-sourced the core elements of their Kendo UI framework – “HTML5 widgets for web and mobile development.
  • A friend and co-worker mentioned Bitnami, which provides turn-key platform stacks in a VM for development and/or testing. In addition to supporting VMWare and VirtualBox they also provide “1-click” deployment to cloud hosting like AWS and Azure.
]]>
https://codemastershawn.com/2014/04/21/weekly-roundup-april-21st/feed/ 0 397
Announcing funding campaign for ‘FoodStats’ mobile app https://codemastershawn.com/2014/04/15/announcing-funding-campaign-for-foodstats-mobile-app/ https://codemastershawn.com/2014/04/15/announcing-funding-campaign-for-foodstats-mobile-app/#respond Tue, 15 Apr 2014 16:35:54 +0000 http://codemastershawn.com/blog/?p=385

Do you have diabetes, high blood pressure or another medical condition that means you need to be careful what you eat? Do you have a loved one who does? Or perhaps you just want to keep careful track of your calorie intake? Earlier this year I finally began getting my own Type 2 Diabetes under control by reducing my carbohydrate intake. I’ve gone from a blood sugar of over 340 to a daily average of 120 in the last several months. Now my doctor and I are tackling my high blood pressure, which means I need to also watch how much sodium is in the foods I eat. During this time, I’ve found the NutritionIX website to be a great tool. Not only can I look up the nutrition stats for individual foods, but they also list menu items from over 500 restaurants. Unfortunately, their website is not very mobile friendly and they don’t make a mobile app.

Nutrition Facts: Know what you're eating.Today I am announcing that I have started an Indiegogo crowd-funding campaign to help me build such an app for Android smart phones. Future efforts will include an iOS app, but this first phase will be for Android because that’s what I have. The app will be created with cross-platform support in mind, and will be available under an open source license, so anyone else will also be free to build upon my work – whether it be for Windows, Mac, Linux the web or other phone platforms.

Go to the campaign >>

And that’s why I’m running a crowd-funding campaign. Medical issues like diabetes, high blood pressure and obesity have become a common part of our lives. Nutrition plays a huge part in maintaining our health and modern technology now gives us the ability to get that information no matter where we are. It shouldn’t be limited to just those who can afford to pay for it, provided only by those who can afford to make it available. I want to help NutritionIX, the USDA and other providers get this information into as many hands as possible.

You can help. Even if you can’t afford to make a donation please help me spread the word. Tell everyone you know – especially doctors, dietitians or anybody else concerned with nutritional health. Use the buttons below to share this post on your social networks. And if you are considering donating, thank you. Every little bit helps: I’ve set the minimum donation at $1, with perks for those who donate more. If you’d like even more options you can find them on my Support Shawn’s work page.

This campaign is my first step on the path of the new way to think about “employment”, which I talked about in a previous post. Help me prove that we are no longer locked into the same old cycles. There is a better way.

See the campaign details >>

]]>
https://codemastershawn.com/2014/04/15/announcing-funding-campaign-for-foodstats-mobile-app/feed/ 0 385
Coming soon: Know what you’re eating https://codemastershawn.com/2014/04/14/coming-soon-know-what-youre-eating/ https://codemastershawn.com/2014/04/14/coming-soon-know-what-youre-eating/#respond Tue, 15 Apr 2014 01:52:04 +0000 http://codemastershawn.com/blog/?p=383

If you have or know somebody with diabetes, high blood pressure or dietary restrictions – and a smart phone – watch for a major announcement from me tomorrow (4/15/2014) morning.

]]>
https://codemastershawn.com/2014/04/14/coming-soon-know-what-youre-eating/feed/ 0 383
Weekly roundup – April 14, 2014 https://codemastershawn.com/2014/04/14/weekly-roundup-april-14-2014/ https://codemastershawn.com/2014/04/14/weekly-roundup-april-14-2014/#respond Mon, 14 Apr 2014 16:31:07 +0000 http://codemastershawn.com/blog/?p=359

Topics: Telecommuting tips, Heartbleed tools, the end of crapware?, Git tutorials, free education, ideas into products, humanize numbers, better Datetimes, a Git GUI.

Tools, etc.

  • Wow. Humanizer is a .NET library that provides a mind-boggling array of ways to convert “strings, enums, dates, times, timespans, numbers and quantities” into more human-friendly text. (via Scott Hanselman)
  • Scott also recommends Noda Time as a better library than what’s provided with the .NET Framework.
  • Looking for a GUI for Git and/or Mercurial? Source Tree is a free download from Atlassian.

Projects, etc.

  • Working on something, which I hope to announce the next day or two. Stay tuned….
]]>
https://codemastershawn.com/2014/04/14/weekly-roundup-april-14-2014/feed/ 0 359
Project announcement coming & new donation options https://codemastershawn.com/2014/04/09/project-announcement-coming-new-donation-options/ https://codemastershawn.com/2014/04/09/project-announcement-coming-new-donation-options/#respond Wed, 09 Apr 2014 19:09:27 +0000 http://codemastershawn.com/blog/?p=371

I’ll soon be announcing a project I’m very excited about: a portable library and Android app for the wonderful data provided by the folks at NutritionIX. NutritionIX provides comprehensive nutrition information for individual food items as well as popular restaurants – something that has been extremely useful in managing my diabetes (type 2). Watch this space for the official project announcement in the coming days.

Also, I’ve added a new option for donating to support my work: There are now PayPal buttons both here on my blog and at http://tiny.cc/support-cms which allow you to make a donation of any amount you wish using only a credit card. There is no need to sign up for an account. Thanks for your support; every little bit helps.

]]>
https://codemastershawn.com/2014/04/09/project-announcement-coming-new-donation-options/feed/ 0 371