Example: mesh a delineated watershed¶
Here we mesh the Coweeta Hydrologic Laboratory as an example of how to pull data in from default locations and generate a fully functional ATS mesh.
This might be the worst example to use to learn how to use Watershed Workflows. But it is useful to demonstrate the breadth of problems this project was intended to solve.
This includes a range of datasets:
- NHD Plus for river network
- NRCS soils data for soil types
- NLCD for land cover/transpiration/rooting depths
- NED for elevation
[1]:
import os,sys
import numpy as np
from matplotlib import pyplot as plt
import shapely
import logging
import workflow
import workflow.source_list
import workflow.ui
import workflow.extrude
import workflow.colors
import workflow.condition
workflow.ui.setup_logging(1,None)
Sources and setup¶
Next we set up the source watershed and coordinate system and all data sources for our mesh. We will use the CRS that is included in the shapefile.
[2]:
# specify the input shapefile and a hint as to what HUC it is in.
coweeta_shapefile = '../data/hydrologic_units/others/Coweeta/coweeta_basin.shp'
hint = '0601' # hint: HUC 4 containing this shape.
# This is necessary to avoid downloading all HUCs to search for this shape
logging.info("")
logging.info("Meshing shape: {}".format(coweeta_shapefile))
logging.info("="*30)
# get the shape and crs of the shape
crs, coweeta = workflow.get_split_form_shapes(coweeta_shapefile)
2019-12-06 09:53:43,026 - root - INFO:
2019-12-06 09:53:43,028 - root - INFO: Meshing shape: ../data/hydrologic_units/others/Coweeta/coweeta_basin.shp
2019-12-06 09:53:43,029 - root - INFO: ==============================
2019-12-06 09:53:43,030 - root - INFO:
2019-12-06 09:53:43,032 - root - INFO: Preprocessing Shapes
2019-12-06 09:53:43,032 - root - INFO: ------------------------------
2019-12-06 09:53:43,033 - root - INFO: loading file: "../data/hydrologic_units/others/Coweeta/coweeta_basin.shp"
/Users/uec/codes/anaconda/3/envs/ats_meshing_20190719/lib/python3.7/site-packages/fiona/collection.py:336: FionaDeprecationWarning: Collection slicing is deprecated and will be disabled in a future version.
return self.session.__getitem__(item)
A wide range of data sources are available; here we use the defaults except for using NHD Plus for watershed boundaries and hydrography (the default is NHD, which is lower resolution and therefore smaller download sizes).
[3]:
# set up a dictionary of source objects
sources = workflow.source_list.get_default_sources()
sources['HUC'] = workflow.source_list.huc_sources['NHD Plus']
sources['hydrography'] = workflow.source_list.hydrography_sources['NHD Plus']
workflow.source_list.log_sources(sources)
2019-12-06 09:53:43,109 - root - INFO: Using sources:
2019-12-06 09:53:43,111 - root - INFO: --------------
2019-12-06 09:53:43,112 - root - INFO: HUC: National Hydrography Dataset Plus High Resolution (NHDPlus HR)
2019-12-06 09:53:43,113 - root - INFO: hydrography: National Hydrography Dataset Plus High Resolution (NHDPlus HR)
2019-12-06 09:53:43,115 - root - INFO: DEM: National Elevation Dataset (NED)
2019-12-06 09:53:43,116 - root - INFO: soil type: National Resources Conservation Service Soil Survey (NRCS Soils)
2019-12-06 09:53:43,118 - root - INFO: land cover: National Land Cover Database (NLCD) Layer: NLCD_2016_Land_Cover_L48
2019-12-06 09:53:43,120 - root - INFO: soil thickness: None
Generate the surface mesh¶
First we’ll generate the flattened, 2D triangulation, which builds on hydrography data. Then we download a digital elevation map from the National Elevation Dataset, and extrude that 2D triangulation to a 3D surface mesh based on interpolation between pixels of the DEM.
[4]:
# download/collect the river network within that shape's bounds
_, reaches = workflow.get_reaches(sources['hydrography'], hint,
coweeta.exterior().bounds, crs)
# simplify and prune rivers not IN the shape, constructing a tree-like data structure
# for the river network
rivers = workflow.simplify_and_prune(coweeta, reaches, cut_intersections=True)
2019-12-06 09:53:43,136 - root - INFO:
2019-12-06 09:53:43,137 - root - INFO: Preprocessing Hydrography
2019-12-06 09:53:43,138 - root - INFO: ------------------------------
2019-12-06 09:53:43,139 - root - INFO: Loading streams in HUC 0601
2019-12-06 09:53:43,140 - root - INFO: and/or bounds<PHONE_NUMBER>428096, 3878839.6361173145,<PHONE_NUMBER>949494, 3883953.7853134344)
2019-12-06 09:53:43,147 - root - INFO: Using Hydrography file "/Users/uec/research/water/data/watershed-workflow/data-master/hydrography/NHDPlus_H_0601_GDB/NHDPlus_H_0601.gdb"
2019-12-06 09:53:49,658 - root - INFO: found 36 reaches
2019-12-06 09:53:49,682 - root - INFO:
2019-12-06 09:53:49,683 - root - INFO: Simplifying and pruning
2019-12-06 09:53:49,685 - root - INFO: ------------------------------
2019-12-06 09:53:49,688 - root - INFO: Filtering rivers outside of the HUC space
2019-12-06 09:53:49,691 - root - INFO: ...filtering
2019-12-06 09:53:49,726 - root - INFO: Generate the river tree
2019-12-06 09:53:49,733 - root - INFO: Removing rivers with fewer than 0 reaches.
2019-12-06 09:53:49,734 - root - INFO: ...keeping river with 21 reaches
2019-12-06 09:53:49,737 - root - INFO: simplifying rivers
2019-12-06 09:53:49,753 - root - INFO: simplifying HUCs
2019-12-06 09:53:49,757 - root - INFO: snapping rivers and HUCs
2019-12-06 09:53:49,759 - root - INFO: snapping polygon segment boundaries to river endpoints
2019-12-06 09:53:49,765 - root - INFO: snapping river endpoints to the polygon
2019-12-06 09:53:49,808 - root - INFO: cutting at crossings
2019-12-06 09:53:49,859 - root - INFO: filtering rivers to HUC
2019-12-06 09:53:49,860 - root - INFO: ...filtering
2019-12-06 09:53:49,873 - root - INFO:
2019-12-06 09:53:49,874 - root - INFO: Simplification Diagnostics
2019-12-06 09:53:49,875 - root - INFO: ------------------------------
2019-12-06 09:53:49,880 - root - INFO: river min seg length: 38.7145
2019-12-06 09:53:49,882 - root - INFO: river median seg length: 65.1981
2019-12-06 09:53:49,886 - root - INFO: HUC min seg length: 11.4828
2019-12-06 09:53:49,888 - root - INFO: HUC median seg length: 20.9713
[5]:
# form a triangulation on the shape + river network
# triangulation refinement:
# Refine triangles if their area (in m^2) is greater than A(d), where d is the
# distance from the triangle centroid to the nearest stream.
# A(d) is a piecewise linear function -- A = A0 if d <= d0, A = A1 if d >= d1, and
# linearly interpolates between the two endpoints.
d0 = 100; d1 = 500
A0 = 1000; A1 = 5000
#A0 = 500; A1 = 2500
#A0 = 100; A1 = 500
# Refine triangles if they get too acute
min_angle = 32 # degrees
# make 2D mesh
mesh_points2, mesh_tris = workflow.triangulate(coweeta, rivers,
refine_distance=[d0,A0,d1,A1],
refine_min_angle=min_angle,
diagnostics=True)
2019-12-06 09:53:49,900 - root - INFO:
2019-12-06 09:53:49,901 - root - INFO: Meshing
2019-12-06 09:53:49,903 - root - INFO: ------------------------------
2019-12-06 09:53:49,904 - root - INFO: Triangulating...
2019-12-06 09:53:49,908 - root - INFO: 265 points and 265 facets
2019-12-06 09:53:49,909 - root - INFO: checking graph consistency
2019-12-06 09:53:49,916 - root - INFO: building graph data structures
2019-12-06 09:53:49,921 - root - INFO: triangle.build...
2019-12-06 09:54:03,253 - root - INFO: ...built: 8165 mesh points and 16103 triangles
2019-12-06 09:54:03,255 - root - INFO: Plotting triangulation diagnostics
[6]:
# get a raster for the elevation map
dem_profile, dem = workflow.get_raster_on_shape(sources['DEM'], coweeta.exterior(), crs)
# elevate the triangle nodes to the dem
mesh_points3 = workflow.elevate(mesh_points2, crs, dem, dem_profile)
2019-12-06 09:54:06,216 - root - INFO:
2019-12-06 09:54:06,217 - root - INFO: Preprocessing Raster
2019-12-06 09:54:06,219 - root - INFO: ------------------------------
2019-12-06 09:54:06,220 - root - INFO: collecting raster
2019-12-06 09:54:06,221 - root - INFO: Collecting DEMs to tile bounds: [-83.48845037186388, 35.01734099944037, -83.41165773504302, 35.08381933600275]
2019-12-06 09:54:06,222 - root - INFO: Need:
2019-12-06 09:54:06,223 - root - INFO: /Users/uec/research/water/data/watershed-workflow/data-master/dem/USGS_NED_1as_n36_w084.img
2019-12-06 09:54:06,276 - root - INFO:
2019-12-06 09:54:06,278 - root - INFO: Elevating Triangulation to DEM
2019-12-06 09:54:06,279 - root - INFO: ------------------------------
Plotting the resulting mesh can be done in a variety of ways, including both 3D plots and mapview. We show both here, but hereafter use mapview plots as they are a bit clearer (if not so flashy)…
[7]:
figsize = (6,6)
figsize_3d = (8,6)
[8]:
# plot the resulting surface mesh
fig = plt.figure(figsize=figsize_3d)
ax = workflow.plot.get_ax('3d', fig, window=[0.0,0.2,1,0.8])
cax = fig.add_axes([0.23,0.18,0.58,0.03])
mp = ax.plot_trisurf(mesh_points3[:,0], mesh_points3[:,1], mesh_points3[:,2],
triangles=mesh_tris, cmap='viridis',
edgecolor=(0,0,0,.2), linewidth=0.5)
cb = fig.colorbar(mp, orientation="horizontal", cax=cax)
rivers_2 = [np.array(r.xy) for riv in rivers for r in riv]
rivers_e = [workflow.values_from_raster(r.transpose(), crs, dem, dem_profile)
for r in rivers_2]
rivers_l3 = [np.array([i[0], i[1], j]).transpose()
for i,j in zip(rivers_2, rivers_e)]
for r in rivers_l3:
ax.plot(r[:,0]+1, r[:,1], r[:,2]+10, color='red', linewidth=3)
t = cax.set_title('elevation [m]')
ax.view_init(55,0)
ax.set_xticklabels(list())
ax.set_yticklabels(list())
fig.savefig('coweeta_dem_3d')
[9]:
# plot the resulting surface mesh
fig = plt.figure(figsize=figsize)
ax = workflow.plot.get_ax(crs, fig)
mp = workflow.plot.triangulation(mesh_points3, mesh_tris, crs, ax=ax,
color='elevation', edgecolor='gray', linewidth=0.2)
cbar = fig.colorbar(mp, orientation="horizontal", pad=0.05)
workflow.plot.hucs(coweeta, crs, ax=ax, color='k', linewidth=1)
workflow.plot.rivers(rivers, crs, ax=ax, color='red', linewidth=1)
ax.set_aspect('equal', 'datalim')
ax.set_title('elevation [m]')
cbar.ax.set_title('elevation [m]')
fig.savefig('coweeta_dem')
[10]:
# construct the 2D mesh
m2 = workflow.extrude.Mesh2D(mesh_points3.copy(), list(mesh_tris))
[11]:
# hydrologically condition the mesh
workflow.condition.condition(m2)
# plot the change between the two meshes
diff = np.copy(mesh_points3)
diff[:,2] = m2.points[:,2] - mesh_points3[:,2]
print("max diff = ", np.abs(diff[:,2]).max())
fig, ax = workflow.plot.get_ax(crs, figsize=figsize)
workflow.plot.triangulation(diff, m2.conn, crs, color='elevation', edgecolors='gray',
linewidth=0.2, ax=ax)
ax.set_title('conditioned dz')
plt.show()
max diff = 5.63878974546617
Surface properties¶
Meshes interact with data to provide forcing, parameters, and more in the actual simulation. Specifically, we need vegetation type on the surface to provide information about transpiration and subsurface structure to provide information about water retention curves, etc.
We’ll start by downloading and collecting land cover from the NLCD dataset, and generate sets for each land cover type that cover the surface. Likely these will be some combination of grass, deciduous forest, coniferous forest, and mixed.
[12]:
# download the NLCD raster
lc_profile, lc_raster = workflow.get_raster_on_shape(sources['land cover'],
coweeta.exterior(), crs)
# resample the raster to the triangles
lc = workflow.values_from_raster(m2.centroids(), crs, lc_raster, lc_profile)
# what land cover types did we get?
logging.info('Found land cover dtypes: {}'.format(lc.dtype))
logging.info('Found land cover types: {}'.format(set(lc)))
2019-12-06 09:54:14,707 - root - INFO:
2019-12-06 09:54:14,708 - root - INFO: Preprocessing Raster
2019-12-06 09:54:14,709 - root - INFO: ------------------------------
2019-12-06 09:54:14,711 - root - INFO: collecting raster
2019-12-06 09:54:14,725 - root - INFO: CRS: PROJCS["Albers_Conical_Equal_Area",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,-0,-0,-0,0],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]],PROJECTION["Albers_Conic_Equal_Area"],PARAMETER["standard_parallel_1",29.5],PARAMETER["standard_parallel_2",45.5],PARAMETER["latitude_of_center",23],PARAMETER["longitude_of_center",-96],PARAMETER["false_easting",0],PARAMETER["false_northing",0],UNIT["meters",1]]
2019-12-06 09:54:15,239 - root - INFO: Found land cover dtypes: uint8
2019-12-06 09:54:15,246 - root - INFO: Found land cover types: {41, 42, 43, 81, 52, 21, 22, 23}
[13]:
# plot the NLCD data
# -- get the NLCD colormap which uses official NLCD colors and labels
nlcd_indices, nlcd_cmap, nlcd_norm, nlcd_ticks, nlcd_labels = \
workflow.colors.generate_nlcd_colormap(lc)
nlcd_labels_fw = []
for label in nlcd_labels:
label_fw = label
if len(label) > 15:
if ' ' in label:
lsplit = label.split()
if len(lsplit) == 2:
label_fw = '\n'.join(lsplit)
elif len(lsplit) == 4:
label_fw = '\n'.join([' '.join(lsplit[0:2]),
' '.join(lsplit[2:])])
elif len(lsplit) == 3:
if len(lsplit[0]) > len(lsplit[-1]):
label_fw = '\n'.join([lsplit[0],
' '.join(lsplit[1:])])
else:
label_fw = '\n'.join([' '.join(lsplit[:-1]),
lsplit[-1]])
nlcd_labels_fw.append(label_fw)
fig = plt.figure(figsize=figsize)
ax = workflow.plot.get_ax(crs, fig)
mp = workflow.plot.triangulation(mesh_points3, mesh_tris, crs, ax=ax, color=lc,
cmap=nlcd_cmap, norm=nlcd_norm, edgecolor='none',
linewidth=0.5)
cb = fig.colorbar(mp)
cb.set_ticks(nlcd_ticks)
cb.set_ticklabels(nlcd_labels_fw)
ax.set_title("land cover index")
fig.savefig('coweeta_nlcd')
Subsurface properties¶
Get soil structure from SSURGO
[14]:
# download the NRCS soils data as shapes and project it onto the mesh
import workflow.sources.manager_nrcs
import matplotlib.cm
# -- download the shapes
target_bounds = coweeta.exterior().bounds
_, soil_survey = workflow.get_shapes(sources['soil type'], target_bounds, crs)
# -- log the bounds targetted and found
logging.info('target bounds: {}'.format(target_bounds))
logging.info('shape union bounds: {}'.format(
shapely.ops.cascaded_union(soil_survey).bounds))
# -- determine the NRCS mukey for each soil unit; this uniquely identifies soil
# properties
soil_ids = np.array([shp.properties['id'] for shp in soil_survey], np.int32)
# -- color a raster by the polygons (this makes identifying a triangle's value much
# more efficient)
soil_color_raster, soil_color_profile, img_bounds = \
workflow.color_raster_from_shapes(target_bounds, 10, soil_survey,
soil_ids, crs)
# -- resample the raster to the triangles
soil_color = workflow.values_from_raster(m2.centroids(), crs,
soil_color_raster, soil_color_profile)
2019-12-06 09:54:16,201 - root - INFO:
2019-12-06 09:54:16,202 - root - INFO: Preprocessing Shapes
2019-12-06 09:54:16,211 - root - INFO: ------------------------------
2019-12-06 09:54:16,216 - root - INFO: Using filename: /Users/uec/research/water/data/watershed-workflow/data-master/soil_survey/soil_survey_shape_-83.4790_35.0269_-83.4208_35.0743.gml
2019-12-06 09:54:16,363 - root - INFO: Found 460 shapes.
2019-12-06 09:54:16,364 - root - INFO: and crs: {'init': 'epsg:4326'}
2019-12-06 09:54:16,571 - root - INFO: target bounds:<PHONE_NUMBER>428096, 3878839.6361173145,<PHONE_NUMBER>949494, 3883953.7853134344)
2019-12-06 09:54:17,672 - root - INFO: shape union bounds:<PHONE_NUMBER>135138, 3877673.165081467,<PHONE_NUMBER>333445, 3887703.7251368817)
2019-12-06 09:54:17,674 - root - INFO: Coloring shapes onto raster:
2019-12-06 09:54:17,675 - root - INFO: target_bounds =<PHONE_NUMBER>428096, 3878839.6361173145,<PHONE_NUMBER>949494, 3883953.7853134344)
2019-12-06 09:54:17,676 - root - INFO: out_bounds = [273966.0, 3878839.0, 279146.0, 3883959.0]
2019-12-06 09:54:17,676 - root - INFO: pixel_size = 10
2019-12-06 09:54:17,678 - root - INFO: width = 518, height = 512
2019-12-06 09:54:17,679 - root - INFO: and 43 independent colors of dtype int32
[15]:
# plot the soil data
fig = plt.figure(figsize=figsize)
ax = workflow.plot.get_ax(crs, fig)
mp = workflow.plot.triangulation(mesh_points3, mesh_tris, crs, ax=ax,
linewidth=0.5, color=soil_color, cmap='copper')
ax.set_title('soil type index')
fig.savefig('coweeta_soils')
Mesh extrusion¶
Given the surface mesh and material IDs on both the surface and subsurface, we can extrude the surface mesh in the vertical to make a 3D mesh.
[16]:
# layer extrusion
# -- data structures needed for extrusion
layer_types = []
layer_data = []
layer_ncells = []
layer_mat_ids = []
z = 0.0
# -- soil layer --
# top 6 m
# 5 cm initial top cell
# 10 cells
# expanding dz, growing with depth
ncells = 9
dz = 0.05
layer_dz = 4
def telescope_factor(ncells, dz, layer_dz):
"""Calculates a telescoping factor"""
if ncells * dz > layer_dz:
raise ValueError(("Cannot telescope {} cells of thickness at least {} "+
"and reach a layer of thickness {}"
).format(ncells, dz, layer_dz))
import scipy.optimize
def seq(r):
calc_layer_dz = dz * (1 - r**ncells)/(1-r)
#print('tried: {} got: {}'.format(r, calc_layer_dz))
return layer_dz - calc_layer_dz
res = scipy.optimize.root_scalar(seq, x0=1.0001, x1=2)
return res.root
tele = telescope_factor(ncells, dz, layer_dz)
logging.info("Got telescoping factor: {}".format(tele))
for i in range(ncells):
layer_types.append('constant')
layer_data.append(dz)
layer_ncells.append(1)
layer_mat_ids.append(soil_color)
z += dz
dz *= tele
# one more 2m layer makes 6m
dz = 2.0
layer_types.append('constant')
layer_data.append(dz)
layer_ncells.append(1)
layer_mat_ids.append(soil_color)
z += dz
# -- geologic layer --
# keep going for 2m cells until we hit the bottom of
# the domain
layer_types.append("constant")
layer_data.append(40 - z) # depth of bottom of domain is 40 m
layer_ncells.append(int(round(layer_data[-1] / dz)))
layer_mat_ids.append(999*np.ones_like(soil_color))
# print the summary
workflow.extrude.Mesh3D.summarize_extrusion(layer_types, layer_data,
layer_ncells, layer_mat_ids)
2019-12-06 09:54:19,380 - root - INFO: Got telescoping factor: 1.515910144611108
2019-12-06 09:54:19,381 - root - INFO: Cell summary:
2019-12-06 09:54:19,382 - root - INFO: ------------------------------------------------------------
2019-12-06 09:54:19,383 - root - INFO: l_id | c_id |mat_id | dz | z_top
2019-12-06 09:54:19,384 - root - INFO: ------------------------------------------------------------
2019-12-06 09:54:19,385 - root - INFO: 00 | 00 | 545853 | 0.050000 | 0.000000
2019-12-06 09:54:19,387 - root - INFO: 01 | 01 | 545853 | 0.075796 | 0.050000
2019-12-06 09:54:19,387 - root - INFO: 02 | 02 | 545853 | 0.114899 | 0.125796
2019-12-06 09:54:19,388 - root - INFO: 03 | 03 | 545853 | 0.174177 | 0.240695
2019-12-06 09:54:19,390 - root - INFO: 04 | 04 | 545853 | 0.264036 | 0.414872
2019-12-06 09:54:19,391 - root - INFO: 05 | 05 | 545853 | 0.400255 | 0.678908
2019-12-06 09:54:19,392 - root - INFO: 06 | 06 | 545853 | 0.606751 | 1.079163
2019-12-06 09:54:19,393 - root - INFO: 07 | 07 | 545853 | 0.919781 | 1.685915
2019-12-06 09:54:19,395 - root - INFO: 08 | 08 | 545853 | 1.394305 | 2.605695
2019-12-06 09:54:19,396 - root - INFO: 09 | 09 | 545853 | 2.000000 | 4.000000
2019-12-06 09:54:19,397 - root - INFO: 10 | 10 | 999 | 2.000000 | 6.000000
2019-12-06 09:54:19,398 - root - INFO: 10 | 11 | 999 | 2.000000 | 8.000000
2019-12-06 09:54:19,399 - root - INFO: 10 | 12 | 999 | 2.000000 | 10.000000
2019-12-06 09:54:19,400 - root - INFO: 10 | 13 | 999 | 2.000000 | 12.000000
2019-12-06 09:54:19,401 - root - INFO: 10 | 14 | 999 | 2.000000 | 14.000000
2019-12-06 09:54:19,401 - root - INFO: 10 | 15 | 999 | 2.000000 | 16.000000
2019-12-06 09:54:19,402 - root - INFO: 10 | 16 | 999 | 2.000000 | 18.000000
2019-12-06 09:54:19,404 - root - INFO: 10 | 17 | 999 | 2.000000 | 20.000000
2019-12-06 09:54:19,405 - root - INFO: 10 | 18 | 999 | 2.000000 | 22.000000
2019-12-06 09:54:19,405 - root - INFO: 10 | 19 | 999 | 2.000000 | 24.000000
2019-12-06 09:54:19,407 - root - INFO: 10 | 20 | 999 | 2.000000 | 26.000000
2019-12-06 09:54:19,407 - root - INFO: 10 | 21 | 999 | 2.000000 | 28.000000
2019-12-06 09:54:19,408 - root - INFO: 10 | 22 | 999 | 2.000000 | 30.000000
2019-12-06 09:54:19,410 - root - INFO: 10 | 23 | 999 | 2.000000 | 32.000000
2019-12-06 09:54:19,411 - root - INFO: 10 | 24 | 999 | 2.000000 | 34.000000
2019-12-06 09:54:19,412 - root - INFO: 10 | 25 | 999 | 2.000000 | 36.000000
2019-12-06 09:54:19,413 - root - INFO: 10 | 26 | 999 | 2.000000 | 38.000000
[17]:
# extrude
m3 = workflow.extrude.Mesh3D.extruded_Mesh2D(m2, layer_types, layer_data,
layer_ncells, layer_mat_ids)
[18]:
# add back on land cover side sets
surf_ss = m3.side_sets[1]
for index, name in zip(nlcd_indices, nlcd_labels):
where = np.where(lc == index)[0]
ss = workflow.extrude.SideSet(name, int(index),
[surf_ss.elem_list[w] for w in where],
[surf_ss.side_list[w] for w in where])
m3.side_sets.append(ss)
[19]:
# save to disk
try:
os.remove('coweeta_basin.exo')
except FileNotFoundError:
pass
m3.write_exodus('coweeta_basin.exo')
You are using exodus.py v 1.13 (seacas-beta), a python wrapper of some of the exodus library.
Copyright (c) 2013, 2014, 2015, 2016, 2017, 2018, 2019 National Technology &
Engineering Solutions of Sandia, LLC (NTESS). Under the terms of
Contract DE-NA0003525 with NTESS, the U.S. Government retains certain
rights in this software.
Opening exodus file: coweeta_basin.exo
Closing exodus file: coweeta_basin.exo


UP power minister promotes use of prepaid meters to get defaulters in line
Sharma got a prepaid meter of 25KV capacity installed in his official Kalidas Marg residence.
by DECCAN CHRONICLELucknow: Uttar Pradesh (UP) Power minister Shrikant Sharma, on Friday launched his drive to install prepaid electricity meters in the residence of ministers and government officials by getting one installed for himself in his house.
Sharma got a prepaid meter of 25 KV capacity installed in his official Kalidas Marg residence, news agency IANS reported.
Once the balance in the prepaid meter is exhausted, the power will automatically get disconnected.
The minister, by installing one for himself, has set an example for his colleagues and citizens to do the same.
Sharma said that he took this step to remove the growing perception of politicians and officials of not paying their dues leading to higher arrears.
The decision to install prepaid meters in residences of politicians, ministers, and officials was taken by the energy department on October 29.
The department will be procuring around one lakh prepaid meters that will be installed in houses of prominent people in the state.
Power dues on government departments and houses have added up to Rs 13,000 crores after which the decision was taken.
The power minister said that there has to be some acknowledgment of outstanding dues and for that, the option of paying the backlog in installments would be made available.
''As soon as the meters are available, we will start installing them in government offices and residences," he said.
Ministers, legislators and government offices mainly consist of the major defaulter's list.
The minister also said that dedicated police stations have been set up to check power thefts. 68 police stations for 75 districts have been set up so far.
''The state government has also created 2050 posts for police stations whose salaries and other costs will be paid by the Uttar Pradesh Power Corporation,'' he said.
Catch the latest news, live coverage and in-depth analyses from India and World. Follow us on Facebook and Twitter.


Projects
- Foundry UI elements
- The UI elements used in the SARD Foundry Appraisal System. Created using Bootstrap
- Laughing Bag
- An ongoing project where I have recorded friends laughing and created a site where the laughs overlay each other as you move the cursor around the screen.
Layouts
Bootstrap grid structures
The following are a series of very basic layout structures.


iterami
/
Guides.htm
/
EVE Online
/Omen
Fittings:
BUMP-CHEAP
SPEED-500MN-MAX
Fittings
Code
Notes
Bump Cheap
[Omen, BUMP-CHEAP] Damage Control II Overdrive Injector System II Overdrive Injector System II Overdrive Injector System II Overdrive Injector System II Overdrive Injector System II 500MN Y-T8 Compact Microwarpdrive Medium Shield Extender II Medium Shield Extender II Civilian Gatling Pulse Laser Drone Link Augmentor II Drone Link Augmentor II Drone Link Augmentor II Salvager II Medium Auxiliary Thrusters II Medium Auxiliary Thrusters II Medium Auxiliary Thrusters I Federation Navy Hobgoblin x5
Speed 500MN Max
[Omen, SPEED-500MN-MAX] Overdrive Injector System II Overdrive Injector System II Overdrive Injector System II Overdrive Injector System II Overdrive Injector System II Overdrive Injector System II Cormack's Modified 500MN Microwarpdrive Chelm's Modified Cap Recharger Unit W-634's Modified Drone Navigation Computer Drone Link Augmentor II Drone Link Augmentor II Drone Link Augmentor II Drone Link Augmentor II Salvager II Medium Capacitor Control Circuit I Medium Capacitor Control Circuit II Medium Capacitor Control Circuit II Federation Navy Hammerhead x1 Federation Navy Hobgoblin x5


{{site.description}}
Our enterprise platform is built entirely using CLJS. A modern LISP implementation targeting browser and server environments.
We ship code and tools. You decide what they are used for.
D9 Cloud provides a managed solution to host enterprise applications at scale.


Cookie Jar, this is a basic OO wrapper for cookies, it shares
the same globals as the session class, although they can be
overridden using this interface per 'set' call.
| Property | Description |
| $options | Protected Static The cookie options, such as prefix, path etc. |
| Method | Description |
| get() | Static Gets a cookie |
| invoke() | Static Magic method called when creating a new instance of the |
| offsetExists() | Checks whether a cookie is available |
| offsetGet() | Gets a cookie value |
| offsetSet() | Sets a new cookie |
| offsetUnset() | Deletes a cookie |
| set() | Static Sets a cookie |
Generated by Tuxxedo Engine 1.3.0 "Intergalactic" Alpha 1 (experimental).


{% extends "base.html" %} {% load staticfiles crispy_forms_tags %} {% block hero %}
Understanding Open Source And Open Source Communities
{{ speaker.about }}
Quia provident quasi, temporibus commodi maxime voluptatem minima aut laudantium.
Have something to share? We can save you a time frame to speak at the conference. Kindly fill this form and we'll get back to you as soon as possible.
Become a speaker
{{ item.about }}
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quaerat, inventore! Illum, modi itaque ratione ea, temporibus dolorem culpa, necessitatibus reprehenderit maiores sit nobis.
Nouvic Corporation
Immeuble Élégance Pressing
Tel. +237 693149896
Email us at. devoffuture@gmail.com


the and with Kawasaki {background that disease infection margin virus {border-style patients px;} #ffffff;} children The been but for was Infect clinical KD. associated found RT-PCR have viral Disease also disease: from has are syndrome al.Kawasaki antibodies coronary had human px; respiratory {font-family However, Med Viral adenovirus font-size infectious may not reports study Epstein-Barr IVIG KD, New SARS-CoV- Serum acute after atypical bocavirus coronavirus diagnosis double; its might which This agents al. all any between border-color border-width case cases could development different disease. diseaseJ dr. features many novel only response solid; various viruses who years {font-style {font-weight CAA. Coronavirus Dis Italian activation age agents, autoinflammatory bold can cause characteristics child courier; dedicated em; evidence febrile higher hospitalized infections inflammatory involvement isolated more occurrence parvovirus pt;} report risk specific such suggest than this virus, while


Famous birthdays for Dec. 9: Lori Greiner, John Malkovich
by UPI StaffDec. 9 (UPI) -- Those born on this date are under the sign of Sagittarius.
They include:
-- English poet John Milton in 1608
-- Actor Margaret Hamilton in 1902
-- Screenwriter Dalton Trumbo in 1905
-- Former Speaker of the House Thomas "Tip" O'Neill, D-Mass., in 1912
-- Actor Kirk Douglas in 1916 (age 103)
-- Comedian Redd Foxx in 1922
-- Actor Dick Van Patten in 1928
-- Actor John Cassavetes in 1929
-- Actor Buck Henry in 1930 (age 89)
-- Actor Judi Dench in 1934 (age 85)
-- Football Hall of Fame member Deacon Jones in 1938
-- Actor Beau Bridges in 1941 (age 78)
-- Football Hall of Fame member Dick Butkus in 1942 (age 77)
-- Actor Michael Nouri in 1945 (age 74)
-- Golf Hall of Fame member Tom Kite in 1949 (age 70)
-- Singer Joan Armatrading in 1950 (age 69)
-- Actor Michael Dorn in 1952 (age 67)
-- Actor John Malkovich in 1953 (age 66)
-- Singer Donny Osmond in 1957 (age 62)
-- Actor Joe Lando in 1961 (age 58)
-- Actor Felicity Huffman in 1962 (age 57)
-- Entrepreneur/TV personality Lori Greiner in 1969 (age 50)
-- Drummer Tre Cool, born Frank Wright III, in 1972 (age 47)
-- Pop singer Imogen Heap in 1977 (age 42)
-- Actor Jesse Metcalfe in 1978 (age 41)
-- Actor Simon Helberg in 1980 (age 39)
-- U.S. Olympic gold medal gymnast McKayla Maroney in 1995 (age 24)


~ "Soar beyond."~
Major medical mistakes are not all that uncommon.
From respitory to heart surgeryWe've designed a unified system that electronically manages medical records. The process is seamless.
The system begins with the loading patient data through an online form.
+
| Parakeet | The   Problem | The   Fix | The   Process |


{% extends "layout.html" %} {% block content %}
From 5am to 10pm
Cannot circulate
From 5am to 8pm
Costarrican authorities have placed a restriction on the amount of vehicles that may circulate depending on the day of the week and the last digit of your vehicle's license plate. These restrictions DO NOT APPLY TO RENTED CARS, but you must present proof that the car is rented to avoid the removal of the license plates and a ticket for 107,000.00CRC (about 180.00USD).


--- title: 2022 Oregon Voter Registration Forecasting author: Richard Craig date: '2021-08-04' slug: [] categories: - Forecasting - Oregon Politics tags: - Elections - Voter Registration - Politics - R Programming meta_img: images/image.png description: A stroll through how I forecasted the 2022 Oregon Registrations. ---
You can find the most up to date Oregon voter registration data here: https://data.oregon.gov/Administrative/Voter-Registration-Change-Over-Time/2ppg-zt4s
This next chunk in largely just cleaning up the data types and also selecting the correct rows of interest as the dataset contains many features that are just codes used by the state.
voters_clean<-voters%>%
mutate(Date=mdy(SYSDATE),House_District= as.factor(HD_CODE), Count=`COUNT(V.ID)`)%>%
select(Date,House_District,PARTY,Count)%>%
group_by(Date,House_District,PARTY)%>%
mutate(Total_For_Party=sum(Count))
voters_clean<-voters_clean%>%
select(c(-Count))%>%
unique()%>%
arrange(Date)
voters_clean<-voters_clean%>%
pivot_wider(id_cols = c("Date", "House_District"),names_from = PARTY, values_from = Total_For_Party)
voters_clean$`Americans Elect`[is.na(voters_clean$`Americans Elect`)] <- 0
voters_clean$`Non Partisan`[is.na(voters_clean$`Non Partisan`)] <- 0
voters_clean<-voters_clean%>%
mutate(Other2=Other+`Working Families Party of Oregon`+Progressive+`Pacific Green`+Constitution+Libertarian+Other+`Americans Elect`+`Non Partisan`,
District_Total = Democrat + Republican+ Other2+`Independent Party`+ Nonaffiliated)%>%
select(Date,House_District, Democrat, Republican, Independent=`Independent Party`, Nonaffiliated,Other=Other2,District_Total)%>%
drop_na()
This chunk was the bane of my existence for most of this project. As the dataset only contains the state house district, I needed to create a new column that was the Senate District. Thankfully, Oregon’s senate districts are simply two house districts. For any data scientists looking at this post, yes, I could have done this with a loop or two. I will admit that I did not out of complete laziness. If you want to know why these five ditrcists were chosen, check out my blog post on the growth of non-affiliated voters in Oregon.
senate_clean <- voters_clean
senate_clean$Senate_District <- "None"
senate_clean$Senate_District[senate_clean$House_District == "SR13"] <- "SS07"
senate_clean$Senate_District[senate_clean$House_District == "SR14"] <- "SS07"
senate_clean$Senate_District[senate_clean$House_District == "SR15"] <- "SS08"
senate_clean$Senate_District[senate_clean$House_District == "SR16"] <- "SS08"
senate_clean$Senate_District[senate_clean$House_District == "SR19"] <- "SS10"
senate_clean$Senate_District[senate_clean$House_District == "SR20"] <- "SS10"
senate_clean$Senate_District[senate_clean$House_District == "SR45"] <- "SS23"
senate_clean$Senate_District[senate_clean$House_District == "SR46"] <- "SS23"
senate_clean$Senate_District[senate_clean$House_District == "SR59"] <- "SS30"
senate_clean$Senate_District[senate_clean$House_District == "SR60"] <- "SS30"
senate_clean<-senate_clean%>%
filter(Senate_District != "None")%>%
as.tibble()%>%
select(-c(House_District))
## Warning: `as.tibble()` was deprecated in tibble 2.0.0.
## Please use `as_tibble()` instead.
## The signature and semantics have changed, see `?as_tibble`.
After creating the Senate District feature, I could then aggregate by it and create the final Senate dataset that I could pull apart to create individual district time series datasets.
senate_clean2<-senate_clean%>%
group_by(Date,Senate_District)%>%
mutate(Republican = sum(Republican),
Democrat = sum(Democrat),
Other = sum(Other),
Independent = sum(Independent),
Nonaffiliated = sum(Nonaffiliated))
senate_clean2<-senate_clean2%>%
mutate(District_Total = Democrat + Republican+ Other + Independent+ Nonaffiliated)%>%
drop_na()%>%
select(Date,Senate_District, Democrat, Republican, Independent, Nonaffiliated,Other,District_Total)%>%
unique()
Finally, I broke down and created a for loop to go through and pull out all the data for each district and create the five individual datasets. After this step, I could now forecast voter registration for the 2022 Midterm election.
senate_districts_list <- senate_clean2%>%
group_by(Senate_District)%>%
select(Senate_District)%>%
unique()%>%
arrange(Senate_District)
senate_districts_list<-apply(senate_districts_list,1,as.list)
for (val in senate_districts_list) {
temp <- senate_clean2%>%
filter(Senate_District == val)%>%
filter(Date != ymd("2017-11-14"))%>%
mutate(Date = yearmonth(floor_date(as_date(Date), "month")))
name <- paste("District", toString(val), sep = "_")
assign(name,temp)
}
rm(temp,val,name,count,senate_districts_list)
## Warning in rm(temp, val, name, count, senate_districts_list): object 'count' not
## found
In a previous file, I tested several different time series models including ETS, ARIMA and simple Linear models. Across several of the datasets, I found that ARIMA was most accurate on random samples. As the data is stationary, most of the models were forecasting Naive or Drift models which were accurate, but they weren’t capturing any of the error in the data. Overall, the models were incredibly close and the accuracy came down to the size of the window. After looking at the model’s accuracy and the relatively long window of 17 months I was forecasting, I ended up choosing the ARIMA model. After choosing that, it just came down to applying the model on each of the parties within each district. On this, I did look into grouped time series methods, however, as I was forecasting the simple number of voters for each party, non-grouped methods are effective. I have also only included the 7th district as the other four districts’ code is identical.
TS<-District_SS07%>%
as_tsibble()
Democrat<-TS %>%
model(ARIMA(Democrat)) %>%
forecast(h= 17)%>%
as.tibble()%>%
select(Date,Democrat=.mean)%>%
mutate(Democrat=round(Democrat))
Republican<-TS %>%
model(ARIMA(Republican)) %>%
forecast(h= 17)%>%
as.tibble()%>%
select(Date,Republican=.mean)%>%
mutate(Republican=round(Republican))
Independent<-TS %>%
model(ARIMA(Independent)) %>%
forecast(h= 17)%>%
as.tibble()%>%
select(Date,Independent=.mean)%>%
mutate(Independent=round(Independent))
Nonaffiliated<-TS %>%
model(ARIMA(Nonaffiliated)) %>%
forecast(h= 17)%>%
as.tibble()%>%
select(Date,Nonaffiliated=.mean)%>%
mutate(Nonaffiliated=round(Nonaffiliated))
Other<-TS %>%
model(ARIMA(Other)) %>%
forecast(h= 17)%>%
as.tibble()%>%
select(Date,Other=.mean)%>%
mutate(Other=round(Other))
District_SS07_Forecast<-left_join(Democrat,Republican)%>%
left_join(Independent)%>%
left_join(Nonaffiliated)%>%
left_join(Other)
District_SS07_Forecast<-District_SS07_Forecast%>%
mutate(Senate_District="SS07",District_Total=Democrat+Republican+Independent+Nonaffiliated+Other)
District_SS07_Complete<-full_join(District_SS07,District_SS07_Forecast)
rm(Democrat,Republican,Independent,Nonaffiliated,Other,TS)


Please check your url address again!
This page will redirect to homepage in 5 sec.!
Copyright © 2016-2017 Siczones.


This Processors puts the contents of a FlowFile to a Topic in Apache Kafka. The full contents of a FlowFile becomes the contents of a single message in Kafka. This message is optionally assigned a key by using the <Kafka Key> Property.
The Processor allows the user to configure an optional Message Delimiter that can be used to send many messages per FlowFile. For example, a \n could be used to indicate that the contents of the FlowFile should be used to send one message per line of text. If the property is not set, the entire contents of the FlowFile will be sent as a single message. When using the delimiter, if some messages are successfully sent but other messages fail to send, the FlowFile will be FORKed into two child FlowFiles, with the successfully sent messages being routed to 'success' and the messages that could not be sent going to 'failure'.


The server is currently unavailable. The server could be temporarily down or busy. Please try again in a few moments.


Weather Dashboard
Search for a City:
Please enter a city to Search.
No Search Entered
(
Today
)
Temprature:
°F
Humidity:
%
Wind Speed:
MPH
UV Index:
9.7
5-Day Forecast:
Temp:
°F
Humidity:
%
Temp:
°F
Humidity:
%
Temp:
°F
Humidity:
%
Temp:
°F
Humidity:
%
Temp:
°F
Humidity:
%


Across: 1. American cousin has very strong hair? (6) 4. Skilled at making b-beer outside (4) 7. Stop in Texas, say, when carrying silver north (8) 8. Donkey swallowed Lawrence King's flowers (6) 10. Sets out again in coloured boats (8) 13. Tricorne is out of date (3 3) 14. Jack goes round Union Street to find sauce (7) 15. Wonder about tranquiliser (6) 18. Bird is moved in place (7) 19. Support the Queen! Right? (6) 20. Restaurant is, in part, a vernacular building (7) 25. Terrible foul we note down incorrectly (6) 26. No singlet for youngster at home (8) 27. Celebration with Eliot back in prison (6) 28. Price due for foot care (8) 29. Large numbers of articles for sale (4) 30. Be present at the completion of one race (6) Down: 1. In the dark about northern drink (6) 2. Soldier, 1across, may be a crazy person! (6) 3. Scott gets in eastern ensembles (6) 5. Boys found in Essex town (8) 6. Help neat trumpeter with trunk (8) 7. Sounds like labourer may move from site to site (4) 9. Heavenly body posed by vase (6) 11. Wild about a Parisian ceremony (7) 12. Tried very hard with Bob to invert liquid (7) 13. Puts in position to make inroads (7) 16. Produces piece in a couple of seconds (6) 17. Fit in easily with violated characters (8) 18. Sulky trainee worker follows favourite in (8) 21. Hate being dispatched again (6) 22. Dry? In river? Must be the clothes! (6) 23. Put out, but reached the top, we hear (6) 24. Leer at own goal by the French (4)


Fuad Rahman, Ph.D., is an entrepreneur with extensive background in building companies in the area of software technology.
Fuad is a member of the Domain Steering Committee of the XBRL.US that oversees the development of taxonomies to meet the business reporting needs of key markets in the United States. In the area of regulatory compliance, this is a singular honor - because this puts him in a very select group of industry leaders in the US and the world (http://xbrl.us/membership/Pages/committees.aspx).
Fuad has published widely in the scientific journals. His published body of work (http://publicationslist.org/fuad) comprises of over 80 technical peer reviewed articles in the scientific literature including 6 book chapters and 24 journal papers. He has worked on the editorial boards of technical journals, acted as referee to many journals and worked as technical committee member in many international conferences.
Fuad has a Ph.D. in Ubiquitous Computer Vision and Pattern Recognition from England.


|
Fmt
|
A dynamically growing memory buffer for trivially copyable/constructible types with the first SIZE
elements stored in the object itself.
More...
#include <format.h>
Public Types | |
| typedef T | value_type |
| typedef const T & | const_reference |
| Public Types inherited from internal::basic_buffer< T > | |
| typedef T | value_type |
| typedef const T & | const_reference |
Public Member Functions | |
| basic_memory_buffer (const Allocator &alloc=Allocator()) | |
| basic_memory_buffer (basic_memory_buffer &&other) | |
Constructs a :class:fmt::basic_memory_buffer object moving the content of the other object to it. More... | |
| basic_memory_buffer & | operator= (basic_memory_buffer &&other) |
Moves the content of the other basic_memory_buffer object to this one. More... | |
| Allocator | get_allocator () const |
| Public Member Functions inherited from internal::basic_buffer< T > | |
| T * | begin () FMT_NOEXCEPT |
| T * | end () FMT_NOEXCEPT |
| std::size_t | size () const FMT_NOEXCEPT |
| Returns the size of this buffer. More... | |
| std::size_t | capacity () const FMT_NOEXCEPT |
| Returns the capacity of this buffer. More... | |
| T * | data () FMT_NOEXCEPT |
| Returns a pointer to the buffer data. More... | |
| const T * | data () const FMT_NOEXCEPT |
| Returns a pointer to the buffer data. More... | |
| void | resize (std::size_t new_size) |
| Resizes the buffer. More... | |
| void | clear () |
| Clears this buffer. More... | |
| void | reserve (std::size_t new_capacity) |
| Reserves space to store at least capacity elements. More... | |
| void | push_back (const T &value) |
| template<typename U > | |
| void | append (const U *begin, const U *end) |
| Appends data to the end of the buffer. More... | |
| T & | operator[] (std::size_t index) |
| const T & | operator[] (std::size_t index) const |
Protected Member Functions | |
| void | grow (std::size_t size) FMT_OVERRIDE |
| Increases the buffer capacity to hold at least capacity elements. More... | |
| Protected Member Functions inherited from internal::basic_buffer< T > | |
| basic_buffer (std::size_t sz) FMT_NOEXCEPT | |
| basic_buffer (T *p=FMT_NULL, std::size_t sz=0, std::size_t cap=0) FMT_NOEXCEPT | |
| void | set (T *buf_data, std::size_t buf_capacity) FMT_NOEXCEPT |
| Sets the buffer data and capacity. More... | |
Private Member Functions | |
| void | deallocate () |
| void | move (basic_memory_buffer &other) |
Private Attributes | |
| T | store_ [SIZE] |
A dynamically growing memory buffer for trivially copyable/constructible types with the first SIZE
elements stored in the object itself.
You can use one of the following typedefs for common character types:
+-------------—+---------------------------—+ | Type | Definition | +================+==============================+ | memory_buffer | basic_memory_buffer<char> | +-------------—+---------------------------—+ | wmemory_buffer | basic_memory_buffer<wchar_t> | +-------------—+---------------------------—+
Example**::
fmt::memory_buffer out; format_to(out, "The answer is {}.", 42);
This will append the following output to the out
object:
.. code-block:: none
The answer is 42.
The output can be converted to an std::string
with to_string(out)
.
|
inline |
Constructs a :class:fmt::basic_memory_buffer
object moving the content of the other object to it.
|
protectedvirtual |
Increases the buffer capacity to hold at least capacity elements.
Implements internal::basic_buffer< T >.
|
inline |
Moves the content of the other basic_memory_buffer
object to this one.


{% load static %}
Django is a high-level Python Web framework that encourages rapid development and clean, pragmatic design. Built by experienced developers, it takes care of much of the hassle of Web development, so you can focus on writing your app without needing to reinvent the wheel. It’s free and open source.
Telegram is a cloud-based instant messaging and voice over IP service. Telegram client apps are available for Android, iOS, Windows Phone, Windows, macOS and Linux. Users can send messages and exchange photos, videos, stickers, audio and files of any type.
Djelegram is yet another client for Telegram, developed using Django harnessing robust underlying infrastructure of Telegram APIs. It provides you to tap in to your Telegram and get in contanct with you loved ones from anywhere.


Heart Disease Prediction Using ML
Age
Sex
Select your Gender
Male
Female
Chest Pain Type
Select Type of Pain
Typical Angina
Atypical Angina
Non-anginal Pain
Asymptomatic
BP in mg/dl
Cholestrol in mg/dl
Fasting Blood Sugar over 120
Select an Option
False
True
ECG Results
Select an Option
Normal
Having ST-T wave abnormality
Probable or definite left ventricular hypertrophy
Max Heart Rate
Exercise Induced Angina
Select an Option
No
Yes
ST Depression Induced
Slope of the Peak Exercise ST Segment
Select an Option
Upsloping
Flat
Downsloping
Number of Vessels Colored by Flourosopy
Select an Option
0
1
2
3
Thalassemia
Select an Option
Normal
Fixed defect
Reversable defect
{{result}}


Assistant Performer This page currently runs in the latest version of Chrome, with the Jazz plug-in (v 1.3) installed. (work in progress)


User {{ request.who_requested.user.first_name }} {{ request.who_requested.user.last_name }} ({{ request.who_requested.user.email }}) of {{ request.who_requested.club.name }} has requested the following fixture be rearranged.
Fixture: {{ fixture.date }} - {{ fixture.team_a.club.name }} {{ fixture.team_a.name }} vs {{ fixture.team_b.club.name }} {{ fixture.team_b.name }}
New Date: {{ request.new_date_time }}
Reason: {{ request.reason }}
A follow up email will confirm the date of rearrangement.


The quick and dirty Domino Cloudant export
Moving data out of Domino never has been hard with all the APIs available. The challenge always has been: move them where? Ignoring for a second all security considerations, the challenge is to find a target structure that matches the Domino model. Neither flat table storage nor RDBMS fit that very well.
A close contender is MongoDB which is used in one compelling Notes retirement offering. However the closest match in concept and structure is Apache CouchDB, not surprisingly due to its heritage and origin.
It is maintained by a team led by the highly skilled Jan Lehnardt and of course there are differences to Notes.
But the fit is good enough. Using the lightweight Java library Ektorp exporting a set of documents from Notes to CouchDB is a breeze. The core class is a simple mapping of a Notes document to a JSON structure:
The uniqueID used in Notes can be used as the ID in CouchDB, thus make it easy to even update documents both ways if required. In your agent you need to create a Java collection consisting of the unids of the documents you want to export. You could do that using a view or the document collection. Here you go:
The quick and dirty part: no handling of MIME, duplicate attachment names, embedded objects etc. So - as usual YMMV
A close contender is MongoDB which is used in one compelling Notes retirement offering. However the closest match in concept and structure is Apache CouchDB, not surprisingly due to its heritage and origin.
It is maintained by a team led by the highly skilled Jan Lehnardt and of course there are differences to Notes.
But the fit is good enough. Using the lightweight Java library Ektorp exporting a set of documents from Notes to CouchDB is a breeze. The core class is a simple mapping of a Notes document to a JSON structure:
package com.notessensei.export;
import java.util.HashMap;
import java.util.Map;
import java.util.Vector;
import lotus.domino.Document;
import lotus.domino.Item;
import lotus.domino.NotesException;
public class NotesJsonDoc {
public static String ID_FIELD = "_id";
public static String REV_FIELD = "_rev";
private Map<String, String> content = new HashMap<String, String>();
@SuppressWarnings("rawtypes")
public NotesJsonDoc(Document source) throws NotesException {
Vector allItems = source.getItems();
for (Object itemObject : allItems) {
Item item = (Item) itemObject;
this.content.put(item.getName(), item.getText());
}
this.content.put(ID_FIELD, source.getUniversalID());
}
public Map<String, String> getContent() {
return this.content;
}
public NotesJsonDoc setRevision(String revision) {
this.content.put(REV_FIELD, revision);
return this;
}
public String getId() {
return this.content.get(ID_FIELD);
}
}
##
The uniqueID used in Notes can be used as the ID in CouchDB, thus make it easy to even update documents both ways if required. In your agent you need to create a Java collection consisting of the unids of the documents you want to export. You could do that using a view or the document collection. Here you go:
package com.notessensei.export;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.util.Collection;
import java.util.Map;
import java.util.Vector;
import org.ektorp.AttachmentInputStream;
import org.ektorp.CouchDbConnector;
import org.ektorp.CouchDbInstance;
import org.ektorp.http.HttpClient;
import org.ektorp.http.StdHttpClient;
import org.ektorp.impl.StdCouchDbInstance;
import lotus.domino.EmbeddedObject;
import lotus.domino.NotesException;
import lotus.domino.Session;
import lotus.domino.Database;
import lotus.domino.Document;
public class DataUploader {
private CouchDbConnector getDB(String protocol, String credentials, String targetURL, String couchDBName)
throws MalformedURLException {
try {
HttpClient httpClient = new StdHttpClient.Builder().url(protocol + credentials + targetURL).build();
CouchDbInstance dbInstance = new StdCouchDbInstance(httpClient);
// if the second parameter is true, the database will be created if
// it doesn't exists
CouchDbConnector db = dbInstance.createConnector(couchDBName, true);
return db;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public void uploadData(Session s, Database nsf, Collection<String> unids, String protocol, String credentials,
String targetURL, String couchDBName) throws MalformedURLException {
CouchDbConnector db = this.getDB(protocol, credentials, targetURL, couchDBName);
String dbURL = protocol + targetURL + "/" + couchDBName + "/";
for (String unid : unids) {
Document doc = null;
try {
doc = nsf.getDocumentByUNID(unid);
this.uploadOneDocument(s, dbURL, doc, db);
} catch (NotesException e) {
e.printStackTrace();
} finally {
try {
if (doc != null) {
doc.recycle();
}
} catch (NotesException e) {
// no action required
}
}
}
}
@SuppressWarnings("rawtypes")
private void uploadOneDocument(Session s, String dbURL, Document doc, CouchDbConnector db) throws NotesException {
String unid = doc.getUniversalID();
String docURL = dbURL + unid;
NotesJsonDoc payLoad = new NotesJsonDoc(doc);
// Capture the directURL to the JSON document
payLoad.getContent().put("docURL", docURL);
// Create document
db.create(payLoad.getContent());
// Handle attachments
try {
if (doc.hasEmbedded()) {
Vector aNames = s.evaluate("@AttachmentNames", doc);
if (!aNames.isEmpty()) {
Map existingDoc = db.get(Map.class, payLoad.getId());
String rev = existingDoc.get(NotesJsonDoc.REV_FIELD).toString();
for (Object aNameObj : aNames) {
this.uploadAttachment(doc, db, rev, aNameObj.toString());
}
}
}
} catch (NotesException e) {
e.printStackTrace();
}
}
/*
* Uploads attachments to the Cloudant database
*/
private void uploadAttachment(Document doc, CouchDbConnector db, String rev, String attName) {
try {
EmbeddedObject embObj = doc.getAttachment(attName);
String attMime = this.getMimeType(attName);
InputStream embeddedInput = embObj.getInputStream();
AttachmentInputStream attStream = new AttachmentInputStream(attName, embeddedInput, attMime);
db.createAttachment(doc.getUniversalID(), rev, attStream);
embeddedInput.close();
embObj.recycle();
} catch (NotesException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/*
* Returns the mime type based on the extension only since we don't have a
*file on the file system
*/
private String getMimeType(String attName) {
String ext = attName.substring(attName.lastIndexOf(".") + 1);
return MimeTypes.getMimeType(ext);
}
}
The quick and dirty part: no handling of MIME, duplicate attachment names, embedded objects etc. So - as usual YMMV
Posted by Stephan H Wissel on 21 January 2016 | Comments (1) | categories: Bluemix


Overview + popup is also a fundamental state so this text is processed by search engine crawlers (Google,Yahoo,Bing...), because you can reach this state on load time with a URL like this (you can find this text in the end of the page loaded).
Click to exit


Javascript focuses on the interactivity of a website, for example when a user fills out a form, they click the submit button at the end and the form gets sent. HTML focuses on the structure of a website, for example creating content such as paragraphs and images. CSS focuses on the visual styling of a website, for example what colour will elements be throughout the website such as background colour, headings and links.
Control flow is the controlling of the order in which code is run. For javascript, you can think of this as the order in which statements are run in the script from first line to last line.
Loops are a block of code that repeatedly runs until a certain condition is met and then they stop. The most common types are "for loop" and "do while loop".
An example of Control Flow would be:
When I wakeup in the morning I have breakfast consisting of toast, weetbix in a bowl with milk and a banana and eat it in that order.
The Loop would be:
That I repeat this process every morning every weekday.
On the odd occasion I may run out of bananans, so I won't have a banana on that day and this is when the loop will stop.
Accessing data from arrays means getting data from an array that stores data. Data has an index in an array, with the first index starting at zero, so if we want have an array called array then the first data would be array[0] and that's it's value. We would access this data by setting a variable equal to the index value of the array, so if we have a variable called data, then we would use the code var data = array[0] to get access to the first data in this array.
Just like arrays objects are used for storing data. However accessing data from objects is different from arrays because objects can have more than one property related to them. An example would be a ship, having properties like type, year built, displacement and deadweight. Object data can be accessed either by dot notation objectname.property or bracket notation objectname["property"].
Functions are a block of code, which has a series of commands that either perform actions or calculate a value. To use a function, you must define it somewhere in the block of code from where you wish to call it, so that it returns a result. Functions are used to make performing of certain tasks easier for example calculations, taking input from a user, submitting forms and drop down links.


COLLECTIONS()
COLLECTIONS() → docArray
Return an array of collections.
returns
docArray
(array): each collection as a document with attributes
name
and
_id
in an array


@* * Copyright 2021 HM Revenue & Customs * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *@ @import models.CostsAtLegislationStartModel @import uk.gov.hmrc.play.views.html.{helpers => govHelpers} @import views.html.helpers._ @import play.api.Application @import config.ApplicationConfig @(data: Form[CostsAtLegislationStartModel])(implicit request: Request[_], messages: Messages, application: Application, applicationConfig: ApplicationConfig) @main_template(Messages("calc.costsAtLegislationStart.title")) { @Messages("calc.base.back") @errorSummary(data, "costs", "costs")
${Messages("calc.costsAtLegislationStart.helpText")}
"""), labelClasses = "heading-small" ), hideLegend = true, hidePanel = true ) } }


What makes for good design and how good design can affect perception.
What can we say about the choices that each designer made with regard to fonts, colors, illustrative styles,
and the intended message behind the design?
Who's the target audience for each of these images?
Is it the same audience?
Should the audience matter?
Absolutely, the audience should matter.
Part of being a good designer is learning who the audience is and creating a visual that will appeal to that group.
So what kinds of things do people find attractive in designs?
Well, there's things symmetry and alignment.
The right colors and fonts can also help communicate a message to the viewer, along with any text or images that are
included.
All of these design elements provide a perception of quality and honesty.
And all of these things help to create good design.
What do we think when you say good design?
If it looks good on the outside, like a package, or a brochure, or a website, mustn't the product or service also be
of high quality on the inside, and more worthy of our consideration than that of a competitor, say, with an inferior
design?
These are great questions worth pondering.
As a web designer, you have a responsibility to your clients to create designs that promote their image,
their products, or their services, while also attracting their target audience.
Hopefully some of this will help improve the aesthetic quality in our designs.
In Web Design
Jason Santa Maria
Link
Chris Coyier
Link
Meagan Fisher
Link
Jeffrey Zeldman
Link
Rachel Andrew
Link
Paul Boag
Aaron Gustafson
Link
Rachel Hinman
Link
Cameron Moll
Link
Luke Wroblewski
Link
Dan Cederholm
Link
Andy Clarke
Link
Simon Collison
Link
Elliot Jay Stocks
Link
Sarah Parmenter
Link
In the world of graphic design
There are noteworthy designers
Milton Glaser
Paula Scher
Link
Saul Bass
Link
Paul Rand
Link
Michael Bierut
Link
Stephan Sagmeister
Link
Massimo Vignelli
Link
David Carson
Link
Louise Fili
Link
Ellen Lupton
Link
Karlsson Wilker
Link
Jessica Hische
Link


|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: INNER | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object | +--javax.swing.AbstractAction | +--junit.quilt.ui.ResourceAction | +--junit.quilt.framework.ProgramAdapter | +--junit.quilt.adapter.JUnitAdapter
| Fields inherited from class javax.swing.AbstractAction |
changeSupport, enabled |
| Fields inherited from interface javax.swing.Action |
ACCELERATOR_KEY, ACTION_COMMAND_KEY, DEFAULT, LONG_DESCRIPTION, MNEMONIC_KEY, NAME, SHORT_DESCRIPTION, SMALL_ICON |
| Constructor Summary | |
JUnitAdapter()
|
| Method Summary | |
void |
go()
|
| Methods inherited from class junit.quilt.framework.ProgramAdapter |
actionPerformed, getEvent, run, setEvent |
| Methods inherited from class junit.quilt.ui.ResourceAction |
getArgs |
| Methods inherited from class javax.swing.AbstractAction |
addPropertyChangeListener, clone, firePropertyChange, getKeys, getValue, isEnabled, putValue, removePropertyChangeListener, setEnabled |
| Methods inherited from class java.lang.Object |
equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Constructor Detail |
public JUnitAdapter()
| Method Detail |
public void go()
go
in class ProgramAdapter
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: INNER | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |


The Road to Home
June 18, 2015
Made last it seen went no just when of by. Occasional entreaties comparison me difficulty so themselves. At brother inquiry of offices without do my service. As particular to companions at sentiments. Weather however luckily enquire so certain do. Aware did stood was day under ask. Dearest affixed enquire on explain opinion he. Reached who the mrs joy offices pleased. Towards did colonel article any parties.
Needed feebly dining oh talked wisdom oppose at. Applauded use attempted strangers now are middleton concluded had. It is tried no added purse shall no on truth. Pleased anxious or as in by viewing forbade minutes prevent. Too leave had those get being led weeks blind. Had men rose from down lady able. Its son him ferrars proceed six parlors. Her say projection age announcing decisively men. Few gay sir those green men timed downs widow chief. Prevailed remainder may propriety can and. Now for manners use has company believe parlors. Least nor party who wrote while did.
We diminution preference thoroughly if. Joy deal pain view much her time. Led young gay would now state. Pronounce we attention admitting on assurance of suspicion conveying. That his west quit had met till. Of advantage he attending household at do perceived. Middleton in objection discovery as agreeable. Edward thrown dining so he my around to.
Sense child do state to defer mr of forty. Become latter but nor abroad wisdom waited. Was delivered gentleman acuteness but daughters. In as of whole as match asked. Pleasure exertion put add entrance distance drawings. In equally matters showing greatly it as. Want name any wise are able park when. Saw vicinity judgment remember finished men throwing.
Too leave had those get being led weeks blind. Had men rose from down lady able. Its son him ferrars proceed six parlors. Her say projection age announcing decisively men.


Exifr
📑 The fastest and most versatile JavaScript EXIF reading library.
For docs and more information check out the GitHub repository
Input
APP1 - Thumbnail
Examples
You can find more examples here in the GitHub repo.
They come in all forms, shapes and sizes. There are some that are:
Isomorphic (works the same in Node and browser)
specific to Node's file system API and other are tailored to browser
various input formats like Blob, ArrayBuffer, raw <img> tags, Base64 string, etc...
CommonJS or ES Modules
Web worker example
Extract the full exif or just the one little thing you need
Tryna-be-scientific benchmark
License
MIT, Mike Kovařík


The datepicker is tied to a standard form input field. It opens an interactive calendar in small overlay.
| S | M | T | W | T | F | S |
|---|---|---|---|---|---|---|
| 28 | 29 | 30 | 31 | 1 | 2 | 3 |
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 1 |
| Jan | Feb | Mar | Apr |
| May | Jun | Jul | Aug |
| Sep | Oct | Nov | Dec |


epsilon.ampauth
integrates Twisted Cred with
twisted.protocols.amp
, providing support for selecting a
IBoxReceiver
based on the result of a Cred login.
Readers should familiarize themselves with the following concepts in order to understand all sections of this document:
AMP
CredAMPServerFactory
is a factory for the CredReceiver
protocol, an
AMP
subclass which implements responders for commands
which allow a client to prove their identity. It uses a
Portal
to handle these commands and retrieve an IBoxReceiver
which
will be used to handle all further AMP boxes it receives.
Add
and Adder
together define a simple AMP
protocol for adding two integers together. AdditionRealm
provides the necessary integration between this AMP protocol and Cred,
creating new Adder
instances whenever an
IBoxReceiver
is requested - which will be whenever a client
attempts to authenticate itself to the server.
AMP clients can authenticate with an AMP server using login
. login
takes a
connected AMP instance and a credentials object as arguments and returns
a Deferred
which fires when authentication finishes.
The TCP connection is set up as usual, and the Add
command
is also issued in the usual way. The only change from a normal AMP
client is the use of login
after a connection has been set
up but before any commands are issued.
epsilon.ampauth
includes an CredentialsChecker
for validating
one-time pads: OneTimePadChecker
. If this checker is
registered with the portal, clients may use the OTPLogin
command to authenticate.


Macro-ing Macros Cost: 1000 Macros are now worth 0.4 Cps instead of 0.2
Multi-Cursor,100 clicks required Costs:10000, Gives 1 more Code Per Click
Inter-Linking Languages, Cost:100,000 +10 cps per language
Double keyboared input, costs 10000000, Doubles Your Code Per Click
AI Cooperation, Cost 50000000, Doubles AI Code per seconds
Better AI Processing, Cost<PHONE_NUMBER>0, Tripples AI's Coding Code Per Second
AI Friendships, Costs<PHONE_NUMBER>0, Consious AI's Code Per Second is quadroupled
AI assistance, Cost<PHONE_NUMBER>000, Every AI you have is adding 1 code to your Code Per Click
Self Aware Robots, Cost<PHONE_NUMBER>000, Self Aware AI Code Per Second * 2
Attempting to Solve The meaning of life... Cost<PHONE_NUMBER>000, Does nothing... yet
Really?? You've played this much???? Cost<PHONE_NUMBER>0000, does ????
Solve the meaning of life, cost<PHONE_NUMBER>0000,Everything *2
Jacking In, Costs<PHONE_NUMBER>00000, Jack into the simulation, Code per Click +100000
WARNIMG!! WARNING!!!! WARNING!!! AI ARE GOING µÇÅêììσö╜├J9┬, Costs<PHONE_NUMBER>000000000000000000000
Welcome to Code Clicker!
How to play:
Start off by clicking the gif of the running code. Congratulations you have just got your first line of code typed! Now keep clicking iuntil you have enough lines of code to purchase the "Macro" on the right. These are buildings, each buliding cost a different amount and writes a different amount of code a second. Buildings will auto-click the gif for you so you can sit down and relax.The more expensive the building, the more it will auto-click. Once you have enough, buy the next building. The "New language". You can click the gif as much as you want so that you can code faster.
CPS=Code per second
1.Macros:0.2 CPS
2.New Language:1 CPS
3.API's:5 CPS
4.Monitors:10 CPS
5.Libraries:50 CPS
6.Engines:200 CPS
7.Types of AI's:5,000 CPS
8.AI's coding:10,000 CPS
9.Conscious AI's:50,000 CPS
10.Self Aware AI's:100,000 CPS
11.Supercomputers:1,000,000 CPS


Users suffer when applications they use are beset by inconsistent interface behaviors and visual designs. Inconsistency makes products more difficult to learn and use by requiring users to relearn common interactions when moving from product to product or when migrating from competitive products. PatternFly addresses this problem by providing a set of consistent visual design principles and behavioral patterns that can be applied across enterprise IT products and applications. The goal is to develop reusable assets and guidelines that can be applied broadly by either designers or developers of applications targeted for a variety of IT users including developers, system administrators, and business professionals.
Users suffer when applications they use are beset by inconsistent interface behaviors and visual designs. Inconsistency makes products more difficult to learn and use by requiring users to relearn common interactions when moving from product to product or when migrating from competitive products. PatternFly addresses this problem by providing a set of consistent visual design principles and behavioral patterns that can be applied across enterprise IT products and applications. The goal is to develop reusable assets and guidelines that can be applied broadly by either designers or developers of applications targeted for a variety of IT users including developers, system administrators, and business professionals.
PatternFly addresses this problem by providing a set of consistent visual design principles and behavioral patterns that can be applied across enterprise IT products and applications.
PatternFly addresses this problem by providing a set of consistent visual design principles and behavioral patterns that can be applied across enterprise IT products and applications.
PatternFly addresses this problem by providing a set of consistent visual design principles and behavioral patterns that can be applied across enterprise IT products and applications.


Disclaimer: I am not great at giving presentations, but without these recommendations, I would suck even more 0. Be excited about what you talk about (if even you are bored, it will be hard to motivate people to listen and participate). Giving the talk must be important for you. 1. Prepare presentation (do you need to start demo? Does it work?) 2. Rehearse (do you have enough time? Do you feel a logical flow?) 3. Don't overload slides. Never rush, just because you talk faster does not mean people understand more. Rather the opposite. 4. Try to think from the perspective of the audience. What do they know? What might they be interesting in. Do not waste their attention. Have a clear line of thought (what are you trying to say? Do you have a clear message?) 5. Tell a Story 6. Last Slide has link to relevant sources (author, slides, summary) for people to take photos


Capstone Project for
https://www.coursera.org/specializations/full-stack-react
Bootstrap, Dec'18
React, Jan'19
React.Native, Feb'19
Node.js, Mar'19
Clearly express the central idea of your project, and identify the problem being addressed Delineate a set of features that you expect your website and app should support Identify other projects that might have similar features and would act as exemplars for your project.
Document the process of starting from an idea and reaching the conclusion of the project, not just the implementation, but also recognizing the process of reaching the end. Learn lessons from the process in understanding what worked and what did not, and being able to make intelligent choices in the future based on the experience.
Clearly express the central idea of your project, and identify the problem being addressed Delineate a set of features that you expect your website and app should support Identify other projects that might have similar features and would act as exemplars for your project.
Document the process of starting from an idea and reaching the conclusion of the project, not just the implementation, but also recognizing the process of reaching the end. Learn lessons from the process in understanding what worked and what did not, and being able to make intelligent choices in the future based on the experience.
Clearly express the central idea of your project, and identify the problem being addressed Delineate a set of features that you expect your website and app should support Identify other projects that might have similar features and would act as exemplars for your project.
Document the process of starting from an idea and reaching the conclusion of the project, not just the implementation, but also recognizing the process of reaching the end. Learn lessons from the process in understanding what worked and what did not, and being able to make intelligent choices in the future based on the experience.
Clearly express the central idea of your project, and identify the problem being addressed Delineate a set of features that you expect your website and app should support Identify other projects that might have similar features and would act as exemplars for your project.
Document the process of starting from an idea and reaching the conclusion of the project, not just the implementation, but also recognizing the process of reaching the end. Learn lessons from the process in understanding what worked and what did not, and being able to make intelligent choices in the future based on the experience.
The first step in your journey towards the implementation of the Capstone project begins with an idea. In this module you will develop the idea for your project, the set of expected features, survey the market to look at similar ideas to enable you to differentiate your project from others, while at the same time drawing inspiration from them. You are required to submit a formal ideation report following the structure given in the template. This will enable your peers to provide you feedback and suggestions for your project. Before you get started on a project, the first step is to develop the idea for the project. In this module you will explore how you develop your idea and come up with possible set of features for your project. At the end of this step you should be able to: Clearly express the central idea of your project, and identify the problem being addressed Delineate a set of features that you expect your website and app should support Identify other projects that might have similar features and would act as exemplars for your project
Now that you are more clear about your project idea, it's time to conceive how your project is going to look like for the end-users. This is the time to design the user interface and the flow of your application. User interface design and prototyping helps you to conceptualize the look and feel of your application. This can be achieved in two ways: using wireframe diagrams, or using prototyping tools. We provide links to wireframing and prototyping tools in the additional resources. The focus in this lesson is to be able to visually represent various UI elements to enable designing your application. The aim is to deliver an reasonable representation of the end-user experience with your application At the end of this lesson, you should be able to: Construct a wireframe diagram to visually represent the structure of your user interface Construct a prototype to enable understanding the flow of your application
This is the final stretch before you complete your project. By this time you should already have a good scaffolding for your website. As you flesh out your project and race towards completion, it is time to pause and take stock of the current situation. Perhaps a critical look back at the past, with the view of learning from our experience and consolidating this learning into an effective, organized and repeatable process is in order. Upon completion of the project it is important not only to demonstrate the working project, but also summarize the process of reaching the final goal. At the end of this lesson, you will be able to: Document the process of starting from an idea and reaching the conclusion of the project, not just the implementation, but also recognizing the process of reaching the end. Learn lessons from the process in understanding what worked and what did not, and being able to make intelligent choices in the future based on the experience Understand the design and development process through the practice.


JSON is a format for storing and transporting data. JSON is often used when data is sent from a server to a web page.
What is JSON?
- JSON stands for JavaScript Object Notation
- JSON is a lightweight data interchange format
- JSON is language independent *
- JSON is "self-describing" and easy to understand
* The JSON syntax is derived from JavaScript object notation syntax, but the JSON format is text only. Code for reading and generating JSON data can be written in any programming language.
JSON Example
This JSON syntax defines an employees object: an array of 3 employee records (objects):
{
"employees":[
{"firstName":"John", "lastName":"Doe"},
{"firstName":"Anna", "lastName":"Smith"{,
{"firstName":"Peter", "lastName":"Jones"}
]
}
The JSON Format Evaluates to JavaScript Objects
The JSON format is syntactically identical to the code for creating JavaScript objects. Because of this similarity, a JavaScript program can easily convert JSON data into native JavaScript objects.
JSON Syntax Rules
- Data is in name/value pairs
- Data is separated by commas
- Curly braces hold objects
- Square brackets hold arrays
JSON Arrays
JSON arrays are written inside square brackets. Just like in JavaScript, an array can contain objects:
"employees":[
{"firstName":"John", "lastName":"Doe"},
{"firstName":"Anna", "lastName":"Smith"},
{"firstName":"Peter", "lastName":"Jones"}
]
In the example above, the object "employees" is an array. It contains three objects. Each object is a record of a person (with a first name and a last name).
Converting a JSON Text to a JavaScript Object
A common use of JSON is to read data from a web server, and display the data in a web page. For simplicity, this can be demonstrated using a string as input. First, create a JavaScript string containing JSON syntax:
var text = '{ "employees" : [' +
'{ "firstName":"John" , "lastName":"Doe" },' +
'{ "firstName":"Anna" , "lastName":"Smith" },' +
'{ "firstName":"Peter" , "lastName":"Jones" } ]}';
Then, use the JavaScript built-in function JSON.parse() to convert the string into a JavaScript object:
var obj = JSON.parse(text);
Finally, use the new JavaScript object in your page:


You won't find more accurate Willys-Overland production information anywhere else. This production information was transcribed into electronic form by Charlie Weaver from a hand written a compilation Norton Young did between 1959 and 1961. Norton Young was an employee of Willys/Kaiser at the time and did the compilations so that executives at Kaiser would have yearly production information.
There are disparities between this production information and production information from other sources. Many things could cause these disparities, but the most likely thing to cause them would be the choice of start and end times. In the early years Willys-Overland did not have model years like automobile manufactures do today. In fact, it was common for mid year changes to be made when ever the engineering department came up with new ideas. Norton Young's production numbers are based on build date and a regular calendar year.
Titling practices in the 40s and 50s were very relaxed by todays standards. Many states in the US didn't title cars at all and a sales receipt was sufficient for proof of ownership. Often, vehicles were titled the year they were sold or the dealerships would send away to the manufactures for "fresh" paper work so last years models could be sold as current year models. If you have an older Jeep, chances are the title is wrong.
It is common to look up a serial number for a Jeep to determine the year the vehicle was built, because it is common to have an incorrect title or no title at all for an old vehicle. To make this process easier, the serial numbers have been organized by model. The original data compiled by Mr. Young was organized by year.
It is a shame that Norton Young didn't continue to keep production statistics. Charlie contacted Mr Young to talk about his work:
In a talk with Norton Young a week or 2 ago, he told me that by 1961, the folks in the corner offices at K-F had no more interest in these statistics so he quit keeping them. He also said that he had difficulty getting "timely" reports from the production people, and often had to go through the unit sheets himself and try to piece the info together. He admitted that there may be some errors.
This article is not meant to cover passenger cars, but the information was available in the original, so it has been included rather than edited out.
The following abbreviation key explains some of the known abbreviations used in the original. If you have information on the unknown abbreviations, please email me.
| AMB | Ambulance |
| AVA | ??? |
| CAB | Cab only |
| CPC | ??? |
| C/WS | Cowl/Windshield |
| FFC | Flat Face Cowl |
| PU | Pickup |
| RT | ??? |
| ST CH | Stripped Chassis |
| STK | Stake bed |
| YEAR | TOTAL |
| 1946 | 78088 |
| 1947 | 97581 |
| 1948 | 148676 |
| 1949 | 86542 |
| 1950 | 90424 |
| 1951 | 101234 |
| 1952 | 92134(4) |
| 1953 | 125620 |
| 1954 | 61389 |
| 1955 | 78980(9) |
| 1956 | 64270 |
| 1957 | 65417(12) |
| 1958 | 44703 |
| 1959 | 60471 |
| 1960 | 72753 |
| 1961 | 66756(19)(21) |
Obvious errors from the original have been corrected, but sometimes it is not possible to determine what is right and what is wrong. Errors that have been found have been noted here. Also noted here are some corrections that have been made that could be questionable.
| (1) | Ending serial numbers are based on units by CW. The original only contained total units for all variations of the 473 HT pickup. |
| (2) | Original number of 18682 changed to 18706 by NY. |
| (3) | Original number of 11512 changed to 11537 by NY. |
| (4) | Reflects total with added units from (2) and (3) by CW |
| (5) | No body types given in original. Body types shown are surmised from serial and model numbers. |
| (6) | No model numbers given in original. Model numbers shown are surmised from body types and serial numbers. |
| (7) | Note by NY: Serials 5001-10000 for '53 conversions as "specials". What Mr. Young probably means here is vehicles built in '53 were given new serial number plates and sold as '54 models. |
| (8) | Serial numbers beginning at 5001 are just as shown on NY list. No explanation of disparity in individual units total. |
| (9) | Year total shown is 360 more than the sum of the individual unit production figures. No explanation. |
| (10) | No type designation given in original. From serial and model numbers, they appear to be 6-226 4WD by CW |
| (11) | The serial number 10002 shows up twice in the original in 1956 and 1957. |
| (12) | Original gives units as 780, which does not compute with serial numbers. 1958 serial number begins with 12231 indicating 1957 production figure should be 580. Original yearly total shown as 65617, should be 65417 in light of above. |
| (13) | The serial number range does not match the number of units produced in the original. |
| (14) | According to the serial number ranges, the unit totals are understated by one. |
| (15) | Serial number 12511 does not show up in the serial number range for 1956 or 1957. |
| (16) | No model numbers given in original for 1958 and 1959. The model numbers shown for these years are surmised from body types and serial numbers. The serial number ranges have been changed to align with the units produced. |
| (17) | The serial number for 17094 is shown for both years and the production totals for both years include a unit for this serial number. |
| (18) | Note on original beside "Face Lift" says "Was Maverick". |
| (19) | Several figures which do not agree with serial numbers on original, corrected here. |
| (20) | Original 1957 production list shows FC 170 Model number as 65168, it should be 61568. |
| (21) | The 1961 numbers are the worst for errors. The totals show 6412 more units produced than the serial numbers indicate on the original sheets and the corrected numbers are shown. For instance, 6-226 4WD 55268, shows only 255 units produced, but serial numbers indicate 7747 units. Based on 1960 figures, 7747 seems to be correct. Also, 475 2WD Maverick 58147 shows only 202 units on original, understated by 1000. |
| (22) | Original specified 40 units produced, corrected here to 30 units. Total for 1958 may be overstated by 10. |
| (23) | In the original, there was no model name given. Currently, there is no information on what a JT is or what the correct models names are for these vehicles, but they are passenger cars. |
Thanks to Norton Young for providing the information and Charlie "SleeveValve" Weaver for transcribing the information to electronic form. Thanks to Mark Sailer for sending me that Willys-Overland sign.


Rock Paper Scissors
Welcome to Rock Paper Scissors
To start, choose rock, paper, or scissors.
You:
Computer:


Lyrics of Lowly Life
by Paul Laurence Dunbar
"Ode for Memorial Day"
Additional Information
- Year Published: 1913
- Language: English
- Country of Origin: United States of America
- Source: Dunbar, P.L. (1913). The Complete Poems of Paul Laurence Dunbar. New York: Dodd, Mead, and Company.
-
Readability:
- Flesch–Kincaid Level: 6.5
- Word Count: 296
- Genre: Poetry
- Keywords: battle, death, freedom, hero, life, remember, rememberance, war
- ✎ Cite This
Downloads
Done are the toils and the wearisome marches,
Done is the summons of bugle and drum.
Softly and sweetly the sky over–arches,
Shelt’ring a land where Rebellion is dumb.
Dark were the days of the country’s derangement,
Sad were the hours when the conflict was on,
But through the gloom of fraternal estrangement
God sent his light, and we welcome the dawn.
O’er the expanse of our mighty dominions,
Sweeping away to the uttermost parts,
Peace, the wide–flying, on untiring pinions,
Bringeth her message of joy to our hearts.
Ah, but this joy which our minds cannot measure,
What did it cost for our fathers to gain!
Bought at the price of the heart’s dearest treasure,
Born out of travail and sorrow and pain;
Born in the battle where fleet Death was flying,
Slaying with sabre–stroke bloody and fell;
Born where the heroes and martyrs were dying,
Torn by the fury of bullet and shell.
Ah, but the day is past: silent the rattle,
And the confusion that followed the fight.
Peace to the heroes who died in the battle,
Martyrs to truth and the crowning of Right!
Out of the blood of a conflict fraternal,
Out of the dust and the dimness of death,
Burst into blossoms of glory eternal
Flowers that sweeten the world with their breath.
Flowers of charity, peace, and devotion
Bloom in the hearts that are empty of strife;
Love that is boundless and broad as the ocean
Leaps into beauty and fulness of life.
So, with the singing of paeans and chorals,
And with the flag flashing high in the sun,
Place on the graves of our heroes the laurels
Which their unfaltering valor has won!


--- layout: page title: About header-img: "img/about-bg.png" ---
Kendra Clarke is a recent graduate with a degree in Public Relations from St. John's University. After working with various tech companies including Uber and StreetEasy (Zillow Group), she realized her passion for web development became a desire to pursue a more in depth understanding of front-end development. In her off time you can most likely find her in a yoga studio or enjoying the great outdoors...that is if she's not binge watching her latest obsession on Netflix or diving into a book. * Fun Facts*-Kendra taught herself HTML at the age of 11 and her favorite super hero is Shuri from Black Panther.


She now has learned that beautiful things always take time.
About
I pray that the words of this diary speak to you and point you to a conversation with the Lord. I pray that it will be a confirmation of your calling. I pray that it would speak life. I pray that it would push you to go out of your comfort zone. I pray that it will make you chaise your dreams and fly high like an eagle. Above all, I pray that this blog will lead you to love more and forgive more. To see Jesus loving you more than ever before.
Thanks for visiting this blog. I hope your stay will be longer. I hope every story in this blog tugs your heart and leads you to the path everlasting.


The Jawaharlal Nehru University will be adopting the online mode for conducting entrance examinations for all its academic programmes from 2019-20 session onwards.
It was decided in a meeting called by the Vice-Chancellor, attended by all Deans and Chairpersons, to discuss the recommendations by a committee formed to study the feasibility of conducting the entrance test online and that the first test will be held in December 2018.


My name is Dominic. I’ve been a maker for as long as I can remember and I learn best from taking things apart. I really believe with enough time or by asking the right questions I can figure out anything.
The skills I have as a designer help me plan out projects and work through ideas. My background of making, whether it’s in the machine shop, the office, or even the kitchen gives me a deep understanding of how things work. Coupled with my experience as a teacher I have the ability to communicate my thoughts and ideas effectively.
With technical skills in 3d modeling, software development, and manufacturing I have the tools for any problem. Tell me about your project or show me a napkin sketch and I can find a solution for you that’s simple and cost effective.


| 1 | package fr.sii.ogham.core.builder.resolution; | |
| 2 | ||
| 3 | import java.util.ArrayList; | |
| 4 | import java.util.Collections; | |
| 5 | import java.util.Comparator; | |
| 6 | import java.util.HashMap; | |
| 7 | import java.util.List; | |
| 8 | import java.util.Map; | |
| 9 | ||
| 10 | import fr.sii.ogham.core.builder.Builder; | |
| 11 | import fr.sii.ogham.core.builder.context.BuildContext; | |
| 12 | import fr.sii.ogham.core.builder.env.EnvironmentBuilder; | |
| 13 | import fr.sii.ogham.core.resource.resolver.ResourceResolver; | |
| 14 | ||
| 15 | /** | |
| 16 | * Resource resolution is used many times. This implementation helps configure | |
| 17 | * resource resolution. | |
| 18 | * | |
| 19 | * @author Aurélien Baudet | |
| 20 | * | |
| 21 | * @param <FLUENT> | |
| 22 | * The type of the helped instance. This is needed to have the right | |
| 23 | * return type for fluent chaining | |
| 24 | */ | |
| 25 | @SuppressWarnings("squid:S00119") | |
| 26 | public class ResourceResolutionBuilderHelper<FLUENT extends ResourceResolutionBuilder<FLUENT>> implements ResourceResolutionBuilder<FLUENT> { | |
| 27 | private final BuildContext buildContext; | |
| 28 | private ClassPathResolutionBuilder<FLUENT> classPath; | |
| 29 | private FileResolutionBuilder<FLUENT> file; | |
| 30 | private StringResolutionBuilder<FLUENT> string; | |
| 31 | private List<ResourceResolver> customResolvers; | |
| 32 | private FLUENT fluent; | |
| 33 | ||
| 34 | /** | |
| 35 | * Initializes the helper with the fluent instance and the | |
| 36 | * {@link EnvironmentBuilder}. The fluent instance is used for chaining. It | |
| 37 | * indicates which type is returned. The {@link EnvironmentBuilder} is used | |
| 38 | * by sub-builders ( {@link ClassPathResolutionBuilder} and | |
| 39 | * {@link FileResolutionBuilder}) to evaluate properties when their build | |
| 40 | * methods are called. | |
| 41 | * | |
| 42 | * @param fluent | |
| 43 | * the instance used for chaining calls | |
| 44 | * @param buildContext | |
| 45 | * for property resolution | |
| 46 | */ | |
| 47 | public ResourceResolutionBuilderHelper(FLUENT fluent, BuildContext buildContext) { | |
| 48 | super(); | |
| 49 | this.fluent = fluent; | |
| 50 | this.buildContext = buildContext; | |
| 51 | customResolvers = new ArrayList<>(); | |
| 52 | } | |
| 53 | ||
| 54 | @Override | |
| 55 | public ClassPathResolutionBuilder<FLUENT> classpath() { | |
| 56 |
1
1. classpath : negated conditional → RUN_ERROR |
if (classPath == null) { |
| 57 | classPath = new ClassPathResolutionBuilder<>(fluent, buildContext); | |
| 58 | } | |
| 59 |
1
1. classpath : replaced return value with null for fr/sii/ogham/core/builder/resolution/ResourceResolutionBuilderHelper::classpath → RUN_ERROR |
return classPath; |
| 60 | } | |
| 61 | ||
| 62 | @Override | |
| 63 | public FileResolutionBuilder<FLUENT> file() { | |
| 64 |
1
1. file : negated conditional → RUN_ERROR |
if (file == null) { |
| 65 | file = new FileResolutionBuilder<>(fluent, buildContext); | |
| 66 | } | |
| 67 |
1
1. file : replaced return value with null for fr/sii/ogham/core/builder/resolution/ResourceResolutionBuilderHelper::file → RUN_ERROR |
return file; |
| 68 | } | |
| 69 | ||
| 70 | @Override | |
| 71 | public StringResolutionBuilder<FLUENT> string() { | |
| 72 |
1
1. string : negated conditional → RUN_ERROR |
if (string == null) { |
| 73 | string = new StringResolutionBuilder<>(fluent, buildContext); | |
| 74 | } | |
| 75 |
1
1. string : replaced return value with null for fr/sii/ogham/core/builder/resolution/ResourceResolutionBuilderHelper::string → RUN_ERROR |
return string; |
| 76 | } | |
| 77 | ||
| 78 | @Override | |
| 79 | public FLUENT resolver(ResourceResolver resolver) { | |
| 80 | customResolvers.add(resolver); | |
| 81 |
1
1. resolver : replaced return value with null for fr/sii/ogham/core/builder/resolution/ResourceResolutionBuilderHelper::resolver → NO_COVERAGE |
return fluent; |
| 82 | } | |
| 83 | ||
| 84 | /** | |
| 85 | * For each kind of lookup, stores the list of registered lookups. | |
| 86 | * | |
| 87 | * @return map of lookups indexed by lookup type. | |
| 88 | */ | |
| 89 | public Map<String, List<String>> getAllLookups() { | |
| 90 | Map<String, List<String>> all = new HashMap<>(); | |
| 91 |
1
1. getAllLookups : negated conditional → RUN_ERROR |
if (string != null) { |
| 92 | all.put("string", string.getLookups()); | |
| 93 | } | |
| 94 |
1
1. getAllLookups : negated conditional → RUN_ERROR |
if (file != null) { |
| 95 | all.put("file", file.getLookups()); | |
| 96 | } | |
| 97 |
1
1. getAllLookups : negated conditional → RUN_ERROR |
if (classPath != null) { |
| 98 | all.put("classpath", classPath.getLookups()); | |
| 99 | } | |
| 100 |
1
1. getAllLookups : replaced return value with Collections.emptyMap for fr/sii/ogham/core/builder/resolution/ResourceResolutionBuilderHelper::getAllLookups → RUN_ERROR |
return all; |
| 101 | } | |
| 102 | ||
| 103 | /** | |
| 104 | * Build the list of resource resolvers. | |
| 105 | * | |
| 106 | * <p> | |
| 107 | * The list is ordered to ensure that empty string lookup is always the last | |
| 108 | * registered. | |
| 109 | * </p> | |
| 110 | * | |
| 111 | * <p> | |
| 112 | * If some custom resolvers are registered, they are used before default | |
| 113 | * ones in the order they were registered. | |
| 114 | * </p> | |
| 115 | * | |
| 116 | * @return the list of resource resolvers | |
| 117 | */ | |
| 118 | public List<ResourceResolver> buildResolvers() { | |
| 119 | List<ResourceResolver> resolvers = new ArrayList<>(); | |
| 120 | resolvers.addAll(customResolvers); | |
| 121 | // ensure that default lookup is always the last registered | |
| 122 | List<ResolverHelper> helpers = new ArrayList<>(); | |
| 123 |
1
1. buildResolvers : negated conditional → RUN_ERROR |
if (classPath != null) { |
| 124 | helpers.add(new ResolverHelper(classPath.getLookups(), classPath)); | |
| 125 | } | |
| 126 |
1
1. buildResolvers : negated conditional → RUN_ERROR |
if (file != null) { |
| 127 | helpers.add(new ResolverHelper(file.getLookups(), file)); | |
| 128 | } | |
| 129 |
1
1. buildResolvers : negated conditional → RUN_ERROR |
if (string != null) { |
| 130 | helpers.add(new ResolverHelper(string.getLookups(), string)); | |
| 131 | } | |
| 132 |
1
1. buildResolvers : removed call to java/util/Collections::sort → RUN_ERROR |
Collections.sort(helpers, new PrefixComparator()); |
| 133 | for (ResolverHelper helper : helpers) { | |
| 134 |
1
1. buildResolvers : removed call to fr/sii/ogham/core/builder/resolution/ResourceResolutionBuilderHelper$ResolverHelper::register → RUN_ERROR |
helper.register(resolvers); |
| 135 | } | |
| 136 |
1
1. buildResolvers : replaced return value with Collections.emptyList for fr/sii/ogham/core/builder/resolution/ResourceResolutionBuilderHelper::buildResolvers → RUN_ERROR |
return resolvers; |
| 137 | } | |
| 138 | ||
| 139 | /** | |
| 140 | * Order prefixes in order to ensure that empty string lookup is registered | |
| 141 | * at the end. | |
| 142 | * | |
| 143 | * @author Aurélien Baudet | |
| 144 | * | |
| 145 | */ | |
| 146 | private static class PrefixComparator implements Comparator<ResolverHelper> { | |
| 147 | @Override | |
| 148 | public int compare(ResolverHelper o1, ResolverHelper o2) { | |
| 149 | StringBuilder concat1 = new StringBuilder(); | |
| 150 | for (String prefix : o1.getPrefixes()) { | |
| 151 |
1
1. compare : negated conditional → RUN_ERROR |
if (prefix.isEmpty()) { |
| 152 |
1
1. compare : replaced int return with 0 for fr/sii/ogham/core/builder/resolution/ResourceResolutionBuilderHelper$PrefixComparator::compare → NO_COVERAGE |
return 1; |
| 153 | } | |
| 154 | concat1.append(prefix); | |
| 155 | } | |
| 156 | StringBuilder concat2 = new StringBuilder(); | |
| 157 | for (String prefix : o2.getPrefixes()) { | |
| 158 |
1
1. compare : negated conditional → RUN_ERROR |
if (prefix.isEmpty()) { |
| 159 |
1
1. compare : replaced int return with 0 for fr/sii/ogham/core/builder/resolution/ResourceResolutionBuilderHelper$PrefixComparator::compare → RUN_ERROR |
return -1; |
| 160 | } | |
| 161 | concat2.append(prefix); | |
| 162 | } | |
| 163 |
1
1. compare : replaced int return with 0 for fr/sii/ogham/core/builder/resolution/ResourceResolutionBuilderHelper$PrefixComparator::compare → RUN_ERROR |
return concat1.toString().compareTo(concat2.toString()); |
| 164 | } | |
| 165 | ||
| 166 | } | |
| 167 | ||
| 168 | private static class ResolverHelper { | |
| 169 | private final List<String> prefixes; | |
| 170 | private final Builder<ResourceResolver> builder; | |
| 171 | ||
| 172 | public ResolverHelper(List<String> prefixes, Builder<ResourceResolver> builder) { | |
| 173 | super(); | |
| 174 | this.prefixes = prefixes; | |
| 175 | this.builder = builder; | |
| 176 | } | |
| 177 | ||
| 178 | public void register(List<ResourceResolver> resolvers) { | |
| 179 | resolvers.add(builder.build()); | |
| 180 | } | |
| 181 | ||
| 182 | public List<String> getPrefixes() { | |
| 183 |
1
1. getPrefixes : replaced return value with Collections.emptyList for fr/sii/ogham/core/builder/resolution/ResourceResolutionBuilderHelper$ResolverHelper::getPrefixes → RUN_ERROR |
return prefixes; |
| 184 | } | |
| 185 | } | |
| 186 | } | |
Mutations | ||
| 56 |
1.1 |
|
| 59 |
1.1 |
|
| 64 |
1.1 |
|
| 67 |
1.1 |
|
| 72 |
1.1 |
|
| 75 |
1.1 |
|
| 81 |
1.1 |
|
| 91 |
1.1 |
|
| 94 |
1.1 |
|
| 97 |
1.1 |
|
| 100 |
1.1 |
|
| 123 |
1.1 |
|
| 126 |
1.1 |
|
| 129 |
1.1 |
|
| 132 |
1.1 |
|
| 134 |
1.1 |
|
| 136 |
1.1 |
|
| 151 |
1.1 |
|
| 152 |
1.1 |
|
| 158 |
1.1 |
|
| 159 |
1.1 |
|
| 163 |
1.1 |
|
| 183 |
1.1 |