chagers
Timeboxing That Website
And other lessons learned while designing my first site
06.07.15
Websites were made to be updated - indeed they were. However, the time it takes to update a website (especially your personal website) can get pretty out of hand unless you have the good sense to keep yourself in check during the updates.
I'm my own worst critic. There have been so many times I sit and torture myself over the smallest of details when working on my own project - often it seems - completely unaware of what I'd actually like the end state to be! No matter how much wire-framing, or review of the intent and purpose of my site, it seems I'll just want to recreate my vision right in the middle of my process. Takes a lot of reigning in to go back to my original vision and intent, and just stick to it.
In that sense, it's been great practice on understanding the importance of wireframes and sticking to the original picture. Get something done - then move towards improvements. If I've taken the time in the beginning to really understand what is needed from a website, and consider how the aesthetic can enhance this need, then the original idea should be a solid place to get started. A total re-haul of the site shouldn't be in the future if a good base has been created.
The part where this gets especially difficult, though, is when designing websites is a brand new and blossoming skill! Of course I'll learn more interesting ways to build sites, and different display tricks, and different framing sites to try out. But, the important thing to remember is my original intent and need for the website hasn't changed. Just the fun stuff I get to add to it and change about it.
I took a stab at using the Bootstrap framework for refurbishing my personal website. It's been a pretty big learning curve to try and figure out exactly what I can do with this framework, and how it can make my updates easier in the future, but it's definitely been fun trying new things. I think my site is a bit cleaner and more streamlined, but it still is pretty simplistic at this point. This is where timeboxing came to be especially important for this update. Lots of rabbit holes to go down when learning a new sort of language!
So, overall I'd say there are a few things I'd recommend keeping in mind when creating websites:
- Time box! Think about how much time you think is reasonable for each of the design steps in creating a website and really try and stick to it. Future self will be grateful!
- Set up a plan for your site (outside of the computer) and think about everything you could possibly want out of the site (you'll most likely tone this list down, but have some fun with it at this point!).
- Sketch out your idea on paper. These sketches can be quick and dirty, but take the time to just draw out a few ideas of how you want your site to look and function. This helps me wireframe more efficiently. For me, it's much easier to draw ten pencil sketches in a book than it is to throw together ten wireframes before settling on the final one.
- Spend your time wireframing your sketches.
- When it comes time to create your site, envision an end point. Try and stick to that! Even if it's just the endpoint for a minimum viable product. Once I've finished something to the point where it functions, it's much easier and less overwhelming to go back and update small things a bit at a time.
- Revisit the website and update as needed. Don't let the site grow cold and static after working so hard on getting it set up!


---
title: Other changes to extensions
version: "5.4"
tags:
- "5.4"
- extensions-other
---
Other changes to extensions
Changes in extension behavior, and new features:
-
pdo_mysql
- Removed support for linking with MySQL client libraries older than 4.1
-
The MySQL extensions mysql,
mysqli and PDO_mysql
use mysqlnd as the default library now. It is still possible to use
libmysqlclient by specifying a path to the configure options.
-
mysqlnd
- Added named pipes support


--- layout: page title: Training - financial management permalink: /training/financial-management/ main_image_path: main_image_caption: aside: true _options: layout: hidden: true image: width: 1200 height: 1200 resize_style: contain mime_type: image/jpeg _comments: ---
Courses are available for a range of financial topics, drawing on John's wide experience in the NGO sector. The courses are participatory, designed to meet the needs of the individual group and to provide practical tools to be used immediately. All courses are supported with clear materials for participants to take away.
Courses include:
Contact John to discuss your own organisation's needs
Click here for details of financial management training in French


Please wait...
Handcrafted by Luke @ Deathray Games
Originally created in 2016 for Ludum Dare 37, a 72-hour game jam, with the theme of One Room.
Uses the RocketBoots web game kit, jQuery, Lodash, Mustache, Google Fonts, and a few images from Wikimedia Commons. Everything else is original and © 2016-2023.
Code is open source, released under the MIT license, and available on GitHub. Artwork is licensed under the Creative Commons BY-SA-4.0 license: .
Recommended music to listen to while playing: Divider
Mastodon Tumblr Reddit GitHub DeathrayGames.com incremental_games subreddit
Using mystical evocation you can call spirits and demons into the physical realm and bind them within your magic circle. More powerful entities will provide more forbidden knowledge, but will increase your chance of madness.
Books for saving knowledge are essential to all professional magicians.


Main
Animate
Pohoda
Malina
Rajec
Egres
About
Menu 1
Animate
Menu 3
Menu 4
Menu 5
Here was a CSS animation while content was loaded.
Reload


Ruby
- provides all sorts of looping methods: each, map, inject, times, etc.
JavaScript
- uses two keywords for all looping operations: for and while
Reviewing Loops
All loops can be boiled down to two basic types:
- Loops that perform a certain action a set number of times
- Loops that perform a certain action until a specified condition is met
In Ruby, we can identify the first type in methods that execute a block of code either (1) a pre-defined number of iterations (e.g. Integer#times) or (2) for every element in a collection (Array#each, Enumerable#reject, etc.). In JavaScript, all of these kinds of loops are covered by the for keyword.
The second type is exemplified in the while keyword, which both Ruby and JavaScript implement. We'll cover while loops first.
While Loops
A while loop is the simplest type of looping operation: do something until a condition evaluates to false.
Ruby
n = 1
while n <= 5
puts "n is equal to #{n}"
n += 1
end
JavaScript
var n = 1;
while (n <= 5) {
console.log("n is equal to " + n);
n = n + 1;
}
Before every iteration in a while loop, the conditional statement is evaluated. If it is true, the loop runs again. If it is false, the loop stops. In this case, the loop will run as long as the variable n is less than or equal to 5.
For Loops
A for loop, as mentioned above, is useful for looping with a given number of iterations. Use it when you want to do something x times, such as changing the values in an array or counting the number of vowels in a string.
Ruby
for num in 1..10
puts num
end
x = (1..10)
x.each {|y| puts y}
JavaScript
for (var i = 1; i <= 10; i++) {
console.log(i)
}
Looping Through Arrays
Ruby
dogs = ["husky", "great dane", "labrador retriever", "chihuahua",
"terrier"]
dogs.each {|x| puts x}
JavaScript
var dogs = ["husky", "great dane", "labrador retriever", "chihuahua",
"terrier"];
for (var i = 0; i < dogs.length; i++) {
console.log(dogs[i]);
}
It's all in the .length. Since JavaScript does not have an each() method we have to use array indexing to access the element each time.
As an example, let's say that we want to sort an array of integers into two arrays: odds and evens. In order to accomplish this, we have to iterate through each element in the source array, determine whether it is odd or even, and the shove it into the appropriate destination array. We need a loop that will execute as many times as there are elements in the array. Take a look at how we would write this, and try it out in the browser console:
// First, we set up the source and destination arrays
var integers = [3,8,1,6,2,0,5,7];
var odds = [];
var evens = [];
// Then define the loop
for (var n = 0; n < integers.length; n++) {
if (integers[n] % 2 === 0) {
evens.push(integers[n]);
}
else {
odds.push(integers[n]);
}
}
console.log(integers);
console.log(odds);
console.log(evens);
for ... in ...
There is another way to write for loops in JavaScript that is a bit closer to looping in Ruby.
Instead of writing for with a series of statements outlining the parameters of the loop (intial value, conditional, incrementor/decrementor), we can use the for (x in y) syntax, where x is a variable representing an incrementable value and y represents an object with a length property, such as Array.
var nums = [6,0,1,9,3];
for (i in nums) {
console.log(i);
}
The i variable still acts as an incrementor, just like the longhand syntax (for (var i=0; ifor...in will look for any enumerable properties available to the object, including any in the prototype chain. This can introduce unintended data into your loop! Run this code in your console to see an example:
testArray = [1,2,3,4,5]
for (i in testArray) {
console.log(testArray[i])
}
// outputs 1 2 3 4 5 as expected
// now lets add a property to the prototype chain
Array.prototype.newProp = "I live in the Array prototype!"
for (i in testArray) {
console.log(testArray[i])
}
To combat this we can either use the long form for loop, or you can add this line to make sure that the for..in loop does not try to look up the prototype chain.
testArray = [1,2,3,4,5]
Array.prototype.newProp = "I live in the Array prototype!"
for (i in testArray) {
if (testArray.hasOwnProperty(i))
console.log(testArray[i])
}
Each, Map, Select, Max
JavaScript does not provide looping methods in the same way that Ruby does. Here are examples of how would we reproduce Ruby-like looping methods in JavaScript.
Each
// Array#each
var each = function(array, func) {
for (var i=0; i < array.length; i++) {
func(array[i]);
}
};
The each() function defined above takes two arguments: an array and a function. each() then iterates through every element in the array and passes it to the function func (we can't use the word function for a parameter since it is a reserved word).
What is the purpose of the func parameter? In Ruby, you might call Array#each like this:
[1,2,3,4].each { |n| puts n }
The { |n| puts n } is the block of code passed to each. JavaScript does not have a separate object for blocks, so we instead use a callback function: a function called as an argument from another function. The parameter func stands in for a function which will be called with the argument array[i].
Here is an example of how you could use this function:
// Define an array
var bugs = ["beetle", "spider", "yellow jacket", "firefly"];
// Execute the each() function, passing it a callback function
each(bugs, function(x) { console.log(x); });
Map
Ruby's Array#map method will pass each element in an array to a block, and then return a new array of the modified elements. Here is how we can accomplish this in JavaScript:
var map = function(array, func) {
var results = [];
for (var i=0; i < array.length; i++) {
results.push(func(array[i]));
}
return results;
};
Using map() would then look something like this:
// Source array:
var nums = [5,12,2,81,30];
// Function to use:
var timesTwo = function(x) { return x * 2 };
var numsTimesTwo = map(nums, timesTwo);
numsTimesTwo; // => [10, 24, 4, 162, 60]
Note the use of the return keyword in the argument function. If left out, every function call in the loop would return undefined, giving us an array of undefined elements.
Select
select is similar to map except that we use the callback function to provide a truthy or falsey value for the conditional statement.
var select = function(array, func) {
var results = [];
for (var i=0; i < array.length; i++) {
if (func(array[i])) {
results.push(array[i]);
}
}
return results;
};
Try using select on the following arrays to filter out unwanted values:
// Select the schools with names that have an 'r' in them:
var schools = ["Berkeley", "Notre Dame", "Chicago", "Stanford", "Tulane"];
// Select the multiples of 5:
var numbers = [4,10,39,105,73,20,15];
// Select the sub-arrays that contain less than 3 elements
var grid = [ [0,1,0,0],
[1,0,1],
[1,1,0,0,1],
[0,1],
[1,0,0,0] ];
Max
Finally, Array#max: the simplest of the four. No need to pass a callback function, since all we are doing is returning the largest number.
var max = function(array) {
var biggest = array[0];
for (var i=0; i < array.length; i++) {
if (array[i] > biggest) {
biggest = array[i];
}
}
return biggest;
};


?
Your password must contain between 6 and 15 characters, must include at least one upper case letter, one lower case letter, and one numeric digit and no other characters


--- layout: post title: "Test data without Builders" description: "We don't need no steenkin' Test Data Builders!" date: 2017-09-11 7:28 UTC tags: [Unit Testing, Haskell, F#] --- {% include JB/setup %}
{{ page.description }}
This is the fifth and final in a series of articles about the relationship between the Test Data Builder design pattern, and the identity functor. In the previous article, you learned why a Builder functor adds little value. In this article, you'll see what to do instead.
While you can define Test Data Builders with Haskell's Identity
functor, it adds little value:
Identity address = fmap (\a -> a { city = "Paris" }) addressBuilder
That's nothing but an overly complicated way to create a data value from another data value. You can simplify the code from the previous article. First, instead of calling them 'Builders', we should be honest and name them as the default values they are:
defaultPostCode :: PostCode defaultPostCode = PostCode [] defaultAddress :: Address defaultAddress = Address { street = "", city = "", postCode = defaultPostCode }
defaultPostCode
is nothing but an empty PostCode
value, and defaultAddress
is an Address
value with empty constituent values. Notice that defaultAddress
uses defaultPostCode
for the postCode
value.
If you need a value in Paris, you can simply write it like this:
address = defaultAddress { city = "Paris" }
Likewise, if you need a more specific address, but you don't care about the post code, you can write it like this:
address' = Address { street = "Rue Morgue", city = "Paris", postCode = defaultPostCode }
Notice how much simpler this is. There's no need to call fmap
in order to pull the 'underlying value' out of the functor, transform it, and put it back in the functor. Haskell's 'copy and update' syntax gives you this ability for free. It's built into the language.
Haskell isn't the only language with 'copy and update' syntax. F# has it as well, and in fact, it's from the F# documentation that I've taken the 'copy and update' term.
The code corresponding to the above Haskell code looks like this in F#:
let defaultPostCode = PostCode [] let defaultAddress = { Street = ""; City = ""; PostCode = defaultPostCode } let address = { defaultAddress with City = "Paris" } let address' = { Street = "Rue Morgue"; City = "Paris"; PostCode = defaultPostCode }
The syntax is a little different, but the concepts are the same. F# adds the keyword with
to 'copy and update' expressions, which translates easily back to C# fluent interfaces.
In a previous article, you saw how to refactor your domain model to a model of Value Objects with fluent interfaces.
In your unit tests, you can define natural default values for testing purposes:
public static class Natural { public static PostCode PostCode = new PostCode(); public static Address Address = new Address("", "", PostCode); public static InvoiceLine InvoiceLine = new InvoiceLine("", PoundsShillingsPence.Zero); public static Recipient Recipient = new Recipient("", Address); public static Invoice Invoice = new Invoice(Recipient, new InvoiceLine[0]); }
This static Natural
class is a test-specific container of 'good' default values. Notice how, once more, the Address
value uses the PostCode
value to fill in the PostCode
property of the default Address
value.
With these default test values, and the fluent interface of your domain model, you can easily build a test address in Paris:
var address = Natural.Address.WithCity("Paris");
Because Natural.Address
is an Address
object, you can use its WithCity
method to build a test address in Paris, and where all other constituent values remain the default values.
Likewise, you can create an address on Rue Morgue, but with a default post code:
var address = new Address("Rue Morgue", "Paris", Natural.PostCode);
Here, you can simply create a new Address
object, but with Natural.PostCode
as the post code value.
Using a fluent domain model obviates the need for Test Data Builders. There's a tendency among functional programmers to overbearingly state that design patterns are nothing but recipes to overcome deficiencies in particular programming languages or paradigms. If you believe such a claim, at least it ought to go both ways, but at the conclusion of this article series, I hope I've been able to demonstrate that this is true for the Test Data Builder pattern. You only need it for 'classic', mutable, object-oriented domain models.
With[...]
methods:
public class Invoice { public Recipient Recipient { get; } public IReadOnlyCollection<InvoiceLine> Lines { get; } public Invoice( Recipient recipient, IReadOnlyCollection<InvoiceLine> lines) { if (recipient == null) throw new ArgumentNullException(nameof(recipient)); if (lines == null) throw new ArgumentNullException(nameof(lines)); this.Recipient = recipient; this.Lines = lines; } public Invoice WithRecipient(Recipient newRecipient) { return new Invoice(newRecipient, this.Lines); } public Invoice WithLines(IReadOnlyCollection<InvoiceLine> newLines) { return new Invoice(this.Recipient, newLines); } public override bool Equals(object obj) { var other = obj as Invoice; if (other == null) return base.Equals(obj); return object.Equals(this.Recipient, other.Recipient) && Enumerable.SequenceEqual( this.Lines.OrderBy(l => l.Name), other.Lines.OrderBy(l => l.Name)); } public override int GetHashCode() { return this.Recipient.GetHashCode() ^ this.Lines.GetHashCode(); } }
That may seem like quite a maintenance burden (and it is), but consider that it has the same degree of complexity and overhead as defining a Test Data Builder for each domain object. At least, by putting this extra code in your domain model, you make all of that API (all the With[...]
methods, and the structural equality) available to other production code. In my experience, that's a better return of investment than isolating such useful features only to test code.
Still, once you've tried using a language like F# or Haskell, where 'copy and update' expressions come with the language, you realise how much redundant code you're writing in C# or Java. The Test Data Builder design pattern truly is a recipe that addresses deficiencies in particular languages.
Comments
Leveraging extension methods to implement 'With' API is relatively straightforward and you have both developper friendly API and a great separation of concern namely definition and usage.
If you choose to implement extensions in another assembly you could manage who have access to it: unit test only, another assembly, whole project.
You can split API according to context/user too. It can also be useful to enforce some guidelines.
I have some ugly POC code in my branch Roslyn builder generator - it is only a starting point but I think it has some potential.
Dominik, thank you for writing. I admit that I haven't given this much thought, but it strikes me as one of those 'interesting problems' that programmers are keen to solve. It looks to me like a bit of a red herring, as I tend to be sceptical of schemes to generate code. What problem does it address? That one has to type? That's rarely the bottleneck in software development.
Granted, it gets tedious to manually add all those
With[...]
methods, but there's a lot of things about C# that's tedious. There's a reason I prefer F# instead.Thanks for respond - I think that for each comment you now have 1+ blog post to respond ;). Despite the fact that I should consider learning new language like F# to open my mind I will focus on c# aspect.
I understand your consideration about code generation but I thing that when we repeat some actions over and over we automatically think about some automations - this is the source of computers I think. Currently I'm working in project where we use Test Builder Pattern heavily and every time I think about writing another builder my motivation is decreasing because psychologically is not interesting anymore and I would be happy to give that to someone else or machine.
When I started to understand what is Roslyn and what it can do it just open my eyes to new opportunities. Generating some simple but frequently repeating code give me more time on focusing on real domain problems and keep my frustration level on low position :)
Of course this is not BIG problem solver but only new approach for simplification of daily tasks - another advantage is that Roslyn I creating normal c# code file that can be navigated from code, can be seen in debugger (in contrast to IL injectors), so there is no magical black boxes. Disadvantage is that currently generating code is very simple - it involves some external nugets and I feel that writing generator in Roslyn could be simplified;
ps. Commenting via pull request is interesting experience - feels like pro ;)
Dominik, while it isn't based on Roslyn, are you aware of AutoFixture?
Yes, I discovered this tool together with your blog ;) I think it is good enough - Roslyn approach is only alternative not basing on reflection or IL injection.
I will try to use AutoFixture in next project so I will see it will survive my requirements.


Do you believe in Santa Claus? You will start believing in him when you visit Capture The Magic. It is a website that will place Santa Claus in your home. If you have little children, grand kids, nieces, nephews, neighbors kids whoever, if they want to believe in Santa Claus or are super excited about Noel, you can create even more excitement for them…and here is how: You can have evidence of Santa Claus visiting their home on Christmas Eve! Wow isn’t that exhilarating! Visit capturethemagic.com and see for yourself. Use our discount coupons for a great low price.
Seeing is believing! Create “proof” of Santa’s magical visit to your home. He may not fit into the chimney, but he sure will be seen smiling in your family room, by the fireplace or wherever you want him placed. It is real is real simple to make Santa visit.  Just visit capturethemagic.com and find out. All you have to do is follow three simple steps. First download photos of the room you want Santa to visit on Christmas Eve. You can take a picture of the room with all its Christmas decoration. Next step is to choose the Santa Claus you like from hundreds of available ones. And the final step is simply, merge and download instantly. You will have Santa visiting your home!
Capture The Magic will help you create a wonderful magical moment inside your home, when your children will wake up Christmas morning and find that Santa Claus actually visited their home. There will be photographic evidence of Santa Claus actually visiting the inside of your home. Visit capturethemagic.com and see for yourself. Your children, grandchildren will love it!


Write End-to-End tests in Node.js and run against a WebDriver server.
{% highlight shell %} $ npm i -g macaca-cli # Install Command Line Tools $ macaca run # Run. That's All {% endhighlight %}Both Mobile, Desktop Platforms Supported
Native, Hybrid and Mobile Web, Multi-applications Supported
Test case dev and debug become more easier
Privately deployed continuous integration service


Building on the work of giants
Each lesson is available in the source repository for the workshop via the link below, but is also available in your repository if you forked the workshop. The links to running solutions reference the solution inside the repo where this page is hosted, either in the source or in your forked version, this way the link to the running solution under "Your Workspace" will reference the files that you will be updating throughout the workshop
All of your changes can be seen here
Basic OpenLayers Map
Introduction into web APIs and the Mapzen API in particular
Map with a search component for the starting location
Map with a search component for starting and desitnation locations
Use the start and destinations to get a route from the API
Decode the route and turn it into a layer on the map
Give the user a list of directions along with the map
Add icons based on the maneuver type to the directions list
Add changes to the map when a user hovers over or clicks a maneuver in the list
Allow the user to reverse geocode locations instead of just searching for them and display a trip summary with the directions


College Board
Course Description
Why this course?
“To appeal to a broader audience, including those often underrepresented in computing, this course highlights the relevance of computer science by emphasizing the vital impact advances in computing have on people and society. By focusing the course beyond the study of machines and systems, students also have the opportunity to investigate the innovations in other fields that computing has made possible and examine the ethical implications of new computing technologies.” -CollegeBoard
What is this course?
“The AP Computer Science Principles course is designed to be equivalent to a first- semester introductory college computing course. In this course, students will develop computational thinking skills vital for success across all disciplines, such as using computational tools to analyze and study data and working with large data sets to analyze, visualize, and draw conclusions from trends. The course is unique in its focus on fostering student creativity. Students are encouraged to apply creative processes when developing computational artifacts and to think creatively while using computer software and other technology to explore questions that interest them. They will also develop effective communication and collaboration skills, working individually and collaboratively to solve problems, and discussing and writing about the importance of these problems and the impacts to their community, society, and the world.” -CollegeBoard
The College Board is a mission-drive not-for-profit organization that connects students to college success and opportunity. Founded in 1900, the College Board was created to expand access to higher education.


Toggle navigation
aaa
Home
applications
{% if user != "AnonymousUser" %}
welcome,
{{ user }}
修改密码
退出登录
{% else %}
sign up
log in
{% endif %}


BHServiceManager Class Reference
| Inherits from | NSObject |
|---|---|
| Declared in | BHServiceManager.h |
Overview
Created by BeeHive. Copyright © 2016, Alibaba, Inc. All rights reserved.
This source code is licensed under the GNU GENERAL PUBLIC LICENSE. For the full copyright and license information,please view the LICENSE file in the root directory of this source tree.
– createService:withServiceName:
- (id)createService:(Protocol *)service withServiceName:(NSString *)serviceName
– createService:withServiceName:shouldCache:
- (id)createService:(Protocol *)service withServiceName:(NSString *)serviceName shouldCache:(BOOL)shouldCache
– getServiceInstanceFromServiceName:
- (id)getServiceInstanceFromServiceName:(NSString *)serviceName


We propose multi-code GAN prior (mGANprior) to incorporate the well-trained GANs as effective prior to a variety of image processing tasks. In particular, we employ multiple latent codes to invert a fixed GAN model, and then
introduce adaptive channel importance to compose the features maps from these codes at some intermediate layer of
the generator. The resulting high-fidelity image reconstruction enables the trained GAN models as prior to many real-world applications, such as image colorization, super-resolution, image inpainting, and semantic manipulation.
Results
Various image processing tasks with mGANprior.
Bibtex
@inproceedings{gu2020mganprior,
title = {Image Processing Using Multi-Code GAN Prior},
author = {Gu, Jinjin and Shen, Yujun and Zhou, Bolei},
booktitle = {CVPR},
year = {2020}
}


{% extends "base.html" %} {% block content %}
Please enter your e-mail or phone. Your password will be reset and you will get a chance to choose a new password.
Don't have an account? -- Sign up


Lets Play
RULES:
Ping Pong will count up to your number from 1 with the following rules
- Numbers divisible by 3 are replaced with "ping"
- Numbers divisible by 5 are replaced with "pong"
- Numbers divisible by 15 are replaced with "pingpong"
Kevin Jared
KevinJared
Java
Ping Pong will count up to your number from 1 with the following rules


Duck Athletic Fund Thank You
Designed an updated Thank You card to be mailed out to DAF donors in effort to show appreciation and share information regarding student-athlete acheivements.
Project Details
- Assigned by Holly Santos - Assistant Athletic Director, Duck Athletic Fund
- Created with Photoshop CC
- Mailed out to all Duck Athletic Fund donors
Back to portfolio


 You didn’t think they would let you on the boat for free, did you? But there’s a problem: strange city and no google maps. So what do you do? At every intersection, you turn toward whichever road leads west. If you’re heading west and the road curves to the right too far, you just turn left at the next intersection. If that road curves to the left too far, you turn right. This is an algorithm, and algorithms like this might save your life.
Barring that, you’ll need to know algorithms because designing the wrong one will probably mean your code will be slow crazy. They’re also commonly referenced in engineering job interviews, and if you don’t pass that then you won’t get the job. If you’re comfortable with both of these, you can skip this course.
Which companies use algorithms? The top most companies using algorithms are:
Apprentices will be able to:
An algorithm is kind of like the second half of a cooking recipe. The first half lists the ingredients, and the second half will list what to do with them. Algorithms are a set of procedures. There isn’t always a “correct” algorithm; your algorithm choice depends a little on the context of the question.
Let’s say you’re making a sandwich. You might start with two slices of bread, take a knife and dip it in peanut butter and paint one slice with that. Then you clean your knife, then dip it in jelly, then paint the other slice. Then you clean your knife again, and put it away. Now you put the bread together and enjoy. It took you 30 seconds.
But what if you’re making 10 sandwiches for you and your best friends? You could do the above 10 times, but you’ll find yourself cleaning your knife a lot and it would take you 5 minutes (30 seconds * 10), so instead you put out 20 slices of bread, paint half of them with peanut butter, then clean your knife, then paint the other half with jelly. Then you clean your knife and put it away. Then you put all the breads together and enjoy, and you find it took you half the time of 2 minutes 30 seconds! So efficient, and your friends are all impressed.
That might make sense, but maybe you live in a tiny San Francisco apartment and you only have a small amount of space to work with. The second solution made sense given infinite prep space, but now the constraints of the problem have changed, and you actually do have to do the first method 10 times. It still takes 5 minutes, life is suffering but you work with what you got.
You can expect to find these sort of changing constraints in software engineering as well. Perhaps the preparation space size is like the memory you have on your computer.  You can fit a day’s worth of transactions in memory, so you read that in and sum up all of them. Then you read the next day’s, and add that to the sum. Then you read the next, and eventually you have the sum for the entire year.
You start a sandwich business, and need to make n=100 sandwiches. That takes 25 minutes. Then business gets big and it takes you 250 minutes.
n=10 t=2.5
n=100 t=25
n=1000 t=250
It’s almost like each sandwich takes a constant amount of time to make, following the formula
sandwiches = time_in_minutes / 4
When graphed, this looks like a linear line. In computer science, we have a notation for something that takes linear-time, and call it Big-O notation. It looks like this:
O(n)
Let’s say you have a magic genie who will grant you any wish.  Only deal is you have to type out how many sandwiches you want on a calculator, and you can only press a button on the calculator once every minute. So you start out… you press “100”… you’re about to get nearly 100 sandwiches, but it took you 3 minutes to press that. One minute later “1000”… One minute later “10000”… every minute that goes by you get 10 times as many sandwiches. It’s like your sandwiches are increasing exponentially. In Big-O it looks like this:
O(n^10)
Typically you will usually see O(n^2) because computers tend to do things in binary, and because if
statements tend to make binary choices of “do this or do that”.
So now the genie gets annoyed. He’s like just say what you want, nevermind the calculator. So you say “I would like ten billion sandwiches”. You get it. Cool, you solved world hunger. You could have said any number, and it takes just as much time. We call this “constant time”, and you’ll see this referred to as
O(1)
The “1” here could be 20, or 50. It’s still 1, because there are no units and no scale.
There is always a best algorithm for any problem
Not true! With any algorithm there are tradeoffs. Maybe one algorithm can sum up all of the numbers in a table in 4 minutes, but it always takes 4 minutes no matter if there are 10 rows or 10,000 rows. Another algorithm might take 2 seconds to run per row, which is great when you have 10 rows, but when you have 10,000 and you’ve been waiting 5 hours for your query to come back and it’s Friday night and your friends are all out having fun, you might wish it had finished in 4 minutes.  Life is full of choices.
Split into pairs, and have paper and a pen or pencil ready. If someone gave you a page number, write step-by-step literal directions for how you would find that page in a book. Would your directions still work with a different page number?
On your own, write step-by-step literal directions for how to find wifi for your laptop in a new building. What would you do if your first options failed? What would be the next step if they all failed?


Memory 101
1 January 2015
Let's think of a scenario real quick. You are going on a road trip to Florida. You throw all of your stuff in a suitcase and put it in the back of the car.   That seems like a slow process.  It would be much faster to get something right next to you then to go all the way to the trunk of the car. You know that. That's why most people do something similar to this.
In this example, consider yourself as the processor, or CPU. When you want to get something, you have to go to where it is stored. The suitcase would be like the hard drive- it holds all of the information. If you had to go to the suitcase everytime you wanted something, that would take forever (and you would probably never make it to Florida). By adding another bag in the front seat (memory), you can quickly grab the things you need right away. So memory is awesome. It allows our computers to quickly retreive information.
This example is a little basic and isn't really exact, but it helps you get the idea. Let's dig in just a little bit deeper.
So far, we understand that memory is a place that stores data that is used by the processor, but there are different types of memory. Think about your own memory- there are things that you need to remember permanantly like your name, and some things that only need to be in your memory temporarily such as the time for a friend's party. When the dinner party is over, you don't really need to know that time anymore. You would probably just erase it from your memory and store something else.
Much like this example, computers have permanant and temporary storage solutions.
Random Access Memory is a temporary storage location. Most RAM is volitile, meaning that it only stores infomation when the computer has power.
 ROM stores information vital to the computer booting up, including BIOS settings, start-up programs and system software.
There is obviously a lot more to computer memory than I have explained here, but hopefully this has been a helpful beginner session to memory.


Recipe 16.12. Binding Main Script and Modules into One Executable on UnixCredit: Joerg Raedler ProblemYou have a Python application composed of a main script and some additional modules. You want to bind the script and modules into one executable file, so that no installation procedure is necessary. SolutionPrepare the following mixed sh/Python script and save it as file zipheader.unix: #!/bin/sh PYTHON=$(which python 2>/dev/null) if [ x ! -x "x$PYTHON" ] ; then echo "python executable not found - cannot continue!" exit 1 fi exec $PYTHON - $0 $@ << END_OF_PYTHON_CODE import sys version = sys.version_info[:2] if version < (2, 3): print 'Sorry, need Python 2.3 or better; %s.%s is too old!' % version sys.path.insert(0, sys.argv[1]) del sys.argv[0:2] import main main.main( ) END_OF_PYTHON_CODE Make sure you have the Python bytecode files for the main script of your application (file main.pyc, containing a function named main, which starts the application when called without arguments) and any additional modules your application needs (e.g., files spam.pyc and eggs.pyc). Make a zip file out of them all: $ zip myapp.zip main.pyc spam.pyc eggs.pyc (If you prefer, you can build the zip file with an auxiliary Python program, of course.) Next, concatenate the "header" and the zip file, and make the resulting file executable: $ cat zipheader.unix myapp.zip > myapp $ chmod +x myapp That's all! Your application is now contained in this executable file myapp. When myapp runs, the shell /bin/sh sets things up and replaces itself with the Python interpreter. The Python interpreter reopens the file as a zip file, skipping the "header" text, and finds all needed modules in the zip file itself. DiscussionOn Windows machines, you would normally use py2exe for similar tasks, as shown previously in Recipe 16.11; on Mac OS X, you would normally use py2app (although this recipe works just as well on Mac OS X as it does on any other Unix). This recipe is particularly useful for Linux and other Unix variants that come with Python installed. By following the steps outlined in this recipe's Solution, you can distribute a Python application as a single, self-contained standalone executable file, which runs on any version of Unix, on any hardware platformas long as your Python application does not need any C-coded extension modules beyond the ones that come with Python itself. When you do need more, you can use Python's own distutil package to perform more complicated packaging tasks. But for many simple Python applications and quite a few that aren't all that simple, this recipe can be very useful, since it results in a file that can just be run as is, without needing any kind of "installation" step! The key idea of this recipe is to exploit Python's ability to import modules from a zip file, while skipping leading text that may precede the zip file itself. Here, as leading text, we use a small shell script that turns itself into a Python script, and within the same file continues with the zip file from which everything gets imported. The concept of importing from a zip file is described in Recipe 2.9. In the zip file, you may, if you wish, place Python source files (with extension .py), as well as compiled bytecode files (with extension .pyc); the latter option is often preferable because if you zip up source files, Python compiles them every time you run the application, slowing your application's startup. On the other hand, if you zip up compiled bytecode files, your application may be unable to run with versions of Python that are newer than the one you used to prepare the bytecode files, since binary compatibility of bytecode files is not guaranteed across Python releases. The best approach may be to place both sources and bytecodes in the zip file. You may also choose to zip up optimized bytecode files (with extension .pyo)if you do so, you need to add the flag -O right after the $PYTHON in the shell script in this recipe's Solution. Execution speed doesn't generally change much, but optimized execution skips assert statements, which may be important to you. Also, if you prepare the .pyo files by running Python with option -OO, all docstrings are eliminated, which may slightly reduce your application's size on disk (although docstrings tend to compress well, so that size advantage may be minor). If you need help in finding all the modules that you need to place in the zip file, see the modulefinder module in the Python Standard Library. Unfortunately, no real documentation about it is available at the time of this writing, but just running (in version 2.3) something like: $ python /usr/lib/python2.3/modulefinder.py main.py should help (you may have to change the change the path to the modulefinder.py script, depending on your Python installation). With Python 2.4, you can just use the handy new -m switch: $ python -mmodulefinder main.py Python 2.4's -m switch lets you run as the main script any module that's on Python's sys.patha very convenient little feature! See AlsoRecipe 16.11; Recipe 2.9; the sources of modules modulefinder and zipimport (which are not yet documented in the Library Reference at the time of writing). |


1/4 lb crab legs
1/2 cup snow peas
1/2 tsp lemon juice
1 scallion, chopped
1 tsp sake
Salt and sugar to taste
1 tsp tobiko (optional)
Lemon zest, to taste (optional)
GARNISH
Thinly sliced scallions (optional)
We only discovered this dish a few years ago. It is a popular item at traditional izakayas (Japanese pubs), and if you order it in Japan, they will look at you in slight surprise.
Slice the shiso and negi into fine slivers. Line individual shallow bowls with one shiso leaf, and top with the natto. Top with one package of ika somen (squid sashimi sliced into thin noodle like pieces), divided into equal portions. Top with shiso and negi, and one quail egg. Place a dab of karashi (hot mustard) on the side of each bowl.
Serve with soy sauce. Each diner will mix the ika natto with soy sauce to taste. This recipe makes 2 large servings, 3 medium or 4 small servings
Vacations
You can also use maguro (tuna) instead of ika
Serves 8-12


WebService
@objc
public protocol WebService
WebService is a protocol which helps you write your network requests in a declarative, type-safe and expressive way.
You start by creating a class, putting in your server’s base URL & a network interface, and begin writing your network requests as functions
-
The Base URL of the server. Needs to have a
scheme (http/https)
, and a URL.Example: https://example.com
A trailing forward slash in not required at the end of the URL.
Declaration
Swift
static var serverURL: String { get set }
-
The network interface this WebService will use to communicate with the network.
This is usually a class conforming to the
WebServiceNetworkInterface
protocol, holding an instance ofSwifty
with your customInterceptors
andConstraints
.Declaration
Swift
static var networkInterface: WebServiceNetworkInterface { get set }
-
server
Extension methodA BaseResource created from the server URL of the WebService
Use this as the starting point while creating requests in your WebService.
Declaration
Swift
public static var server: BaseResource { get }
-
customResource(with:)
Extension methodCan be used to have a custom base URL for a request, instead of the using the WebService’s Server URL
Declaration
Swift
public static func customResource(with baseURL: String) -> BaseResource
Parameters
baseURL
String
Return Value
BaseResource


pingus (6) User Commands pingus (6) NAME pingus - A puzzle game where you have to save penguins SYNOPSIS pingus [OPTION]... [FILE] DESCRIPTION Pingus is a side-scrolling puzzle game where the player has to guide a group of penguins from the entrance of a level to the exit, in between the path is blocked by numerous obstacles and dangers that the player has to overcome by assigning actions to the penguins. OPTIONS GENERAL OPTIONS -h, --help Displays this help -V, --version Print version number and exit -v, --verbose Enable info level log output -D, --debug Enable debug level log output -Q, --quiet Disable all log output DISPLAY OPTIONS -w, --window Start in Window Mode -f, --fullscreen Start in Fullscreen -r, --renderer=RENDERER Use the given renderer, defaults to sdl. Available renderers are: sdl A simple software renderer based on SDL, this is the de‐ fault and the safest options. opengl The OpenGL renderer will use hardware acceleration to ren‐ der the graphics, it is much faster then the SDL renderer and recommended when the hardware supports OpenGL. delta The delta renderer uses SDL for rendering and doesn't use hardware acceleration, it will however try to increase ren‐ dering performance by only re rendering screen elements that have changed. Using the delta renderer will disable some effects such as scrolling background to allow maximum benefits. -g, --geometry=WIDTHxHEIGHT Set the window resolution for pingus (default: 800x600). Note that --geometry only applies to the window resolution, for the fullscreen resolution use --fullscreen-resolution -R, --fullscreen-resolution=WIDTHxHEIGHT Set the resolution used in fullscreen mode (default: 800x600) --software-cursor Enable software cursor GAME OPTIONS --no-auto-scrolling Disable automatic scrolling. Automatic scrolling will cause the screen to scroll whenever the mouse reaches the border of the screen. Automatic scrolling will only be active in fullscreen mode or when mouse-grab is enabled. --drag-drop-scrolling Enable drag'n drop scrolling. By default Pingus will use a rubber- band scrolling where the scroll speed depends on how far away the cursor is from the position when the mouse button has been clicked. In drag&drop mode scrolling will behave more like in tra‐ ditional GUI applications such as Gimp, where clicking the scroll button will 'pick up' the playfield and allow to move it around till it is released again. SOUND OPTIONS -s, --disable-sound Disable sound -m, --disable-music Disable music LANGUAGE OPTIONS -l, --language=LANG Select language to use with Pingus --list-languages List all available languages EDITOR OPTIONS -e, --editor Loads the level editor DIRECTORY OPTIONS -d, --datadir=DIR Load game datafiles from DIR -u, --userdir=DIR Load config files and store savegames in DIR -a, --addon=DIR Load game modifications from DIR. Files in DIR will be used in‐ stead of the files in found in the main datadir of Pingus, thus allowing to modifications, such as sprites replacements, addition‐ al levels, etc. to the game, without changing the main data files. --no-cfg-file Don't read ~/.pingus/config -c, --config=FILE Read config from FILE --controller=FILE Uses the controller given in FILE DEBUG OPTIONS --developer-mode Enables some special features for developers -t, --speed=SPEED Set the game speed (0=fastest, >0=slower) -k, --fps=FPS Set the desired game framerate (frames per second) --tile-size=INT Set the size of the map tiles (default: 32) KEYBOARD SHORTCUTS GAMEPLAY All gameplay related keyboard shortcuts are configurable via a controller config file, see --controller and controller/default.scm. W, A, S, D Scroll in the level Space Hold to ast-forward P, R Pause the game. S, F Advance the game by a single frame. Backspace Activate armageddon. Escape Leave the current screen/level. ENGINE F10 Show/hide the FPS counter. AltReturn, F11 Switch to fullscreen/window mode. Ctrlg Toggle mouse grab, when active, the mouse can not leave the win‐ dow. Ctrlo, F5 Show the option menu. F12 Make a screenshot. Screenshots are stored in ~/.pingus/screen‐ shots/. Ctrlm Toggle the developer mode, see --developer-mode c (only in developer-mode) Show the collision map overlayed over the regular groundmap. k (only in developer-mode) Clear the screen for delta mode debugging. ACTIONS Basher The Basher will to a horizontal dig, leaving behind it a tunnel. It is not able to dig through metal. Blocker The Blocker will stop and stay in position, directing other pen‐ guins to turn around when they reach him. Bomber The Bomber will blow up on the spot and take a bit of surrounding ground with it. Bridger The Bridger will build a small bridge, useful for crossing small chasm. Climber The Climber actions allows a Pingu to travel upwards a vertical wall. Unlike other actions the climber action is a permanent addi‐ tion to the Pingus ability. Digger The Digger will dig a hole into the ground. It can't dig through metal. Floater The Floater action will give a penguin a small propeller that lets him gently glide down from great heights that would otherwise be deadly. Jumper The Jumper will let the Pingu do a big leap forward, allowing him to cross chasm and small vertical obstacles. Miner The Miner will dig a diagonal hole into the ground. Slider The Slider will make a tiny leap forward, gliding on its belly for a short while, allowing the Pingu to make it through narrow tun‐ nels. LEVEL EDITOR Pingus comes with a build in level editor. The level editor can currently be used to edit level files (*.pingus) as well as prefabricated objects (*.prefabs). Worldmaps (*.worldmap) can currently not be edited with the editor. All Pingus data files, except the sound and images, are raw text files and can be edited in a text editor if the editor isn't sufficient. If you want to submit a level to be included in the next release follow the following naming convention: {theme}{number}-{nickname}.pingus Do not use space or uppercase in the levelname and keep the levelname simple (i.e. snow1-grumbel.pingus not pingus-go-on-a-long-jour‐ ney-in-snowland-grumbel.pingus). The filename should not reflect the ac‐ tual level title, it simply should be unique and not conflict with other peoples levels. If you plan on building a whole levelset, name the levels after the levelset. To submit a level send it to<EMAIL_ADDRESS>PREFABS A prefab, short for prefabricated object, is a group of objects that have been combined into a new single object. A classic case of a prefab would for example be a snowman, it is build out of multiple smaller snowball objects and then saved as prefab to allow easy reuse in multiple levels. Unlike simple object groups, prefab are saved as reference in the level, thus if the prefab is updated, all levels will see the change. Like ob‐ ject groups prefabs can be ungrouped to break them back down to individu‐ al objects if individual editing is needed, they are seizing to be pre‐ fabs at that point and changes to the .prefab file will no longer be re‐ flected in the level. Prefabs behave pretty much like regular levels, to create a prefab simply start a new level and insert the objects as usual, unlike regular levels the level size is ignored and thus you have to place your object around the center of the levels, marked by a cross, to have the prefab function properly. To save a prefab as prefab instead of level you have to append .prefab suffix to the filename. Thumbnail generation for prefabs is currently done offline with the script ./tools/generate-prefab-images.sh available from the Pingus source tree. UI QUIRCKS The Pingus level editor is best used with a combination of mouse and key‐ board, all essential functions have keyboard shortcuts. Unlike more traditional GUIs, the Pingus editor lacks scrollbars, so to move around the level or the object list on the right simply use the mid‐ dle or right mouse button and drag&drop the list around. Objects from the object list can be inserted into the level by drag&drop‐ ping them over to the level. KEYBOARD SHORTCUTS Delete, Backspace Delete all currently selected objects A Select or unselect all objects D Duplicate the currently selected objects I, K, J, L Move the current selection by one pixel, if Shift is held, move it by 32 pixel. PageUp, PageDown Raise or lower an object ShiftPageUp, ShiftPageDown Raise or lower an object to the top or bottom R, ShiftR Rotate an objects 90 degrees, if Shift is held rotate it the other way around F, ShiftV Flip an object horizontally V, ShiftF Flip an object vertically B, ShiftB Toggle the background color to make it easier to see small pixel errors. If shift is hold the color will be toggled in the opposite direction. +, =, - Increase/decrease the repeat value of selected objects, this will only have an effect on objects having an repeat value (switch‐ doors, liquids, ...). COPYRIGHT Copyright (C) 1998-2011 Ingo Ruhnke<EMAIL_ADDRESS>See the file AU‐ THORS for a complete list of contributors. Pingus comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions; see the file COPYING for details. SEE ALSO http://pingus.seul.org 0.7.5 21 October 2011 pingus (6)


| Name | {{restaurant.name}} |
|---|---|
| Description | {{restaurant.description}} |
| Address | {{restaurant.address.city}} - {{restaurant.address.zip}}, {{restaurant.address.street}} |
| Grade | {{restaurant.ratings | number:0}} |
| Food Quality | {{myGrade.foodQuality}} |
|---|---|
| Room Quality | {{myGrade.roomQuality}} |
| Service Quality | {{myGrade.serviceQuality}} |
| Average | {{myGrade.quality}} |


---
layout: post
title: More Klingon Programmers
post_id: 306
categories:
- odds & ends
date: 2004-02-09 06:34:00.000000000 -07:00
author: Jamis
permalink: 2004/2/9/more-klingon-programmers.html
---
Inspired by the original list of Klingon Programmers sayings, I hunted around the web and found a few more that are worth mentioning:
- C++? That is for children. A Klingon Warrior uses only machine code, keyed in on the front panel switches in raw binary.
- Klingon multitasking systems do not support “time-sharing”. When a Klingon program wants to run, it challenges the scheduler in hand-to-hand combat and owns the machine.
- Perhaps it IS a good day to die! I say we ship it!


|
bluecloud.extensions
1.0.2
|
Classes | |
| class | DbFieldAttribute |
| DbField Attribute used to annotate properties to be mapped to database fields. More... | |
| class | DbMapping |
| Db mapping. More... | |
| class | IDataReaderExtensions |
| Extension Methods for System.Data.IDataReader More... | |
| class | IDbCommandExtensions |
| Extension Methods for System.Data.IDbCommand More... | |
| class | IDbConnectionExtensions |
| Extension Methods for System.Data.IDbConnection More... | |
| interface | IDbHydrationOverridable |
| IDbHydrationOverridable used to customize property hydration. More... | |
| interface | IDbSerializationOverridable |
| IDbSerializationOverridable used to customize property database serialization. More... | |


here's an apostrophe & a quote "

here's an apostrophe & a quote "

here's an apostrophe & a quote "

here's an apostrophe & a quote "

here's an apostrophe & a quote "

here's an apostrophe & a quote "


About us
Know More About Our Company
Nulla integer volutpat, tellus facilisi sed nulla etiam dolor euismod orci malesuada sed lorem aliquam posuere erat dapibus tempor mi sagittis netus commodo, at egestas sit interdum sollicitudin.
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown.
High Quality
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's.
Professional Workers
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's.
Finish on time
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's.
Some Frequently Asked Questions
We have completed many projects
Learn More About Our Services
Magna semper neque, diam ultrices molestie praesent magna sed egestas malesuada ultrices.
Building Construction
Magna semper neque, diam ultrices molestie praesent magna sed egestas malesuada ultrices.
Renovation
Magna semper neque, diam ultrices molestie praesent magna sed egestas malesuada ultrices.


Home
About
Contact
Submit
Despacito (Song Cover by Sam Tsu) Live Love Party
Despacito (Song Cover by Sam Tsu) Live Love Party
Uploaded: 2 months ago
✚ Add
➦ Share
☰ More
❤ 5,234,567 views
Sad Boy of Love Town
2 months ago
Lorem ipsum dolor sit amet, consectetur adipiscing elit.

SUBMIT
All About that Base - Just Dance - Full Gameplay 5 Stars KINECT
Duration: 00:10:00
5,222,333 views
2 months ago
Just Dance 2018: Side to Side - 5 stars
Duration: 00:10:00
2,234,567 views
2 months ago
Twerk It Like Miley - The Fitness Marshall - Cardio Concert
Duration: 00:10:00
4,234,567 views
2 months ago
Despacito (Song Cover by Sam Tsu) Live Love Party
Duration: 00:10:00
5,234,567 views
2 months ago
Just Dance 4 - Run The Show (Extreme Version)
Duration: 00:10:00
12,234,567 views
2 months ago
Havana | Live Love Party™ | Zumba®
Duration: 00:10:00
3,234,567 views
2 months ago


I am looking to buy a house
I am looking to rent a house
I'm curious show me house value
Home
Profile
Favorites
Search
Settings


--- layout: default root: "./.." ---
The code here do not have NASA seal of approval, that means that they might have bugs and work as you don't expect. The code is free for all mode, so grab it and do whatever you want with it.
Mikado is a sweet and nifty way of taking webapps to your desktop. It was made having in mind the mobile version of websites.
Usually this websites are carefully created trying to show the maximum information and functionality using the minimum space.
It allows you as well creating desktop applications using HTML5 technologies. Stop messing with complicated GUI toolkits and start using your well known HTML5 + CSS + Javascript tech.
You can dock your app in the menu / taskbar of your operating system, run it as a window application or create an overlay on top of your desktop.
daFlow lets you code html / javascript / css with your preferred editor and see the results in any browser just pressing save!
lalala
It allows you as well creating desktop applications using HTML5 technologies. Stop messing with complicated GUI toolkits and start using your well known HTML5 + CSS + Javascript tech.
You can dock your app in the menu / taskbar of your operating system, run it as a window application or create an overlay on top of your desktop.
Software that helps controlling and creating new applications for the XIM room in the UPF University of Barcelona.
When creating Olebot, I developed a couple of handy modules for IQR, the first an UDP module that allows to communicate group of neurons from the exterior and the second, a module that load txt files as the states of the group of neurons.
Be careful since both modules are in "one-night-hack" mode since I created them to fit an specific purpose.


We enhance infrastructure!
- synergize vertical experiences
- matrix leading-edge infomediaries
- synthesize innovative systems
- embrace next-generation users
- syndicate next-generation action-items
- syndicate extensible portals
- maximize integrated initiatives
- reintermediate intuitive methodologies
- reintermediate bricks-and-clicks web-readiness
- integrate back-end portals
- iterate user-centric supply-chains
- enhance distributed e-markets
- productize transparent supply-chains
- streamline vertical experiences


Head back over to Items and switch on some items that you need.


Beautify
Products
Foundation
Eye Makeup
Lips
Blog
(current)
Contact
(current)
0
My Cart
×
Makeup1
(1)
15.00
Makeup2
(1)
15.00
Makeup3
(1)
15.00
Total price: $
45
Contact Us
Email address
Looks Good!
Please Input Email Address.

Send your Message


Last updated 2015-12-30.
Kartalla displays in real-time the location of public transport vehicles in Helsinki region based on the route and timetable information published by HSL as open data. The displayed location is not based on measured location (like for example GPS position) and therefore it may and is even likely to differ from the actual location.
The location is presented as an icon colored based on the type of the vehicle (bus, train, tram, metro or ferry). The visibility of the icons by type can be controlled by the buttons below the map. The form of the icon is a circle for one minute before the departure time and one minute after the arrival time. In between the form of the icon is an array pointing into the direction the vehicle is moving to. Information like in the following example is shown when pointer is moved over an icon.
Here are some maps displaying the location of public transport vehicles based on measured location.
Kartalla consists of two parts: gtfs2json and browser based graphical user interface. The former formats the route and timetable data published by HSL in GTFS format into compressed format more suitable for the latter to use. The source code of both parts is available at GitHub.
gtfs2json compresses GTFS files (calendar.txt, calendar_dates.txt, routes.txt, shapes.txt, stop_times.txt, stops.txt, trips.txt) into one JSON file. The size of GTFS files is about 600 megabytes (60 megabytes in ZIP format) and the size of the JSON file is about 3 megabytes. The high compression ration is achieved by skipping irrelevant parts in GTFS files and encoding the relevant parts in less verbose form. gtfs2json is implemented in Python programming language (version 2.7).
The browser based user interface downloads from a web server the JSON file created by gtfs2json. It then displays the locations of the public transport vehicles as icons on a map using Google Maps JavaScript API. The JSON file is downloaded as a compressed file if the browser supports HTTP compression. In that case size of the downloaded file is about 0.5 megabytes. After the JSON file has been downloaded no more data is downloaded except maybe more map data from Google's servers. The user interface is implemented in JavaScript programming language and it utilizes HTML and CSS technologies.
Information like in the following example is shown when pointer is moved over the * symbol in the Data section below the map.
The user interface can be controlled with the following URL parameters.
Following are examples of the usage of the parameters.
Panu Ranta, panu.ranta@iki.fi


Miki, Takahiro, et al. "Learning robust perceptive locomotion for quadrupedal robots in the wild." Science Robotics (2022)
Rudin, Nikita, et al. "Learning to walk in minutes using massively parallel deep reinforcement learning." CoRL. PMLR, 2022.
Credits: Nathan Lambert (@natolambert)
Raffin, Antonin, Jens Kober, and Freek Stulp. "Smooth exploration for robotic reinforcement learning." CoRL. PMLR, 2022.
Raffin, Antonin, Jens Kober, and Freek Stulp. "Smooth exploration for robotic reinforcement learning." CoRL. PMLR, 2022.
Smith, Laura, Ilya Kostrikov, and Sergey Levine. "A Walk in the Park: Learning to Walk in 20 Minutes With Model-Free Reinforcement Learning." arXiv preprint (2022).
Raffin, Antonin, Jens Kober, and Freek Stulp. "Smooth exploration for robotic reinforcement learning." CoRL. PMLR, 2022.
Raffin et al. "Learning to Exploit Elastic Actuators for Quadruped Locomotion" In preparation ICRA, 2023.
Coupled oscillator
Desired foot position
closing the loop with RL
Additional References
RLVS: RL in practice: tips & tricks
ICRA Tutorial: Tools for Robotic Reinforcement Learning
References: generalized State-Dependent Exploration (gSDE), CAPS


Input text
Disbaled Input text
Input radio
Input checkbox
Select list Volvo Saab Fiat Audi
Textarea The cat was playing in the garden.


Simply download all three files and unzip in a same folder.
Then, input the code in your terminal:
$ cd {PATH OF YOUR FOLDER}
$ python entertainment_center.py
For example:
$ cd /Users/Admin/Movie Website
$ python entertainment_center.py
You should see the website contains the movies in the opened browser window.
media.py
: Contains the definition of the Movie
class.
fresh_tomatoes.py
: contains the open_movies_page()
function take the list of the instances of the Movie
class as arguments and generate the HTML file based on the content of the instances.
entertainmnet_center.py
: The main source file which create the instances and put them in a list. Then, it call the open_movies_page() function to generate the HTML file.
fresh_tomatoes.html
: The HTML file generated by the source code, which will be displayed by browser. (Not necessary for the program running)
MIT
Yunfan Niu


PERSUASION A film review by Christopher Null Copyright 1995 Christopher Null
Whew! Sitting through 112 minutes of PERSUASION is a true exercise in persistence. Full of performances that could have been done better by hand puppets, sloppy direction, and a script that's nearly impossible to follow, PERSUASION has very little to redeem it.
Pay close attention: the story follows Anne Elliot (Amanda Root), a prim and proper twenty-seven-year old in 1814 England. Having once turned down a proposal from Frederick Wentworth (Ciaran Hinds), he has turned back up to try again. Also in the picture are Anne's younger sister Mary (Sophie Thompson), her husband (Simon Russell Beale), and his sisters (Emma Roberts and Victoria Hamilton), both of whom Wentworth chases after. Not to mention Anne's cousin William (Samuel West), who also chases after Anne in the hopes of getting his fingers on her father's estate. The story is based on the Jane Austen novel, and as you hopefully can tell by this rousing description, it's about as exciting as...a Jane Austen novel.
To keep track of these totally bland and uninteresting blokes, the producers were kind enough to throw in a handy genealogical chart to help keep track of no fewer than 15 major characters. Unfortunately, you won't get one of these with your ticket, so you'll likely be staring up at the screen in total confusion. Even more unhelpful is the costuming, of which two basic varieties are used: male and female. And I've never seen so much *brown* in my life.
Some fun costumes might have helped ease the pain of sitting through PERSUASION, considering that all these dull people do is talk and eat. Amanda Root is being trumpeted by the producers as the next Emma Thompson. I don't think so, seeing how she spends the entire film just gawking at things like a wide-eyed Chihuahua and then whining about them. Oh, and don't expect any grandiose Merchant-Ivory style landscapes or ballrooms. Instead, to break up the monotony of the cramped sitting room settings, director Roger Michell opted for totally inappropriate MTV-style moving camerawork to capture the sheer nothing that is going on.
I hope this is enough to dissuade you from bothering with PERSUASION. And I hope I'm not spoiling anything here, by giving away the movie's final line of dialogue: "Anne? Why would you want to marry Anne?" I'm still working on the answer to that one.
RATING: *1/2
\-------------------------------\ |* Unquestionably awful | |** Sub-par on many levels | |*** Average, hits and misses | |**** Good, memorable film | |***** Perfection | \-------------------------------\
-Christopher Null /<EMAIL_ADDRESS>-Movie Emporium (archives) / http://www.notes.tpoint.net/emporium/ -Contributing Editor, FEEDBACK / http://www.eden.com/~feedback -E-mail requests to join the movie review mailing list
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


Loosely based on the SEIR model, this very simple agent-based simulation looks at the spread of the common cold.
At time = 0, a certain % of people start with the cold. In each timestep, all contagious people cough and infect anyone directly adjacent to them with a certain probability.
| Susceptible | Not infected | |
| Exposed | Infected but not contagious | |
| Infectious | Infected and contagious | |
| Recovered | Immune |
You can change the simulation's behavior via parameters in this page's URL. Refer to the table below the grid for a description of the various parameters.
This quick prototype took around 6-7 hours. The incubation, infection, and immunity days are currently constant and same for everyone but will eventually be random variables.
| n | Number of People | Currently must be a square number |
| prev | prevalence | % of people initially infected w/ the disease. Individuals are randomly chosen |
| maxTime | # Timesteps | |
| beta | Force of Infection | Probability that someone infects another person when coughing |
| incubTime | Incubation Period | # of timesteps between being infected and becoming contagious |
| infectTime | Infectious Period | # timesteps spent being contagious |
| immuneTime | Immunity Period | # timesteps that a previously infected individual is immune to new infections |


Ruida Zeng - Contact Us
Dogs:
Cats:
What's your favorite color?
Red
Organe
Yellow
Go!
Image
Name
Type
Evolves Into
Bulbasaur
Grass/Poison
Ivysaur
Charmander
Fire
Charmeleon
Squirtle
Water
Wartortle
Back to Main Menu


{{> loginButtons}}
{{description}}
Created on: {{createdOn}}
Description: {{description}}
{{comment}}
By: {{username createdBy}}


Select your chart types
Pick a chart type. If you're mixing two or more chart types in the same chart (like a combined line and bar chart), select both.
This document is a work in progress. Questions and feedback are welcome! Please send comments to<EMAIL_ADDRESS>Pick a chart type. If you're mixing two or more chart types in the same chart (like a combined line and bar chart), select both.
A line chart shows changes and trends over a sequence of values in a series. Line charts (or line graphs or line plots) use a series of line segments to connect individual record points over a series of changes, usually over time, where the position of each record represents the value. These record points are often represented by a symbol, such as a circle or square, and each series of data should use a different symbol, as well as a different color, to distinguish it from other series lines.
In a horizontal line chart (the most common), each record point's numerical value is measured in its height (the y
axis), while its place in the sequence (e.g. the date or time) is shown in its horizontal position (the x
axis). Rarely, in a vertical line chart, the axes would be reversed; this is unconventional, and should be avoided.
Each record and line segment is ordered. For a time series, each line segment is ordered chronologically.
Multiple categories can be shown, with each data line in the chart representing the records in the series for that category. Too many lines can obscure the data (see "spaghetti charts").
TODO
For line charts with more than one line, placing the series label end of the line, or sometimes along the line, reduces the cognitive load in associating each line with its category. Using legends with keys, rather than direct labeling, separates the representation (the line) from its referent, forcing the user to remember the color or symbol, or to actively refer back to the legend.
TODO Show illustration of direct labeling vs. legends.
Each line must be distinguable and identifiable.
Color: One way to differentiate lines is for each line should use a different color in a discrete color palette (TODO). However, to aid people with low vision (TODO) and color vision deficiency (TODO), you cannot use color alone to distinguish between lines (cite 1.4.1: Use of Color).
Symbols: One way to differentiate lines in addition to color is to use a different symbol for each line, positioned at each data record point. Common symbols include circles, squares, triangles, diamonds, and crosses; these symbols can be filled or unfilled, or a combination to add more variety (cite study on effective use of symbols).
Option: Use finial symbols instead of direct labeling: When a legend is necessary, or when symbols at each data record cause visual clutter, you can consider using a single finial symbol at the end (or beginning) of each line.
Grayscale colors for print: .
Patterns for tactile print: .
TODO Show illustration of colors and symbols.
A spaghetti chart is a line chart containing many data lines displayed with equal emphasis. Line charts with 5 or fewer data lines (i.e. categories or series) are most likely to provide clear patterns or trends to the reader, with more than that creating clutter and obscuring trends.
Not only are spaghetti charts too visually complex, but they present a challenge to find enough distinct colors and symbols to distinguish one line from another.
TODO: Show illustration.
In data visualization, dashed lines are normally used categorically to indicate uncertainty, such as projected data, estimated data, or missing data, or to indicate a threshold or reference line. Using them to distinguish between different lines conflicts with this semantic convention.
In addition, they create visual clutter (see element interactivity (TODO), and more than 2 or 3 dashed patterns are difficult to distinguish or remember.
Avoid symbol patterns to differentiate lines: Similar to dash patterns,
TODO: Show illustration of proper and improper use of dash patterns.
No common variations.
A bar chart uses rectangular bars to show discrete, numerical comparisons across categories. The height (or length) of the bar indicated the numerical value. One axis of the chart shows the specific categories being compared (the independent variable), and the other axis represents a discrete value scale (the dependent variable).
In a vertical bar chart, also called a column chart, the categories are on the x-axis, and the value being measured is on the y-axis.
In a horizontal bar chart, the value being measured is on the x-axis, and the categories are on the y-axis.
A bar chart is one of the most common types of data visualization, since it is well-known and well-understood by readers, is easy to create and interpret, represents multiple ranges of data accurately, and uses space efficiently.
Bar charts can be used for single-series or multi-series datasets; for multiseries datasets, group each series as stacked bars or grouped bars.
When a bar chart is not being used for time-series trend data, it can aid ease of interpretation to order the bars by value, sorting either ascending or descending. Avoid sorting the order if a bar chart is used in a context where the implicit order is significant, such as when two charts are presented to compare with one another.
For bar charts with more than one bar, placing the series label end of the bar, or sometimes along the bar, reduces the cognitive load in associating each bar with its category. Using legends with keys, rather than direct labeling, separates the representation (the bar) from its referent, forcing the user to remember the color or symbol, or to actively refer back to the legend.
TODO: Show illustration of direct labeling vs. legends.
Labels should be clearly associated with their indicated bar. Bars should be placed relative to their axis labels, and value labels for the bar should be directly positioned with the bar (show diagrams with options).
Labels should be of sufficient size to be easily legible (quote WCAG here)
With a large number of bars, labels may be too small to read, may overlap each other, or may otherwise not be legible. If label space becomes an issue, consider using a horizontal bar chart, or use a smaller number of bars, either by aggregating data, splitting the chart into multiple bar charts, each with its own facet.
For screen reader users, a bar chart must include each value, in the same sequence as the visual rendering, labeled with the category and any group identifier. This can be done either with an accessible chart (possible with SVG) or an equivalent table.
For screen reader users and people with cognitive disabilities, a bar chart must include a summary,
This is for data with multiple series.
This is for data with multiple series.
A pie chart or donut chart uses proportional sectors (or "slices") of a circle to show proportions and percentages between categories. Each slice represents a category, with its proportion measured by its arc length, with the full circle representing the total sum of all catgories the data, which must total 100%.
A pie or donut chart is most effective for 2-3 slices, and should not have more than 5 or 6 slices. Very small slices should be aggregated into a single slice, labeled "other" or something similar.
A pie chart and a donut chart differ only visually. A pie chart uses triangular wedges that extend to the center of the circle, while a donut chart has slices that resemble curved bars with a "hole" in the middle of the circle (an interior radius). The hole in the middle of a donut chart is often used to display additional information.
Be aware that people are not as good at using area and angles to judge relative proportion as they are length or distance, so pie and donut charts, which rely on angles and area, are not as effective as linear charts like bar charts for accurate comparisons. Donut charts, because they rely more on arc length than area, may be more effective than pie charts.
Pie and donut charts use more space than some alternatives such percentage bar chart. However, they are well-known and easily interpreted, and their round shape is more distinct in a grid-based layout than a bar chart, so they are effective as centerpieces, especially when highlighting a single slice.
Donut charts may be easier to interpret than pie charts. Generally, a donut chart should be used instead of a pie chart. TODO: cite study
Pie or donut charts should normally have no more than 5 slices. A larger number of slices makes judging angles difficult, and reduces the ability to accurately compare values.
In addition, a large number of slices leads to label collision, making the chart harder to read.
For larger data sets, consider using a percentage bar chart instead.
For pie or donut charts, place the category label outside the slice and the value in the slice. This reduces the cognitive load in associating each line with its category. Using legends with keys, rather than direct labeling, separates the representation (the line) from its referent, forcing the user to remember the color or symbol, or to actively refer back to the legend.
For pie or donut charts, consider adding a label for both the value and the percentage. This emphasizes the proportional nature of each slice, and makes comparison tasks easier.
Pie or donut charts should be sorted from largest to smallest values. This helps the reader to quickly understand the relative values for slices with similar values. It also aids screen reader users, who will know better what to anticipate when loooking for data sequentially.
The exception to this guidance is when the order of the slices is naturally fixed, such as time-series data or alphabetically ordered, or referenced elsewhere, such as when comparing the change of values in two or more pie charts or when the pie chart is paired with another chart or table where the order is fixed.
Note that there are cases where multiple comparative pie or donut charts may not be ordered the same way, but instead are ordered with the largest slice first in both charts. In this case, other signals like the label and color should be used consistently.
Gauge charts can have many different shapes, including a flat bar, but the skueomorphic half-circle shape is the easiest to identify and often the most visually distinct, which is suitable for real-time updates of data where the user may need to monitor the changes. Having a distinct appearance is useful to draw the eye, especially when there is only a single gauge chart on a display or dashboard; having multiple gauge charts can reduce the ease of finding critical updates quickly, since the eye needs to scan multiple visually-similar items for differences to distinguish them.
Percentage bar charts use a
Also known as a 100% chart, 100% bar chart, or 100% stacked bar chart …
No significant variations.
Add accessibility checklist items here.
True accessiblity is not a checklist, but checklists are useful to help highlight the most important or easiest tasks you can do to help guide you in making accessibility data visualizations.
Here are the most important accessibility text description considerations:
Add general data considerations here.
- Keep the data simple: i.e. x, y and 1 set of values. Unless its a key learning point to process a lot of complex data then do not add more information or layers on top of this its too much for people to process and will confuse. If you need to convey more do it by breaking it down into other data formats. This means you may need two charts instead of one for example.
- As a rule of thumb 7-10 data elements at most are best. Break it down wherever you can and avoiding scrolling or losing headings off the screen.
- Try to ensure the information is displayed in different or additional ways to enable understanding wherever possible and appropriate (For example, data tables, or a written description of a graph or map, a couple of maps instead of one complex one.)
Text descriptions fall into three categories: alt text, long descriptions, and captions
All images should have alt text, that is, text that provides a brief, cogent summary of what the image displays. This is especially important for charts and diagrams.
At a minimum, the alt-text should contain:
In addition to alt text, for more complex charts or diagrams, a longer text description should be provided that describes each step or aspect of the visualization, and how it is connected to other steps or aspects
If possible, the data itself should be in a structure, such as SVG or HTML, that can be navigated and explored by screen reader users.
Ideally, the chart should also include another view of the data, such as a data table, or a link to download the data in a spreadsheet format (such as CSV or Excel).
Optionally, the chart should also include citations or sources for the data.
TODO: provide examples for alt text and summaries
TODO: add text description examples
Add line-chart text descriptions and summaries considerations here.
Add bar-chart text descriptions and summaries considerations here.
Add pie/donut chart text descriptions and summaries considerations here.
Add gauge text descriptions and summaries considerations here.
Add percentage chart text descriptions and summaries considerations here.
Add scatterplot text descriptions and summaries considerations here.
Add table text descriptions and summaries considerations here.
Add general color considerations here.
Here are the most important accessibility color considerations:
Color vision deficiency (CVD), also known as “color blindness”, requires special consideration in charts.
add more decription, examples, and solutions here.
Disabilities with color contrast are separate from CVD. Poor contrast affects many people with low vision, and often people with more normal vision.
add more decription, examples, and solutions here.
In data visualization, color is not only aesthetic, but is used in specific ways, based on what the visualization is conveying.
There are three primary types of color pallete, each serving a different purpose: discrete, sequential, and diverging. Discrete color palletes show categorical (or qualitative) data, while sequential and diverging color palletes show numerical (or quantitative) data.
Discrete color palletes have colors that are distinct from each other, and don't indicate a relationship between any two colors, to represent different items within a category, or different categories.
TODO: add on discrete color palletes
Sequential color palletes have colors that are different shades of the same hue, and progress from one color to the next, to represent different items that have ordered numerical values, such as performance metrics.
TODO: add on sequential color palletes
Diverging color palletes have colors that start with a common color in the middle with shades of different hues progressing to each opposite end, and indicate position within a polarity of numerical data.
TODO: add on diverging color palletes
TODO: describe difference and different uses of chromatic vs grayscale colors
add more decription, examples, and solutions here.
TODO: give advice on how to use red and green together
- Colour palette should 1-5 colours ideally, 10 at most if really needed eg for diverse map data. - A finite amount of colours consistently applied enables good colour recognition and decoding.
- Avoid fatiguing / intense colours and combinations and vibrating colours like red on blue, bright pink on green, red on green, black on red, and green on purple.
- Do not use red and green in the same document/chart or data visualisation if at all possible.
- Use contrasting colours to allow for information to be clearly seen.
- If you need to use tints of the same colour or show a colour range for something like a heat map or temperature chart for example try to make sure there is a 40% difference between them.
- If using a light colour outline any data or elements that do not contrast well enough with the background, or choose a darker colour.
TODO: talk about general use of patterns
Here are the most important accessibility pattern considerations:
Use solid colors for fill and lines, and avoid patterns such as cross-hatches, dots, or dashed lines. Instead, use well-defined color combinations in(cludin grayscale) that are distinguishable by people with color disabilities, use distinct symbols where appropriate (e.g. as data points on line charts or scatter plots), or use different line thicknesses if necessary.
Note: Earlier accessiblity advice sometimes encouraged the use of patterned fills or dashed line patterns in data visualizations. This practice often makes charts more difficult to read, and significantly increases cognitive load or some people with cognitive disabilities. In addition, patterns that cross one another can produce visual effects that distort the data representation.
TODO: provide good and bad examples
An exception to this guidance is the limited use of patterned fills or strokes to indicate some qualitative exception, such as missing data, uncertain data, or future projected data. Reserve the use of patterns for this semantic data, rather than as a visual distinction.
TODO: Integrate these points:
- Pattern should be avoided if at all possible - its actually really hard for people to view, causes cognitive overload very quickly and is actually not that easily discernible for a lot of people. This means we need to rely more on contrast and labelling to resolve colour blindness issues.
- Where pattern is used it should be minimised, contrast well, not be made up of glaring colours or colours opposite each other on the colour wheel. Don’t use large patterns in small areas, or complex or clashing patterns and colours..
- The space between pattern elements should not be the same as the pattern element. The same goes for patterned lines like dots and dashes. The space between dots or lines should not be the same size as the dot or line. They can actually be hard for a lot of people to see.
- Two similar patterns or line types should not be used in the same document, its too hard for people to see. eg two dotted or dashed lines or patterns.
- Keep colour choices and pattern choices, if using, consistent for the same types of data.
TODO: add patterns examples
Add line-chart patterns considerations here.
Add bar-chart patterns considerations here.
Add pie/donut chart patterns considerations here.
Add gauge patterns considerations here.
Add percentage chart patterns considerations here.
Add scatterplot patterns considerations here.
Add table patterns considerations here.
TODO: talk about general use of tactiles
Here are the most important accessibility tactile considerations:
TODO: talk about printed tactiles
TODO: talk about digital tactiles
Here are the most important accessibility font and text considerations:
The font family used in charts and diagrams should be consistent with the text on the containing page. We use the sans-serif typeface Open Sans; where Open Sans is not available, we use Arial. For serif fonts, we use the serif typeface Playfair Display.
We suggest that your organization determines a single typeface (or one for sans-serif and one for serif) to use in all charts.
TODO Provide guidance on picking a font.
Limit the number of colors and styles used for labels in your chart or diagram. Avoid bold or italic text, unless it is intended to emphasize a particular feature. Text color should normally be distinct, contrasting, neutral grayscale colors, such as graphite gray, ink black, or chalk white.
As with any document, the size of text within a chart or diagram should reflect the hierarchical level of the label. For example, the title of the chart should be largest, followed by the axis labels, followed by the axis tick labels. At each level of hierarchy, the different labels should have a uniform size. For example, the labels for the X and Y axis should be the same size, and the labels for the axis tick labels values on both the X and Y axis should be the same (smaller) size.
Avoiding shrinking longer labels to fit, within the same hierarchical level. Instead, use a consistent font size for that level that fits all labels (or use abbreviations where appropriate).
Other labels outside a strict hierarchy, such as value labels, legend labels, or annotations, should match the closest appropriate font size (e.g. value labels should be the same size as axis tick labels).
Inconsistent font sizes can make it harder for the reader to construct a mental model of the structure of the chart.
 The smallest font size as displayed in the chart image should match the minimum font size specified in the your style guide.
Note: For the purpose of this document, illustrative examples do not obey this font-size guidance. This is purposeful, to emphasize the salient feature of the chart being described. Where the understandability and perceivability of the data is important, use appropriate font sizes.
Here are the most important accessibility axis considerations:
For cartesian (X/Y) charts, always display both X and Y axes, with clear labels for numerical axis.
Visual clutter is disorganization in the collection of elements, or any unneccessary visual elements that don't directly contribute to the reader's ability to understand the information in a document or image. Visual clutter contributes to extraneous cognitive load, and may reduce the reader's task performance.
Independent axis (usually Y-axis) guide lines that extend the visual tick mark across the width of the chart may help some readers correlate datapoint position (e.g. bar height) with a specific value. This is especially true for younger readers who may draw an association with graph paper. Other readers may find such guide lines to be distracting visual clutter. Inclusion of guide lines is optional, and both approaches are acceptable.
Omitting or hiding axis lines or labels to reduce visual clutter reduces usability for many readers, especially younger readers or those with some cognitive disabilities, and may cause misinterpretation of the data. Always include axis lines, and always include axis labels for numeric axes. Axis labels for categorical axes are optional, if the chart title includes a clear description of what's being measured (i.e. the category type).
TODO
With dynamically generated charts, there is a risk that labels will overlap, unless special care is taken. This is especially true with direct labels, in the case where datapoints converge (as with line charts or scatterplots) or have very small values (as with pie and donut charts).
Labels that overlap, collide, or are simply very close together are harder to read, and sometimes nearly impossible.
To overcome this, during the design phase charts should be tested with a range of values including extremes of values, to determine if there is high risk of label collision. If the labels would collide, you should use leader lines: or staggered labels:.
Leader lines: One way to avoid label collision is to space the labels further from their referent datapoint, and a leader line should be drawn between the label and the target datapoint. This can be combines with a legend key to disambiguate which label belongs to which series.
Staggered labels: Another way to avoid label collision is to position the labels at different points rather than the end (for lines) or on opposite sides of clusters (for scatterplots). The position should be a point of wide separation, ideally near the end. Staggered labels don't work well for pie or donut charts.
Note that leader lines should normally be avoided in order to decrease chart visual complexity, but an exception should be made for avoiding label collision.
Labelling and keys
- Keep labelling consistently placed and outside of but close to the data element.
- Always label everything if functionality allows. Keys are not an alternative, they should be used as an additional tool where necessary.
- Key items should be in a logical order and big enough to be legible (For example, 44px square minimum or 10mm square minimum for colours, patterns and symbols.)
- If you have to use a key then make use of pattern and symbols. (This is especially critical if using a key with more than two elements of data.)
Here are the most important accessibility layout considerations:
- Give the item a title that appears before the data
- Left align every text element if you can.
- Try not to split text data and visual data. Data should be read and then viewed or vice versa rather than splitting the data either side of a graph for example.
- Try to ensure data can be viewed in a table with lines or equivalent so that the eye can track the row of data more easily across the screen/page rather than having to try and match each piece across a row with white space between.
- Keep good white space between lines and blocks of data to enable legibility.
- Use at least a minimum 1pt keyline everywhere, 2pt for patterned lines if possible.
- Make sure any keylines or data on top of Graph paper contrast enough ie 70% and/or are thicker to be distinguishable.
Sharon Lin, Julie Fortuna, Chinmay Kulkarni, Maureen Stone, and Jeffrey Heer. . Selecting semantically-resonant colors for data visualization. In Proceedings of the 15th Eurographics Conference on Visualization (EuroVis '13). The Eurographs Association & John Wiley & Sons, Ltd., Chichester, GBR, 401–410. (PDF)
The following people have contributed substantially to this data visualization accessibility style guide. Feel free to contact those with email addresses for questions, comments, corrections, or contributions
The editor is Doug Schepers.


Lawrence's DBC Blog!
Lessons of my first week in phase 0
1/16/2015
First week of phase 0 in DBC has been interesting to say the least. I've already went through a ton of computer topics and commands which I'm happy to reiterate some of it here to help out anyone that might be interested in learning or thinking about switching to computer science.
First, I'll go over is something called version control. Version control system is something developers use to frequently make save points of a code to record all the changes made to it. That way if you made a error in your code somewhere along the way, you can go back to an earlier save point and figure out just what went wrong. Many develops uses version control tools of some sort, Git being one of the more popular ones.
Git is an open-source version control tool you can use in your computer (open-source means that the source/code is available for everyone to see, edit, or use however they see fit). Git allows the user to view code files in like in branches. The master branch stores your main code but you can have off branches that takes a copy of the whole or parts of master branch. With these off branches you can make changes to the code (called commits). These commits tracks all the changes you made. After you thoroughly reviewed changes made, you can apply the commits made and then merge it with your master branch. Git is so widely used, there's even a way to transfer your codes from your local computer to a remote server using GitHub.
GitHub is a platform that developers to can use to remotely store their code and save their progress. It's similar to git except the files are stored remotely on a server rather than inside your computer. Since the files are stored on a server, you can edit and commits changes from your computer and then send it to GitHub. The major benifit of GitHub is that is allows multiple people to access the same code and work on it collaboratively without being on the same computer! This is incredibly useful for large projects since you can have different people working on different parts of a project working from different parts of the world instead of everyone being in the same room.
Well that it for this week on things I learned this from week 1 of phase 0 at DBC. Stay tuned for next weeks topics as we cover more advance material!
Till next time, Lawrence here signing off!