Personalised one-on-one Xero training. Teaching you to use Xero like a pro. Empowering you to confidently take on your day-to-day bookkeeping, while knowing Rock Steady is there to support you with the challenging and complex bookkeeping.
Halee Moss is a professional, certified bookkeeper and the founder of Rock Steady Bookkeeping. She’ll teach you all you need to know to minimise stress and inaccuracies and maximise insights into your business finances. All through using Xero accounting software in your small business.
Halee will come to you for personalised training in Christchurch, or educate you online via Skype throughout New Zealand. Personalised training ensures you receive the right information and advice for your level of understanding and business needs.
"Having previously run a successful small business for 7 years, I understand the particular challenges that you face in your own small business.
Are you wondering if you’re using Xero correctly and to its full potential?
Get in touch and I’ll help you take your skills to the next level. Your business deserves it."
A common scenario is a small business owner who wants to take control of their finances with Xero:
Firstly, the business owner has a conversation with Halee so that she understands their needs and what the training must cover.
Secondly, Halee at Rock Steady will set-up the business in Xero or migrate the existing accounts over if this is needed.
Thirdly, the business owner upskills through an in-depth personalised two hour training session with Halee, at their premises or online. In this session they’ll gain the skills to manage Xero themselves. With the session Halee provides her ‘Rock Steady Xero Cheatsheet’ that the business owner can take away for later reference.
Finally, over the following weeks and months, Halee is available to help with specific questions and to provide more advanced training or services.
Get expert help to ensure Xero is set-up correctly, to fit the needs of your new business.
Converting from another accounting system to Xero can be complex and time consuming, but it’s very worth while. I can help to make the transfer of your financial information as smooth as possible.
Learning to use new software can be frustrating and take a long time. I provide friendly, personalised training to fast track your learning and teach you everything you need to know about Xero.
If something in Xero doesn’t look right and you just can’t work it out, get in touch. I can offer advice and assistance when you need it. It’s good to know someone’s got your back.
Whether it’s payroll, GST returns, financial reports or budgets, there’s bound to be some bookkeeping you’d rather not do yourself. I can take care of the entire bookkeeping for your business or specific areas that you want to avoid.
Give Halee (pronounced Hay-lee) a call now for a no-obligation chat about Xero and bookkeeping for your business!
021 067 2319


A non-profit organization that was established in the United States in 1998 to help maintain the security of the Internet, and allow it to be usable by all. Anytime you register a domain on the Internet, you go through a domain name registrar, who pays a small fee to ICANN to register your domain as part of the domain registration process.While ICANN doesn’t control what content goes on the Internet, meaning it cannot regulate Internet access or help to stop spam from occurring, it does help keep the web safe by developing and enforcing policy on the Internet’s unique identifiers. These unique identifiers are the name and number that you type into the address bar when conducting a search for a given site. The address for that site has to be unique so computers know where to find each other.
By helping to coordinate these unique identifiers all over the world, ICANN allows us to have a global Internet. In doing so, ICANN also helps promote competition on the web and plays a vital role in the expansion and evolution of the Internet.
The main role of ICANN is to make the Internet run smoothly all over the world. This is more commonly known as “universal resolvability.” This term means that you get the same results when you access the network, no matter where you are in the world. This gives us one Internet, rather than an experience that works differently depending on your location.
Domains are sold by registrars. There is no single registrar that rules over all domains, but rather a vast network. These registrars can charge whatever they want for a domain, but each registrar has to pay a set per-domain fee to the appropriate registry in which the domain is being registered. ICANN has contracts with each of these registries and runs an accreditation system for registrars. This system of checks and balances provides the stable domain name environment, which gives us an open Internet.


SILICANTS
The idea for the Silicants came to me when I was creating short stories about Devon Ardel and her Stellar Rangers on the planet Ocherva. My first ever short story when I was in Middle School was about androids meeting in a saloon that forbid humans and aliens. The androids were talking about a revolution they were planning against the humans. I loved the idea of using a human bar to covertly conspire against their makers. I decided to rewrite that story and two primary Silciant characters emerged: Thirty-seven and Eighty-right. Eighty-eight was giving the other android an upgrade chip that would make it sentient. After the operation, Eighty-eight became the mentor for Thirty-seven, making sure the newly sentient android knew how to exist as a person and still make its owner believe it was just a normal android. Of course its owner was Devon Ardel.
Both of these sentient androids were explored in those stories now under the anthology - Tales From Ocherva, Vol 1. Gradually a completed the back story about how the Silicants emerged, and they became central players in the Star Saga. They were the only characters who exist in each of the three time periods as they do not die from old age, like the human characters. The upgrade chip that silicants were fitted with made them sentient, but they could not figure out how it worked.  For the Silicants, the silica that existed on Ocherva and from which their chips were made, seemed to have some kind of strange power to make them sentient. Chips made with silica from other worlds did not enable their existance. So the planet Ocherva became a central place for both Silicants and humans. The humans were affected by smoking the Ocha weed, my version of a tumble weed. It allowed most humans to see the future and that affect in turn moved the plot for some of the main characters in the Starforgers Trilogy. I'll come back again to Ocherva in the final Star Saga trilogy.


Nurtured from the seed of a single great idea - to empower the traveller - MakeMyTour is a pioneer in Pakistans’s online travel industry. , MakeMyTour came to life to empower the Pkistan traveller with instant bookings and comprehensive choices. The company initiated its journey serving the travel market offering a range of best-value products and services powered by technology and round-the-clock customer support.
After consolidating its position in the market as a brand recognised for its reliability and transparency.


Library: Crypto
Package: RSA
Header: Poco/Crypto/RSADigestEngine.h
Description
This class implements a Poco::DigestEngine that can be used to compute a secure digital signature.
First another Poco::Crypto::DigestEngine is created and used to compute a cryptographic hash of the data to be signed. Then, the hash value is encrypted, using the RSA private key.
To verify a signature, pass it to the verify() member function. It will decrypt the signature using the RSA public key and compare the resulting hash with the actual hash of the data.
Inheritance
Direct Base Classes: Poco::DigestEngine
All Base Classes: Poco::DigestEngine
Member Summary
Member Functions: digest, digestLength, reset, signature, updateImpl, verify
Inherited Functions: digest, digestFromHex, digestLength, digestToHex, reset, update, updateImpl
Enumerations
DigestType
Constructors
RSADigestEngine
RSADigestEngine(
const RSAKey & key,
DigestType digestType = DIGEST_SHA1
);
Deprecated. This function is deprecated and should no longer be used.
Creates the RSADigestEngine with the given RSA key, using the MD5 or SHA-1 hash algorithm. Kept for backward compatibility
RSADigestEngine
RSADigestEngine(
const RSAKey & key,
const std::string & name
);
Creates the RSADigestEngine with the given RSA key, using the hash algorithm with the given name (e.g., "MD5", "SHA1", "SHA256", "SHA512", etc.). See the OpenSSL documentation for a list of supported digest algorithms.
Throws a Poco::NotFoundException if no algorithm with the given name exists.
Destructor
~RSADigestEngine
~RSADigestEngine();
Destroys the RSADigestEngine.
Member Functions
digest
const DigestEngine::Digest & digest();
Finishes the computation of the digest (the first time it's called) and returns the message digest.
Can be called multiple times.
digestLength
std::size_t digestLength() const;
Returns the length of the digest in bytes.
See also: Poco::DigestEngine::digestLength()
reset
void reset();
Resets the engine so that a new digest can be computed.
See also: Poco::DigestEngine::reset()
signature
const DigestEngine::Digest & signature();
Signs the digest using the RSA algorithm and the private key (teh first time it's called) and returns the result.
Can be called multiple times.
verify
bool verify(
const DigestEngine::Digest & signature
);
Verifies the data against the signature.
Returns true if the signature can be verified, false otherwise.
updateImpl
void updateImpl(
const void * data,
std::size_t length
);
See also: Poco::DigestEngine::updateImpl()


Thank you for purchasing the EZProxy extension for Safari. This short help section provides a high level overview of the settings and details you will need to configure the extension correctly.
Many major universities, colleges and public institutions use OCLC's EZProxy to provide off-campus access to journals, book chapters, and more. To configure the EZProxy using this service you'll just need an access 'domain' from your institution.
Typically these configuration domains will look like:
access.library.unisa.edu.au
proxy.library.adelaide.edu.au
ezproxy.library.sydney.edu.au
ezproxy.deakin.edu.au
ezproxy.waikato.ac.nz
ezproxy.lib.cam.ac.uk:2048
Recommended settings for EZProxy services are already set and ready to go when you download the app. All you need to do is provide the domain name (i.e. like the examples above). If you think you've changed something by accident, the 'advanced' tab in the app should have neither box checked.
Some institutions may support or require SSL for proxy requests. Usually, the URL will look something like: https://ezproxy.library.institution.edu/
. In these instances you'll need to turn on SSL in the advanced settings in the app. Go to the Advanced tab and check the top checkbox. This is not standard practice, but may be a technical requirement so if you're having trouble try this option.
Remember: your library proxy URL should never include the http://
or https://
or anything following the URL, i.e. /access?=
Some institutions have begun to move to OpenAthens' services for proxying requests to journals. In some instances these co-exist with hosted EZProxy provisions, in other cases OpenAthens completely replaces EZProxy. If your institution is following the latter, you'll need to provide your institution's OpenAthens identifier and check the My library uses OpenAthens box in the Advanced tab.
OpenAthens identifiers are relatively simple and usually are just your institutions "TLD" or main domain name, for example:
unimelb.edu.au
unisa.edu.au
www.monash.edu
There are some libraries which use library.domain.edu
as the identifier. If in doubt, search your library's help guides on off-campus access or try entering your institution's domain name. OpenAthens can also automatically resolve some domain names if you're unsure.
Once you're happy with the configuration you'll need to enable the extension in Safari. From main window (close this help guide) click the "Open Safari Preferences" button at the top left of the window. Safari should open and the Settings will appear, go to the "Extensions" tab and click the checkbox next to EZProxy Button. You will likely receive a notice about the app being able to "read any website", this is to enable the button's functionality. This app has been purpose built so that no data, telemetry or details about you ever leave your device. Anything you visit or do is entirely private and is not recorded by this app.
If you have any privacy concerns, you are welcome to examine the completely open source code for this app and raise any issues or security concerns there. For information, open the "About EZProxy" window from this app.
If you can't make things work, please don't hesitate to get in touch. Sometimes two heads are better than one. You are welcome to contact me for support via<EMAIL_ADDRESS>(I'm Aidan, by the way, good to meet you. I'm an academic by day and develop this app in my spare time to help researchers and students just like you.)
Thanks again for purchasing this app. I hope it makes your off-campus research and learning easier.


 Now please decide how much you will keep for yourself.
{% formfield group.kept %} {% next_button %} {% if player.treatment == 'person' %} {% include Constants.instructions_template %} {% else %} {% include Constants.charity_instructions_template %} {% endif %} {% endblock %}


Alpaca - JSON Forms for jQuery and Bootstrap
Alpaca provides the easiest and fastest way to generate interactive forms for the web and mobile devices. It runs simply as HTML5 or more elaborately using Bootstrap, jQuery Mobile or jQuery UI. Alpaca uses Handlebars to process JSON schema and provide developers with an extensible framework for implementing controls, wizards, layouts, I18N support and an custom data persistence.
The goal of Alpaca is to provide the open source community with a fantastic forms engine that rivals or beats what most proprietary vendors offer. Using Alpaca, you can host really nice forms for your back end services, whether they are proprietary, enterprise or SaaS offerings.
The philosophy behind Alpaca is that you should design your forms once and have them work on lots of different devices and UI engines without having to do the same work twice.
Here is a sample registration form written once and rendered using four different approaches:
Alpaca is an open-source project licensed under Apache 2.0. It was started in 2010 and has been growing steadily since thanks to a really awesome community of customers, consultants and technology champions world-wide.
Web Site, Documentation and CDN
For information, demos and documentation regarding Alpaca, please visit the the Alpaca Forms web site.
All of the Alpaca distribution assets are available via CDN at http://code.cloudcms.com. For more information, visit the Alpaca Forms web site.
Sponsors
Cloud CMS is actively developed and maintained by Cloud CMS.
Cloud CMS is an API-First, JSON-friendly Content Management Platform for mobile and web applications. It provides the ideal backend for Alpaca forms design, capture and reporting. Stop by our web site to learn more about Cloud CMS.
The project also has a large number of customers who use Alpaca, contribute code and receive support, some of whom are listed on our web site.
Official Support
We offer paid support for your technical development and production environments. Paid support includes a service level agreement for priority response and bug fixes.
If you are interested in sponsoring or are interested in consulting services, please Contact Us.
Community
We have an awesome community. Everything is straight up out in the open and anyone can build or contribute. We keep everything under an Apache 2.0 license so that you're free to do whatever you please with Alpaca.
There are several ways to interact with the Alpaca community.
- Browse the documentation and try out the interactive examples. On each page, you'll find a Disqus forum that you can use to ask questions specific to that page. As others browse the documentation, they'll find your question and will have the context at hand to answer it.
- Visit the Alpaca.js web site and ask your question to the broader Alpaca community. Be sure to include code samples, URLs or http://jsfiddle.net/ links so that others can reproduce your scenario quickly. It's always best to empower others to help you.
- Add a GitHub Issue if you've found an actual bug or have a feature request that you'd like to get prioritized into the roadmap.
- Submit a Pull Request if you've fixed a bug and want to contribute code back to the Alpaca project. This is the most powerful and effective way to influence the product. Pull requests give you a way to write your own additions or adjustments to the code base and make it very easy for us to merge your changes into the product.
- Get Developer Assistance if you have an urgent issue and would like priority paid support. Cloud CMS and/or its partners provide fast and reliable developer assistance for your projects.
Extensibility
Alpaca is designed to be very extensible, allowing you to plug in new field implementations, DOM layouts, callbacks, CSS classes, I18N bundles and much more. It also integrates naturally to HTTP service backends using a connector layer.
Alpaca is ideal for consultants or organizations that wish to have a solid JavaScript form engine that provides a platform that they can grow into for current and future project needs.
Can I fork Alpaca and use it my own projects?
Yes, absolutely. That's the whole idea.  We hope that Alpaca is useful to you.
If you come up with something good (like a bug fix or a new feature), consider submitting a Pull Request back to the project so that others may benefit.
Compatibility
The latest release of Alpaca is compatible with jQuery 1.9.1 and up. For a full breakdown of dependencies, check the
bower.json and/or /lib
directory for third-party vendor libraries and versions that are used.
In general, we aspire to support the latest versions of our third-party dependencies. Some folks may want Alpaca to be backward-compatible with earlier versions of dependencies and in general, it is our desire to have it be so. But in cases where that is not possible, we will opt for the latest. In those cases, we recommend folks fall back to an earlier version of Alpaca.
How to Build Alpaca
The first thing you should do is grab the source. We won't cover how to do that here but instead we recommend that you learn about Git and GitHub. You can pull the source down to your local machine to build things locally.
The command line for doing this is basically:
git clone https://github.com/gitana/alpaca.git
Prerequisites
To build Alpaca, you will need to have Node.js, Gulp and Bower installed. If you're new to Node.js or Gulp, you could check out this writeup - http://travismaynard.com/writing/getting-started-with-gulp.
Once you have Node.js installed, you essentially need to do this:
npm install -g gulp
npm install -g bower
Alpaca requires python 2.7.x to build some of it's node_module dependencies. Make sure you have this installed. If you're currently using Python 3.x, you will need to tell the build to use 2.7.x:
npm install --python=python2.7
(or)
npm config set python python2.7
Building Alpaca
Building Alpaca is pretty easy. Just run:
npm install
This will do the following for you:
- pull down all of the Node module dependencies
- run Bower to pull down client-side (browser) dependencies
To then build, you can do this:
npm start
If you want to use Gulp directly, you can alternatively run this:
gulp clean default
Either npm start
or gulp clean default
will build everything.
The build distribution assets will be in build/alpaca
.
Building the Web Site and Running a local Web Server
Alpaca includes a web site along with documentation, samples and much more. To build the web site, you will first need to install Jekyll (not covered here).
Simply do this:
gulp site
And you can run a local web server like this:
gulp server
Alpaca Distributions
The build produces four sets of assets and they are placed in:
build/alpaca/web
(for basic web forms and layout)build/alpaca/bootstrap
(for bootstrap enabled forms and layout)build/alpaca/jqueryui
(for jQuery UI enabled forms and layout)build/alpaca/jquerymobile
(for jQuery Mobile enabled forms and layout)
Each directory contains a JS file and a CSS file for its respective build.
Each JS file is UMD ready and will work within both an AMD and CommonJS container.
Troubleshooting
If you run into any Bower related issues during the build, you might want to clear out your Bower cache using this command:
bower cache clean
And then try again.
Manual build commands
While npm install
will pretty much do everything for you, there are also some manual commands you can run if you
need to perform individual steps:
- To install Bower assets, do
bower install
- To clear Bower cache, do
bower cache clean
- To run the Gulp build, do
gulp
- To build the Alpaca web site, do
gulp default server
- To run a local Alpaca web server,
gulp default server
Contributors
Here is a long list of our project's brothers and sisters in arms.
These folks have made numerous contributions to Alpaca over the years:
- @cloudcms
- @uzquiano
- @harrymoore
- @yaworsw
- @drq
- @Maethorin
- @jlanders68
- @JocelynDelalande
- @Ognian
- @globocom
- @urba
- @colegatron
- @Kirosoft
- @1337
- @jkernagis2
- @ASchriever
- @hooflung64
- @Shadowsrik
- @deviant32
- @vikramsawant786
- @tylerperyea
- @picsoung
- @jmcgdz
- @ytaka
- @jflowers45
- @paierh
- @darmar
- @arthurportas
- @emircal
- @xaviergonz
- @musicist288
- @mschnee
- @Uxio0
- @mll5
- @PoltoS
- @billbarsch
- @vittala
- @robustified
- @cniesen
- @degenhard
- @robsiera
- @cheeweep
- @j123b567
- @scadams
- @ryanmark
- @techbrew-mc
- @st3v
- @basvandenheuvel
- @simonemedasfedro
- @78Gills
- @PirateSteve
- @dthompsonza
- @ousou
- @azahid
...and many others via the Alpaca Web Site and Alpaca Issues!


A new programming language called Swift was announced at WWDC'14. Here's a source-to-source comparison of Swift and Scala using the examples given in "The Swift Programming Language" book published by Apple in the iTunes Store.
I suspect the two are related ;-) Syntacticly, it's fair to say that Swift is a dialect of Scala. Swift inherits from Scala most of the "banner" features listed by Apple: Type Inference, Closures, Tuples, Protocols, Extensions, Generics, Read-Eval-Print-Loop, etc.
Despite their syntactic similarity, Swift's runtime environment is quite distinct from Scala's, and is perhaps the most interesting aspect of the new language. Scala compiles to the JVM, uses garbage collection, and its object model transparently integrates with Java. Swift compiles to native code, uses automatic reference counting, and its object model transparently integrates with Objective-C. Thus, the similarity between the two languages does not extend much below the surface.
Den Shabalin provides another excellent point-by-point comparison.
p.s. Don't take this code too seriously! Most of it is rote, minimalistic translation of the Swift examples given by Apple. I give a handful of more idiomatic Scala translations. Feel free to submit a GitHub issue/pull request if you find anything unbearably crass.
var myVariable = 42
myVariable = 50
let myConstant = 42
var myVariable = 42
myVariable = 50
val myConstant = 42
let label = "The width is "
let width = 94
let widthLabel = label + String(width)
val label = "The width is "
val width = 94
val widthLabel = label + width
let apples = 3
let oranges = 5
let fruitSummary = "I have \(apples + oranges) " +
"pieces of fruit."
val apples = 3
val oranges = 5
val fruitSummary = s"I have ${apples + oranges} " +
" pieces of fruit."
let names = ["Anna", "Alex", "Brian", "Jack"]
let count = names.count
for i in 0..count {
println("Person \(i + 1) is called \(names[i])")
}
// Person 1 is called Anna
// Person 2 is called Alex
// Person 3 is called Brian
// Person 4 is called Jack
val names = Array("Anna", "Alex", "Brian", "Jack")
val count = names.length
for (i <- 0 until count) {
println(s"Person ${i + 1} is called ${names(i)}")
}
// Person 1 is called Anna
// Person 2 is called Alex
// Person 3 is called Brian
// Person 4 is called Jack
for index in 1...5 {
println("\(index) times 5 is \(index * 5)")
}
// 1 times 5 is 5
// 2 times 5 is 10
// 3 times 5 is 15
// 4 times 5 is 20
// 5 times 5 is 25
for (index <- 1 to 5) {
println(s"$index times 5 is ${index * 5}")
}
// 1 times 5 is 5
// 2 times 5 is 10
// 3 times 5 is 15
// 4 times 5 is 20
// 5 times 5 is 25
var shoppingList = ["catfish", "water",
"tulips", "blue paint"]
shoppingList[1] = "bottle of water"
var shoppingList = Array("catfish",
"water", "tulips", "blue paint")
shoppingList(1) = "bottle of water"
var occupations = [
"Malcolm": "Captain",
"Kaylee": "Mechanic",
]
occupations["Jayne"] = "Public Relations"
var occupations = scala.collection.mutable.Map(
"Malcolm" -> "Captain",
"Kaylee" -> "Mechanic"
)
occupations("Jayne") = "Public Relations"
let emptyArray = String[]()
let emptyDictionary = Dictionary<String, Float>()
let emptyArrayNoType = []
val emptyArray = Array[String]()
val emptyDictionary = Map[String, Float]()
val emptyArrayNoType = Array()
func greet(name: String, day: String) -> String {
return "Hello \(name), today is \(day)."
}
greet("Bob", "Tuesday")
def greet(name: String, day: String): String = {
return s"Hello $name, today is $day."
}
greet("Bob", "Tuesday")
def greet(name: String, day: String): String =
s"Hello $name, today is $day."
greet("Bob", "Tuesday")
func getGasPrices() -> (Double, Double, Double) {
return (3.59, 3.69, 3.79)
}
def getGasPrices(): (Double, Double, Double) = {
return (3.59, 3.69, 3.79)
}
def getGasPrices = (3.59, 3.69, 3.79)
func sumOf(numbers: Int...) -> Int {
var sum = 0
for number in numbers {
sum += number
}
return sum
}
sumOf(42, 597, 12)
def sumOf(numbers: Int*): Int = {
var sum = 0
for (number <- numbers) {
sum += number
}
return sum
}
sumOf(42, 597, 12)
Array(42, 597, 12).sum
func makeIncrementer() -> (Int -> Int) {
func addOne(number: Int) -> Int {
return 1 + number
}
return addOne
}
var increment = makeIncrementer()
increment(7)
def makeIncrementer(): Int => Int = {
def addOne(number: Int): Int = {
return 1 + number
}
return addOne
}
var increment = makeIncrementer()
increment(7)
def makeIncrementer: Int => Int =
(number: Int) => 1 + number
var increment = makeIncrementer
increment(7)
var numbers = [20, 19, 7, 12]
numbers.map({ number in 3 * number })
var numbers = Array(20, 19, 7, 12)
numbers.map( number => 3 * number )
func area(#width: Int, #height: Int) -> Int {
return width * height
}
area(width: 10, height: 10)
def area(width: Int, height: Int): Int = {
return width * height
}
area(width = 10, height = 10)
class Shape {
var numberOfSides = 0
func simpleDescription() -> String {
return "A shape with \(numberOfSides) sides."
}
}
class Shape {
var numberOfSides = 0
def simpleDescription(): String = {
return s"A shape with $numberOfSides sides."
}
}
class Shape (var numberOfSides: Int = 0) {
def simpleDescription =
s"A shape with $numberOfSides sides."
}
var shape = Shape()
shape.numberOfSides = 7
var shapeDescription = shape.simpleDescription()
var shape = new Shape()
shape.numberOfSides = 7
var shapeDescription = shape.simpleDescription()
class NamedShape {
var numberOfSides: Int = 0
var name: String
init(name: String) {
self.name = name
}
func simpleDescription() -> String {
return "A shape with \(numberOfSides) sides."
}
}
class Square: NamedShape {
var sideLength: Double
init(sideLength: Double, name: String) {
self.sideLength = sideLength
super.init(name: name)
numberOfSides = 4
}
func area() -> Double {
return sideLength * sideLength
}
override func simpleDescription() -> String {
return "A square with sides of length
\(sideLength)."
}
}
let test = Square(sideLength: 5.2, name: "my test square")
test.area()
test.simpleDescription()
class NamedShape(var name: String,
var numberOfSides: Int = 0) {
def simpleDescription =
s"A shape with $numberOfSides sides."
}
class Square(var sideLength: Double, name: String)
extends NamedShape(name, numberOfSides = 4) {
def area = sideLength * sideLength
override def simpleDescription =
s"A square with sides of length $sideLength."
}
val test = new Square(5.2, "my test square")
test.area
test.simpleDescription
var movieCount = 0
var songCount = 0
for item in library {
if item is Movie {
++movieCount
} else if item is Song {
++songCount
}
}
var movieCount = 0
var songCount = 0
for (item <- library) {
if (item.isInstanceOf[Movie]) {
movieCount += 1
} else if (item.isInstanceOf[Song]) {
songCount += 1
}
}
var movieCount = 0
var songCount = 0
for item in library {
switch item {
case let movie as Movie:
++movieCount
println("Movie: '\(movie.name)', dir. \(movie.director)")
case let song as Song:
++songCount
println("Song: '\(song.title)'")
}
}
var movieCount = 0
var songCount = 0
for (item <- library) {
item match {
case movie: Movie =>
movieCount += 1
println(s"Movie: '${movie.name}', dir. ${movie.director}")
case song: Song =>
songCount += 1
println(s"Song: '${song.title}'")
}
}
for object in someObjects {
let movie = object as Movie
println("Movie: '\(movie.name)', dir. \(movie.director)")
}
for (obj <- someObjects) {
val movie = obj.asInstanceOf[Movie]
println(s"Movie: '${movie.name}', dir. ${movie.director}")
}
protocol Nameable {
func name() -> String
}
func f<T: Nameable>(x: T) {
println("Name is " + x.name())
}
trait Nameable {
def name(): String
}
def f[T <: Nameable](x: T) = {
println("Name is " + x.name())
}
extension Double {
var km: Double { return self * 1_000.0 }
var m: Double { return self }
var cm: Double { return self / 100.0 }
var mm: Double { return self / 1_000.0 }
var ft: Double { return self / 3.28084 }
}
let oneInch = 25.4.mm
println("One inch is \(oneInch) meters")
// prints "One inch is 0.0254 meters"
let threeFeet = 3.ft
println("Three feet is \(threeFeet) meters")
// prints "Three feet is 0.914399970739201 meters"
object Extensions {
implicit class DoubleUnit(d: Double) {
def km: Double = { return d * 1000.0 }
def m: Double = { return d }
def cm: Double = { return d / 100.0 }
def mm: Double = { return d / 1000.0 }
def ft: Double = { return d / 3.28084 }
}
}
import Extensions.DoubleUnit
val oneInch = 25.4.mm
println(s"One inch is $oneInch meters")
// prints "One inch is 0.0254 meters"
val threeFeet = 3.ft
println(s"Three feet is $threeFeet meters")
// prints "Three feet is 0.914399970739201 meters"
object Extensions {
implicit class DoubleUnit(d: Double) {
def km = d * 1000.0
def m = d
def cm = d / 100.0
def mm = d / 1000.0
def ft = d / 3.28084
}
}
import Extensions.DoubleUnit
val oneInch = 25.4.mm
println(s"One inch is $oneInch meters")
// prints "One inch is 0.0254 meters"
val threeFeet = 3.ft
println(s"Three feet is $threeFeet meters")
// prints "Three feet is 0.914399970739201 meters"
2014 July 16 - Added additional comparisons to 'idiomatic' Scala usage.
2014 July 16 - Pattern match example from Fredrik Ekholdt.
2014 June 4 - Cleanup of Subclass from Gerald Loeffler.
2014 June 4 - Added typecasting, protocols, and extensions.


This demo illustrates how D3 leverages ordinal scales to translate from a discrete data-domain to a discrete output range. To view it in action, fork/clone this repository and run a local server. See the GitHub Repo for the underlying code.


New Project Wizard
The New Project wizard helps you create a new C or C++ project in the workbench. To access the wizard, from the menu bar select File > New > Project. The New Project wizard appears:
With the New Project wizard you can choose to:
- Create C Project
- Create C++ Project
You can either provide your makefile to build new project, or let CDT generate makefile automatically. In CDT 3.x, there were 2 different project types: "Managed make" and "Standard make", respectivelly
Currently, these features are combined in the single project. In most cases, you can switch makefile generation ON or OFF at any time after project creation.
Tutorial: Creating a simple application
Set Project Name and Location
Select Project type
Select toolchain
Select configurations


In this blog post we are going to talk about istio and virtual machines on top of Kubernetes. Some of the components we are going to use are istio, libvirt, ebtables, iptables, and tproxy. Please review the links provided for an overview and deeper dive into each technology
Kubernetes networking model is suited for containerized applications, based mostly around L4 and L7 services, where all pods are connected to one big network. This is perfectly ok for most use cases. However, sometimes there is a need for fine-grained network configuration with better control. Use-cases such as L2 networks,...
Gluster seems like a good fit for storage in kubernetes and in particular in kubevirt. Still, as for other storage backends, we will likely need to use a golden set of images and deploy vms from them.
Access to KubeVirt resources are controlled entirely by Kubernete’s Resource
Based Access Control (RBAC) system. This system allows KubeVirt to tie directly
into the existing authentication and authorization mechanisms Kubernetes
already provides to its core api objects.
The KubeVirt project provides extensions to Kubernetes via custom resources.

Kubernetes is traditionally used to deploy and manage containerized applications. Did you know Kubernetes can also be used to deploy and manage virtual machines? This guide will walk you through installing a Kubernetes environment backed by GlusterFS for storage and the KubeVirt add-on to enable deployment and management of VMs....
In this blog post we are exploring the possibilities of deploying Kube Virt on top of Open Shift which is running inside an oVirt VM. First we must prepare the environment. In my testing I created a VM with 4 cpus, 14G memory and a 100G disk. I then installed...
In this post we will research and discover how KubeVirt networking functions along with Kubernetes objects services and ingress. This should also provide enough technical details to start troubleshooting your own environment if a problem should arise. So with that let’s get started.
The very first KubeVirt release of KubeVirt in the new year
(https://github.com/kubevirt/kubevirt/releases/v0.2.0) had a few
notable highlights which were brewing over the last few weeks.
This release follows v0.0.4 and consists of 115 changes, contributed by
11 people, leading to 121 files changed, 5278 insertions(+), 1916
deletions(-).
This release follows v0.0.3 and consists of 133 changes, contributed by
14 people, leading to 109 files changed, 7093 insertions(+), 2437
deletions(-).


Class Delete
removes records from a PDO connected resource
-
DSchoenbauer\Sql\Command\Delete
implements
DSchoenbauer\Sql\Command\CommandInterface
uses
DSchoenbauer\Sql\Command\WhereTrait
Methods summary
public
|
|
public
boolean
|
#
execute( PDO $pdo )
takes the SQL and the data provided and executes the query with the data
takes the SQL and the data provided and executes the query with the data
Parameters
- $pdo
- a connection object that defines where the connection is to be executed
Returns
boolean TRUE on success or FALSE on failure.
Throws
Since
v1.0.0
Implementation of
|
public
array
|
#
getData( )
retrieves the data that is uses to fulfill the requirements of a prepared
statement
retrieves the data that is uses to fulfill the requirements of a prepared
statement
Returns
array a single level associative array containing keys that
represent the fields and values that represent items to fulfill the
requirements of a prepared statement
Since
v1.0.0
Implementation of
|
public
string
|
#
getSql( )
Generates a SQL statement ready to be prepared for execution with the intent of removing data
Generates a SQL statement ready to be prepared for execution with the intent of removing data
Returns
string a string that represents a delete statement ready to be prepared by PDO
Since
v1.0.0
Implementation of
|
public
string
|
#
getTable( )
retrieves the table with which you wish to remove from
retrieves the table with which you wish to remove from
Returns
string table with which you wish to remove from
Since
v1.0.0
|
public
DSchoenbauer\Sql\Command\Delete
|
#
setTable( string $table )
defines a table with which you wish to remove from
defines a table with which you wish to remove from
Parameters
- $table
- table with which you wish to remove from
Returns
Since
v1.0.0
|


We are extremely proud of our lovely Heidi X Fez daughter, Lexi.  Under the excellent training and care of her Auntie Kim and Uncle Geoff, she easily attained her Championship, including a wonderful specialty win at the Eastern Ontario Labrador Breeder's Association show, which finished her in grand style. Earlier, with Kim as well, she attained her Canine Good Neighbour title and had had training in both obedience and field work. Kim's training and efforts are clearly visible in Lexi at obedience classes. Thank you and Kudos Kim!
Lexi has lovely form and yet is just feminine enough and not overdone for a female. She's everything we strive to produce - head, topline, tail, coat, brains and sweet, sweet temperament like her mother, our special Heidi. Staghorn is very proud to have Lexi in our breeding program, with her temperament, trainability and structural soundness/health clearances.


Photobooth Lite!
by
John Robinson
Status:
Choose Filter:
none
grayscale
sepia
red
brighter
darker
Filtered Video:
Your browser does not support the canvas tag.
Snapshot
Snapshot:


Fortnite's got itself a Star Wars crossover event
by Joseph KnoopLadies and gentlemen, toydarians and tauntauns, we've got ourselves a Fortnite/Star Wars crossover event.
Epic announced the crossover with a new video showing off an original trilogy Stormtrooper skin you'll be able to snag. Do Stormtroopers have better aim than Fortnite bots? Only one way to find out.
You can purchase the skin in the usual item store, or if you want some extra bang for your buck, you can get a code for it by purchasing Jedi: Fallen Order on the Epic Games Store. It's still available on Steam and Origin/EA Access if you prefer that, you just don't the extra goodie.
Even better, a Star Destroyer has appeared in the sky over the Fortnite map.
At present time, it appears the Star Destroyer is a considerable distance from the island. It could be that once it gets closer we'll some sort of new occurrence, but only time will tell.
And since you're clearly at least somewhat interested in Star Wars happenings, why not check out all our Jedi: Fallen Order coverage and our review when it goes up later.


Elassandra simplifies your data stack by integrating Elasticsearch® into Apache Cassandra®.
Apache Cassandra supports asynchronous multi-datacenters replication and various mechanisms to repair lost data. By closely integrating Elasticsearch with Cassandra, Elassandra provides search features on many datacenters.
When you need to increase read/write throughput, Elassandra automatically re-shards your Elasticsearch indices as new machines are added, allowing you to smoothly scale-out to fit your business needs without down-time or heavy maintenance operations requirements.
By indexing cassandra data into Elasticsearch, Kibana will allow you to get continuous and real-time data visualization of your applications.
By using a distributed transaction, Elassandra removes the single point of failure of Elasticsearch to manage its configuration.
Cassandra is designed for write-intensive workloads, hence, making Elassandra suitable for applications where a large amount of data is to be inserted (such as infrastructure logging, IOT, or events). So, Elasticsearch indices can be rebuilt whenever needed using the Cassandra tables without the creation of data duplication.
Failover-based approaches do not truly achieve high availability as far as write operations are concerned. Thanks to its multi-master design, Elassandra is always available either when a server/container fails or restarts because of some maintenance operations.
Elassandra is distributed under Apache License v2
Join us at Elassandra Google group.
For further information visit Q&A about using elassandra on Stack Overflow.
If you suspect a bug in Elassandra, please do report it on github.com.
Please provide us with as much details as you can, such as info on your CQL schema and Elasticsearch mapping and nodetool gossipinfo
output.
Commercial support is available on Strapdata.com
For pull requests https://github.com/strapdata/elassandra/pulls.
git clone --recurse-submodules https://github.com/strapdata/elassandra
cd elassandra
git checkout -b pull_request_branch
gradle assemble


You’ve got routes, script loading, OOP. Thoses are very low level tools. To allow you building a strong and understandable Rich Application, RESThub JS gives you a tiny MVC pattern.
A Controller is a autonomous component that will be attached to a DOM node (div, span) in order to display itself. It is statefull, so you can create many Controller instances, they will render themselves based on there own atributes.
Template loading is based on RequireJS text plugin and jQuery tmpl.
Controllers are Classes, so here is an example of declaration:
define([ 'text!home.html', lib/controller', 'lib/jqueryui/button' ], function(tmpl, Controller) {
return Controller.extend("MyHomeController", {
template : tmpl,
myName : "I'm called HomeController",
/**
* Constructor. Display template and creates widgets.
*/
init : function() {
var data = { user: $.storage.get(Constants.USER_KEY) };
// Calls the view rendering
this.render(data);
}
}
});
We saw in the class paragraph that init() method acts like a constructor. So during construction, the view will be rendered.
To instantiate a controller, we need to require it, and then to use it as a jQuery plugin:
$.route('#/home', function() {
require(['myhome'], function() {
$('#myDiv').my_home();
});
});
Select an existing DOM node (the one with id ‘myDiv’ in the example), and apply the desired controller on it.
The render method will display the current Controller based on the template and the data passed as parameters:
/**
* Renders current widget with the template specified in this.prototype.template.
*
* @param data Mandatory, the data to render. This can be any JavaScript type, including Array or Object.. For example an object {value : 'test'} passed as data arameter will be referenced as ${value} in the template
* @param options Optional map of user-defined key-value pairs. Extends the tmplItem data structure, available to the template during rendering
* @param el Optional, used to override the default element when the template will be rendered (by default this.element)
* @param tmpl Optional, used to override the default template (by default this.tmpl)
*/
render : function(data, options, el, tmpl);
Now we want to add some interactivity: let’s plug a jQuery-UI button widget:
init : function() {
// Calls the view rendering
this.render();
// Adds some widget
$('a', this.element)
.click($.proxy(this, '_buttonHandler'))
.button({
label: 'ClickMe'
})
By itself the button does not handle clicks (its a business-agnostic widget). So we bound a handler method to the click event of the DOM Node.
As you probably know, Javascript loses the ‘context’ (pointed by the this keyword) when asynchronous event occurs.
So when the user will click, the handler will not be related to your Controller !
Fortunately, the jQuery $.proxy() method corrects this issue.
And we could use the Controller’s inner attribute in the handler:
/**
* Handler of user click. Writes a console message.
*
* @param {Event} event Click event
*/
_buttonHandler: function(event) {
// Stops event propagation
event.preventDefault();
console.info('You clicked me: ' + this._myName);
return false;
}
What about memory management ?
As we bound a handler to the click event, we need to unbind this before the Controller deletion. Or we may create memory leaks.
That’s the purpose of the destroy() method:
/**
* Destroy function, invoked when the rendering is removed.
* May be overrited to add specific finalization code.
*/
destroy: function() {
// Unbind connected handlers
$('a', this.element).unbind();
// Calls overriden method
this._super();
}
Be careful ! You absolutely need to call the overriden method when overriding the destroy() method.
In complex RIA, Controllers massively use event (the pub-sub mechanism). To lighten usage of event handles, Controllers have a specific subscribe() method:
init : function() {
// Calls the view rendering
this.render();
this.subscribe(['event1', 'event2'], '_eventHandler');
The controller’s subscribe() method will automatically holds the generated handle, and performs automatically unsubscription in the destroy() method.
You can quickly register a single handler to multiple events.
And in bonus, you do not need to use $.proxy(), because it’s internally used.


Installation
BApp Store
Manually
Quickstart
Add to Burp Suite's Scope
Find & Replace
Enable & Disable CPH Tabs
Scope CPH Tab
Target Specific Matches
Replace or Append
Tab Order
Advanced Parameter Handling
Effective Modification Viewer
Extract from Other Response
Add a new HTTP Header
Expert Parameter Handling
Extract from Prior
Extract from Sequence
Modify within Sequence


Daniel Zimny-Schmitt
Democrat
Researcher at National Renewable Energy Laboratory
BA Environmental Science, University of Denver MA Geography, University of Denver
80210
I’ve donated to the Bernie Sanders campaign in the 2016 and 2020 primaries, as well as the Hillary Clinton and Joe Biden campaigns in the 2016 and 2020 general elections. I have also knocked on doors for the Bernie Sanders campaign in 2020.
I am an elected board member of the Colorado Rail Passenger Association (since 2017) and an elected council member of the national Rail Passengers’ Association (since 2016). I am also a member of the Sierra Club and the American Association of Geographers.
My primary experience in representing and advocating for the interests of Coloradans is through my involvement with rail advocacy. On my own time and personal expense, I have met with members of the Colorado’s delegations in the Senate and House in Washington to highlight the importance of both existing passenger rail in rural Colorado, as well as much-needed new service along the Front Range to create transportation options for Coloradans who do not have access to a personal vehicle. These experiences have taught me the importance of finding and using a political voice to advocate for important causes.
Serving on the Commission would allow me to combine my knowledge of state geography, experience in data analytics, and my political interest to help ensure that maps are drawn in a way thar reflects both the political and geographic diversity of our state. I believe that fairly drawn political maps are the foundation of any healthy democracy. I also believe that young people are underrepresented in the political process, and would like to help provide a voice to this group.
I have always been one to seek compromise and common ground between opposing sides, and intend to apply those skills to the disagreements that will inevitably unfold on the commission. As someone who has traveled to every county in Colorado, I am very familiar with how much the reality on the ground (economically, socially, culturally) varies greatly across the state, and how all voices must be heard and respected before decisions are made. Although I am a Democrat, I do not disparage those who have more conservative views than I do, nor do I assign labels to their beliefs or voting histories. Respect is a necessary precondition for fairness, am I pledge to bring that to the table every day.
As a science major, I have always used logic and reason to solve problems. In my professional work, I rely extensively upon U.S. Census Bureau data and mapping software such as GIS to do research and write reports. I’ve also learned to be a healthy skeptic of assertions that seem too good to be true, questioning whether there are perhaps some other relevant sources that should be consulted. In order to deliberate the answers to complex social questions like redistricting, all credible inputs need to be given full consideration, and I pledge to use logic and reason to sort through these inputs to achieve the fairest possible outcome.
Male


Pomodoro Clock
25
:
00
Session Time
-
25
+
Break Time
-
5
+
Start
Reset
Designed & Coded by
Rishabh Gupta


Studio Ghibli
Hayao Miyazaki's Life's Work
Heres a list of other movies by Studio Ghibli
- 1986 - Castle in the Sky
- 1988 - Grave of the Fireflies
- 1989 - Kiki's Delivery Service
- 1991 - Only Yesterday
- 1992 - Porco Rosso
- 1997 - Princess Mononoke
- 2001 - Spirited Away
- 2004 - Howl's Moving Castle
- 2006 - Tales from Earthsea
- 2008 - Ponyo
- 2014 - When Marnie Was There
If you have time, you should read more about the amazing origins of how this animation studio came to be. Wikipedia entry.


These Terms of Use constitute a legally binding agreement made between you, whether personally or on behalf of an entity (“you”) and FingerprintJS, Inc ("Company", “we”, “us”, or “our”), concerning your access to and use of the Wallpaper ID application (further referred to collectively as the “the Application”).
You agree that by accessing the Application, you have read, understood, and agreed to be bound by all of these Terms of Use.
The Application is intended for users who are at least 13 years of age.
By using the Application, you represent and warrant that: (1) you have the legal capacity and you agree to comply with these Terms of Use; (2) you are not under the age of 13; (3) you are not a minor in the jurisdiction in which you reside, or if a minor, you have received parental permission to use the Application; (4) you will not access the Application through automated or non-human means, whether through a bot, script, or otherwise; (5) you will not use the Application for any illegal or unauthorized purpose; and (6) your use of the Application will not violate any applicable law or regulation.
If you provide any information that is untrue, inaccurate, not current, or incomplete, we have the right to suspend or terminate your account and refuse any and all current or future use of the Application (or any portion thereof).
These Terms of Use and your use of the Application are governed by and construed in accordance with the laws of the State of Delaware applicable to agreements made and to be entirely performed within the State of Delaware, without regard to its conflict of law principles.
THE APPLICATION IS PROVIDED ON AN AS-IS AND AS-AVAILABLE BASIS.    WE DO NOT WARRANT, ENDORSE, GUARANTEE, OR ASSUME RESPONSIBILITY FOR ANY PRODUCT OR SERVICE ADVERTISED OR OFFERED BY A THIRD PARTY THROUGH THE APP, ANY HYPERLINKED WEBSITE, OR ANY WEBSITE OR MOBILE APPLICATION FEATURED IN ANY BANNER OR OTHER ADVERTISING, AND WE WILL NOT BE A PARTY TO OR IN ANY WAY BE RESPONSIBLE FOR MONITORING ANY TRANSACTION BETWEEN YOU AND ANY THIRD-PARTY PROVIDERS OF PRODUCTS OR SERVICES.

We will collect and maintain certain data that you transmit to the Application for the purpose of fulfilling the core service of the app, as well as data relating to your use of the Application.
Data collected on the Application is used solely and exclusively for research purposes. We will not share, sell, or make available the data that we collect on the Application in part or in full to any company or individual who is not an employee, contractor or an affiliate of FingerprintJS, Inc.
Data collected includes, but is not limited to android fingerprinting information and any other information publicly exposed by Android operating system.
We will retain the data collected for the period necessary to perform the core service of the Application.
This Application may also use cookies that are necessary to perform the core service of the Application. Cookies are stored for a period of 1 year.
In order to resolve a complaint regarding the Application or to receive further information regarding use of the Application, please contact us at:
FingerprintJS, Inc
oss@fingerprintjs.com


Vice Hierarch Zenya:
Welcome, young one. Do you wish to become a strong warrior or a great adventurer? It will be difficult to achieve either without adequate experience. You must see the world, meet various people and overcome many diverse trials.
In that vein... Why don't you take a journey to Giran, the economic center of the Elmoreden continent?
Say that you want to go.


Quickstart: Compose and Django
Estimated reading time: 7 minutesThis quick-start guide demonstrates how to use Docker Compose to set up and run a simple Django/PostgreSQL app. Before starting, install Compose.
Define the project components
For this project, you need to create a Dockerfile, a Python dependencies file,
and a docker-compose.yml
file. (You can use either a .yml
or .yaml
extension for this file.)
-
Create an empty project directory.
You can name the directory something easy for you to remember. This directory is the context for your application image. The directory should only contain resources to build that image.
-
Create a new file called
Dockerfile
in your project directory.The Dockerfile defines an application’s image content via one or more build commands that configure that image. Once built, you can run the image in a container. For more information on
Dockerfile
, see the Docker user guide and the Dockerfile reference. -
Add the following content to the
Dockerfile
.FROM python:3 ENV PYTHONUNBUFFERED 1 RUN mkdir /code WORKDIR /code COPY requirements.txt /code/ RUN pip install -r requirements.txt COPY . /code/
This
Dockerfile
starts with a Python 3 parent image. The parent image is modified by adding a newcode
directory. The parent image is further modified by installing the Python requirements defined in therequirements.txt
file. -
Save and close the
Dockerfile
. -
Create a
requirements.txt
in your project directory.This file is used by the
RUN pip install -r requirements.txt
command in yourDockerfile
. -
Add the required software in the file.
Django>=2.0,<3.0 psycopg2>=2.7,<3.0
-
Save and close the
requirements.txt
file. -
Create a file called
docker-compose.yml
in your project directory.The
docker-compose.yml
file describes the services that make your app. In this example those services are a web server and database. The compose file also describes which Docker images these services use, how they link together, any volumes they might need mounted inside the containers. Finally, thedocker-compose.yml
file describes which ports these services expose. See thedocker-compose.yml
reference for more information on how this file works. -
Add the following configuration to the file.
version: '3' services: db: image: postgres web: build: . command: python manage.py runserver <IP_ADDRESS>:8000 volumes: - .:/code ports: - "8000:8000" depends_on: - db
This file defines two services: The
db
service and theweb
service. -
Save and close the
docker-compose.yml
file.
Create a Django project
In this step, you create a Django starter project by building the image from the build context defined in the previous procedure.
-
Change to the root of your project directory.
-
Create the Django project by running the docker-compose run command as follows.
sudo docker-compose run web django-admin startproject composeexample .
This instructs Compose to run
django-admin startproject composeexample
in a container, using theweb
service’s image and configuration. Because theweb
image doesn’t exist yet, Compose builds it from the current directory, as specified by thebuild: .
line indocker-compose.yml
.Once the
web
service image is built, Compose runs it and executes thedjango-admin startproject
command in the container. This command instructs Django to create a set of files and directories representing a Django project. -
After the
docker-compose
command completes, list the contents of your project.$ ls -l drwxr-xr-x 2 root root composeexample -rw-rw-r-- 1 user user docker-compose.yml -rw-rw-r-- 1 user user Dockerfile -rwxr-xr-x 1 root root manage.py -rw-rw-r-- 1 user user requirements.txt
If you are running Docker on Linux, the files
django-admin
created are owned by root. This happens because the container runs as the root user. Change the ownership of the new files.sudo chown -R $USER:$USER .
If you are running Docker on Mac or Windows, you should already have ownership of all files, including those generated by
django-admin
. List the files just to verify this.$ ls -l total 32 -rw-r--r-- 1 user staff 145 Feb 13 23:00 Dockerfile drwxr-xr-x 6 user staff 204 Feb 13 23:07 composeexample -rw-r--r-- 1 user staff 159 Feb 13 23:02 docker-compose.yml -rwxr-xr-x 1 user staff 257 Feb 13 23:07 manage.py -rw-r--r-- 1 user staff 16 Feb 13 23:01 requirements.txt
Connect the database
In this section, you set up the database connection for Django.
-
In your project directory, edit the
composeexample/settings.py
file. -
Replace the
DATABASES = ...
with the following:DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'postgres', 'USER': 'postgres', 'HOST': 'db', 'PORT': 5432, } }
These settings are determined by the postgres Docker image specified in
docker-compose.yml
. -
Save and close the file.
-
Run the docker-compose up command from the top level directory for your project.
$ docker-compose up djangosample_db_1 is up-to-date Creating djangosample_web_1 ... Creating djangosample_web_1 ... done Attaching to djangosample_db_1, djangosample_web_1 db_1 | The files belonging to this database system will be owned by user "postgres". db_1 | This user must also own the server process. db_1 | db_1 | The database cluster will be initialized with locale "en_US.utf8". db_1 | The default database encoding has accordingly been set to "UTF8". db_1 | The default text search configuration will be set to "english". . . . web_1 | May 30, 2017 - 21:44:49 web_1 | Django version 1.11.1, using settings 'composeexample.settings' web_1 | Starting development server at http://<IP_ADDRESS>:8000/ web_1 | Quit the server with CONTROL-C.
At this point, your Django app should be running at port
8000
on your Docker host. On Docker Desktop for Mac and Docker Desktop for Windows, go tohttp://localhost:8000
on a web browser to see the Django welcome page. If you are using Docker Machine, thendocker-machine ip MACHINE_VM
returns the Docker host IP address, to which you can append the port (<Docker-Host-IP>:8000
).Note:
On certain platforms (Windows 10), you might need to edit
ALLOWED_HOSTS
insidesettings.py
and add your Docker host name or IP address to the list. For demo purposes, you can set the value to:ALLOWED_HOSTS = ['*']
This value is not safe for production usage. Refer to the Django documentation for more information.
-
List running containers.
In another terminal window, list the running Docker processes with the
docker container ls
command.$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES def85eff5f51 django_web "python3 manage.py..." 10 minutes ago Up 9 minutes <IP_ADDRESS>:8000->8000/tcp django_web_1 678ce61c79cc postgres "docker-entrypoint..." 20 minutes ago Up 9 minutes 5432/tcp django_db_1
-
Shut down services and clean up by using either of these methods:
-
Stop the application by typing
Ctrl-C
in the same shell in where you started it:Gracefully stopping... (press Ctrl+C again to force) Killing test_web_1 ... done Killing test_db_1 ... done
-
Or, for a more elegant shutdown, switch to a different shell, and run docker-compose down from the top level of your Django sample project directory.
vmb at mymachine in ~/sandbox/django $ docker-compose down Stopping django_web_1 ... done Stopping django_db_1 ... done Removing django_web_1 ... done Removing django_web_run_1 ... done Removing django_db_1 ... done Removing network django_default
-
Once you’ve shut down the app, you can safely remove the Django project directory (for example, rm -rf django
).
More Compose documentation
- User guide
- Installing Compose
- Getting Started
- Get started with Rails
- Get started with WordPress
- Command line reference
- Compose file reference


The xPack Build Box (XBB) is an elaborated build environment focused on obtaining reproducible runs while building cross-platform standalone binaries for GNU/Linux, macOS and Windows.
How it works?
XBB achieves repeatability and consistency by:
- controlling the versions of the tools used during the build
- compiling most dependencies (libraries) from sources.
By strictly controlling the versions of the compiled sources and tools, it is possible to create build environments that use about the same tools on both GNU/Linux (Intel and Arm) and macOS, helping to obtain consistent results.
On GNU/Linux, to allow the builds to be performed on any distribution, the actual builds run inside Docker containers (Intel/Arm, 32/64-bit).
On macOS, the builds run on standard systems, without the need for custom tools, but expecting to be pristine, without additional tools installed via alternate package managers (like HomeBrew or MacPorts).
XBB v5.0.0
The latest release, v5.0.0 from early 2023 represents a major milestone for the xPack project, since it is the first self-sustained release, which allows to build new binary xPacks using previous xPacks, without requiring any custom Docker images, or other compiled tools.
xpm run
For convenience, the new build scripts are xPacks, with multiple build configurations, for all supported platforms, and all actions are defined uniformly as xPack actions.
xPack actions are named sequences of shell commands, that are executed in order when the action is invoked.
For example:
"actions": {
"deep-clean": [
"rm -rf build xpacks node_modules package-lock.json",
"rm -rf ${HOME}/Work/-[0-9]*-*"
],
"install": [
"npm install",
"xpm install"
],
"link-deps": [
"xpm link @xpack-dev-tools/xbb-helper"
],
"git-pull-helper": [
"git -C ${HOME}/Work/xpacks/xbb-helper-xpack.git pull"
],
"git-log": "git log --pretty='%cd * %h %s' --date=short",
"test-xpm": "bash scripts/test.sh --xpm",
"build-native": "bash scripts/build.sh",
"build-native-develop": "bash scripts/build.sh --develop",
"build-native-win": "bash scripts/build.sh --windows",
"build-native-win-develop": "bash scripts/build.sh --develop --windows"
},
To invoke these actions, the xpm run
command is used.
The helper project
Since there are lots of common files between projects, they were collected into a helper project.
The helper project is a
source xPack (@xpack-dev-tools/xbb-helper
), which can be installed
as a dependency with:
cd ~/Work/xpacks/<project>-xpack.git
xpm install --save-dev @xpack-dev-tools/xbb-helper@latest
The result is a folder like:
$ tree -l -L 2 xpacks/
xpacks/
└── xpack-dev-tools-xbb-helper -><EMAIL_ADDRESS>├── CHANGELOG.md
├── config
├── dependencies
├── developer
├── extras
├── github-actions
├── LICENSE
├── maintainer
├── package.json
├── patches
├── pkgconfig
├── README.md
├── scripts
├── templates
├── tests
└── travis
13 directories, 4 files
There are many files in the helper, for various use cases. The build scripts
directly include files from the scripts
and dependencies
folders.
Types of builds
From the point of view of the desired result, there are two types of builds:
- local/native builds, intended for development and running on the local machine
- distribution builds, intended for xPack binary distributions and running on most modern machines
The main use cases of XBBs are distribution builds, but they can be used for native builds as well.
Native builds with all tools from the host machine
In this case all build tools are expected to be available on the host machine. The list of these dependency depends on the distribution and is outside the scope of this project, which recommends the next use Docker use case, presented below.
xpm run install
xpm run build-native
The first command is used to install the helper project; the second command runs the build.
These commands run the same on both GNU/Linux and macOS.
To generate the Windows binaries on GNU/Linux, there is a separate build action:
xpm run install
xpm run build-native-win
Native builds with the major tools coming from xPacks
Sometimes the native tools available on the host machine may be too old for building modern packages.
A simple solution is to install the main tools as binary xPacks. The selection of tools depends on the target platform.
The existing projects include separate build configurations for multiple platforms (darwin-x64, darwin-arm64, linux-x64, linux-arm64, linux-arm, win32-x64).
For example, to build the Intel GNU/Linux binaries, use:
xpm run install
xpm run install --config linux-x64
xpm run build --config linux-x64
Docker builds with tools coming from xPacks
An even more reproducible configuration can be achieved by using Docker containers, with the base system tools.
xpm run install
xpm run docker-prepare --config linux-x64
xpm run docker-build --config linux-x64
Writable helper scripts
For normal builds, the helper project, which is a source xPack, is downloaded and marked as read-only, to prevent damaging it.
For development purposes it might be necessary to update it; the xPack solution (inspired by the npm solution) is to download the helper repository into a separate location, and link it to the current project.
This is done in two steps, first a link from the central store to the helper repo is created. This ensures that multiple projects can conveniently use the writable helper.
rm -rf ~/Work/xpacks/xbb-helper-xpack.git && \
mkdir -p ~/Work/xpacks && \
git clone \
--branch xpack-develop \
https://github.com/xpack-dev-tools/xbb-helper-xpack.git \
~/Work/xpacks/xbb-helper-xpack.git && \
xpm link -C ~/Work/xpacks/xbb-helper-xpack.git
The result is a link like:
$ ls -lA ~/.local/xPacks/@xpack-dev-tools/xbb-helper
total 4
dr-xr-xr-x 14 ilg ilg 4096 Mar 24 17:38 1.4.7
lrwxrwxrwx 1 ilg ilg 42 Mar 27 17:16 .link -> /home/ilg/Work/xpacks/xbb-helper-xpack.git
In other words, in the folder where versioned releases are installed, a special hidden symbolic link is created, pointing to the location where the repo was cloned.
In the second step, a link from the build project to the central store is created.
xpm link @xpack-dev-tools/xbb-helper -C ~/Work/xpacks/<project>-xpack.git
The result is a link like:
$ cd ~/Work/xpacks/<project>-xpack.git
$ ls -l xpacks/
total 0
lrwxrwxrwx 1 ilg ilg 57 Mar 27 17:21 xpack-dev-tools-xbb-helper -><EMAIL_ADDRESS>In other words, the xpack-dev-tools-xbb-helper
link, instead of pointing
to a version, like<EMAIL_ADDRESS>,
now points to the .link
, which points to the cloned repo.
This double link mechanism allows multiple projects to refer to the writable folder, and allow this folder to be easily moved to another location without having to update all projects that reference it.
For details on the actual usage, please check the build projects.
Supported platforms
Generally, xPack binaries are available for the following platforms:
- Windows Intel 64-bit
- GNU/Linux Intel 64-bit
- GNU/Linux Arm 32-bit
- GNU/Linux Arm 64-bit
- macOS Intel 64-bit
- macOS Apple Silicon 64-bit
XBB supports creating binaries for all these platforms.
For the detailed supported versions, please check the specific release page.
GNU/Linux Arm binaries
Support for Arm binaries was added in v3.1, in early 2020.
The supported architectures are:
arm64v8
- the ARMv8 64-bit architecture Aarch64arm32v7
- the ARMv7 32-bit architecture with hardware float (armhf)
macOS Apple Silicon
Support for Apple Silicon was added in v3.4, in late 2021.
Docker specifics
As with any Docker builds, the XBB builds run completely inside Docker containers, which start afresh each time they are instantiated.
To pass the folder with the build scripts in and the results out,
it is usual to use a Work
folder, for example:
$ docker run -it --volume "${HOME}/Work:/Host/Work" ilegeul/ubuntu:amd64-18.04-xbb-v5.0.0
root@bc7071f2c78a:/# ls -l Host/Work/xpacks
total 8
drwxrwxr-x 11 node node 4096 Mar 24 15:39 openocd-xpack.git
drwxrwxr-x 17 node node 4096 Mar 27 14:15 xbb-helper-xpack.git
In this simple configuration, the builds run with root permissions; with more elaborate configurations it is possible to start the Docker containers with user rights, but they are beyond the scope of this document.
How to use the XBB tools
Both on GNU/Linux and macOS, the XBB tools are installed as binary
xPack dependencies in xpacks/.bin
and are fully distinct from
the system tools.
To access them, the application should update the PATH
to prefer
the xpacks/.bin
path.
Common scripts
For consistency between projects, common scripts were grouped in the helper project.
After installing it with xpm install
, the scripts are available
from xpacks/xpack-dev-tools-xbb-helper
.
There are many scripts in this location; the main ones are in the
scripts
folder. The scripts to build various dependencies are in
the dependencies
folder.
The pkg-config-verbose
script
While running the configuration step, it is sometimes useful to trace
how pkg-config
identifies resources to be used during the build.
The standard pkg-config
does not have an option to increase verbosity.
The workaround is to use a separate script that displays the received command and the response on the stderr stream.
This script is not specific to XBB, and can be used with any build.
For this, copy the file into .../xbb/bin
or any other folder present
in the PATH and pass the script name via the environment.
chmod +x /opt/xbb/bin/pkg-config-verbose
export PKG_CONFIG=pkg-config-verbose
No more TeX
Starting with v3.4, support for building the manuals was dropped, and the TeX tools are no longer needed.
Maintainer info
End of support for Linux distributions
To help decide what base version to use, and how long to keep support for it, a list of main Linux distributions was compiled, with the GLIBC versions:
Upgrade plans
RedHat maintenance support 1 for RHEL 7 ended in Aug. 2020, with maintenance support 2 to last until June. 2024. However XBB support for RHEL 7 is a tough requirement, and was discontinued starting with 2022.
Compatibility was moved up to Ubuntu 18 LTS (GLIBC 2.27), which also provides compatibility with RedHat 8 / Debian 10, which both use GLIBC 2.28.
The next upgrade step will be taken when the minimum Node.js becomes 18.x, which requires GLIBC 2.28, when the base system will most probably be Debian 10.
Credits
The xPack Build Box is inspired by the Holy Build Box.
Links
- prerequisites for using XBB
- releases
- GitHub


Good question. Of course, this question is being asked in the context of app/software/web development. So far, I've picked up the following keys to a good question:
This week at DBC we started learning JavaScript. I made a game with JS that was actually fun to make. But in the process it became clear that JavaScript and Ruby are very different. In this post I want to go into some of those differences, and how JS helped me to better understand Ruby.
There is a lot of information out there about a phenomenon known as stereotype threat. I became aware of this phenomenon during the last few days. Here are my thoughts on it.
This week at DBC we have been diving into Ruby, playing with variable scope as part of the week's challenges. Let me see if I can explain what is going on with this.
Currently I am student at Dev Bootcamp, in the Phase 0 remote learning part of the program. Each week I am required to pair program with other students on at least two challenges. There are pros and cons to this process. Ultimately I think it has a net benefit to the learning process.
This week we are delving into classes in Ruby. What are classes? Let's define them by what they do: classes create objects and assign them tailor-made methods. What does that mean? Let me try to explain with a real-world example: a commercial airline flight.
When I started looking into the IT field seriously, from the start I encountered article after article about the need to diversify America's IT sector. A few questions came up: Why hasn't this diversification happened already? What are the benefits of diversification? What are the unintended negative consequences, if any? Here are some of my thoughts on the matter.
Today's topic is a simple and powerful method in the Enumerable class in Ruby, called #map. Here is the Ruby documentation for #map, which may or may not make any sense to you. (It may or may not make any sense to me!) Don't worry, hopefully I can explain it to you.
Ok the subtitle is a joke, I just wanted to get your attention.
Time to reflect on Dev Bootcamp so far. Well, it's week 3, and I feel like I am getting it. "It" being the stuff I am supposed to be learning. Part of this may be my "abstract random" thinking style, which is freakin awesome. I am so glad to be an AR. I feel it gives me an advantage on adapting, and not knowing answers and being ok with searching for answers.
So this week we covered arrays and hashes. You may be saying, what the ? Well, let me fill you in: arrays and hashes are Ruby objects that hold collections. You may still be saying, what the ? Well let me fill you in some more: computers use collections to keep track of things. What kind of things? Everything. Take a look at some baseball stats to see what I mean...
Ok so I just finished week 2 of Dev Bootcamp's Phase 0. Woo hoo! This week was HTML and CSS. The CSS "Box Model" concept was covered. This is my attempt to make sense of it.
So as of today I have been in Dev Bootcamp for five days, and am almost done with week 1 of Phase 0. Woo hoo! How is it so far? Thrilling and lonely and exciting and frustrating and repetitive and joyful. I actually feel like something is being released from inside of me that I have probably been pushing down for quite a long time, a sort of validating of what I like to do.
I knew this coming in, and have previous experience with guided remote learning, but it still hit me: This is not going to be handed to me, I have to reach out and grab it. All of the answers are not given; that's what Google is for! And there is no one to sit down with face-to-face and talk to, not for another nine weeks. That is cool with me, but also a reminder: I have to do this. It sounds like, as time goes on and I get to know my cohort, this will become we have to do this.
Why my life was so much easier a week ago. Ok not really
July 10, 2015
So this is my first week of Phase 0 in Dev Bootcamp. That means I am in my home, on my newly purchased four-year old refurbished Macbook Pro (thank you macofalltrades.com!) which sailed smoothly through the dev environment installation process, thank God. We had to learn git and GitHub pretty quickly. (They are not the same!) I get it, I think. Here is my attempt to explain it to myself, so that I really get it, and hopefully you do too.


Here’s an example for multiple images that uses Bootstrap’s Carousel javascript component for a photo slideshow.
To automate the layout, a list of images is stored in a frontmatter variable. The post then loops over that list to output the carousel. This is easier than copy-pasting the same HTML for each image.


Symptoms Illustration showing acute sinusitis Acute sinusitis Acute sinusitis symptoms often include: Drainage of a thick, yellow or greenish discharge from the nose or down the back of the throat (postnasal drainage) Nasal obstruction or congestion, causing difficulty breathing through your nose Pain, tenderness, swelling and pressure around your eyes, cheeks, nose or forehead that worsens when bending over Other signs and symptoms can include: Ear pressure Headache Aching in your upper jaw and teeth Reduced sense of smell and taste Cough, which might be worse at night Bad breath (halitosis) Fatigue Fever


The following is a summary of the work I completed for the final project. First, some details, as requested:
In short, this is an implementation of the Barnes-Hut n-body simulation approximation algorithm in 3D using Three.js and WebGL. It implements both a "naive" direct computation of the forces between particles and the Barnes-Hut algorithm for approximating the same. As well, it has realistic elastic collisions between particles, and accurately simulated momentum, etc.
The n-body simulation computed here is most based off of the n-body problem from physics, which seeks to compute the interactions between n-many objects due to gravitational forces. In our case, we wish to efficiently compute, for a large number of objects of varying masses, the resulting motion as accurately as possible. For simplicity of calculation, we use spheres as our objects. Given that the n-body problem is commonly posed in an astrophysical context, this is a reasonable simplification.
Earlier in the class, octrees had been discussed as a means of accelerating raytracing. They subdivide a 3D space into nested octants, effectively generalizing a binary search tree. The Barnes-Hut approximation algorithm for the n-body problem, as implemented here, relies on the use of an octree for its speed. The primary operation we have to implement for the octree is insertion; certain implementations of Barnes-Hut also use deletion to reshape the tree rather than rebuilding it for each iteration, but we choose not to do so. Octree insertion works as follows: For a given node and item to insert, we first check that the current node is a leaf. If it is not, we determine which of its child octants the item belongs in by testing its central coordinate, and recurse on the node representing this octant. If the current node is a leaf, we check to see if it is empty. If it is empty, then we insert the item and finish. However, if there is already an item in this location, we must create a new layer to the tree. We create the eight children of the current node, making it an internal node, and for both the new item and the old, determine which of the new nodes will hold them and recurse with them to that node.
The naive approach to the n-body simulation is, as the name may imply, quite straightforward. For each of the n particles, we use the formula for gravitational force between two objects from classical mechanics to find the force in each of the three dimensions from each of the other particles. Applying the principle of superposition, we are able to compute the final force on the particle, and update its velocity, acceleration, and position vectors accordingly. While this approach is exact (down to errors due to machine number precision), it becomes unwieldy and slow for larger numbers of particles, as it requires n^2 computations. Below, we show some images of the simulation running with the naive algorithm.
The Barnes-Hut algorithm attempts to approximate to within a reasonable degree of accuracy the n-body simulation. It is a common simulation technique for this, and allows larger numbers of particles to be successfully tracked in real-time. The algorithm uses only n*log(n) computations by virtue of its reliance on the aforementioned octree data structure. When computing the force acting on a given particle, the Barnes-Hut algorithm begins recursing down from the root of the octree, until either it reaches a leaf, in which case we perform the usual gravitational force computation, or it reaches a node for which the ratio between the width of space the node represents and the distance between the node's center of mass and the center of mass of the particle is below a given threshold. In this second case, we again perform the standard gravitational force computation, but with the center of mass and total mass of the node, rather than with the actual particles it contains. This is where the algorithm's savings arise. The threshold is a sort of tunable parameter for the algorithm; set lower, it provides a more accurate but slower simulation, while a higher setting results in a faster but less accurate simulation. Below, we show some images of the simulation running with the Barnes-Hut algorithm.


Abstract
In this vignette, we use the R package groupdata2
to
automatically detect and create groups in a dataset using the
l_starts
method.
groupdata2
is a set of methods for easy grouping,
windowing, folding, partitioning, splitting and balancing of data.
For a more extensive description of groupdata2
, please
see Description of
groupdata2
Contact author at<EMAIL_ADDRESS>In this vignette, we will use the l_starts
method with
group()
to allow transferring of information from one
dataset to another. We will use the automatic grouping function that
finds group starts all by itself.
library(groupdata2)
library(dplyr) # %>%
library(knitr) # kable
3 participants were asked to solve a task. They had to take turns but could go for multiple runs of the task before taking a break and letting the next participant take over. They had 2 turns (called sessions) each, meaning there were 6 sessions in total with multiple runs per session. A team of experts would rate how well the participant did throughout the entire session, meaning that if the participant had some bad runs, they would have to make a choice whether to save energy for the other session or whether to try and correct the rating of the current session.
For each run of the task, we recorded how many errors the participant made.
<- data.frame(
df_observations "run" = 1:30,
"participant" = c(
1, 1, 1, 1,
2, 2, 2, 2, 2, 2,
3, 3, 3, 3,
1, 1, 1, 1, 1, 1, 1,
2, 2, 2,
3, 3, 3, 3, 3, 3),
"errors" = c(
3, 2, 5, 3,
0, 0, 1, 1, 0, 1,
6, 4, 3, 1,
2, 1, 3, 2, 1, 1, 0,
0, 0, 1,
3, 3, 4, 2, 2, 1)
)
# Show the first 20 rows of data frame
%>% head(20) %>% kable() df_observations
| run | participant | errors |
|---|---|---|
| 1 | 1 | 3 |
| 2 | 1 | 2 |
| 3 | 1 | 5 |
| 4 | 1 | 3 |
| 5 | 2 | 0 |
| 6 | 2 | 0 |
| 7 | 2 | 1 |
| 8 | 2 | 1 |
| 9 | 2 | 0 |
| 10 | 2 | 1 |
| 11 | 3 | 6 |
| 12 | 3 | 4 |
| 13 | 3 | 3 |
| 14 | 3 | 1 |
| 15 | 1 | 2 |
| 16 | 1 | 1 |
| 17 | 1 | 3 |
| 18 | 1 | 2 |
| 19 | 1 | 1 |
| 20 | 1 | 1 |
<- data.frame(
df_ratings "session" = c(1:6),
"rating" = c(3, 8, 2, 5, 9, 4)
)
%>% kable() df_ratings
| session | rating |
|---|---|
| 1 | 3 |
| 2 | 8 |
| 3 | 2 |
| 4 | 5 |
| 5 | 9 |
| 6 | 4 |
We would like to get the expert ratings into the
data frame
with observations. For this, we will first
create a session column and then get the ratings for the sessions.
As the participants had differing numbers of runs, we must start a
new session group whenever the participant column changes. This can be
done with group()
using the l_starts
method.
This methods takes group start values, finds those values in a
specified column, and creates groups that begin at the start values. To
show this, let’s try it out with some manually entered start values
before having group()
find them automatically.
group(
data = df_observations,
n = c(1, 2, 3, 1, 2, 3), # Starting values
method = 'l_starts',
starts_col = 'participant',
col_name = 'session'
%>%
) kable()
| run | participant | errors | session |
|---|---|---|---|
| 1 | 1 | 3 | 1 |
| 2 | 1 | 2 | 1 |
| 3 | 1 | 5 | 1 |
| 4 | 1 | 3 | 1 |
| 5 | 2 | 0 | 2 |
| 6 | 2 | 0 | 2 |
| 7 | 2 | 1 | 2 |
| 8 | 2 | 1 | 2 |
| 9 | 2 | 0 | 2 |
| 10 | 2 | 1 | 2 |
| 11 | 3 | 6 | 3 |
| 12 | 3 | 4 | 3 |
| 13 | 3 | 3 | 3 |
| 14 | 3 | 1 | 3 |
| 15 | 1 | 2 | 4 |
| 16 | 1 | 1 | 4 |
| 17 | 1 | 3 | 4 |
| 18 | 1 | 2 | 4 |
| 19 | 1 | 1 | 4 |
| 20 | 1 | 1 | 4 |
| 21 | 1 | 0 | 4 |
| 22 | 2 | 0 | 5 |
| 23 | 2 | 0 | 5 |
| 24 | 2 | 1 | 5 |
| 25 | 3 | 3 | 6 |
| 26 | 3 | 3 | 6 |
| 27 | 3 | 4 | 6 |
| 28 | 3 | 2 | 6 |
| 29 | 3 | 2 | 6 |
| 30 | 3 | 1 | 6 |
Note how each session only has observations from a single participant.
group()
went through the participant column and found
one value from n
at a time. When it encountered the value,
it noted down the row index and continued down the column searching for
the next value in n
. In the end, it started groups at the
found row indices from top to bottom.
Since our data has the same value in the participant column for the
entire session, we can actually get group()
to find these
group starts automatically. It will go through the given column and
whenever it encounters a new value, i.e. one that is different from the
previous row, it starts a new group.
<- group(
df_observations data = df_observations,
n = 'auto',
method = 'l_starts',
starts_col = 'participant',
col_name = 'session'
)
%>%
df_observations kable()
| run | participant | errors | session |
|---|---|---|---|
| 1 | 1 | 3 | 1 |
| 2 | 1 | 2 | 1 |
| 3 | 1 | 5 | 1 |
| 4 | 1 | 3 | 1 |
| 5 | 2 | 0 | 2 |
| 6 | 2 | 0 | 2 |
| 7 | 2 | 1 | 2 |
| 8 | 2 | 1 | 2 |
| 9 | 2 | 0 | 2 |
| 10 | 2 | 1 | 2 |
| 11 | 3 | 6 | 3 |
| 12 | 3 | 4 | 3 |
| 13 | 3 | 3 | 3 |
| 14 | 3 | 1 | 3 |
| 15 | 1 | 2 | 4 |
| 16 | 1 | 1 | 4 |
| 17 | 1 | 3 | 4 |
| 18 | 1 | 2 | 4 |
| 19 | 1 | 1 | 4 |
| 20 | 1 | 1 | 4 |
| 21 | 1 | 0 | 4 |
| 22 | 2 | 0 | 5 |
| 23 | 2 | 0 | 5 |
| 24 | 2 | 1 | 5 |
| 25 | 3 | 3 | 6 |
| 26 | 3 | 3 | 6 |
| 27 | 3 | 4 | 6 |
| 28 | 3 | 2 | 6 |
| 29 | 3 | 2 | 6 |
| 30 | 3 | 1 | 6 |
And it works! :)
If you just want to find the group starts, you can use the
find_starts()
function. Alternatively, the
differs_from_previous()
function allows setting a threshold
for how much the value must differ from the previous value.
Now that we have the session information, we can transfer the ratings
from the ratings data frame
.
<- merge(df_observations, df_ratings, by = 'session')
df_merged
# Show head of df_merged
%>% head(15) %>% kable() df_merged
| session | run | participant | errors | rating |
|---|---|---|---|---|
| 1 | 1 | 1 | 3 | 3 |
| 1 | 2 | 1 | 2 | 3 |
| 1 | 3 | 1 | 5 | 3 |
| 1 | 4 | 1 | 3 | 3 |
| 2 | 5 | 2 | 0 | 8 |
| 2 | 6 | 2 | 0 | 8 |
| 2 | 7 | 2 | 1 | 8 |
| 2 | 8 | 2 | 1 | 8 |
| 2 | 9 | 2 | 0 | 8 |
| 2 | 10 | 2 | 1 | 8 |
| 3 | 11 | 3 | 6 | 2 |
| 3 | 12 | 3 | 4 | 2 |
| 3 | 13 | 3 | 3 | 2 |
| 3 | 14 | 3 | 1 | 2 |
| 4 | 15 | 1 | 2 | 5 |
Now, we can find the average number of errors per session and see if they correlate with the experts’ ratings.
<- df_merged %>%
avg_errors group_by(session) %>%
::summarize("avg_errors" = mean(errors))
dplyr
%>% kable() avg_errors
| session | avg_errors |
|---|---|
| 1 | 3.2500000 |
| 2 | 0.5000000 |
| 3 | 3.5000000 |
| 4 | 1.4285714 |
| 5 | 0.3333333 |
| 6 | 2.5000000 |
Let’s transfer the averages back to the merged
data frame
. Once again, we use merge()
. Note
that you may prefer to use one of the join functions from
dplyr
instead (e.g. dplyr::left_join()
).
Since we have just one average rating per session, we extract the first row of each session and remove the original error count column.
<- merge(df_merged, avg_errors, by = 'session') %>%
df_summarized group_by(session) %>% # For each session
filter(row_number() == 1) %>% # Get first row
select(-errors) # Remove errors column as we use avg_errors now
%>% kable() df_summarized
| session | run | participant | rating | avg_errors |
|---|---|---|---|---|
| 1 | 1 | 1 | 3 | 3.2500000 |
| 2 | 5 | 2 | 8 | 0.5000000 |
| 3 | 11 | 3 | 2 | 3.5000000 |
| 4 | 15 | 1 | 5 | 1.4285714 |
| 5 | 22 | 2 | 9 | 0.3333333 |
| 6 | 25 | 3 | 4 | 2.5000000 |
We have 1 row per session with the participant, the rating and the
average number of errors. If we wanted to know how many runs a session
contained, we could extract it from the run
column.
Let’s check if there’s a correlation between ratings and average errors.
cor(df_summarized$rating, df_summarized$avg_errors)
#> [1] -0.9739425
It seems they are highly negatively correlated, so participants with fewer errors have higher ratings and vice versa.
Well done, you made it to the end of this introduction to
groupdata2
! If you want to know more about the various
methods and arguments, you can read the Description of groupdata2.
If you have any questions or comments to this vignette (tutorial) or
groupdata2
, please send them to me at
<EMAIL_ADDRESS>or open an issue on the github
page https://github.com/LudvigOlsen/groupdata2 so I can make
improvements.


Central Sakwa ward
| Facility: |
Clinician incharge: |
| Kopole clinic |
0733979640 |
| Mbota dispensary |
|
| Ndoda Dispensary |
|
| Nyangoma dispensary |
|
| Serawongo dispensary |
|
| Ugunja hospital |
|
North sakwa ward
| Facility: |
clinician incharge: |
| Aro Dispensary |
|
| Bondo medical clinic |
|
| Bondo University clinic |
|
| Gobeth helth center |
|
| Kibuyo dispensary |
|
| Manyongo dispensary |
|
| Mawere Dispensary |
|
br br br br
South Sakwa ward
| Facility: |
clinician incharge: |
| Anyuongi dispensary |
|
| Mapingu dispensary |
|
| Ndoda Dispensary |
|
| Nyugunda health center |
|
| Ouga dispensary |
|
| Ogano Dispensary |
|
West Sakwa ward
| Facility: |
clinician incharge: |
| Bondo district hospital |
|
| Kambajo dispensary |
|
| Kapiyo health center |
|
| Bondo district hospital |
|
| Kambajo dispensary |
|
| Kapiyo health center |
|
br br br
West Yimbo ward
| Facility: |
clinician incharge: |
| Got matar health center |
|
| Mageta health center |
|
| Usenge Dispensary |
|
|
|
|
|
Yimbo East ward
| Facility: |
clinician incharge: |
| Ogam dispensary |
|
| Radier dispensary |
|
| Olango dispensary |
|
| Usigo dispensary |
|
| Usigu health center |
|


Plugin Information |
|---|
View Libvirt Agents on the plugin site for more information. |
Older versions of this plugin may not be safe to use. Please review the following warnings before using an older version:
Add Libvirt Hypervisor slave support to Jenkins
libvirt-slaves 1.8 uses a newer libvirt java binding. If you are upgrading from an earlier version of this plugin, you will have to reconfigure your hypervisor settings and thus also all libvirt-controlled nodes!
The least painful approach (especially for larger setups) is to properly set up the Hypervisor first, followed by editing each node, pointing it to the reconfigured Hypervisor. It is not necessary to delete node configurations!
Description
This plugin for Jenkins CI adds a way to control guest domains hosted on Xen or QEMU/KVM. You configure a Jenkins Slave, selecting the guest domain and hypervisor. When you need to build a job on a specific Slave, its guest domain is started, then the job is run. When the build process is finished, the guest domain is shut down, ready to be used again as required.
Requirements
For a communication with Hypervisors you need to install libvirt library on Jenkins machine. This plugin comes with libvirt java binding, but is just an interface to the "real" C libvirt library. In your distribution you should have a package to install libvirt (ie yum install libvirt on RedHat/Fedora/Centos distributions).
Configuration
Hypervisor
The first step is the Hypervisor configuration. To create a new Hypervisor you need to add a new "Cloud" in the Jenkins "Manage Jenkins" menu.
The required parameters to setup are:
- Hypervisor Type: QEMU / XEN to respect the Hypervisor you have in your system
- Hypervisor Host: Hostname or IP address to contact your hypervisor
- Username: username to use for connection.
- Port: ssh port, if in your hypervisor machine is different than 22
- URI parameter: by default xen and kvm expose the control API using system. If, for any reasons, you don't have this default value or need to provide further parameters, you can set those here
- Concurrent Slaves Capacity: If you are running a setup where slaves are being shut down once they are idling and you want to control how many concurrent slave can be run by Jenkins on the particular hypervisor, you can set this threshold here. Providing 0, the default value, disables the threshold. Please note that a threshold will not fail build jobs, Jenkins will simply reissue the slave commissioning once the hypervisor is again running below its threshold, thus delaying the start up of slaves
The connection to Hypervisor will be done using ssh, so you don't need to setup libvirt, exposing your services on tcp that could be a security hole in your infrastructure. Here an example of connection string will be used by Libvirt Slaves Plugin to create a connection with the hypervisor:
xen+ssh://username@hostname:port/system
you can test you connection typing, from your Jenkins Server:
virsh connect xen+ssh://username@hostname:port/system
An important thing is the RSA public key exchange between Jenkins Server and Hypervisor Machine: you need to add to .ssh/known_hosts file the rsa.pub file of your jenkins user. This because, for an actual limitation in libvirt java library, it's impossible to provide via code the ssh password, that means Jenkins could not establish a connection if password request will be prompted.
To verify all you parameters you can click on Test Connection button and check the output reported.
Slaves
Now you can setup your nodes in Jenkins and use them to build your projects.
Once the node is created, you'll see the configuration page as shown below:
Here you can configure the following details:
- Hypervisor: here you select one of the clouds that you configuration at the central Configure Jenkins page
- Virtual Machine: select one of the virtual machines that you want to use as a slave
- Revert Snapshot: optionally you can select an existing snapshot of the virtual machine that you want the slave to be reverted to once it is being shut down
- Startup Idle: this optional value (default is 60) allows you specify an idle timer in seconds. Once the virtual machine has been started, Jenkins will wait that long before starting the actual slave service on the virtual host. If your hypervisor is super quick, set a low value, if it takes a while to get that VM up, increase the timer.
Change Log
Version 1.8.5 (Apr 01, 2015)
- Fix JENKINS-12523: Could not initialize class org.libvirt.Connect
Version 1.8.1 (Mar 21, 2013)
- Increased robustness of the hypervisor session handling: explicit disconnect upon Jenkins shutdown, auto-reconnect upon libvirtd restarts
- Various minor improvements to the logging, chattiness decreased
Version 1.8 (Mar 20, 2013)
- Fix JENKINS-16889: Fixed Hypervisor session management
- Feature JENKINS-17293: Concurrent slave threshold, configurable per Hypervisor (Big thanks to Bryan Dagnin for his contribution!)
- Feature JENKINS-16583: Support for libvirt snapshot mechanism
- Feature JENKINS-16581: Modernized maven groupId to org.jenkins-ci.plugins
- Various minor improvements, mostly help/documentation related
- Latest libvirt java binding. Note: upgrading users will have to reconfigure their hypervisor and node settings!
Version 1.7 (Jan 31, 2013)
- Fixed JENKINS-14617
- Fixed JENKINS-14468
- Fixed JENKINS-12523
- Fixed JENKINS-9471
- Improved JavaDoc
- Various minor improvements
- Bumped required core to 1.420
Version 1.6 (Apr 2, 2010)
- Fixed problems with Libvirt on RedHat / Centos operating System
- Added control for machine without libvirt library installed
Version 1.5 (Mar 30, 2010)
- Fixed problem on Null object after Hypervisor reconnection
Version 1.4 (Mar 25, 2010)
- Improvements in Hypervisor connection using libvirt
- Added a missing help file
Version 1.3 (Mar 20, 2010)
- Fixed problem with hypervisor reconnection after Hudson restart
- Add a wait time before launching slave agent
Version 1.2 (Mar 10, 2010)
- Fixed problem in contextual help files-
- Catch exception on machine without libvirt installed
Version 1.1 (Mar 08, 2010)
- No change in sources. A version just to fix a problem during release process.
Version 1.0 (Mar 07, 2010)
- First version published
Attachments:
libvirt-advanced-conf.jpg (image/jpeg)
libvirt-node-creation.jpg (image/jpeg)
libvirt-node-configuration.jpg (image/jpeg)
hypervisor-config.png (image/png)
node-config.png (image/png)
libvirt-node-creation.png (image/png)


Henry Cavill reveals he lost out on James Bond and 'Twilight' roles: 'It helps me get better'
by Jessica NapoliHenry Cavill made a name for himself playing DC comics superhero Superman in three blockbuster films, but before landing the part of the Kryptonian alien he lost out on three major roles.
In an interview with Men's Health magazine for its December issue, the 36-year-old British actor opened up about struggling to get work earlier on in his acting career.
One missed opportunity that still irks him to this day is the coveted James Bond role.
'THE WITCHER' TEASER SHOWS HENRY CAVILL'S DRASTIC NEW LOOK AS GERALT OF RIVIA
“I probably could have prepared better,” Cavill admitted of his screen test for 007 in 2006’s "Casino Royale."
“I remember the director, Martin Campbell, saying, ‘Looking a little chubby there, Henry.’ I didn’t know how to train or diet. And I’m glad Martin said something, because I respond well to truth. It helps me get better.”
'SUPERMAN' STAR HENRY CAVILL ADMITS ONE REGRET ON PLAYING THE 'MAN OF STEEL'
Cavill said the test was a reenactment of a Sean Connery scene during which he only wore a towel. He lost out to Daniel Craig, who accepted the part and just wrapped shooting his fifth and final Bond film.
The actor also confessed he missed out on two more major lead roles in "Tristan + Isolde" and "Twilight."
James Franco got the role in 2006 film adaptation of the British love story and Robert Pattinson landed the part as Edward Cullen in the 2009 vampire drama based on the bestselling book series.
“I wasn’t ecstatic about not getting these things,” Cavill confessed. “But I was so used to disappointment from the acting business, and also from boarding school. ‘No, you’re not good enough’ — that wasn’t anything new to me.”
HENRY CAVILL DEBUNKS DEATH HOAX AFTER WIKIPEDIA LISTS HIM DEAD
Now, he stars as Geralt in the upcoming Netflix series "The Witcher" for which he beat out 207 other actors. The show's producer, Schmidt Hissrich, told the magazine she met with Cavill early on -- before the script was even written -- and couldn't get him out of her head for the part.
“But all the time I was writing, I kept hearing Henry’s voice in my head,” she said. “In the books, Geralt is fearsome, but he also has this amazing dry wit. We needed someone to play both ends of the spectrum, someone who could see all the trauma of the world he’s in but could also step back and roll his eyes once in a while.”
And on whether or not he'll don the cape again as Superman, Cavill hints, “I’ve not given up the role."
CLICK HERE TO GET THE FOX NEWS APP
“There’s a lot I have to give for Superman yet. A lot of storytelling to do. A lot of real, true depths to the honesty of the character I want to get into. I want to reflect the comic books. That’s important to me. There’s a lot of justice to be done for Superman. The status is: You’ll see," he added.


Crazy Grace
div css jquery Web development
design by Yuejiao (University of Victoria )
css html jquery seo php
Homepage
My album
My university
Entertainment
Contact me
Homepage
Contact
Your Email:
Your Message：
CODE：