ninety-nine percent perspiration."
Who I am:
Sullivan Xiong, born and raised in the small town of Marysville, California. He moved to San Luis Obispo to pursue higher education at Cal Poly San Luis Obispo. He always had a passion in the mathematics field, and most certainly in the computer field.
Sullivan built his first computer at the young age of ten through online resources and parts that were donated to him from his relative. Due to the limited opportunities of going to a public high school, Sullivan couldn't get any experience in computer science because his school didn't offer it. Regardless of the situation, he took matters into his own hands as an autodidact and taught himself the programming languages: Python, C, nodeJS, HTML/CSS/JS.
He intends to create a start-up and become the CEO of a company, then give back to various communities, and teach the future generations the importance of an education.


module String
from Microsoft.FSharp.Core
Multiple items
type Format<'Printer,'State,'Residue,'Result> = PrintfFormat<'Printer,'State,'Residue,'Result>
Full name: Microsoft.FSharp.Core.Format<_,_,_,_>
--------------------
type Format<'Printer,'State,'Residue,'Result,'Tuple> = PrintfFormat<'Printer,'State,'Residue,'Result,'Tuple>
Full name: Microsoft.FSharp.Core.Format<_,_,_,_,_>
val sprintf : format:Printf.StringFormat<'T> -> 'T
Full name: Microsoft.FSharp.Core.ExtraTopLevelOperators.sprintf
val ( Util.reverse works ) : unit -> 'a
Full name: index.( Util.reverse works )
val res : obj
namespace Microsoft.FSharp.Core
val printfn : format:Printf.TextWriterFormat<'T> -> 'T
Full name: Microsoft.FSharp.Core.ExtraTopLevelOperators.printfn
val x : obj
Full name: index.x
val y : obj
Full name: index.y
val data : obj
Full name: index.data
union case Option.None: Option<'T>
val add : x:int -> y:string -> float
Full name: index.add
val x : int
Multiple items
val int : value:'T -> int (requires member op_Explicit)
Full name: Microsoft.FSharp.Core.Operators.int
--------------------
type int = int32
Full name: Microsoft.FSharp.Core.int
--------------------
type int<'Measure> = int
Full name: Microsoft.FSharp.Core.int<_>
val y : string
Multiple items
val string : value:'T -> string
Full name: Microsoft.FSharp.Core.Operators.string
--------------------
type string = System.String
Full name: Microsoft.FSharp.Core.string
Multiple items
val float : value:'T -> float (requires member op_Explicit)
Full name: Microsoft.FSharp.Core.Operators.float
--------------------
type float = System.Double
Full name: Microsoft.FSharp.Core.float
--------------------
type float<'Measure> = float
Full name: Microsoft.FSharp.Core.float<_>
val failwith : message:string -> 'T
Full name: Microsoft.FSharp.Core.Operators.failwith
Multiple items
type Test =
new : unit -> Test
member Invoke : args:int [] -> obj
member Item : float
member Item : float with set
Full name: index.Test
--------------------
new : unit -> Test
member Test.Invoke : args:int [] -> obj
Full name: index.Test.Invoke
val args : int []
type obj = System.Object
Full name: Microsoft.FSharp.Core.obj
val __ : Test
member Test.Item : float with set
Full name: index.Test.Item
val set : elements:seq<'T> -> Set<'T> (requires comparison)
Full name: Microsoft.FSharp.Core.ExtraTopLevelOperators.set
val v : float
type unit = Unit
Full name: Microsoft.FSharp.Core.unit
module string_decoder
from index
type NodeStringDecoder =
interface
abstract member detectIncompleteChar : buffer:'a0 -> float
abstract member write : buffer:'a0 -> 'a1
end
Full name: index.string_decoder.NodeStringDecoder
abstract member NodeStringDecoder.write : buffer:'a0 -> 'a1
Full name: index.string_decoder.NodeStringDecoder.write
abstract member NodeStringDecoder.detectIncompleteChar : buffer:'a0 -> float
Full name: index.string_decoder.NodeStringDecoder.detectIncompleteChar
val StringDecoder : NodeStringDecoder
Full name: index.string_decoder.StringDecoder
Fable: the what, the why and the how
Bringing together the F# and JS worlds
meets
WHO IS MAKING THIS PRESENTATION?
Alfonso Garcia-Caro
- Degree in Linguistics
- Lived in Japan, Germany (back in Spain now)
- 5 years .NET experience
- 2 years F# and JS experience
-
Developed desktop, mobile and web apps for videogame,
green energy and education industries
Working at toggl.com, the insanely simple time tracking app
Give it a try!
WHAT IS FABLE?
- F# to JS compiler
- Source maps
- Plugin system
- Framework agnostic
- Batteries charged: F# core library and some .NET BCL
NOT AND AD-HOC LANGUAGE
- F# is a general purpose language mainly targeting .NET
- Not crafted specifically to compile to JS, like Dart, TypeScript or Elm
- Allows you to reuse your knowledge: semantics, tooling and APIs
BUT BEHAVES LIKE ONE
- No runtime
- Compiles to clean JS code
- Great interoperability with JS libraries
- Adheres to standard practices and workflows
- Compatible with JS developments tools: Babel, npm, WebPack
WHY FABLE?
JavaScript is evolving at rapid pace, do we need a new language?
ES2015 adds many great features and JS development tools keep getting better and better
But there are still things some programmers miss:
- Static typing
- Great editor support out of the box
- Comprehensive core library
F# brings this and a couple more features...
- REPL
- Intellisense
- Type inference
- Custom operators
- Whitespace indentation (optional)
- Expression based programming
- Pattern Matching
- Active Patterns
- Immutable by default
- Partial application / Pipelines
- Functional core library (LINQ on steroids!)
- Observables
- String formatting
- Structural comparison
- List, array and iterable comprehensions
- Generics, unions, records and tuples
- Type aliases
- DSL embedded in the language
- Typed-stateless Async programming
- OOP: Inheritance, interfaces, abstract classes
- Custom computation expressions
- Overloading, type extensions
- Type providers (coming to Fable)
- Units of measure
- Circular dependency restriction
- Compiler directives
- An excuse for being condescendant with non-functional programming
- Don Syme retweeting you!
And the killer feature...

This is what a day in the life of a compiler looks like:
- Parse and validate text into an Abstract Syntax Tree
- Make necessary transformations on that AST
- Generate new code from the AST: assembly, bytecode, JS...
As Fable works with known languages it can take advantage
of existing tools.
F# compiler, like Roslyn, can be used as a service:
we completed the first step for free!
Unfortunately JS is not a compiled language
...or is it?
Enter Babel
Babel generates an AST from ES2015 code,
applies transformations with a pluggable system
and generates ES5 JavaScript code.
Fable builds a bridge between F# and Babel AST
delegating the reponsibility of code parsing and generation.
Fable adds its own AST for internal operations:
HOW CAN I USE FABLE?
Fable can be downloaded from npm
1:
2:
3:
4:
5:
6:
7:
8:
|
mkdir temp
cd temp
npm init --yes
npm install -g fable-compiler
npm install --save fable-core
echo "printfn \"Hello World\"" > hello.fsx
fable hello.fsx
node hello.js
|
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
|
{
"module": "commonjs",
"outDir": "out",
"sourceMaps": true,
"projFile": "src/Fable.Samples.React.fsproj",
"babelPlugins": ["transform-runtime"],
"scripts": {
"prebuild": "npm install",
"postbuild": "node node_modules/webpack/bin/webpack"
},
"targets": {
"debug": {
"watch": true,
"symbols": ["DEBUG"],
"scripts": {
"postbuild": "node out/server"
}
}
}
}
|
TESTING
NUnit or Visual Studio tests can be compiled to JS too
1:
2:
3:
4:
5:
6:
7:
8:
9:
|
#r "../../../packages/NUnit/lib/nunit.framework.dll"
#load "util/util.fs"
open NUnit.Framework
[<Test>]
let ``Util.reverse works``() =
let res = Util.reverse "yllihP"
Assert.AreEqual("Philly", res)
|
Compile the tests using NUnit plugin and run them with Mocha
1:
2:
3:
4:
5:
|
fable samples/node/console/tests.fsx -m commonjs
--outDir out --plugins build/plugins/Fable.Plugins.NUnit.dll
node build/tests/node_modules/mocha/bin/mocha
samples/node/console/out/tests.js
|
INTERACTING WITH JS
We don't want to just intrude the JS ecosytem,
we want to take advantage of its full potential.
Because .NET community is great
F# community is fantastic
JS community is...
HUGE
...and amazing too :)
DYNAMIC PROGRAMMING WITH FABLE
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
|
open Fable.Core
printfn "Value: %O" jsObj?myProp // Property access
jsObj?myProp <- 5 // Assignment
let x = jsObj?myMethod $ (1, 2) // Application
let y = createNew jsCons (1, 2) // Apply `new` keyword
let data = // JS literal object
createObj [
"todos" ==> Storage.fetch()
"newTodo" ==> ""
"editedTodo" ==> None
"visibility" ==> "all"
]
|
JS MACROS
Use Emit
attribute to emit JS code directly
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
|
open Fable.Core
[<Emit("$0 + $1")>]
let add (x: int) (y: string): float = failwith "JS only"
type Test() =
// Rest arguments
[<Emit("$0($1...)")>]
member __.Invoke([<ParamArray>] args: int[]): obj =
failwith "JS only"
// Syntax conditioned to optional parameter
[<Emit("$0[$1]{{=$2}}")>]
member __.Item
with get(): float = failwith "JS only"
and set(v: float): unit = failwith "JS only"
|
FOREIGN INTERFACES
Define foreign interfaces easily to get the benefits of static checking and Intellisense
1:
2:
3:
4:
5:
6:
7:
|
[<Import("*","string_decoder")>]
module string_decoder =
type NodeStringDecoder =
abstract write: buffer: Buffer -> strings
abstract detectIncompleteChar: buffer: Buffer -> float
let StringDecoder: NodeStringDecoder = failwith "JS only"
|
Use Import
attribute to import external JS modules in ES2015 fashion
- Native JS, Browser and Node interfaces are included in fable-core
- More definitions can be found in npm: fable-import-xxx
- A TypeScript parser (still in development) is also available: ts2fable
DEMO
Debugging a node express server with VS Code
1:
2:
3:
4:
5:
6:
7:
8:
|
{
"name": "Launch Node",
"type": "node",
"request": "launch",
"program": "${workspaceRoot}/samples/node/express/index.fsx",
"outDir": "${workspaceRoot}/samples/node/express/out",
"sourceMaps": true,
}
|
FABLE IN NUMBERS
- Currently in beta: v0.2.2 (soon v1.0.0)
- >600 unit tests
- >800 lines of documentation
- >4500 lines of code of compiler core
- 4 months of development (but building on FunScript experience)
- 5th place after 2 months in fsprojects (Github stars)
- >300 commits, >170 stars, 12 contributors
- 6 packages in npm: compiler, core lib, bindings, TypeScript parser
- 2500 downloads last month
- 10,000 users 2016 Q4 (1)
- 1,000,000 downloads 2016 Q4 (1)
(1) CMUF: Completely made up figures
SO WITH F# NOW YOU CAN DO...
- Front-end apps
- Node apps
- Native iOS & Android apps with Xamarin
- Mobile apps with Apache Cordova or React Native
- Universal Windows Platform (soon)
- Cross-platform desktop apps (Electron, .NET/Mono)
- Server programming: Suave, ASP.NET
- GPU programming
- Functional programming on .NET
And the final appeal...
(In case someone from Redmond is in the room)
MICROSOFT, don't make the same mistake as with Xamarin
Buy Fable now and save a few million bucks ;)


I have learnt my lesson well the truth is out there I can tell don't look back and don't give in to their lies and goodbyes northern star
Site Oficial Spice Girls BR"When You're Gone" is a song by Bryan Adams, from his album On a Day Like Today (1998). It features Melanie C of the Spice Girls. The song peaked at number three on the UK Singles Chart and spent 15 weeks in the UK Top 40
Compre"Carolyna" is a song about a girl who has had a rough start in life and needs to escape to find freedom and happiness.
Compre"Loving You" is a single by English recording artists Matt Cardle and Melanie C. The single was released on 18 August 2013 in the United Kingdom as a digital download as the lead single from his third studio album Porcelain (2013).
Compre


I am currently entering my final year of a 4 year Computer Science Degree at the Institute of Technology Tallaght, Dublin. My goal, upon completion of my course, is to further my career in the IT industry while constantly learning and improving my already capable skill set. As of the start of September I will begin the last year of my course. I am aiming for a result of a 1.1 distinction Honours Degree, and am confident in my ability to achieving this. I feel that during this time, in both ITT and at VHI, I have gained the extensive technical, theoretical and practical experience required for a graduate job on completion of my degree in June 2019. I can learn quickly and also enjoying teaching what I know to others. I am a fantastic team player with excellent interpersonal and IT based skills. I can also produce the necessary results required when on a deadline, as I have done at VHI. I feel I can be an excellent addition to any team, especially one requiring an ambitious and motivated character. Support given to me will be reciprocated in the form of hard work and dedication to the task(s) at hand.
I began a work placement in February with VHI and it has been a fantastic experience for me. It has improved my understanding of the inner workings of IT, as used in the business world, whilst also understanding the necessary requirements for building and structuring IT projects, both alone and in a team. My work in the Automation team consisted of writing scripts and test cases in both UFT and Selenium. In the Web-Development team I was introduced to software I hadn’t used before, such as Gradle and Web-logic, both of which I am now proficient in. I gained much knowledge while at VHI after being shown many new technologies and software such as those mentioned above.
Previous to my current course I completed a four-year Painting and Decorating Apprenticeship. I genuinely loved this job as it brought out the creative and artistic side in me whilst also teaching me the responsibilities of completing a job correctly and on time. Unfortunately, due to the economic climate the industry took a massive blow resulting in my decision to change direction to better my future. My experience in the Painting industry gave me the necessary attitude and determination to succeed in life and in my career.
In this position, I led a small team of four to five people. This role required responsibility and the ability to work under pressure, with a very demanding set of customers, along with excellent team work for smooth operation. I fulfilled duties required of me to run the establishment in the absence of the owner who trusted me fully. Responsibilities increased to include stock ordering, day-to-day running of the establishment, overseeing the running of the kitchen and its smooth operation, customer correspondence and of course opening and closing responsibilities including cash settling at the end of the night.
Grades for Each Year
| # | Module Name | Grade |
|---|---|---|
| 1 | Algorithms & Data Structures (C++) | B+ |
| 2 | Cloud Services and Distributed Computing | C+ |
| 3 | Web Application Development | B- |
| 4 | Operating Systems | B+ |
| 5 | Data Analysis | C+ |
| 6 | Advanced Databases | B |
| # | Module Name | Grade |
|---|---|---|
| 1 | Work Experience | TBC |
| # | Module Name | Grade |
|---|---|---|
| 1 | Web Design and Development | B |
| 2 | Software Development 3 (Java) | A |
| 3 | Discrete Maths 2 | A |
| 4 | Database Design and Programming | B+ |
| 5 | Networking 1 | A |
| 6 | Software Quality Assurance & Testing | B |
| # | Module Name | Grade |
|---|---|---|
| 1 | Information Security | B |
| 2 | Software Development 4 (Java) | B+ |
| 3 | Object Oriented Analysis & Design | B |
| 4 | Management Science | B+ |
| 5 | Networking 2 | A |
| 6 | Project | B |
| # | Module Name | Grade |
|---|---|---|
| 1 | Learning to Learn | B |
| 2 | Discrete Maths 1 | A |
| 3 | Business & Information Systems | B |
| 4 | Fundamentals of Interface & Web Design | B+ |
| 5 | Computer Architecture | B+ |
| 6 | Software Development 1 (Java) | A |
| # | Module Name | Grade |
|---|---|---|
| 1 | Software Development 2 (Java) | A |
| 2 | Operating System Fundamentals | B+ |
| 3 | Database Fundamentals | A |
| 4 | Statistics | A |
| 5 | Social Media Communications | B |
| 6 | Object Oriented System Analysis | B |
3 Distinction, 4 Merits, 1 passes
8 Passes
Apart from being a computer science student, I enjoy Music and sports. I spend a lot of time going to music gigs and I also play guitar. I am an avid football fan , and support Manchester United. I also try to swim on a regular basis at my local swimming pool .
I have an interest in books, movies and television shows. I also enjoy Cooking.


Pattern matching, control flow, do/end blocks
Pattern matching
- The '=' is actually a match operator
- Tries to match left and right hand sides of the operator
- Attempts to do variable assignment only on the left hand side of the operator
Match operator
variable assignment
iex> x = 1
1
iex> x
1
Match operator
match attempt
iex> x = 1
1
iex> 1 = x
1
iex> 2 = x
** (MatchError) no match of right hand side value: 1
Complex matching
iex(1)> a = %{outter_map: %{inner_map: 1}}
%{outter_map: %{inner_map: 1}}
iex(2)> %{outter_map: %{inner_map: match}} = a
%{outter_map: %{inner_map: 1}}
iex(3)> match
1
You can match everywhere!
You can use 'guards' in functions to match parameters
def my_function(number) when is_integer(number) and rem(number, 2) == 0 do
# do stuff
end
Control flow - case
Compare many patterns until a match is found
iex> case {1, 2, 3} do
...> {4, 5, 6} ->
...> "This clause won't match"
...> {1, x, 3} ->
...> "This clause will match and bind x to 2 in this clause"
...> _ ->
...> "This clause would match any value"
...> end
"This clause will match and bind x to 2 in this clause"
Control flow - cond
Useful to match against different values, but only one condition
iex> cond do
...> 2 + 2 == 5 ->
...> "This will not be true"
...> 2 * 2 == 3 ->
...> "Nor this"
...> 1 + 1 == 2 ->
...> "But this will"
...> end
"But this will"
Control flow - if/unless
iex> if true do
...> "This works!"
...> end
"This works!"
iex> unless true do
...> "This will never be seen"
...> end
nil
do/end blocks
- So far, case/cond/if/unless need a "do...end" chunks
- These chunks are called blocks
- do/end blocks are tied to the outermost function call
- Syntactic sugar for keyword lists of parameters for the function
iex> if some_condition do
IO.puts("Some value")
end
iex> if false, do: :this, else: :that
:that
Building blocks
- Functions
- Modules
- Applications
Functions
@doc "Register a connection's header value in the system. Default to empty map for params"
def register_connection(%Connection{} = conn, params \\ %{}) do
# Set the first header from a match
[auth_header | rest] = conn.headers
# match out the key 'token'
%{"token" => auth_token} = auth_header
# Call an internal function
Registry.register_connection_header(auth_token)
# return connection
conn
end
Modules
Tools faciliting software reuse
alias
Allows you to set up an alias for a module to use
defmodule Stats do
alias Math.List, as: List
alias MyModule.ModuleNamespace.MyModule
alias MyApp.{Foo, Bar, Baz}
# In the remaining module definition List expands to Math.List.
# Also provides MyModule without the namespace.
end
require
Elixir provides macros as a mechanism for meta-programming (writing code that generates code). Macros are expanded at compile time.
iex> Integer.is_odd(3)
** (UndefinedFunctionError) function Integer.is_odd/1 is undefined or private. However there is a macro with the same name and arity. Be sure to require Integer if you intend to invoke this macro
iex> require Integer
Integer
iex> Integer.is_odd(3)
true
import
We use import whenever we want to easily access functions or macros from other modules without using the fully-qualified name. For instance, if we want to use the duplicate/2 function from the List module several times, we can import it:
iex> import List, only: [duplicate: 2]
List
iex> duplicate :ok, 3
[:ok, :ok, :ok]
use
The use macro is frequently used as an extension point. This means that, when you use a module FooBar, you allow that module to inject any code in the current module, such as importing itself or other modules, defining new functions, setting a module state, etc.
defmodule AssertionTest do
use ExUnit.Case, async: true
# This use statement brings in the "test" function
# This allows us to use it as-is below:
test "always pass" do
assert true
end
end
Modules
defmodule ElixirCourse.Application do
# Pull in some macros to set up more code
use Application
# Pull in functions
import Kernel, except: [if: 2, unless: 2]
require Logger
alias ElixirCourse.Util
def start(options) do
parsed_options = Util.parse(options)
Logger.info("Starting with #{inspect parsed_options}")
{:ok, parsed_options}
end
end
Applications
- Also called mix application
- Applications can be started as a process
- Applications are 'libraries' in other languages
OTP - a standard framework for concurrency
OTP provides 3 things for concurrency oriented programming
- The first one is Erlang itself
- The second is a set of libraries available with the virtual machine
- The third is a set of system design principles
OTP Basics
- Instead of using primitive functions send/receive, there's abstractions
- Supervisor - process that monitors other processes
- Application - the idiomatic way to package software in Erlang/OTP
- GenServer - abstraction around the actor model
- Task - convenience around spawning and awaiting async task
A note about supervisors
We can have several of these in our application and when we have more than one Supervisor monitoring processes we call this a Supervision Tree.
OTP - supervisor
OTP - application
OTP - GenServer
defmodule Stack do
use GenServer
# Callbacks
@impl true
def init(stack) do
{:ok, stack}
end
@impl true
def handle_call(:pop, _from, [head | tail]) do
{:reply, head, tail}
end
@impl true
def handle_cast({:push, item}, state) do
{:noreply, [item | state]}
end
end
# Start the server
{:ok, pid} = GenServer.start_link(Stack, [:hello])
# This is the client
GenServer.call(pid, :pop)
#=> :hello
GenServer.cast(pid, {:push, :world})
#=> :ok
GenServer.call(pid, :pop)
#=> :world
Mix applications
- A mix file is a way to organize elixir projects
- Mix file = mix.exs file
- A mix file has appliations to start
- Defines the dependencies used by the application
- Specifies additional applications to start
An example mixfile
defmodule KV.MixProject do
use Mix.Project
def project do
[
app: :kv,
version: "0.1.0",
elixir: "~> 1.6-dev",
start_permanent: Mix.env == :prod,
deps: deps()
]
end
# Run "mix help compile.app" to learn about applications
def application do
[
extra_applications: [:logger]
]
end
# Run "mix help deps" to learn about dependencies
defp deps do
[
# {:dep_from_hexpm, "~> 0.3.0"},
# {:dep_from_git, git: "https://github.com/elixir-lang/my_dep.git", tag: "0.1.0"},
]
end
end
Mix aliases
Define alternate mix task aliases for conveniences in the mix file
defp aliases do
[
c: "compile",
hello: &hello/1
]
end


I've been trying to test installation procedures for Paste as I get ready for a release. This is hard, because I've installed everything piecewise as I've been doing development.
So I've created a script to set up a non-root installation of Python, suitable for testing installation procedures. It follows the instructions located in the setuptools documentation; it's located in non_root_python.py.
To do testing I've created a new user on my system, so I don't mix things up with my normal development, and so I have nothing to lose. Then I use it like:
/usr/bin/python non_root_python.py --no-site-packages --clear
In the process it copies (symlinks) the standard library into ~/lib/pythonX.Y (and site-packages unless you use --no-site-packages).
The --clear argument can be used to reset the system quickly, so you can restart your installation process from zero.
I also use --include-package=sqlite --include-package=_sqlite to copy those modules/packages from site-packages, because easy_install doesn't install pysqlite very well.
You have to make sure ~/bin is first in your $PATH, but it's pretty straight-forward. I'll have to test the Windows installation procedure later.
This whole project sounds so cool. I agree with the people who think you're taking python to the next level of usability and power. Very impressive work. Thank you.
I just have to find the time to figure out just what it is you're actually doing <g>. (I know the basics from following this blog. I mean actually finding the time to do those detail tasks like RTFM/browse the source code and examples to learn how to really use this beast).
Hello, Ian.
I'm on a Windows XP box and 'd like to trial your installation procedure.
Should I just use trunk from SVN?
Hi Max. The instructions in this document should more-or-less work, including installing the application itself; that would be a good place to start:
http://svn.pythonpaste.org/Paste/apps/Todo_SQLObject_ZPT/trunk/docs/index.txtThe Subversion repository will be moving around a little (probably tonight) as I put in place the newly refactored core Paste project.
# Ian Bicking
And definitely tell me how it goes, I'm quite curious. Platform issues always catch me where I least expect them.
# Ian Bicking
Hmm, I wanted to start simple, but the following command failed:
D:\Projects\3rd-party\paste\bin>easy_install.py -v -f http://pythonpaste.org/package_index.html \ --script-dir=bin PasteWebKit ZPTKit 'SQLObject>=0.7a' WSGIUtils error: Could not find distribution for Requirement('PasteWebKit', [], ())I checked package index by hand, it looks fine.
We've done something remotely like this in PDK. Our acceptance test framework runs each test in a freshly installed sandbox. The sandbox is a temporary directory and the process running in the sandbox has PATH and PYTHONPATH set.
Our system is written in bash. Bash has been a nice choice for us as our application is command line based. What better test environment than the shell? The framework is just a quick hack that I knocked out. It has been expanded to run tests in parallel, have pretty green/read pass/fail indicators, etc.
The best thing I did was _not_ log output from the tests by default. Because of that debugging is often as simple as placing a sh invocation in the middle of a test. That gives you an interactive shell in the sandbox at the requested point. This is so convenient that I don't run pdk from my development directory. I virtually always invoke it from an acceptance test sandbox.
svn://svn.progeny.com/cl/pdk/trunk/run_atest
-- Darrin


Malta grants pardon to ‘middleman’ in Caruana Galizia murder case
Arrested man claims he knows who is behind the killing of journalist.
by Paul DallisonA man who claims to know the mastermind behind the murder of journalist Daphne Caruana Galizia was granted a presidential pardon in Malta on Monday.
The Maltese government said in a statement that Melvin Theuma — described as a "middleman" in local media — was pardoned "so that he can testify on the facts." The pardon extends to "other crimes that Theuma could have allegedly been involved in" but it "can be withdrawn if he fails to observe the conditions imposed."
Prime Minister Joseph Muscat offered the pardon last week after Theuma, who was arrested on money laundering charges, said he could link the person suspected of commissioning the murder of Caruana Galizia to those who carried out the killing, as well as those who helped provide the explosive device used.
A day after the pardon was offered, police arrested Yorgen Fenech, a prominent Maltese businessman, on board his luxury yacht.
Three men — brothers Alfred and George Degiorgio and Vince Muscat — have been charged with the murder. They have all pleaded not guilty.
Caruana Galizia, a journalist and blogger, was killed by a car bomb near her home in October 2017.


NuiTextboxModule
To use the textbox number component, add an <nui-textbox-number>
to your template.
By default, the value
input is set to 0. However, if you want the component to show a
zero as soon as its rendered on the DOM, initialize the input explicitly.
1
for the step
input, so if you manually type in a floating point value, the increment/decrement buttons will still
increment by 1
. To have your implementation increment/decrement by fractional values,
set the step
input to the desired floating point interval--0.1
for example.
value
- Value corresponding to the
ControlValueAccessor
interface on the Angular forms API. Use banana-in-a-box notation or the valueChange
output to receive updates. Defaults to 0
.
minValue
- Set the minimum allowed value for the input field. See the Min/Max section on this page for a live example.
maxValue
- Set the maximum allowed value for the input field. See the Min/Max section on this page for a live example.
step
- Step by which the value is incremented/decremented on click of the up/down buttons.
Note this can be set to a floating point value in addition to integers. Default is 1
.
stepPrecision
- The decimal precision to use for rounding each step increase/decrease when clicking the up/down buttons. Default is 10
.
placeholder
- Set the string to use as a placeholder for the text box. Default is ""
.
customBoxWidth
- Set a custom width in px
for the input field.
disabled
- Disable the field. Default is false
.
readonly
- Make the input read-only. Default is false
.
name
- Set the value of the HTML input element's
name
attribute.
blurred
- Use this output to get the value of the input field when it is focused out.
valueChange
- Use this output to get the value of the input field when it changes.
<nui-textbox>
component.
To define min/max value for <nui-textbox-number>
, use the minValue
and maxValue
inputs. In the following example, the min is set to 1 and the max is set to
10.


All JavaScript identifiers are case sensitive.
The variables lastName and lastname, are two different variables.
Try change lastName to lastname.
Note: JavaScript does not interpret VAR or Var as the keyword var.
Historically, programmers have used different ways of joining multiple words into one variable name: Hyphens: first-name, last-name, master-card, inter-city. Hyphens are not allowed in JavaScript. They are reserved for subtractions. Underscore: first_name, last_name, master_card, inter_city. Upper Camel Case (Pascal Case): FirstName, LastName, MasterCard, InterCity.


I am experienced in marketing, communications, and social media interactions that provide high quality understandings of customer merchandising trends and practices.
Strengthen brand-consumer relationships through consumer insights research, innovative problem-solving, and strategic promotional and retail product programs. Support the overall sales goals of the company’s promotional and retail sales groups with a focus on key hospitality and entertainment based clients. Serve as a brand and merchandise expert for company clients, including PepsiCo., Marriott International, Royal Caribbean, Dave & Buster’s, Cirque du Soleil, and more. Monitor current market and consumer trends to advise clients on most effective consumer marketing and programming approaches.
One of two students asked to work for the Deans. Conducted research projects for the Deans. Performed general office duties. Created digital invitations and promotional announcements for events and parties. Managed highly confidential materials.
Represented and advertised for the SummerTies clothing brand on the Wellesley College campus through social media postings and promotions. Created incentives for new customer transactions.
Gathered and analyzed consumer interest information to assist in merchandizing ideation projects. Created consumer profiles to tailor client-specific product giveaway programs. Tagged, identified, and organized 15,000+ items for Pepsi Co.’s new Shopify vendor website. Wrote blog posts on consumer technology trends. Worked with programs including Shopify, Simmons Database, and Qualtrics
Researched with the marketing, merchandizing, insights, and retail teams to brainstorm, produce, and distribute promotional products for brands across all industries. Attended trade shows to determine current market and consumer trends. Created powerpoints, excel files, and step-by-step educational documents and videos to assist company employees in learning company-specific operating systems. Streamlined warehousing and distribution processes. Prepared domestic and international freight quotes. Arranged shipments with domestic and international service providers.
Administer interviews to student applicants to Wellesley. Attend local college fairs as a representative of Wellesley College to increase awareness and interest in college applicants.
Serve as one of four student resources to the Board of Trustees on matters related to student life at Wellesley. Participate in three yearly meetings to discuss the most pressing campus concerns, organize plans for improvement of the student experience, and report progress.
Record minutes for weekly Council meetings. Host monthly class- and campus-wide events for students. Fundraise to finance Senior class events. Organize Senior Week events for Class of 2017 students. Work with Wellesley College administrators to bring Hillary Clinton as Commencement speaker.
Created and implemented a safe boating workshop for teenagers — Teens on the Water — with support from the Darien Marine Police Department.
Social Media


{{for|the comic book series|Meat Cake (comics)}} {{Unreferenced|date=October 2015}} Meatcake, or meatloaf cake, is a cake or other dessert look-alike that is made with meat in a meatloaf style, and not a pastry.
The term is used in a sketch by comedian George Carlin, in which he describes finding an unidentifiable item in the refrigerator. "Could be meat, could be cake.... It looks like... meatcake!" However, meatcake itself has occurred as a delicacy for quite some time before George Carlin. Also, meatcake (like beefcake) has been used as a term to refer to strong men who pose as models in club venues.
Meatcake can also refer to an Asian dish similar to meatloaf. Ground meat (e.g. pork, fish, etc.) can be mixed with other ingredients (e.g. pickled greens), and steamed. Often served with rice or congee.
{{meat-stub}} {{US-cuisine-stub}}


Busmall
Results
Here, three random samples of our products
are shown for you. Choose the one you like


Taylor Swift opened her AMAs performance in a prison-like shirt emblazoned with the names of her albums, Business Insider - Business Insider Singapore
by Amanda Krause- Taylor Swift performed at the American Music Awards in Los Angeles, California, on Sunday before taking home the award for the artist of the decade.
- She opened her medley with “The Man,” a song about sexism, while wearing a white button-up shirt emblazoned with the names of her albums.
- Swift’s shirt resembled a prison uniform, and was likely a nod to her ongoing feud with Big Machine Records, her former label that owns the master recordings of nearly her entire catalog.
- Her statement shirt was one of numerous outfits Swift wore throughout the night.
- Visit Insider’s homepage for more stories.
Taylor Swift let her outfit speak for itself during the opening of her performance at the American Music Awards on Sunday.
Swift received the artist of the decade award at the Los Angeles, California, event, and preceded her acceptance speech with a medley of her biggest hits. She first performed “The Man,” off her 2019 album “Lover,” which includes lyrics about double standards and sexism against women.
While performing the song, Swift donned a white button-up shirt emblazoned with the names of her previous six albums: “Taylor Swift,” “Fearless,” “Speak Now,” “Red,” “1989,” and “Reputation.”
The font used for each album name is similar to that typically used on prison uniforms. Swift was likely using her shirt as a metaphor for her ongoing feud with Big Machine Records, her former label that owns the master recordings of nearly her entire catalog.
Swift previously released a statement saying she was unsure if she’d be able to perform a medley of her hits at the 2019 American Music Awards, claiming that her former label was preventing her from doing so. Though the two parties publicly disagreed on the matter, Swift ended up singing lines from six of her songs.
“Lover,” which Swift owns the masters of, was not featured on the shirt.
Swift wasn’t the only one to wear the prison-like shirt. A group of children also joined the musician on stage wearing matching ensembles.
Many fans believe Swift was implying that future generations should be able to own the work they create.
Though she later changed into a sparkling leotard and pink cape, Swift’s initial sentiment was echoed throughout her performance. For example, she moved to a gold piano covered in the names of her albums at the end of her performance.
Earlier in the night, Swift walked the AMAs red carpet in a sleeveless green dress covered in sparkles.
Her shoes were designed by Casadei, and retail for $1,565.
- Read more:
- Taylor Swift experienced a rollercoaster of emotions during Shawn Mendes and Camila Cabello’s steamy AMAs performance
- Taylor Swift kicked off her triumphant AMAs performance with ‘The Man,’ a song about double standards and sexism
- Scooter Braun says his wife and children have received death threats since Taylor Swift publicly accused him of blocking her from performing old songs
- The new ‘Cats’ trailer takes us deeper into the bizarre movie starring Taylor Swift and other A-list celebrities


--- layout: post title: Time Series Plots with nvd3 tagline: plotting time on the x-axis with nvd3; the Internet forsook me categories: tags: d3 nvd3 plotting python time x-axis ---
The purpose of this post on plotting time on the x-axis of a plot produced using Python’s nvd3 library is because when I Googled for it (really, does anyone purposefully use Yahoo! or Bing to search for anything?) I got no results. It wasn’t obvious to me, and no matter how many times I Googled it, it wasn’t there. Why is there even an Internet if it can’t help me figure out how to do exactly what I want to do at the exact moment I want to do it?
This is very simple, really. The most important thing is to realize that the time that nvd3 wants is the number of milliseconds since the epoch. Or add three zeros to the number of seconds since the epoch. So<PHONE_NUMBER> is 12 August 2015 at 18:16 GMT.
In Python, if your times are datetime.datetime types (when printed they look like 2013-05-05 08:51:51), you can convert them to seconds since the Unix epoch in many different ways. One way to convert them is:
import time import datetime seconds_since_epoch = time.mktime(myDatetimeTimeVariable.timetuple())
Then simply multiply seconds_since_epoch
by 1000 to get
milliseconds.
You’ll need to populate some lists with your data, but once you have them, the bits of Python you need to make a nice D3 plot are:
from nvd3 import lineChart chart = lineChart(name="myChart", x_is_date=True, date_format="%d %b %Y") chart.set_graph_width(800) chart.add_serie(y=myYdata, x=myXdata, name='My Awesome Data') chart.buildhtml()
chart =
line contains two options that are important
for plotting date/time values: x_is_date=True
and the string
format for the date set in date_format
.
add_serie
, not add_series — it’s
French.
chart.htmlcontent
variable. For more on this,
see the python-nvd3 Chart Classes Reference.
Now you can print the HTML and open it in a browser, return in via Flask or Bottle or whatever, etc.
from nvd3 import lineChart import time import datetime # Set up our data xdata = ['2015-08-01 09:00', '2015-08-02 10:00', '2015-08-03 11:00', '2015-08-04 12:00', '2015-08-05 13:00', '2015-08-06 14:00'] ydata = [10, 20, 30, 40, 25, 10] # Convert xdata to datetime.datetime format xdata = [datetime.datetime.strptime(s, "%Y-%m-%d %H:%M") for s in xdata] # Convert datetime.datetime xdata to milliseconds since the epoch xdata = [time.mktime(s.timetuple()) * 1000 for s in xdata] # create the lineChart with x_is_date and a date format string chart = lineChart(name="myChart", x_is_date=True, date_format="%d %b %Y") # set the width of the chart chart.set_graph_width(800) # add the data to the chart chart.add_serie(y=ydata, x=xdata, name='My Awesome Data') # build the HTML for the chart; you might prefer buildcontent() for an embeddable chart chart.buildhtml() # print the data print chart.htmlcontent


At this time there are 120 reported cases in Wyoming.
The Wyoming Department of Health is closely monitoring the coronavirus disease 2019 (COVID-19) pandemic.
The symptoms of this disease are familiar: fever, cough and shortness of breath.
While most people will likely not experience serious illness related to COVID-19, our top concerns involve older residents and people with certain health conditions that put them at higher risk of developing a serious or life-threatening illness.
Wyoming residents should follow our recommendations to help avoid becoming ill and to help avoid spreading COVID-19 to those who are most vulnerable.
We should all work together to help keep our friends and neighbors safe!
Recommendations
- Stay home when sick and avoid contact with other people unless you need medical attention.
- Follow advice from CDC on what to do if you think you may be sick
- Follow current public health orders.
- Follow common-sense steps such as washing your hands often and well; covering your coughs and sneezes; and cleaning and disinfecting.
- Nursing homes, assisted living facilities and other healthcare facilities should closely follow guidelines for infection control and prevention.
- Older people and those with health conditions that mean they have a higher chance of getting seriously ill should avoid close-contact situations.
Testing Numbers
3/31/20 (updated 5 p.m.)
Tests completed at Wyoming Public Health Laboratory: 1,563
Tests completed at CDC lab: 1
(C ommercial labs are required to report positive test results to W DH; negative results are not reported consistently.)
Total reported positive cases: 120
Cases by County
Albany: 3
Big Horn
Campbell: 3
Carbon: 3
Converse: 1
Crook
Fremont: 25
Goshen: 1
Hot Springs:
Johnson: 7
Laramie: 27
Lincoln
Natrona: 12
Niobrara
Park: 1
Platte
Sheridan: 10
Sublette: 1
Sweetwater: 2
Teton: 23
Uinta
Washakie: 1
Helpful Links
General Information
Learn more about coronavirus disease 2019 from the Centers from Disease Control and Prevention (CDC)(CDC information includes (CDC information includes prevention strategies, case counts, frequently asked questions and answers
Learn more about State of Wyoming COVID-19 resources and response efforts
Questions?
If you are sick, please contact your healthcare provider. Wyoming residents with general questions about COVID-19 may send an email to<EMAIL_ADDRESS>Non-medical information about COVID-19 is available by calling 2-1-1 or<PHONE_NUMBER>.
Public health nurses can be a helpful source of information. Learn how to contact Wyoming’s public health nursing county offices


Reading List
You have 0 items to read
Title of article
4.45 AM
×
Do you want to delete all items?
Cancel
Ok
×
Title
URL
Add
Cancel


Amid layoff reports, workers' unions to hold Tata Steel to its job pact
Tata Steel on Monday said it planned to cut 3,000 jobs at its European operations, as the sector wrestles with excess supply, weak demand and high costs.
by ReutersUnions of Tata Steel workers on Tuesday said they would hold the Indian-owned company to its promise that it would not lay off workers until the end of 2021.
"We secured a jobs guarantee until 2021 and we will be robustly defending that agreement", Roy Rickhuss, General Secretary of the steelworkers' trade union said.
Tata Steel on Monday said it planned to cut 3,000 jobs at its European operations, as the sector wrestles with excess supply, weak demand and high costs.


Variables¶
To create a new variable, you just need to determine the variable name & value. The value will determine the variable type and you can change the value to switch between the types using the same variable name.
Syntax:
<Variable Name> = <Value>
Tip
The operator ‘=’ is used here as an Assignment operator and the same operator can be used in conditions, but for testing equality of expressions.
Note
The Variable will contains the real value (not a reference). This means that once you change the variable value, the old value will be removed from memory (even if the variable contains a list or object).
Dynamic Typing¶
Ring is a dynamic programming language that uses Dynamic Typing.
x = "Hello" # x is a string
see x + nl
x = 5 # x is a number (int)
see x + nl
x = 1.2 # x is a number (double)
see x + nl
x = [1,2,3,4] # x is a list
see x # print list items
x = date() # x is a string contains date
see x + nl
x = time() # x is a string contains time
see x + nl
x = true # x is a number (logical value = 1)
see x + nl
x = false # x is a number (logical value = 0)
see x + nl
Deep Copy¶
We can use the assignment operator ‘=’ to copy variables. We can do that to copy values like strings & numbers. Also, we can copy complete lists & objects. The assignment operator will do a complete duplication for us. This operation called Deep Copy
list = [1,2,3,"four","five"]
list2 = list
list = []
See list # print the first list - no items to print
See "********" + nl
See list2 # print the second list - contains 5 items
Weakly Typed¶
Ring is a weakly typed language, this means that the language can automatically convert between data types (like string & numbers) when that conversion make sense.
Rules:
<NUMBER> + <STRING> --> <NUMBER>
<STRING> + <NUMBER> --> <STRING>
Note
The same operator ‘+’ can be used as an arithmetic operator or for string concatenation.
Example:
x = 10 # x is a number
y = "20" # y is a string
sum = x + y # sum is a number (y will be converted to a number)
Msg = "Sum = " + sum # Msg is a string (sum will be converted to a string)
see Msg + nl


Domain mapping lookup tables
virtual_maps
This parameter specifies optional lookup tables to redirect specific addresses
or even complete domains to another address. This is typically used to
implement virtual domain support.
By default, no address redirection is done.
Examples:
- dbm:/etc/postfix/virtual
- hash:/etc/postfix/virtual
- hash:/etc/postfix/virtual, nis:virtual
- hash:/etc/postfix/virtual, netinfo:/virtual


Fatal Errors
Unable to load https://adem.maps.arcgis.com/sharing/rest/content/items/f533ac8a8b6040e5896b05b47b17a647?f=json status: 502
d@https://js.arcgis.com/3.31/init.js:112:340 d@https://js.arcgis.com/3.31/init.js:140:425 f@https://js.arcgis.com/3.31/init.js:145:35


Error Handling
Introduction
As you all (should) know error handling is a very important part in the development process. Not only does it show the user that the page he/she/it requested is not available, it's also a way to inform machines (browsers and such) about what’s going on by providing a HTTP error status.
Code errors
FuelPHP's internal error handling is based on Exceptions. This allows you to catch them in your code, so your application can handle the exception that occured gracefully and the user can continue using the application.
FuelPHP also alters the default PHP behaviour when it comes to PHP errors (which are not exceptions) from the old procedural functions. Instead of continuing on all non-fatal errors, FuelPHP will throw a PhpErrorException on all of these errors. This will force you to solve all errors, even an E_NOTICE which in the old days you might have ignored. It will also allow you to catch PHP errors. For example to catch syntax errors in view files when you have non-programmers creating views.
You can alter this behaviour by adding PHP error types (like E_NOTICE or E_STRICT) to the errors.continue_on key in your applications config/config.php file. Errors defined here will allow your script to continue. No exception is being thrown for these errors, so you can no longer catch these.
It is strongly adviced not to continue on errors, as it might lead to bugs in your code that are very difficult to find once your application moves into production!
Application logic errors
Error 404
The 404 route is set in app/config/routes.php and must point to the controller/method that handles the 404 pages. Read more about it in the routing section.
Throwing a 404
There may be times when one needs to throw a 404 error, such as when handling the routing yourself. This is simply done by throwing a HttpNotFoundException . Fuel will exit for you once it has run the 404 page.
throw new HttpNotFoundException;
This exception is caught and processed in your applications index.php file. When caught, it will do a lookup for the defined 404 route, and if found, it will forge a new request using the route found as the URI for the request. As this is a normal request, the URI will be routed like any other request!
If you don't want this behaviour, change your index.php file to read
// Generate the request, execute it and send the output.
try
{
$response = Request::forge()->execute()->response();
}
catch (HttpNotFoundException $e)
{
$route = array_key_exists('_404_', Router::$routes) ? Router::$routes['_404_']->translation : Config::get('routes._404_');
if ($route)
{
// add 'false' to the forge request do disable the routing engine
$response = Request::forge($route, false)->execute()->response();
}
else
{
throw $e;
}
}
404 handling
When a request is made and after the router looked for possible matches and there is no match, the 404 handling comes into play. By default the _404_ route points to welcome/404, let's take a look at that method:
// Inside Controller_Welcome
/**
* The 404 action for the application.
*
* @access public
* @return void
*/
public function action_404()
{
$messages = array('Aw, crap!', 'Bloody Hell!', 'Uh Oh!', 'Nope, not here.', 'Huh?');
$data['title'] = $messages[array_rand($messages)];
// Set a HTTP 404 output header
return Response::forge(View::forge('welcome/404', $data), 404);
}
Here you can see what's going on inside the 404 handler. As you can see it's a normal controller action. What's nice about this is that it allows you to show whatever content you like on the page. You can load your own views with data fetched from a database.
Note that Fuel doesn't set the 404 status, your response must set this. Return Response::forge(ViewModel::forge('welcome/404'), 404); in order to send the correct status header.
Catch all
Because Fuel doesn't set the 404 response status, you can use it as a catch all function. You might have have a page model that can fetch the page from a database by uri. Here is an example to illustrate the possibilities:
// Inside your 404 controller
public function action_my404()
{
$original_uri = \Input::uri();
$result = \DB::select()->from('pages')->where('uri', $original_uri)->execute();
if(count($result) === 1)
{
// display that page in whatever way you like
}
else
{
// display your general 404 page
$messages = array('Aw, crap!', 'Bloody Hell!', 'Uh Oh!', 'Nope, not here.', 'Huh?');
$data['title'] = $messages[array_rand($messages)];
return Response::forge(View::forge('welcome/404', $data), 404);
}
}
Throwing a 500
There may be moments where your applications simply need to stop and show an error to indicate that something has gone wrong on the server. Normally this is a 500 Internal Server Error.
Similar to throwing a 404, one can throw a 500 error.
throw new HttpServerErrorException;


Before Change
the order implied by the hierarchical tree (dendrogram)
logger.verbose("Calculating pairwise distances")
flat_distance_matrix = pdist(predictions)
distance_matrix = squareform(flat_distance_matrix)
num_predictions = len(distance_matrix)
logger.verbose("Sorting distances")
result_linkage = linkage(flat_distance_matrix, method=method, preserve_input=True)
result_order = self.seriation(result_linkage,
After Change
the order implied by the hierarchical tree (dendrogram)
logger.info("Sorting face distances. Depending on your dataset this may take some time...")
num_predictions = predictions.shape[0]
result_linkage = linkage(predictions, method=method, preserve_input=False)
result_order = self.seriation(result_linkage,
num_predictions,
num_predictions + num_predictions - 2)


11.1 Description of Graphs
Graphs are
composed of two types of elements: vertices and edges. Vertices represent
objects, and edges establish relationships or connections
between the objects. In many problems, values, or weights, are associated with a
graph's edges; however, such problems will not be considered
further until Chapter
16.
Graphs may be either directed or undirected
. In a directed graph, edges go from one
vertex to another in a specific direction. Pictorially, a
directed graph is drawn with circles for its vertices and
arrows for its edges (see Figure
11.1a). Sometimes the edges of a directed graph are
referred to as arcs. In an undirected graph, edges have no
direction; thus, its edges are depicted using lines instead of
arrows (see Figure
11.1b).
Formally, a graph is a pair G = (V, E
), where V is a set of
vertices and E is a binary
relation on V. In a directed
graph, if an edge goes from vertex u to vertex v, E
contains the ordered pair (u,
v). For example, in Figure
11.1a, V = {1, 2, 3, 4} and
E = {(1, 2), (1, 3), (1, 4),
(2, 3), (2, 4), (3, 2), (3, 4)}. By convention, parentheses
are used instead of braces for sets that represent edges in a
graph. In an undirected graph, because an edge (u, v)
is the same as (v, u), either edge is listed in E, but not both. Thus, in Figure
11.1b, V = {1, 2, 3, 4} and
E = {(1, 2), (1, 3), (1, 4),
(2, 3), (2, 4), (3, 4)}. Edges may point back to the same
vertex in a directed graph, but not in an undirected
graph.
Two important
relations in graphs are adjacency
and incidence. Adjacency is a relation between two
vertices. If a graph contains the edge (u, v),
vertex v is said to be adjacent to vertex u. In an undirected graph, this
implies that vertex u is also
adjacent to vertex v. In other
words, the adjacency relation is symmetric in an undirected graph.
This is not necessarily true in a directed graph. For example,
in Figure
11.1a, vertex 2 is adjacent to vertex 1, but vertex 1 is
not adjacent to vertex 2. On the other hand, vertices 2 and 3
are adjacent to each other. A graph in which every vertex is
adjacent to each other is called complete.
Incidence is a
relation between a vertex and an edge. In a directed graph,
the edge (u, v) is incident from or leaves vertex u and is incident to or enters vertex v. Thus, in Figure
11.1a, edge (1, 2) is incident from vertex 1 and incident
to vertex 2. In a directed graph, the in-degree of a vertex is the number of edges
incident to it. Its out-degree
is the number of edges incident from it. In an undirected
graph, the edge (u, v) is incident on vertices u and v. In an undirected graph, the degree of a vertex is the number of
edges incident on it.
Often one talks about paths in a graph. A path is a
sequence of vertices traversed by following the edges between
them.  k. Such a path contains the edges
(v0, v1), (v1, v2), . . ., (vk - 1, vk ) and has a length of k. If a path exists from u to u
', u ' is reachable from u. A path is simple if it has no repeated
vertices.
A cycle
is a path that includes the same vertex two or more times.
That is, in a directed graph, a path is a cycle if one of its
edges leaves a vertex and another enters it. Thus, Figure
11.2a contains the cycle {1, 2, 4, 1}. Formally, in a
directed graph, a path forms a cycle if v0 = vk and the path contains at least one
edge. In an undirected graph, a path 〈v0, v1, v2, ..., vk 〉 forms a cycle if v0 = vk and no vertices are repeated from
v1 to vk . Graphs without cycles are acyclic. Directed acyclic graphs are given the
special name dag (see Figure
11.2b).
Connectivity is
another important concept in graphs. An undirected graph is
connected if every vertex is reachable from each
other by following some path. If this is true in a directed
graph, we say the graph is strongly
connected . Although an
undirected graph may not be connected, it still may contain
certain sections that are connected, called connected components . If only
parts of a directed graph are strongly connected, the parts
are strongly connected
components (see Figure
11.3).
Certain vertices have special significance in
keeping a graph or connected component connected. If removing
a vertex disconnects a graph or component, the vertex is an
articulation point . For example,
in Figure
11.4, vertices 4 and 5 are articulation points because if
either of them is removed, the graph becomes disconnected.
Upon removing these vertices, the graph has two connected
components, {1, 2, 3} and {6, 7, 8}. Any edge whose removal
disconnects a graph is called a bridge. A
connected graph with no articulation points is biconnected. Although a graph may not be
biconnected, it still may contain biconnected components.
The most common way to represent a graph in a
computer is using an adjacency-list
representation. This consists of a linked list of
adjacency-list structures. Each structure in the list contains
two members: a vertex and a list of vertices adjacent to the
vertex (see Figure
11.5).
In a graph G =
(V, E ), if two vertices u and v in V
form an edge (u, v) in E, vertex v is included in the adjacency list
of vertex u. Thus, in a
directed graph, the total number of vertices in all adjacency
lists is the same as the total number of edges. In an
undirected graph, since an edge (u, v)
implies an edge (v, u), vertex v is included in the adjacency list
of vertex u, and vertex u is included in the adjacency list
of vertex v. Thus, the total
number of vertices in all adjacency lists in this case is
twice the total number of edges.
Typically, adjacency lists are used for
graphs that are sparse, that
is, graphs in which the number of
edges is less than the number of vertices squared. Sparse graphs are common. However, if a
graph is dense , we may
choose to represent it using an adjacency-matrix representation (see the
related topics at the end of the chapter). Adjacency-matrix
representations require O
(VE ) space.
11.1.1 Search Methods
Searching a
graph means visiting its vertices one at a time in a specific
order. There are two important search methods from which many
important graph algorithms are derived: breadth-first search and depth-first search.
<IP_ADDRESS> Breadth-first search
Breadth-first
search (see Figure
11.6) explores a graph by visiting all vertices adjacent
to a vertex before exploring the graph further. This search is
useful in a number of applications, including finding minimum
spanning trees and shortest paths (see Chapter
16 and the first example in this chapter).
To begin, we select a start vertex and color
it gray. We color all other vertices in the graph white. The
start vertex is also placed alone in a queue. The algorithm
then proceeds as follows: for each vertex in the queue
(initially only the start vertex), we peek at the vertex at
the front of the queue and explore each vertex adjacent to it.
As each adjacent vertex is explored, its color will be white
if it has not been discovered yet. In this case, we color the
vertex gray, indicating it has been discovered, and enqueue it
at the end of the queue. If its color is not white, it has
already been discovered, and the search proceeds to the next
adjacent vertex.
Once all adjacent vertices have been
explored, we dequeue the vertex at the front of the queue and
color it black, indicating we are finished with it. We
continue this process until the queue is empty, at which point
all vertices reachable from the start vertex are black. Figure
11.6 illustrates breadth-first search with a directed
graph. Breadth-first search works with undirected graphs as
well.
In addition to simply visiting vertices,
breadth-first search can be used to keep track of useful
information. For example, we can record the number of vertices
traversed before reaching each vertex, which turns out to be
the shortest path to each vertex in graphs whose edges are not
weighted. In Figure
11.6, the shortest path from vertex 1 to either vertex 2
or 3 consists of one hop, recorded when we first discover
vertex 2 and 3. The shortest path from vertex 1 to vertex 4
consists of two hops: one hop is recorded as we discover
vertex 2 from 1, and another is recorded when we discover
vertex 4 from 2. We can also use breadth-first search to
generate a breadth-first tree. A breadth-first tree is the tree
formed by maintaining the predecessor of each vertex as we
discover it. Since a vertex is discovered only once (when we
color it gray), it has exactly one predecessor, or parent. In
Figure
11.6, the edges highlighted in gray are branches of the
tree.
<IP_ADDRESS> Depth-first search
Depth-first search (see Figure
11.7) explores a graph by first visiting undiscovered
vertices adjacent to the vertex most recently discovered.
Thus, the search continually tries to explore as deep as it
can. This makes depth-first search useful in a number of
applications, including cycle detection and topological
sorting (see the second example in this chapter).
To begin, we color every vertex white and
select a vertex at which to start. The algorithm then proceeds
as follows: first, we color the selected vertex gray to
indicate it has been discovered. Then, we select a new vertex
from the set of undiscovered vertices adjacent to it, which
are white, and repeat the process. When there are no white
vertices adjacent to the currently selected vertex, we have
searched as deep as possible. Thus, we color the currently
selected vertex black to indicate that we are finished with
it, and we backtrack to explore the white vertices adjacent to
the previously selected vertex.
We continue this process until the vertex we
selected as the start vertex has no more white vertices
adjacent to it. This process visits only the vertices
reachable from the vertex at which we start. Therefore, the
entire process must be repeated for each vertex in the graph.
For example, in Figure
11.7, vertex 4 would not get visited without this step.
When we restart at a vertex that is already black, the search
stops immediately, and we move on to the next vertex. Figure
11.7 illustrates depth-first search with a directed graph.
Depth-first search works with undirected graphs as well.
In addition to simply visiting vertices, a
depth-first search can be used to keep track of some useful
information. For example, we can record the times at which
each vertex is discovered and finished. Depth-first search
also can be used to produce a depth-first forest. A depth-first forest is a set of
trees, each formed by maintaining the predecessor of each
vertex as it is discovered. Since a vertex is discovered only
once (when we color it gray), it has exactly one predecessor,
or parent. Each tree contains the vertices discovered in
searching exactly one connected component. In Figure
11.7, the edges highlighted in gray are branches in the
trees.
|


| Interface | Description |
|---|---|
| action_bitcoin_reach_value.OnFragmentInteractionListener |
This interface must be implemented by activities that contain this
fragment to allow an interaction in this fragment to be communicated
to the activity and potentially other fragments contained in that
activity.
|
| action_github_stars.OnFragmentInteractionListener |
This interface must be implemented by activities that contain this
fragment to allow an interaction in this fragment to be communicated
to the activity and potentially other fragments contained in that
activity.
|
| action_lol_best_of.OnFragmentInteractionListener |
This interface must be implemented by activities that contain this
fragment to allow an interaction in this fragment to be communicated
to the activity and potentially other fragments contained in that
activity.
|
| action_lol_level_up.OnFragmentInteractionListener |
This interface must be implemented by activities that contain this
fragment to allow an interaction in this fragment to be communicated
to the activity and potentially other fragments contained in that
activity.
|
| action_new_commit_github.OnFragmentInteractionListener |
This interface must be implemented by activities that contain this
fragment to allow an interaction in this fragment to be communicated
to the activity and potentially other fragments contained in that
activity.
|
| action_reach_friend_followers.OnFragmentInteractionListener |
This interface must be implemented by activities that contain this
fragment to allow an interaction in this fragment to be communicated
to the activity and potentially other fragments contained in that
activity.
|
| action_tweeter_reach_follower.OnFragmentInteractionListener |
This interface must be implemented by activities that contain this
fragment to allow an interaction in this fragment to be communicated
to the activity and potentially other fragments contained in that
activity.
|
| action_twitch_is_on_live.OnFragmentInteractionListener |
This interface must be implemented by activities that contain this
fragment to allow an interaction in this fragment to be communicated
to the activity and potentially other fragments contained in that
activity.
|
| action_weather_cold.OnFragmentInteractionListener |
This interface must be implemented by activities that contain this
fragment to allow an interaction in this fragment to be communicated
to the activity and potentially other fragments contained in that
activity.
|
| action_weather_warm.OnFragmentInteractionListener |
This interface must be implemented by activities that contain this
fragment to allow an interaction in this fragment to be communicated
to the activity and potentially other fragments contained in that
activity.
|
| action_youtube_compare_two_channel.OnFragmentInteractionListener |
This interface must be implemented by activities that contain this
fragment to allow an interaction in this fragment to be communicated
to the activity and potentially other fragments contained in that
activity.
|
| action_youtube_new_video.OnFragmentInteractionListener |
This interface must be implemented by activities that contain this
fragment to allow an interaction in this fragment to be communicated
to the activity and potentially other fragments contained in that
activity.
|
| action_youtube_subscribe_record.OnFragmentInteractionListener |
This interface must be implemented by activities that contain this
fragment to allow an interaction in this fragment to be communicated
to the activity and potentially other fragments contained in that
activity.
|
| AddArea.OnFragmentInteractionListener |
This interface must be implemented by activities that contain this
fragment to allow an interaction in this fragment to be communicated
to the activity and potentially other fragments contained in that
activity.
|
| AddAreaAdapter.OnItemClickListener |
The interface On item click listener.
|
| clash_clan_reach_limit_action.OnFragmentInteractionListener |
This interface must be implemented by activities that contain this
fragment to allow an interaction in this fragment to be communicated
to the activity and potentially other fragments contained in that
activity.
|
| clash_reach_friend_action.OnFragmentInteractionListener |
This interface must be implemented by activities that contain this
fragment to allow an interaction in this fragment to be communicated
to the activity and potentially other fragments contained in that
activity.
|
| clash_reach_trophies.OnFragmentInteractionListener |
This interface must be implemented by activities that contain this
fragment to allow an interaction in this fragment to be communicated
to the activity and potentially other fragments contained in that
activity.
|
| list_reactions_fragment.OnFragmentInteractionListener |
This interface must be implemented by activities that contain this
fragment to allow an interaction in this fragment to be communicated
to the activity and potentially other fragments contained in that
activity.
|
| ManageArea.OnFragmentInteractionListener |
This interface must be implemented by activities that contain this
fragment to allow an interaction in this fragment to be communicated
to the activity and potentially other fragments contained in that
activity.
|
| ManageAreaAdapter.OnItemClickListener |
The interface On item click listener.
|
| NetworkDialog.NetworkDialogListener |
The interface Network dialog listener.
|
| Profile.OnFragmentInteractionListener |
This interface must be implemented by activities that contain this
fragment to allow an interaction in this fragment to be communicated
to the activity and potentially other fragments contained in that
activity.
|
| send_a_tweet_fragment.OnFragmentInteractionListener |
This interface must be implemented by activities that contain this
fragment to allow an interaction in this fragment to be communicated
to the activity and potentially other fragments contained in that
activity.
|
| send_email_reaction_fragment.OnFragmentInteractionListener |
This interface must be implemented by activities that contain this
fragment to allow an interaction in this fragment to be communicated
to the activity and potentially other fragments contained in that
activity.
|
| send_tweet_dm_fragment.OnFragmentInteractionListener |
This interface must be implemented by activities that contain this
fragment to allow an interaction in this fragment to be communicated
to the activity and potentially other fragments contained in that
activity.
|
| Class | Description |
|---|---|
| action_bitcoin_reach_value |
A simple
Fragment subclass. |
| action_github_stars |
A simple
Fragment subclass. |
| action_lol_best_of |
A simple
Fragment subclass. |
| action_lol_level_up |
A simple
Fragment subclass. |
| action_new_commit_github |
A simple
Fragment subclass. |
| action_reach_friend_followers |
A simple
Fragment subclass. |
| action_tweeter_reach_follower |
A simple
Fragment subclass. |
| action_twitch_is_on_live |
A simple
Fragment subclass. |
| action_weather_cold |
A simple
Fragment subclass. |
| action_weather_warm |
A simple
Fragment subclass. |
| action_youtube_compare_two_channel |
A simple
Fragment subclass. |
| action_youtube_new_video |
A simple
Fragment subclass. |
| action_youtube_subscribe_record |
A simple
Fragment subclass. |
| AddArea |
The type Add area.
|
| AddAreaAdapter |
The type Add area adapter.
|
| AddAreaAdapter.AddAreaViewHolder |
The type Add area view holder.
|
| AddAreaItem |
The type Add area item.
|
| clash_clan_reach_limit_action |
A simple
Fragment subclass. |
| clash_reach_friend_action |
A simple
Fragment subclass. |
| clash_reach_trophies |
A simple
Fragment subclass. |
| ExampleInstrumentedTest |
Instrumented test, which will execute on an Android device.
|
| ExampleUnitTest |
Example local unit test, which will execute on the development machine (host).
|
| list_reactions_fragment |
A simple
Fragment subclass. |
| LoginActivity |
The type Login activity.
|
| MainActivity |
The type Main activity.
|
| ManageArea |
A simple
Fragment subclass. |
| ManageAreaAdapter |
The type Manage area adapter.
|
| ManageAreaAdapter.ManageAreaViewHolder |
The type Manage area view holder.
|
| ManageAreaItem |
The type Manage area item.
|
| NetworkDialog |
The type Network dialog.
|
| Profile |
A simple
Fragment subclass. |
| RegisterActivity |
The type Register activity.
|
| requestManager |
The type Request manager.
|
| send_a_tweet_fragment |
A simple
Fragment subclass. |
| send_email_reaction_fragment |
A simple
Fragment subclass. |
| send_tweet_dm_fragment |
A simple
Fragment subclass. |
| tokenManager |
The type Token manager.
|
| triggersManager |
The type Triggers manager.
|


jstatd(1) jstatd(1) Name jstatd - Virtual Machine jstat Daemon SYNOPSIS jstatd [ options ] PARAMETERS options Command-line options. The options may be in any order. If there are redundant or contradictory options, the last option specified will take precedence. DESCRIPTION The jstatd tool is an RMI server application that monitors for the cre‐ ation and termination of instrumented HotSpot Java virtual machines (JVMs) and provides a interface to allow remote monitoring tools to attach to JVMs running on the local host. The jstatd server requires the presence of an RMI registry on the local host. The jstatd server will attempt to attach to the RMI registry on the default port, or on the port indicated by the -p port option. If an RMI registry is not found, one will be created within the jstatd application bound to the port indicated by the -p port option or to the default RMI registry port if -p port is omitted. Creation of an internal RMI registry can be inhibited by specifying the -nr option. NOTE: This utility is unsupported and may or may not be available in future versions of the JDK. It is not currently available on the Windows 98 and Windows ME platforms. OPTIONS The jstatd command supports the following options: -nr Do not attempt to create an internal RMI registry within the jstatd process when an existing RMI registry is not found. -p port Port number where the RMI registry is expected to be found, or, if not found, created if -nr is not specified. -n rminame Name to which the remote RMI object is bound in the RMI registry. The default name is JStatRemoteHost. If multiple jstatd servers are started on the same host, the name of the exported RMI object for each server can be made unique by specifying this option. However, doing so will require that the unique server name be included in the monitoring client's hostid and vmid strings. -Joption Pass option to the java launcher called by javac. For example, -J-Xms48m sets the startup memory to 48 megabytes. It is a common convention for -J to pass options to the underlying VM executing applications written in Java. SECURITY The jstatd server can only monitor JVMs for which it has the appropriate native access permissions. Therefor the jstatd process must be running with the same user credentials as the target JVMs. Some user credentials, such as the root user in UNIX(TM) based systems, have permission to access the instrumentation exported by any JVM on the system. A jstatd process running with such credentials can monitor any JVM on the system, but introduces additional security concerns. The jstatd server does not provide any authentication of remote clients. Therefore, running a jstatd server process exposes the instrumentation export by all JVMs for which the jstatd process has access permissions to any user on the network. This exposure may be undesireable in your envi‐ ronment and local security policies should be considered before starting the jstatd process, particularly in production environments or on unse‐ cure networks. The jstatd server installs an instance of RMISecurityPolicy if no other security manager has been installed and therefore requires a security policy file to be specified. The policy file must conform to the default policy implementation's Policy File Syntax @ http://docs.oracle.com/javase/7/docs/technotes/guides/security/Policy‐ Files.html. The following policy file will allow the jstatd server to run without any security exceptions. This policy is less liberal then granting all per‐ missions to all codebases, but is more liberal than a policy that grants the minimal permissions to run the jstatd server. grant codebase "file:${java.home}/../lib/tools.jar" { permission java.security.AllPermission; }; To use this policy, copy the text into a file called jstatd.all.policy and run the jstatd server as follows: jstatd -J-Djava.security.policy=jstatd.all.policy For sites with more restrictive security practices, it is possible to use a custom policy file to limit access to specific trusted hosts or net‐ works, though such techniques are subject to IP addreess spoofing attacks. If your security concerns cannot be addressed with a customized policy file, then the safest action is to not run the jstatd server and use the jstat and jps tools locally. REMOTE INTERFACE The interface exported by the jstatd process is proprietary and is guar‐ anteed to change. Users and developers are discouraged from writing to this interface. EXAMPLES Here are some examples of starting jstatd. Note that the jstatd scripts automatically start the server in the background. Using Internal RMI Registry This example demonstrates starting jstatd with an internal RMI registry. This example assumes that no other server is bound to the default RMI Registry port (port 1099). jstatd -J-Djava.security.policy=all.policy Using External RMI Registry This example demonstrates starting jstatd with a external RMI registry. rmiregistry& jstatd -J-Djava.security.policy=all.policy This example demonstrates starting jstatd with an external RMI registry server on port 2020. rmiregistry 2020& jstatd -J-Djava.security.policy=all.policy -p 2020 This example demonstrates starting jstatd with an external RMI registry on port 2020, bound to name AlternateJstatdServerName. rmiregistry 2020& jstatd -J-Djava.security.policy=all.policy -p 2020 -n AlternateJstatdServerName Inhibiting creation of an in-process RMI registry This example demonstrates starting jstatd such that it will not create a RMI registry if one is not found. This example assumes an RMI registry is already running. If it is not, an appropriate error message is emitted. jstatd -J-Djava.security.policy=all.policy -nr Enabling RMI logging capabilities. This example demonstrates starting jstatd with RMI logging capabilities enabled. This technique is useful as a troubleshooting aid or for moni‐ toring server activities. jstatd -J-Djava.security.policy=all.policy -J-Djava.rmi.server.logCalls=true SEE ALSO o java(1) - the Java Application Launcher o jps(1) - the Java Process Status Application o jstat(1) - the Java Virtual Machine Statistics Monitoring Tool o rmiregistry @ http://docs.oracle.com/javase/7/docs/technotes/tools/index.html#rmi - the Java Remote Object Registry 16 Mar 2012 jstatd(1)


The status of a Nakama node.
More...
Inherited by Nakama.Console.StatusListStatus.
|
| double | AvgInputKbs [get] |
| | Average input bandwidth usage.
|
| |
| double | AvgLatencyMs [get] |
| | Average response latency in milliseconds.
|
| |
| double | AvgOutputKbs [get] |
| | Average output bandwidth usage.
|
| |
| double | AvgRateSec [get] |
| | Average number of requests per second.
|
| |
| int | GoroutineCount [get] |
| | Current number of running goroutines.
|
| |
| int | Health [get] |
| | Health score.
|
| |
| int | MatchCount [get] |
| | Current number of active authoritative matches.
|
| |
| string | Name [get] |
| | Node name.
|
| |
| int | PresenceCount [get] |
| | Currently registered live presences.
|
| |
| int | SessionCount [get] |
| | Currently connected sessions.
|
| |
The status of a Nakama node.
◆ AvgInputKbs
| double Nakama.Console.IStatusListStatus.AvgInputKbs |
|
get |
Average input bandwidth usage.
◆ AvgLatencyMs
| double Nakama.Console.IStatusListStatus.AvgLatencyMs |
|
get |
Average response latency in milliseconds.
◆ AvgOutputKbs
| double Nakama.Console.IStatusListStatus.AvgOutputKbs |
|
get |
Average output bandwidth usage.
◆ AvgRateSec
| double Nakama.Console.IStatusListStatus.AvgRateSec |
|
get |
Average number of requests per second.
◆ GoroutineCount
| int Nakama.Console.IStatusListStatus.GoroutineCount |
|
get |
Current number of running goroutines.
◆ Health
| int Nakama.Console.IStatusListStatus.Health |
|
get |
◆ MatchCount
| int Nakama.Console.IStatusListStatus.MatchCount |
|
get |
Current number of active authoritative matches.
◆ Name
| string Nakama.Console.IStatusListStatus.Name |
|
get |
◆ PresenceCount
| int Nakama.Console.IStatusListStatus.PresenceCount |
|
get |
Currently registered live presences.
◆ SessionCount
| int Nakama.Console.IStatusListStatus.SessionCount |
|
get |
Currently connected sessions.
The documentation for this interface was generated from the following file:


Toggle navigation
Menu
Search & Suggest
Logout
Currently
Playing
Search & Suggest
View Suggestions
History
What was played in the last 3 hours
×
Suggest
Login
Username
Password
Password Verification
Choose spot to login to
Register
Username
Password
Spot
Login


Pay Stubs can sometimes be confusing but they don’t need to be.
With a few tips and tricks we will help you learn to decipher the different information you may find on your pay stub and be a master of your income.
This course consists of 3 lessons that provide information on your pay stubs. You can easily navigate through the course using the “<” (or Back) button and the “>” (or Next) buttons at the bottom of each page. Use the scroll bars or the arrows to move up and down on a page if required.
For more information about this course, please read the sections below. When you are done, proceed to the next page to begin the first lesson.
The estimated completion time for this eLearning course is approximately 45 minutes.
Upon completion of this course, you will be able to:


Savon Artisanal
Boutique
(current)
Equipe
FAQ
Contact
[0]Panier
Savon Artisanal
Hypoalergique
Fantasie
Promotion
Previous
Next


To see the documentation click here To see the javascript file of this example click here To see next example (JQuery AJAX) click here


Represents the YouTube video flavor of an Atom entry
Located in /Gdata/YouTube/VideoEntry.php (line 98)
Zend_Gdata_App_Base | --Zend_Gdata_App_FeedEntryParent | --Zend_Gdata_App_Entry | --Zend_Gdata_App_MediaEntry | --Zend_Gdata_Entry | --Zend_Gdata_Media_Entry | --Zend_Gdata_YouTube_MediaEntry | --Zend_Gdata_YouTube_VideoEntry
| Class | Description |
|---|---|
| Zend_Gdata_YouTube_PlaylistVideoEntry | Represents the YouTube video playlist flavor of an Atom entry |
Specifies the comments associated with a video.
Nested feed links
Location informtion for the video
If null, the video can be embedded
If not null, specifies that the video is private.
If not null, specifies that the video has racy content.
Specifies the video's rating.
Recording date for the video
Specifies the statistics relating to the video.
Geo location for the video
Inherited from Zend_Gdata_YouTube_MediaEntry
Zend_Gdata_YouTube_MediaEntry::$_mediaGroup
Inherited from Zend_Gdata_App_MediaEntry
Zend_Gdata_App_MediaEntry::$_mediaSource
Inherited from Zend_Gdata_App_Entry
Zend_Gdata_App_Entry::$_content
Zend_Gdata_App_Entry::$_control
Zend_Gdata_App_Entry::$_edited
Zend_Gdata_App_Entry::$_published
Zend_Gdata_App_Entry::$_rootElement
Zend_Gdata_App_Entry::$_source
Zend_Gdata_App_Entry::$_summary
Inherited from Zend_Gdata_App_FeedEntryParent
Zend_Gdata_App_FeedEntryParent::$_author
Zend_Gdata_App_FeedEntryParent::$_category
Zend_Gdata_App_FeedEntryParent::$_contributor
Zend_Gdata_App_FeedEntryParent::$_etag
Zend_Gdata_App_FeedEntryParent::$_id
Zend_Gdata_App_FeedEntryParent::$_link
Zend_Gdata_App_FeedEntryParent::$_majorProtocolVersion
Zend_Gdata_App_FeedEntryParent::$_minorProtocolVersion
Zend_Gdata_App_FeedEntryParent::$_rights
Zend_Gdata_App_FeedEntryParent::$_service
Zend_Gdata_App_FeedEntryParent::$_title
Zend_Gdata_App_FeedEntryParent::$_updated
Inherited from Zend_Gdata_App_Base
Zend_Gdata_App_Base::$_extensionAttributes
Zend_Gdata_App_Base::$_extensionElements
Zend_Gdata_App_Base::$_namespaceLookupCache
Zend_Gdata_App_Base::$_namespaces
Zend_Gdata_App_Base::$_rootNamespace
Zend_Gdata_App_Base::$_rootNamespaceURI
Zend_Gdata_App_Base::$_text
Creates a Video entry, representing an individual video
Adds a developer tag to array of tags for the video.
Get the VideoEntry's Zend_Gdata_YouTube_Extension_MediaGroup object.
If the mediaGroup does not exist, then set it.
Returns the comments relating to the video.
Retrieves a DOMElement which corresponds to this element and all child properties. This is used to build an entry back into a DOM and eventually XML text for sending to the server upon updates, or for application storage/persistence.
Get the feed link property for this entry.
Gets the URL of the flash player SWF. null is returned if the duration value is not available.
Gets the location where the video was recorded.
If the return value is an instance of Zend_Gdata_YouTube_Extension_NoEmbed, this video cannot be embedded.
Returns the rating relating to the video.
Gets the date that the video was recorded.
Returns the statistics relating to the video.
Gets the category of this video, if available. The category is returned as a string. Valid categories are found at: http://gdata.youtube.com/schemas/2007/categories.cat If the category is not set, null is returned.
Retrieve the URL for a video's comment feed.
Returns the link element relating to video complaints.
Gets the description of the video as a string. null is returned if the video description is not available.
Gets the developer tags for the video, if available and if client is authenticated with a valid developerKey. The tags are returned as an array.
If no tags are set, null is returned.
Gets the duration of the video, in seconds. null is returned if the duration value is not available.
Gets the location specified for this video, if available. The location is returned as an array containing the keys 'longitude' and 'latitude'.
null is returned if the location is not available.
Gets the YouTube video ID based upon the atom:id value
Gets the rating information for this video, if available. The rating is returned as an array containing the keys 'average' and 'numRaters'.
null is returned if the rating information is not available.
Returns the link element relating to video ratings.
Gets the date that the video was recorded.
Returns the link element relating to video responses.
Get the current publishing state of the video.
Gets an array of the tags assigned to this video. For convient usage inside a foreach loop, an empty array is returned when there are no tags assigned.
Gets an array of the thumbnails representing the video.
Each thumbnail is an element of the array, and is an array of the thumbnail properties - time, height, width, and url. For convient usage inside a foreach loop, an empty array is returned if there are no thumbnails.
Gets the title of the video as a string. null is returned if the video title is not available.
Gets the number of views for this video. null is returned if the number of views is not available.
Gets the URL of the YouTube video watch page. null is returned if the video watch page URL is not available.
Checks whether the video is embeddable.
Checks whether the video is private.
Sets the comments relating to the video.
Sets the array of embedded feeds related to the video
Sets the location information.
If an instance of Zend_Gdata_YouTube_Extension_NoEmbed is passed in, the video cannot be embedded. Otherwise, if null is passsed in, the video is able to be embedded.
Specifies that the video has racy content.
Sets the rating relating to the video.
Sets when the video was recorded.
Sets the statistics relating to the video.
Sets the category of the video as a string.
Sets the description of the video as a string.
Set multiple developer tags for the video as strings.
Sets a private video to be public.
Helper function to conveniently set a video's rating.
Sets the date that the video was recorded.
Sets the keyword tags for a video.
Sets the title of the video as a string.
Sets the georss:where element
Creates individual Entry objects of the appropriate type and stores them in the $_entry array based upon DOM data.
Inherited From Zend_Gdata_YouTube_MediaEntry
Zend_Gdata_YouTube_MediaEntry::takeChildFromDOM()
Inherited From Zend_Gdata_Media_Entry
Zend_Gdata_Media_Entry::__construct()
Zend_Gdata_Media_Entry::getDOM()
Zend_Gdata_Media_Entry::getMediaGroup()
Zend_Gdata_Media_Entry::setMediaGroup()
Zend_Gdata_Media_Entry::takeChildFromDOM()
Inherited From Zend_Gdata_Entry
Zend_Gdata_Entry::__construct()
Zend_Gdata_Entry::getDOM()
Zend_Gdata_Entry::takeAttributeFromDOM()
Zend_Gdata_Entry::takeChildFromDOM()
Inherited From Zend_Gdata_App_MediaEntry
Zend_Gdata_App_MediaEntry::__construct()
Zend_Gdata_App_MediaEntry::encode()
Zend_Gdata_App_MediaEntry::getMediaSource()
Zend_Gdata_App_MediaEntry::setMediaSource()
Inherited From Zend_Gdata_App_Entry
Zend_Gdata_App_Entry::delete()
Zend_Gdata_App_Entry::getContent()
Zend_Gdata_App_Entry::getControl()
Zend_Gdata_App_Entry::getDOM()
Zend_Gdata_App_Entry::getPublished()
Zend_Gdata_App_Entry::getSource()
Zend_Gdata_App_Entry::getSummary()
Zend_Gdata_App_Entry::reload()
Zend_Gdata_App_Entry::save()
Zend_Gdata_App_Entry::setContent()
Zend_Gdata_App_Entry::setControl()
Zend_Gdata_App_Entry::setPublished()
Zend_Gdata_App_Entry::setSource()
Zend_Gdata_App_Entry::setSummary()
Zend_Gdata_App_Entry::takeChildFromDOM()
Inherited From Zend_Gdata_App_FeedEntryParent
Zend_Gdata_App_FeedEntryParent::__construct()
Zend_Gdata_App_FeedEntryParent::getAlternateLink()
Zend_Gdata_App_FeedEntryParent::getAuthor()
Zend_Gdata_App_FeedEntryParent::getCategory()
Zend_Gdata_App_FeedEntryParent::getContributor()
Zend_Gdata_App_FeedEntryParent::getDOM()
Zend_Gdata_App_FeedEntryParent::getEditLink()
Zend_Gdata_App_FeedEntryParent::getEtag()
Zend_Gdata_App_FeedEntryParent::getHttpClient()
Zend_Gdata_App_FeedEntryParent::getId()
Zend_Gdata_App_FeedEntryParent::getLicenseLink()
Zend_Gdata_App_FeedEntryParent::getLink()
Zend_Gdata_App_FeedEntryParent::getMajorProtocolVersion()
Zend_Gdata_App_FeedEntryParent::getMinorProtocolVersion()
Zend_Gdata_App_FeedEntryParent::getNextLink()
Zend_Gdata_App_FeedEntryParent::getPreviousLink()
Zend_Gdata_App_FeedEntryParent::getRights()
Zend_Gdata_App_FeedEntryParent::getSelfLink()
Zend_Gdata_App_FeedEntryParent::getService()
Zend_Gdata_App_FeedEntryParent::getTitle()
Zend_Gdata_App_FeedEntryParent::getTitleValue()
Zend_Gdata_App_FeedEntryParent::getUpdated()
Zend_Gdata_App_FeedEntryParent::lookupNamespace()
Zend_Gdata_App_FeedEntryParent::setAuthor()
Zend_Gdata_App_FeedEntryParent::setCategory()
Zend_Gdata_App_FeedEntryParent::setContributor()
Zend_Gdata_App_FeedEntryParent::setEtag()
Zend_Gdata_App_FeedEntryParent::setHttpClient()
Zend_Gdata_App_FeedEntryParent::setId()
Zend_Gdata_App_FeedEntryParent::setLink()
Zend_Gdata_App_FeedEntryParent::setMajorProtocolVersion()
Zend_Gdata_App_FeedEntryParent::setMinorProtocolVersion()
Zend_Gdata_App_FeedEntryParent::setRights()
Zend_Gdata_App_FeedEntryParent::setService()
Zend_Gdata_App_FeedEntryParent::setTitle()
Zend_Gdata_App_FeedEntryParent::setUpdated()
Zend_Gdata_App_FeedEntryParent::takeChildFromDOM()
Inherited From Zend_Gdata_App_Base
Zend_Gdata_App_Base::__construct()
Zend_Gdata_App_Base::encode()
Zend_Gdata_App_Base::flushNamespaceLookupCache()
Zend_Gdata_App_Base::getDOM()
Zend_Gdata_App_Base::getExtensionAttributes()
Zend_Gdata_App_Base::getExtensionElements()
Zend_Gdata_App_Base::getText()
Zend_Gdata_App_Base::getXML()
Zend_Gdata_App_Base::lookupNamespace()
Zend_Gdata_App_Base::registerAllNamespaces()
Zend_Gdata_App_Base::registerNamespace()
Zend_Gdata_App_Base::saveXML()
Zend_Gdata_App_Base::setExtensionAttributes()
Zend_Gdata_App_Base::setExtensionElements()
Zend_Gdata_App_Base::setText()
Zend_Gdata_App_Base::takeAttributeFromDOM()
Zend_Gdata_App_Base::takeChildFromDOM()
Zend_Gdata_App_Base::transferFromDOM()
Zend_Gdata_App_Base::transferFromXML()
Zend_Gdata_App_Base::__get()
Zend_Gdata_App_Base::__isset()
Zend_Gdata_App_Base::__set()
Zend_Gdata_App_Base::__toString()
Zend_Gdata_App_Base::__unset()
Documentation generated on Wed, 25 Aug 2010 03:44:28 +0400 by phpDocumentor 1.4.2


---
title: Smokey Robinson - The Tracks Of My Tears Live (1965)
comments: true
tags:
- Music
blogger_orig_url: http://stickmanscorral.blogspot.com/2010/10/smokey-robinson-tracks-of-my-tears-live.html
---
Sunday evening and a bit of Smokey in the background. Nothing wrong with that.


{% include 'partials/_head.html' %}
Giving you access to the institutional knowledge the Netter Center has accumulated through it's various parternships with the Philadelphia community.
Founded in 1992, the Barbara and Edward Netter Center for Community Partnerships is Penn’s primary vehicle for bringing to bear the broad range of human knowledge needed to solve the complex, comprehensive, and interconnected problems of the American city so that West Philadelphia (Penn’s local geographic community), Philadelphia, the University itself, and society benefit.


--- layout: post date: 2013-03-08 16:20:00 +0100 title: "Replying to Debian BTS messages in notmuch" categories: Artikel tags: - debian ---
Previously, my workflow regarding replying to bugreports outside my own packages was very uncomfortable: I first downloaded the mbox archive from the BTS, then imported that in claws-mail, hit reply all, remove submit@, add bugnumber@, then send the email.
Therefore, I decided to hack up a little elisp function to automate this process for notmuch. It first downloads the message from the BTS, adds it to the notmuch database, then calls notmuch-mua-reply on the message and fixes the To: header:
;; Removes<EMAIL_ADDRESS>from the recipients of a reply-all message. (defun debian-remove-submit (recipients) (delq nil (mapcar (lambda (recipient) (and (not (string-equal (nth 1 recipient) "submit@bugs.debian.org")) recipient)) recipients))) (defun debian-add-bugrecipient (recipients bugnumber) (let* ((bugaddress (concat bugnumber "@bugs.debian.org")) (addresses (mapcar (lambda (x) (nth 1 x)) recipients)) (exists (member bugaddress addresses))) (if exists recipients (append (list (list (concat "Bug " bugnumber) bugaddress)) recipients)))) ;; TODO: msg should be made optional and it should default to the latest message in the bugreport. ;; NB: bugnumber and msg are both strings. (defun debian-bts-reply (bugnumber msg) ;; Download the message to ~/mail-copy-fs/imported. (let ((msgpath (format "~/mail-copy-fs/imported/bts_%s_msg_%s.msg" bugnumber msg))) (let* ((url (format "http://bugs.debian.org/cgi-bin/bugreport.cgi?msg=%s;mbox=yes;bug=%s" msg bugnumber)) (download-buffer (url-retrieve-synchronously url))) (save-excursion (set-buffer download-buffer) (goto-char (point-min)) ; just to be safe (if (not (string-equal (buffer-substring (point) (line-end-position)) "HTTP/1.1 200 OK")) (error "Could not download the message from the Debian BTS")) ;; Delete the HTTP headers and the first "From" line (in order to ;; make this a message, not an mbox). (re-search-forward "^$" nil 'move) (forward-char) (forward-line 1) (delete-region (point-min) (point)) ;; Store the message on disk. (write-file msgpath) (kill-buffer))) ;; Import the mail into the notmuch database. (let ((msgid (with-temp-buffer (call-process "~/.local/bin/notmuch-import.py" nil t nil (expand-file-name msgpath)) (buffer-string)))) (notmuch-mua-reply (concat "id:" msgid) "Michael Stapelberg<EMAIL_ADDRESS>t) ;; Remove<EMAIL_ADDRESS>add<EMAIL_ADDRESS>(let* ((to (message-fetch-field "To")) (recipients (mail-extract-address-components to t)) (recipients (debian-remove-submit recipients)) (recipients (debian-add-bugrecipient recipients bugnumber)) (recipients-str (mapconcat (lambda (x) (concat (nth 0 x) " <" (nth 1 x) ">")) recipients ", "))) (save-excursion (message-goto-to) (message-delete-line) (insert "To: " recipients-str "\n"))) ;; Our modifications don’t count as modifications. (set-buffer-modified-p nil))))
In case you want to get updates, you can find the latest version of this code in my configfiles git repository.
To add a single message to the notmuch database and get its message ID, I have
written this simple python script (using python-notmuch), located in
~/.local/bin/python-import.py
:
#!/usr/bin/env python # vim:ts=4:sw=4:et import notmuch import sys if len(sys.argv) < 2: print "Syntax: notmuch-import.py <filename>" sys.exit(0) db = notmuch.Database(mode=notmuch.Database.MODE.READ_WRITE) (msg, status) = db.add_message(sys.argv[1]) print msg.get_message_id()
If you have any improvements, I’d love to hear about it. If it’s useful for you, enjoy.


| Opcode/Instruction | Op/En | 64/32-bit Mode | CPUID Feature Flag | Description |
| 0F 5D /r MINPS xmm1, xmm2/m128 | RM | V/V | SSE | Return the minimum single-precision floatingpoint values between xmm2/m128 and xmm1. |
| VEX.NDS.128.0F.WIG 5D /r VMINPS xmm1,xmm2, xmm3/m128 | RVM | V/V | AVX | Return the minimum single-precision floatingpoint values between xmm2 and xmm3/mem. |
| VEX.NDS.256.0F.WIG 5D /r VMINPS ymm1, ymm2, ymm3/m256 | RVM | V/V | AVX | Return the minimum single double-precision floating-point values between ymm2 and ymm3/mem. |
| Op/En | Operand 1 | Operand 2 | Operand 3 | Operand 4 |
| RM | ModRM:reg (r, w) | ModRM:r/m (r) | NA | NA |
| RVM | ModRM:reg (w) | VEX.vvvv (r) | ModRM:r/m (r) | NA |
Performs an SIMD compare of the packed single-precision floating-point values in the first source operand and the second source operand and returns the minimum value for each pair of values to the destination operand. If the values being compared are both 0.0s (of either sign), the value in the second operand (source operand) is returned. If a value in the second operand is an SNaN, that SNaN is forwarded unchanged to the destination (that is, a QNaN version of the SNaN is not returned). If only one value is a NaN (SNaN or QNaN) for this instruction, the second operand (source operand), either a NaN or a valid floating-point value, is written to the result. If instead of this behavior, it is required that the NaN source operand (from either the first or second operand) be returned, the action of MINPS can be emulated using a sequence of instructions, such as, a comparison followed by AND, ANDN and OR.
In 64-bit mode, use of the REX.R prefix permits this instruction to access additional registers (XMM8-XMM15). 128-bit Legacy SSE version: The second source can be an XMM register or an 128-bit memory location. The destination is not distinct from the first source XMM register and the upper bits (VLMAX-1:128) of the corresponding YMM register destination are unmodified. VEX.128 encoded version: the first source operand is an XMM register or 128-bit memory location. The destination operand is an XMM register. The upper bits (VLMAX-1:128) of the corresponding YMM register destination are zeroed. VEX.256 encoded version: The first source operand is a YMM register. The second source operand can be a YMM register or a 256-bit memory location. The destination operand is a YMM register.
MIN(SRC1, SRC2) { IF ((SRC1 = 0.0) and (SRC2 = 0.0)) THEN DEST ← SRC2; ELSE IF (SRC1 = SNaN) THEN DEST ← SRC2; FI; ELSE IF (SRC2 = SNaN) THEN DEST ← SRC2; FI; ELSE IF (SRC1 < SRC2) THEN DEST ← SRC1; ELSE DEST ← SRC2; FI; } MINPS (128-bit Legacy SSE version) DEST[31:0] ← MIN(SRC1[31:0], SRC2[31:0]) DEST[63:32] ← MIN(SRC1[63:32], SRC2[63:32]) DEST[95:64] ← MIN(SRC1[95:64], SRC2[95:64]) DEST[127:96] ← MIN(SRC1[127:96], SRC2[127:96]) DEST[VLMAX-1:128] (Unmodified) VMINPS (VEX.128 encoded version) DEST[31:0] ← MIN(SRC1[31:0], SRC2[31:0]) DEST[63:32] ← MIN(SRC1[63:32], SRC2[63:32]) DEST[95:64] ← MIN(SRC1[95:64], SRC2[95:64]) DEST[127:96] ← MIN(SRC1[127:96], SRC2[127:96]) DEST[VLMAX-1:128] ← 0 VMINPS (VEX.256 encoded version) DEST[31:0] ← MIN(SRC1[31:0], SRC2[31:0]) DEST[63:32] ← MIN(SRC1[63:32], SRC2[63:32]) DEST[95:64] ← MIN(SRC1[95:64], SRC2[95:64]) DEST[127:96] ← MIN(SRC1[127:96], SRC2[127:96]) DEST[159:128] ← MIN(SRC1[159:128], SRC2[159:128]) DEST[191:160] ← MIN(SRC1[191:160], SRC2[191:160]) DEST[223:192] ← MIN(SRC1[223:192], SRC2[223:192]) DEST[255:224] ← MIN(SRC1[255:224], SRC2[255:224])
| MINPS: | __m128d _mm_min_ps(__m128d a, __m128d b); |
| VMINPS: | __m256 _mm256_min_ps (__m256 a, __m256 b); |
Invalid (including QNaN source operand), Denormal.
See Exceptions Type 2.