# -*- coding: utf-8 -*-
"""
Input/Output Utilities (io_utils.py)
====================================
Functions for input/output.
Created on Sun Sep 16 15:15:18 2018
@author: Jon
"""
import os
import pickle
import ogr
import osr
import gdal
import numpy as np
import pandas as pd
import geopandas as gpd
import rivgraph.geo_utils as gu
from shapely.geometry import Point, LineString
[docs]def prepare_paths(path_results, name, path_mask):
"""
Creates a dictionary of paths for most of the RivGraph-exportable files.
Parameters
----------
path_results : str
The directory of the path where results are exported. Will be created
if it does not exist.
name : str
Name of the analysis that is prepended to exported results.
path_mask : str
Path to the mask geotiff, including extension.
Returns
-------
paths : dict
Contains all the export paths. Not all will be necessarily used, but
all possible exports' paths are contained.
"""
basepath = os.path.normpath(path_results)
# Create results folder if it doesn't exist
if os.path.isdir(basepath) is False:
os.makedirs(basepath)
# Create dictionary of directories
paths = dict()
paths['basepath'] = basepath
paths['maskpath'] = path_mask # geotiff binary mask; must be input by user
paths['Iskel'] = os.path.join(basepath, name + "_skel.tif") # geotiff of skeletonized mask
paths['Idist'] = os.path.join(basepath, name + "_dist.tif") # geotiff of distance transform of mask
paths['network_pickle'] = os.path.join(basepath, name + "_network.pkl") # links and nodes dictionaries, pickled
paths['fixlinks_csv'] = os.path.join(basepath, name + "_fixlinks.csv") # csv file to manually fix link directionality, must be created by user
paths['linkdirs'] = os.path.join(basepath, name + "_link_directions.tif") # tif file that shows link directionality
paths['metrics'] = os.path.join(basepath, name + "_metrics.pkl") # metrics dictionary
# The files at the following paths are not created by RivGraph, but by the user.
paths['shoreline'] = os.path.join(basepath, name + "_shoreline.shp") # shoreline shapefile, must be created by user
paths['inlet_nodes'] = os.path.join(basepath, name + "_inlet_nodes.shp") # inlet nodes shapefile, must be created by user
return paths
[docs]def pickle_links_and_nodes(links, nodes, path_out):
"""
Saves the links and nodes dictionaries to a pickle file for easy loading.
Parameters
----------
links : dict
Network links and associated properties.
nodes : dict
Network nodes and associated properties.
path_out : str
Where to save the pickle.
Returns
-------
None.
"""
with open(path_out, 'wb') as f:
pickle.dump([links, nodes], f)
[docs]def unpickle_links_and_nodes(path_pickle):
"""
Unpickles a previously pickled network. Note that ordered_set is reloaded
within this function so that pickle can interpret OrderedSet object fields.
Parameters
----------
path_pickle : str
Path to the pickled network.
Returns
-------
links : dict
Network links and associated properties.
nodes : dict
Network nodes and associated properties.
"""
import sys
from rivgraph import ordered_set
sys.modules['ordered_set'] = ordered_set
with open(path_pickle, 'rb') as f:
links, nodes = pickle.load(f)
return links, nodes
[docs]def get_driver(path_file):
"""
Finds the proper geopandas driver for saving a geodataframe. Keys off the
extension in the filename, and supports either shapefiles or geojsons.
Parameters
----------
path_file : str
Where the file will be saved.
Returns
-------
driver : str
Driver string specifying file format when using geopandas' to_file().
"""
# Write geodataframe to file
ext = path_file.split('.')[-1]
if ext == 'json':
driver = 'GeoJSON'
elif ext == 'shp':
driver = 'ESRI Shapefile'
return driver
[docs]def nodes_to_geofile(nodes, dims, gt, crs, path_export):
"""
Saves the nodes of the network to a georeferencedshapefile or geojson.
Computed node properties are appended as attributes when available.
The filetype is specified by the export path.
Parameters
----------
nodes : dict
Network nodes and associated properties.
dims : tuple
(nrows, ncols) of the original mask from which nodes were derived.
gt : tuple
GDAL geotransform of the original mask from which nodes were derived.
crs : pyrpoj.CRS
CRS object specifying the coordinate reference system of the original
mask from which nodes were derived.
path_export : str
Path, including extension, where to save the nodes export.
Returns
-------
None.
"""
nodexy = np.unravel_index(nodes['idx'], dims)
x, y = gu.xy_to_coords(nodexy[1], nodexy[0], gt)
all_nodes = [Point(x, y) for x, y in zip(x, y)]
# Create GeoDataFrame for storing geometries and attributes
gdf = gpd.GeoDataFrame(geometry=all_nodes)
gdf.crs = crs
# Store attributes as strings (numpy types give fiona trouble)
dontstore = ['idx']
storekeys = [k for k in nodes.keys() if len(nodes[k]) == len(nodes['id']) and k not in dontstore]
store_as_num = ['id', 'idx', 'logflux', 'flux']
for k in storekeys:
if k in store_as_num:
gdf[k] = [c for c in nodes[k]]
else:
gdf[k] = [str(c).replace('[', '').replace(']', '') for c in nodes[k]]
# Write geodataframe to file
gdf.to_file(path_export, driver=get_driver(path_export))
[docs]def links_to_geofile(links, dims, gt, crs, path_export):
"""
Saves the links of the network to a georeferencedshapefile or geojson.
Computed link properties are saved as attributes when available. Note that
the 'wid_pix' property, which stores the width at each pixel along the
link, may be truncated depending on its length and the filetype.
The filetype is specified by the export path.
Parameters
----------
links : dict
Network links and associated properties.
dims : tuple
(nrows, ncols) of the original mask from which links were derived.
gt : tuple
GDAL geotransform of the original mask from which links were derived.
crs : pyrpoj.CRS
CRS object specifying the coordinate reference system of the original
mask from which links were derived.
path_export : str
Path, including extension, specifying where to save the links export.
Returns
-------
None.
"""
# Create line objects to write to shapefile
all_links = []
for link in links['idx']:
xy = np.unravel_index(link, dims)
x, y = gu.xy_to_coords(xy[1], xy[0], gt)
all_links.append(LineString(zip(x, y)))
# Create GeoDataFrame for storing geometries and attributes
gdf = gpd.GeoDataFrame(geometry=all_links)
gdf.crs = crs
# Store attributes as strings (numpy types give fiona trouble)
dontstore = ['idx', 'n_networks']
storekeys = [k for k in links.keys() if k not in dontstore]
storekeys = [k for k in storekeys if len(links[k]) == len(links['id'])]
store_as_num = ['id', 'flux', 'logflux']
for k in storekeys:
if k in store_as_num:
gdf[k] = [c for c in links[k]]
elif k == 'wid_pix':
gdf[k] = [str(c.tolist()).replace('[', '').replace(']', '') for c in links[k]]
else:
gdf[k] = [str(c).replace('[', '').replace(']', '') for c in links[k]]
# Write geodataframe to file
gdf.to_file(path_export, driver=get_driver(path_export))
[docs]def centerline_to_geovector(cl, crs, path_export):
"""
Exports centerline coordinates as a georeferenced linestring. Can be used
with any set of coordinates.
Parameters
----------
cl : np.array
((xs), (ys)) array of coordinates to write. The coordinates should already be
in terms of the provided crs.
crs : pyproj.CRS
CRS object specifying the coordinate reference system of the provided
coordinates
path_export : str
Path, including extension, specifying where to save the coordinates export.
Returns
-------
None.
"""
# Put points into shapely LineString
if type(cl) is not LineString:
cl = LineString(zip(cl[0], cl[1]))
# Geopandas dataframe
cl_df = gpd.GeoDataFrame(geometry=[cl])
cl_df.crs = crs
# Save
cl_df.to_file(path_export, driver=get_driver(path_export))
[docs]def write_geotiff(raster, gt, wkt, path_export, dtype=gdal.GDT_UInt16,
options=['COMPRESS=LZW'], nbands=1, nodata=None,
color_table=None):
"""
Writes a georeferenced raster to disk.
Parameters
----------
raster : np.array
Image to be written. Shape is (nrows, ncols, nbands), although if only
one band is present the shape can be just (nrows, ncols).
gt : tuple
GDAL geotransform for the raster. Often this can simply be copied from
another geotiff via gdal.Open(path_to_geotiff).GetGeoTransform(). Can
also be constructed following the gdal convention of
(leftmost coordinate, pixel width, xskew, uppermost coordinate, pixel height, yskew).
For non-rotated images, the skews will be zero.
wkt : str
Well-known text describing the coordinate reference system of the raster.
Can be copied from another geotiff with gdal.Open(path_to_geotiff).GetProjection().
path_export : str
Path with extension of the geotiff to export.
dtype : gdal.GDT_XXX, optional
Gdal data type. Options for XXX include Byte, UInt16, UInt32, Int32,
Float32, Float64 and complex types CInt16, Cint32, CFloat32 and CFloat64.
If storing decimal data, use a Float type, binary data use Byte type.
The default is gdal.GDT_UInt16 (non-float).
options : list of strings, optional
Options that can be fed to gdal dataset creator. See YYY for what
can be specified by options.
The default is ['COMPRESS=LZW'].
nbands : int, optional
Number of bands of the raster. The default is 1.
nodata : numeric, optional
Pixels with this value will be written as nodata. If None, no nodata
value will be considered. The default is None.
color_table : gdal.ColorTable, optional
Color table to append to the geotiff. Can use colortable() function
to create, or create a custom type with gdal.ColorTable().
Note that color_tables can only be specified for Byte and UInt16 datatypes.
The default is None.
Returns
-------
None.
"""
height = np.shape(raster)[0]
width = np.shape(raster)[1]
# Add empty dimension for single-band images
if len(raster.shape) == 2:
raster = np.expand_dims(raster, -1)
# Prepare destination file
driver = gdal.GetDriverByName("GTiff")
if options != None:
dest = driver.Create(path_export, width, height, nbands, dtype,
options)
else:
dest = driver.Create(path_export, width, height, nbands, dtype)
# Write output raster
for b in range(nbands):
dest.GetRasterBand(b+1).WriteArray(raster[:, :, b])
if nodata is not None:
dest.GetRasterBand(b+1).SetNoDataValue(nodata)
if color_table != None:
dest.GetRasterBand(1).SetRasterColorTable(color_table)
# Set transform and projection
dest.SetGeoTransform(gt)
srs = osr.SpatialReference()
srs.ImportFromWkt(wkt)
dest.SetProjection(srs.ExportToWkt())
# Close and save output raster dataset
dest = None
[docs]def colortable(ctype):
"""
Generates a gdal-ingestible color table for a set of pre-defined options.
Can add your own colortable options. See https://gdal.org/doxygen/structGDALColorEntry.html
and https://gis.stackexchange.com/questions/158195/python-gdal-create-geotiff-from-array-with-colormapping
for guidance.
Parameters
----------
ctype : str
Specifies the type of colortable to return. Choose from
{'binary', 'skel', 'mask', 'tile', or 'GSW'}.
Returns
-------
color_table : gdal.ColorTable()
Color table that can be supplied to gdal when creating a raster.
"""
color_table = gdal.ColorTable()
if ctype == 'binary':
# Some examples / last value is alpha (transparency).
color_table.SetColorEntry(0, (0, 0, 0, 0))
color_table.SetColorEntry(1, (255, 255, 255, 100))
elif ctype == 'skel':
color_table.SetColorEntry(0, (0, 0, 0, 0))
color_table.SetColorEntry(1, (255, 0, 255, 100))
elif ctype == 'mask':
color_table.SetColorEntry(0, (0, 0, 0, 0))
color_table.SetColorEntry(1, (0, 128, 0, 100))
elif ctype == 'tile':
color_table.SetColorEntry(0, (0, 0, 0, 0))
color_table.SetColorEntry(1, (0, 0, 255, 100))
elif ctype == 'GSW':
color_table.SetColorEntry(0, (0, 0, 0, 0))
color_table.SetColorEntry(1, (0, 0, 0, 0))
color_table.SetColorEntry(2, (176, 224, 230, 100))
return color_table
[docs]def shapely_list_to_geovectors(shplist, crs, path_export):
"""
Exports a list of shapely geometries to a GIS-ingestible format.
Parameters
----------
shplist : list
A list of shapely.geometry objects defining components of the mesh.
crs : pyproj.CRS
CRS object specifying the coordinate reference system of the geometries
to export.
path_export : str
Path, including extension, where the geovector data should be written.
Extensions can be either '.shp' or '.geojson'.
Returns
-------
None.
"""
gdf = gpd.GeoDataFrame(geometry=shplist)
gdf.crs = crs
gdf.to_file(path_export, driver=get_driver(path_export))
[docs]def write_linkdirs_geotiff(links, gdobj, path_export):
"""
Creates a geotiff where links are colored according to their directionality.
Pixels in each link are interpolated between 0 and 1 such that the upstream
pixel is 0 and the downstream-most pixel is 1. In a GIS, color can then
be set to visualize flow directionality.
Parameters
----------
links : dict
Network links and associated properties.
gdobj : osgeo.gdal.Dataset
GDAL object correspondng to the original mask from which links were
derived.
path_export : str
Path, including .tif extension, where the directions geotiff is
written.
Returns
-------
None.
"""
# Initialize plotting raster
I = gdobj.ReadAsArray()
I = np.ones((gdobj.RasterYSize, gdobj.RasterXSize), dtype=np.float32)*-1
# Loop through links and store each pixel's interpolated value
for lidcs in links['idx']:
n = len(lidcs)
vals = np.linspace(0, 1, n)
rcidcs = np.unravel_index(lidcs, I.shape)
I[rcidcs] = vals
# Save the geotiff
write_geotiff(I, gdobj.GetGeoTransform(), gdobj.GetProjection(), path_export, dtype=gdal.GDT_Float32, nodata=-1)
return
[docs]def create_manual_dir_csv(path_csv):
"""
Creates a .csv file for fixing links manually.
Parameters
----------
path_csv : str
Path, including .csv extension, where the .csv is written.
Returns
-------
None.
"""
df = pd.DataFrame(columns=['link_id', 'usnode'])
df.to_csv(path_csv, index=False)
[docs]def coords_from_geovector(path_geovector):
"""
Retreives coordinates from a shapefile containing a LineString or Points.
Parameters
----------
path_geovector : str
Path, including .shp extension, of the file containing coordinates.
Returns
-------
coords : list of tuples
Coordinates (x, y) of the vertices in the provided geovector.
"""
xy_gdf = gpd.read_file(path_geovector)
coords = []
for i in xy_gdf.index:
coords_obj = xy_gdf['geometry'][i].centroid.xy
coords.append((coords_obj[0][0], coords_obj[1][0]))
return coords
[docs]def coords_to_geovector(coords, epsg, path_export):
"""
Exports coordinates to a Point shapefile.
Parameters
----------
coords : list-like of list-likes
List or tuple of (x, y) coordinates to export.
epsg : int
EPSG code of the coordinate reference system of the coordinates.
path_export : str
Path with .shp extension where the shapefile should be saved.
Returns
-------
None.
"""
# TODO: This should be replaced by a geodataframe creation, but no use cases
# yet...
all_coords = []
for c in coords:
pt = ogr.Geometry(type=ogr.wkbPoint)
pt.AddPoint_2D(c[1], c[0])
all_coords.append(pt)
# Write the shapefile
driver = ogr.GetDriverByName('ESRI Shapefile')
datasource = driver.CreateDataSource(path_export)
srs = osr.SpatialReference()
srs.ImportFromEPSG(epsg)
layer = datasource.CreateLayer("Coords", srs, ogr.wkbPoint)
defn = layer.GetLayerDefn()
idField = ogr.FieldDefn('id', ogr.OFTInteger)
layer.CreateField(idField)
for i, p in enumerate(all_coords):
# Create a new feature (attribute and geometry)
feat = ogr.Feature(defn)
feat.SetField('id', int(i))
# Make a geometry
geom = ogr.CreateGeometryFromWkb(p.ExportToWkb())
feat.SetGeometry(geom)
layer.CreateFeature(feat)
feat = geom = None # destroy these
# Save and close everything
datasource = layer = feat = geom = None


@()(implicit request: Request[_], flash: Flash, user: Option[CachedData], feedbackUrl: String, messages: Messages) @main_template(title = "Submit your application") {
Once you submit your application you will not be able to amend any of your details.
After your application is submitted, your timer will start and you'll have 5 days to complete your online exercises.


I've had previous experiences with wormwood before. The experiments involved using an eyedropper to drop the wormwood (in liquid extract form) into a shot of vodka. Due to wormwood's infamous bitterness, it goes without saying that this mixture tasted terrible. However, the effects of the wormwood had proven to be fairly potent, much like a giddy stoning effect that could not be attributed to alcohol alone. I wanted to continue my experiments with wormwood, but I needed a way to get around the taste.
While researching on the internet, I found out that one cheap and easy way of making absinthe is to simply mix wormwood back into a thujoned-free (which is all that is legally available in the U.S.) bottle of Pernod Absinthe. This poor-mans' absinthe is a welcome alternative to buying a $200+ bottle from Europe.
So, last Saturday night (around midnight) I mixed a 750ml bottle of Pernod Paris (not Pernod Absinthe) with a 30ml bottle of liquid wormwood extract. In order to allow the bottle room for the extract, I decided to first drink a couple ounces of the Pernod. Though the ones sold off the shelf (at least in the U.S.) don't have the thujone, it's still a yummy drink. To be honest, I find it a bit reminiscent of NyQuil, except it's more refined.
Anyway, after drinking about three or four ounces of the Pernod, I decided to add in the wormwood extract. I unceremoniously dumped the foul smelling liquid into the Pernod, which, after being stirred with a straw for about a minute, changed from its original happy translucent emerald-yellow into a forebodingly opaque poison green. Such an evil metamorphosis gave me brief pause, but, resolute to continue my experiments with *Artemisia absinthium*, I marshalled my will and sally forthed.
Pouring about two ounces of the homemade brew into a goblet, I added a couple ice cubes and watched them crack and fizz in the glass. Swishing the concoction about, I found myself uncharacteristically hesitant to follow through with the experiment. From previous encounters, I knew well the sheer *nastiness* of the taste of wormwood, the unholy smell of ultimate bitterness. However, I did my duty and slowly poured the potion down my gullet.
It was bitter; I grant that. In the grand scheme of all things bitter, what I drunk last night was *bitter*. Bitter indeed. *But* it was not *that* bitter, not nearly as terrible as the evil poison of my previous experiments. For whatever reason, the Nyquil-esque Pernod helped alleviate the more wicked characteristics of the drink. Next time I might drop a sugar cube in to make it more palatable, but what I drunk was bearable, if not exactly pleasant.
As for the effects, they were rapid and pronounced. Only a couple minutes after my ingestion did I feel the familiar wooziness that I find characteristic of a wormwood trip. I suppose at least some of the effects can be attributed to the alcohol, but my tolerance for spirits is such that I find it highly unlikely that a mere few ounces of liquor could properly account for the sheer inebriation that I felt. A sense of giddiness swept over me, and I stumbled to my room to lie down. I felt the desire to listen to music, but found myself too intoxicated to remove myself from my bed. Through my body, I felt a vague sense of being poisoned - but not enough to cause discomfort.
I lay there, thinking great thoughts concerning the mind-body problem and had vivid flights of fantasy regarding myself as a Medieval count fighting Muslims (I spent much of the day playing the computer game 'Crusader Kings'). After a couple hours of lying in a stupor, I grew annoyed at the brightness of the lights and managed to stagger to the switch to turn them off. I must have went back to bed and fallen asleep, because I woke up ten hours later (around noon). I had no noticable hangover.
Just from the alcohol, I should have felt no more than a slight drunkenness, and many of the effects I experienced, such as the lightheadedness, are atypical to my experiences with alcohol. On the other hand, I had not drunk for a couple weeks, and it is possible, though unlikely, that I lost my tolerance to such an extent that the equivalent of about three shots of an 80 proof liquor could put me in such a state of inebriation. Further experimentation is needed to isolate the effects of wormwood.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


Deductive Logic
by George William Joseph Stock, M.A.
Part 3: Chapter 14
Additional Information
- Year Published: 1888
- Language: English
- Country of Origin: England
- Source: Stock, G. W. J. (1888). Deductive Logic. Oxford, England; Pembroke College.
-
Readability:
- Flesch–Kincaid Level: 11.0
- Word Count: 830
- Genre: Informational
- Keywords: math, math history
- ✎ Cite This
Downloads
PART III.—OF INFERENCES
CHAPTER XIV
Of the Determination of the Moods that are valid in the Four Figures.
621. By applying the special rules just given we shall be able to determine how many of the eleven legitimate moods are valid in the four figures.
622. These eleven legitimate moods were found to be
AAA. AAI. AEE. AEO. AII. AOO. EAE.
EAO. EIO. IAI. OAO.
FIGURE 1.
623. The rule that the major premiss must be universal excludes the last two moods, IAI, OAO. The rule that the minor premiss must be affirmative excludes three more, namely, AEE, AEO, AOO.
Thus we are left with six moods which are valid in the first figure, namely,
AAA. EAE. AII. EIO. AAI. EAO.
FIGURE II.
624. The rule that one premiss must be negative excludes four moods, namely, AAA, AAI, AII, IAI. The rule that the major must be universal excludes OAO. Thus we are left with six moods which are valid in the second figure, namely,
EAE. AEE. EIO. AOO. EAO. AEO.
FIGURE III.
625. The rule that the conclusion must be particular confines us to eight moods, two of which, namely AEE and AOO, are excluded by the rule that the minor premiss must be affirmative.
Thus we are left with six moods which are valid in the third figure, namely,
AAI. IAI. AII. EAO. OAO. EIO.
FIGURE IV.
626. The first of the eleven moods, AAA, is excluded by the rule that the conclusion cannot be a universal affirmative.
Two more moods, namely AOO and OAO, are excluded by the rule that neither of the premisses can be a particular negative.
AII violates the rule that when the major premiss is affirmative, the minor must be universal.
EAE violates the rule that, when the minor premiss is affirmative, the conclusion must be particular. Thus we are left with six moods which are valid in the fourth figure, namely,
AAI. AEE. IAI. EAO. EIO. AEO.
627. Thus the 256 possible forms of syllogism have been reduced to two dozen legitimate combinations of mood and figure, six moods being valid in each of the four figures.
FIGURE I. AAA. EAE. AII. EIO. (AAI. EAO.)
FIGURE II. EAE. AEE. EIO. AGO. (EAO. AEO.)
FIGURE III. AAI. IAI. AII. EAO. OAO. EIO.
FIGURE IV. AAI. AEE. IAI. EAO. EIO. (AEO.)
628. The five moods enclosed in brackets, though valid, are useless. For the conclusion drawn is less than is warranted by the premisses. These are called Subaltern Moods, because their conclusions might be inferred by subalternation from the universal conclusions which can justly be drawn from the same premisses. Thus AAI is subaltern to AAA, EAO to EAE, and so on with the rest.
629. The remaining 19 combinations of mood and figure, which are loosely called ‘moods,’ though in strictness they should be called ‘figured moods,’ are generally spoken of under the names supplied by the following mnemonics—
Barbara, Celarent, Darii, Ferioque prioris; Cesare, Camestres, Festino, Baroko secundae; Tertia Darapti, Disamis, Datisi, Felapton, Bokardo, Ferison habet; Quarta insuper addit Bramantip, Camenes, Dimaris, Fesapo, Fresison: Quinque Subalterni, totidem Generalibus orti, Nomen habent nullum, nee, si bene colligis, usum.
630. The vowels in these lines indicate the letters of the mood. All the special rules of the four figures can be gathered from an inspection of them. The following points should be specially noted.
The first figure proves any kind of conclusion, and is the only one which can prove A.
The second figure proves only negatives.
The third figure proves only particulars.
The fourth figure proves any conclusion except A.
631. The first figure is called the Perfect, and the rest the Imperfect figures. The claim of the first to be regarded as the perfect figure may be rested on these grounds—
1. It alone conforms directly to the Dictum de Omni et Nullo.
2. It suffices to prove every kind of conclusion, and is the only figure in which a universal affirmative proposition can be established.
3. It is only in a mood of this figure that the major, middle and minor terms are to be found standing in their relative order of extension.
632. The reason why a universal affirmative, which is of course infinitely the most important form of proposition, can only be proved in the first figure may be seen as follows.
Proof that A can only be established in figure I.
An A conclusion necessitates both premisses being A propositions (by Rule 7). But the minor term is distributed in the conclusion, as being the subject of an A proposition, and must therefore be distributed in the minor premiss, in order to which it must be the subject. Therefore the middle term must be the predicate and is consequently undistributed. In order therefore that the middle term may be distributed, it must be subject in the major premiss, since that also is an A proposition. But when the middle term is subject in the major and predicate in the minor premiss, we have what is called the first figure.


return
statements in case when they return an instance of an anonymous, local or inner class.
Such instances keep an implicit reference to the outer instance which can prevent the outer instance from being garbage collected.
Any caller of a method which returns such an instance might cause a memory leak by holding on to the instance returned.
Use the checkbox below to ignore returns from protected
or package-private methods.
Returns from private
methods are always ignored.


--- layout: home title: Home permalink: / ---
I'm Alex Dao. I design software, tinker with hardware, play basketball, and listen to hip hop.
Check out some of my personal projects and follow me on Github.


Called when popup is opened or transitions to the new content.
onOpen = function(event)
This event is triggered when popup is first opened and any time .open or
.load methods are called. There can be only one popup window on the screen at
any given time. If you call .open method again, the popup will transition into
new content.
You can add event listener during the object creation:
or after popup is opened:
The event handler is called before the default action of the event is triggered. You can cancel the default action by calling
event.preventDefault(). To perform an action
after the event is fully processed, define event.onComplete function.
See events page in utilities for more details.


{{define "address"}}
When you submit an address, the stake pool binds that address from your wallet together with an address from the stake pool's voting wallet. This is done by creating a 1-of-2 multisignature script which lets you, the pool, or both parties vote. This "binding" of the wallets means that if you ever delete your current wallet and create a new wallet with a different seed, importing your multisignature script will not work because it contains an address that is not present in your new wallet. Please contact your stake pool administrator or support staff if you need to re-register with a new address from a new wallet.
{{if .User.MultiSigAddress}}Your public key address has been accepted and registration is complete. Please contact your stake pool administrator or support staff if you need to re-register with a new address from a new wallet.
Public Key Address: {{ .User.UserPubKeyAddr }}
If you wish to verify that this address belongs to your wallet, you may run the following command:
$ exccctl {{ if eq .Network "testnet"}}--testnet{{end}} --wallet validateaddress {{ .User.UserPubKeyAddr }}
In the result, you will see fields such as "ismine" and "account" if the address is present.
{{ else }}The official EXCCoin GUI wallet Exilibrium is the recommended way to use stake pools. All you need to get started is to copy and paste the API Key from the Settings Page. A more comprehensive guide is available for Exilibrium. There is also a more general overview of the staking process available here.
It is recommended to use the latest versions of the EXCCoin software before starting. ⇣ EXCCoin Downloads Page
The directions below require that you have setup the EXCCoin software and have obtained EXCCoin that you can purchase tickets with. The Getting Started section of the EXCCoin Docs website has operating system specific directions that covers all of the necessary steps. The exccwallet instructions are the most helpful if you wish to continue on the command-line path.
To join the pool, provide a public key address which will be used to generate a 1-of-2 multisignature script. The multisignature script will be generated by the pool and returned to you along with a P2SH address to give voting rights to. The P2SH address has the prefix {{ if eq .Network "mainnet"}}D{{end}}{{ if eq .Network "testnet"}}T{{end}}c.
To generate a public key address, create a new wallet address with getnewaddress. Then, call validateaddress <yourAddress> and retrieve the address listed in the pubkeyaddr field of the response. The pubkeyaddr starts with {{ if eq .Network "mainnet"}}2{{end}}{{ if eq .Network "testnet"}}T{{end}}k.
The following is an example:
$ exccctl {{ if eq .Network "testnet"}}--testnet{{end}} --wallet getnewaddress {{ if eq .Network "mainnet"}}2{{end}}{{ if eq .Network "testnet"}}T{{end}}sExampleAddr1For2Demo3PurposesOnly $ exccctl {{ if eq .Network "testnet"}}--testnet{{end}} --wallet validateaddress {{ if eq .Network "mainnet"}}2{{end}}{{ if eq .Network "testnet"}}T{{end}}sExampleAddr1For2Demo3PurposesOnly { "isvalid": true, "address": "{{ if eq .Network "mainnet"}}2{{end}}{{ if eq .Network "testnet"}}T{{end}}sExampleAddr1For2Demo3PurposesOnly", "ismine": true, "pubkeyaddr": "{{ if eq .Network "mainnet"}}2{{end}}{{ if eq .Network "testnet"}}T{{end}}kExample0Addr1For2Demo4Purposes5Only6Do7Not8Use9Pls0", "pubkey": "022801337beefc0ffee1dab8d4ffa898a782466c9a1fc00ca8863de5438dc07dcc", "iscompressed": true, "account": "default" }
Copy and paste the pubkeyaddr that starts with {{ if eq .Network "mainnet"}}2{{end}}{{ if eq .Network "testnet"}}T{{end}}k into the form below. If the registration process is successful, then instructions will be given on how to purchase tickets that the pool and yourself can vote with when called upon to do so by the network.
{{ end }}


Flash and JavaScript are required for this feature.
Download the video from iTunes U or the Internet Archive.
Description: This lecture covers a symbolic integration program from the early days of AI. We use safe and heuristic transformations to simplify the problem, and then consider broader questions of how much knowledge is involved, and how the knowledge is represented.
Instructor: Patrick H. Winston
Lecture 2: Reasoning: Goal ...
Related Resources
Slagle, James. "A Heuristic Program that Solves Symbolic Integration Problems in Freshman Calculus." Journal of the ACM 10 (1963): 507-520.
What we're going to talk about today, is goals.
So just by way of a little warm up exercise, I'd like you to look at that integration problem over there. The one that's disappeared.
So the question is, can you do it in your head? Probably not. The question is, if a program can do that, is a program, in any sense of the word, intelligent? That's a background task I'd like you to work on as I talk today.
So today we're going to be modeling a little bit of human problem solving, the kind that is required when you do symbolic integration. Now, you all learned how to do that. You may not be able to do that particular problem anymore, but you all learned how to integrate in high school 1801, or something like that. The question is, how did you do it, and is the problem solving technique that we are trying to model by building a program that does symbolic integration, is that a common kind of description of what people do when they solve problems.
So the answer to the question is, yes. The kind of problem solving you'll see today is like generating tests, which you saw last time. It's a very common kind of problem solving that we all engage in, that we all engage in without thinking about it, and without having a name for it.
But once we get a name for it, we'll get power over it. And then we'll be able to deploy it, and it will become a skill. We'll not just witness it, we'll not just understand it, we'll use it instinctively, as a skill.
 I don't know, look it up in a table? You'll never find it in a table because of that minus sign and that 5. So you're going to have to do something better than that.
So what you're going to do, is what you always do when you see a problem like that. You try to apply a transform, and make it into a different problem that's easier to solve. And eventually, what you hope is that you'll simplify it sufficiently, that the pieces that you've simplified to will be found in some small table of integrals. So how long is this table? It's not the case that we're going to look at a table with 388 elements, because this is not a big table of integrals. This is what a freshman might have in a freshman's head, after taking a course in integral calculus.
One of the interesting questions is, how many elements have to be in that table to get an A in the course? We're interested in how much knowledge is involved, that's one of the elements of catechism that I've listed over there, that will be part of the gold star ideas suite of the day.
So we'd like to take that problem, and find a way to make it into another problem that's more likely, or closer to being found in the table. So what we're going to do is very simple, graphically. We're going to take the problem we're given, and convert it into another problem that's simpler. And we're going to give that process and name, and we're going to call it problem reduction.
And so, in the world of integral calculus, there are all sorts of simple methods, simple transformations, we can try that will take a hard problem and make it into an easier problem. And some of these transformations are extremely simple and always safe. Some of them are just, well let's try it and see what happens. But some of them are safe, and I'd like to make a short list of safe transformations right now.
Now I'm going to be going into some detail. And that detail will be grungy. And the question is, why do I do it? And it's educational philosophy, is why I do it. So here's the educational philosophy. At one level, you want to have a skill. But if you're going to have a skill, you have to understand it. So if you're going to have a skill you have to understand it one level down. If you're going to understand it, you have to have witnessed it on a level lower than that.
So I'm not just going to talk about the idea of problem reduction, because if I were just going to do that, then we could all go home now. So I'm going to show you a particular example of it, so you understand it better, and I'm going to show you the detail at an even lower level than that. So you will witness the stuff that makes it possible, to understand the stuff that makes it possible, to build a skill. So that's why I'm going through the grungy detail.
So I don't know, let's see. Maybe we can get some hints from that example, but I wonder if somebody could volunteer a simple transformation that always is a good thing to do. Yes, Sebastian.
AUDIENCE: Take the constants out.
SPEAKER 1: Take the constants out. So we'll make that number two. And we'll say that the integral c f of x dx is equal to c times the integral f of x dx. Other suggestions? Yes.
AUDIENCE: Trig substitution.
SPEAKER 1: Trig substitution. Now this is-- no, that's for day two. We don't do trig substitution here under stuff that's safe, always works, never any doubt, there are simpler things.
These are the safe transformations. What you're giving me is a heuristic transformation. Often is helpful, doesn't necessarily always work. We're going to divide our transformations into those two categories. So I need another safe one.
AUDIENCE: [INAUDIBLE] SPEAKER 1: The architects are sitting over there. Divided not only by nationality, but by course. What?
AUDIENCE: The sum of integrals is the integral of the sum.
SPEAKER 1: The sum of integrals is the integral of the sum. Now what's missing? What's number one? You're probably thinking it's already there, because you've given me the transformation that involves a constant. And you can think of minus 1 as a constant.
But whether you use a separate transformation or not, of course depends on how you represent the knowledge. And all of this knowledge, all of this whole thing, was written in an early form of Lisp. As a consequence, the way in which minus was represented is different from the way minus 1 is represented. So we need one more transformation. Or rather, Jim Slagle needed one more transformation, when he wrote his famous transformation program.
And that was that if you have the integral of minus f of x, that's equal to, minus the integral of f of x.
So that almost completes our safe transformation set. There's one more that I'm going to supply you, because I don't think you'd guess it. Why should you? It's number four. There are more than this, this is a sample. And these are the ones we're going to need in order to solve that problem, by way of illustration.
So the fourth one is that, if you have the integral of p of x, over q of x, then you divide. If you can reach way back into high school and figure out how to divide polynomials.
But if the degree of the numerator is greater than the degree of the denominator, then it's a knee-jerk always win, you must do it, divide it out.
So this, then, forms the core of an integration program, that will integrate almost nothing.
But actually, almost nothing is integrable anyway, so it's a good head start. So let's see how we would put this into some kind of procedure. Some kind of framework for deploying the knowledge that we're beginning to develop.
What we're going to do is, apply all safe transforms. That's our first step. Then we're going to look in the table, and then we're going to do a test to see if we're done. And if we are, we report success. But, we're not likely to get done with just that stuff.
But you know what, there was one transformation up here, which breaks my little diagram. Which one is it? It's the third one, right? Because this picture does not reflect what happens when you apply number three. Because it breaks the problem up, not into just one problem, but into a whole bunch. So we have to extend our graphical device for talking about this by a little bit, and show what is called an "and node".
So we've got a program core, we've got a table of integrals, we've got a few transformations, we've got an architecture, a way of putting that stuff together. And now we can try it out on our sample problem. So let's have a go at that.
Let's see, this one immediately transforms into 5x to the fourth over 1 minus x squared to the 5/2 dx. And that in turn, immediately transforms into the integral of x to the fourth over 1 minus x squared to the 5/2, dx.
This program, by the way, is a dawn-age program. This was written by a nearly blind, and subsequently completely blind, graduate student by the name of James Slagle in 1960, a long time ago. The reason I gave it to you today is because, that by describing it, I am giving you a one-lecture course in artificial intelligence. He anticipated so much of the subsequent 20 years, that talking about his program, which is possible in one day, is a miniature introduction to the whole field.
So Slagle, as he was doing this on an antique computer, almost no memory, almost no speed, only slightly faster than mice running around on a treadmill. He was able to write a program that did extremely well when benchmarked against freshmen. And the way you benchmark against freshman, of course, is you give it an examination, drawn from the previous MIT finals for four or five years, the hardest problems. And this was the hardest problem that it solved.
So at this point, with what we've got so far, we would be stuck. We have no transformation that can take us further, so we need something else. And what we need by way of something else, is some transformations that we will describe as-- perhaps we'll call them, heuristic transformations. A funny word, meaning a method that often works isn't guaranteed to work.
It's not an algorithm in the usual sense that we talk about algorithms. But rather, it's an attempt.
So these things I'm going to talk about now, are sometimes useful, not always useful. Sometimes take you into a blind alley, don' always work. But you can't get an A in calculus without knowing some of them. So you said, some kind of trig substitution. So here is some kind of trig substitution. We'll call this heuristic transformation A.
You have a function sine x, cosine x, tangent of x, cotangent of x, secant of x, and cosecant of x. And we all know from high school trigonometry, that we can rewrite that as a function of sine x, and cosine x. Or we can rewrite that as a function of tangent of x, and cosecant of x. Or we can rewrite that as function of cotangent of x, and the secant of x. So that's a transmission from trigonometric form, into another trigonometric form. It's not always a good idea, sometimes it helps.
Well that's just part one of our suite of heuristic transformations. Stop. There are others that we need to have in our repertoire, in order to solve the problem. One of them is a family of transformations, which I'll show you only one. It goes like this, if you have the integral of a function, of the tangent of x, then you can rewrite that as the integral of a function of y over 1 plus y squared dy. So that's a transformation from a trigonometric form into a polynomial form. So it gets rid of all that trigonometric garbage we don't want to deal with. And there's a whole family of things like that, just as there's a family of transformations like so, but this is enough to give you flavor.
Now there's a C that we need as well. And that's going to be your proper knee-jerk reaction when you see something of the form 1 minus x squared. What do you do when you see that?
AUDIENCE: [INAUDIBLE] What's that Rhana?
Rhana: 1 + 6 * 1 - 6 Well wait a second. We could do that. But there's another thing we can do.
Christian, have you got something you can suggest? Where's our Hungarian? Our Turk, our young Turk. Yeah, what do you think?
AUDIENCE: I actually don't remember. I mean, I think it might have been 10.
SPEAKER 1: Well, let's see. Cosine squared plus sine squared equals 1. So, what's that suggest to you? So it suggests that we make a transformation that involves x equals sine y. So [? Silla ?] doesn't actually have to remember that anymore because going forward, she will never have to integrate anything personally in her life, she can just simulate the program.
So these go from polynomial form, back into trigonometric form. So you have three of these heuristic transformations. We've got four safe transformations. Let's see if we can make any progress on our integration problem.
OK so keeping track of what we've been using, this is safe transformation number one, this is safe transformation number two. What do we do next? We decided there were no more safe transformations that apply. But now we can look at our heuristic transformations and behold, we see what?
AUDIENCE: C SPEAKER 1: What?
AUDIENCE: Applying transformation C.
SPEAKER 1: Transformation C suggests that we do x equals the sine y.
And now we get the integral of sine to the fourth y over cosine to the fourth y dy, right. All good, I see some confused, worried, concerned looks. Maybe I've made a mistake, perhaps I should use notes. Well no, wait a minute.
For those of you who have a concerned look, remember that if x equals a sine y, then dx is equal to cosine y dy. That's why it's cosine to the fourth not cosine to the fifth, as you were perhaps thinking it might be.
So now we've made some progress. We look at this, we say, are there any safe transformations that apply? And the answer is, no. Now we look for a heuristic transformation that might apply, and I say, what do you see? Which one? What's that?
AUDIENCE: [INAUDIBLE].
SPEAKER 1: She said something unintelligible, but what she probably said is, that this looks like a pattern that might match with the heuristic transformation A, right? Because we have a function in which the variable is buried, universally in sines, or cosines, or tangents, or cotangents, or secants, or cosecants. And we know we can rewrite that in one of three ways. It's already written as a function of sine and cosine. But we can also rewrite that in terms of tangent and cosecant. Or cotangent and secant.
So when we do that, we can go this way, and we can get the integral of 1 over the cotangent of x dx. That's g3 up there. Or we can do it down this path, and get the integral of tangent of x dx. And of course, those are both to the fourth.
But know what, I've broken my little graphical diagram again. Where did it go, it's disappeared.
There it is. How have I broken it? Because with transformation A, I've introduced a possibility that a particular problem can be transformed into more than one kind of problem, any of which will be the solution to my problem.
So far I've got an and node, but now I've got to introduce an or node. Because now we have an example of something that can be solved one of two different ways, and we don't care which one it is. Now you'll notice that there's already some confusion here, because how can you tell the difference between an and node and an or node. So the universal convention is, you draw an arc over the and nodes. And that makes it look like an A, so it's easy to remember. So those are and nodes.
And now, we have the method of problem reduction, and this is sometimes called a problem reduction tree. Sometimes it's called an and/or tree, and sometimes it's called a goal tree, because this tree of problems is a tree that shows how our goals are related to one another.
So these are items for your vocabulary that are all synonymous. Problem reduction tree, and/or tree, goal tree, all the same thing. Now you have a name for it, you've got some power over it. So when we get a situation like this, unlike the previous situation, which we suggested might come up in transformation A. Let's see, we've got one, two, C, and this one is A, it's an or node. Which one of these problems do we work on?
Well Slegle, who considered himself to be modeling a freshman, modeling the intelligence of a freshman, modeling something that, after all, you have to be pretty smart to do, right.
Most people don't know how to do integration. Everybody at MIT knows how to do integration.
You would think that somebody, therefore, that knows how to do integration is pretty smart. What would a smart person do, when faced with this choice?
Well, a smart person would say, which of these two problems is easier? So how do you think you might determine which of two, or many algebraic expressions is the easiest to integrate?
What's your name?
AUDIENCE: Andrew Carrol.
SPEAKER 1: Andrew, what do you think?
AUDIENCE: Based on whichever one feels more familiar.
SPEAKER 1: Feels.
AUDIENCE: Yes.
SPEAKER 1: Feels.
AUDIENCE: You asked, how would I decide.
SPEAKER 1: Yeah, how would you decide? How would you feel it?
AUDIENCE: I would feel that the tangent is more familiar.
SPEAKER 1: Which one?
AUDIENCE: I feel that the tangent [INAUDIBLE].
SPEAKER 1: Yeah, but I wonder how we could make it a little bit more precise, this idea of simplicity. The young Turk has a suggestion. What?
AUDIENCE: I had a suggestion until you said this idea of simplicity. So then I realized that what I was about to suggest wasn't going to clarify simplicity, but I was going to say, whichever one we've had more encounters with, or more experience with.
SPEAKER 1: Yeah, if there was something here with a hyperbolic tangent, you might say, well, stay away from that. [? Yinid ?]?
AUDIENCE: To which one of those the easier transformation is applied on the next step.
SPEAKER 1: Like, somebody do a little look ahead, and see which kind of thing would be next to you? I don't know, maybe. Oh, we've got lots of people, all at the same time.
I don't know all your names yet. Shoot. Erica, I know you.
AUDIENCE: What's look it up in the table and see [INAUDIBLE].
SPEAKER 1: Oh, you could look it up in the table and see if something is in it, you could do that. But this is tangent to the fourth, so that's not in the table. Ariel?
AUDIENCE: I choose the one without the reciprocal.
SPEAKER 1: Why?
AUDIENCE: It is because when people see one it's like, oh man, it jut not going to work.
SPEAKER 1: Yeah, we're on the right track. Claire?
AUDIENCE: On an extremely simple level, I choose whichever one has the least symbols in it.
SPEAKER 1: The fewest symbols in it. Now we're really getting somewhere, because you can measure that, right, there's a little program Why Brett, there you are.
AUDIENCE: I would say, every [INAUDIBLE] expression can be written as, having a number of functions, we could say all these functions, multiplied together, divided, and you can just choose with the least amount of [? iterations ?].
SPEAKER 1: Well I heard it, perhaps others didn't but what Brett said, is he suggested that we should measure depth of functional composition. So the number of symbols may not matter, because if you have x plus x plus x plus x, out to a hundred, that would not be hard to integrate. But if you've got something that is really deeply nested under a lot of functional compositions, that could be a problem. And that's in fact, what Slegle decided to use, after trying several alternatives.
So if we measure the depth of the functional composition, this is the winner, and we put the other one on the shelf, at least for the moment. And now we have tangent to the fourth x dx. Do I need the safe transformation supply? No. Which of the-- you know something has to apply, otherwise it wouldn't be up here as an example. So what of the heuristic transformation supply? Elliott.
AUDIENCE: [INAUDIBLE] SPEAKER 1: Yeah, B bravo. Military background or something like that. Maybe he flies airplanes. OK so B says, it is in fact a function of the tangent. And when we do that, we've got to make a substitution, that y is equal to the tangent. So that means that this becomes the integral of y to the fourth over 1 plus y squared. And that's by transformation B, and the transformation is y equals tangent of x. The tangent-- I guess I've lost track of the fact that I've already transformed a y, but relabeling doesn't matter.
All right so that's progress, maybe. But don't see this in any of the heuristic transformations, what do I do now? I didn't have to look in the heuristic transformations, because one of the safe transformations applies. Because this thing is a rational function and the degree of the numerator is greater that the degree of the denominator, so I have to divide.
And when I divide, and that by the way is number four, I get what? Is anybody good high school algebra that can help me out with that?
 Now what?
Now we're really getting close to getting through this, because that is a sum. And by virtue of the fact that it's a sum, that divides into three pieces, and the top piece is the integral of y squared, the middle piece is the integral of minus 1, and the bottom piece is the integral of 1 over 1 plus y squared dy in all cases.
Gosh, if I look this up, I've found it. That's up there, that's letter B. So I'm done with that. This one I can transform again, by virtue of 1, and now I get the integral dy. That's in there, that's B as well. As this one, I don't know. But I'd better keep track of what I'm doing here. This is in the and node, so I've got to do all of those. I can't give up on that last thing. And that and transformation is transformation number 3. So this is in the table, this is in the table, we still have this to do, but that's C, heuristic transformation C. We have 1, plus y squared, then with the transformation C, with y-- this is y squared-- y equals tangent of z And then we get to the integral of dz and that's in the table and, we're done.
So now we've solved the problem. It's the hardest problem that appeared in that half decade on MIT 18 01 finals. This is exactly the problem that was given, except that it started here. I put the other two pieces on just to illustrate a couple of the transformations.
But that's a problem that it solved.
And now that we've seen an example, we can finish up what we talked about a little bit ago, having to do with the architecture of this thing. So far, all we've done is talk about the safe transformations, but now we know that if we're not done, we need to find a problem to work on using that depth of functional composition business. And then after that we apply heuristic transformation.
And the way Slagle designed his program is, he found just one problem to work on, did one transformation, then went back around the loop.  So I'll given you an accurate portrayal of what this program did, except for one thing. Which I would like, now, to go back and patch up. And that thing is over here. What to do with something like this. Well we got to that in a board that's disappeared, but when we tried to deal with this, we had to find a heuristic transformation.
And when we decided to work on this, it must have been the case that this was the simplest problem at a leaf node that has not yet been solved.
So what's the functional composition depth of this? It's 3. Back over here, we have something that has a depth of functional composition of 2. So when the program actually ran on this particular problem, it stopped a few inches short of the finish line, And went back and screwed around with that other problem for a little bit, before it gave up and came back here.
So it's always looking across the whole tree, the leaves of the tree. Whenever it has to find a place to work on with the heuristic transformation, it happened to look at all the leaves of the tree that had not yet been dealt with, tried to find the easiest one, and that could involve a lot of backing up and starting over on a branch of the tree that it had previously ignored. A small detail, not a particularly important one.
Now where are we. We've got that guy there. We've got our complete architecture. We've got our solved problem. And now we can start reflecting on what we've done. We can say, for example, how good an integration program is this? And the answer is, it was pretty good. This machine that Slagle was using was a machine that was over in building 26. And we were so proud of it, that it was behind glass, and you could go there and watch the tape spin, it was really a delight. 32k of memory, that's 32k of memory. It's amazing that he was able to do anything with a machine of that size.
Let's see, let's get us a clean one. Can't do board geometry and talk at the same time. We can now ask some questions about how well the program performed. It was given 56 of the hardest problems, and it got 54 right. What happened when it didn't get the other two? Well, you might be right if you said, oh it probably ran out of memory, since it had 32k. But in fact, it just was lacking 2 transformations that were needed, in order to solve the whole entire set of final quiz problems. So when a program fails, that's often the most interesting question you can ask. This is an exception. This failed for uninteresting reasons on 2 of the 56 problems that it was given to.
And now the next question you can say is, what is the depth of the tree in the maximal case? And the answer is, it's that case we just worked out. And since I've once again lost the whole tree, I'll tell you that it's depth was 7 when you take off that minus 5.
So in the worst case, this thing had to get down seven levels.
That's the worst case, a more interesting question is what was the average depth? And that was approximately 3. And now we're beginning to say something, not only about Slagle's model of how a freshman works, but we're beginning to say something about the nature of the domain.
In the domain of calculus problems, integrals expressions that are given to freshman, in that domain, the average depth of problem reduction needed to solve the problem was 3. So that's not very complicated. If it were 10, you would say, wow, how can anybody ever do those problems? If it were 5, you'd say, well only people destined to be math professors are going to get anything right. If it's 3, us ordinary mortals can do a pretty good job.
Another question of even greater interest is, how many branches were unused? Here's a branch that turned out to be unused, it didn't pursue that. And so you might say, well maybe there are a lot of unused branches. Maybe you have to be pretty smart about your method for determining what problem to work on, because otherwise you'll go down a lot of rat holes.
And guess what, here's another statement about the domain. In the domain of problems that freshmen could work on a final, the number of unused branches is about 1. So that means this tree keeps itself together, and doesn't run down to a very large, bushy, useless tree.
So this means that the depth of functional composition, which Brett suggested as a technique for recognizing the right problem work on, was a choice that didn't actually matter.
Because the tree doesn't grow deep, it doesn't go broad. It doesn't matter what you use to decide what to work on, because in the worst case, you'll just generate a couple of extra, useless nodes. But they very quickly run to find a dead end, so you don't have to do anything more with them.
So now the next thing we need to do is back even further away from this program, and ask ourselves some questions about the nature of what we've been doing. And that brings me to the things I've got on that upper right-hand board. One of those things as a catechism having to do with knowledge.
And what we've done informally as we went through this program was, we've asked questions such as, what kind of knowledge is involved in doing this? Well knowledge about transformation.
Knowledge about how goal trees work and when we're done with a problem. Knowledge about what things don't need to be transformed, because you can look them up in a table. That's the kind of knowledge that is involved in doing 18 01. And if you do 18 0 circuit theory, 6 0 circuit theory or 6 0 Maxwell's equations, this is the same thing.
You have to ask questions of this sort, about the nature of the knowledge involved, and question number one is always, what kind of knowledge is involved? Is it Kirchhoff's laws, Maxwell's equations, what is it?
The next question is, how is the knowledge represented? And our answers here are, well all this stuff, ultimately was represented in list best expressions. Some of the knowledge was recorded in a table [? of best ?] expressions to show what transformations there are. There was a similar table of integrals. Knowledge about goal trees was embedded in the procedure, so it was procedurally represented. And so for each of the categories of knowledge, there's a way it gets represented. How is it used? Straightforward, transformations are used to make the problem simpler. The table is used to trim off and to serve as the bottom of the tree. Those are the ways in which the knowledge is used.
And then there's the question of course of, how much knowledge is required. Something that's useful to know if it's late at night, you have 2 finals the next day, and you're not sure which course you should study. So how much knowledge might you suppose was actually in this program? I've shown you a glimpse of the kind of knowledge that's involved in the program. I've answered a little bit of question 5, what exactly. But how much knowledge was involved. You might be surprised by the answer.
First of all, the table of integrals. I've listed only 3 things there. There are lots of other things you can think of, like integral of e to the x is e to the x. But in the end, what Slagle found is, a table only 26 elements was enough to solve all of these problems.
How about the transformations here, the safe ones, about 12. How about the heuristic ones, about 12. So just a few bits and pieces of knowledge, here and there, are sufficient to do everything you need to do, in order to do the integration problems on a calculus final. That was a surprise.
Another surprise of a similar kind, also about knowledge, is that the relationship between the method to be used, and the characteristics of the problem, was almost a diagonal table.
 That was an observation made by Joel Moses, who became subsequently our provost here at MIT for a while. And he wrote a program that could solve anything. It would beat the most dedicated mathematicians at integration.
And its descendents are in MATLAB today.
But this is how it all works. And now you can write one of these things yourself. Partly because you now have this catechism. This is the kind of stuff you should ask any time you're dealing with a new domain. It will make you smarter. And this is of course, meta knowledge, this is knowledge about knowledge. So this tired aphorism isn't quite what we are going to complete ourselves with. We're going to say that knowledge about knowledge is where the real power is.
Now there's one final thing that this program does for us. It tells us something about our appreciation of what it means to be intelligent. You know that in the beginning of this hour, I asked you to think about whether a program that could do symbolic integration would be, in any way, or should be considered to any degree, intelligent. And I'm imagining that even in these days of MATLAB, and whatnot, many of you said well, yes, I learned how to do that at MIT, or late in high school, so it must be smart.
But now that we've completed this discussion, I also expect that your feeling of intelligence in this program is somewhat diminished. Because what happens is that, when we understand how something works, it's intelligence seems to vanish. You've seen this in your friends, right? They solve some problem, they seem super smart. Then they tell you how they did it, and they don't seem so smart anymore.
So let's conclude our discussion today was a little story. A long time ago I was talking with a student who said, computers cannot be intelligent. And I said, OK, maybe you're right, but let me show you this program. So I showed him the integration program, working on problems like this. And after I showed him a couple of those examples, he says, well, all right, I guess maybe they can be intelligent. I'm learning how to do that, and it's not always easy. Then I made a fatal mistake. I said let me show you how it works, and we spent an hour going through it like this. And at the end of that time, he turned to me and said, I take it back, it's not intelligent after all. It does integration the same way I do.


Projects
Product landing page
A landing fanpage for vespa motorcycles One of the FCC web design projects
Shoji Meguro tribute
A tribute fanpage for the amazing game composer: Shoji Meguro. First FCC project
Technical documentation
A fake technical documentation page (jenrykbot don't actually exist)
Survey page
A minimalist survey page made as an FCC project. Pretty simple responsive page
Portfolio page
You're already here !


My Account
Keluar
Nanda Mochammad
Mentor/Admin
Menu
Dashboard
Class Management
Add Class
Class List
QnA
QnA List
Report
Forum
New Post
Topic
Post List
Users Management
Students
Mentor
Payment
Payment
Withdrawal
Check Balance Info
Home Setting
Daily Content
CS Channel
Marketing Banner
App Setting
Reference ID
App Version
TnC & Privacy Policy
Harsh Words
Report
Blank Layouts
Keterangan fungsi dari halaman.
Tab 1
Tab 2


marco
polo
Pool
menu
Home
Login
Create Account
Home
Login
Create Account
Contact Us
Create your Account
Name
Choose your City
Austin
Dallas
Houston
Email
Password
pool
Create Account
Have an account?
  Sign into Pool here


Easy to Install
StepUP is a platform based community tool. Different organizations, such as school PTAs, church groups, and even school clubs, can setup their own community where they can add sub-organizations and volunteering opportunities. The organization then has its own dedicated user base of community members who can be matched to events.


Hi,
I am Jingshu Zhao
A designer passionate about solving complex problems
with the mindset of a journalist
Enter password to visit my portfolio
Wrong password. Please try again.


Unable to attend Katy Perry’s concert? Here are the singer’s tracks you can stream right now
Katy Perry performs in Mumbai at the OnePlus Music Festival on November 16. Before you head to the pop star's concert, here are 15 of her most popular tracks.
by Entertainment DeskKaty Perry is all set to perform in Mumbai on November 16 at the OnePlus Music Festival. The global music star arrived in Mumbai a few days ago and greeted the media upon her arrival. This isn’t Katy’s first trip to India, in fact, she has spent quite some time here. The pop star last performed in India in 2012 at IPL’s opening ceremony. Her wedding with Russell Brand was held in Rajasthan in 2010.
As you get ready to attend Katy Perry’s concert at D.Y. Patil Stadium today, here’s a playlist of Katy Perry’s most popular songs.
1. Roar
“Roar” is probably one of Katy Perry’s most popular songs. Released in 2013, the track is a part of her fourth studio album Prism. The song became a chartbuster soon after its release. It was the most viewed song on YouTube in 2013.
2. Dark Horse
“Dark Horse” has one of the most fascinating music videos with Katy Perry in ancient Egyptian attire. At the time, the video caused some controversy but the controversial journey of the track lasted for many years, and not because of the video. She was accused of plagiarism by Marcus Gray. The accusation read that “Dark Horse” sounded a lot like the track “Joyful Noise.” Perry lost the lawsuit in early 2019 and was ordered to pay 2.78 million dollars.
3. Firework
Released in 2010, “Firework” was a part of Katy Perry’s third studio album Teenage Dream. The song is still hailed as one of the most popular self-empowerment songs.
4. Hot N Cold
Fans of Masterchef Australia are yet to understand why the track has been the opening theme of the show for over ten years now but nevertheless, the song has stood the test of time and continues to have the same effect that it had in 2008. “Hot N Cold” was a part of her second studio album One of the Boys.
5. The One That Got Away
A track about lost love, “The One That Got Away” has Katy Perry’s character reminiscing about the love that “got away.” The music video features Perry in an aged avatar and also a goth-like get-up. The 2011 track was a part of the album Teenage Dream.
6. Birthday
The song is one of the best birthday tracks of the 21st century. In the video, Katy Perry crashes birthday parties and surprises her fans. “Birthday” was a part of the studio album Prism.
7. Rise
Released in 2016, “Rise” was termed as a kind of follow-up to “Roar” in terms of its themes. The track wasn’t a part of any album but a single release.
8. Bon Appetit
Part of Katy Perry’s fifth album Witness, the track released in 2017. The music video features Katy Perry being prepared and served by chefs as a dish which sounds bizarre but packs a punch visually.
9. I Kissed A Girl
It wouldn’t be an overstatement to say that this was the track that put Katy Perry on the map. The song attracted a lot of attention for its lyrics but its catchy tune made it an instant hit. “I Kissed A Girl” was a part of Katy Perry’s second studio album One of the Boys.
10. Wide Awake
Released in 2012, the track’s video was leaked a few days prior to its actual release date. This track is quite on the lines of Perry’s “The One That Got Away.”
11. Last Friday Night (TGIF)
This was the party track of 2011 and was a part of her album Teenage Dream. Rebecca Black, Corey Feldman, Debbie Gibson, Kenny G, Hanson, Kevin McHale and Darren Criss had cameo appearances in the music video.
12. Swish Swish
“Swish Swish” also features Nicki Minaj and was a part of Perry’s album Witness. Taylor Swift’s “Bad Blood” was said to be about Perry and this song was seen as an answer to that.
13. Chained To The Rhythm
Featuring Jamaican artiste Skip Marley, the track released in 2017 as a part of the album Witness. The song’s theme was said to be a departure from Perry’s earlier tracks that spoke mainly to the teenage crowd.
14. Teenage Dream
“Teenage Dream” was an ode to the teenage years and was another hit from the album of the same name.
15. California Gurls
Featuring Snoop Dogg, the track was termed as a ‘summer hit’ at the time of its release. The song was seen as a response to Jay Z’s “Empire State of Mind”. While Jay Z’s track was New York-centric, Perry’s track was focused on Los Angeles kind-of life.


We realize that one button shape and style, even with it's available states, may not be enough for the unique needs of your project. This is why we've include a number of additional button types: rounded, outlined, link.
Add the class .button-rounded
to any .button
element to display it with rounded caps.
Add the class .button-*-outline
to any .button
element to display it with a thin outline.
Add the class .button-*-link
to any .button
element to display it as "text-only", while retaining the exact size attributes of it's normal button counterpart.
Want an outlined button that has rounded caps? Go ahead and combine button classes to yield interesting display combinations.


warby-parker
Businessmodel of Warby Parker
Customer Segments
Warby Park operates as an online retailer, selling prescription glasses and sunglasses. The Company’s key customers are general consumers who wear prescription lenses. Within this demographic, however, the Company tends to attract younger, less affluent, but more tech savvy customers, who more attuned to making online purchases and typically cannot afford expensive designer frames.
Warby Parker currently operates exclusively in North America, with its domestic market of the US its principal sources of revenue. The Company also operates a similar service for customers in Canada. Warby Parker does not appear to have plans to expand its services to customers in Europe and Asia in the imminent future.
Value Propositions
Warby Parker provides value to its customers in the following ways:
- The quality of its products, with the Company selling a range of range of well-made and reliable frames, offering a range of prescription and non-prescription lenses, including polarised polycarbonate lenses and high-index sun lenses;
- Its broad selection of frames, with the Company offering broad catalogue of frames for glasses and sunglasses, covering a range of styles for both men and women that are in line with current trends and fashions;
- Its affordable pricing structure, with the Company providing products at much lower prices than those offered by more traditional glasses retailers and big brand names, without sacrificing quality or style; and
- Its accessibility and flexibility, with the Company operating an online sales channel that is easy to navigate, and offering an at-home service that allows customers to have a number of frames delivered so that they are able to try them on at their leisure. ### Channels
Warby Parker operates a website at www.warbyparker.com, through which it provides information on its products and services. The Company’s website also serves as its online portal, through which customers can browse frames by material, style and fit, as well as order at-home trials, enter prescription information and make purchases. Warby Parker also operates a mobile app for iOS users that provides much of the same functionality. The Company utilises the services of third-party delivery and distribution providers to deliver its online orders to customers
Additionally, Warby Parker operates a network of almost 40 physical retail outlets across 18 US states – including the District of Columbia – with stores in cities such as New York, Austin, Minneapolis, San Francisco, Los Angeles, Portland, New Orleans, and Miami, among others. The Company also operates a single retail outlet in Toronto, Canada. These outlets allow customers to try and purchase glasses directly.
Customer Relationships
Warby Parker operates a fully self-service online retail channel, and mobile channel, through which customers are able to register accounts, browse the Company’s catalogue of frames, provide prescription information, make purchases, and schedule deliveries without interacting with members of the Company’s sales team. Customers are also provided an at-home service that allows customers to try on several pairs of frames independently at home.
Additionally, Warby Parker operates a network of physical retail outlets across the US and Canada, where its specialist personnel are able to assist customers directly, providing personalised assistance in identifying suitable frames and appropriate lenses. The Company’s staff are also available to answer questions and respond to customer complaints in person. This degree of personal care encourages recurring business.
Warby Parker provides a suite of online support resources to its customers, including FAQs, delivery and shipping guides, information on lenses, and guidance on the Company’s returns and exchange policy. Customers are also able to contact members of the Company’s support staff over the phone, via email, or through an online chat service, in order to provide assistance tailored to their needs.
Customers are also able to interact directly with Warby Parker through its social media accounts, including with Facebook, Twitter, Instagram, and Tumblr.
Key Activities
Warby Parker, officially incorporated under the name JAND Inc, is engaged in the design, manufacture and sales of eyewear. The Company offers customers across the US and Canada a broad portfolio of glasses and sunglasses for men and women, in a variety of styles, materials, and sizes. Warby Parker also offers a range of prescription and non-prescription lenses to suit all needs.
The Company operates both an online sales channel and a number of physical retail outlets, comprising almost 40 stores in the US and a single retail outlet in Canada. This includes stores across most major US cities, such as New York, Los Angeles, San Francisco, Washington, and Seattle. Warby Parker offers a unique at-home service that enables customers to order several different frames that can be tried on at home free of charge.
Key Partners
Warby Parker works closely with a range of companies and organisations in order to deliver quality and efficient services to its customers. These partners can be categorised broadly as:
- Supplier and Vendor Partners, comprising suppliers of tools, technologies, and services that are utilised across the Company’s business to support and supplement its in-house capabilities and ensure the Company’s efficient operation;
- Manufacturing and Packaging Partners, comprising third-party contract manufacturers that assist the Company in producing its frames, as well as companies that assist in packaging the Company’s orders;
- Channel and Distribution Partners, comprising third party distribution and delivery service providers that assist the Company fulfilling its orders efficiently and timely;
- Marketing and Affiliate Partners, comprising a range of companies that assist in marketing the Company’s services, and a network of websites that drive traffic to the Company’s online retail channel in return for commissions on sales. Warby Parker has previously partnered with Google to provide designs for the tech company’s Google Glass project. The Company also works closely with a number of non-profits on various charitable projects, including a scheme with New York City to provide free pairs glasses to schoolchildren.
Key Resources
Warby Parker’s key resources are its intellectual properties and designs, its portfolio of products and supply chain, its online portal, its IT and communications infrastructure, is chain of physical retail outlets, its partnerships, and its personnel.
Warby Parker owns and or leases a number of properties across the US, including its corporate headquarters, and its network of 38 retail outlets in the US, and a single retail outlet in Canada.
While the Company owns a number of intellectual properties that are material to its operations, searches of records published by the US Patent and trademark Office identified no patent applications filed in the name of Warby Parker or JAND Inc.
Cost Structure
Warby Parker incurs cost in relation to the development and design of its products, the manufacture and distribution of its products – including the procurement of supplies, the development and maintenance of its online and mobile retail platforms, the maintenance of its IT and communications infrastructure, the operation of its physical retail outlets, the implementation of marketing and advertising campaigns, the management of its partnerships, and the retention of its personnel. The Company also incurs costs in relation to the payment of fees to various vendors and professional service providers.
Revenue Streams
Warby Parker generates revenue through the design, manufacture, and sale of glasses and sunglasses to customers across North America. The Company has two revenue streams:
- Revenue derived from the sale of prescription and on-prescription eyewear through its online and mobile channels; and
- Revenue derived from the sale of prescription and on-prescription eyewear through its network of physical retail outlets. Warby Parker remains a privately-owned company, and as such dos not publish its financial results on its website. Reports suggest, however, that in 2015 the Company generated more than $100 million in annual revenue, up considerably on the $35 million recorded by the Company just two years earlier. The majority of the Company’s revenue appears to be derived through its online retail portal, however, the Company’s physical outlets account for a growing portion of its annual sales.


Thomas Argent
About
Portfolio
Contact
Portfolio
Hangman
RPG Game
Trivia Game
Rutgers Info Widget
Rock Paper Scissors


The ErrorBag class is a wrapper around an array, and is standalone and has no dependencies, you can use it in your code for any reason:
Available Methods:
add(object error)
adds an error object to the internal array.all()
Gets all messages from the internal array.any()
Checks if there are any errors.clear()
Removes all items from the internal array.collect(String field)
Collects errors associated with a specific field. not passing the field name will group all errors by field name instead.count()
Gets the length of the internal array. or the number of messages.first(String field)
Gets the first error message associated with the specified field.has(String field)
Checks if there is at least one error associated with the specified field.remove(String field)
Removes all errors for a specified field from the internal array.
The validator is injected to the Vue instance as $validator
automatically.
However it is also a stand alone class and can be used separately for programmatically validating values.
The constructor can optionally take an object to map each field name to a set of validations.
validate(field, value)
like this:
Promise
which will resolve asynchronously with a Boolean.
validateAll(obj)
:
errorBag
property directly or using getErrors()
.
setLocale
method to switch the validator locale.
setDefaultLocale(string)
which sets the default language for all newly instantiated validators to that language.
Here is an example of using the validator without the directive, which means you will be responsible for monitoring input changes on your own, and calling the API methods as you see fit. This example uses a Vue instance to simplify things, but it can be used in plain JavaScript as well.


pt for pprint format which of course waits until the end of the input stream to format all output). The > and >> are for write and append, as in the shell, but (as with awk) the file-overwrite for > is on first write, not per record. The | is for piping to a process which will process the data. There will be one open file for each distinct file name (for > and >>) or one subordinate process for each distinct value of the piped-to command (for |). Output-formatting flags are taken from the main command line. You can use any of the output-format command-line flags, e.g. --ocsv, --ofs, etc., to control the format of the output. See also mlr -h. emit with redirect and tee with redirect are identical, except tee can only output $*. Example: mlr --from f.dat put 'tee > "/tmp/data-".$a, $*' Example: mlr --from f.dat put 'tee >> "/tmp/data-".$a.$b, $*' Example: mlr --from f.dat put 'tee > stderr, $*' Example: mlr --from f.dat put -q 'tee | "tr \[a-z\\] \[A-Z\\]", $*' Example: mlr --from f.dat put -q 'tee | "tr \[a-z\\] \[A-Z\\] > /tmp/data-".$a, $*' Example: mlr --from f.dat put -q 'tee | "gzip > /tmp/data-".$a.".gz", $*' Example: mlr --from f.dat put -q --ojson 'tee | "gzip > /tmp/data-".$a.".gz", $*' true true: the boolean literal value. unset unset: clears field(s) from the current record, or an out-of-stream or local variable. Example: mlr --from f.dat put 'unset $x' Example: mlr --from f.dat put 'unset $*' Example: mlr --from f.dat put 'for (k, v in $*) { if (k =~ "a.*") { unset $[k] } }' Example: mlr --from f.dat put '...; unset @sums' Example: mlr --from f.dat put '...; unset @sums["green"]' Example: mlr --from f.dat put '...; unset @*' var var: declares an untyped local variable in the current curly-braced scope. Examples: 'var a=1', 'var xyz=""' while while: introduces a while loop, or with "do", introduces a do-while loop. The body statements must be wrapped in curly braces. ENV ENV: access to environment variables by name, e.g. '$home = ENV["HOME"]' FILENAME FILENAME: evaluates to the name of the current file being processed. FILENUM FILENUM: evaluates to the number of the current file being processed, starting with 1. FNR FNR: evaluates to the number of the current record within the current file being processed, starting with 1. Resets at the start of each file. IFS IFS: evaluates to the input field separator from the command line. IPS IPS: evaluates to the input pair separator from the command line. IRS IRS: evaluates to the input record separator from the command line, or to LF or CRLF from the input data if in autodetect mode (which is the default). M_E M_E: the mathematical constant e. M_PI M_PI: the mathematical constant pi. NF NF: evaluates to the number of fields in the current record. NR NR: evaluates to the number of the current record over all files being processed, starting with 1. Does not reset at the start of each file. OFS OFS: evaluates to the output field separator from the command line. OPS OPS: evaluates to the output pair separator from the command line. ORS ORS: evaluates to the output record separator from the command line, or to LF or CRLF from the input data if in autodetect mode (which is the default). AUTHOR Miller is written by John Kerl<EMAIL_ADDRESS>This manual page has been composed from Miller's help output by Eric MSP Veith<EMAIL_ADDRESS>SEE ALSO awk(1), sed(1), cut(1), join(1), sort(1), RFC 4180: Common Format and MIME Type for Comma-Separated Values (CSV) Files, the Miller docsite https://miller.readthedocs.io 2022-08-07 MILLER(1)


If you want to using numeric pagination for your blog and portfolio pages, also allow you change it.
Step 1.
Go to Dashboard » Appearance » Customize.
Step 2.
Locate the "Styling » Paging Navigation" section on the left side of the screen.
Step 3.
You should be able to find option "Numeric Pagination" at this point.
If set to "on", the pages module will display numbered pagination instead of Next/Previous links. When you’re done, click "Save & Publish" button.


WITNESS LIST Energy Resources Committee April 9, 2003-10:30A HB 183 For: Fleming, Martin (Texas Independent Producers and Royalty Owners Association (TIPRO)) Griffith, T. David (Self) On: Potter, Eric C. (University of Texas Bureau of Economic Geology) Registering, but not testifying: For: O' Neal, Laurie (Gladewater Economic Development Corporation) Stevens, Bill (Texas Alliance of Energy Producers) HB 1194 For: Matthews, Charles R. (Self and Railroad Commissioner) Registering, but not testifying: For: Stevens, Bill (Texas Alliance of Energy Producers) On: McDaniel, Mary L. (Railroad Commission of Texas) HB 1575 For: Patterson, Land Commissioner Jerry (General Land Office) Registering, but not testifying: For: Golemon, Kinnan (Devon Energy) Against: Woodard, Shayne (Duke Energy) On: Bone, Jr., Richard (General Land Office) Borella, Larry (General Land Office) HB 1843 For: Mann, James (Texas Pipeline Association) Sebree, Ben (Texas Oil and Gas Association) Wurtz, Alan D. (Enterprise) Registering, but not testifying: For: Allday, Marty (Copano Energy) Allday, Marty (Enbridge Energy) Golemon, Kinnan (Devon Energy/ Shell Oil) Nikolis, William (TEPPCO) Nugent, Patrick (Texas Pipeline Association) Woodard, Shayne (Duke Energy) Woodard, Shayne (Sunoco, Inc.) HB 2006 For: Mann, James (Texas Pipeline Association) Mock, Terry (Colonial Pipeline Company) Sebree, Ben (Texas Oil and Gas Association) Smallwood, Cameron (Texas Electric Cooperatives) Weathersbee, Tommy (Association of Electric Companies of Texas) Wurtz, Alan (Enterprise) Against: George, Steven (Self and Texas Short Line and Regional Railroad Association) Hegi, Alan D. (The Burlington Northern and Santa Fe Railway Company) McCulley, Hugh L. (Texas Railroad Association, Port Terminal Railroad Association, Union Pacific Railroad) Smith, Christine M. (Union Pacific Railroad Company) Registering, but not testifying: For: Allday, Marty (Copano Energy) Allday, Marty (Enbridge Energy) Camacho, Jose (Valor Telecom) Golemon, Kinnan (Devon Energy/ Shell Oil) Grant, Kathy (Texas Cable and Telecommunications Association) Grover, Jim (Texas Telephone Association) Nikolis, William (TEPPCO) Nugent, Patrick (Texas Pipeline Association) Olson, Kym (El Paso Corporation) Reinhart, Patrick V. (SBC) Stevens, Bill (Texas Alliance of Energy Producers) Woodard, Shayne (Duke Energy) Woodard, Shayne (Sunoco, Inc.) Against: Bilderback, Blaine (The Burlington Northern and Santa Fe Railway Company) Kearns, Dennis (Burlington Northern Santa Fe Railway) Olson, Ron M. (Union Pacific Railroad Company) Watkins, Joe Bill (Kansas City Southern Railroad) HB 2613 Registering, but not testifying: For: Fleming, Martin (Texas Independent Producers and Royalty Owners Association (TIPRO)) Stevens, Bill (Texas Alliance of Energy Producers) On: Helmueller, Mark (Railroad Commission of Texas) Smith, Wendell (General Land Office) Tintera, John (Railroad Commission)


Search for a city:
5-Day forecast:
-
Date
temp
pressure
rain
-
Date
temp
pressure
rain
-
Date
temp
pressure
rain
-
Date
temp
pressure
rain
-
Date
temp
pressure
rain


JAVASCRIPT QUIZ
This is a site that enables you to value your understanding in JavaScript.
There is a totat of 5 questions each containing 20mrks
Answer all the questions
NAME
SCHOOL


| Color telecasts, live from the Apollo 14 site, came by way of the erectable S-band antenna shown here. The S-band of radio frequencies (between 1550 and 5200 megahertz) was used for high-data-rate space transmissions. The gold-colored parabolic reflector, which opened just like an umbrella, provided a higher gain than the lunar module's own steerable antenna. Note how featureless the lunar surface appears in the area just above the astronaut's shadow. This illustrates the visibility problem that the astronauts faced in walking down-Sun. |


Nessst is a network showcasing student solutions from Eastern Washington University
View More...
Find who you're looking for
Search
A major in Visual Communication Design educates and prepares students to conceive and produce creative solutions to satisfy the visual communication needs of society.


count = num / 2
while count > 0:
if num % count == 0:
print count, 'is the largest factor of', num
break
count -= 1
phone2remove = '555-1212'
for eachPhone in phoneList:
if eachPhone == phone2remove:
print "found", phone2remove, '... deleting'
deleteFromPhoneDB(phone2remove)
break


Organic food
For Happy Long Life
Why Organic food?
Organic food is food produced by methods complying with the standards
of organic farming. Standards vary worldwide, but organic farming
features practices that cycle resources, promote ecological balance,
and conserve biodiversity. Organizations regulating organic products
may restrict the use of certain pesticides and fertilizers in the
farming methods used to produce such products. Organic foods typically
are not processed using irradiation, industrial solvents, or synthetic
food additives.
The term “organic” refers to the way agricultural products are grown
and processed. While the regulations vary from country to country, in
the U.S., organic crops must be grown must be grown without the use of
synthetic herbicides, pesticides, and fertilizers, or bioengineered
genes (GMOs).
About Organic
Organic farming is better for soil, wildlife and biodiversity. Organic farm land also stores more carbon, plus organic farms tend to use less energy.
All of our Planet Organic own brand products, from buckwheat flour to almonds, dark chocolate to popcorn, are certified organic, as is the food and drink we make in our kitchens and serve in our cafes.
Our mission as "Organic Team" we are trying to provide natural healthy foods to the best of our knowledge also we provide specialty products for those with specific health needs.


Our programs are proved as one of the best in Core Design Engineering domain and are available in both online & offline formats. Here are some of the benefits that participants receive through our programs.
Mentors play a crucial role in one’s career. In the Core-Engineering domain specifically, passionate engineers must seek the right mentorship. The right mentor can help an individual explore and build on his/her personality plus interest. Our team is dedicated to guiding passionate individuals in a career path most suitable for them.
We encourage participants to focus on application-based learning through our programs and not just memorize theories and equations. This is made possible by providing exposure through numerous real-time industry examples.
In today’s job market, the demand for those engineers - who display the contemporary technical knowledge required by industry towards its day-to-day activities is very high. Our team is at the forefront in implementing the latest technological developments as part of the course structure in our programs.
In today’s competitive world, the demonstration of skills and knowledge as per the needs of the industry is super important. Therefore, participants in our programs get hands-on experience as per global industry standards on core engineering knowledge and CAD & CAE tools, including advanced engineering topics like Composites and F&DT.
Of all the ingredients which form the recipe for success, self-confidence is a significant factor. We believe that for succeeding in the Core-Engineering domain, it is highly essential to have optimum confidence in one’s abilities to execute technical tasks. Therefore, we adopt a unique delivery method that helps participants to maintain his/her confidence throughout their careers .
Learning is a life-long journey. We understand that participants would need guidance and mentorship or someone to ask their doubts, even after completing the course. Our team of industry experts is ever ready to address the technical and career-related queries that arise throughout their careers.
Note: Our team would be able to provide this benefit only to the Long-Term Program participants. Contact us for more details.
Our team believes that we always have something to learn from the people we surround ourselves with. A person knows more through productive interaction with people than reading textbooks and solving problems alone. Every participant gets access to a dedicated community whose demography spans from engineering students to working professionals with 20+ years of experience. This provides them with an opportunity to network and connect with people and discuss common topics of interest.


My report page in the course DA377B
This is my report-page in the course. This page contains a presentation of myself.
My name is Anton Sjöstrand, I'm 27 years old and I live in central Kristianstad. As of right now I'm studying computer science at Högskolan Kristianstad, graduating this summer. The time between that I graduated highschool and I started my studies at 2017 I have worked at 3 different jobs. I've worked as a store employee at both Harald Nyborg and Media Markt. At 2014 I move on to work at Zafe Care Systems AB as a support technician. This is where I found and developed my interest for programming, leading to the fact that I quit my job and started studying 2017. Since then programming has been one of my main interests. Other interests I have include hanging out with my friends and family, playing all different types of sports and working out. Looking forward to participate in this course.


| Ambient Lights: | Directional Lights: | Shadow: | ||
| Auto-rotate house: | Rotate camera: | Shear: X-Y: Y-Z: Z-X- | Orientation lines: | Translate: Right click and Drag Rotate: Left click and Drag |
| Translate: Right click and drag. Rotate: Left click and Drag | *VIEW only 3D | *REPORT | *Manual |


Home
Add
Sign Up
Login
Login
Log in
Forgot your password
Don't have an account yet?
Sign up
Sign in with Facebook
Sign in with Google


Woman sees father in ultrasound photo of her unborn baby
SAN DIEGO, Calif. -- A San Diego woman believes an image of her late father appeared on an ultrasound image of her unborn daughter.
Shantel Carillo says she noticed the shape of her father's face on the printed images she got from the doctor's office. Carillo says the images show the outline of her father's face, including his cheeks, lips and the shape of a hat he was known to wear.
RELATED: 'Miracle' baby born years after mom had fallopian tubes removed
She posted the images on social media and other family members say they see it too. Many say it looks like the man is kissing the unborn child on the lips.
Carillo's father, Charles, died in 2016. This is her second child. The baby is due in April 2020.


This is all based on Windows. So if you run Mac (yes, I'm talking about you, Jim), don't try to install the same things.
Fortunately, most of these things are much easier to install on Mac.
You might want to take a look at: http://akrabat.com/computing/setting-up-php-mysql-on-os-x-mavericks/
Apache, PHP, MySQL
C:\xampp\php\php.ini
zend_extension = "C:\xampp\php\ext\php_xdebug.dll"
[XDebug]
zend_extension = "C:\xampp\php\ext\php_xdebug.dll"
;xdebug.profiler_append = 0
;xdebug.profiler_enable = 1
;xdebug.profiler_enable_trigger = 0
;xdebug.profiler_output_dir = "C:\xampp\tmp"
;xdebug.profiler_output_name = "cachegrind.out.%t-%s"
;xdebug.remote_enable = 0
;xdebug.remote_handler = "dbgp"
;xdebug.remote_host = "<IP_ADDRESS>"
;xdebug.trace_output_dir = "C:\xampp\tmp"
Start Apache and MySQL. The other services are not needed.
If get a Windows Firewall alert, just allow everything.
If you use Skype, it might block port 80.
If so, go to Options -> Advanced -> Connection and uncheck "Use port 80 and 443...."
Create a file with the following contents and save it as
C:\xampp\htdocs\test.php
<?php
phpinfo();
Go to http://localhost/test.php
You should see something like:
;C:\xampp\mysql\bin;C:\xampp\php;
to the end.Because we changed the PATH, we need to reboot windows.
We will simply install GitHub for Windows, because that does everything we need.
So, in the meanwhile, it is a good idea to create an account at github.com.
Open the 'GitHub' program. And login with the account you just created.
Find the repo GEWIS/gewisweb, and fork it on your GitHub account.
Open the GitHub program, find the repository, right mouse click and clone it to C:\xampp\htdocs
Go to localhost/gewisweb/public/.
Just do what it says!
gewisweb
repository -> open a shell herephp composer.phar install
The frontpage is working. But we still have some things to configure.
gewisweb_dev
In the gewisweb config autoload directory (C:\xampp\htdocs\gewisweb\config\autoload
),
copy doctrine.local.php.dist
to doctrine.local.php
and open it.
Fill in the username, password and database name
This should be root, no password and gewisweb_dev
<?php
return array(
'doctrine' => array(
'connection' => array(
'orm_default' => array(
'driverClass' =>'Doctrine\DBAL\Driver\PDOMySql\Driver',
'params' => array(
'host' => 'localhost',
'port' => '3306',
'user' => 'root',
'password' => '',
'dbname' => 'gewisweb_dev',
)
)
)
)
);
./vendor/bin/doctrine-module orm:schema-tool:create
Go to localhost/gewisweb/public/user and try to login with any number and password (longer than 8 chars). It should give:
Tell me when there are any errors!
In the gewisweb config autoload directory (C:\xampp\htdocs\gewisweb\config\autoload
),
copy zdt.local.php.dist
to zdt.local.php
.
It only takes 15 minutes!