class: center, middle, inverse, title-slide # Open Policy Analysis: Concepts and Applications ## Metodos En Pauta, Universidad de Pernambuco ### Fernando Hoces de la Guardia, BITSS ### 22 February 2021 |
slides
--- count: true background-image: url("Images/BITSSlogo.png"), url(Images/cega.png) background-size: 600px, 200px background-position: 50% 10% , 100% 95% name: about-bitss   # About Us ### [BITSS](https://bitss.org) .pull-left[ The Berkeley Initiative for Transparency in the Social Sciences works to improve
the credibility of science by
 advancing transparency,
 reproducibility, rigor, and
 ethics in research. ### OPA Aleks Bogdanoski Fernando Hoces Katie Hoeberling ] .pull-right[ .right[ We are part of the Center for Effective Global Action ([CEGA](https://cega.berkeley.edu/)).

 Edward Miguel Jui Paithane [Undergraduate RAs](https://www.bitss.org/about/people/) ]] --- count: true name: motivation background-image: url("Images/alternative-facts-crowd.png"), url("Images/temp.png") background-size: 800px, 300px background-position: 0% 0%, 80% 10% # Motivation: Rise of Alternative Facts  .pull-right[

 *Senator [discussing facts]("https://www.youtube.com/embed/rV_YxKOE90g?start=188") on unemployment insurance* *Interviewer:* “We I have looked at what economist are saying, and [...] there is no measurable evidence that people are staying at home because of [$600 unemp. insurance]” *Congressman:* “[scoffs] I don’t know which economist you are talking about, but ...” ] --- class: inverse, center, middle name: framework # A Framework for Open Policy Analysis

 .font170[Based on [Hoces, Grant and Miguel 2020](https://tinyurl.com/1qypbihb)] --- name: motivation # .font80[Policy Analysis And The Evidence-Based Policy Movement] .font130[ Evidence-Based movement is growing. - The golden age of evidence-based policy (Haskins 2017). - Credible causal evidence (Angrist & Pischke, 2010). - Transparency and reproducibility of research (Miguel et al. 2014). - Commission on Evidence-Based Policymaking (CEBP, 2017) ] -- .font130[ Policy Analysis is a fundamental link. - As many definitions as textbooks (Dunn, 2015; Weimer & Vining, 2017; Williams, 1971) - Common denominator: client-oriented empirical analysis meant to inform a specific policy debate - Aspires at scientific rigor. (Wildavsky 1979), ] --- background-image: url(Images/policy_agencies.png) background-size: cover # Examples of Policy Analysts --- background-image: url(Images/figure_1_1.png) background-size: contain count: false # One Link From Evidence to Policy --- background-image: url(Images/figure_1_1_black2.png) background-size: contain # One Link From Evidence to Policy --- # Reproducibility Crisis In Empirical Research .font140[
 - Large magnitude of publication bias (Franco et al 2014). ] -- .font140[ - Evidence of extensive p-hacking across social science disciplines (Gerber et al 2008, Brodeur et al 2016). ] -- .font140[ - Replication rates are low (Collaboration et al, 2015 , Camerer et al, 2016, 2018). ] -- .font140[ - Computational reproducibility is also low (Stodden et al 2016, Chang and Li 2015, Gertler et al 2018). ] --- # The Open Science Movement .font140[
 - Definition of principles of Open Science/Research Transparency (Miguel et al 2014) ] -- .font140[ - Development of guidelines to operationalize principles of Open Science (Nosek et al 2015) ] -- .font140[ - Journals and funders: Journals (Science + 5k other journals), Registries (AEA), Funders (NIH, NSF and multiple donors) ] --- # Credibility Crisis Of Policy Analysis .font140[
 - Incredible Certitudes (Manski, 2013) ] -- .font140[ - Report wars (Wesselink et al, 2013) ] -- .font140[ - Alternative facts (“The Death of Expertise” Nichols, 2017; “The Death of Truth”, Kakutani 2018; “Post-Truth”, McIntyre 2018) ] --- # How This Affects The Evidence Based Policy Link? --- background-image: url(Images/figure_1_1.png) background-size: contain count:false # How This Affects The Evidence Based Policy Link? --- background-image: url(Images/figure_1_1_black.png) background-size: contain # How This Affects The Evidence Based Policy Link? --- background-image: url(Images/fig2.png) background-size: contain count:false # How This Affects The Evidence Based Policy Link? --- # Relevance .font140[
 Main consequences of policy analysis that lacks openness: - 1 - Cherry picking evidence. ] -- .font140[ - 2 - Challenging to automate and improve systematically recurring reports. ] -- .font140[ - 3 - Difficulty understanding how research informs policy analysis. ] --- # Cherry Picking Evidence
 .font150[
 “When I was director of the CBO, I was very frustrated when we would write a policy report [saying] a certain policy would have these two advantages and these two disadvantages, and the advocates would quote only the part about the advantages, and the opponents would quote only the part about the disadvantages. That encourages the view that there are simple answers. There aren’t generally simple answers. There are trade-offs.”

 .right[  Douglas Elmendorf (Director of CBO, 2009-2015) Harvard Magazine, [2016](https://harvardmagazine.com/2016/09/a-moral-conscience-for-economics)) ]
 ] --- count: false # Cherry Picking Evidence
 .font150[
 “When I was director of the CBO, I was very frustrated when we would write a policy report [saying] a certain policy would have these two advantages and these two disadvantages, and the advocates would quote only the part about the advantages, and the opponents would quote only the part about the disadvantages. That encourages the view that there are simple answers. There aren’t generally simple answers. There are trade-offs.”

 .right[  Douglas Elmendorf (Director of CBO, 2009-2015) Harvard Magazine, [2016](https://harvardmagazine.com/2016/09/a-moral-conscience-for-economics)) ]
 ] --- # Open Science
 .font180[ | | Empirical
Research | Policy
Analysis | |:---------: |:-------------------------------------------------------: |:----------------------------------: | | **Problems** | Reproducibility
Crisis | Credibility
Crisis | | **Solutions** | Open Science
Principles, Guidelines,
Applications | ... | ] --- # Open Policy Analysis
 .font180[ | | Empirical
Research | Policy
Analysis | |:---------: |:-------------------------------------------------------: |:----------------------------------: | | **Problems** | Reproducibility
Crisis | Credibility
Crisis | | **Solutions** | Open Science
Principles, Guidelines,
Applications | Open Policy Analysis
Principles | ] --- background-image: url(Images/opa_framework.svg) background-size: contain count:true # A Framework for Open Policy Analysis --- class: inverse, center, middle name: case_studies # Open Policy Analysis Applications

 --- count: true # Deworming Interventions - Parasitic worm infections are endemic in many countries, disproportionately affecting the poor - They interfere with regular bodily processes by decreasing nutrient uptake and can thus lead to serious consequences on human health, education outcomes, and long-term economic well being - Mass deworming interventions, at school level, have been propose as a cost-effective approach to tackle this problem -- ## Different settings for deworming - Context of original study (Kenya, 1998-99) had very high prevalence rates of worm infections - Implementation costs where very low ($0.42 per round of treatment) - Length of treatment was relatively short (2.4 years) - Current deworming settings have lower prevalnce rates, varying implementation costs and length of treatments -- ## Strong debate around initial results - Ozier ([2020](https://academic.oup.com/wbro/advance-article/doi/10.1093/wbro/lkaa005/6009048)) summarizes differences between original findings (Miguel and Kremer 2004) and a re-analysis (Aiken et al, 2015). Emphazises the role of communication of results in a reanalysis. - This type of debate (result/re-analysis) can be seen in several other topics. For example: minimum wage, inmigration, taxation. - OPA need not guarante agreement on key research finding, but should help avoid multiple policy reports --- # OPA on Deworming Interventions (Kenya+)
 .font140[ ## Contributions of OPA to deworming: 1. Selected one policy estimate among several alternatives and establish a clear link between it and underlying assumptions 2. Added documentation to increase reproducibility 3. Created a public repository with all materials for one-click reproducibility ] --- background-image: url(Images/dw-open-out1.png), url(Images/dw-open-out2.png), url(Images/dw-open-out3.png), url(Images/open_output_all.svg) background-size: 500px, 500px, 500px, 100px background-position: 100% 80%, 70% 40%, 40% 0%, 15% 5% count: true # Open Output .pull-left[ ## [Demo](https://bitss-opa.shinyapps.io/dw-app/)
 ## Main features - One clear output previously agreed in consultation with policy partner - Two additional tabs to modify assumptions (key assumptions and all assumptions) - Each source is classified into research, data, or guesswork - High level equations added to illustrate location of components - Added feature to modify standard deviations - Track values of each component ] --- background-image: url(Images/dw-open-an2.png), url(Images/dw-open-an1.png), url(Images/open_analysis.svg) background-size: 400px, 400px, 100px background-position: 100% 100%, 70% 0%, 15% 5% count: true # Open Analysis .pull-left[ ## [Demo](https://bitss-opa.github.io/opa-deworming/)
 ## Main features - Complete narrative description of the methodology - Translation of each narrative step into an equation - Implementation of each equation into code - Combine all of the above into using a dynamic document (RMarkdown) - Presentation of narrative, equations, and code in layered fashion to avoid overwhelming the reader Icon figure ] --- background-image: url(Images/dw-open-mat2.png), url(Images/dw-open-mat1.png), url(Images/open_materials.svg) background-size: 600px, 600px, 100px background-position: 100% 100%, 70% 0%, 15% 5% count: true # Open Materials .pull-left[ ## [Demo](https://github.com/BITSS-OPA/opa-deworming)
 ## Main features - One-click reproducible documentation and app - Extensive readme files - Clear folder structure - Version controlled - Open data - Acknowledgment to all contributors ] --- count: true # Lessons for future OPA projects: Costs - Costs (approx bandwidth over a year at full time): - Principal Investigator 30-50% - Research assistant/programmer 100-150% - Program Manager 20%-30% - Original researcher: 1-5% - Not all policy analysis justify this level of effort - Characteristics that might justify an OPA: - Topics with strong disagreement on the facts among analysts - Recurrent reports (eg. ex-ante economic analysis from development banks/agencies) - Topics that have large expected welfare effects (eg. tax reform, social cost of carbon) - With each new OPA project, templates will emerge and costs will likely fall --- count: true # Additional Benefits of OPA ## Easy to update and reuse After deworming OPA is released, anybody can modify and improve into a newer version ## Clearer connection of how evidence from research is used in policy analysis Researchers can see clearly where their estimates are being used in a policy analysis. For example, the OPA can be used to justify power calculations of potential new studies. ## Connection with forecasting When there is little information for a parameter used in an OPA, a forecasting exercise can be carried out to elicit expert knowledge (DellaVigna, Pope, Vivalt [2019](https://science.sciencemag.org/content/366/6464/428.summary)). --- # Our Plan for OPA
 .font140[ - Develop framework to support OPA - Support transition/adoption of OPA, and develop **OPA projects** - Train students and analysts - Build a comunity of practice ] --- # Other OPA Project: Wealth Tax (US)
 .font140[ - 2019 - [See here](https://www.bitss.org/opa/projects/progressive-wealth-tax/) ] --- background-image: url(Images/aspiration.png) background-size: contain background-position: 0% 0% count:true # An Aspiration .pull-right[ .right[ .font160[

 Learn more at [bitts.org/opa](https://www.bitss.org/opa/) ] ] ]


Mushrooms - P. cubensis
Prior to my acquaintance with psilocybian mushrooms, I had only ever experienced marijuana (on a regular basis for a few years before the mushroom endeavor) and MDMA (once, about 2 months before the psilocybin). I must admit that before my MDMA experience, I would have been much more reluctant to ever try psilocybin. After the MDMA, I began researching the wide, wild world of entheogenic and psychoactive substances. Even after this research, however, I was still quite apprehensive about the more potent substances commonly used, such as psilocybin and LSD. But I knew that, if the opportunity were to present itself, I would most certainly try either of these substances.
As fortune would have it, a prime opportunity for using mushrooms arose: over the 2003 fall school break, myself and two friends (M and R) were to go backpacking for two nights in the Rocky Mountain National Park Wilderness in Colorado. We decided that this would be a great opportunity to take psilocybin, as it was well after the peak usage season, being early October, and were almost guaranteed total seclusion in the campground.
After our first day of hiking had to be cut short due to hail and snow at the higher elevations, we returned to our base camp, which was at approximately 10,000 feet. By this point, the rain had stopped, and we figured that we would be in for an enjoyable night of romping through the pristine high altitude wilderness while tripping. We prepared a small meal of hot soup prior to ingestion. R, who had tripped on psilocybin before, is repulsed by the taste of mushrooms, so he had his earlier than M and myself, mixed in with his soup. M also doesn’t care for the taste of them, but was able to down them with water. While we were filtering more water, I consumed my shrooms, and was able to easily handle the taste, and they went down quite well, despite bits sticking in my teeth. We each had 3.5 grams of Psilocybe Cubensis of an unknown strain.
As I had never tripped before I was, needless to say, a bit apprehensive about what to expect from the experience. I had a marginal understanding from my research on Erowid and what R and M told me, but my only points of reference were marijuana and MDMA, two substances quite dissimilar from psilocybin.
We returned to our camp from the creek. As R had consumed his dose about 15 minutes before M and I did, he was already acting a little out of the ordinary. Perhaps five or ten minutes later (T+0:30), I was a good deal more sympathetic to his condition; although I was in no way hallucinating, it seemed as if of the surrounding trees were scrutinizing me. The world that I knew was preparing to undergo a significant and unprecedented change, for better or worse I had no clue, and the trees found my naiveté regarding these impending changes somewhat humorous.
We decided to lounge in our tent (a two person tent, luckily able to meet our demands for three 6 foot-plus males) while awaiting the onset of the effects, as it had started to drizzle a bit in the forest. By this time, R was acting incredibly silly, periodically taken by bouts of irrational mirth. We were becoming a bit bummed about the weather, as it crossed our minds that it might not let up, and we would either get soaking wet outdoors or be restricted to in-tent activities. Retreating to civilization wasn’t much of a viable option at this time, as our campground was a mile and a half from the trailhead, and it was becoming increasingly dark and wet.
Soon after, M and I also joined in the giggling and outright laughter; everything was incredibly funny and I quickly discovered that collaborative trips were possible and, in fact, frequent. I felt wondrously and inexplicably good. However, the night, and our trip, were both young.
Chronology goes out the window at this time.
By this point it was becoming increasingly wet with the intense rain. My first vivid visual effect was that of a very small puddle of water that had made it to the floor of the tent. Never before have I seen anything inanimate throb, ripple and change shape of its own accord. Despite the lack of precedence for this abnormality, I didn’t give it a second thought; I realized it was natural for this now autonomous entity to behave as it saw fit.
R, however, was dealing with cabin fever, and decided to make his way outside, prepared to deal with the wet and cold body and clothes later. As much as I wanted to be outside and mingle with the trees and forest at this time, I opted to stay inside the tent, as I was being plenty entertained in that space. Sometime later, R returned inside the tent and, to our astonishment, his body felt completely dry and warm. M still had enough presence of mind to realize that R, in fact, was neither dry nor warm, so that was taken care of. This was probably the last coherent action we took that night; the rest of the evening was dictated by an incapability of linear thought and irrational behavior.
Despite the actual small size of the tent, its dimensions appeared boundless. Three tall men crammed into a sorely confined space intended for two was of no consequent.
Thoughts might as well have been nonexistent, as we all lost interest in them before they materialized in our actions. We would begin a position shift amongst the three of us in the tent, only to move no more than a few inches each before we were distracted by the next cascading thought. One of the most amusing events of the evening was our attempt to smoke a pipe of marijuana: none of us, though all very experienced smokers, could figure out how to use a pipe and lighter.
After some time, I finally gathered enough courage to brave the weather and relieve myself outside. What I witnessed in the forest under the waning light approaches being indescribable: the trees dancing a flowing dance in time with each other, and the forest floor, at the same tempo, writhing and contorting in perfect harmony. Had it not been so wet outside, I would have wandered forever through this primeval paradise. The forest was either Heaven or Hell, I could not be sure, but it warranted further exploration. However, I returned to the tent.
Life continued without sequence and note for some time, until the experience took a dramatic shift. I became aware that all of my sensory input, particularly aural, was not right. Although the sound of the rain falling on the rainfly of the tent was for the longest time pleasant, I began to hear the occasional, incoherent, masculine spoken whispered voice from outside the tent, presumably resulting from the haphazard percussion of the rain. It then occurred to me that what I was suffering from was hypothermia: hallucinations, delusion and a lack of bodily thermal input are, after all, typical symptoms. I could not be convinced by M and R that the only reason for these sensations was the psilocybin.
My irrational paranoia was contagious; M and R began feeling as I did, that the mountain was too much for us to cope with, that we would succumb to the rain and cold, to be found lifeless in the morning. The option of an expedient packing and frantic, wet and dark return to the trailhead occurred to us; it would be miserable, but we would survive, if we could find our way back. (The trail was rather direct, but in our present state, we would certainly have become lost.)
Worst of all, however, was our inability to arrive at a conclusion as to what course of action should be taken. We would never get past the point of listing our options for survival before our collective thoughts would shift altogether, only to once again return to our survival. This recursive thought process was agonizing.
Somehow, we eventually decided to survive the night by expelling all superfluous gear from the tent into the wet night, and survive by exchange of body heat. However, I was convinced of my imminent death.
“Why did I do this to myself? I’m never doing any drugs again, if I survive!”
After what seemed an eternity, I was compelled to sit up, and we quickly arranged our bags as to conserve heat, myself in-between R and M (they recognized that I was suffering the most of our party.)
By this point, R and M were able to hold a somewhat sequential conversation, and merely listening to them speak brought me back onto a limited level of reality. I realized that I had taken the mushrooms, that we were plenty warm, and that the only plausible way for us to die that night was through our own irrational, paranoia-induced actions. I knew then that we would survive. Although the group mentality resumed normalcy, the effects of the mushrooms were by no means gone. Conversation was reflective on what we had just experienced, rather than what we were going to do to merely survive the experience at hand.
At this time I was having quite intense closed eye visuals, but none with eyes open. In this state, I was able to enjoy the effects of the mushrooms but maintain a grasp on reality merely by opening my eyes. I also noticed that my eyes were slightly sore, and very physically tired, and realized that this was due to the intense kaleidoscopic nature of my closed eye visuals. They were moving at a constant tempo, and my eyes would physically move in time with this tempo. I found this reflective period to be the most enjoyable of the entire trip: if I wanted to experience visual distortions, I merely had to close my eyes, but the realization of what I had just endured left me in awe: I feel that this was a legitimate near death experience, and although I didn’t experience contact with an entity, it was deeply spiritual.
For most of the following day, I was quite introverted and pensive; my thoughts dwelled on the intensity and implications of what I had experienced the previous night. I believe that mushrooms should under no circumstances be underestimated and used as a “party” drug. My use of psilocybin resulted in one of the most informative experiences of my life. I experienced joy, sorrow, pain, fear and redemption in the span of only about 6 hours. Such an intense learning experience has never come in such a compact, 3.5 gram package.
Was this a bad trip? Perhaps it was, but it was undoubtedly a learning experience. Although R and M both apologized about the result of the trip, I affirm that I couldn’t envision a better first trip. A more enjoyable experience is easy to imagine, but this particular one gave me a taste of the undeniable power and a realization of a practical use of psilocybin mushrooms.
Since this experience, I have used mushrooms several times. Although some of the subsequent trips were definitely more powerful and consuming, I am assured that any will ever have a lasting effect to the degree that this first psychedelic experience had on me. One’s first psychedelic experience is an initiation into a wider world, one where the powers of perception are increased several fold and this powerful microscope may in fact be used upon oneself, at which point one’s outlook upon life itself may be drastically and irrevocably changed.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


Saskatoon, Saskatchewan
Junk Metal T-Rex
Just outside this metal recycling center stands a prehistoric creature composed of scraps.
This entry is a stub
Help improve Atlas Obscura by expanding Junk Metal T-Rex with additional information or photos.
If you’re traveling across Canada and headed to Drumheller for your dinosaur fix, then a pit stop in Saskatoon, Saskatchewan is a must. Just outside BN Steel & Metals resides an intricately sculpted Tyrannosaurus Rex replica, welded from cogs, springs, and other mechanical parts.
This stunning sculpture outside the metal recycling operation is accompanied by a pair of equally intricate Transformers, as well as an Earth sculpture.
The sculptures are often featured in photoshoots and frequently the subject of heart-felt pranks and other displays of endearment.
Community Discussion
-
No Comments Yet
Start the discussion.
forum Visit our forums.


Tech Breakfast
|
|
|
SSW Tech Breakfast
The Top 15 tips for Real World Windows Forms Applications
|
|
|
Get techniques for better searching, data validation, configuration management,
error trapping, code standardization, plugging in cool 3rd party controls and
many other routine capabilities of data applications, with minimal code. See
the end result: a set of tools and techniques will super charge your next app.
|
|
Friday 10 September.
8:00am - 11:00am at SSW
- Register
online now
- More
Info
|
|
SSW Tech Breakfast
A big peek at ASP .NET 2 Whidbey Applications - presented by Adam Cogan
|
|
|
ASP.NET Whidbey is the current name for the next version of ASP.NET. Adam Cogan
will give a talk on: ASP.NET Whidbey overview, working with data, caching
improvements to significantly boost the performance of the next generation of
ASP.NET applications, master pages for consistent web sites, new membership
features, and personalization.
|
|
Friday 24th September.
8:00am - 11:00am at SSW
Register
online now
|
|
Resources
|
Lumigent Log Explorer
www.ssw.com.au/ssw/LogExplorer
|
|
MS SQL City
|
|
Database FAQ's and Links
www.ssw.com.au/ssw/Database/
DatabaseDocsLinks.aspx
|
|
SSW Software Audit
|
|
Companies from across the globe have been taking advantage of SSW's Software
Audit Services. The common message that is received from clients is that
getting their software built in-house can sometimes lead to a failure to
identify design flaws and architectural insufficiencies. They need an unbiased
second opinion from a knowledgeable source that can make recommendations to
improve the quality of their software.
More on SSW software audits
|
|
Win a free copy of SSW LookOut! for Outlook
|
We are offering a free copy of SSW LookOut! for Outlook to the first 100 people
who update their details with SSW.
Please sign in and update
your information.
SSW guarantees never to sell your details. More information on the
SSW Privacy Policy
|
|
|
Tips
|
When creating a foreign key
constraint, you have the option "Enforce relationship for replication". Should
it be checked or unchecked?
- answered by Ross Donald
|
|
When should I use Option
Strict in VB.NET? Does it have a place in VB.NET?
- answered by John Liu
|
|
|
What is the best way to get
a temporary file name to use in VB.NET or C#? Should I just concatenate a
random number and a string? Use a Win32 API call?
- answered by David Klein
|
|
|
Why do I get the error
'Cannot resolve collation conflict for equal to operation' In my stored
procedure
- answered by David Klein
|
|
|
|
The Cutting Edge
|
|
| G'day Developers! |
|
Let's face it, we've all sent or received a cryptic email at some point. When
you do receive a list of tasks in an email and part of it you just don't
understand, dont just reply saying "I don't understand". Using email for these
types of conversation will just waste time waiting for replies and I don't
believe that email should be used for these types of ongoing discussions.
Chances are if the sender of the task couldn't give you enough detail or
explain the task well enough the first time then it's likely to be a tough task
so more conversation is needed anyway. Deal with it via a telephone
conversation or meeting (MSN may also be acceptable) with the person who sent
the email.
Having had the conversation, reply to the email (remembering to CC all
involved) with:
-
The subject: "CLARIFICATION - [Original subject]"
-
Update the email with the new details arising from the conversation along with
all original content. (Remember to start with an "As per our conversation"
line).
-
Action the tasks from the email
Another benefit of this type of email is so that you can subtly let the person
know that next time they need to provide more details.
More on Rules to Better Emails.
|
|
Cheers until next time,
Adam
SSW Chief Architect and Microsoft Regional Director, AustraliaGot a comment for
Adam? Email Adam Cogan
|
|
Special SSW Tech Breakfast Offer (This Friday)
|
|
|
Special September offer -
limited time only
Due to popular demand, we are holding two SSW Tech Breakfast's
this September, and for this month only our in-depth technical learning
sessions are only
$99
each. There are two to choose from: The Top 15 tips for Real World Windows Forms
Applications, and A big peek at ASP .NET 2 Whidbey Applications. Both
are presented by Microsoft Regional Director Adam Cogan.
You can
register online now or contact Rebecca or Scott on (02) 9953 3000 or 696e666f72407373772e636f6d2e6175
them to find out how you can take advantage of this great special.
|
|
Sydney .NET User Group - The best place to learn .NET for
free in Sydney (Next
Wednesday)
|
|
|
Sydney
.NET User Group 15, September 2004
|
|
Special Speaker Gideon Schaller, from Microsoft in Redmond USA, will be
joining us this month to talk about: The implementation of the XML Index in
Yukon.
SQL Server 2000 has always supported XML as a data format, but without any
equivalent to SQL for querying the data. That will change with Yukon, which
includes the W3C's XML Query Language. It's a bit like SQL but works vastly
different because of the radical difference between relational data and XML's
hierarchical structure.
As XML usage grows for both data-centric and document-centric applications,
introducing native support for XML data in relational databases brings
significant benefits. It provides a more mature platform for the XML data model
and serves as the basis for interoperability between relational and XML data.
Whereas query processing on XML data shredded into one or more relational
tables is well understood, it provides limited support for the XML data model.
XML data can be persisted as a byte sequence (BLOB) in columns of tables to
support the XML model more faithfully. This introduces new challenges for query
processing such as the ability to index the XML blob for good query
performance.
This talk includes novel techniques for indexing XML data in the upcoming
version of Microsoft SQL Server, and how it ties into the relational
framework for query processing.
This session will cover:
-
Background on XML support in Microsoft SQL Server 2005
-
Indexing XML data
-
Primary XML indexes
-
Secondary XML indexes
-
Storage, algebrization, and optimization of XML Index.
About Gideon
Gideon has been at Microsoft for 9 years. He joined Microsoft in 1995 after
working for several years at Borland Intl on Paradox for DOS. He worked for a
few years on the display engine for IE4 and IE5, and then moved to join the
initial team that started WebData.
In WebData Gideon lead the development team that introduced the XML support to
SQL 2000. Later in Yukon with two other developers he moved to the engine to
start the XMLDB initiative (introducing a new XML Data type into server).
Currently Gideon and his team lead, as part of the Engine Execution team, owns
ES (Expression Services) SQLCLR and XML Runtime in Yukon.
|
|
Wednesday 15th September. 6:00 pm at Microsoft, 1 Epping Road North Ryde
>See You
There!! |
Sorry I can't make it
|
|
LookOut! for Outlook - Enforce Email Rules
|
|
|
Manage email with SSW LookOut! for Outlook. Email is a fundamental
corporate communications tool used every day to manage staff, establish
contacts and communicate with clients. Use SSW LookOut! to organise and manage
your email and help ensure email is always an advantage to your business and
not a liability! With tons of rules and auditing checks, SSW LookOut! also
notifies the user whether emails are from people within their corporate Access
or SQL Server database.
More on SSW LookOut!
|
|
Now that I've been using it for a
little while, I don't think I can put it away - it's just too darn
useful and makes too much sense to just stop using it. And that,
my friends, is the first sign of really good software.
|
|
|
|


--- layout: snippet title: "Layout basic example" permalink: /examples/layout/basic/ sitemap: false ---


New bat-man, inane glitzy fun
Blade A Film Review By Michael Redman Copyright 1998 By Michael Redman
**1/2
Occasionally I'm in the mood to forget about art, story, characterization and everything that makes a film worthwhile. During those times, I'm content to just sit in a dark room watching glitzy pictures flash by on the big white wall. Fortunately this was my state of mind while viewing "Blade".
Blade (Wesley Snipes) is one tough SOB. Half-vampire, half-human, he has all the strength and speed of the bloodsuckers and none of their weaknesses to garlic, sunlight or silver. He's armed with silver stakes, big guns with silver bullets and a huge sword. Revenge for the death of his mother is his motivation for turning the world's fiends into dust.
The film's opening scenes follow a woman leading her male friend into a secret hip disco. (You can tell that it's hip because there are lesbian couples dancing and a threesome making out on a couch in the corner.) The man is digging the techno beat, flashing lights and overt sexuality until blood starts raining down from the sprinkler system. Then he realizes that he's been brought to the rave by his vamp paramour as prey.
Enter Blade. Single-handedly he starts wiping out the dancers. One after another, they are blasted by his shotgun and dissolve into sparkling ectoplasmic powder.
Later he rescues Karen (N'Bushe Wright), a hematologist who has been bitten. She is what passes for the love interest in the movie, with the exception of a subsequent episode that would make Oedipus blush. His only other human contact is crotchety urban hermit Whistler (Kris Kristofferson) who rescued the young Blade and makes his weapons for him.
Deacon Frost (Stephen Dorff), the leader of the angry young vampire Turks, is Blade's nemesis. Turned into an undead by a bite, Frost also opposes the staid older vampires-from-birth international cartel who meet in a boardroom like the suits that run IBM. Commenting on their secret negotiations with humans, he asks why they make deals with their food.
He isn't content to coexist with what he considers lower life forms. He wants to rule them. The Goth Generation X vampires are like decedent spoiled children of the rich, dancing and feasting the night away.
Frost has secretly been translating ancient writings that describe how to summon the Blood God who will bring about the vampire jyhad. Blade finds out and realizes that this could put a crimp in his plan to destroy the evil vermin. They eventually meet at an inevitable brutal Hong Kong style showdown in an enormous underground ancient-future cathedral.
The acting is nothing to write home about, but fitting to the film. Snipes is as wooden and emotionless as you might expect an obsessive killer to be. Dorff is snappy as he sneers his lines reminiscent of Keifer Sutherland in Lost Boys. Rhodes scholar-turned songwriter-turned rock star-turned actor Kristofferson, a personal favorite, is always entertaining but under-used here. His eccentric character provides some of the humor especially in a scene where he slops gasoline around while lighting his cigarette.
Director Stephen Norrington's filmmaking is stylish to the extreme and it works in this film. Extremely short cuts of vampires snarling and glimpsed beings scurrying around are like things seen out of the corner of the eye. The jerky super-speed moments are surprisingly effective.
The sexual aspects of vampirism are used well. There's a lot of licking and messy wet sliding around. One particularly eroticized incident features the female victim gasping in ecstasy as her blood is drained away. Her seducer howls in gratification when he finishes.
The movie has more than its share of faults. Seemingly every object in every set is made of glass just waiting to be shattered. None of the characters are real. The underground vampire structure is centuries old and looks cool, but it just happens to exist in the same US city as the rest of the story?
There are scenes lifted completely from "Raiders Of The Lost Ark" and other films. The computer effects occasionally look poor and are redundant. Seen one exploding head, seen 'em all. There's a huge hole in Frost's plan. If everyone is transformed into vampires, what do they eat? The Blood God is a disappointment.
The biggest disappointment is the climax of Blade and Frost's battle. After all of the high energy action during the movie, the last minute or so of that are a letdown. It was so low-key that I kept waiting for more.
There is an interesting subtext of elite groups engaging in war while regarding the rest of the world as inferiors. The vampires see everyone as blood machines.  He savagely beats a vampire-collaborator cop in the middle of a busy street without the least thought to on-lookers. He's in a secret war zone and the mundanes don't matter.
His attitude is what terrorists must feel. Their cause is righteous and if innocents get in the way, too bad. Hidden wars have a long history: the CIA vs. the KGB, the Tong and Mafia wars, the struggle between criminals and law enforcement. It's interesting to get an inside look at what goes on around us.
This is a poorly plotted ridiculous film, but it's a well made poorly plotted ridiculous film. Sometimes on these blistering dog days, that and air conditioning are enough.
(Michael Redman has scrawled these words of wisdom for over 23 years and seems to have emoved with the paper's name change. Point your electrons to<EMAIL_ADDRESS>[This appeared in the 8/26/98 "Bloomington Independent", Bloomington, Indiana. Michael Redman can be contacted at<EMAIL_ADDRESS>--<EMAIL_ADDRESS>This week's film review at http://www.indepen.com/ Film reviews archive at http://us.imdb.com/M/reviews_by?Michael%20Redman
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Mutmut is a mutation testing system for Python 2 and 3, with a strong focus on ease of use. If you don't know what mutation testing is try starting with this article.
Some highlight features:
You can get started with a simple:
> pip install python > mutmut
This will by default run pytest on tests in the "tests" or "test" folder and it will try to figure out where the code to mutate lies. Run
mutmut --help
for the available flags, to use other runners, etc. The recommended way to use mutmut if the defaults aren't working for you is to add a block in setup.cfg. Then when you come back to mutmut weeks later you don't have to figure out the flags again, just run mutmut and it works. Like this:
[mutmut] paths_to_mutate=src/ backup=False runner=python -m pytest tests_dir=tests/ dict_synonyms=Struct, NamedStruct
The output of the mutation tests (if you have surviving mutants) looks like:
FAILED: mutmut f/bar.py --apply --mutation " if foo > bar:⤑0"
You can just copy paste everything after "FAILED:" and run it directly and you'll get the mutant on disk. You should REALLY have the file you mutate under source code control and committed before you mutate it!
You can mark lines like this:
some_code_here() # pragma: no mutate
to stop mutation on those lines. Some cases we've found where you need to whitelist lines are:
In general the idea is that the mutations should be as subtle as possible. See __init__.py for the full list.
This section describes how to work with mutmut to enhance your test suite.

To get a list of the found mutants without rerunning the full mutation testing run:
> mutmut --print-cached
You can also tell mutmut to just check a single mutant:
> mutmut f/bar.py --apply --mutation " if foo > bar:⤑0"


Friday the 13th
Fri, 13 Jan 2017 @ rants
Friday the 13th? Coincidence?
Remember this date – Friday 13th Jan 2017. This was the day this site was borned into the cyber world.
I was planning to blog on the Python based website.
I did manage to put up a Mezzanine CMS after failing to set up Django CMS. Still, the process of tweaking the theme or adding independent links seem to be pain in the ass.
Listen – I just need a decent enough site for my content management.
It seems to me that at the end of the day, good ol’ WordPress was the one that I can rely upon, despite all the bloats that WordPress is associated nowadays.


Download an asset.
[ FLAGS ] --id INT [ PATH ]
The download-asset command downloads an asset from the roblox website.
The --id
flag, which is required, specifies the ID of the asset
to download.
The first non-flag argument is the path to a file to write to. If not specified, then the file will be written to standard output.
{{frag "flags/cookies:Description"}}The format to encode the file as. Defaults to --format.
The format to decode the asset as.
The ID of the asset to download (required).


Examples
Github
Docs
VagabondJS
VagabondJS
Helper for easily making forms for Backbone and ChaplinJS
Project on Github


More Jataka Tales
by Ellen C. Babbitt
Jataka tales are ancient folklore which originated in India. Ellen C. Babbitt collected and retold these stories in two volumes, Jataka Tales (1912) and More Jataka Tales (1922). Babbitt's versions were based on translations created by Professor E. B. Cowell, professor of Sanskrit in the University of Cambridge, and his team between 1895 and 1907. Some of the Jataka tales may have been later ascribed to Aesop.
Source: Babbitt, E.C. (Ed.). (1922). More Jataka Tales. New York, NY: D. Appleton-Century Company.
- “Beauty and Brownie”
- Two deer look after great herds of deer, and one doesn’t follow his father’s advice and loses many of the herd.
- “The Brave Little Bowman”
- How the little bowman became the king’s army chief.
- “The Cunning Wolf”
- A man tries to fool animals in order to get food for supper, but the King of Wolves sees through his trick.
- “The Elephant and the Dog”
- An elephant and a dog become friends, but one day the dog is sold. The elephant refuses to eat or bathe without his pal, and soon the two are reunited for the rest of their days.
- “The Foolhardy Wolf”
- A wolf refuses to believe that there are limits to what he can do.
- “The Girl Monkey and the String of Pearls”
- A monkey steals a string of beads, but the chief of the guards recovers them.
- “The Golden Goose”
- How greed destroys abundance.
- “The Hawks and Their Friends”
- A family of hawks has friends who save them.

- “The Lion in Bad Company”
- A young lion makes friends with a wolf, against his father’s wishes. The friendship leads the lion to hunting the king’s ponies, which his father told him not to do, but the lion keeps on and ends up killed by the king’s archer.
- “The Otters and the Wolf”
- A wolf finds a clever way to get fish for supper.
- “The Penny-Wise Monkey”
- A king sees a monkey lose many peas in order to gain one more, and realizes he should not start a war with a remote, small country.
- “Prince Wicked and the Grateful Animals”
- A poor man’s good heart wins him power and riches over Prince Wicked.
- “The Red-Bud Tree”
- Young princes see a tree at different times of the year, and cannot agree on its appearance.
- “The Stolen Plow”
- How two traders get their plow and child back.
- “The Stupid Monkeys”
- Monkeys are unable to discern how much to water trees.
- “The Three Fishes”
- The thoughtful fish saves his two less-thoughtful brothers, and they all return to a safer river.
- “The Tricky Wolf and the Rats”
- A wolf eats rats, but then the Chief of Rats finds out and bites his neck, killing him, so that the rest of the rats live in peace.
- “The Wise Goat and the Wolf”
- A goat outwits two wolves.
- “The Woodpecker and the Lion”
- A woodpecker does a favor for a lion, who does not thank him. Later, the lion refuses to do a favor for the woodpecker, saying he already did him a favor by not eating him.
- “The Woodpecker, Turtle, and Deer”
- Three friends help each other out.
- Year Published: 1922
- Language: English
- Country of Origin: United States of America
-
Readability:
- Flesch–Kincaid Level: 3.9
- Word Count: 12,338
- Genre: Fairy Tale/Folk Tale
- Keywords: advice, archery, army, brothers, clever, deer, determination, fishing, foolish, friendship, garden, good vs. evil, grateful, greed, hero, honesty, kindness, moral, peace, revenge, seasons, stealing, theft, trees, trick, trickery, war, wise, wit


I recently finished a contract and rather than immediately starting the search for my next client I've decided to take some time off to work on a solo project.
To keep motivated and to provide some form of goal I am going to set myself the challenge of writing a game from scratch in just one week. I'll be making updates here every evening so you can see my progress.
My aim is to have a complete game ready by this time next week.
I'm a software guy and my level of art ability just about extends to stick men, so if there are any artists out there who fancy getting involved with this challenge then please send me an email or give me a call. I'm going to be using the offices at the Birmingham Science Park at Faraday Wharf for part of the week, so if you're local and able to pop in and work on this together that's even better.


--- layout: post title: Yarn Along date: 2012-05-23 11:21:10.000000000 -04:00 categories: - Craft - Knitting - Recommendations - Yarn Along tags: - Askel vest - Carol Bodensteiner - Growing up country book review - Yarn along status: publish type: post published: true meta: _edit_last: '1' aktt_notify_twitter: 'no' dsq_thread_id: '1187990056' author: login: cint email<EMAIL_ADDRESS>display_name: Jacinta first_name: Jacinta last_name: '' ---
Joining in with Ginny from Small Things for yarn along.
I've been knitting Jairah's Aksel vest this week. It is knitting up really quickly, thanks to using magic loop. I wrote a post earlier this week on how I feel so silly for not learning this method earlier. I didn't have the required yarn size the pattern called for, so I have used different sized needles and following the size 2 pattern instructions, I'm hoping for a size 4 outcome. The pattern isn't fantastically written . There are a few typos and some of the instructions are a little vague. May have to make a few etra notes on my Ravelry page once the vest is finished.
I've knitted a lot more since I took the picture this morning, but the sun sets now about 5.30pm, so I didn't bother taking another picture, as the lighting will be wrong.
I've finally ordered some yarn (Ruby colour) for my next project, Tea Leaves cardigan, fingers crossed it will arrive before the weekend, as I want to make a start.
As for reading, I finished my kindle book, Growing Up Country: Memories of an Iowa Farm Girl, by Carol Bodensteiner. It was a lovely read and I could relate to a lot of things she wrote about. I can highly recommend it as a light, entertaining read.
Looking forward to seeing all your lovely creations. Jacinta x


Aliens (1986)
Review by Laurence<EMAIL_ADDRESS>Starring Sigourney Weaver, Paul Reiser, Michael Beihn, and Bill Paxton.
***1/2 out of ****
Every once in a while a movie comes along that completely redefines the genre: with dramas, it was Citizen Kane, with arthouse it was Pulp Fiction, and with comedy it was, well, that Jim Carrey guy(okay, so he's not a movie, but he DID have a huge influence on the genre. Not to mention an expensive one.) Sometimes a movie even combines them all into a big, sprawling motion picture event, as did Forrest Gump four years ago. With action films, it was Aliens, whic was released to much hype seven years after it's equally-innovative parent, Alien(1979). Directed and written by James Cameron(T2: Judgement Day, The Abyss, True Lies), THE authority on action films, it was a masterful encore to his sci-fi thriller The Terminator(1984). While the original Alien film was a dark, enclosed horror film that featured one alien slowly massacering a horrified crew, James Cameron took the big-budget action film with Aliens, which featured multiple aliens doing basically the same thing, although on a much-larger scale. And boy, did he take that route! I'd say at about 165 mph or so... The film opens 57 years after the original, with Lt. Ripley(Weaver) being found in her ship in a cryogenic state by a salvage vessel. If you'll recall, at the end of Alien Ripley, the only surviving member, cryogenically "hibernated" herself after expelling the rogue alien from her ship. Unfortunately, she thought she'd only be out for a couple of weeks... Once she's returned to earth, Ripley is quickly interrogated by "the company", who quickly dismiss her and her stories as lunacy. In truth, they believe her, as they soon approach Ripley with an offer to travel with some Marines to a new colony planet as an "alien advisor". It seems that the colony planet was a once-breeding ground for the nasty aliens, and now all communication with the planet has been lost... It doesn't exactly take a genius to guess what happens next: Ripley agrees, and before you can say "big mistake", she and the half dozen marines, plus the slimy corporate guy(Reiser), who has more than it looks like up under his sleeve, are off to the colony. When they arrive, they find the planet in ruins. Only one survivor is found, a little girl, Newt, who confirms that, yes, the aliens were here and that she only managed to survive by hidding in the ventilation system. And soon enough, the marines come under attack from the aliens... What happens for the next hour and a half or so is what completely sets this movie apart from any other standard alien sci-fi movie: the action scenes. Cameron directs them so skillfully, and so suspensefully, that you're literally ringing your hands by the time the finale rolls around. Which features, in my opinion, the best fight scene ever recorded on film, as Ripley straps herself into a huge robot and battles the nasty Queen alien to the death. Many people will tell you that this film, while being a great action film, has no real drama and is all cliches. Well, they would be wrong, my friends. If this film had no "drama", then why was Sigourney Weaver nominated for Best Actress at the 1987 Academy Awards? That's right, best actress. You know that ANY action film that has an oscar nomination attached to it for something other than technical stuff like editing and F/X has GOT to be good. In short, Aliens combines all the right elements(great action and F/X, drama, a good plot, good dialogue, and great villains)into what could arguably be called the best action film of all time. Then again, maybe not. Movies rise and fall from glory and, sad to say, Aliens was wrestled from it's throne of Best Action Movie by another Cameron film, T2: Judgement Day, in 1991. So who will be the next king? Well, let's wait until December 19th and see yet another James Cameron film-the highest budgeted film of all time-Titanic to make that decision. I can't wait.
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


*Or really any curious programmer
The featureful development console for ruby
A DNS server for easy EC2 management
Go is efficient, scalable, and productive. Some programmers find it fun to work in; others find it unimaginative, even boring. — Rob Pike** co-creator of Go
Ruby is designed to be human-oriented. It reduces the burden of programming. It tries to push jobs back to machines. — Matz** creator of Ruby
// main.go
// Every file is in a package. If you're writing an app use "main",
// otherwise it's the name of your library.
package main
// You have to import the packages you need in every file.
import "fmt"
// The main function defines where the program starts.
func main() {
// Call the Println method in the "fmt" package
fmt.Println("Hello World!")
}
go run main.go
func main() {
// noisyThings is a list of strings containing "Dog" and "Caltrain"
noisyThings := []string{"Dog", "Caltrain"}
// noises is a map from string to string containing ...
noises := map[string]string{
"Dog": "Woof",
"Caltrain": "PAAAAARP"
}
// Iterate over the range of all the noisyThings.
// The _ is the array index of each thing.
for _, thing := range noisyThings {
fmt.Println(thing, "goes", noises[thing])
}
}
$ go run main.go Dog goes Woof Caltrain goes PAAAAARP
// Defines a new type called user that has the following fields.
type User struct {
Name string
Homepage string
// passwordHash starts with a lowercase because it is private.
passwordHash []byte
}
// Defines a method called FirstName on the user.
func (user *User) FirstName() string {
// In Go strings are not objects.
// Methods are on the strings package instead.
return strings.Split(user.Name, " ")[0]
}
user := &User{Name: "Conrad Irwin", Homepage: "https://cirw.in"}
fmt.Println(user.FirstName())
class Dog
def sound
"Woof"
end
end
class Caltrain
def sound
"PAAAAAAAAAAAARRP"
end
end
# Is object a Dog or a Caltrain?
puts object.sound
type Dog struct { ... }
func (dog *Dog) Sound() string {
return "Woof"
}
type Caltrain struct { ... }
func (caltrain *Caltrain) Sound() string {
return "PAAAAAAAAAARP"
}
// Is object a Dog or a Caltrain?
fmt.Println(object.Sound())
interfaces
// Any object that has a Sound() method can be used as a Sounder.
type Sounder interface {
Sound() string
}
// For example, I could pass either a Caltrain or a Dog:
func ListenTo(s Sounder) {
fmt.Println("I heard a ", s.Sound())
}
ListenTo(fido)
ListenTo(northbound237)
$ go run main.go
I heard a Woof
I heard a PAAAAAAAAAARP
func PayAttention() {
// todo is a channel that can hold up to 100 things
todo := make(chan Sounder, 100)
// Find everything to listen to in the current environment.
for sounder := range currentEnvironment() {
todo <- sounder
}
// Then listen to it
for sounder := range todo {
ListenTo(sounder)
}
}
func PayAttention() {
// todo is a channel that can hold up to 100 sounders
todo := make(chan Sounder, 100)
// Listen to things as they become available
go func () {
for sounder := range todo {
ListenTo(sounder)
}
}()
// Find everything to listen to in the current environment.
for sounder := range currentEnvironment() {
todo <- sounder
}
}
func PayAttention() {
// done is a channel that is used to signal when it's done.
done := make(chan bool)
todo := make(chan Sounder, 100)
go func () {
...
done <- true
}()
...
close(todo)
// wait until the goroutine is done
<- done
}


I liked that there was a concept around process over product as it took some of the pressure off having a great product, and let me focus on learning the process invloved. I wasn't tempted to rely completely on a framework as I was happy to work through what I needed to. However I think it may have also resulted in my site not really being a great product at the end, with lots of room for improvement.
Before meditation I thought it was the part at the end of a yoga class. I hadn't really tried meditation on its own before, and any efforts to seemed to just result in my mind wandering and not really getting into a meditative state.
I've learnt that meditation can play a big part in emotional intelligence and self awareness, and by being well trained in meditative practice you can then use it in adverse or tense situations to react in the best possible way.
One of the techniques that stood out to me was that you can do walking meditative practice. I love going for walks down by the river to take a break from work, and after listening to the audio book explain how you can practice meditation techniques while walking I began to realise there are times that I am practicing meditation without realising it.
I find it quite hard not to start day dreaming and drifting off when meditation, I think I enjoy guided meditation a but better as it gives my mind something to focus on and somewhere to direct my thoughts / energy.


Touch The Numbers 2.0
00:00:00
Select diffculty :
Easy🥱 (3*3)
Medium😉 (4*4)
Hard😱 (5*5)
MAD!😵 (6*6)
YOU WON!!! GOODJOB!
play again? select diffculty!


!DOCTYPE html>
Techwave CEO Mr.Raj gummadapu has been awarded top 8th position in great CEO list announced today
Techwave proudly announces the iMicron launch today at Hyderabad.


12.1 Description of Insertion
Sort
Insertion sort is one of the simplest sorting algorithms. It works like the
approach we might use to systematically sort a pile of
canceled checks by hand. We begin with a pile of unsorted
checks and space for a sorted pile, which initially contains
no checks. One at a time, we remove a check from the unsorted
pile and, considering its number, insert it at the proper
position among the sorted checks. More formally, insertion
sort takes one element at a time from an unsorted set and
inserts it into a sorted one by scanning the set of sorted
elements to determine where the new element belongs. Although
at first it may seem that insertion sort would require space
for both the sorted and unsorted sets of data independently,
it actually sorts in place.
Insertion sort is a simple algorithm, but it
is inefficient for large sets of data. This is because
determining where each element belongs in the sorted set
potentially requires comparing it with every other element in
the sorted set thus far. An important virtue of insertion
sort, however, is that inserting a single element into a set
that is already sorted requires only one scan of the sorted
elements, as opposed to a complete run of the algorithm. This
makes insertion sort efficient for incremental sorting. This situation might occur, for
example, in a reservation system of a large hotel. Suppose one
display in the system lists all guests, sorted by name, and is
updated in real time as new guests check in. Using insertion
sort, resorting requires only a single sweep of the data to
insert a new name into the list.
|


The worst error message in the airport
When it comes to errors, error prevention – through great UX and well-built code – is first and foremost. There’s a lot more to say about error prevention (this blogger has some wise thoughts, and I blogged about it a while ago), but this post is about when errors do happen.
This could be because:
- The user makes an error – for example, typing the wrong password
- There is a bug or issue with the software or service – for example, the famous Twitter fail whale when the service was overloaded
The Google material design guidelines has some useful insight into error types.
Nielsen’s well-established error message guidelines suggest error messages should:
- be explicit
- be human-readable
- be polite
- be precise
- offer constructive advice on how to proceed
To paraphrase, an error message should tell a user clearly what the f**k is going on and what to do about it.
For example, take the following display, snapped on my phone in Manchester Airport’s departure lounge before Christmas, an hour or so before our flight was cancelled (poor us).
The message, in the centre of a blank display which should have shown flight departure times:
- is useless to its intended audience (ordinary human beings), as it is filled with techno-babble
- is literally unreadable in places
- provides no guidance on how to fix the error and restore the system
- may have been marginally clearer if its button read ‘Terminate program’
- includes a close icon, whose purpose is unclear (does it close the message or terminate the program?)
No error message in the context of a departure lounge display board is a good error message – all passengers want to do is see departure times, and can do nothing to fix the error. It’s a prime example of where error prevention is far more important.
Nevertheless, error messages like this persist in other contexts – we’ve probably all seen them many times. There’s no excuse – error messages should simply be simply and clear.
And I would add something to the Nielsen list: ‘design for the worst’. Sure, ‘hilarious’ 404 messages – when the user hits a page that no longer exists – can be fun. But not everyone is in the mood to be entertained. Even the friendly mailing service Mailchimp acknowledges in its tone of voice guidance that:
“It’s always more important to be clear than entertaining. When you’re writing, consider the reader’s state of mind. Are they relieved to be finished with a campaign? Are they confused and seeking our help on Twitter? Are they curious about a post on our blog? Once you have an idea of their emotional state, you can adjust your tone accordingly.”
So does Mailchimp’s current 404 error message breach its own rules? You decide…
Green swamp-monster not withstanding, Mailchimp’s error message is readable, concise and offers a clear next step (the navigation or search box) – unlike the message in the airport.


Let us know where you are from and what drives you.
Let's create a fresh blog post.
Click on the Profile icon in the navigation bar and update profile on the go.


Econaut
Select a vehicle to see how eco-friendly it is!
2013 BMW 328i
2021 Toyota Prius
2016 Honda Civic
2015 Jeep Wrangler
2018 Toyota Camry
2019 Tesla Model S


A report from the course HKR DA277B VT20
S01
I have worked with Github before during other projects and courses but i have not used Markdown or Github pages before. Github pages seems like a very good tool to use when developing webpages so Im interested in learning more. I still don't know what markdown is but i want to learn.
I have never created websites before, in last project course some people did but i ended up creating an android application instead.
I have basically no experience in developing webpages, but i have used a application called m1mo on iPhone that learn you the basics of HTML.
TIL for the section is further understanding of using Github and some basic HTML and understanding in building webpages. Github pages was a new one as well for me so good to learn that.
S02
I have no previous experiance with HTML, CSS or Javascript but i really exited for this course and learning more.
HTML provides a basic structure of webpages this is enhaced by other technologies like CSS and JavaScript. CSS is used to controll formatting, layout and so on and JavaScript is used to controll the behavior of different elements.
Your browser sends a HTTP request message to the server asking for a copy of the website. Your browser and the server uses HTTP protocol to communicate with each other.
TIL for this section was a greater understanding how to setup webpages and importense on naming index and so on. Also a much larger understanding on Github. I have learn more on how to design a webpage with pictures and paragrafs for example. Learn a little on CSS but looking forward to getting more into that.
S03
Before this exercise i had no previous experience in using and coding JavaScript, only language I have encountered is Java before. I really liked your lessons on JavaScript and i learned a lot just listening to you i class.
For me since I had zero experiance in JavaScript i can see a lot of simmilarities to ordinary Java in the way you use if statements for loops and so on.
For this exercise i have work with my previous knowledge in Java and how to think, I have looked and taken inspiration from your examples codes and tried to further develop if to make it nicer. I have also used google and stackoverflow to solve tasks and get ideas and learn more. When further learning CSS and styling i have used stackoverflow W3School and trial and error. I aim for grade 5 but when this is written im currently done with grade 4. A newer tag will be added when grade 5 i complete.
TIL for this section is using javascript and json objects to change websites without reloading them and a further understanding of CSS.
S04
Here is the text for this section.
S05
Here is the text for this section.
S06
Here is the text for this section.
S07
Here is the text for this section.
S08
Here is the text for this section.
S09
Here is the text for this section.
S10
Here is the text for this section.


User Crud
This project was completed as part of the coding challenge for the Code Fellows Python Development Accelerator in order to show a basic familiarity with Django development.
Deployed on Heroku, the app allows visitors to create, read, update, and destroy users stored in a Postgres database. Additionally, select users can be protected from casual deletions or modifications through the admin panel.
There also may be a few easter eggs included--just for fun.


{% assets "css_govuk_elements" %}
{% endassets %}
This is where the plumbing lives
{% include "_messages.html" %}
Create ordinary user accounts for research
Email
Full name
Once a user has been created you can add objectives for them or other existing users (including yourself)
Add objectives


Nets:
Thickness:
CP:
Origami Folder
Controls
mouse
rotation/zomming
arrows
translation
space
toggle animation
c
random colors
e
toggle edges
t
toggle opacity
,
fold
.
unfold
[
faster
]
slower


Example:
void process(Consumer<Number> consumer);
should be replaced with:
void process(Consumer<? super Number> consumer);
This method signature is more flexible because it accepts more types: not only
Consumer<Number>
, but also Consumer<Object>
.
Likewise, type parameters in covariant position:
T produce(Producer<T> p);
should be replaced with:
T produce(Producer<? extends T> p);
To quote Josh Bloch in Effective Java third Edition:
Item 31: Use bounded wildcards to increase API flexibility
Using wildcard types in your APIs, while tricky, makes the APIs far more flexible. If you write a library that will be widely used, the proper use of wildcard types should be considered mandatory. Remember the basic rule: producer-extends, consumer-super (PECS). Also remember that all Comparables and Comparators are consumers.
Use the first checkbox to ignore invariant
classes.
Invariant classes (e.g. java.util.List<T>
) are
classes that both accept values (via its List.add(T)
method)
and produce values (via its T List.get()
method). On the
other hand, contravariant
classes only receive values, e.g. java.util.function.Consumer<T>
with the only method accept(T)
, and covariant
classes
only produce values, e.g. java.util.function.Supplier<T>
with the only method T get()
. People
are often OK with bounded wildcards in covariant/contravariant
classes but afraid of wildcards in invariant classes, e.g. void
process(List<? extends T> l)
. Turn this setting off to ignore
these invariant classes and leave them rigidly typed, e.g. void
process(List<T> l)
.
Uncheck the second checkbox to ignore private
methods, which can be considered as not a part of the public API.
Uncheck the third checkbox to ignore instance methods and only report static
methods.


Brief
Aim: to create a program that allows a user to fill in customer details and a customer order for pizzas and print out all of the order details.
Initial project backlog
Sprint 1
Aim: to create a menu that allows the user to choose to see the list, order an item from the menu or quit the program
Rough Program Plan
Sprint Board 1 in Progress
Basic Test of Program
Sprint Review
For sprint 1, I wanted to create a basic pizza menu which had two options available on it. I also wanted the program to ask the user if they wanted delivery or pick up and made the program ask for the user's name. As well as this, I also got the program to print out the list of pizza options available, ask the user what they wanted and repeated what they chose.
This will be the basic structure for my program, though for my next sprint, I need to work out how I should create the ordering part of the program. For my ordering program, it needs to be able to connect to both the pizza menu list and the options list for what the user wants to do. For this, I will do some testing to see if the ordering part would work better as a part of the main function or as it's own separate function. After I figure out how I want to design the order system, I want to add functions that allow the user to add the number of pizzas the customer ordered/add more than 1 pizza and also take away amounts. I also want to have the cost of the order update depending on how many pizzas are ordered.
I also want to change the design of the delivery and pick up system, so that the code isn't as repetitive as it is currently the same code in both functions except one is for delivery and one is for pick up and it seems unconventional.
I am happy with how my first sprint has ran and I think it suits the basic purpose fine, though there are definitely a lot of things I still need to fix.
Github Push
Sprint 2
Aim: My aim for sprint 2 is to add the option to remove pizzas to the order and add a pizza to the order.
Plan for first version of sprint 2
Plan for second version of sprint 2
Sprint Board 2 in Progress
Full test of Program
Here is a standard run through of the final version of sprint 2.
Testing
Trial of Sprint 2 order pizza design
This was my first design of the program with the add and remove pizza functions. I had an order function which just had the user select a pizza type and then had a message saying they had selected it. There was not much of a purpose and it was not a suitable design for this sprint. I had made it with the intention of the user being able to "review" their order and then make changes, but with this sprint's design of the adding and removing pizza functions it did not work.
Removing more pizzas than available
On this test, I tried removing more pizzas than what was available, and the amount of pizzas went into the negatives. For a future sprint, I am going to make it so that the program only allows the user to delete what is already present.
Sprint Review
In this sprint I successfully added three new functions. I separated my main function into the main function and the order function, I also added an adding to the pizza quantity function and I added a remove pizza quantity function. The main function now just has a basic menu which asks the user if they want delivery or pick up and redirects the user's choice to the function that they selected. From there, the delivery or pick up function then redirects to the order function.
I will add more to the delivery and pick up functions in my next sprint, so that the program asks for the address for and phone number for the delivery option and asks for the phone number in the pick up option.
In the order function, it has a menu which asks the user if they want to add pizza quantity to the order, remove from the pizza quantity or quit. If the user chooses to add to the pizza quantity, it redirects them to the add_pizza function.
The add_pizza function prints out the menu and then asks the user what pizza they want to add. The function then adds to the pizza quantity depending on the amount the user selects and updates the cost. If then asks the user if they want to add another pizza and if they do, the add_pizza function runs again, if they don't the program returns to the order menu, where the user can then choose to add another pizza again, remove pizzas or quit. In a later sprint, I will set restrictions on how many pizzas the user can order.
The remove pizza function allows user to select a pizza type from the list and choose the quantity of pizza that they want to remove. However, an issue I have with this is that the user is able to go into negative quantities. I want to make the program to only allow the user to reduce the amount that is present and I will likely fix this in my next sprint or when I do validation.
While I was creating sprint 2 of the program I had to run quite a few tests as I had issues when I was designing the order function. As I said before, I split the main function into the main function and an order function. One of the reasons I did this was because I had a lot of repetition in my delivery and pick up functions. As they both do the same thing for the main part of the pizza program (which was what I was designing in sprint 2), it made sense to make an order function and then redirect the delivery and pick up function to it. I also decided to do this for my quit option in the add and remove functions, it needed somewhere to redirect to after the user was done and I didn't want it repeating the delivery or pick up messages and I also didn't want it to redirect to the main menu.
Then, I had an issue with the quitting option in the order function. First, instead of stopping the program, it would redirect to the start of the order function. Then, I changed something and it would redirect to the main menu and the user would have to press quit again for the program to stop. This design was unconventional and I had to run some tests to figure out where to put/remove loops and I figured out how to allow the program to quit at the order function.
For my next sprint, I want to add a function that allows the user to add new pizza types to the menu list. I also want to add a function that allows users to delete a pizza from the menu/order. As well as this, I plan on adding a review/confirm function where the user can see their order and confirm it. After they confirm their order a new order should start. I also want to add a function that just prints out the menu.
Git push
Sprint 3
Aim: My aim for this sprint is to redesign the ordering pizza process and to add a review pizza function and to improve the pick up/delivery functions.
Sprint board 2 in progress
Plan for first version of sprint 3
Review function plan
Plan for second version of sprint 3
Testing
Delivery cost issue
In my program, I calculate the total cost individually (so that there is not a total cost that is constantly updated in the program). As a result of this, I have to calculate the cost by multiplying the quantity by cost. So, for the delivery cost I had to make it a list item. I put the delivery cost as "extras" and the quantity is 1 when the user selects the delivery option. I originally had the extras list add to the main order list. However, this design was not good because as you can see from the image, it meant that the extras list could be added to or removed. I fixed this issue by making a list just for storing "extras". This is a better design because it is also more flexible. It means that it would be easy to add other "extras" type items in the extras list in the future.
Maximum and Minimum Pizzas
This test shows that in sprint 3, the customer can order 50 pizzas as well as remove 100 pizzas. The cost also goes into negatives. For my next sprint, I will need to address this issue and set restrictions on how much pizza the customer can order. It is not logically feasible for a customer to be able to order 50 pizzas and the amount of pizzas/cost should also not be a negative number.
Empty list issues
In the test above, it shows how I was able to select the add pizza option and then was able to enter a value even though there were no pizzas in the order. This will be an issue that I address in my next sprint, so that the user can only add a pizza if the order list is not empty.
String entered instead of integer
In my program, every time a string value is entered when an integer value is supposed to be entered, the program crashes. This will be an issue I have to fix when I do validation in the next sprint.
Repeating pizza in order list
As shown above, the cheese pizza appears twice, with different quantities. I need to validate in my next sprint so that if the user enters a pizza that is already present in the order list, it redirects them to a different function or doesn't let them continue. This needs to be addressed because I also want to set restrictions on how much pizzas someone can order per pizza type and allowing the user to enter multiple of the same pizza type defeats the purpose of restricting quantities.
Order Complete without customer details
In my program, the user is able to complete the order without entering customer details. This is not logical as customer details are necessary for a pizza program. I will validate so that this is a value that has to be filled before continuing in my next sprint.
Able to complete order with nothing ordered
The user is able to confirm and complete the order with no pizzas ordered. This is something I need to fix in my next sprint, so that the user can only complete an order if there is at least 1 pizza and customer details present.
Able to complete order with extras list
The user is also able to complete the order with just the extras list in it, so I think for the next sprint I will only allow the confirmation function to run if customer details and the order list are not empty.
Full run through of final version of Sprint 3
Sprint Review
In my 3rd sprint, I decided to do change the base structure of my pizza program. In my previous sprint, I had the order details stored within a list called "pizza_list", where when a pizza is added to the order, the quantity would update within the pizza list and the cost would be set to $5 within the list. However, this design was not flexible and also caused some problems when I wanted to further extend my program, so I had to change it. The new structure works well, however.
One of the problems it caused was that when I was creating my review function, I couldn't print out the customer's order without printing out all of the pizza list options (so it would print pizza options where the quantity was 0 as well as pizza options that had a quantity more than 0). Visually, this was not appealing and it didn't make sense as a program to print out what the user had not ordered. So, I decided to instead use a list to store the pizza menu options, an empty list to store customer order details.
In the empty customer order list, it allowed me to add what the user ordered and the list kept updating as they ordered more or less. As the list only contained what the user ordered, it meant that I was able to only print what they ordered in the review function.
With the new program, the new pizza function is used to add pizzas to the order and then the add pizza function allows the user to add to the quantity of pizzas for pizza type that is already in the order list. For my next sprint, I want to combine the add, remove and delete pizza type functions in a menu option called "edit order". This would make the main menu less confusing and easier to read. In the "edit order" option I want to present the options of adding or removing to the user. Then, the user will be shown the order list and can add or remove pizza quantities.
I also removed the order function. The order function was excessive and unnecessary as I could include everything in the order function in the main function. It was also confusing to work with when I was creating exit options as it had to go through the main function to quit.
In sprint 3, as mentioned earlier, I added a review function. The review function allows users to see what the order consists of and review the customer details such as deliver address, name, etc. In the review function, it asks the user if they wish to confirm the order or if they want to continue adding more items to the order. It also prints out the customer details. I will update this in my next sprint to make the review function more thorough, however. I want to rearrange the format so that the information given is clearer.
I also changed the order of operations slightly so that the program runs more smoothly. I now have the delivery/pick up function as an option in the menu instead of starting the program with the deliver/pick up option. I am also going to have the program not start with adding a new pizza immediately and instead give the user a menu of options. To make sure the order only goes through if a pizza is added to the order, I am going to validate my program so that the review function cannot be called if nothing has been added to the order. I will also validate so that if the user enters a pizza that is already in their order, it redirects to the add pizza function instead of entering a value twice. I will also validate integer entries so that the program will not crash if a value that is not an integer is entered and I need to validate for string entries so that there is maximum and minimum lengths. I need to validate for string lengths to minimise the chances of invalid/fake names will be entered.
I am also going to have the delivery/pick up function repeat the details the user entered as a confirmation message to check that the details are correct and give the user the option to change the details if they are wrong. I also need to validate the phone number so that the program only accepts phone numbers with a certain length and prefix.
Sprint 4
Aim: My aim for this sprint is to validate all inputs so that the program does not crash, format the program so that it is easier to read and to combine the add, remove and delete pizzas options.
Sprint board 4 in progress
Planning for sprint 4
Plan for checking if a name is already in the list
This plan was for the validation function for when the user tried to add a pizza that was already present in the order list.
Phone Number Validation Planning
Test 1
In this test, I tried getting the user's input as an integer then converting it to string. After that, I would use regex to see if the phone number entered matches the requirements and I also used the length of the string to determine if it was a valid phone number.
Test 2
In this test, I took the input as an integer and used maximum and minimum numbers to validate for the length of the phone number.
Test 3
In this test, I got the input as string but I used regex to check if the string consisted of integers only as well as if it started with valid prefixes. I also used the length of the string to determine phone number length validity.
Validation Table
Testing
Phone number validation test table
This is my phone number validation test table which I used to compare the functionality of the different methods of phone number validation.
I found that only test 3 worked for a normal 02 and 04 number. 02 and 04 numbers are the main styles of phone numbers used in New Zealand so it was imperative that the method I chose was able to function with this properly. I found that as test 1 & 2 used integer inputs, the 0 disappeared, even when test 1 converted the integer to string.
Test 1 also crashed when I entered a string value as I had not validated it to only accept integers.
Test 2 accepted a non New Zealand phone prefix as it didn't validate for prefixes, only integer and length. The method I choose should really only accept New Zealand phone numbers as it doesn't make sense in terms of delivery and pick up for an overseas phone number to be able to order a pizza.
Overall, as you can see, Test 3 was able to fill all the requirements for my validation testing, so it is the method I ended up choosing to use for my program. It was able to validate for length as well as prefixes and only accepted integer values.
Test trial using my brother
I got my brother to test my program to give me feedback on how it works. A good point he made was that some of my messages were confusing, such as the finalising order part not specifying what letter corresponds to what action and how add pizza uses the letter n in the main menu. He also managed to pick up an issue where confirm customer details was asked twice, which I ended up fixing. I also changed some of the formatting slightly so that it was easier to read.
Style Checker
I ran my code through a Python 3 style checker to see if there were any parts of my code that went against the main coding conventions. I felt it was an appropriate time to do so as I was nearly finished with my project and I was not receiving any fatal errors in my code.
Before
As you can see, I had a lot of errors in my code. Most were because I did not have proper docstrings in my functions and my code was not thoroughly commented.
After
After making the required changes, my code had no style issues found. I also had no errors from the pycharm code checker as well!
Full Run through
Sprint Review
Sprint 4 was my final sprint and overall I am satisfied with how it turned out. I had a bit of trouble with the validation functions as there was a lot of content that I was not familiar with and required a bit of research, but overall I think it works well. In this sprint I added my validation functions and made a few adjustments to the program structure. I validated for string input, integer input, phone number input and if the pizza name is already in the list. I also made an "edit order" function that combines the add, remove and delete pizza functions. As far as I am concerned, my program does not crash and the validation functions work how I planned as every time a value that is entered that does not meet my requirements, the program asks the user to re-enter until they enter a valid value.
In this sprint I also did a lot of formatting fixes. I made the program a lot easier to read by spacing out different items and by separating different sections with lines. I also added some extra confirmation steps such as finalising the order, then confirming the order in my review function, to make sure the user was content with the details entered.
Although it was not in my original plan, I also decided to add in a "extra notes" feature to my program. The reason I decided to add this was because for my delivery function, I asked for the st number and name. I did this to try and make sure only valid st addresses were accepted. However, while I was trialling my program on my family members, one of them asked about apartment deliveries.
So, after getting inspiration from online shopping, I decided to add a feature that asks the user if they have any extra notes to add. This means that the user is able to add if they want their pizza dropped of specifically at their apartment number, or any other additional notes such as drop off at the back entrance. The extra notes are printed out on the "receipt". If the user chooses not to enter any extra notes, no extra notes are printed out on the "receipt".
Although I was not able to complete it in my timeframe, for a future sprint I could look into making pizzas customisable, so the customer can add extra toppings etc or adding a drinks menu to my program.
Github
Throughout my project, I used Github to store my project as well as using their backlog planning system to help organise and structure my project. I frequently uploaded my code to github using terminal, so that I was able to retrieve code if something went wrong. As well as this, I also used Github's kanban boards to plan my intentions for each sprint and prioritise which aspects needed to be completed first.
The Kanban board is designed so that you can move cards with information on them to the column that represents its completion. This was helpful when I was creating my program as it allowed me to stay on track and helped to remind me of what needed to get done. I put the cards that needed to be prioritised at the top of the kanban board and it helped me to make sure the most important parts of code got done over minor parts. The board also allowed me to write down new ideas for the program as I progressed, so you can see I added some slightly less doable actions such as creating a mobile app.
This is what my project backlog looked like near completion.
This is a record of my github commits. Every time I did a major change in my program
I uploaded the program to github to keep a record of the information.
Relevant Implications Summary
Future proofing
Future proofing is where you design your program to be easily updatable in the future. This means that the program is easy to add new features to and changes to different parts of the program are easy to change.In my program I have addressed future proofing by using a function based build. Each of the different features in my program have a different function. So, for example I have a function specifically for adding pizzas to the order as well as a function specifically for removing pizzas. By using different functions for different features, I am able to update and make changes to a function without "upsetting" the rest of the program. This means that if something goes wrong with a function, it is unlikely to disrupt the entire program. It also means it is easier for me to fix errors as I can target the error to a function, take the function out of the main program and make tests with it, without disrupting the main program.
My program is also easy for another developer to work on and improve. My code is well commented and has docstrings at the top of every function. The docstrings have a description of what the function does and they also say what the parameters refer to in the program. This makes it easier for the developer to see what each function does. As my program starts with the main function, it also makes it easy for a developer to see how my program works and make changes.
I also used a python 3 code checker to see if my code followed the main code conventions. The code checker told me how to write proper docstrings, proper formatting for my program and it also told me when I had lines of code which were too long. The code checker brought up a good point about line length being too long. It said that lines of code longer than 79 characters should be shortened or distributed across multiple lines. The reason they suggested this was because shorter means the lines of code are likely to be less complicated and easier to understand by other people. They also mentioned that it is also easier to work using files side by side with shorter lines of code. As well as this, they also said that shorter lines of code work well for code review tools that show the information in two side by side columns. As shown in my "Style Checker" section in this website, I made sure to have no style issues left in my code after going through the code checker.
Functionality
Functionality is making sure the program works well and runs smoothly. This means that the program does not crash, totals get added properly and pizzas are added properly.
In my program, I have addressed functionality by systematically testing my program after each sprint, as well as regularly testing my program throughout the addition of a new feature. As I have thoroughly tested my program, I have been able to spot most (if not all) errors and fixed them so that the program runs smoothly. As far as I am concerned, my program does not crash, so the user should not have any serious issues whilst using the program.
Through thorough testing as well, I have made sure that the total cost and quantity of pizzas adds up to the correct amount throughout the program. I calculate the total cost and total quantity individually through each function, instead of having a running total throughout. Each cost and quantity is also printed out as well as the total cost. By doing this, it is clear to see where an error may be in calculations while I was testing my program, so any errors were easy to fix. The quantity of pizzas is a value that gets updated throughout the program, however I have tested this regularly throughout all my sprints to make sure that the correct amount is removed or added to.
As well as my personal testing, I have also had multiple other people test my program, some with digital technologies experience and some with none. By testing my program with people who had digital technologies knowledge, it helped me to spot and fix technical errors with my program that I may have not noticed. Testing my program with people that were not knowledgeable with digital technologies was also helpful as they told me what parts of the program were easy to understand and what parts were slightly confusing. An example is where my friend told me that the integer error message was confusing so I changed it to make it more understandable.
Usability
Usability is where the program is easy to use for the user. This means tha the program gives informative feedback, communicates if the user made an error and if applicable, fixes the error on its own.
In my program I have given informative user feedback through the use of messages that appear after a function has completed its task. An example of this is how I have a message telling the user how many pizzas were added in my adding pizza function before the user returns to the main menu. I have made my messages so that they are not "computer talk" and they are easy for a person without digital technologies knowledge to understand.
I also have error messages every time the user enters a value that is not accepted by the program. When the user enters a wrong value, a brief message stating what the user needs to input appears until they enter an acceptable value.
For input where the user has to enter (Y) or (N) etc I also have validated so that the program accepts both upper and lower case letters as it can be frustrating having to type in upper case for the whole program. Another self fix is how the program ignores spaces if they are typed before the letter when the user enters a menu option or a (Y)/(N) entry.
My program also uses a consistent navigation system. It is similarly designed to common shopping programs that people use daily, it is very predictable and easy to learn how to use. The user is also able to return to the main menu easily if they get lost and once they are at the main menu they can quit at any time.


Publish data prototypes
Service blueprint v1 Improving the on-boarding processBETA
January 2018
Main changes
- We built the web form part of the prototype tested during Alpha and started using it to get data from services. We then mapped out the entire end-to-end process for data publishers and sought to make improvements to it.
- The biggest change was the introduction of a 'kick-off meeting' in which the Service Performance team met with new data publishers to go through the metrics. This was intended to increase motivation to publish data, set expectations, and make sure that users' interpretation of the metrics is correct.
Iteration 4 Web forms sent direct to service teamsALPHA
August 2017
Main changes
| Change | Why we made it |
|---|---|
| Re-focused to get data directly from a contact on a service team | We think that by going direct to services, we can communicate more easily, motivate users to give data, and remove a lot of redundant users from the data gathering process. |
| Use web forms to gather data, sent to publishers via automated emails | We've found in prior research that web forms work better for inputting a small amount of data. They can be used by anyone. They cannot be emailed around and reformatted like spreadsheets are. |
Iteration 3 Automating sending spreadsheets aroundALPHA
July 2017
Main changes
| Change | Why we made it |
|---|---|
| Narrow scope to focus on people who gather data for multiple services on behalf of their organisation. | This is how most data is currently published to the Performance Platform. We think that be easing some of the pain points for these central contacts, we can get better data more regularly. We should also be able to make a smoother transition from one product to another. |
| Use email and upload links to automate the process of asking for and gathering data. | To remove the pain point of forwarding and receiving loads of emails with spreadsheets of data. The central contact's role becomes more focused on monitoring and sense-checking. |
| Create an account to manage data from. | To see there is a need to have somewhere to manage this, and if it's any better than email. |
Iteration 2 Publish manually or automaticallyALPHA
June 2017
Main changes
| Change | Why we made it |
|---|---|
| Test a new option to explore automatic publishing of data via APIs. | We've found from users that automatic publishing is the ideal scenario, but hard to get set up for certain services/organisations. We think that offering a more hands-on service to get users started will make this easier. |
| Group the previously tested ideas into one, with two routes for different responsibilities. | To test if users knew whether they were responsible for one or more services. We also need to test the previous prototypes with more users who publish data for multiple services so we can be sure of our findings. |
Iteration 1 Publish for services or departmentsALPHA
June 2017
Two options to test different levels of responsibility:
- One person responsible for one service, with ability to delegate responsibility for individual metrics
- One person responsible for one department, with ability to delegate responsibility for individual services


Hello everyone, this is a page about me and my IT life
I am excited to actually learn stuff. I realized how important it is to understand how the
IT world works and its many different approaches before jumping into the deeper end of the pool.
I found out a few things I want to learn
- - Front end development
- - Back end development
- (But this one is a little scarier to think about)


OWA-International (Organization for the Welfare of Animals) is a charity organization that promotes animal care by spaying/neutering stray dogs and cats, providing shelter to animals that are injured or in danger and informing citizens on how they can help support animal welfare. We have been active since 2014 and our community keeps on growing. Join our cause!
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sapiente esse necessitatibus neque.
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sapiente esse necessitatibus neque.
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sapiente esse necessitatibus neque.
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sapiente esse necessitatibus neque.


I'm Will and I am currently a student in the Software Development program at Ivy Tech. Born and raised in Lafayette Indiana, Owner of two Huskies, I love space and anything science related. I want to build the apps and programs that will take us into the future!
Take a look at some of my projects! Click the image to view the functioning app, or click the Github logo in the description to take a look at my code!