Automatic Enumerable Injection
By default, a TargetContainer (the default ITargetContainer used by all containers in the
Rezolver framework) is configured to allow any ContainerBase derivative to resolve an IEnumerable<Service>
.
The contents of this enumerable will depend on how many times the Register
method has been called against the target type Service
:
- If no target has been registered against the type, then the enumerable will be empty
- Otherwise, the enumerable will contain instances obtained from each ITarget that was registered against that type, or any type compatible with it, in the order they were registered.
Note
The functionality described here depends on two target container options: AllowMultiple
and EnableEnumerableInjection - which are both configured to be equivalent to true
by
default for all ITargetContainer instances.
You are not restricted in the targets you use to produce instances for an enumerable (e.g. ObjectTarget, ConstructorTarget or DelegateTarget), and each one can have its own lifetime (scoped/singleton etc).
Tip
By default, Rezolver will build 'lazy' enumerables, but can be configured to build 'eager' enumerables - for more on this, read the topic Lazy vs Eager Enumerables
Warning
In an Asp.Net Core 2.0 application, however, eager enumerables are the default until the fix for this issue in the aspnet/DependencyInjection repo has been pushed to an official package release.
Order of enumerables
The order that Rezolver's automatic enumerables return their items is always equal to the order in which the underlying registrations were made.
Resolving enumerables
To resolve an enumerable from a container or through a scope, you can simply use IEnumerable<Foo>
as the input
type for a Resolve call:
var enumerable = container.Resolve<IEnumerable<Foo>>();
However, the ResolveMany
extension methods (see ResolveMany
and ResolveMany) provide a shortcut which allow you to pass
just the element type of the enumerable to reduce the 'angle-bracket percent' of code which directly resolves
enumerables (which of course you won't be doing because you're not using 'service location' are you!? 😉 ):
// this is equivalent to resolving IEnumerable<Foo>
var enumerable2 = container.ResolveMany<Foo>();
Most, if not all, the examples in this section use this shortcut - but it's worth noting that the two methods are absolutely equivalent.
Empty enumerable
By default, you don't need to register anything against a particular type in order to be able to inject an enumerable of that type. If there are no registrations, then an empty enumerable will be injected instead.
Here's an example where we only register the service we're going to create, which has a single constructor that requires
an IEnumerable<IMyService>
.
First, the type RequiresEnumerableOfServices
:
public class RequiresEnumerableOfServices
{
public IEnumerable<IMyService> Services { get; }
public RequiresEnumerableOfServices(IEnumerable<IMyService> services)
{
Services = services;
}
}
And then the test:
var container = new Container();
container.RegisterType<RequiresEnumerableOfServices>();
var result = container.Resolve<RequiresEnumerableOfServices>();
Assert.Empty(result.Services);
Multiple new objects
Here, we associate three types (created by constructor injection) to a common service type, which are all then included in the auto-injected enumerable:
var container = new Container();
var expectedTypes = new[] {
typeof(MyService1), typeof(MyService2), typeof(MyService3)
};
foreach (var t in expectedTypes)
{
container.RegisterType(t, typeof(IMyService));
}
container.RegisterType<RequiresEnumerableOfServices>();
var result = container.Resolve<RequiresEnumerableOfServices>();
Assert.Equal(3, result.Services.Count());
Assert.All(
result.Services.Zip(
expectedTypes,
(s, t) => (service: s, expectedType: t)
),
t => Assert.IsType(t.expectedType, t.service));
Mixed ITarget
types
This time, we're mixing it up a bit by registering multiple different target types (a constructor target, a delegate
target and an object target), and we're also using a delegate to create the RequiresEnumerableOfServices
just
to show that the enumerable can be injected into a delegate as you'd expect:
var container = new Container();
container.RegisterType<MyService1, IMyService>();
container.RegisterDelegate<IMyService>(() => new MyService2());
container.RegisterObject<IMyService>(new MyService3());
// shows also that injection of IEnumerables holds wherever injection
// is normally supported - such as here, with delegate argument injection
container.RegisterDelegate((IEnumerable<IMyService> services) =>
{
// if MyService4 is missing, add it to the enumerable
if (!services.OfType<MyService4>().Any())
services = services.Concat(new[] { new MyService4() });
return new RequiresEnumerableOfServices(services);
});
var result = container.Resolve<RequiresEnumerableOfServices>();
Assert.Equal(4, result.Services.Count());
// just check they're all different types this time.
Assert.Equal(4, result.Services.Select(s => s.GetType()).Distinct().Count());
Mixed lifetimes
When registering targets, you have three lifetimes at your disposal:
- Transient (a new object created for every Resolve call)
- Singleton (only one object is ever created)
- Scoped (one object created per IContainerScope)
Note
Of course, the ObjectTarget (see objects as services) is technically a singleton, also, but that's because it wraps a constant reference supplied by you.
If you register multiple targets for the same type, and those targets have different lifetimes, then those lifetimes are
honoured if the container injects an IEnumerable<>
.
The following example registers three implementations for IMyService
again which will appear in the enumerables in the
following positions:
[0]
: A singleton[1]
: A scoped object[2]
: A transient
It then resolves IEnumerable<IMyService>
multiple times - twice from the root container (which
is a ScopedContainer so that the scoped MyService2
registration has a scope to 'live' in) and then
twice again from a child scope:
// since we're using a scoped registration here,
// we'll use the ScopedContainer, which establishes
// a root scope.
var container = new ScopedContainer();
container.RegisterSingleton<MyService1, IMyService>();
container.RegisterScoped<MyService2, IMyService>();
container.RegisterType<MyService3, IMyService>();
// So - each enumerable will contain, in order:
// 1) Singleton IMyService
// 2) Scoped IMyService
// 3) Transient IMyService
var fromRoot1 = container.ResolveMany<IMyService>().ToArray();
var fromRoot2 = container.ResolveMany<IMyService>().ToArray();
Assert.Same(fromRoot1[0], fromRoot2[0]);
// both scoped objects should be the same because we've resolved
// from the root scope
Assert.Same(fromRoot1[1], fromRoot2[1]);
Assert.NotSame(fromRoot1[2], fromRoot2[2]);
using (var childScope = container.CreateScope())
{
var fromChildScope1 = childScope.ResolveMany<IMyService>().ToArray();
// singleton should be the same as before, but
// the scoped object will be different
Assert.Same(fromRoot1[0], fromChildScope1[0]);
Assert.NotSame(fromRoot1[1], fromChildScope1[1]);
Assert.NotSame(fromRoot1[2], fromChildScope1[2]);
var fromChildScope2 = childScope.ResolveMany<IMyService>().ToArray();
// the scoped object will be the same as above
Assert.Same(fromChildScope1[0], fromChildScope2[0]);
Assert.Same(fromChildScope1[1], fromChildScope2[1]);
Assert.NotSame(fromChildScope1[2], fromChildScope2[2]);
}
To summarise:
[0]
is always the same reference[1]
is created once per enclosing scope (remember - the container itself is a scope in this example)[2]
is created once per call
Automatic Covariance
Since the T
type parameter in IEnumerable<T>
is a covariant, Rezolver automatically resolves all types
which are reference compatible with the T
that you specify. So, resolving an IEnumerable<IFoo>
will
result in an enumerable containing all objects produced from registrations made against types which
implement IFoo
(the registrations do not need to have been made explicitly against the IFoo
interface).
A concrete example of this can be found in the section on covariance.
Decorators and Enumerables
Decorators that have been registered against the element type of an enumerable will be applied to all instances that the container produces for the enumerable. This also applies to stacked decorators (where multiple decorators are applied on top of one other).
So, we have two decorator types for IMyService
:
public class MyServiceDecorator1 : IMyService
{
public IMyService Inner { get; }
public MyServiceDecorator1(IMyService inner)
{
Inner = inner;
}
}
public class MyServiceDecorator2 : IMyService
{
public IMyService Inner { get; }
public MyServiceDecorator2(IMyService inner)
{
Inner = inner;
}
}
And in this example we'll have one of those decorators being used to decorate three registrations:
var container = new Container();
// register the decorator up front. Note - it doesn't actually matter when it's registered
container.RegisterDecorator<MyServiceDecorator1, IMyService>();
container.RegisterType<MyService, IMyService>();
container.RegisterType<MyService2, IMyService>();
container.RegisterType<MyService3, IMyService>();
// create the container with these targets
var result = container.ResolveMany<IMyService>().ToArray();
// make sure each item in the enumerable is an instance of our decorator.
// then make sure the decorated services are correct.
Assert.All(result, r => Assert.IsType<MyServiceDecorator1>(r));
Assert.IsType<MyService>(((MyServiceDecorator1)result[0]).Inner);
Assert.IsType<MyService2>(((MyServiceDecorator1)result[1]).Inner);
Assert.IsType<MyService3>(((MyServiceDecorator1)result[2]).Inner);
If more decorators were added, of course - then each element would be 're-decorated' accordingly.
Tip
You can also decorate instances ofIEnumerable<T>
, IList<T>
, ICollection<T>
- plus any other supported
collection types. Read about this now.
Explicit IEnumerable<T>
registrations
Although you get IEnumerable<T>
handling automatically when the InjectEnumerables configuration
is applied (and not also disabled by the @Rezolver.Options.EnumerableInjection option being set to false
), it doesn't
prevent you from manually adding registrations for specific IEnumerable<>
types which override the default behaviour.
For example, let's say that you have two registrations for services which share a common interface, but they have only been registered against their concrete type (perhaps it's historical code you can't risk changing). Your code now wants an enumerable of that common interface. Well, assuming you know what the specific registrations are - you can use delegate registrations (note, there are lots of ways, this is just the most illustrative):
var container = new Container();
container.RegisterType<MyService1>();
container.RegisterType<MyService2>();
// reversing the 'normal' order that would usually be
// produced by the default IEnumerable functionality, to show
// that it's this enumerable that we resolve
container.RegisterDelegate<IEnumerable<IMyService>>(
rc => new IMyService[] { rc.Resolve<MyService2>(), rc.Resolve<MyService1>() }
);
var result = container.ResolveMany<IMyService>().ToArray();
Assert.Equal(2, result.Length);
Assert.IsType<MyService2>(result[0]);
Assert.IsType<MyService1>(result[1]);
Warning
As soon as you create a manual registration for a particular IEnumerable<T>
type, Rezolver no longer has any control
over how that particular enumerable is produced - so none of the enumerable-related options demonstrated in this documentation
will be honoured.
Disabling Enumerable Injection
As with much of the built-in functionality in Rezolver, you can control whether enumerables are automatically built or not through the use of options and configuration.
In the case of enumerable injection, it is a feature that is enabled by an ITargetContainerConfig that is added by default to a set of configuration objects in the DefaultConfig collection which is applied, by default, to all new instances of the TargetContainer class (which is, in turn, used by both the main container types - Container and ScopedContainer).
This means that, to disable it, you have to either remove that config (it's the
InjectEnumerables configuration singleton) from the collection, or set the
EnableEnumerableInjection option to false
on the target container before the configuration
is applied.
You also have another choice, in that you can either do this directly on the DefaultConfig collection, which will affect all instances of TargetContainer, or you can Clone the collection and apply it only to a single target container.
It's the second of these options that the example shows, below:
var config = TargetContainer.DefaultConfig.Clone();
config.ConfigureOption<Options.EnableEnumerableInjection>(false);
// pass our custom config to a new target container which, in turn,
// we pass to the constructor of the Container class
var container = new Container(new TargetContainer(config));
Assert.Throws<InvalidOperationException>(() => container.ResolveMany<int>());
Notice that we're explicitly creating a TargetContainer and passing a cloned config to it; passing the result to the Container constructor.
Tip
Many other examples throughout this documentation show options simply being set directly on the container.
In those cases, it's because the options are used by logic within Rezolver to make decisions.
Enumerable injection, however, is configured at the point a new TargetContainer is created,
because the configuration is applied by one of its constructors; hence the different approach is required in
order to ensure the option is set before the configuration gets applied. The
InjectEnumerables configuration looks for the EnableEnumerableInjection
option and, if it's false
it disables itself.
Warning
If you disable automatic enumerable injection then the other
automatic collection-type injection behaviour will only work when you
explicitly register the correct IEnumerable<T>
for it.
Next steps
- Read about how Rezolver handles building enumerables of generics from open and closed generic registrations.
- Learn about Rezolver's support for lazy and eager enumerables (note: all auto-generated enumerables are lazily evaluated by default)
- New in 1.3.2 - Learn how to setup enumerable projections which allow you to instruct the container to build an enumerable of one type from an enumerable of another type.
- Rezolver also supports arrays, lists and collection injection


About Me
My name is Jason and I'm currently enrolled in a programming bootcamp call DBC (short for Dev Bootcamp). This website is a project that I will be working on throughout the course until the end of June. If you want to keep up with my jouney here at DBC, check out my weekly blog posts updating you on what we're learning and how DBC is going! Feel free to give me feedback on how to improve this website! - Jason


Pete Doherty handed £8,500 fine in Paris over double arrest
British singer Pete Doherty has been handed a three-month suspended sentence and a fine of 10,000 euros (£8,500) after being arrested in Paris twice in a week, city prosecutors said.
The prosecutor’s office said the 40-year old former Libertines and Babyshambles frontman was sentenced two days after being placed in custody on Sunday for “violence by a person in a manifest state of intoxication”.
Since rising to fame in the 2000s, Doherty, a former boyfriend of model Kate Moss, has been repeatedly arrested for drug offences.


Heather Bjoin
Heather helped design the overall style for the website. With the help of Megan, she also implemented the ideas and wrote the story. Heather contributed to the javascript by adding in the storyline and additional cases where need be.
My GitHub: HeatMarie
Justin Hoch
Justin worked mostly on the javascript and trying to compact the js as much as possible. He got it to work and implemented it to cave.js just as a proof of concept. He also worked a lot with the APIs and answered any questions about them that his teammates asked.
My GitHub: Justinean
Megan Steblay
Megan spent much of her time with this project working on the JavaScript code and experimenting with how to cascade from function to function and storyline to storyline so that it not only split into different choices, but could also come back together... and then refactoring all of that code to be more efficient. She also helped the others brainstorm the story itself and assisted Heather in writing some sections of the script.
My GitHub: msteblu
Mike Steinmetz
Mike worked a lot with the styling aspects (CSS) of each page, He also spent most of his time working on the mountains page. He worked on implementing media queries to ensure that the story used a responsive layout. He also implemented a preloading screen for the very first time...which he created using HTML, CSS, and JavaScript.
My GitHub: mgsteinmetz
The Project
Concept
Elevator Pitch
An interactive story where the main character - YOU, the user - will embark on a mission to save the world from a DRAGON!  Right? The user will read a story and make decisions, which will determine the final outcome. In the end, you will either find a way to save everyone (including yourself) or be forced to watch everything burn in an unstoppable, fiery apocalypse. The choice is yours. Choose wisely, my friend.
User Story
GIVEN THE TEXT-BASED STORY, I want to be able to make choices and interact with a fictional storyline. I want to change the story’s outcome by “traveling” (using different pages as different locations) and choosing between different paths. My choices will have consequences, altering the storyline and changing the ending. At the end, based on my saved choices, I will either win (by defeating the dragon) or lose.
Motivation for Development
We wanted to let users experience being the protagonist in a story (in a type of text-based game), allowing them to have agency over the direction the story takes and letting them experience how their individual choices affect the outcome of a fictional world.
The Process
TECHNOLOGIES
- Bulma
- Pexels
- Art Institute of Chicago
- Freesound
- jQuery
Styling: We used Bulma as a CSS styling framework.
APIs: We utilized the Freesound.org API for background music, and the Pexels and Art Institute of Chicago APIs for background images.
Other Technologies: Some jQuery was also used in this project.
BREAKING DOWN THE TASKS
Functionality: Much of the functionality of the application (the JavaScript and jQuery) was written by Megan Steblay and Justin Hoch.
Styling: Much of the layout and styling of the application (CSS, HTML, and use of Bulma) was written by Heather Bjoin and Mike Steinmetz.
Story: The story text itself was written by Heather Bjoin with assistance from Megan Steblay.
CHALLENGES
In any project, there are of course challenges. We had to work out how to utilize APIs that we had never encountered before, and we had to figure out how to implement Bulma and make our application responsive. There were also ideas that we had to work out that were complicated using just JavaScript or jQuery... how do we make a story that isn't quite linear, that shifts around itself and cascades down, splitting and then rejoining, like a type of graph? We also had to work on communication: with four of us building the same project, we had to try to figure out a system of listening, contributing, and distributing tasks.
SUCCESSES
We knew we were attempting something somewhat complicated for the four of us to complete in the span of two weeks. However, we experienced many successes with our project. We figured out not only how to write a cascading storyline in JavaScript, but also how to refactor it: making it more consolidated and efficient. We successfully utilized multiple APIs whose use greatly improves the immersiveness of our project. And, we wrote an entire choose-your-own-adventure script unique to our project!
The Story
The idea for the story came from deciding we wanted to do something interactive. We had big ideas, and had to compact them. So here we are, with a story about one person sent out on quest to save the world from a dragon named Fraener. The decisions the reader makes can have a massive impact on the final outcome. The only thing is, they won't know until the end. Every choice has a consequence, some good, some not so much, and others will automatically lead to devastating outcomes.
Background Image Acknowledgements:
Header: Francesco Ungaro. "Red Fire Illustration," Pexels API.
Tavern: Francis Hopkinson Smith. "The Cock Tavern, from In Thackeray’s London," 1913. The Art Institute of Chicago API.
Village: Maurice de Vlaminck. "Village," 1912. The Art Institute of Chicago API.
Forest: All rights reserved to Heather Bjoin.
Cave: Skitterphoto. "Nature France Rocks Cave," Pexels API.
Mountain:Marlon Martinez. "Mountain Scenery," Pexels API.
Background Sound Acknowledgements:
Tavern: "My Tavern 1.wav" by ralexpdx of Freesound API.
Village: "Medieval market" by Metzik of Freesound API.
Forest: "2020 park NL » park Cromvoirt May NL 210523_0284.ogg" by klankbeeld of Freesound API.
Cave: "ambiences cave 02" by rucisko of Freesound API.
Mountain: "Wind, Synthesized, A.wav" by InspectorJ (www.jshaw.co.uk) of Freesound API.
Future Advancements
There are many ways that this project could be expanded on. Initially, we had dreamed big about a game that was more open-world. The story would be less linear so that the player could move around to different locations as they desired, even returning to locations they had already visited. In future developments, more functionality could be added. Perhaps our player would have stats, perhaps the game would keep track of time and days would pass as you played. Perhaps the player would have an inventory where they could collect items along the way and use them in parts of the story. The story could change depending on which locations you visited in what order. There could be multiple stories that could be unlocked and played.
We had only two weeks to build this project, and ended up with a compact, interactive game — but we see many possibilities for the further advancement of Blitz and Chaos.


Hide if you need to print the report in LetterHead Paper. Else Show Header.
Switch language of Patient Name
Click to Change Referred By Dr.
Note: separate multiple email by semicolon (;)


Previous Talks A library of slides and demos from past presenters. {% assign firstsort = site.events | sort: 'eventdate' %} {% assign sorted = firstsort | reverse %} {% for event in sorted %} {{ event.title }} {% endfor %}


Fearless Gundarks Stream Files
Files needed for the Fearless Gundarks twitch streams. https://www.twitch.tv/fearlessgundarks


Scripts and Utilities
depth_of_coverage.pyDaniel CookPython script for calculating depth of coverage and breadth of coverage by chromosome, nuclear, mtDNA, and genome from a given bam file.
generate_masked_ranges.pyDaniel Cook
Used to produce a bed file of masked ranges within a hard masked ("NNN") fasta file.
het_polarization.pyDaniel CookPython script for 'polarizing' or re-calling heterogzygous genotype calls as homozygous reference or alternate genotypes based on bayesian probabilities in inbred or largely homozgyous individuals.


Truncates text that is longer than one line, adding an ellipsis at the end (`…`). - Use `overflow: hidden` to prevent the text from overflowing its dimensions. - Use `white-space: nowrap` to prevent the text from exceeding one line in height. - Use `text-overflow: ellipsis` to make it so that if the text exceeds its dimensions, it will end with an ellipsis. - Specify a fixed `width` for the element to know when to display an ellipsis. - Only works for single line elements.
If I exceed one line's width, I will be truncated.


Email Templates¶
The dashboard can send out mail when scans are finished. An email is composed using a template. These templates are rich in functionality, and can be adjusted without the need of re-building and re-deploying this software.
General information¶
Where can i find templates¶
Templates are located at /admin/django_mail_admin/emailtemplate/ on your installation. They are part of the admin system and require the right permissions to be edited. An admin can edit them easily.
What templates are available¶
Currenty there is one feature that uses an e-mail template, which is scan_finished. When a scan is finished, this mail template is used to draft a mail.
The scan finished template uses two sub-templates, which are:
scan_finished
detailed_comparison_regression
detailed_comparison_improvement
The sub templates are tables that list regressions and improvements.
How do i define templates in multiple languages¶
Templates are postfixed with a language identifier. The default is ‘_en’, for English. The dashboard currently supports two languages, Dutch and English: nl and en.
If a template for _nl (or any other language) is missing, it will use _en.
(Technically there are many solutions to make sure translations are multilingual, most of which require re-compilation or maintenance of external translation files that require a build. When there are many languages in use, there will be a need to switch.)
What template system is used¶
The Django template system is used, with one exception: all fields from the dashboard are strings.
The Django template system is a mix of special tags and HTML, Javascript and CSS. It is also used in building front end systems which are rendered on the server side.
The Django Template system is documented here: https://docs.djangoproject.com/en/3.1/ref/templates/language/
What do i need to watch out for¶
Syntax mistakes can prevent a mail from being composed or sent. In this case the software will crash. This is the largest drawback of the current approach. When editing a template, be careful.
What are the pros and cons of the current approach¶
Pros:
No need to recompile / rebuild / deliver the software when templates change
Multi language in a simple and straightforward way (allowing changes per language)
Uses well documented systems of django, html, javascript and css.
Cons:
No syntax highlighting or checking of templates in the editor, use an external editor(!)
A template per language is annoying when doing maintenance
How to set up e-mail sending¶
Email sending uses Django Mail Admin: https://github.com/Bearle/django_mail_admin/
- You need to configure an outbox with proper values. You can test if this works via the command line
with the command:
dashboard send_testmail
Scan Finished mail¶
When is this mail sent¶
This mail is only sent when the user has set that in their profile. You can review that for example here: /admin/auth/user/1/change/
The fields that are used to send this mail are:
Mail preferred mail address: an e-mail address
Mail preferred language: a language from the list (only supporting NL or EN)
Mail send mail after scan finished: a boolean value if the mail can be sent
Mail after mail unsubscribe code: automatically generated
If all preconditions are correct, a mail will be queued as part of the scanning process, just before the scan is finished.
How to test this mail¶
A test mail can be sent at will on the admin page of AccountInternetNLScan, here: /admin/internet_nl_dashboard/accountinternetnlscan/
A mail can only be sent if a scan is finished and the mail preconditions and setup are correct.
When this mail has been queued, either wait for the periodic task that sends mail is performed (once a minute), or perform this via the command line (during development):
dashboard send_queued_mail --processes=1 --log-level=2
Example template¶
scan_finished_en takes into account a multitude of situations where there are no scan results.
This template will probably be quickly outdated, but shows how to build a nice template with the fields above.
Hi {{recipient}},

The {{scan_type}} scan on '{{list_name}}' has finished and your report is ready. The average internet.nl score in this report is {{report_average_internet_nl_score}}%.

View the report at this link:

{{dashboard_address}}/spa/#/report/{{report_id}}/

{% if previous_report_available == "False" %}

This is the first report for '{{list_name}}'. The next time this list is scanned, a comparison report will be included in this mail.
{% endif %}
{% if previous_report_available == "True" and comparison_is_empty == "True" %}

A previous report, #{{compared_report_id}}, is available but contains no changes compared to this report. Therefore no change summary was included.
{% endif %}
{% if previous_report_available == "True" and comparison_is_empty == "False" %}

Changes compared to previous report

Below a summary is given compared to the previous report, #{{compared_report_id}}. The previous report was made {{days_between_current_and_previous_report}} days ago and had an average score of {{previous_report_average_internet_nl_score}}%.

You can view the comparison in detail on the dashboard at {{dashboard_address}}/spa/#/report/{{report_id}}/{{compared_report_id}}

Summary of changes:

{{improvement}}	{{regression}}	{{neutral}}

Improvements	Regressions	Neutral

{% endif %}
{% if previous_report_available == "True" and comparison_report_contains_improvement != "True" and comparison_report_contains_regression != "True" %}

Only neutral changes have been observed, therefore no detailed overview of changes is included in this e-mail.

{% endif %}
{% if comparison_report_contains_improvement == "True" or comparison_report_contains_regression == "True" %}
{% if comparison_report_contains_improvement == "True" %}

Overview of improvements:

Domain
Score
Improvement(s)
Metrics improved

{{comparison_table_improvement|safe}}

{% endif %}
{% if comparison_report_contains_regression == "True" %}

Overview of regressions:

Domain
Score
Regeression(s)
Metrics regressed

{{comparison_table_regression|safe}}

{% endif %}
{% endif %}
{% if domains_exclusive_in_current_report != "" %}

This report includes new domains, which are not included because they could not be compared: {{ domains_exclusive_in_current_report}}.
{% endif %}
{% if domains_exclusive_in_other_report != "" %}

The following domains have disappeared in the new report, and are thus not included above: {{ domains_exclusive_in_other_report}}.
{% endif %}

Regards,

The internet.nl dashboard

[
unsubscribe
-
preferences
]

detailed_comparison_regression_en:
{% for record in data %}

{{ record.url }}

{{ record.new.score }}%

{{ record.changes.regression }}

{% for metric in record.changes.regressed_metrics %}

{{ metric }}

{% endfor %}

{% endfor %}
detailed_comparison_improvement_en:
{% for record in data %}

{{ record.url }}

{{ record.new.score }}%

{{ record.changes.improvement }}

{% for metric in record.changes.improved_metrics %}

{{ metric }}

{% endfor %}

{% endfor %}


---
layout: discography
title: MESS-GAME Vol.3
description: first HARD DANCE / HARDCORE Compilation
image: /img/works/album/messgame3.jpg
caption: MESS-GAME Vol.3 Cover Art
date: 2014.12.29
categories:
- Works
- Discography
tags:
- Regular
- Original
soundcloud: 179161115
playlist: none
youtube: none
---
Track List
- Pantograph
Aresynth vs RMHN
- Interstellar
Titancube
- Only You
KARUT
- Yesterday Becomes Tomorrow
mzet:-P
- Blueback
SANY-ON
- JUNGLE BELL ROCK
RMHN a.k.a. RAVEN@TION
- Blueprint
Aresynth
- Shotgun BLAST!!
Roy Mikelate
- Venenum
0492
- Restless Azure Girl
SANY-ON
- No Heaven, No Hell
Roy Mikelate
- Catalog Num
- HMDA-0005
- Release Date
- {{ page.date }}
- Producer
- SANY-ON, Aresynth
- Composer
- RMHN, SANY-ON, mzet:-P, Aresynth, 0492, Titancube, Roy Mikelate, KARUT
- Mastering
- RM
- Designer
- BULUB
- Price
- 17,000won
Buy


I'm a Full Stack Software Developer originally from Wisconsin. I attended University of Wisconsin Milwaukee graduating with a BS in criminal justice. While pursuing a career in law enforcement I came to a point when I decided to go in a different direction. I decided to put my passion for building and figuring out how things operate into software development after researching the field and talking with friends and family.
Outside of coding I enjoy working out, playing lacrosse,and anything that involves being on water.
Dev-Depot was created with newcomers to writing code in mind. Using HTML, CSS, Javascript, and Express, Dev-Depot brings together templates for the various files needed to create a basic backend application. This was done so it would be easier for new coders to have everything set up correctly so the functional code can be focused on.
Wannabeer is an easy way for anyone wanting a cold, locally produced beverage, to find somewhere to do so. It allows the user, upon letting the browser know his or her location, to find a brewery close to their location. Additionally, details about the selected brewery are displayed to allow the user to make a more informed choice.


This is a Mac Excel FRT record. It stores the information for list object.
Record Data
|
Offset |
Field Name |
Size |
Contents |
|
4 |
rt |
2 |
Record type; this matches the BIFF rt in the first two bytes of the record; =08c1h |
|
6 |
grbitFrt |
2 |
FRT flags; bitfFrtRef must be set to 1; see FRT Record Description |
|
8 |
REF |
8 |
REF structure; see FRT Record Description. Contains a REF that can be adjusted by a non-list-aware version of Excel |
|
16 |
cFields |
2 |
|
|
18 |
cRecords |
2 |
|
|
20 |
ref |
8 |
REF structure; location of field on sheet as known by a list-aware version of Excel |
|
28 |
wListFlags1 |
2 |
|
|
30 |
wListFlags2 |
2 |
|
|
32 |
Rgsortflags |
6 |
|
|
38 |
cchName |
2 |
Size of rgbName |
|
40 |
rgbName |
var |
The name of the list. |


BEN CHRISMAN
When Ben was a little kid, he wrote down in a book what he wanted to be when he grew up. Photographer.VIEW PORTFOLIO
BEN CHRISMAN
When Ben was a little kid, he wrote down in a book what he wanted to be when he grew up. Photographer.VIEW PORTFOLIO
BEN CHRISMAN
When Ben was a little kid, he wrote down in a book what he wanted to be when he grew up. Photographer.VIEW PORTFOLIO
BEN CHRISMAN
When Ben was a little kid, he wrote down in a book what he wanted to be when he grew up. Photographer.VIEW PORTFOLIO


--- title: "Translating education neuroscience for teachers" date: 2020-06-12T16:03:15+08:00 draft: false ---
Translating Neuroscience to education involves providing accurate and simplified information about neuroscience to teachers. The aim of this research was to understand if providing translated abstracts from neuroscientific articles helped teachers understand content more thoroughly. Surveys, experimental manipulation, and focus group discussions were conducted with thirty teachers from two primary schools in Singapore. Teachers shared their familiarity with neuroscience, self-rated their understanding of neuroscientific abstracts, and provided feedback on the abstracts’ translations. Results indicate that translated abstracts did not improve attitudes significantly; however, focus group discussions revealed that teachers were more interested in the applications of neuroscience research in classroom pedagogy. These findings highlight the importance of improving communication between neuroscientists and educators.
Rachel Tham, Zachary Walker, Shi Hui Desiree Tan, Li Tong Low & Shen-Hsing Annabel Chen (2019) Translating education neuroscience for teachers, Learning: Research and Practice, 5:2, 149-173, doi: 10.1080/23735082.2019.1674909


--- layout: post date: 2011-06-18 time: "09:00:00" authors: ["Greg Wilson"] title: Health Informatics Resources tags: ["Noticed"] ---
Via William Hopper, a list of online healthcare informatics resources that might be of interest to some readers. If you have others, I'm sure he'd enjoy hearing from you.


Central Bank to launch Phil Lynott commemorative coin
by Jack QuannA coin commemorating 'Thin Lizzy' frontman Phil Lynott is being launched by the Central Bank.
It will be officially unveiled by President Michael D Higgins next Tuesday.
Around 3,000 of the special coins will be issued, at a face value of €15.
It will be launched at St Kevin's College, Crumlin in Dublin - the former school of Phil Lynott.
Marking 70 years since his birth, the launch will include a performance by the school band of a medley of Phil Lynott songs.
The performance will be followed by an address by President Higgins.
Central Bank Deputy Governor Sharon Donnery will also address the school, and present President Higgins with the first coin.
Phil Lynott died in England as a result of drug addiction in 1986, and is buried in St Fintan's Cemetery in Dublin.
His mother, Philomena Lynott, passed away in June this year.
She died at her home in Sutton in north Dublin at the age of 88.
She gave birth to Philip in England at the age of 18.
Philip came to Dublin while still a young boy, and went on to become one of Ireland's most famous songwriters and musicians in a series of bands - including 'Thin Lizzy' - and as a solo artist.
Philomena had a statue of Philip erected in Dublin city centre, just off Grafton Street, where it still stands.
Earlier this year, An Post announced two new stamps to mark 50 years of 'Thin Lizzy'.
The stamps are based on the iconic artwork of Jim Fitzpatrick and cover standard postage within the island of Ireland.
Fitzpatrick is perhaps best known for his iconic two-tone portrait of Che Guevara created in 1968, based on a photo by Alberto Korda.
One of the greatest bands to come out of Ireland, 'Thin Lizzy' remain giants of Irish rock decades after they first came together in 1969.


Prevention Just Makes Sense
By Don Berwick, Administrator, Centers for Medicare & Medicaid Services
“Prevention” is a word we use a lot in health care – June is “National Prevention and Wellness Month” – but I want to take a minute to think about what it really means.
Intuitively, prevention makes sense: as the saying goes, you can either pay now or you can pay later. But oddly enough, our health care system often doesn’t reflect this fundamental mindset. Most health care focuses on treating disease. Prevention, on the other hand, focuses on health.
Preventive care is also patient-centered care, as people become active participants in maintaining their health and get services customized for their individual needs and preferences.
We know that prevention works. The Affordable Care Act provides new ways to help patients stay healthy and makes access to preventive services easier.
Today, the Centers for Medicare and Medicaid Services (CMS) released a new report showing that more than 5 million Americans with traditional Medicare, or nearly one in six people with Medicare, took advantage of one or more of the recommended preventive benefits now available for free thanks to the Affordable Care Act – most prominently, mammograms, bone density screenings, and screenings for prostate cancer.
These are just a few of the preventive services available to people on Medicare. Earlier this year, Medicare eliminated the Part B deductible and copayments for a host of preventive services, including bone mass measurement, some cancer screenings, diabetes and cholesterol tests, and flu, pneumonia, and hepatitis B shots.
We’ve also eliminated out-of-pocket costs for the “Welcome to Medicare” preventive visit and, for the first time since the Medicare program was created in 1965, Medicare now covers an annual wellness visit with a participating doctor, also at no cost.
We’ve added expanded prescription drug benefits to the preventive arsenal as well. This year, people with Medicare started to benefit from a 50% percent discount on covered brand name drugs bought when they’re in the donut hole, and we’ll continue to chip away at the donut hole until it’s closed in 2020. Making prescription drugs more affordable increases the chance they’ll be taken as needed. Again – prevention just makes sense.
Find out which preventive services are right for you by taking this checklist to your doctor or other health care provider.
Our job now is to ensure that everyone eligible for Medicare uses these benefits. We need to encourage every person with Medicare, every caregiver, every physician to join our nationwide campaign for prevention. We are calling our campaign, Share the News, Share the Health, which will run throughout the summer, with online ads and community events all over the country starting in July.
Focusing on prevention doesn’t just improve care – it’s also an important step in reducing the cost of health care. The financial costs of treating chronic diseases like heart disease, cancer and diabetes are enormous. Add in the intangible costs of pain and suffering, and the very real economic costs of lost productivity, and the opportunity costs of chronic illness are simply unacceptable.
This is why we’re also working closely to incorporate best practices from the Centers for Disease Control, particularly around ways to reduce cardiovascular mortality. This type of collaboration is critical to moving us towards a prevention-based model of care.
Focusing on prevention also makes sense when we value treating the whole patient – not just a condition or disease. When we help people take better care of their health, everyone in the community benefits. If we wait to pay for care as illness progresses, the price of health care for the country will continue to rise.
Prevention just makes sense.


--- layout: post title: "Week in Review" date: 2017-11-26 08:45:00 +0000 tags: image: https://s3.amazonaws.com/audreywatters/2017-11-26-turkey.jpg imagecredits: https://www.flickr.com/photos/mattridings/8218845242 ---
Icon credits: The Noun Project


Before Change
result = [make_sparse_tree(data.indices, data.indptr, data.data, rng_state,
leaf_size, angular) for i in range(n_trees)]
else:
result = [make_dense_tree(data, rng_state, leaf_size, angular) for i in range(n_trees)]
except (RuntimeError, RecursionError, SystemError):
warn(
"Random Projection forest initialisation failed due to recursion"
"limit being reached. Something is a little strange with your "
After Change
else:
// result = [make_dense_tree(data, rng_state, leaf_size, angular) for i in range(
// n_trees)]
joblib.Parallel(n_jobs=4, prefer="threads")(
joblib.delayed(make_dense_tree)(data, rng_state, leaf_size, angular)
for i in range(n_trees)
)
except (RuntimeError, RecursionError, SystemError):
warn(
"Random Projection forest initialisation failed due to recursion"
"limit being reached. Something is a little strange with your "


Depei Zhang
Time complexity: O(n + m)
Lintcode runtime (cpp): 574 ms (68.40%)
Solution:
P3: LintCode 607. Two Sum III - Data structure design
Time complexity: O(1)
Lintcode runtime (cpp): 183 ms (68.60%)
Solution:
P4: LeetCode 381. Insert Delete GetRandom O(1) - Duplicates allowed
Time complexity: O(1)
Leetcode runtime & memory (cpp): 44 ms (99.28%) & 24.9 MB
Solution:
P5: LeetCode 295. Find Median from Data Stream
Time complexity: O(log(n))
Leetcode runtime & memory (cpp): 128 ms (98.17%) & 45.1 MB
Solution:
P6: LeetCode 480. Sliding Window Median
Time complexity: O(n * log(k))
Leetcode runtime & memory (cpp): 52 ms (98.56%) & 15.5 MB
Solution:


Back
T-Shirt: $5.00Sweater: $10.00Sleeveless: $3.00Polo: $8.00
Additional Size Costs XS: $1.00S: $2.00M: $3.00 L: $4.00XL: $5.00XXL: $6.00XXXL: $7.00
Empty Cart
$ 0.00


This document is used to test out the functionality of the smartImage library.
Feel free to scale the page and even go down mobile size - or open it on a retina device.
Test the minified version of smartImages
The following is one image tag that changes its souce depending on the viewport.
This image is directly assigned (check your console, it should be loaded at first):
This is an container that loads its background image with smartImages
You can even load multiple background images into an container:
The next image is lazy-loaded and uses dummy images to keep the browser from reflowing the document:
We need a bit space here, so the img won't be loaded directly =)
The following image has an additional custom source that is only displayed when the expression (min-width:
640px) and (max-width: 750px)
applies.
The following thing is an iframe that piggybags on the smartImage functionality by lazy loading the frame src property.
SmartImages normally only affects img
tags, and only sets the background
property on
containers with the data-smartImageContainer
attribute set.
When you provide the data-smartEntity
attribute, the library will treat the element as an image.


The ocean is one of the most unexplored parts of our planet, with a magnitude of undiscovered species and mysteries. It turns out from the studies conducted over the last few decades,
this magnificent environment is under serious threat from human intervention, with plastics set to outnumber fish by 2050.
Marine life, as we know it, is suffering irreparable damage from the chemical pollution of the waters and the millions of tons of mismanaged waste dumped in the oceans each year.
The result is a planetary crisis with over 100 million marine animal’s lives get lost every year, and the decay of the ocean's ecosystem.Almost 1,000 species of marine animals get
impacted by ocean pollution, and we now have over 500 locations recorded as dead zones where marine life cannot exist. How did this happen, what is causing the most damage, find out
everything below in the marine pollution statistics roundup.Over 2,000 species are currently on the ESA, and they are separated into "Threatened" and "Endangered" species. Endangered species are in danger of going extinct, while Threatened species
are approaching Endangered status.
Trailer: A Plastic Ocean
You don't have an account?
You already have an account?
Coral Extinction
For decades, marine scientists have been warning of the demise of coral reefs in a warming world. But now, those warning calls have reached a full-scale alarm, leaving researchers at a loss
for exactly how best to save the reefs. Due to the warming sea-surface temperatures, seawater acidification and plastic pollution, 50 percent of the world's coral reefs are now dead.
Reefs
occupy just 1% of the world’s marine environment, but they provide a home to a quarter of marine species—including a unique set of fish, turtles and algae. Many of these species could be
lost permanently.
The new study finds that 94 percent of surveyed coral reefs have experienced a severe bleaching event since the 1980s. Only six sites surveyed were unaffected. They are
scattered around the world, meaning no ocean basin on Earth has been entirely spared.
Some of the world’s top coral experts amounts to a last rites for the ecosystems often referred to
as “the tropical rainforests of the sea.” Scientists surveyed 100 reefs around the world and found that extreme bleaching events that once occurred every 25 or 30 years now happen about
every five or six years.
Bleaching happens when corals become overheated and expel the symbiotic algae that feed them. Without the algae to photosynthesize their food for them, corals
stop growing and become more susceptible to disease. If water temperatures remain too high for too long, the corals can die.
Netflix Video: Click here
Overfishing and Bycatch
Overfishing occurs when more fish are caught than the population can replace through natural reproduction. Gathering as many fish as possible may seem like a profitable practice, but
overfishing has serious consequences. The results not only affect the balance of life in the oceans, but also the social and economic well-being of the coastal communities who depend on fish
for their way of life. More than 30 percent of the world's fisheries have been pushed beyond their biological limits and are in need of strict management plans to restore them. Several
important commercial fish populations (such as Atlantic bluefin tuna) have declined to the point where their survival as a species is threatened. Target fishing of top predators, such as
tuna and groupers, is changing marine communities. Overfishing even effects the abundance of smaller marine species, such as sardines and anchovies.
Wherever there is fishing, there is
bycatch - the incidental capture of non-target species such as dolphins, marine turtles and seabirds. Thousands of kilometers of nets and lines are set in the world's oceans each day.
Modern fishing gear, often undetectable by sight and extremely strong, is very efficient at catching the desired fish species—as well as anything else in its path. A staggering amount of
marine life—including turtles, dolphins and juvenile fish - is hauled up with the catch, and then discarded overboard dead or dying. Fishing industry leaders increasingly realize the need
to reduce this phenomenon. Proven solutions do exist, such as modifying fishing gear so that fewer non-target species are caught or can escape. In many cases, these modifications are simple
and inexpensive, and often come from fishers themselves. Despite new technologies and industry recognition of the issue, bycatch is still a major problem. Not only does it cause avoidable
deaths and injuries, but the fishing methods can be harmful to the marine environments where they are employed.
Trailer: Seaspiracy
Trailer: Mission blue
Hawksbill Turtle
Found in the tropical regions of all the world’s oceans, gulfs and seas- mostly in coral reefs, the Hawksbill Turtle’s population has been estimated to have declined by 80% over the last century. Known to be a subject of heavy trafficking in the tourist trade in tropical regions for its meat and shells, these turtles are being killed mercilessly for quite a period of time. The colourful shells of the Hawksbill Turtle, with beautiful patterns, make them a valuable item in the market, often sold as “tortoiseshell.” Even though in many countries harvesting of its eggs is banned, the practice could not be ceased completely. The declination of its population has also resulted due to the degradation of coral reef species which the Hawksbill Turtle primarily feed on. According to marine conservatives, this family of the turtle is the living representatives of reptiles that have existed in our oceans for the past hundred million years and these turtles are vital for the existence of seagrass beds and coral reefs.
Steller Sea Lion
Evidently the largest member of the Otariid family and the fourth largest of all seal species, this eared seal could be located in the cold coastal waters of the North Pacific. Also known as
the northern sea lion, the species is named after Georg Wilhelm Steller, a naturalist who first discovered them in 1741. The high risk of predation by Killer Whales and fishing and harvest by
native Alaskans and Canadians for meat, oil, hides and other by-products make this marine life vulnerable to endanger. According to reports, its population has declined by more than 60% due
to both natural and human threats since the 1960s. However, the eastern Steller sea lion was omitted from the U.S. Endangered Species List in 2013 after their increasing population in recent
years.
Video: Click here


{{issue.Title}}
{{issue.Description}}
{{issue.DueDate | date}}
{{issue.Priority}}
Username: {{issue.Assignee.Username}}Id: {{issue.Assignee.Id}}
{{issue.AssigneeId}}
{{issue.Labels}}
Issue Title is required!
Description is required!
Due Date is required!
Available Priorities: {{issue.AvailablePriorities | json}}
To change Priority enter priority's Id from Available Priorities
Select only one priority:
Priority is required!
Curent Assignee is: {{issue.Assignee.Username}}
To change the assignee search user by Username:
Add new labels separated by a dot-comma:
[label-1; label-2;...]


A lightweight approach to building HTML5 applications with an emphasis on elegance and simplicity.
Brunch is an assembler for HTML5 applications. It’s agnostic to frameworks, libraries, programming, stylesheet & templating languages and backend technology. To simplify app development, brunch automatically:
Installation is one-line. You’ll need node.js. Execute in console: npm install -g brunch
.
brunch new <project-name>
will create new project. Now you can edit the code. See description of app structure. With --skeleton <url>
option you can specify custom app boilerplate.brunch build
will then fully build the project. With --optimize
flag it will be also minified.brunch watch
may be used for continuous incremental rebuild of the whole application. You can also use --server
flag to launch simple web server with pushstate support.
If you use OS X and want brunch to show system notification every time
compilation error happens, you will need
to install terminal-notifier: [sudo] gem install terminal-notifier
.
See the video that shows starting new app with Brunch:
Brunch has a plugin ecosystem to achieve interoperability with various stuff simply via plugin API.
For example, if you use JavaScript files in your project, you’ll need a plugin that adds JS support. Same with styles, templates, minifiers, linters and much more.
To install new plugin, simply execute npm install --save plugin-name
. This will install its node.js dependencies and save to package.json
.
To remove it, edit package.json
’s dependencies
hash.
See npm docs
for more docs on packages.
All plugins are available at the Plugins wiki page. Feel free to add your plugins to it. Some interesting plugins from there:
Brunch skeleton is basically an application boilerplate that provides a good starting point for new applications. Creating new application with any skeleton is pretty simple:
brunch new <app> --skeleton <address>
Brunch doesn’t encourage you to use any particular technology, but application skeletons can do it.
If you create your own open-source skeleton, feel free to add it to the wiki page, which contains over 40 skeletons for now. Some interesting skeletons from there:
If you need scaffolding, there is a separate
scaffolt project,
which was once used to be a part of brunch as brunch generate
.
It is the simplest one, with implementation based on JSON scaffolder specifications and Handlebars templates for stuff.
Use it like this: scaffolt model user
.
If you need console test runner and don’t want to launch browser,
there is a separate
mocha-phantomjs project,
a successor of brunch test
command.
Use it like this: mocha-phantomjs public/test/index.html
.
 You can host them everywhere, even on free hostings, like GitHub pages.
Because production environments are usually
slightly different than development envs,
brunch has minify option. To build application
that has minified JS and CSS, execute brunch build --optimize
.
Then you can deploy it:
public/
directory to the directory that is served by a webserver.
public/
directory to somewhere,
switch to gh-pages
git branch,
remove files from directory and move files from your temporary
dir here.
Brunch is similar to Yeoman, LiveReload and CodeKit. And it’s also different. Here’s a quick table that compares their features.
Google’s Yeoman builder is the most popular alternative to Brunch. See the Differences between brunch and Yeoman for more information.
| Feature | Brunch | Grunt / Yeoman | LiveReload | CodeKit | Comment |
|---|---|---|---|---|---|
| Builder, linter, concatenator, minifier | ✓ | ✓ | ✓ | ✓ | Brunch can compile your JS, CoffeeScript, Stylus, Sass (+ Compass), LESS, Mustache, Handlebars, Jade, Eco (and much more) files, concatenate output to and minify it. It just doesn’t care about languages or frameworks you use. |
| File watcher | ✓ | ✓ | ✓ | ✓ | Brunch recompiles and concats all your stuff automatically on any change, headlessly. No more need in compicated Makefiles and watchers. |
| Automatic browser reloading | ✓ | ✓ | ✓ | ✓ | Brunch reloads your browser window every time you change stuff. (with autoreload plugin) |
| Blazing fast recompilation | ✓ | ✗ | ✗ | ✗ | Speed is important for app watchers. Usual brunch compilation takes less than 100ms. Unlike Grunt, Brunch recompiles only changed parts of your app and extensively uses caching for others. You can use Brunch features in your node.js projects without mess. |
| Super simple | ✓ | ✗ | ✓ | ✓ | All you need to do with Brunch is run one command and everything will be managed for you, without need to write sophisticated 300LOC build configs. |
| Automatic wrapping of scripts in modules | ✓ | ✓ | ✗ | ✗ | All script and template files in `app/` directory are wrapped in modules (CommonJS or AMD) to prohibit global public access and encapsulate code. |
| OS X Notification Center / Growl / Inotify output for errors | ✓ | ✗ | ✗ | ✓ | If any compiler throws an error, brunch displays it as detailed notification. |
| Built-in webserver | ✓ | ✓ | ✗ | ✗ | Brunch has a webserver that runs on `public` directory and an API for simple custom webservers. |
| Skeletons (boilerplates) | ✓ | ✓ | ✗ | ✗ | Brunch can generate your project from predefined template. There’s a lot of great skeleton projects you can use already. |
| Package manager | ✗ | ✓ | ✗ | ✗ | Brunch does not have frontend package manager integration currently, but it is coming in the next release. |
| Cross-platform | ✓ | ✓ | ✗ | ✗ | Brunch works everywhere. |
| Free | ✓ | ✓ | ✗ | ✗ | Brunch is free, both as in beer and as in speech. |
We know of a few folks who are using brunch already. Ranging from internal tooling to high traffic facebook apps.
Ostio is an open-source forum for GitHub projects (code). Uses default Chaplin as app skeleton and Rails for backend.
Todos (code) is a port of the famous backbone todos example app. Uses localStorage to persist data.
Hackerank is an example app that finds the top hackers of a github repo search. Uses brunch with hipsters as base skeleton.
Ember-bloggr is a simple demo app based on the Building an App with Ember.js video.
Delicious is a free service designed to be the best place to save what you love on the web, whether it's a video, picture, product, blog post, article or music. We then help you remember and find it later. It’s using Brunch as application builder and Chaplin as a framework on top of Backbone.
Blossom is a lightweight project management tool for lean teams. Backbone.js is heavily used in combination with CoffeeScript to provide a smooth interaction experience. The RESTful backend is built with Flask on Google App Engine.
ChainCal is an iPhone app that helps you to track your daily goals in a minimalist, visual way. The app is written almost entirely in CoffeeScript, Backbone handles the models, collections and views, and persistence is done with a Backbone.sync localStorage adapter. Templates are written in Eco and the app is packaged with Brunch and deployed with Phonegap.
Uber is everyone’s private driver. Their clients app is made with brunch.
Cozy Cloud is your own private personal cloud. A server you can trust to store your personal data and host web apps. You can host it with us at Cozy or host it at home, it's up to you!
Cozy cloud aims at using only standard execution environments. For each of them they suggest a coherent set of powerful technologies.
Follow @brunch and @paulmillr on twitter to get latest updates & news. Feel free to discuss things with other users and ask for help in our ost.io forum section. You can also ask questions with #brunch tag at Stack Overflow
If you want to add something new to brunch or create your own plugin, contributing guidelines can help you.
There are also some text editor plugins that simplify developing apps:
Paul, brunch core dev is offering commercial support, consulting and training for Brunch, Chaplin and Backbone-based web applications. Send him an email for more information.
Are you providing Brunch consulting too? Place yourself here!