Tour Divide
(from Wikipedia) The Tour Divide is an annual mountain biking ride traversing the length of the Rocky Mountains, from Canada to the Mexican border. Following the 2,745-mile (4,418 km) Great Divide Mountain Bike Route, it is an ultra-distance cycling ride that is an extreme test of endurance, self-reliance and mental toughness. The ride format is strictly self-supported, and it is not a stage race – the clock runs continuously from the start until riders cross the finish line, usually more than two weeks later.
The ride has a very low profile, and is entirely amateur. There are no entry fees, no sponsorship, and no prizes. Although “letters of intent” from likely starters are encouraged, any rider may turn up on the day to participate. Challenges along the route include mountains, great distances between resupply towns, risk of mechanical failure or injury, bears, poor weather, snowfall, and significant unrideable sections that require pushing the bike. Riders usually adopt a “bikepacking” style, carrying minimal equipment sufficient for camping or bivouacking, and only enough food and water to last until the next town. In this way, riders ride huge distances each day, the current ride record averaging over 174 miles (280 km) per day.
It usually starts on the second Friday in June – at an event called Grand Départ.[1] The ride can also be completed at any time as an individual time trial (ITT).
Due to the extreme distances, inaccessibility of the route, lack of television coverage and small number of participants, spectating is impractical. However, many riders carry SPOT Satellite Messenger tracking devices, allowing their progress to be continuously monitored on websites.
Free ebooks
A great resource for free ebooks to different information is syncfusion. I’ve just lately downloaded their ebook on React and am going through it.
weworkremotely.com
With my wife potentially being seconded to another African country I decided that I need to look for a job where I can work remotely. If she does get seconded I can travel with her.
On a podcast I heard about a site that only advertises jobs where you can work remotely
http://weworkremotely.com
Learning React
Most of the jobs I see that I would like to apply for require a developer to know React. In my quest to learn react I came across this summary course on YouTube. If you are like me and find normal training boring this summary course will be of interest. (It is actually an advert for his longer paid course).
Agile for Solo Developers
For a long time I have been thinking how Agile can help solo developers become more organized. I do a lot of projects on my own and effectively use an Agile methodology but have never really formalized it.
Key areas I have been thinking about are
- Requirements Gathering
- Sprints
- Retrospectives
- Testing Automation
- Deployment (DevOps)
A simple example of what I am thinking about is: The Sprint Daily Standup – how do you do a standup if you are working alone, there is no scrum master to remove impediments. The Daily stand up therefore becomes a daily retrospective and planning session. Each day look at what was done, work out if it was DoD, and plan the next day.
I also want to add in ideas on how to document the different Agile ceremonies so that lightweight documentation is deliver to allow an Audit of progress.
I have also realized there are at least 3 different types of work I do solo and each may require a different solo methodology. I call these
- Building – churning out code on a reasonably well understood problem area
- Hunting – Error solving and bug smashing. Often as part of Building but also as a support process
- Exploration – Got a new idea, or a new tool. Taking the time to learn the tool or resolve the new idea.
Knowledge vs Skill
So Ive decided to start looking for a new job. While reading through job adverts on http://weworkremotely.com I realized that while I have a lot of knowledge around my area of specialization (Software Development) I am no longer skilled sufficiently to be a software developer.
That doesn’t mean I can be a software developer, but it does mean that I wont pass a skills test on my preferred development tools, for example JavaScript: I know what is possible in JavaScript and can look it up when I need to, but I cant write a test on JavaScript and pass.
Knowledge, Belief and Faith
I now understand the difference between Knowledge, Belief and Faith….
While riding a 24 hour Mountain bike race (we did laps for 24 hours), on the first lap I was riding behind 2 other riders when we approached a pipe that went over the trail. As I was being I could see there was a large gap between the cyclists heads and the pipe.
So I had the knowledge that the pipe was well above head height.
When I went under the pipe I ducked anyway.
So I did not Believe it.
After a few laps I stopped ducking.
Now I truly believed that the pipe was way above my head height.
Another few laps I realized I was no longer even looking at the pipe.
I now had faith that the Pipe would not move and therefore I would always have space under the pipe.
C# loading a file through Ajax and Web API
This information was mostly sourced from:
https://www.c-sharpcorner.com/UploadFile/manas1/upload-files-through-jquery-ajax-in-Asp-Net-mvc/
The Modal Form
<div id="AddFileDialog" class="modal"> <!-- Modal content --> <div class="modalcontent"> <div class="modalheader"> <span class="close" onclick="cancelAddFileDialogClick();" id="closeAddFileDialog">×</span> <h1>Add File</h1> </div> <div class="modalbody"> <form id="NewsForm"> <input type="hidden" id="FAAuctionID" /> <div class="form-group has-feedback"> <label for="FAAuctionName">Auction</label> <input type="input" name="FAAuctionName" id="FAAuctionName" value="" placeholder="Enter Auction Name" autocomplete="off" class="form-control" disabled> </div> <div class="form-group has-feedback"> <label for="FileType">File Type</label> <select name="FileType" id="FileType" class="form-control"> <option value="1">Image</option> <option value="2">Document</option> </select> </div> <div class="form-group has-feedback"> <label for="FileName">Name</label> <input type="input" name="FileName" id="FileName" value="" placeholder="Enter Descriptive Name" autocomplete="off" class="form-control"> </div> <div class="form-group has-feedback"> <label for="Files">File</label> <input type="file" name="Files" id="Files" class="form-control"></input> </div> </form> </div> <div class="modalfooter"> <a href="#" class="btn btn-primary" onclick="OKAddFileDialogClick();" id="OKAddFileDialog">OK</a> <a href="#" class="btn btn-primary" onclick="cancelAddFileDialogClick();" id="cancelAddFileDialog">Cancel</a> </div> </div> </div>
Java Script Show Form
$("#FAAuctionID").val(data.record.id); $("#FAAuctionName").val(data.record.Name); $("#AddFileDialog").show();
JavaScript Dialog Management and send to server
function cancelAddFileDialogClick() { $("#AddFileDialog").hide(); } function OKAddFileDialogClick() { // Link Companies in group to Auction AuctionID = $("#FAAuctionID").val(); FileType = $("#FileType").val(); FileName = $("#FileName").val(); var fileData = new FormData(); var fileUpload = $("#Files").get(0); var files = fileUpload.files; for (var i = 0; i < files.length; i++) { fileData.append(files[i].name, files[i]); } fileData.append("AuctionID", AuctionID); fileData.append("FileType", FileType); fileData.append("Name", FileName); $.ajax({ method: "POST", contentType: false, processData: false, beforeSend: function (xhr) { xhr.setRequestHeader('Authorization', 'Bearer ' + LoadToken(TokenName)) }, url: "/api/Auctions/File/Create", data: fileData }) .done(function (data) { if (data.Result == "OK") { alert("File Linked successfully."); $("#AddFileDialog").hide(); } if (data.status == "ERROR") { alert(data.message); } }) .fail(function (data) { alert(data.responseText); }); }
C# code in ApiController
[Route("api/Auctions/File/Create")] [HttpPost] public HttpResponseMessage UploadFiles() { // Checking no of files injected in Request object if (System.Web.HttpContext.Current.Request.Files.Count > 0) { List<Models.AuctionFile> OutFiles = new List<Models.AuctionFile>(); try { // Get all files from Request object HttpFileCollection files = System.Web.HttpContext.Current.Request.Files; for (int i = 0; i < files.Count; i++) { //string path = AppDomain.CurrentDomain.BaseDirectory + "Uploads/"; //string filename = Path.GetFileName(Request.Files[i].FileName); HttpPostedFile file = files[i]; string fname; // Checking for Internet Explorer if (System.Web.HttpContext.Current.Request.Browser.Browser.ToUpper() == "IE" || System.Web.HttpContext.Current.Request.Browser.Browser.ToUpper() == "INTERNETEXPLORER") { string[] testfiles = file.FileName.Split(new char[] { '\\' }); fname = testfiles[testfiles.Length - 1]; } else { fname = file.FileName; } fname = Path.GetFileName(fname); // Drop path of uploaded file // Get the complete folder path and store the file inside it. fname = Path.Combine(System.Web.Hosting.HostingEnvironment.MapPath("~/Uploads/"), fname); file.SaveAs(fname); // TODO: Link in Database AuctionFile Model = new AuctionFile(); Model.CreatedBy = UserHelper.currentUser(this); Model.CreatedDate = DateTime.Now; Model.AuctionID = Int32.Parse(System.Web.HttpContext.Current.Request.Params["AuctionID"]); Model.FileType = Int32.Parse(System.Web.HttpContext.Current.Request.Params["FileType"]); Model.Name = System.Web.HttpContext.Current.Request.Params["Name"]; Model.Path = fname; db.AuctionFile.Add(Model); // Done: Create Audit CreateAudit(Model); db.SaveChanges(); OutFiles.Add(Model); } // Returns message that successfully uploaded return Request.CreateResponse(HttpStatusCode.OK, new { Result = "OK", Records = OutFiles, TotalRecordCount = OutFiles.Count() }); } catch (Exception ex) { return Request.CreateResponse(HttpStatusCode.OK, new { Result = "ERROR", Message = ex.Message }); } } else { return Request.CreateResponse(HttpStatusCode.OK, new { Result = "ERROR", Message = "No files Selected" }); } }
Route Profile – 1000 Miler 2018
Before embarking on an adventure I like learning the names of the towns and resupply points I am likely to travel through. I find I tend to learn the first half of the route quite easily and never remember the last half. So I have started creating route profiles of my route and putting them up on the wall behind my computer so I can lookup and learn a new part of the route.
Planning meals for Hiking
One of my policies when hiking is to never “cook” food. All the warm food I take should be able to be cooked using only boiling water in a bowl. This means never cleaning pots with burnt on food pieces. So far this has worked well for me.
Last year I got an Excaliber Dehydrator for my birthday and I have made a range of dehydrated meals. Earlier this week I took dehydrated rice and mince to work and rehydrated it by poring boiling water over it and letting it stand in a warm box for an hour. While more sauce would have been nice the taste was great and there were no crunchy bits.