Configurando sua IDE
Trabalhar com Play é fácil.
Você não precisa sem usar uma IDE sofisticatada e o Play compila e faz o refresh das modificações que você fizer no código fonte automaticamente.
Portanto você pode tranquilamente trabalhar com um simples editor de textos.
Entretanto, usando uma IDE Java moderna proporciona interessantes opções como auto-completion, compilação on-the-fly,assistente de refatoração e debug.
O Play suporta as platformas: NetBeans, IntelliJ IDEA e Eclipse .
Eclipse
Configuração geral
O Play proporciona um comando para simplificar a configuração do Eclipse.
Para transformar uma aplicação do Play em um projeto do Eclipse funcionando, use o comando eclipsify
:
# play eclipsify myApp
Você precisa importar a aplicação para dentro do seu Workspace com a opção do menu File/Import/General/Existing project….
Se você fizer alguma mudança importante na aplicação, como mudar o classpath, use eclipsify
novamente para regenerar os arquivos de configuração.
Não commite os arquivos de configuração do Eclipse quando trabalhar em equipe!
Os arquivos de configuração contém referências absolutas da instalação de seu framework.
Eles são específicos de sua instalação.
Quando trabalhar em equipe, cada desenvolvedor de manter os seus arquivos de configuração do Eclipse só para ele.
Launchers
O comando eclipsify
gera alguns launchers para a sua aplicação.
Por exemplo, rodando eclipsify
em uma aplicação chamada Nice app vai criar is seguintes launchers na pasta do eclipse/
:
Nice app.launch
- o launcher principal, equivalente ao comandoplay run
, que você pode usar para rodar sua aplicação clicando com o botão direito e selecionando Run As > Nice appTest Nice app.launch
- the test launcher, equivalente ao comandoplay test
command, que você pode usar para rodar sua aplicação clicando com o botão direito e selecionando Run As > Test Nice appConnect JPDA Nice app.launch
- o conector de debug de sessão JPDA, que pode conectar o Eclipse debugger em uma instância do Play já rodando, clicando com o botão direito e selecionado Debug As > Connect JPDA Nice app. Parar a sessão de debug não para o servidor.
plug-in do Play para o Eclipse
Adicionalmente, o Play vem com um plug-in do Eclipse que possui alguns editores para template de HTML, dos arquivos application.conf
e routes
.
Para instalar, copie o arquivo JAR de $PLAY_HOME/support/eclipse
para $ECLIPSE_HOME/dropins
.
NetBeans
Play provides a command to simplify NetBeans configuration. To transform an existing application to a valid NetBeans project, use the netbeansify
command:
# play netbeansify myApp
Then you can just open the application as a NetBeans project.
Use the standard Run button to start the application. When the application is started you can attach a debugging session at any time using the Debug button. Stopping the debugging session doesn’t stop the server.
If you make any important change to your application such as changing the classpath, use netbeansify
again to regenerate the configuration files.
Do not commit the nbproject/
directory when you work in a team!
The generated configuration files contains absolute references to your framework installation. These are specific to your own installation. When you work in a team on the same application, each developer must keep his NetBeans configuration files private.
IntelliJ IDEA
Play provides a command to simplify IntelliJ IDEA configuration. To transform an existing application to a valid IntelliJ IDEA module, use the idealize
command:
# play idealize myApp
To create a single module project, do the following in IntelliJ IDEA.
- On the command line, use the
play new
command to create the Play project. - On the command line, use the
play idealize
command to create an IntelliJ IDEA module. - In IntelliJ IDEA, on the File menu, select Open Project… and select the generated
.ipr
file.
To add a run configuration:
- In IntelliJ IDEA, on the Run menu, select Edit Configurations.
- Right-click on Application under Defaults and select Add New Configuration.
- Under Main class, enter
play.server.Server
. - Under VM parameters, enter
-Dapplication.path="."
. - Under Working directory, enter the application path.
To run Play in test mode in IntelliJ:
- Edit the run configuration and in VM parameters, append -Dplay.id=test.
- Right-click on your module and select Open Module Settings.
- Select the Dependencies tab.
- Click Add… and select Single-Entry Module Library.
- Select
$PLAY_HOME/modules/testrunner/lib/play-testrunner.jar
and click OK.
Do not commit the .iml files when you work in a team!
The generated configuration files contains absolute references to your framework installation. These are specific to your own installation. When you work in a team on the same application, each developer must keep his IntelliJ IDEA configuration files private.
Textmate
Install the Textmate bundle provided at $PLAY_HOME/support/textmate.zip
to enable syntax coloring and auto-completion. The bundle also eases navigation between controllers and views.
Vim
Inspired by Textmate, the snipMate plug-in provides keyword auto-completion in Vim. Play provides snippets files for HTML and Java: to use them, install snipMate and copy $PLAY_HOME/support/vim/*.snippets
to ~/.vim/snippets/
.
Custom configuration
As Play applications are standard Java applications, you don’t need a specific plug-in to work with your preferred editor. This, however, requires a little bit of knowledge of how Play works.
Classpath settings
A Play application classpath is built as follows (in this order):
- The
conf/
directory for the application - The
$PLAY_PATH/framework/play-$version.jar
- All JAR files found in your application’s
lib/
directory - All JAR files found in the
$PLAY_PATH/framework/lib/
directory
Tip
If you have any modules enabled, you will need to add all modules’ libraries (from the $module/lib/
directory) to the classpath as well.
Main class to run
To start a Play application, just run the play.server.Server
class. Play uses the "application.path"
system property to locate the application to run. Typically you pass this value with:
java -Dapplication.path="/app/path"…
Java agent
To enable HotSwap reloading you have to load a Java agent packaged in the play.jar
library. Typically like this:
java -javaagent:"$PLAY_PATH/framework/play.jar" …
It’s not required, but will speed-up class reloading when it is possible.
Debugging issues
Play automatically reloads Java classes when the Java sources are modified. However as Java does not fully support class reloading, the JDPA debugger can easily get confused: breakpoint submission may fail or the debugger may stop on the wrong line when you step into the code.
To avoid this behavior, a better way is to start a fresh debugging session after a code modification. Luckily, JPDA supports the ability to connect and disconnect the debugger at any time without restarting the JVM.
So the correct workflow for debugging is:
- Make changes to your source code.
- Refresh the browser to see the results. (At this time Play will reload your code modifications and redefine classes in the JVM.)
- If something goes wrong and you need to debug, start a new debug session.
- Debug and correct your code.
- Disconnect the debugger.
By using this work-flow you will always have a debugger synchronized with the code loaded in the JVM.
Próximo: Tutorial ‘Hello World’.


Note: This website is an initial scale website until I am able to work on a more custom solution. Check out the different pages to learn about me or my plans for a more comprehensive solution
Thank you for visiting!
Note: This website is an initial scale website until I am able to work on a more custom solution. Check out the different pages to learn about me or my plans for a more comprehensive solution
Thank you for visiting!


@* * Copyright 2010-2017 Artima, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *@ @import controllers.Application.scaladocsPageUrl @import controllers.Application.scalacticScaladocsPageUrl @userGuidePage("Using assertions") {
ScalaTest makes three assertions available by default in any style trait. You can use:
assert
for general assertions;assertResult
to differentiate expected from actual values;intercept
to ensure a bit of code throws an expected exception.To get moving quickly in ScalaTest, learn and use these three assertions. Later if you prefer you can switch to the more expressive matchers DSL.
ScalaTest's assertions are defined in trait Assertions
, which is
extended by Suite
, the supertrait to
all style traits. Trait Assertions
also provides:
fail
to fail a test unconditionally;assume
to cancel a test;withClue
to add more information about a failure.All of these constructs are described below.
assert
macroIn any Scala program, you can write assertions by invoking assert
and passing in a Boolean
expression,
such as:
val left = 2 val right = 1 assert(left == right)
If the passed expression is true
, assert
will return normally. If false
,
Scala's assert
will complete abruptly with an AssertionError
. This behavior is provided by
the assert
method defined in object Predef
, whose members are implicitly imported into every
Scala source file.
ScalaTest defines another assert
method that hides the
one in Predef
. It behaves the same, except that if false
is passed it throws
TestFailedException
instead of AssertionError
.
Why? Because unlike AssertionError
, TestFailedException
carries information about exactly
which item in the stack trace represents
the line of test code that failed, which can help users more quickly find an offending line of code in a failing test.
If you pass the previous Boolean
expression, left == right
to assert
in a ScalaTest test,
a failure will be reported that includes reporting the left and right values. (This is possible because ScalaTest's assert
is implemented as a macro.)
For example, given the same code as above but using ScalaTest assertions:
import org.scalatest.Assertions._ val left = 2 val right = 1 assert(left == right)
The detail message in the thrown TestFailedException
from this assert
will be: "2 did not equal 1".
You can provide an alternate error message by providing a String
as a second argument
to assert
, like this:
val attempted = 2 assert(attempted == 1, "Execution was attempted " + left + " times instead of 1 time")
Using this form of assert
, the failure report will be more specific to your problem domain, thereby
helping you debug the problem. This Assertions
trait also mixes in the
TripleEquals
, which gives you a ===
operator
that allows you to customize Equality
and perform equality checks with a numeric
Tolerance
. You can also use ===
to enforce type constraints at compile time with
sibling traits TypeCheckedTripleEquals
and
ConversionCheckedTripleEquals
.
Although ScalaTest's assert
macro provides a natural, readable extension to Scala's assert
mechanism that
provides good error messages, as the operands become lengthy, the code becomes less readable. In addition, the error messages
generated for ==
and ===
comparisons
don't distinguish between actual and expected values. The operands are just called left
and right
,
because if one were named expected
and the other actual
, it would be difficult for people to
remember which was which. To help with these limitations of assertions, Assertions
includes a method called assertResult
that
can be used as an alternative to assert
. To use assertResult
, you place
the expected value in parentheses after assertResult
, followed by curly braces containing code
that should result in the expected value. For example:
val a = 5 val b = 2 assertResult(2) { a - b }
In this case, the expected value is 2
, and the code being tested is a - b
. This assertion will fail, and
the detail message in the TestFailedException
will read, "Expected 2, but got 3."
If you just need the test to fail, you can write:
fail()
Or, if you want the test to fail with a message, write:
fail("I've got a bad feeling about this")
Sometimes you need to test whether a method throws an expected exception under certain circumstances, such as when invalid arguments are passed to the method. You can do this in the JUnit 3 style, like this:
val s = "hi" try { s.charAt(-1) fail() } catch { case _: IndexOutOfBoundsException => // Expected, so continue }
If charAt
throws IndexOutOfBoundsException
as expected, control will transfer
to the catch case, which does nothing. If, however, charAt
fails to throw an exception,
the next statement, fail()
, will be run. The fail
method always completes abruptly with
a TestFailedException
, thereby signaling a failed test.
To make this common use case easier to express and read, ScalaTest provides an intercept
method. You use it like this:
val s = "hi" intercept[IndexOutOfBoundsException] { s.charAt(-1) }
This code behaves much like the previous example. If charAt
throws an instance of IndexOutOfBoundsException
,
intercept
will return that exception. But if charAt
completes normally, or throws a different
exception, intercept
will complete abruptly with a TestFailedException
. intercept
returns the
caught exception so that you can inspect it further if you wish, for example, to ensure that data contained inside
the exception has the expected values.
Trait Assertions
also provides methods that allow you to cancel a test.
You would cancel a test if a resource required by the test was unavailable. For example, if a test
requires an external database to be online, and it isn't, the test could be canceled to indicate
it was unable to run because of the missing database. Such a test assumes a database is
available, and you can use the assume
method to indicate this at the beginning of
the test, like this:
assume(database.isAvailable)
For each overloaded assert
method, trait Assertions
provides an
overloaded assume
method with an identical signature and behavior, except the
assume
methods throw TestCanceledException
whereas the
assert
methods throw TestFailedException
. As with assert
,
assume
hides a Scala method in Predef
that performs a similar
function, but throws AssertionError
. And just as you can with assert
,
you can optionally provide a clue string, or use ===
to get a more detailed
error message. Here are some examples:
assume(database.isAvailable, "The database was down again") assume(database.getAllUsers.count == 9)
For each overloaded fail
method, there's a corresponding cancel
method
with an identical signature and behavior, except the cancel
methods throw
TestCanceledException
whereas the fail
methods throw
TestFailedException
. Thus if you just need to cancel a test, you can write:
cancel()
If you want to cancel the test with a message, just place the message in the parentheses:
cancel("Can't run the test because no internet connection was found")
If you want more information that is provided by default by the methods if this trait,
you can supply a "clue" string in one of several ways.
The extra information (or "clues") you provide will
be included in the detail message of the thrown exception. Both
assert
and assertResult
provide a way for a clue to be
included directly, intercept
does not.
Here's an example of clues provided directly in assert
:
assert(1 + 1 === 3, "this is a clue")
and in assertResult
:
assertResult(3, "this is a clue") { 1 + 1 }
The exceptions thrown by the previous two statements will include the clue
string, "this is a clue"
, in the exception's detail message.
To get the same clue in the detail message of an exception thrown
by a failed intercept
call requires using withClue
:
withClue("this is a clue") { intercept[IndexOutOfBoundsException] { "hi".charAt(-1) } }
The withClue
method will only prepend the clue string to the detail
message of exception types that mix in the ModifiableMessage
trait.
See the documentation for ModifiableMessage
for more information.
If you wish to place a clue string after a block of code, see the documentation for
AppendedClues
.
Next, learn about tagging your tests.


Sign up
Subscribe to our newsletter
Type:
Individual
Company
Sign up
By clicking
Sign up
you agree to our
terms of service


|
libcaer
2.0.0-r03701472c913c547a88c15e2d287b3729f798d31
|
#include <dvs128.h>
Data Fields | |
| int16_t | deviceID |
| Unique device identifier. Also 'source' for events. | |
| char | deviceSerialNumber [8+1] |
| Device serial number. | |
| uint8_t | deviceUSBBusNumber |
| Device USB bus number. | |
| uint8_t | deviceUSBDeviceAddress |
| Device USB device address. | |
| char * | deviceString |
| Device information string, for logging purposes. | |
| int16_t | logicVersion |
| Logic (FPGA/CPLD) version. | |
| bool | deviceIsMaster |
| Whether the device is a time-stamp master or slave. | |
| int16_t | dvsSizeX |
| DVS X axis resolution. | |
| int16_t | dvsSizeY |
| DVS Y axis resolution. | |
DVS128 device-related information.


|
Dear Michael
Thank you for your recent purchase of Monarch!
To activate your courses, go to www.activatemonarch.com and enter your Monarch username and password, if you already have a Monarch account.
If you're new to Monarch, simply enter your first and last name, your email address and your desired username and password to create your account. (Note: Usernames are case sensitive).
Activation Codes
Product: Monarch - Family Monthly Subscription SKU: MONCOR015 Activation Code: A5B739FBC21E80C932477BBBF1AEB4F85329034D Product: Monarch - Family Yearly Subscription SKU: MONCOR125 Activation Code: B46D65AAA0836C79F9234FB6C7933BEF9ABD62BB Product: Monarch - Individual Monthly Subscription SKU: MONCOR011 Activation Code: C86B9208A9A4CB14BAC10F342CF844AF0B0AEE
F5
Once your courses are activated, you can begin homeschooling by logging in to monarch.aop.com.
Hands-on Monarch Helps
Teacher Guide – Directions to set up your lessons, calendar, and more.
Student Guide – Details to navigate the dashboard, assignments, and questions.
On-Demands – Video tours of Monarch courses. Pick a grade, subject, and click 'view.'
Webinars – 60-minute online workshops hosted by live presenters.
Technical Support – Call<PHONE_NUMBER> Monday through Friday from 7 a.m. to 5 p.m. (CT).
|


Header
Click Me
HTML Forms for INPUT
Name:
Score:
If you click the "Submit" button, the form-data will be sent to a page called "/ProcessingCode".


You cannot be president of the {{field_1}} if you don't have {{field_2}}. Remember Lincoln, going to his {{field_3}} in times of trial and the {{field_4}} and all that {{field_5}}. You can't be. And we are {{field_6}}. So don't feel sorry for -- don't cry for me, {{field_7}}. Message: I {{field_8}}.


{% extends "base.html" %} {% block content %}
Welcome to demo of nl2bash. Refer to Github repository (https://github.com/radoondas/flask-app-search) for more information.


Arch Linux Installation Guide
This post will be a comprehensive guide to installing Arch Linux. I will be installing Arch Linux on a refurbished ThinkPad T430 Laptop, first as a guest OS on a Windows 10 Pro host, and then on a secondary SSD that will replace the optical drive. I will try to cover absolutely everything you need from creating a bootable USB drive to customizing the desktop interface and installing development environments and tools.
Put Arch Linux on a USB drive
I recommend that you download a BitTorrent client such as Deluge, and then grab the ISO magnet link from https://www.archlinux.org/download/. It should take just a few minutes to complete the download via BitTorrent.
If you are using a Mac to build the bootable drive, I have read that you can use the dd
command. This didn’t work for me.
I found out that my 2011 MacBook Air is not capable of creating Windows 10 bootable media. Only the options for Windows 7 and 8 were available in Boot Camp Assistant (the Mac utility for installing Windows and creating bootable media). I also found that the latest MacBooks can’t create bootable media. I was able to find another Mac that had the option for creating “Windows 7 or later”, and this finally worked.
Another solution that is probably much faster is using Rufus, a Windows/Linux utility for burning ISO images to bootable media. The Arch Wiki has a highlighted note about using Rufus:
Note: Be sure to select DD mode or the image will be transferred incorrectly.
A problem I found is that you can’t select the ISO with DD mode selected. I was able to select ISO (in ISO mode), choose the ISO file in my downloads folder, and then select DD mode.
VirtualBox
The T430 came with a copy of Windows Pro, which I installed right away. I also picked up a SSD sleeve that can replace the optical drive for dual booting or additional storage. I have installed Arch Linux on my Windows desktop machine, as well as my MacBook Air. Land of Linux has a great tutorial on installing Arch Linux in Virtual Box, but it is frustrating because there is no date and no comments. This part of the guide will closely follow this guide and provide some corrections where you might get stuck following the directions command for command.
First we want to set up a new virtual machine with the options Linx / ArchLinux / 64-bit.  The first obstacle is you will probably face with VirtualBox is that there are no options for 64-bit. This is because Intel Virtualization is often disabled by default. You will need to go into the BIOS (by pressing delete
of F10
/F12
at boot time) and then change this option, save the BIOS settings and restart. With this done, you will want to create a virtual machine with at at least 20GB of storage and around 4GB of memory.
Quick note about fonts
The default font when installing Arch Linux is quite small, so you may want to increase the font size.
ls /usr/share/kbd/consolefonts/
This command will list the available fonts. To set a font, run the following command:
setfont sun12x22
To revert back to the default font, just run:
setfont
You can also view the current font with
showconsolefont
Using fdisk
for partitioning
fdisk is a dialogue-driven program for creation and manipulation of partition tables.
This part of the guide will be similar for installation on virtual machines and regular installions (on harddrives in desktops and laptops). If you are installing on a physical machine that has other disks of similar size to your target disk, I recommend that you first remove all other drives so you don’t accidentaly format partitions (I did this by accident, but luckily it was just my Windows Boot Partition and I was able to recover my Windows installation).
We want to run fdisk and enter the device we want to work with as the first argument after the command:
fdisk /dev/sda
On your Virtual Machine it will most likely be sda, but on a physical machine it could vary slightly.
Note about fdisk
When installing Arch Linux on a disk that has Windows or Linux installed (and you want delete the existing Windows or Linux completely to make room for a fresh Arch Linux istallation), you can delete the partitions on the drive (which is usually labeled /dev/sda
or /dev/sdb
or /dev/sdc
). Run lsblk
to determine which drive you want to format, then run fdisk /dev/sdX
where X
corresponds to the drive we will be using. You should be inside the fdisk menu. Press d
to start deleting partitions. You may get some warnings about a partition containing some type of trace (such as ext4). This is fine. You can delete all of the partitions.
Create a root partition
Press n
and then p
. When prompted for first sector
press ENTER
, and for last sector
enter +10G
for a 10GB partition.
Create a SWAP partition
Press n
for a new partition, press p
for primary partition. Select partition number 2
. Press ENTER
to select the default start sector, and then type +1G
to create a 1GB swap partition. Press t
to indicate the type of partition this will be. Specify that we are still working with partition 2
, and then enter 82
, the code for SWAP partition.
Create home partition
Enter the following fdisk
commands:
n
, p
, 3
, ENTER
, ENTER
, t
, 3
, 83
.
Before exiting the fdisk
interface, enter the w
command to write the proposed changes.
We should see the following:
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
Create Filesystems and Format Partitions
Make filesystems for partitions 1 and 3:
mkfs.ext4 /dev/sda1
mkfs.ext4 /dev/sda3
mkswap /dev/sda2
swapon /dev/sda2
Verify our layout with lsblk
lsblk
Mount Filesystems
mount /dev/sda1 /mnt
mkdir /mnt/home
mount /dev/sda3 /mnt/home
(The swap partition has already been initialized.)
Backup mirrorlist
cp -vf /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.backup
We can edit the mirrorlist to select the closest mirror, but this is not necessary.
Install reflector
This synchronizes package databases:
pacman -Syy
Next we want to install our first package: reflector
.
pacman -S reflector
The following command will sort the five best mirrors based on your location:
reflector --verbose -l 5 --sort rate --save /etc/pacman.d/mirrorlist
Re-issue the sync command:
pacman -Syy
Installing the base
The base installation is installed using a special script called pacstrap
.
We will be using the base
group and also the base-devel
group that we will need later.
Issue the following command:
pacstrap /mnt base base-devel
This will install lots of packages; it takes a few minutes. It took me 4:27.06
on my MacBook Air and about 2.5 minutes on my ThinkPad.
Create /etc/fstab
The next step is to create a mount table that will be responsible for automatically mounting filesystems at boot time.
Issue the following command:
genfstab -U -p /mnt >> /mnt/etc/fstab
We can verify the entries with cat /mnt/etc/fstab
, or blkid /dev/sd#
where #
is the partition number.
Chroot - Configuring the base system
To configure our new installation, we need to issue the arch-chroot
command. This command is used as follows: arch-chroot
followed by the new root directory as the first argument.
root@archiso ~ # arch-chroot /mnt /bin/bash
[root@archiso /]#
We could pass in additional arguments to specify a particular shell, but here we are using bash
.
Configuring locale settings
nano /etc/locale.gen
Uncomment en_US.UTF-8 UTF-8
for US English.
Once the desired locales have been uncommented, run local-gen
.
Next we will create /etc/locale.conf
:
echo LANG=en_US.UTF-8 > /etc/locale.conf
export LANG=en_US.UTF-8
Create the following file: /etc/vconsole.conf
and add the following line:
KEYMAP=us
To configure the time zone, we need to create a link to a file called /etc/localtime
.
The following command won’t work, we will do this in a later step, so skip the following command for now.
ln -s /usr/share/zoneinfo/US/Eastern /etc/localtime
This worked on my MacBook Air in VirtualBox, but in doing this on my Windows host in VirtualBox trying to link to the file /etc/localtime
gave an error that the file already existed. Skipping this step on my ThinkPad was OK. Looking in the file, it seemed that UTC was already configured.
Set the Hardware Clock
hwclock --systohc --utc
Set the Host Name for the System
I’m using the hostname archthinkpad
, you can pick whatever host name you want.
echo archthinkpad > /etc/hostname
Enable Multilib Repository
Add the following to /etc/pacman.conf
:
[multilib]
Include = /etc/pacman.d/mirrorlist
And then run
pacman -Syy
Add support for Yaourt Package Tool
Add the following to the end of /etc/pacman.conf
:
[archlinuxfr]
SigLevel = Never
Server = http://repo.archlinux.fr/$arch
Then run pacman -Syy
.
Synchronize and Update Database Packages
Run the “update system” command:
pacman -Syu
Create a password for the root account
passwd
and enter a password for the root user.
Add a new user with sudo privileges
To add a new user we issue useradd
along with primary and secondary groups. wheel
group members will be able to issue commands prefixed with sudo
.
useradd -mg users -G wheel,storage,power -s /bin/bash brian
Then set a password for this user:
passwd brian
Install sudo Package
pacman -S sudo
Configuring a sudo - adding user to wheel group
We now need to configure the sudo configuration file. In order to edit this file we must use a special command called visudo
.
This is an editor like vi
or vim
and it edits the sudo config file.
When we run visudo
, we might see the follwoing error:
visudo: specified editor (vim) doesn't exist.
Let’s install vim:
pacman -S vim
Now we should be able to run visudo
.
We need to uncomment the following line:
# %wheel ALL=(ALL) ALL
To do this, press the down arrow until we are on the line we need to uncomment, then press i
, then remove the #
and space. Next, press esc
and then press :
and then x
and then press ENTER
. That should save our changes. Arch Linux warns that this file ONLY be edited with vim
.
Installing a bootloader
At this point the directions will fork based on your motherboard firmware. By default grub-install uses target x86_64-efi. If you don’t have a UEFI system you should use the following command:
pacman -S grub
grub-install --target=i386-pc --recheck /dev/sdb
If this works properly you should see the following:
Installing for i386-pc platform.
Installation finished. No error reported.
–target=i386-pc instructs grub-install to install for BIOS systems only. It is recommended to always use this option to remove ambiguity in grub-install.
Here is more information about GRUB from the Arch Wiki.
Finally run the following command:
grub-mkconfig -o /boot/grub/grub.cfg
[Note: If you had a multi OS environment, you could install the “os-prober” package with “pacman -S os-prober” before running the “grub-mkconfig” command. Os-prober will detect other operating systems when generating the grub.cfg file.]
Arch Linux is now installed
Issue the following commands to exit:
exit
umount /mnt/home
umount /mnt
reboot
Boot from existing OS
At the startup screen, select “Boot existing OS”.
I got a strange error message at login:
arch20815 login: [9.921142] piix4_smbus 0000:00:07.0: SMBus base address uninitialized - upgrade BIOS or use force_addr=0xaddr
Press ENTER
to return to the login prompt.
Login with the sudo
user we created.
We can check to see if this user was setup properly by running:
[brian@arch20815 ~]$ sudo whoami
We trust you have received the usual lecture from the local System Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
[sudo] password for brian:
root
[brian@arch20815 ~]$
Configuring the Network
After the reboot we will have lost network connectivity. We need to create a new definition to our interface. We can isssue the command ip link
.
Run sudo vi /etc/systemd/network/enp0s3.netork
and add the following to this file:
[Match]
Name=en*
[Network]
DHCP=yes
Then we need to run the following commands:
sudo systemctl restart systemd-networkd
sudo systemctl enable systemd-networkd
Next issue the following command:
sudo vi /etc/resolv.conf
And add the following to this file:
nameserver <IP_ADDRESS>
nameserver <IP_ADDRESS>
Next we can check connectivity:
ip a s
ping -c 3 www.google.com
We should see that we have been assigned an IP address and that we can ping google.com.
Run a full System update
sudo pacman -Syu
Installing the X Environment
I have had problems with this step in the past.
The next step in the tutorial is to run:
sudo pacman -S xorg-server xorg-xinit xorg-utils xorg-server-utils mesa xorg-twm xterm xorg-xclock
But this will result in:
error: target not found: xorg-utils
error: target not found: xorg-server-utils
It seems that these packages have been deprecated. I think a solution to this is to run:
sudo pacman -S xorg-apps
and then install the remaining packages:
sudo pacman -S xorg-server xorg-xinit mesa xorg-twm xterm xorg-xclock
Select option 1
(don’t select the options that include the word nvidia).
Next we need to install linux-headers
:
sudo pacman -S linux-headers
Next we need to install some VirtualBox packages:
sudo pacman -S virtualbox-guest-utils virtualbox-guest-dkms
The tutorial didn’t mention the linux-headers
package, but the error message that comes up if you skip this step say that this package is needed.
xorg-server-utils
seems to have been removed, but it was a meta-package that simply included the following:
xorg-iceauth xorg-sessreg xorg-xcmsdb xorg-xbacklight xorg-xgamma xorg-xhost xorg-xinput xorg-xmodmap xorg-xrandr xorg-xrdb xorg-xrefresh xorg-xset xorg-xsetroot
Installing these packages individually did not help.
This does a full install of xorg (reinstalling many packages I just installed). After running this command, running startx
gives no errors and lets me enter the X environment.
Installing GNOME Desktop
Next, let’s install GNOME
desktop. Issue the following command:
sudo pacman -S gnome gnome-extra gdm
Accept all of the defaults and then confirm by pressing Y
.
Installing Networking Tools
sudo pacman -S net-tools
Installing popular packages
sudo pacman -S pulseaudio pulseaudio-alsa pavucontrol gnome-terminal firefox flashplugin vlc deluge smplayer audacious qmmp gimp xfburn gedit gnome-system-monitor
Installing codecs for audio and video
sudo pacman -S a52dec faac faad2 flac jasper lame libdca libdv libmad libmpeg2 libtheora libvorbis libxv wavpack x264 xvidcore
Install Yaourt
sudo pacman -S yaourt
NEVER run yaourt with sudo or as root
Finally, enable GNOME to start automatically at boot:
sudo systemctl enable gdm
The last issue I had was getting GNOME Desktop to display in full-screen in VirtualBox. To do this, click on the Devices Tab and then Insert Guest Additions Image.
reboot
Login with the user account that you created. At this point, trying to open Terminal will probably not work. This is because of an issue mentioned earlier about a locale file. Let’s look at /etc/locale.conf
:
cat /etc/locale.conf
We just need to make sure that the language we want is uncommented in /etc/locale.gen
. We did this previously. Now we need to run the following command:
sudo locale-gen
This should allow us to access the terminal.
Enable Wi-Fi
To enable Wi-Fi, first check lspci -k
if you have an onboard wifi card or lsusb -v
if you have a USB wifi adapter.
Next run ip link
and see if there is an entry that starts with w
. This is wireless interface. If you don’t have WiFi working it probably says state DOWN
in the description.
We need to run the following command to bring it up:
sudo ip link set <the code that starts with w> up
If we go to “Settings” we will see an error that says “NetworkManager needs to be running.”
To get NetworkManager running, issue the following commands:
sudo systemctl enable NetworkManager.service
sudo systemctl start NetworkManager.service
This will prompt you for authentication, then you can go back to Settings > Network
and you should be able to find any available Wi-Fi networks.
Customizing GNOME Desktop
Next let’s work on customizing our GUI.
We will now start making use of the yaourt
utility to build packages for programs we want to install.
Yaourt gives us a useful flag to search packages:
yaourt -Ss search_term1 search_term2
This returns a list of packages which match search terms either in their title or description. When you find the right package you can copy the exact name and then download it with:
yaourt -S package_name
Let’s start with nice custom theme, numix.
Run the following:
yaourt -Ss numix
We will see many packages, and there are three that we should install:
numix-gtk-theme
numix-circle-theme-git
numix-cursor-theme-git
The installations process for numix-gtk-theme
is quite long. You need to confirm Yes
and it will also ask you the following:
Edit PKGBUILD with:
Here you can type nano
and press ENTER
. It will then show you a file in nano
or the editor you select. You can press Ctrl-X
and the installation script will continue running.
You will also see the following message before being prompted to select an editor:
Please add $VISUAL to your environment variables.
Let’s do that now so we are not prompted to do it later:
sudo nano ~/.bashrc
Add the following line to the end of the file:
export VISUAL="nano"
You could also set VISUAL="vim"
or some other editor.
Now that we have installed the themes, let’s activate them. Press ALT F2
and type gnome-tweak-tool
. Under the appearance tab you can select the newly installed GTK+ theme, icons and cursor.
GNOME Shell Extensions
You can do a lot of neat customization with extensions. You will see an Extensions
tab in the Tweak Tool. Click on “Get more extensions”. This will take you to the GNOME Shell Extensions site. Before you start using extensions, you need to add a Firefox extensions and install a package. Click the link in the blue bar at the top of the page and install the plugin.
Next you need to install the following package:
yaourt -S chrome-gnome-shell-git
Now refresh the GNOME Shell Extensions page and the blue message should go away. Here are the extensions I use:
- Applications menu
- Removable Drive menu
- Dash to Dock
- Drop Down Terminal
- Dynamic Top Bar
- User Themes
- System Monitor
- Sensory Perception
- Screen Saver and hibernate buttons (requires
gnome-screensaver
package and a GNOME Shell Extension called “Suspend and Lock Button”)
Dash to Dock lets you place the dock wherever you want, you can also change its appearance and behavior.
Screenfetch
I like to use Screenfetch, a package that prints out ASCII art for your distro and some customizable system information.
yaourt -S screenfetch
Now edit ~/.bashrc
by adding the following line at the bottom of the file:
screenfetch
Screefetch can be further customized, check out man screenfetch
for more options. For example, you can exlude certain lines about system information or add custom lines like the model of your PC, etc:
-`
.o+` brian@archthinkpad
`ooo/ OS: Arch Linux
`+oooo: Kernel: x86_64 Linux 4.12.5-1-ARCH
`+oooooo: Uptime: 5h 8m
-+oooooo+: Packages: 1044
`/:-:++oooo+: Shell: bash 4.4.12
`/++++/+++++++: Resolution: 1366x768
`/++++++++++++++: DE: GNOME
`/+++ooooooooooooo/` WM: GNOME Shell
./ooosssso++osssssso+` GTK Theme: Numix [GTK2/3]
.oossssso-````/ossssss+` Icon Theme: Numix-Circle
-osssssso. :ssssssso. Font: Cantarell 11
:osssssss/ osssso+++. CPU: Intel Core i5-3320M @ 4x 3.3GHz [44.0°C]
/ossssssss/ +ssssooo/- GPU: intel
`/ossssso+/:- -:/+osssso+- RAM: 4315MiB / 7685MiB
`+sso+:-` `.-/+oso:
`++:. `-/+/
.` `/
Quick Note on Terminal Colors
I don’t like the default white background of the terminal, so you can change this by editing the default profile. Unselect “Use colors from system theme” and select “Solarized Dark” (my preferred color scheme).
Quick Note on yaourt
You can add a --no-confirm
flag to yaourt that will prevent it from asking you if you want to proceed with each step of the installation process.
Window options
By default, GNOME only shows the X
in the top right corner of windows. You can add the maximize and minimize buttons in the Windows
tab of the GNOME Tweak Tool.
Icons on Desktop
Another default setting that may be strange for you is “Icons on Desktop” which is set to OFF
by default. The is found under the Desktop tab in the GNOME Tweak Tool.
My other setup notes
I install Chromium and set it to my default browser. My must have extension for Chrome (and any other browser) is Last Pass for account and password management.
Default Applications
You can set default applications by opening Settings > Details > Default Applications
. I use Image Viewer for photos instead of GIMP and VLC for Video.
pacman
offers similar functionality, and so does pacaur
. There are several options for how to download software with Arch Linux.
Other packages
Here’s a list of other helpful packages:
- htop (system monitoring)
htop can be customized to show some helpful information. Press F2 or click in the terminal where it says “Setup” and you will open a menu to select custom options for htop.
-
blender (video editing and 3d modeling)
-
OBS (screen recording and streaming software)
OBS took a little bit of configuring to get right. Out of the box, doing a screen capture showed just a black screen. I think the solution is to install obs-studio-git
and then reboot your computer.
- Dropbox
yaourt -S dropbox
Run the following command:
dropbox
And then follow the dialogue to sign into your Dropbox account. You will see a Dropbox folder in the File Manager.
- Google Drive
You can get access to Google Drive by going into:
Settings > Online Accounts > Google
If you have Files
set to ON
, you will find your Google Drive Folder in the side bar of the File Viewer. Clicking on the icon mounts your Google Drive and gives you access to the files.
- hexchat (IRC client)
Internet Relay Chat (IRC) is an easy way to start talking to people in real-time about any topic you can think of. Hexchat is a popular GUI client for IRC. Here is how to install hexchat:
sudo pacman -S hexchat
Once you have installed hexchat, you will want to register a nickname. This article says that the steps for registering a nickname are to:
Send the following message to freenode
(replace some_password
with a secure password of your choice and<EMAIL_ADDRESS>with your email address):
/msg NickServ REGISTER some_password<EMAIL_ADDRESS>After you send this message, check your email and you will see instructions to confirm your email that look like this:
/msg NickServ VERIFY REGISTER <your_name> <some_code_they_give_you>
This should confirm your nickname. Now you can start chatting on channels. Press Alt + S
, and then J
, and then type the name of the channel you want to join.
Configure VPN
I setup TorGuard VPN service by installing:
yaourt -S torguard
Setting Up Development Tools
Atom and other text editors
My preferred text editor is Atom:
sudo pacman -S atom
Spell checker didn’t seem to be working for me, and this seems to be a known issue, so I recommend you install the atom/spell-checker
package if you like to use atom and want spell checking.
The Arch Linux installation also came with an interesting editor called Builder
which seems pretty interesting as well.
VirtualBox
Skip this step if you are installing Arch Linux as guest OS in a VirtualBox (you can’t run a virtual machine in a virtual machine).
sudo pacman -S virtualbox
You will see a message that says:
:: There are 2 providers available for VIRTUALBOX-HOST-MODULES
:: Repository community
1) virtualbox-host-dkms 2) virtualbox-host-modules-arch
Select option 2, continue the installation process and then reboot.
Quick note on deluge
You will probably want to use a BitTorrent client to download ISO images for virtual machines you want to run. Deluge works well for this, and we already downloaded it during setup. We can add one more package for a theme that Deluge uses:
yaourt -S gtk-engine-murrine
Now grab a torrent link or file for an OS you want to download and add it to Deluge.
When it is finished we can launch VirtualBox and create a virtual machine with our ISO.
npm and node.js
Here’s a helpful article that is important to following when setting up npm and node.js. Be very careful here as some of the steps can completely mess up permissions on your entire system.
Here’s a walkthrough of the steps to get npm
setup correctly.
sudo pacman -S npm
Next run:
npm config get prefix
The output of this command is probably:
/usr
If this is the case, we MUST follow the following steps (option 2 from this article:
mkdir ~/.npm-global
npm config set prefix '~/.npm-global'
If you don’t already have a ~/.profile
file, make one, and then add the following line:
export PATH=~/.npm-global/bin:$PATH
Then run:
source ~/.profile
This will “refresh” ~/.profile
so that using the npm
command will work without needing sudo.
Next we can test that npm
works by trying to install a package:
npm install -g jshint
This should install the package with no errors.
Heroku
yaourt -S heroku-cli
Then run:
heroku keys:add
and then type yes
at the prompt. This will your computer’s public key to your Heroku account.
Note about Python versions on Heroku
I have only been able to deploy with Python 3.5.2.
Redis
sudo pacman -S redis
Next, start and enable redis.service
sudo systemctl start redis.service
sudo systemctl enable redis.service
SSH
sudo pacman -S openssh
autoenv (GitHub)
yaourt -S autoenv
You need to source activate.sh in your bashrc afterwards:
echo 'source /usr/share/autoenv/activate.sh' >> ~/.bashrc
Ruby and Jekyll
I use Jekyll for my personal site and blog, which is a static site generator written in Ruby. To start using Jekyll we need to install a ruby gem, and to install the gem we will need to first install ruby. Here is the ruby page from the Arch Wiki.
sudo pacman -S ruby
Next we can install the Jekyll gem:
gem install jekyll bundler
It should say something like “20 gems installed” if everything was successful. You can read more about Jekyll here.
For now I will not be installing RVM (Ruby Version Manager), but the Arch Wiki has good notes on how this can be installed.
Before we use the Jekyll gem, we need to add the following to our ~/.bashrc
file:
PATH="$(ruby -e 'print Gem.user_dir')/bin:$PATH"
This will allow you to run Jekyll commands.
Python
In the installation pIssuesrocess, the latest versions of Python has been installed (3.6.2 at the time of writing this tutorial). We need to get pip
:
yaourt -S python-pip
Here’s an article from the Python documentation that covers creating virtual environments.
Here is another article about creating virtual environments in python.
Currently, there are two viable tools for creating Python virtual environments: venv is available by default in Python 3.3 and later, and installs pip and setuptools into created virtual environments in Python 3.4 and later. virtualenv needs to be installed separately, but supports Python 2.6+ and Python 3.3+, and pip, setuptools and wheel are always installed into created virtual environments by default (regardless of Python version). The basic usage is like so: Using virtualenv:
virtualenv <DIR>
source <DIR>/bin/activate
Using venv:
python3 -m venv <DIR>
source <DIR>/bin/activate
For more information, see the virtualenv docs or the venv docs.
Jupyter Notebook and IPython Notebook
IPython notebooks (also known as Jupyter notebooks), provide a nice environment for combining python runtime environments, Markdown, images, graphs and other interactive Python tools such as Bokeh. You can install both Jupyter Notebooks and IPython Notebooks:
yaort -S jupyter-notebook
yaourt -S ipython2-notebook
You can launch either of these with jupyter notebook
or ipython notebook
from the terminal.
There seems to be an issue with LaTeX
Anaconda Distribution from Continuum Analytics
If you are doing scientific computing, statistical analysis or an type of machine learning, you will want to download the Anaconda distribution. This is Python bundled with a bunch of great packages and C libraries for doing heavy lifting. Anaconda uses a slightly different tool for managing virtual environments and package management, but it is very easy to do both using the conda
command.
PostgreSQL
sudo pacman -S postgresql
sudo -u postgres -i
This switches you to the PostgreSQL user.
Before PostgreSQL can function correctly, the database cluster must be initialized:
initdb --locale $LANG -E UTF8 -D '/var/lib/postgres/data'
You should see the following:
[postgres@archthinkpad ~]$ initdb --locale $LANG -E UTF8 -D '/var/lib/postgres/data'
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.
The database cluster will be initialized with locale "en_US.UTF-8".
The default text search configuration will be set to "english".
Data page checksums are disabled.
fixing permissions on existing directory /var/lib/postgres/data ... ok
creating subdirectories ... ok
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting dynamic shared memory implementation ... posix
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... ok
WARNING: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the option -A, or
--auth-local and --auth-host, the next time you run initdb.
Success. You can now start the database server using:
pg_ctl -D /var/lib/postgres/data -l logfile start
Now type exit
to return to your regular user.
Next, start and enable postgresql.service
as root:
[brian@archthinkpad ~]$ sudo systemctl start postgresql.service
[sudo] password for brian:
[brian@archthinkpad ~]$ sudo systemctl enable postgresql.service
Created symlink /etc/systemd/system/multi-user.target.wants/postgresql.service → /usr/lib/systemd/system/postgresql.service.
[brian@archthinkpad ~]$
See the Arch Wiki article on PostgreSQL for more information.
tmux
sudo pacman -S tmux
tree
sudo pacman -S tree
Languages and Input Sources
Here is how to add support for Chinese characters and also Chinese pinyin input:
yaourt -S adobe-source-han-sans-cn-fonts
This will make Chinese characters visible. In order to type Chinese using the pinyin input method, run the following commands:
sudo pacman -S ibus
sudo pacman -S ibus-libpinyin
可以打汉字了！其它语言和文字packages可以参考这个Arch Wiki文章。
Next you can go into:
Settings > Region & Language > Input Source > + > Other
Select Chinese (Intelligent Pin Yin) from the list and you should see a language menu in the top bar. At this point I was able to see both English and Chinese in Language menu in the top bar, but the Chinese pinyin only worked after rebooting.
Spotify
Get some tunes going with the Spotfy app. It is not officially supported, but it seems to work alright. Facebook login did not work for me. You can create a new account with your existing email like this:
<EMAIL_ADDRESS>Using my main email to sign up for a new account didn’t work because that email was linked to the Facebook login.
yaourt -S spotify
Word Processing (Libre Office)
Libre Office is an open-source Office Suite similar in functionality to Microsoft Word.
sudo pacman -S libreoffice-fresh
You can also install any language packs you may need for Libre Office:
yaourt -S libreoffice-fresh-zh-CN
Disk Usage Visualizations
You can get disk usage with the du
command. There are other programs for disk space visualizations, so far I have found gdmap
and filelight
to be helpful. Both are available in the AUR:
yaourt -S gdmap filelight
Sign up for the Arch Wiki
The best way to ask for help is to ask the community. You should sign up for the Arch Wiki and post any questions you have after doing research and trying a few different solutions. The more detailed you are in your post, the better help you will get.
Miscelaneous Items
I have experienced unexpected behavior with some programs. Here’s a list of some major issues and workarounds I have found:
- Google Hangouts: I use Google Hangouts a lot for screen sharing and video conferencing. Trying to share my screen only showed a black screen with a cursor, although sharing invidual windows seemed to work fine (similar to what was happening with OBS). I found a Superuser thread describing the same issue. The solution is simply to select an Xorg session on login (instead of GNOME Classic or regular GNOME session). This is something I still don’t know much about, but the solution worked for me and I have been able to share my entire screen in Google Hangouts.
You can check which session type you are using with the following command:
echo $XDG_SESSION_TYPE
and you should either see x11
or wayland
.
Keyboard shortcuts
You can configure keyboard shortcuts by going into:
Settings > Keyboard
Search for or find the setting that says “Hide all normal windows”. I set mine to Shift + Alt + D
. You can configure other keyboard shortcuts here.
Night Light
If you are coming from Mac or Windows, you might be used to using f.lux to dim the blue colors from your screen. There are few options for Linux such as Red Shift and xflux. I finf that in GNOME, using the built in Nigh Light works the best for reduce eye strain. Just go into:
Settings > Displays
and click on Night Light. Like flux, you can set it for regular hours. There aren’t as many modes or options, but it does a pretty goog job of what I need it to do.
Helpful Commands
To view all available commands, run the following command:
compgen -c
To view all installed packages, run:
pacman -Q
Conclusion and Next Steps
Installing Arch Linux is like trying to build a house with just a spoon. You won’t get very far with a spoon, but you have the benefit of being able to order unlimited copies of free parts and materials online (the AUR, or Arch User Repository), and a great community of people that are extremely knowledgable about “building houses”. Pretty soon you are able to quickly put together a foundation, scaffolding, wiring, appliances and yes even wallpaper.
Arch Linux is a lot of work to set up compared to popular Linux distributions like Ubuntu. Just like everyone says, you learn a lot by going through the process, breaking things and starting the installations process from scratch. I totally messed up my permissions while installing and quickly found that the only solutions was to reinstall Arch. This guide is primarily for personal use, and I am sure there are things that can be improved and even done completely differently. Here’s a list of things I can start with:
-
Fix OBS Studio:
I got this to work in my earlier install and can’t seem to remember how I fixed it. Currently OBS displays a black screen when set to. I finally got OBS studio to work and I think the issue was as simple as rebooting (or possibly an update withScreen Capture
sudo pacman -Syu
). -
Encrypting the home folder: this is good practice and will make my computer more secure, it shouldnt be too difficult either.
-
Adding a boot partition and fixing GRUB: the guides I worked off of didn’t include this, and I think it would be very important to figure out how this works if I want to include Windows 10 for doing Windows-specific tasks on my laptop as well without having to go into the bios each time I want to switch OSs.
-
Using HDDs: On my desktop I would like to be able to figure out how to mount my HDD that I use for mass file storage on my Windows machine. For simplicity I have kept everything on one SSD, but it would be good to figure out how to easily add additional disks at boot time.
-
NVIDIA drivers: this does not apply to my laptop, but I would like to figure out how I can get the best drivers in Arch Linux for my NVIDIA GPU on my desktop machine. This is one thing that running Linux in a Virtual Machine really doesn’t allow you to do (pass a GPU through a VM), as far as I know.
-
All other drivers: I still have lots of questions about how to make sure that I am running things properly on my desktop PC. I feel like drivers for the laptop install were pretty automatic, but this may not be the case with additional hardware components on my desktop, such a closed-loop water cooler.
-
Additional Customization, Themes, Window Managers, etc.: There is so much that can be done with Arch Linux in terms of GUI. I love the setup I have but it would be interesting to explore some additional options like i3, for example.
-
Cusomt kernels: I am also interested in learning how I could swap out kernels. I have seen people add LTS kernels to Arch Linux for various reasons, and I’m interested to learn how this works.
-
Maximzing battery life: During the install process I saw the topic discussed but didn’t look into it. It would be nice to see if I could make changes to get more out of the battery in my refurbished ThinkPad.
-
Other areas for improvement: [add here]
-
Install RVM
-
Install EMACS
-


National Statistics
NEET statistics quarterly brief: April to June 2016
Statistics about young people not in education, employment or training (NEET).
Documents
MS Excel Spreadsheet
,
50.5KB
This file may not be suitable for users of assistive technology.
Request an accessible format.
If you use assistive technology (such as a screen reader) and need a
version of this document in a more accessible format, please email
<EMAIL_ADDRESS>.
Please tell us what format you need. It will help us if you say what assistive technology you use.
MS Excel Spreadsheet
,
74.9KB
This file may not be suitable for users of assistive technology.
Request an accessible format.
If you use assistive technology (such as a screen reader) and need a
version of this document in a more accessible format, please email
<EMAIL_ADDRESS>.
Please tell us what format you need. It will help us if you say what assistive technology you use.
MS Excel Spreadsheet
,
67.1KB
This file may not be suitable for users of assistive technology.
Request an accessible format.
If you use assistive technology (such as a screen reader) and need a
version of this document in a more accessible format, please email
<EMAIL_ADDRESS>.
Please tell us what format you need. It will help us if you say what assistive technology you use.
MS Excel Spreadsheet
,
69.7KB
This file may not be suitable for users of assistive technology.
Request an accessible format.
If you use assistive technology (such as a screen reader) and need a
version of this document in a more accessible format, please email
<EMAIL_ADDRESS>.
Please tell us what format you need. It will help us if you say what assistive technology you use.
MS Excel Spreadsheet
,
32KB
This file may not be suitable for users of assistive technology.
Request an accessible format.
If you use assistive technology (such as a screen reader) and need a
version of this document in a more accessible format, please email
<EMAIL_ADDRESS>.
Please tell us what format you need. It will help us if you say what assistive technology you use.
MS Excel Spreadsheet
,
97.1KB
This file may not be suitable for users of assistive technology.
Request an accessible format.
If you use assistive technology (such as a screen reader) and need a
version of this document in a more accessible format, please email
<EMAIL_ADDRESS>.
Please tell us what format you need. It will help us if you say what assistive technology you use.
PDF
,
233KB
,
7 pages
This file may not be suitable for users of assistive technology.
Request an accessible format.
If you use assistive technology (such as a screen reader) and need a
version of this document in a more accessible format, please email
<EMAIL_ADDRESS>.
Please tell us what format you need. It will help us if you say what assistive technology you use.
ZIP
,
112KB
This file may not be suitable for users of assistive technology.
Request an accessible format.
If you use assistive technology (such as a screen reader) and need a
version of this document in a more accessible format, please email
<EMAIL_ADDRESS>.
Please tell us what format you need. It will help us if you say what assistive technology you use.
Details
The data comes from:
-
the Department for Education’s 16 to 18 participation statistical first release (
SFR
)
-
the labour force survey (
LFS
)
-
regional
NEET
figures
The publication includes extra tables with
NEET
estimates from the
LFS
:
-
by region and gender for 16- to 24-year-olds, 18- to 24-year-olds and 19- to 24-year-olds
-
for all age groups, nationally
-
by age, gender and labour market status
Labour market status refers to people who are one of the following:
-
employed
-
unemployed
-
inactive (people who have either not looked for work in the last 4 weeks, or are not available to start work in the next 2 weeks)


Everything You Need To Know About Disney Plus: Pricing, Launch Times, Lineup And More
by Erik KainWell, the time has finally come. Disney+ is here at last–or very nearly so.Disney’s streaming service promises to rock the industry’s boat, though I wouldn’t call it a death blow to rivals like Netflix and Amazon Prime.
Rather, Disney+ will be a compelling new streaming option for families, Star Wars and MCU fans, and so competitively priced that you’ll be able to keep existing subscriptions while adding this one and not break the bank.
Here’s everything you need to know about Disney Plus.
When Does It Launch?
Disney Plus launches first in the US, Canada and the Netherlands on November 12th, 2019. You can see the exact times the streaming service goes live right here.
The next rollout of Disney Plus takes place on November 19th, when it goes live in New Zealand and Australia.
The third–and only other announced rollout–of the service takes place on March 31st, 2020 in the UK, Germany, France, Italy and Spain.
Other regions will just have to wait, unfortunately.
How Much Does It Cost?
In the US, Disney+ will set you back $6.99/month or $69.99/year. It’s $8.99/month or $89.99 per year in Canada.
It’s important to note that this subscription comes with some very nice perks. A subscription comes with:
- 4 simultaneous streams
- 4K Ultra HD in Dolby Vision and HDR10
- Dolby Atmos support
- Downloadable content
This puts the service in-line with Netflix’s $16/month tier but at a much lower cost.
It’s also cheaper than HBO or HBO Max, though a dollar more a month than Apple TV Plus.
Meanwhile, there will be bundle deals available. For $12.99/month you can get Disney+, ESPN+ and ad-supported Hulu. You’ll also be able to add Disney+ to existing Hulu subscriptions.
What TV shows, movies and other content will be available at launch?
The short answer: A whole bunch. Content ranges from Star Wars to Marvel, vaulted Disney classics to National Geographic. And now that Disney owns Fox, that means you’ll also see shows like The Simpsons and films like Avatar join the fray.
This means you’ll be able to watch the animated Beauty and the Beast, Avengers: Endgame, the original Star Wars trilogy, old Herbie movies and tons more starting tomorrow.
What devices are compatible with Disney+?
Quite a few, actually:
- Roku
- PlayStation 4
- Fire TV
- Apple TV
- Android
- iOS
- Chromecast
- Xbox One
- Samsung Smart TVs
- LG Smart TVs
- Web browsers
Just not the Nintendo Switch.
What about original content?
Disney is sparing no expense when it comes to original Disney Plus content. From across its catalogs and brands, you’ll see original films, TV shows, documentaries and much more. Here’s a sampling:
Star Wars
The Star Wars universe is getting its very first live-action TV show in The Mandalorian, starring Pedro Pascal (Game of Thrones) as a bounty hunter who looks an awful lot like Boba Fett. This show launches on day one and I will be reviewing it. Feast your eyes on this glorious trailer:
The seventh season of The Clone Wars is also coming to Disney+. And, at some undisclosed future time, Ewan McGregor is reprising his role as Obi-Wan Kenobi in an untitled series based on his character from the prologues that takes place between the events of those films and the original trilogy. Very exciting.
An untitled Cassian Andor series has also been announced, and one suspects very strongly it will need to be a prequel to the events of Rogue One.
Marvel
Marvel is getting even more original content, all of which will weave directly into the wider fiction of the MCU alongside shows like Marvel Agents of SHIELD.
The Falcon and the Winter Soldier is a new six-episode show featuring the title characters Sam Wilson / Falcon and Bucky Barnes / Winter Soldier. Reportedly lands in August of 2020.
Hawkeye continues the tradition of naming the show after the character and stars Jeremy Renner as the third-best fictional Hawkeye (after The Last Of The Mohicans and MASH). Renner reprises his role as Clint Barton in a post Endgame timeline.
Loki sees Tom Hiddleston return as the mischievous god in his very own series, and WandaVision will explore the relationship between Wanda Maximoff / Scarlet Witch (Elizabeth Olsen) and Paul Bettany’s Vision, and will lead into the feature film Dr. Strange in the Multiverse of Madness in 2021.
Other Marvel shows include Moon Knight, Ms. Marvel and She-Hulk.
Other
Pixar is getting its very own TV show on Disney+. Monsters at Work is a spinoff of the wonderful Monster’s Inc. though the story will focus on new monsters.
High School Musical is also getting a Disney+ series which releases at launch.
On the non-fiction side of the aisle we have, at launch, both Marvel’s Hero Project and The World According To Jeff Goldblum.
Day one also sees the release of the live-action Lady and the Tramp feature film.
There are many, many other Disney+ Originals in the works.
Release Schedule In November
In terms of what’s releasing very shortly after launch–new episodes to shows like The Mandalorian, for instance–here’s what Disney has revealed so far:
Tuesday, November 12
- The Mandalorian - Chapter 1
- High School Musical: The Musical: The Series - Episode 101 - “The Audition”
- Lady and the Tramp (2019)
- Noelle
- Encore! - Episode 101 - “Annie”
- Marvel’s Hero Project - Episode 101 - “Sensational Jordan”
- The Imagineering Story - Part 1 - “The Happiest Place on Earth”
- The World According to Jeff Goldblum - Episode 101 - “Sneakers”
- Forky Asks A Question - “What is money?”
- Purl (Pixar SparkShort)
- Smash and Grab (Pixar SparkShort)
- Float (Pixar SparkShort)
- Kitbull (Pixar SparkShort)
Friday, November 15
- The Mandalorian - Chapter 2
- High School Musical: The Musical: The Series - Episode 102 - “The Audition”
- Encore! - Episode 102 - “Beauty and the Beast”
- Marvel’s Hero Project - Episode 102 - “Incredible Elijah”
- The Imagineering Story - Part 2 - “What Would Walt Do?”
- The World According to Jeff Goldblum - Episode 102 - “Ice Cream”
- Forky Asks A Question - “What is a friend?”
Friday, November 22
- The Mandalorian - Chapter 3
- High School Musical: The Musical: The Series - Episode 103 - “The Wonderstudies”
- Encore! - Episode 103 - “Sound of Music”
- Marvel’s Hero Project - Episode 103 - “Unstoppable Adonis”
- The Imagineering Story - Part 3
- The World According to Jeff Goldblum - Episode 103 - “Tattoos”
- Forky Asks A Question - “What is art?”
That’s all folks!
We’ll have to see just how well Disney+ performs once it’s live tomorrow. Stay tuned to this blog for a review of The Mandalorian and, later, other Disney+ Star Wars and Marvel shows.
If you have any questions, comments or otherwise feel free to hit me up on Twitter or my Facebook page. Thanks for reading!


70 NECO workers sacked over certificate forgery
by Olaleye AlukoOlaleye Aluko, Abuja
The National Examinations Council has approved the dismissal of 70 of its workers over certificate forgery.
The NECO Governing Board carried out the dismissal, according to a statement by the body’s Head of Information and Public Relations Division, Azeez Sani, on Friday, after a report on certificate verification was carried out by the management committee.
The committee had invited the workers with allegedly questionable credentials to appear before them, after which some of them reportedly confessed that their credentials were fake.
The council noted that the dismissal was the first phase in the series of the ongoing staff certificate verification.
According to the statement, the committee also contacted the institutions the affected workers claimed to have attended only to be told that they didn’t know them.
Sani said, “The Governing Board vetted the report and approved the dismissal of the affected staff.”
Copyright PUNCH.
All rights reserved. This material, and other digital content on this website, may not be reproduced, published, broadcast, rewritten or redistributed in whole or in part without prior express written permission from PUNCH.
Contact: theeditor@punchng.com


Chuta Kaimu:
(Staring closely at the Pillar of Wisdom, the delicate letters on its face seem to move rhythmically. Given its location, this must be Chuta Kaimu....)
Touching the pillar seems to cause it to react. Try to communicate with it.


The following module will explain how to implement the outershell of your plugin client.
......................................................................................................................................
#!/usr/bin/env python3
This tells your system to compile the following script using the latest python package present at your respective directory.
from waggle import beehive
import pika
The following packages and dependicies to import in order to run plugin. Other packages can be imported as well.
config = beehive.ClientConfig(
host='<IP_ADDRESS>',
port=23181,
node='000002000000000(n)',
username = 'test-plugin',
password = 'waggle'
cacert='/path/to/cacert.pem',
cert='/path/to/cert.pem',
key='/path/to/key.pem')
The Config function initalizes your config paramters, allowing you to: Connect to beehive-dev's rabbitmq server, Connect and transmit data to the respective virtual node, and Uses the respective authentication certificates for a secure connection.
client = beehive.PluginClient(
name='(name_of_queue)',
config=config)
This Client function allows you to create your client script and connection. It allows you to declare a queue to send all your information and sets your configuration parameters to your config file.
At the end of your program, in order to send your resepctive data/plugin to rabbitmq server, you must add the following line of code:
client.publish('(key)', (value))
By assigning the aggregate of data to a particular variable, it becomes the value you send to rabbitmq. Thus, the following piece of code defines a unique key it assigns to your data, that when published, the rabbitmq server will easily be able to identify and process it accordingly.


Release Notes
Release Notes For 2.1.1
KubeSphere 2.1.1 was released on Feb 23rd, 2020, which has fixed known bugs and brought some enhancements. For the users who have installed versions of 2.0.x or 2.1.0, make sure to read the user manual carefully about how to upgrade before doing that, and feel free to raise any questions on GitHub.
What’s New in 2.1.1
Installer
UPGRADE & ENHANCEMENT
- Support Kubernetes v1.14.x、v1.15.x、v1.16.x、v1.17.x，also solve the issue of Kubernetes API Compatibility#1829
- Simplify the steps of installation on existing Kubernetes, and remove the step of specifying cluster’s CA certification, also specifying Etcd certification is no longer mandatory step if users don’t need Etcd monitoring metrics
- Backup the configuration of CoreDNS before upgrading
BUG FIXES
- Fix the issue of importing apps to App Store
App Store
UPGRADE & ENHANCEMENT
- Upgrade OpenPitrix to v0.4.8
BUG FIXES
- Fix the latest version display issue for the published app #1130
- Fix the column name display issue in app approval list page #1498
- Fix the searching issue by app name/workspace #1497
- Fix the issue of failing to create app with the same name of previously deleted app #1821 #1564
- Fix the issue of failing to deploy apps in some cases #1619 #1730
Storage
UPGRADE & ENHANCEMENT
- Support CSI plugins of Alibaba Cloud and Tencent Cloud
BUG FIXES
- Fix the paging issue of storage class list page #1583 #1591
- Fix the issue that the value of imageFeatures parameter displays ‘2’ when creating ceph storage class #1593
- Fix the issue that search filter fails to work in persistent volumes list page #1582
- Fix the display issue for abnormal persistent volume #1581
- Fix the display issue for the persistent volumes which associated storage class is deleted #1580 #1579
Observability
UPGRADE & ENHANCEMENT
- Upgrade Fluent Bit to v1.3.5 #1505
- Upgrade Kube-state-metrics to v1.7.2
- Upgrade Elastic Curator to v5.7.6 #517
- Fluent Bit Operator support to detect the location of soft linked docker log folder dynamically on host machines
- Fluent Bit Operator support to manage the instance of Fluent Bit by declarative configuration through updating the ConfigMap of Operator
- Fix the issue of sort orders in alert list page #1397
- Adjust the metric of container memory usage with ‘container_memory_working_set_bytes’
BUG FIXES
- Fix the lag issue of container logs #1650
- Fix the display issue that some replicas of workload have no logs on container detail log page #1505
- Fix the compatibility issue of Curator to support ElasticSearch 7.x #517
- Fix the display issue of container log page during container initialization #1518
- Fix the blank node issue when these nodes are resized #1464
- Fix the display issue of components status in monitor center, to keep them up-to date #1858
- Fix the wrong monitoring targets number in alert detail page #61
DevOps
BUG FIXES
- Fix the issue of UNSTABLE state not visible in the pipeline #1428
- Fix the format issue of KubeConfig in DevOps pipeline #1529
- Fix the image repo compatibility issue in B2I, to support image repo of Alibaba Cloud #1500
- Fix the paging issue in DevOps pipelines’ branches list page #1517
- Fix the issue of failing to display pipeline configuration after modifying it #1522
- Fix the issue of failing to download generated artifact in S2I job #1547
- Fix the issue of data loss occasionally after restarting Jenkins
- Fix the issue that only ‘PR-HEAD’ is fetched when binding pipeline with GitHub #1780
- Fix 414 issue when updating DevOps credential #1824
- Fix wrong s2ib/s2ir naming issue from B2I/S2I #1840
- Fix the issue of failing to drag and drop tasks on pipeline editing page #62
Authentication and Authorization
UPGRADE & ENHANCEMENT
- Generate client certification through CSR #1449
BUG FIXES
- Fix content loss issue in KubeConfig token file #1529
- Fix the issue that users with different permission fail to log in on the same browser #1600
User Experience
UPGRADE & ENHANCEMENT
- Support to edit SecurityContext in workload editing page #1530
- Support to configure init container in workload editing page #1488
- Add support of startupProbe, also add periodSeconds, successThreshold, failureThreshold parameters in probe editing page #1487
- Optimize the status update display of Pods #1187
- Optimize the error message report on console #43
BUG FIXES
- Fix the status display issue for the Pods that are not under running status #1187
- Fix the issue that the added annotation can’t be deleted when creating service of QingCloud LoadBalancer #1395
- Fix the display issue when selecting workload on service editing page #1596
- Fix the issue of failing to edit configuration file when editing ‘Job’ #1521
- Fix the issue of failing to update the service of ‘StatefulSet’ #1513
- Fix the issue of image searching for QingCloud and Alibaba Cloud image repos #1627
- Fix resource ordering issue with the same creation timestamp #1750
- Fix the issue of failing to edit configuration file when editing service #41
What’s on this Page


Linking from/to this requirement:
(this is the requirement)
| Requirement |
Link |
{% for current_requirement_set in requirement_sets %}
{% for requirement in current_requirement_set.requirements.requirements %}
|
{{requirement.html | safe}}
|
|
{% endfor %}
{% endfor %}


Home
Environment
Facts
Specs Summary
Test trends
Environment Details
You can check the execution run time status from the Gauge


All Users:
Product Manager - GA
Product Manager - Instructional Design, Lead
Biology Teacher, RegentsHelp.com, Tech Sales
Objective: Describe how clients work with servers to deliver information.
It all comes down to requests and responses
You send information out to the web, and based on the info you send, you get information back
Stands for "Hyper Text Transfer Protocol"
Allows for communication between a variety of hosts and clients, and supports a mixture of network configurations.
Read: "Makes it easy for computers to talk to each other"
Host - Client - Request - Response
Predict, with a partner, how these vocabulary words relate to one another. When you're finished, we'll draw a diagram on the board that we will refer back to.
Host - a computer or other device connected to a computer network. A host may offer information resources, services, and applications (via computer code!) to users or other computers on the network
Examples: Servers and Web Services
Let's login to the AWS Console, Heroku
Client - the requesting program in the client/host relationship
The client initiates an HTTP request message, which is serviced through a HTTP response message in return.
Come up with one example of a client that can send requests.
Web Browsers
Terminals
Open your terminal (or Git Bash on a PC), and type in the following request:
curl http://www.krossoverkredit.com/users/sign_in
cURL stands for 'Client URL Request Library'
What was returned to us? How do you know?
But before we do, let's answer the following questions in pairs:
Open up Chrome and type in 'http://www.krossoverkredit.com/users/sign_in'
Keep in mind, this is the same request and same response, so remember what makes response handling different!
Let's open the dev tools and "inspect" our response
1. HTML - Hyper Text Markup Language
Let's look at the very first webpage ever...
1. HTML - Hyper Text Markup Language
2. CSS - Cascading Style Sheets
Let's look back at our response from krossoverkredit.com...
1. HTML - "Hyper Text Markup Language"; affects structure and order of elements
2. CSS - "Cascading Style Sheets"; affects style of elements
3. JavaScript - A programming language that affects the behavior of elements
Let's assign a behavior to the nav bar using raw JavaScript...
Let's type out that "rule" together
Refresh the page to reset your "rules"
See if you can use the inspector and modify the JavaScript to do the same thing but for the "Sign Up" button
Bonus: Prevent the page from "submitting" too (you'll need to Google this one)
Server-side languages control what pages, information is served to the client.
Client-side languages are responsible for displaying information and aesthetics to the user.
Each side's programming, refers to code which runs at the specific machine, the server's or the client's.
What do you notice about the URL after you searched?
Where do they fit in?
Client: "I'm going to ask for information by explicitly saying where to go and what I need in a URL"
Server: "Based on the request/URL, I'm going to run a particular set of code (Ruby), to send you the information + data you request via HTML/CSS/JS."
Client: "Thank you for this data - I'm going to make it pretty with the HTML/CSS/JS you gave me."
With a partner, describe how clients work with hosts to deliver information on the web. Use this vocabulary: host, server, browser, HTML, URL, request, HTTP, response, CSS, JavaScript, client, initiates, format
Navigate files and folders using the terminal (or Git Bash)
Want to execute an mp3 file? Need to use iTunes
Want to run a file with code? We have to run it using the terminal program
Watch, real quick...
~/workshop-resources/secret_number/jay_nappy
Mac:
Applications > Utilitites > Terminal
PC: Right click desktop and choose
Git bash
Then, open your Finder or My Computer to look at your OS through a different interface.
Remember: Directory = Folder
pwd // Print working directory
ls // List the contents of the directory
mkdir // Create a new folder
cd // Change directories
touch // Create an empty file
rm // Remove a file
Leverage the web: Google, StackOverflow, GitHub
cd .. // Move up one directory
cd // Move to the top-most, or "root", directory
Be efficient! Let's practice some keyboard shortcuts.
Describe the relationship between HTML/CSS
Construct a basic HTML page and style with basic CSS selectors
Pull up your LinkedIn...
First, replace the ul with p tags
Center the 'h1' tags
Center the 'p' tags
What's the problem here?
Let's discuss...
Use the MDN docs or the Google framework:
Let's try it!

Let's check it out:
What kind of information does GitHub show us on its web interface?
https://github.com/plataformatec/devise
https://github.com/dirtycow/dirtycow.github.io
An object is a software bundle of related state and behavior - a "blue print". Software objects are often used to model the real-world objects that you find in everyday life.
Think about a "video game character" object...
Integers
Floats
Variables are simply a place to store data. The data can take on almost any form. All variables we store as lower case, and separate words are separated by underscores:
There are two ways to join variables together:
Discuss: Could you think of any use cases for this?
Puts is a method that Ruby "gives you for free". It stands for "PUT" "String" or show a string to the terminal:
Puts always returns 'nil'
Gets is also a method that Ruby "give you for free". It stands for "GET" "String", requesting it from user input.
What's that \n? It's newline (the user hitting enter)
f(x) = x + 2
Does this function produce anything if you repeat the "instructions"?
Think of functions as variables, but instead of data, they hold code!
In Ruby, you would write f(x) = x + 2 like:
All functions, in Ruby, start with 'def'
You call a function exactly the same (as you would in math!)
And remember, they can accept parameters
Create a function that combines two strings. Then, we'll call it with different values.
I'll give you the specs. Work with a partner to "pseudocode" it.
After, we'll review together and code it!
In Ruby, this is what is given back to you after you run a function and call/store a variable, or execute a function
Let's look at some examples in pry
To run this ruby code from a file, let's create a ruby file called "no-more-e.rb":
Rewrite the code in the file
Run the file with:
ruby FILE_NAME.rb
Why is GitHub so special for teams?
I'll chat this out: https://i.imgur.com/WpgVv2e.png
https://github.com/ryanb/cancan
Let's open it locally in Atom
git clone<EMAIL_ADDRESS>To the GitHub diagram!
Let's see how to submit a pull request using GitHub's interface
Lets take a look...eventually, we'll merge!
Let's get our brains going!
First, with a partner, describe how clients work with hosts. Use this vocabulary: host, server, browser, HTML, URL, request, text, HTTP, response, CSS, JavaScript, client, initiates, format
Then, https://github.com/jnappy/day-two-kickoff
use Booleans and conditionals to control the flow of your application
Either true or false; these give us the ability to use logic => to choose where and what we want to happen in our application.
true || false
read: "user operators; compare"
The syntax reads
The 'elsif'
I'm going to build a function that asks a user where they live and then tells them whether or not they are cool.
Fork it; clone it to your computer; solve it!
https://github.com/jnappy/beer_exercise
This allows you to create an if statement that could be satisfied by multiple conditions
Let's see an easier way to do this...
or
Predict: an easier way to do this...
Fork it, clone it, solve it!
https://github.com/jnappy/admin_exercise
Describe how URL endpoints call functions to deliver HTML, CSS, and JavaScript files to the client.
Let's look at a datatable from Krossover's test servers.
Data about an object is a collection of attributes, or types of data!
names = ['jay', 'erin', 'lindsay', 'david', 'delauno']
numbers = [1, 2, 5, 9, 13]
misc = ["one", 4, '9', "Two"]
What do names, numbers, and misc represent?

Let's access a particular element of an array
names = ['jay', 'erin', 'lindsay', 'david', 'delauno']
names[0]
=> 'jay'
NOTE: Indexes start at 0!
Imagine we get a request to get articles from our database...
Code along with me:
We can "iterate" over them!
read: "we can do something to each element in a collections of data"
Create a file with an array of your name of 5 members of your family. Using ".each" iterate through each item in the array and use the ".prepend" method to add a "$" to the beginning of each string.
sign_ins =<EMAIL_ADDRESS>"3:02pm"]<EMAIL_ADDRESS>"3:03pm"]<EMAIL_ADDRESS>"3:05pm"]<EMAIL_ADDRESS>"3:06pm"]<EMAIL_ADDRESS>"3:07pm"]<EMAIL_ADDRESS>"3:02pm"]<EMAIL_ADDRESS>"3:02pm"]<EMAIL_ADDRESS>"3:02pm"]<EMAIL_ADDRESS>"3:02pm"]<EMAIL_ADDRESS>"3:02pm"]<EMAIL_ADDRESS>"3:05pm"]
Let's look at this in a text editor and write code that prints out each of the sign-in times
You're turn: Iterate over each of the sign_ins and print out each of the user's email addresses
person = {'name' => 'Jay', 'age' => 28}
This is great for objects!
Let's build on this object
person = {name: 'Jay', age: 28}
These are called 'symbols' (just like strings, don't focus on them!!)
Symbols are just like strings, the only difference is they're more efficient - they only get stored once
They're always denoted by a : and have lowercase letters with underscores.
Let's show some symbols vs. strings on the projector (lessons/3/slides/17)
We got sweet methods on hashes too!
person.keys
person.values
person.size
Let's practice adding new values and retrieving values from a hash
person['name']
person['age']
person[:name]
person[:age]
Let's try with a larger collection: hash + array (object)
blog_post = {
title: 'What Makes A Star Starry? Is It Me?',
body: "Notice what Tyler Nordgren does in these posters. He's an artist, an astronomer (from Cornell, Carl Sagan's department);",
author: {
first_name: 'Robert',
last_name: 'Krulwich',
twitter_handle: '@rkrulwich'
},
tags: ['art', 'education', 'science']
}
blog_posts = [
{
title: 'What Makes A Star Starry? Is It Me?',
body: "Notice what Tyler Nordgren does in these posters. He's an artist, an astronomer (from Cornell, Carl Sagan's department);",
author: {
first_name: 'Robert',
last_name: 'Krulwich',
twitter_handle: '@rkrulwich'
},
tags: ['art', 'education', 'science']
},
{
title: 'The Meter: The Measure of a Man',
body: "About six and a half billion people use the metric system every single day. That's more than the citizens of any single nation, the followers of any single religion or the speakers of any single language.",
author: {
first_name: 'Latif',
last_name: 'Nasser',
twitter_handle: '@latifnasser'
},
tags: ['discovery', 'dialogues', 'history', 'meter', 'science', 'storytelling']
},
{
title: 'Shattering Silence and An Eye of God',
body: "In our Morality show, we tell the story of Eastern State Penitentiary -- a radical new kind of prison engineered to crack into the hearts and minds of 19th-Century criminals",
author: {
first_name: 'Brenna',
last_name: 'Farrell',
twitter_handle: '@brennacfarrell'
},
tags: ['history', 'morality', 'prison']
}
]
Let's store each blog post into a variable to make this feel a bit easier...
Let's try putting it all together:
https://github.com/jnappy/reddit-reader/
Hit the next arrow...
... to step through ...
... a fragmented slide.
There's different types of fragments, like:
grow
shrink
fade-out
current-visible
highlight-red
highlight-blue
You can select from different transitions, like:
None -
Fade -
Slide -
Convex -
Concave -
Zoom
reveal.js comes with a few themes built in:
Black (default) -
White -
League -
Sky -
Beige -
Simple
Serif -
Blood -
Night -
Moon -
Solarized
Set data-background="#dddddd"
on a slide to change the background color. All CSS color formats are supported.

Different background transitions are available via the backgroundTransition option. This one's called "zoom".
Reveal.configure({ backgroundTransition: 'zoom' })
You can override background transitions per-slide.

function linkify( selector ) {
if( supports3DTransforms ) {
var nodes = document.querySelectorAll( selector );
for( var i = 0, len = nodes.length; i < len; i++ ) {
var node = nodes[i];
if( !node.className ) {
node.className += ' roll';
}
}
}
}
Code syntax highlighting courtesy of highlight.js.
| Item | Value | Quantity |
|---|---|---|
| Apples | $1 | 7 |
| Lemonade | $2 | 18 |
| Bread | $3 | 2 |
These guys come in two forms, inline:
“The nice thing about standards is that there are so many to choose from”
and block:
“For years there has been a theory that millions of monkeys typing at random on millions of typewriters would reproduce the entire works of Shakespeare. The Internet has proven this theory to be untrue.”
You can link between slides internally, like this.
There's a speaker view. It includes a timer, preview of the upcoming slide as well as your speaker notes.
Press the S key to try it out.
Presentations can be exported to PDF, here's an example:
Set data-state="something"
on a slide and "something"
will be added as a class to the document element when the slide is open.
Additionally custom events can be triggered on a per slide basis by binding to the data-state
name.
Reveal.addEventListener( 'customevent', function() {
console.log( '"customevent" has fired' );
} );
Press B or . on your keyboard to pause the presentation. This is helpful when you're on stage and want to take distracting slides off the screen.


Background::: I am in my mid 30’s have tried many different substances over the last 20 years. I have never used a needle to administer a substance, I feel that needles, in the long term, always seem to turn out bad. I am not a regular user of any one particular substance.
I haven’t eaten in about 6 hours. I Just got home from work on a Friday night. Snow falling outside, about 8 inches on the ground so far (I’m not going anywhere).
7:30pm crushed 10mg tablet to a power n snorted half of it, minimal irritation if any. read more experiences.
7:40pm nothing yet upon more reading I figured the other half was warranted.
7:50pm starting to feel a bit more relaxed, nothing more than that.
8:00pm I figured I was safe from an OD at this point so I snorted another 10 mg pill, burnt my sinuses a little bit, but no where near the burn of krank. I had snorted heroin about 10 years ago so I kind of knew what I should be feeling, and at the same time mindful of the overdose potential.
8:10pm starting to feel a little floaty.
8:30pm effects are more pronounced feeling a little warmer, starting to notice the itchyness most people mention while on oxy.
8:40pm snorted another 10 mg, no burn the painkilling effects are kicking in.
9:00pm feeling pretty warm and itchy had to open a window to cool off, its 30 degrees outside so that should do the trick. The phone rang and after I answered it, I found I was in a talkative mood but my speech was a lil sloppy. The body buzz is kicking pretty good, like a energetic hemp buzz. My mind is wondering, attention span is somewhat shortened.
9:15pm just finished my first beer. Not really feeling euphoric and after some thought I decided to snort, what I thought would be my final 10 mg for the night.
10:00pm – 12:00am I laid down on my bed and spent the next 2 hours in a half asleep, half awake dreaming state. At this point the euphoria kicked in and I felt at peace, the best way to describe how I felt was ‘oneness with the world’.
12:10am
Summary::: The time span which I ingested the 50 mg total resulted in a mild to moderate spaced-out feeling very positive and appreciative. The body buzz was similar to moderate alcohol intoxication without the negative effects. The itchiness was very persistent, and did get to be annoying at times, the feeling like every nerve is standing on end. I didn't scratch so much as I rubbed everything and I do mean everything. I did notice that I had difficulty urinating, I felt like I had to go but nothing was coming out. I didn’t feel bloated like my bladder was full so I assumed my kidneys were inhibited from the drug. I tried to urinate about every 2 hours while I was in and out of this dream like state waking up from time to time. I finally succeeded in urinating about 12:00pm the next day. In spite of the fact that I didn’t sleep more than 2 hours strait, when I finally did get out of bed I felt rested with no negative effects.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


{% extends "projects/_page.html" %} {% load crispy_forms_tags %} {% load permissions %} {% block title %} Manage channels | {{ proj.full_name }} {% endblock %} {% block page %}
Channels represent the state of a version of your project. By default, you could use Stable for software releases and stable versions and Beta for snapshots, nightlies, or developer builds. But if you wish, you can switch around the channels to suit your project's workflow.


Finagle’s new response classifiers improve client’s avoidance of faulty nodes thus increasing your success rate. To get this benefit, you must wire up the application’s rules into your clients and how to do so is explained below.
First, a pop quiz — does Finagle treat an HTTP 500 response as a success or failure? How about a Thrift Exception?
If you answered failures, sadly, you are in for a surprise. Finagle
lacks application level domain knowledge of what kinds of responses
are failures. Without this, Finagle uses a conservative policy and
treats all Returns
as successful
and all Throws
as failures. Unfortunately, both HTTP 500s and Thrift
Exceptions are Returns
, and thus, successful responses.
By having you, the developers, give Finagle this application level
knowledge, it can then accurately track failures in its failure
accrual module which directly helps your client’s success rate.
Finagle’s built-in success rate metrics (e.g. clnt/tweetsvc/success
)
also become accurate and this in turn means you may be able remove
additional success rate metrics you may be wrapping on top of a
Finagle client.
In the future, we are considering wiring this into load balancing which enables us to penalize servers which are returning failures or partial results.
As of release 6.33 you wire up a ResponseClassifier
to your client. For HTTP clients, using
HttpResponseClassifier.ServerErrorsAsFailures
often works great as it
classifies any HTTP 5xx response code as a failure. For
Thrift/ThriftMux clients you may want to use
ThriftResponseClassifier.ThriftExceptionsAsFailures
which classifies
any deserialized Thrift Exception as a failure. For a large set of use
cases these should suffice. Classifiers get wired up to your client in
a straightforward manner, for example:
// Scala
import com.twitter.finagle.ThriftMux
import com.twitter.finagle.builder.ClientBuilder
import com.twitter.finagle.thrift.service.ThriftResponseClassifier
// Discoverable Parameters API
ThriftMux.client
...
.withResponseClassifier(ThriftResponseClassifier.ThriftExceptionsAsFailures)
// ClientBuilder API
ClientBuilder
...
.responseClassifier(ThriftResponseClassifier.ThriftExceptionsAsFailures)
// Java
import com.twitter.finagle.Http;
import com.twitter.finagle.builder.ClientBuilder;
import com.twitter.finagle.http.service.HttpResponseClassifier;
// Discoverable Parameters API
Http.client()
...
.withResponseClassifier(HttpResponseClassifier.ServerErrorsAsFailures());
// ClientBuilder API
ClientBuilder
...
.responseClassifier(HttpResponseClassifier.ServerErrorsAsFailures());
If a classifier is not specified on a client or if a user’s classifier
isn’t defined for a given request/response pair then
ResponseClassifier.Default
is used. This gives us the same behavior
Finagle had prior to classification — responses that are Returns
are
successful and Throws
are failures.
To do this we should understand the few classes used. A
ResponseClassifier
is a PartialFunction
from ReqRep
to
ResponseClass
.
Let’s work our way backwards through those, beginning with
ResponseClass
. This can be either Successful
or Failed
and those
values are self-explanatory. There are three constants which will
cover the vast majority of usage: Success
, NonRetryableFailure
and
RetryableFailure
. While as of today there is no distinction made
between retryable and non-retryable failures, it was a good
opportunity to lay the groundwork for use in the future.
A ReqRep
is a request/response struct with a request of type Any
and a response of type Try[Any]
. While the lack of typing may
initially disturb you, our hope is that it is not an issue in
practice. While all of this functionality is called response
classification, you’ll note that classifiers make judgements on both a
request and response.
Writing a custom PartialFunction
is easy in Scala given its syntactic
sugar. As with many things it is a bit more work from Java but is
doable. Here is an example that counts HTTP 503s as failures (for Java
examples, take a look at HttpResponseClassifierCompilationTest
and ResponseClassifierCompilationTest
):
// Scala
import com.twitter.finagle.http
import com.twitter.finagle.service.{ReqRep, ResponseClass, ResponseClassifier}
import com.twitter.util.Return
val classifier: ResponseClassifier = {
case ReqRep(_, Return(r: http.Response)) if r.statusCode == 503 =>
ResponseClass.NonRetryableFailure
}
Note that this PartialFunction
isn’t total which is ok due to
Finagle always using user defined classifiers in combination with
ResponseClassifier.Default
which will cover all cases.
Thrift and ThriftMux classifiers require a bit more care as the
request and response types are not as obvious. This is because there
is only a single Service
from Array[Byte]
to Array[Byte]
for all the
methods of an IDL’s service. To make this workable, there is support
in Scrooge and Thrift
/ThriftMux.newService
and
Thrift
/ThriftMux.newClient
code to deserialize the responses into the
expected application types so that classifiers can be written in terms
of the Scrooge generated request type, $Service.$Method.Args
, and the
method’s response type. Given an IDL:
exception NotFoundException { 1: string reason }
service SocialGraph {
i32 follow(1: i64 follower, 2: i64 followee) throws (1: NotFoundException ex)
}
One possible classifier would be:
val classifier: ResponseClassifier = {
// #1
case ReqRep(_, Throw(_: NotFoundException)) =>
ResponseClass.NonRetryableFailure
// #2
case ReqRep(_, Return(x: Int)) if x == 0 =>
ResponseClass.NonRetryableFailure
// #3
case ReqRep(SocialGraph.Follow.Args(a, b), _) if a <= 0 =>
ResponseClass.NonRetryableFailure
}
If you examine that classifier you’ll note a few things. First (#1),
the deserialized NotFoundException
can be treated as a failure. Next
(#2), a “successful” response can be examined to enable services using
status codes to classify errors. Lastly (#3), the request can be
introspected to make the decision.
It’s important to understand what the impact will be if you customize response classification for your client. Perhaps most importantly, when responses are classified as failures, this affects how failure accrual sees responses. In the past, you may have had a Thrift service returning nothing but exceptions, but this node would continue getting traffic due to failure accrual’s lack of visibility. While this changes lets you fix this visibility, you should consider what causes those responses. For example, if the service is simply proxying a failure from its downstream service, you may not want to count that as a failure.
There isn’t a strict rule on what is the right thing to do with classification. However, with some minimal thought, many services can improve their success rate both in terms of how it’s reported as well as through avoidance of bad nodes.
We’re really hopeful that this makes a significant difference in how well Finagle works for you but it needs you, the application developers, to make these choices.
If you have any questions on how to use this or feedback on how it’s working, please get in touch through @finagle or the Finaglers mailing list.