Ray Tracing in One Weekend… in Ada¶
I’ve been learning Ada 2012, it started out as an intellectual curiosity some time in March, and then I bought John Barne’s “Programming in Ada 2012” book for a more in-depth look. A lot people don’t really know hardly anything about Ada, and I don’t really blame them. Until recently, resources were very scarce and there’s not good comparison programs to see what Ada is like.
I did a port of Ray Tracing in One Weekend as faithfully as possible from C++ into Ada. This comparison should help people understand more of what Ada is about to satisfy their own curiosity.
Overall, the port went very smoothly, due to the conceptual similarities between C++ and Ada. There’s a few things to point out, and a few rough spots with Ada which were frustrating.
Project Layout¶
This is the directory structure:
├── COPYING
├── README.md
├── obj
├── ray_tracer.gpr
└── src
├── main.adb
├── rt-bmp.adb
├── rt-bmp.ads
├── rt-cameras.adb
├── rt-cameras.ads
├── rt-debug.adb
├── rt-debug.ads
├── rt-hitables.adb
├── rt-hitables.ads
├── rt-image_planes.adb
├── rt-image_planes.ads
├── rt-materials.adb
├── rt-materials.ads
├── rt-pseudorandom.adb
├── rt-pseudorandom.ads
├── rt-rays.adb
├── rt-rays.ads
├── rt-vecs.adb
├── rt-vecs.ads
└── rt.ads
Many Ada projects use the GNAT ecosystem, which you can get from the Free Software Foundation or with GNAT Community Edition, released by AdaCore. ray_tracer.gpr is akin to a CMakeLists.txt, except for the GNAT Project Manager gprbuild Most of the Ada ecosystem assumes that tools will get run from the command line, and GPR files reference the appropriate options used by the related programs. This file is an Ada-derived domain-specific language (DSL).
Projects might create multiple GPR files, and such as one for the main program, another for building and running tests, or for example programs in libraries.
main.adb : Main Function¶
Files have three parts: a context clause, declarative parts, and executable parts.
-- context clause
with GNATCOLL.Terminal;
-- declarative part
-- declare Main
procedure Main is
-- declarative part for elements used by Main
use RT;
Term_Info : GNATCOLL.Terminal.Terminal_Info;
begin
-- executable statements start here
GNATCOLL.Terminal.Init_For_Stdout (Term_Info);
exception
-- exception handle for the executable block
-- no empty blocks allowed, "null;" is the empty statement.
null;
end Main;
The context clause describes dependencies on library “packages”, the declarative part allows declaring and defining functions and variables, and the executable start is linearly executable code.
Ada uses packages as proper modules instead of including files with a
preprocessor. Libraries are brought in using with
, with the dots in the name
describing the package path. Terminal
here is a child package of GNATCOLL
.
Unlike other languages, the entry procedure for an Ada program doesn’t need to named main
.
Files defining program entries define your main function, but all functionality
must be brought in from libraries or in the declaration block of the main function.
Library “packages” follow a similar, but slightly different format than main files.
Packages get split between a public interface, described in a .ads
file, while the package
body is in an .adb
file. This is similar to the header/source separation in
C or C++ libraries, except the compiler treats these as real entities.
Packages operate like namespaces, but also modules. Packages can even include a begin
section of initialization code to run before starting the main function, and describe
startup dependencies between packages.
Expression functions help knock down verboseness¶
Ada 2012 adds “expression functions” where instead of a full is begin ... end
you can just wrap the expression describing the value to return in parentheses.
This made the vector implementation surprisingly terse.
function Reflect (V, N: Vec3) return Vec3 is (V - 2.0 * Dot (V, N) * N);
Semantic for types (“derived types”) in Ada¶
The reference version uses type aliases for 3D vectors, which improves the look of code but doesn’t prevent misuses of types according to their semantics.
using point3 = vec3; // 3D point
using color = vec3; // RGB color
vec3 v1, v2;
point3 p1, p2;
color c1, c2;
c1 = p1; // Allowed, but did you really mean this?
p2 = p1 - c1; // Subtract a color from a point?
refract (c1, v1, 0.5); // Did you really mean to refract a color?
Yes, you can prevent such mistakes in C++ through inheritance or templates with tags for types, but most people don’t jump through these hoops. You can specify different semantic meanings for types in Ada with “derived types” which use the same generated function code but the compilers prevents misuse in code. These aren’t just type aliases, they’re new actually new types
type Vec3 is record
X, Y, Z : F32 := 0.0;
end record;
--------------------------------------------------------------------------
-- Common operations for vector-like types.
--------------------------------------------------------------------------
function "+" (A, B : Vec3) return Vec3;
function "-" (A, B : Vec3) return Vec3;
function "*" (A, B : Vec3) return Vec3;
-- SNIP! A bunch more functions which relate to vectors, colors and points.
type Color3 is new Vec3;
type Point3 is new Vec3;
--------------------------------------------------------------------------
-- Define more specific functions to allow what we actually semantically to happen.
--------------------------------------------------------------------------
function "+"(A : Point3; B : Vec3) return Point3 is (A + Point3(B));
-- Translate a point by a vector.
function "-"(To : Point3; From : Point3) return Vec3 is (Vec3(To) - Vec3(From));
-- The vector giving a direction between two points.
-- This is defined after we created Color3 and Point3, so Refract only
-- works for Vec3.
function Refract (UV, N : Vec3; Ni_Over_Nt : F32) return Vec3;
The Color3
and Point3
types get created with the same properties as Vec3
,
but with functions which only take their respective types. Yes, you can force
the conversion but it will be explicit.
v1, v2 : Vec3;
p1, p2 : Point3;
c1, c2 : Color3
c1 := p1; // Error can't assign a color to a point.
c1 := Color3(p1); // Force the compiler to do this anyways.
p2 := p1 - c1; // Compile error, can't subtract a color from a point.
p2 := v1 + v2; // Compile error, a point is not a vector.
p2 := Point3(v1 + v2); // Force compiler to do this anyways.
Since Refract
is defined after Color3
and Point3
were defined, it isn’t
included as part of these types, so it can’t be used.
Refract (c1, v1, 0.5); // Compile error. Doesn't exist...
Ada lacks perfect forwarding¶
One of the best and killer features of modern C++ is perfect forwarding combined with parameter pack.. The gist of these features is that you can create your own functions which hand off their arguments to another function as if that second function was called directly. This is especially useful in situations where you want to, for example, imitate the interface of a constructor for a type, such as to construct an object inside a container or as part of a smart pointer.
Let’s say you have a type which looks like:
class Widget {
public:
Widget(PermanentlyBound& foo, ExpensiveType&& e);
};
You can actually call that constructor directly when making smart pointers in
C++ (unique_ptr
or shared_ptr
):
std::unique_ptr<Widget> widgetPtr = std::make_unique(someFoo, std::move(expensiveThing));
You see this lack of perfect forwarding and the copy required in RT.Materials
:
function Make_Material(Mat : Material'Class) return Material_Ptrs.Ref is
Ptr : Material_Ptrs.Ref;
begin
-- Copy the value into the pointer.
Ptr.Set (Mat);
return Ptr;
end Make_Material;
One line, 30% of runtime CPU¶
The most innocuous and expensive line of code in the program was the F32
definition of the common floating point type used by the raytracer. The issue
is the range check is defined to be the attribute range (read as “tick range”).
This is really a little bit of error checking magic provided by Ada to find
infinities and NaN’s whenever a F32
is assigned to or used as a parameter,
which obviously happens a lot in a raytracer. Disabling range checks or removing
the range for production use eliminates this problem, but it demonstrates how
much error checking is possible from a single line of code in Ada.
type F32 is new Interfaces.IEEE_Float_32 range Interfaces.IEEE_Float_32'Range;


Gabriel is a student at the University of California, San Diego working towards a BS in Computer Science. Currently a 4th Year and plans on graduating Fall 2016.
gabriel.gaddi93@gmail.com


Figure-1: Console Interface and Custom Commands
Verbose output
When enabled it will show the grbl status reports in console logger
Custom command send button.
will not appear, then you need to click on any other tabs except the "probing tab " and come back again.


| Folders | |||
| <Go Back> | models | routes | types |
| loaders | mutations | subscriptions | utils |
| migrations | queries | test |
| File | File | File | File |
|---|---|---|---|
| apollo-server.js | index.js | package.json | yarn.lock |
| authentication.js | schema.js |
Folders: 11
Files: 6
Size of all files: 471591 KB


This documentation relates to Opera's now deprecated .oex Extension API framework for Opera versions <= 12.15 and also provided by our OEX2NEX shim library.
For the latest Opera Extensions API documentation for Opera versions > 12.15 please consult the latest Opera Extensions API documentation online.
This method is used to listen for events being dispatched. For opera.extension
, this inlcudes 'connect'
, 'message'
, and 'disconnect'
.
type
: Type of event; allowed values are: "message"
, "disconnect"
, and "connect"
.eventListener
: The function to be executed when the event occurs.useCapture
: Boolean, keep false for now; note: this value currently has no purpose.void addEventListener (<DOMString> type, eventListerner, <boolean> useCapture)
//
// The background process ('/background.js').
//
// Listen for a new environment being created (like the popup window)
opera.extension.addEventListener('connect', function(event) {
var connected = true;
}, false);
// Listen for messages being sent
opera.extension.addEventListener('message', function(event) {
var message = event.data;
}, false);
// Listen for environments being destroyed (and communication disabled)
opera.extension.addEventListener('disconnect', function(event) {
var connected = false;
}, false);


--- title: Israel shot 121 date: 2004-05-01T00:00:00.000Z filepathOriginal: photos/IMG0126.jpg filepathThumbnail: photos/IMG0126.thumbnail.jpg filepathPreview: photos/IMG0126.preview.jpg ---
Me, Tripper, and Shtern at Akko, with the Al-Jazaar mosque behind us


{% extends "layout.html" %} {% block page_title %} Work {% endblock %} {% block content %} {% include "../includes/phase_banner_beta.html" %} Back {% include "../includes/error-summary.html" %} Hours you work How many hours a week are you working at the moment? If your hours vary, enter an average. Has the number of hours you work a week changed as a result of your condition? Yes No How many hours a week did you work before they changed? If your hours varied, enter an average. {% include "../includes/help.html" %} {% endblock %}
If your hours vary, enter an average.
If your hours varied, enter an average.


Caroline Kenworthy
home
blog
about
projects
Want to get in touch?
Send me a note:
name
email
note
no robots! 2+2 =


Dem Sen. Durbin: Trump 'Has Been so Cruel When It Comes to Immigration' | Breitbart
by Trent BakerTuesday, Sen. Dick Durbin (D-IL) reacted to President Donald Trump’s tweet from the morning in which he criticized Deferred Action for Childhood Arrivals (DACA) as the Supreme Court takes up the legal case against the Trump administration for trying to end it.
Durbin, who criticized the president for calling people from DACA “hardened criminals,” said on MSNBC’s “Morning Joe” that Trump “has been so cruel when it comes to immigration,” especially when it comes to children and younger people.
“Willie, it’s a pathetic charge to think that each and every one of these [780,000 or 790,000] have gone through a thorough criminal background check to qualify for this protection,” Durbin told MSNBC’s Willie Geist.
He continued, “[Trump] has been so cruel when it comes to immigration, particularly when it comes to children and young people.”
Follow Trent Baker on Twitter @MagnifiTrent


"HUSBANDMAN "one whose business it is to cultivate the ground. It was one of the first occupations, and was esteemed most honourable (Genesis 9:20; 26:12, 14; 37:7, etc.). All the Hebrews, except those engaged in religious services, were husbandmen. (See AGRICULTURE.)
"HUSBANDMAN "one whose business it is to cultivate the ground. It was one of the first occupations, and was esteemed most honourable (Genesis 9:20; 26:12, 14; 37:7, etc.). All the Hebrews, except those engaged in religious services, were husbandmen. (See AGRICULTURE.)


{% extends "bootstrap/base.html" %} {% block title %} Static-(.exe)file analyser {% endblock %} {% block styles %} {{super()}} {% endblock %} {% block content %}
Use this site to get a quick analyses an executable before installing it
All you get is a report with all the details regards to the executable file


MOROS COVID-19 VACCINE TRACKER
Home
General Info
Vaccine Centers
Profiles
About Us
Tell us about your experience:
Full Name:
Gender:
Male
Female
Old:
18-39
40-59
60-90
What type of vaccine did you take?
Visor
EstraZeneca
Sinopharm
Biontech
What are the symptoms you faced?
Temperature rise
Muscle pain
Fatigue
Headache
Shudder
Joint pain
Sensitivity Or Shortness Of Breath
What diseases do you suffer from?
Contact information
facebook account
Instagram account
+962 65 200 230
<EMAIL_ADDRESS>5688373


Equivalent to clicking the Auto Outline command on the Group And Outline submenu of the Data menu. Creates an outline within the selection. If a single cell is selected, creates an outline for the entire sheet.
Syntax
AUTO.OUTLINE( )
Related Functions
CLEAR.OUTLINE Removes outlining from the current sheet
OUTLINE Creates an outline and defines settings for automatically creating outlines
Return to index


Provide the optional URL to enable Tanzu Mission Control registration. After supplying the URL, you will be able to review the configuration YAML.


Dan Lewis
Clemson University
Identify common accessibility issues
Can you navigate the website using only the keyboard?
Is there anything that requires the mouse?

var el = document.getElementById('some-div');
el.focus();

Example Link 1

Example Link 2

Example Link 3

"What is this thing and what does it do?"

<title>Descriptive and Unique</title>

Level One

Level Two

Level Three

Name
<input id="name">
Name: <input>
<button class="icon-search" aria-label="Search">
</button>
click here
Click here for an example website!
vs.
Visit an example website.
Visit an example website.
vs.
Visit an example website.

Synchronized, Equivalent, Accessible
| Year | Units Sold |
|---|---|
| 1990 | 100 |
| 2000 | 5,800 |

Widgets Sold by Year

Year
Units Sold

1990
100

2000
5,800

<button>Example Button 1</button>
Example Button 2

Don't rely solely on sensory characteristics to express meaning.
| Conformance | Normal Text | Large Text |
|---|---|---|
| AA | 4.5:1 | 3:1 |
| AAA | 7:1 | 4.5:1 |
Large text is at least 18 point or 14 point bold.
Flashes faster than 3 times per second can cause seizures for people with photosensitivity.
<meta name="viewport"
content="width=device-width, initial-scale=1">
Bad:
maximum-scale=1
user-scalable=no
Read the seminal paper on A List Apart.
Google's material design guidelines provide a good example of accessible touch targets.
Don't use ARIA if a native control is sufficient!
Navigating a widget changes its focus. Returning to a widget should return to its previous focus.
.visually-hidden {
position: absolute;
left: -10000px;
top: auto;
width: 1px;
height: 1px;
overflow: hidden;
}


|
||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object org.openqa.selenium.remote.RemoteWebDriver org.openqa.selenium.phantomjs.PhantomJSDriver
public class PhantomJSDriver
A WebDriver
implementation that controls a PhantomJS running in Remote WebDriver mode.
This class is provided as a convenience for easily testing PhantomJS.
The control server which each instance communicates with will live and die with the instance.
PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY
PhantomJSDriverService.PHANTOMJS_GHOSTDRIVER_PATH_PROPERTY
PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY
is required only if the executable
phantomjs
is not available through the $PATH
environment variable:
you can provide it either via the Capabilities
construction parameter object,
or via System
Property.
PhantomJSDriverService.PHANTOMJS_GHOSTDRIVER_PATH_PROPERTY
is optional in case you want to use a specific
version of GhostDriver (i.e. during development of GhostDriver).
You can provide it either via the Capabilities
construction parameter object,
or via System
Property.
Instead, if you have a PhantomJS WebDriver process already running, you can instead use RemoteWebDriver.RemoteWebDriver(java.net.URL, org.openqa.selenium.Capabilities)
to delegate the
execution of your WebDriver/Selenium scripts to it. Of course, in that case you will than be in
charge to control the life-cycle of the PhantomJS process.
NOTE: PhantomJS Remote WebDriver mode is implemented via
GhostDriver.
It's a separate project that, at every stable release, is merged into PhantomJS.
If interested in developing (contributing to) GhostDriver, it's possible to run PhantomJS and pass GhostDriver as
a script.
NOTE: The design of this class is heavily inspired by org.openqa.selenium.chrome.ChromeDriver
.
PhantomJSDriverService.createDefaultService()
| Nested Class Summary |
|---|
| Nested classes/interfaces inherited from class org.openqa.selenium.remote.RemoteWebDriver |
|---|
org.openqa.selenium.remote.RemoteWebDriver.RemoteTargetLocator, org.openqa.selenium.remote.RemoteWebDriver.RemoteWebDriverOptions, org.openqa.selenium.remote.RemoteWebDriver.When |
| Nested classes/interfaces inherited from interface org.openqa.selenium.WebDriver |
|---|
org.openqa.selenium.WebDriver.ImeHandler, org.openqa.selenium.WebDriver.Navigation, org.openqa.selenium.WebDriver.Options, org.openqa.selenium.WebDriver.TargetLocator, org.openqa.selenium.WebDriver.Timeouts, org.openqa.selenium.WebDriver.Window |
| Constructor Summary | |
|---|---|
PhantomJSDriver()
Creates a new PhantomJSDriver instance. |
|
PhantomJSDriver(org.openqa.selenium.Capabilities desiredCapabilities)
Creates a new PhantomJSDriver instance. |
|
PhantomJSDriver(PhantomJSDriverService service,
org.openqa.selenium.Capabilities desiredCapabilities)
Creates a new PhantomJSDriver instance. |
| Method Summary | ||
|---|---|---|
java.lang.Object |
executePhantomJS(java.lang.String script,
java.lang.Object... args)
Execute a PhantomJS fragment. |
|
protected static java.util.Map<java.lang.String,org.openqa.selenium.remote.CommandInfo> |
getCustomCommands()
|
|
|
getScreenshotAs(org.openqa.selenium.OutputType<X> target)
Take screenshot of the current window. |
| Methods inherited from class org.openqa.selenium.remote.RemoteWebDriver |
|---|
close, execute, execute, executeAsyncScript, executeScript, findElement, findElement, findElementByClassName, findElementByCssSelector, findElementById, findElementByLinkText, findElementByName, findElementByPartialLinkText, findElementByTagName, findElementByXPath, findElements, findElements, findElementsByClassName, findElementsByCssSelector, findElementsById, findElementsByLinkText, findElementsByName, findElementsByPartialLinkText, findElementsByTagName, findElementsByXPath, get, getCapabilities, getCommandExecutor, getCurrentUrl, getElementConverter, getErrorHandler, getExecuteMethod, getFileDetector, getKeyboard, getMouse, getPageSource, getRemoteStatus, getSessionId, getTitle, getWindowHandle, getWindowHandles, log, manage, navigate, quit, setCommandExecutor, setElementConverter, setFileDetector, setFoundBy, setLogLevel, setSessionId, startClient, startSession, startSession, stopClient, switchTo, toString |
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
| Constructor Detail |
|---|
public PhantomJSDriver()
for configuration details.
public PhantomJSDriver(org.openqa.selenium.Capabilities desiredCapabilities)
desiredCapabilities
- The capabilities required from PhantomJS/GhostDriver.for configuration details.
public PhantomJSDriver(PhantomJSDriverService service, org.openqa.selenium.Capabilities desiredCapabilities)
service
will be started along with the
driver, and shutdown upon calling RemoteWebDriver.quit()
.
service
- The service to use.desiredCapabilities
- The capabilities required from PhantomJS/GhostDriver.| Method Detail |
|---|
public <X> X getScreenshotAs(org.openqa.selenium.OutputType<X> target) throws org.openqa.selenium.WebDriverException
getScreenshotAs
in interface org.openqa.selenium.TakesScreenshot
getScreenshotAs
in class org.openqa.selenium.remote.RemoteWebDriver
target
- The target type/format of the Screenshot
org.openqa.selenium.WebDriverException
TakesScreenshot.getScreenshotAs(org.openqa.selenium.OutputType)
public java.lang.Object executePhantomJS(java.lang.String script, java.lang.Object... args)
script
- The fragment of PhantomJS JavaScript to execute.args
- List of arguments to pass to the function that the script is wrapped in.
These can accessed in the script as 'arguments[0]', 'arguments[1]',
'arguments[2]', etc
protected static java.util.Map<java.lang.String,org.openqa.selenium.remote.CommandInfo> getCustomCommands()
|
||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |


--- name: interchange url: /interchange title: Interchange ---
Interchange allows you to specify what specific content to view based on a media query. The last query to match will be shown.
Because of some cool Angular features, you're welcome to either specify the content right away (without including src
) or, you can specify a partial to be loaded. Loading is done lazily, meaning that even with 20 different zf-source
declarations, only the correct one will load for the current media query. So if you're on mobile, only the mobile partial will load up.
Note that partials do not get RE-LOADED, meaning that as long as the user is on the page, the various partials will be cached.
You can use Interchange with this simple markup:
You can use Interchange to display HTML partials depending on screen size like so:


My bookmarks
Click on any bookmark to edit or delete and click
when you're done.
Add
Created by Tany4


Welcome! Stay awhile and look around.
Full Stack web developer utilizing special blend of technical and interpersonal skills to efficiently translate business needs into user-friendly, web functionality. Recently earned a certificate in full stack development from The Ohio State University, with newly developed skills in JavaScript, CSS, React.js, and mobile-first responsive web design. A self-motivated individual desiring to leverage strong time-management skills to efficiently prioritize competing objectives.


Welcome!
This project is part of a ProDigi Bootcamp Course, which was developed in: Javascript, NodeJS, Google Material Design Lite, Firebase, RandomUser API, and Apilayer API
by Bruno Santos
This project is part of a ProDigi Bootcamp Course, which was developed in: Javascript, NodeJS, Google Material Design Lite, Firebase, RandomUser API, and Apilayer API


The WSO2 Enterprise Integrator offers a lean approach to creating a SOA by adding monitoring, management and virtualization to your existing service interactions. Its innovative design leads it to be one of the highest performance, lowest footprint, and widest interoperability integration systems available.
Figure1: WSO2 Enterprise Integrator Server Home Page
A proxy service acts as a service hosted in WSO2 Enterprise Integrator, and typically fronts an existing service endpoint. A proxy service can be created and exposed on a different transport, schema, WSDL, or QoS (such as WS-Security, WS-Reliable Messaging) other than the real service. It can mediate the messages before they are delivered to the actual endpoint, and the responses before they reach the client.
Use the Mediation Sequences page to add new sequences or edit existing sequences.
Use the Endpoint Management feature to add, remove and change endpoints.


Intelligent autonomous mobile robots need to know where they are, in order to function correctly. For example, a self-driving car needs to know which street, and which intersection it it at, in order to plan when and which turn it should take next. While some robots have access to GPS readings, such GPS readings are still not sufficiently accurate to make accurate decisions - the error of a commercial GPS is greater than the width of a driving lane, and the decisions taken by a self-driving car need to account specifically for not only which lane it is in, but exactly where in the lane it is.
Similarly, indoor mobile robots similarly need to accurately know where they are, despite having no access to GPS. Thus, to reason more accurately about their locations in the world, mobile robots rely on additional on-board sensors such as laser range-finders and depth cameras.
The problem of estimating where a robot is, given its on-board sensor readings over time, is called mobile robot localization.
In this page, we explain the sources of uncertainty for the problem of mobile robot localization, and one popular algorithm for mobile robot localization, called Monte-Carlo Localization, works on robots.
Robots, as physical entities acting in the real world, inherently suffer from errors in sensing, and locomotion. Such errors result in uncertainty of the robot’s estimates of its location. Let us investigate the nature of the uncertainties arising from a robot’s motion, and its sensing.
Uncertainty in a robot’s motion arises from a large number of factors, including differences in wheel diameter, tire inflation, friction with respect to the ground, and uneven terrain. Thus, even when asked to execute the same command repeatedly, a robot will inevitably have errors in its actual execution. This demo simulates the errors in execution of motion commands on a real world robot. The blue line represents the planned motion, while the red line represents the robot's actual motion.
This demo simulates how real world robots follow commands. The blue line represents planned motion while the red line represents robot's actual motion.
When the robot is commanded to rotate by a certain angle, the true rotation of the robot might differ from the commanded angle.
When the robot is commanded to move straight by a certain distance, the robot may not drive straight, and instead turn by some amount while traversing the commanded distance.
When the robot is commanded to move straight by a certain distance, the robot may not move by that same distance.
When the robot is commanded to rotate by a certain angle, the robot might, in addition to turning, skid sideways or forward. This type of error is significant on robots with tank treads and multiple wheels with skid-steering.
You can see the impact of each of these types of error on a robot’s motion. In the demos below, you can observe the impact of each type of error on the overall executed path of the robot. Try adjusting the slider to control the magnitude of the noise, and observe its impact on the path followed by the robot.
While the demos above simulated a single outcome of a robot at a time for each type of error, we can also concurrently simulate many possible outcomes for the errors. The demos below simulate each of the four types of errors in a robot’s motion over many possible outcomes simultaneously, to demonstrate the range, and distribution, of the robot’s possible locations over time as affected by the different types of motion errors.
Putting together all the four types of errors in a robot’s motion, we can simulate how a robot’s path may diverge from its planned path, over time. In this demo, a robot is asked to follow a fixed trajectory(shown as the green path) in an indoor office building. The blue outlines are simulated outcomes of the robot’s location over time. Note how the many simulated outcomes of the robot’s location diverge over time. You may adjust the magnitude of each type of motion error, and see how it affects the outcomes.
Clearly, in order to effectively work in the real world, the robot cannot expect its true location to match its planned path. However, we can see that we can simulate many possible outcomes for the robot’s location over time: this will be crucial to our goal of performing mobile robot localization. While we may not know exactly where the robot is after executing a motion command, we can simulate the distribution of possible outcomes. This distribution of possible outcomes can then be further refined by additionally taking into account observations from additional sensors.
To assist in the task of localization, a robot relies on observations made with its on board sensors, and a known map of the environment. Laser range-finders are one type of commonly used sensors on mobile robots. They allow the robot to sense how far obstacles are from the robot by measuring the time taken for a laser beam to traverse from the sensor, to the obstacle, and back. The laser beam in a laser range-finder is swept in a circular arc, thus allowing the robot to make distance measurements for a wide angle around the robot. Laser range-finders have a maximum range beyond which they cannot sense objects, and they also have a fixed number of angles they can sense along, and the overall angle over which they can make observations.
Each ray of the laser range-finder thus provides a measurement of the distance to the closest obstacle in that direction. This measurement inherently has errors, due to the variations in the optical properties of the obstacle, errors in time measurements from the electronics in the sensor, and dust particles in the air. The demo below simulates multiple readings for a single ray of a laser range-finder, when the actual distance to the obstacle is 10 meters. The demo graphs the distribution of the number of times the sensor makes a particular observation. Note that the actual observations vary, and their distribution is spread out, but the peak is centered around the true reading. The average over all the observations, despite the noisy nature of the observations, tends towards the expected value. Try changing the magnitude of the sensor noise, and the number of observations: note how the average sensor reading more closely matches the true distance when the sensor noise is low, and when the number of observations is high.
Despite the errors in individual readings of the sensor, the average error over a large number of readings tends to zero as the number of readings increases, and the distributions of the readings follow a known pattern, modelled by a Normal Distribution,.
The robot's sensor model is responsible for incorporating the robot's sensor readings. The readings might be an image taken from a camera, data returned by a laser scanner, data gathered by ultrasonic sensors, etc. Whatever the data is, sensor models are supposed to analysis them and give a judgement of where the robot is. In other words, sensor models are robot's perception of the environment around it. Just like humans look around and figure out where they are, robots do the same: with sensor models. There is one important precondition, the sensor model must have a map of the environment.
Robot's sensors have noises, meaning that measurements are not exactly accurate. The robot's internal model must be aware of this when estimating its location. Click to place the robot, hold and move to change direction of robot. You can also use the Mini Map on the right to move the area of the map that you want to have a look at.
Just like it was mentioned before, the sensor model can only estimate the position of the robot due to inaccuracy. The sensor model will calculate the probability of the robot at a given position base on its sensor readings. Click color the map to calculate the probability of the robot in the map with density in pixels.
Let's take self driving car as an example. When it is moving, it is impossible for it to predict the weather conditions, motion dynamics of pedestrians and other cars, traffic lights, or car accidents that is not given in the map.
Some uncertainty is caused by the robot’s software. All internal models of the world are approximate. Models are abstractions of the real world. As such, they only partially model the underlying physical processes of the robot and its environment.
Probabilistic robotics is a relatively new approach to robotics that pays tribute to the uncertainty in robot perception and action. The key idea in probabilistic robotics is to represent information by probability distributions over a whole space of guesses instead of a single best guess. By doing so, they can represent ambiguity and degree of belief in a mathematically sound way.
Given that all actuators and sensors have some degrees of noise, how should we use these actuators and sensors? Over time, people have developed algorithms and mathematical models to take these uncertainties into account. Monte Carlo Localization (MCL) is an example of such algorithms.
The MCL algorithm can be applied to robots with the following conditions
Trivia: Amazon uses such robots. Check this out.
The MCL algorithms works by maintaining many possible locations of the robot. As the robot moves and senses, MCL incorporates additional information gathered and updates each of its possible locations. The possible locations that seem to be consistent with the robot's motion and measurement data will be kept, vice versa.
Each guess(also called hypothesis) is represented by a "particle" consists of location(such as x, y coordinates) of the robot and direction it's facing. Each particle is also associated with a weight, which represents how likely the particle represents the robot's true location(and direction).
There are many applications of such algorithm. For example, warehouse robots that deliver objects inside a building. The robot would need to keep track of where it is when moving and adjust its motion accordingly if it wanders off path. GPS is not a good choice since most civilian GPS devices are only accurate to about 16 ft under open sky. The accuracy of GPS is even worse inside a building due to signal blockage.
Why do we need to take uncertainties of odometry readings into account?
Noise exists in robots' motion sensors. If the motion sensor reports a movement of 5 meters, the actual distance moved may or may not be exactly 5. It is probably close to 5, say 5.1, 4.9, 4.8, etc. The accuracy of motion sensors determines how far the readings deviate from reality. In practice, it is turns out that taking these noises into account produces better results.
How do we take uncertainties of odometry into account?
The mathematical model should be aware of such uncertainties. The mathematical model to handle is is often called a motion model. When updating particles according to the robot's motion, the motion model draws a sample from all possible outcomes. For example, if the robot's odometry sensor reports a forward movement of 10 meters, the motion model would draw a sample according the patter of noise, for example, 9.8m, 10.3m, 10.1m, etc. But it is extremely unlikely to draw a sample of 3m. Because the motion model knows that the robot is not that inaccurate.
Why do we need to resample? Why don't we just keep the best ones?
The weights of particles represent the robot's judgement of how likely that particle is the true location. Just because the robot think a particle is a good guess, doesn't mean that particle is actually good. If you only keep the best one and drop the rest, it is very likely that you are throwing away the good particles. By performing a resampling process, we are kind of maintaining a natural selection process. And the hope is that, some of the good particles will survive and propagate, giving us a good result.


We are still in the making and we would love to hear how we can better your VachanOnline experience.


SARABI LLC
{{tagLine}}
{{tagLine}}
{{bundle.displayName}}
You can have any number of columns as long as the total width is 100%;
This top bar can be any combined width of the lower columns and can span any number of columns.
All this is done with simple divs.


Posts February 05 2020 리눅스 계정 명령어 March 01 2017 Welcome to Jekyll February 01 2017 Markdown examples January 01 2017 Advanced examples Previous Page 1 2 No Next Page


dnnicon
arrow-down
arrow-left
arrow-right
arrow-square-down
arrow-square-up
arrow-up
arrows
caret-down
caret-left
caret-right
caret-up
check-square-o
check
cloud-down
cloud-up
cog
cogs
exclamation
home
info-circle
pencil
print
refresh
remove
rss
search
source
square-o
trash-o
Usage
<i class="dnni dnni-name"></i>


Big Requirements¶
textbf{#} & textbf{Description} & textbf{SRC} & textbf{WBS} & textbf{PRI} & textbf{VER} \ hline R1 & Ability to perform regional simulation allowing communities to evaluate resilience and perform what-if types of analysis for natural hazard events & GC & 1.3.10 rWhale & M & 1.0 \ hline R1.1 & Perform such simulations for ground shaking due to Earthquake & GC & 1.3.10 rWhale & M & 1.0 \ hline R1.2 & Ability to perform such simulations for wave action due to Earthquake induced Tsunami & GC & 1.3.10 rWhale & M & \ hline R1.3 & Ability to perform such simulations for wind action due to Hurricane & GC & 1.3.10 rWhale & M & \ hline R1.4 & Ability to perform such simulations for wave action due to Hurricane Storm Surge & GC & R1.3.10 rWhale & M & \ hline R1.5 & Ability to perform such for multi-hazard simulations: wind + storm surge, rain, wind and water borne debris & GC & 1.3.10 rWhale & M & \ hline R1.6 & Ability to incorporate damage to lifelines in determination of community resilience & GC & 1.3.10 rWhale & M & \ hhline{======}
R2.1 & Ability of stakeholders to perform simulations of different scenarios that aid in planning and response after damaging events & GC & 1.3.10 rWhale & M & 1.0 \ hline R2.2 & Ability to utilize HPC resources in regional simulations that enables repeated simulation for stochastic modeling & GC & 1.3.10 rWhale & M & 1.0 \ hline R2.3 & Provide open-source software for developers to test new data and algorithms & GC & 1.3.10 rWhale & M & 1.0 \ hline R2.4 & Ability to use a tool created by linking heterogeneous array of simulation tools to provide a toolset for regional simulation & GC & 1.3.10 rWhale & M & 1.0 \ hline R2.5 & Ability to utilize existing open-source software for faster deployment & GC & 1.3.10 RDT & M & 1.0 \ hline R2.6 & Ability to utilize ensemble techniques & GC & 1.3.10 rWhale & M & 1.0 \ hline R2.7 & Ability to include multi-scale nonlinear models & GC & 1.3.10 rWhale & M & 1.0 \ hline R2.8 & Ability to include a formal treatment of uncertainty and randomness & GC & 1.3.10 rWhale & M & 1.0 \ hline R2.9 & Ability to include latest information and algorithms (i.e. new attenuation models, building fragility curves, demographics, lifeline performance models, network interdependencies, indirect economic loss) & GC & rWhale 1.3.10 & D & \ hline R2.10 & Ability to use GIS so communities can visualize hazard impacts & GC & 1.3.10 rWhale & M & \ hline R2.11 & Ability to explore different strategies in community development, pre-event, early response, and post event, through long term recovery & GC & 1.3.10 RDT & P & \ hline R2.12 & Ability to use system that creates and monitors real-time data, updats models, incorporates crowdsourcing technologies, and informs decision makers & GC & 1.3.10 RDT & P & \ hline R2.13 & Ability to use sensor data to update models for simulation and incorporate sensor data into simulation & GC & 1.3.10 RDT & P & \ hhline{======}
R3.1& Ability to use open-source version of Hazus & GC & 1.3.6 pelicun & M & 1.0 \ hline R3.2 & Ability to incorporate improved damage and fragility models for buildings and lifelines & GC & 1.3.6 pelicun & M & 1.0 \ hline R3.3 & Ability to incorporate improved indirect economic loss estimation models & GC & 1.3.6 pelicun & M & \ hline R3.4 & Ability to include demand surge in determination of damage and loss estimation & GC & 1.3.6 pelicun & M & \ hline R3.5 & Ability to include lifeline disruptions & GC & 1.3.6 pelicun & M & \ hhline{======}
R4.1 & Promote ‘living’ community risk models utilizing local inventory data from various sources & GC & 1.3.0 rWhale & M & \ hline R4.2 & Ability to use cumulative knowledge bases rather than the piecemeal individual approaches & GC & 1.3.3 & M & \ hline R4.3 & Developing and sharing standardized definitions, measurement protocols and strategies for data collection & GC & 1.3.3 & M & \ hline R4.3 & Developing tools that utilize GIS information and online images, e.g. google maps, for data collection & GC & 1.3.4 BRAILS & M & 1.0 \ hline R4.3.1 & Predicting if building is a soft-story building for earthquake simulations & UF & 1.3.4 BRAILS & M & 1.0 \ hline R4.3.2 & Predicting roof shape of building for hurricane wind simulation & SP & 1.3.4 BRAILS & M & 1.0 \ hline R4.3.3 & Predicting level first floor of occupancy for hurricane storm surge simulation & SP & 1.3.4 BRAILS & M & \ hline R4.4 & Providing instruction on gathering information from WWW for purposes of these regional simulations & UF & 1.2.3 Summer Bootcamp & M & V2.0 \ hline R4.5 & Developing, sharing, and archiving datasets for analyzing and modeling resilience and vulnerability over time & GC & 1.3.3 & M & \ hline R4.6 & Ability to use GIS, high resolution elevation and soil data for wind and storm surge simulations & GC & 1.3.10 & D & \ hline R4.7 & Ability to use validated multi-scale models (materials, components, elements) of built environment & GC & 1.3.3 & D & \ hline R4.8 & Ability to use a national database of models for hazard, buildings, and lifelines created for multiple hazards & GC & P & 1.3.3 & \ hhline{======}
5.1 & Ability to perform validation studies to calibrate accuracy of models & GC & 1.3.10 rWhale & M & \ hline 5 & Identify knowledge gaps and promote NSF generated knowledge through regional demonstration projects that help generate linkages to operational entities and decision makers & GC & 1.4.2 & M & \ hline 5.1 & Provide Earthquake Testbeds& SP & 1.4.2 Testbeds & M & 1.0 \ hline 5.1.1 & Provide Bay Area Earthquake Testbed & SP & 1.4.2 Testbeds & M & 1.0 \ hline 5.1.2 & Provide Anchorage Earthquake Testbed & SP & 1.4.2 Testbeds & M & 1.1 \ hline5 .2 & Provide Tsunami Testbed & SP & 1.4.2 Testbeds & M & \ hline 5.3 & Provide Atlantic City Hurricane Wind Testbed & SP & 1.4.2 Testbeds & M & \ hline 5.4 & Provide Atlantic City Hurricane Wind and Storm Surge Testbed & SP & 1.4.2 Testbeds & M & \ hline 5.5 & Provide Earthquake and Lifelines Testbed & SP & 1.4.2 Testbeds & M & \ hline
end{longtable}
noindent KEY:\ Source (SRC): GC=Needed for Grand Challenges, SP=Senior Personnel, UF=User Feedback \ Work Breakdown Structure (WBS): SimCenter WBS Number \ Priority (PRI): M=Mandatory, D=Desirable, P=Possible Future \ Version (VER): Version number the basic requirement was first met


If you experience problems, have a query, or would like to make a suggestion please feel free to contact us.


{{ $email :=<EMAIL_ADDRESS>}} {{ partial "app_header" . }}
Email, Slack Notifications, Webhook Notifications
Configure an Incoming Webhook at Slack
Use the "Webhook URL" from the above configuration in the format https://hooks.slack.com/TXXXXX/BXXXXX/XXXXXXXXXX
and configure it at User Settings > "Webhook URL" and set the "Webhook Type" to Slack
Refer here for a detailed guide on how to create a new Incoming Webhook URL
The code is open source
You can use Zapier like services to consume the notification and send it to your own target service
Alternatively, you can also email us at {{$email}} for your feature request.
You can use Generic Webhooks to get notifications to your own applications. You can use Zapier service to configure custom endpoints. We send webhook data in JSON.
Zapier has a guide for using webhooks.
There are some Zaps as well
Yes, Go to User Settings to configure your email address we need to send the email to. We typically ignore sending emails to @users.noreply.github.com
since they bounce.
If the application does not changes in the repositories you are tracking, we skip sending the email.
You can see/validate the recent checks made by the application at /changes
Drop an email at {{$email}}
We currently only support Chrome extension (source code)
Feel free to contribute for Opera/IE/Safari/Firefox. Drop an email to {{$email}}
Drop an email at {{$email}}
Click on the 'Disable all Notifications' in User Settings field or drop an email to us {{$email}}


(function() {
(function() {
Form to create user
const createUserForm = document.querySelector(".admin-action");
Element for the username field
const createUserName = document.getElementById("createUname");
Element for the password field
const createPassword = document.getElementById("createPassword");
/*
createUserForm:
Event Listener on the create user form to create
a user in FirebaseAuth and register them in Firestore
*/
createUserForm.addEventListener('submit', (e) => {
e.preventDefault();
$("#modal1").modal('open');
Grab username and password of the user we want to create
const createdUsername = createUserName.value;
const createdPassword = createPassword.value;
Get the createUser function from Firebase
const createUser = firebase.functions().httpsCallable('createUser');
Call the createUser function and pass in the new username and password
createUser({email: createdUsername, password: createdPassword}).then(result => {
$("#modal1").modal().hide();
alert(result.data.message);
createUserName.value = "";
createPassword.value = "";
}).catch(function(error) {
alert(error.message);
createUserName.value = "";
createPassword.value = "";
});
});
/*
onAuthStateChanged(user)
Observer for Authentication State:
If the user is not logged in, redirect to login page. If the user is logged in and
not an admin, then redirect to the user dashboard
*/
firebase.auth().onAuthStateChanged(user => {
If user is not signed in redirect to login page
if(!user)
{
console.log("You are not signed in.");
window.location = "/login.html";
}
If user is signed in
if(user)
{
Get admin token result
user.getIdTokenResult().then(idTokenResult => {
user.admin = idTokenResult.claims.admin;
If user is not an admin, redirect to the userdashboard
if(!user.admin)
{
alert("You are not an admin.");
window.location = "/user/userdashboard.html";
}
});
}
});
}());


--- title: "3.7 Lab 7: Linear Regression" lastmod: 2018-12-30T00:00:00 draft: false type: docs maths: true output: blogdown::html_page: toc: true linktitle: "3.7 SPSS 7: Linear Regression" menu: docs: parent: SOC224 weight: 370 ---
Reading‘Chapter 8: Regression’ in Andy Field, 2017. Discovering Statistics Using IBM SPSS Statistics. Sage. |
SummaryWe generally use linear regressions when we have
The unstandardized coefficients for each independent variable - also called B - can be read as:
|
The process of running a regression in SPSS is relatively straight-forward.
Step 1: Estimating the regression model
You put your dependent variable in one field, and then you have three main options for putting in your independent variables:
When you read your results from a regression, there are two main columns you read:
You can ignore all coefficients for which sig. > 0.05. Coefficients where the sig. < 0.05 are interpreted as:
For a one unit increase in the independent variable, the dependent variable goes up by B units, controlling for all other variables in the model.
Step 2: Interpreting the R-square
You also want to look for the R-square: this is the maximum proportion of variation in the dependent variable explained by the independent variables in the model.
Step 3: Reporting the results
The important thing to remember when reporting results, is that you only report the necessary information, and you want to keep it simple and clear. Don’t cut and paste screenshots from SPSS.
Select the dependent variable and put it in the top box
Select the independent variables and put these in the ‘Independent(s)’ box.
Press OK. The regression will run and the output screen will appear
You can then interpret the coefficients of the regression.
Select Analyze > Regression > Linear
Select the dependent variable and put it in the top box
When you run HEIRARCHICAL models, you need to divide your independent variables into groups.
Select the FIRST SET of independent variables and put these in the ‘Independent(s)’ box
Press the ‘Next’ button. The independent variables box will clear.
Select the SECOND SET of independent variables and put these in the ‘Independent(s)’ box
Press the ‘Next’ button. The independent variables box will clear.
Select the THIRD SET of independent variables and put these in the ‘Independent(s)’ box
Press OK. The regression will run and the output screen will appear
How do you interpret a hierarchical linear regression?
The simplest way to think about it is that each of Model 1, Model 2, and Model 3 are completely separate FORCED ENTRY models.
The coefficients for each variable in the three models are interpreted as ‘controlling for all the other variables in the model’. The difference with the later models (like Model 3) is that there are more controls (and more variables with coefficients).
So how would we interpret this set of models?
Look in the ‘Sig.’ column for the p-values
If the p-value < 0.05 then the independent variable has a significant impact on the dependent variable
For the significant variables, we then read the B values (coefficients), which are the effect of a one unit increase of the independent variable on the dependent variable.
In this case the dependent variable is a scale from ‘Never’ to ‘Extremely Often’.
In models 1 and 2, age is statistically significant (Sig. column p, 0.05).
In model 3, age just drops out of statistical significance (p = 0.051). Why? Because we added the variable ‘I feel guilty when I have sex’. This variable turns out to be highly statistically significant: the guiltier a person is, the less they masturbate (or the less they report masturbating).
The fact that age loses significance when we add ‘guilt’ suggests that the variables are related, and the simplest interpretation is this:
‘The older a person is, the more they masturbate, but the reason that they masturbate more is that they feel less guilt. Once we control for guilt, there is no effect of age on masturbation. Older people are probably less guilty, and older people masturbate more, but they do so because they are less guilty, not because of their age per se.’
WARNING: YOU SHOULD PROBABLY NOT BE RUNNING A STEPWISE REGRESSION WHY?
Let me show you through an example:
Select Analyze > Regression > Linear
Select the dependent variable and put it in the top box
When you run STEPWISE models, you tend to put a lot of variables into the model. You don’t generally have multiple blocks.
Select the independent variables and put these in the ‘Independent(s)’ box
Under the independent variables, there is the label ‘Method’. Select ‘Backward’ from the dropdown menu.
Click on ‘Options’.
This will reveal the options for ‘Stepping’. Because we are doing ‘Backwards selection’, you can just look at the ‘Removal’ box. Variables with Significance (p-value) greater than 0.10 will be removed from the model, one at a time. If you want you can adjust this up or down. Press ‘Continue’. Then press OK and run the model
First you need to wade through the huge mass of output.
The way a stepwise backwards selection regression works is that SPSS estimates a complete model with all the variables, and then if any variables have a significance of greater than 0.10, then it removes the one with the highest p-value (i.e. the least significant variable is removed). It then re-estimates the model, and repeats this process until only variables with p-values < 0.10 are left.
So generally we interpret a STEPWISE model by just interpreting the LAST model as a FORCED ENTRY model.
Here are the last two models for our example. Notice the 21 and 22 next to the word (Constant). These are the model numbers, and this means that the method has dropped out 21 variables before getting to the final model.
So how would we interpret this set of models?
Look in the ‘Sig.’ column for the p-values
If the p-value < 0.05 then the independent variable has a significant impact on the dependent variable
Almost all the variables are significant at p < 0.05 level. But does this mean that we should SAY that these variables are significant CAUSE of masturbation?
Well take a look at the variables ‘v16 Have you masturbated’. This is positive and of large magnitude, but is it really a causal variable? Does it make sense to ‘If you have masturbated you are like to masturbate more.’ Maybe, but you would need to make a strong argument.

The R-square is a summary measure of goodness of fit that refers to the proportion of variation in the dependent variable that can be explained by the independent variable.
With this measure, you can say, ’Approximately XXX% of the model can be explained by the independent variable.
The key thing to say here is: DO NOT JUST CUT AND PASTE THE TABLES FROM SPSS INTO YOUR PAPER OR PRESENTATION.
You need to be selective about what you present, and you need to make it look neat and nice!
I am going to set a rule for what I want to see. I only want to see: * B coefficients * Sig./p-values * The number of cases in your sample (n) * The R-square for your model
Here is an example of a table of the models produced by the hierarchical method..


{% extends "base.html" %} {% block body %}
(You can double click on an item to turn it into a folder.)


Base58 |
Base58 is a way to encode Bitcoin addresses (or arbitrary data) as alphanumeric strings. open class Base58 |
NetworkHostAndPort |
Tuple of host and port. Use NetworkHostAndPort.parse on untrusted data. data class NetworkHostAndPort |
PropertyDelegate |
Simple interface encapsulating the implicit Kotlin contract for immutable property delegates. interface PropertyDelegate<out T> |
Try |
Representation of an operation that has either succeeded with a result (represented by Success) or failed with an exception (represented by Failure). sealed class Try<out A> |
UuidGenerator |
class UuidGenerator |
VariablePropertyDelegate |
Simple interface encapsulating the implicit Kotlin contract for mutable property delegates. interface VariablePropertyDelegate<T> : PropertyDelegate<T> |
kotlin.Any |
|
kotlin.ByteArray |
|
kotlin.Int |
|
kotlin.Long |
|
kotlin.String |
|
org.slf4j.Logger |
detailedLogger |
Returns the logger used for detailed logging. fun detailedLogger(): Logger |
loggerFor |
Usually you won't need this method: fun <T : Any> loggerFor(): Logger |
transient |
A simple wrapper that enables the use of Kotlin's fun <T> transient(initializer: () -> T): PropertyDelegate<T> |
uncheckedCast |
fun <T, U : T> uncheckedCast(obj: T): U |


pactree package- Print what packages depend on a specific package:
pactree --reverse package- Dump dependencies one per line, skipping duplicates:
pactree --unique package- Include optional dependencies of a specific package and colorize the output:
pactree --optional --color package- Display help:
pactree


Since there has been some talk about net neutrality recently, I decided to read up on it.
First, I want to talk about what net neutrality is, because I did not really know what it was beyond "Internet freedom." What it comes down to is that all internet traffic must be treated equally. It is targeted at internet service providers (ISPs) to prevent them from blocking websites and throttling internet traffic to take away from the consumer's experience. I think it is important for us, as consumers, to be wary of what could potentially happen if net neutrality does not actually become a thing. I do not want to come off as too much of a conspiracy theorist, but it is nice to know that the ISPs will not have complete control over what is being seen on the internet, and that there are people fighting for the common people.
There are a couple other topics that net neutrality would cover in its current state. It would prevent any paid priorization from ISPs so that there is no incentive for them to favor some traffic over others. There is a another generic code of coduct established to prevent any future policies from being instilled that would put the consumers at risk. The ISPs need to be transparant on the services they are providing and how they run their networks; hopefully to prevent any shenanigans that might be going on behind the scenes. The last piece was a little vague in the articles that I read, but it boils down to ths ISPs "reasonably" managing their networks. It is understood that sometimes ISPs need to redistribute available bandwidth to the more important types of data (videos) when the system is overloaded to provide a better user experience. So it just needs to be on reasonable terms, but I am still curious what this will actually mean in the legislation.
I enjoyed going through and learning more about net neutrality, even if it was on a very basic scale. It is good to see that the government is really trying to find out what ISPs are doing and offering us. The fact that ISPs are fighting net neutrality does not sit with me well, and on a personal note, I cannot wait for someone to revolutionize the internet providers as we know them; they just need to break the mold. Google can definitely do it with Google Fiber, but since it is only offered in limited cities right now, I am not too sure when it will be available nationwide. With someone new in the market, it will hopefully push ISPs to a something new and better. I feel like this with eventually be the solution to issues with net neutrality, and we will not have to worry about them taking away our freedom.


Would you like to try your luck in a throw of the dice?
Everyone has a chance to win.
You have won! Congratulations!
I am sorry to say, but you have lost...