In the last article we went over post processing. One of the common ways to post process is called a LUT or 3DLUT. LUT stands for LookUp Table. A 3DLUT is therefore a 3 dimensional look up table.
How it works is we make a cube of colors. Then we index the cube using the colors of our source image. For each pixel in the original image we look up a position in the cube based on the red, green, and blue colors of the original pixel. The value we pull out of the 3DLUT is the new color.
In Javascript we might do it like this. Imagine the colors are specified in integers from 0 to 255 and we have a large 3 dimensional array 256x256x256 in size. Then for to translate a color through the look up table
const newColor = lut[origColor.red][origColor.green][origColor.bue]
Of course a 256x256x256 array would be rather large but as we pointed out in the article on textures textures are referenced from values of 0.0 to 1.0 regardless of the dimensions of the texture.
Let's imagine an 8x8x8 cube.
First we might fill in the corners with 0,0,0 corner being pure black, the opposite 1,1,1 corner pure white. 1,0,0 being pure red. 0,1,0 being pure green and 0,0,1 being blue.
We'd add in the colors down each axis.
And the colors on edges that use 2 or more channels.
And finally fill in all the colors in between. This is an "identity" 3DLUT. It produces the exact same output as input. If you look up a color you'll get the same color out.
If we change the cube to shades of amber though then as we look up colors, we look up the same locations in the 3D lookup table but they produce different output.
Using this techinque by supplying a different lookup table we can apply all kinds of effects. Basically any effect that can be computed based only on a single color input. Those effects include adjusting hue, contrast, saturation, color cast, tint, brightness, exposure, levels, curves, posterize, shadows, highlghts, and many others. Even better they can all be combined into a single look up table.
To use it we need a scene to apply it to. Let's throw together a quick scene. We'll start with a glTF file and display it like we covered in the article on loading a glTF. The model we're loading is this model by The Ice Wolves. It uses no lights so I removed the lights.
We'll also add a background image like we covered in backgrounds and skyboxs.
Now that we have a scene we need a 3DLUT. The simplest 3DLUT is a 2x2x2 identity LUT where identity means nothing happens. It's like multiplying by 1 or doing nothing, even though we're looking up colors in the LUT each color in maps to the same color out.
WebGL1 doesn't support 3D textures so we'll use 4x2 2D texture and treat it as a 3D texture inside a custom shader where each slice of the cube is spread out horizontally across the texture.
Here's the code to make 4x2 2D texture with the colors required for an identity LUT.
const makeIdentityLutTexture = function() { const identityLUT = new Uint8Array([ 0, 0, 0, 255, // black 255, 0, 0, 255, // red 0, 0, 255, 255, // blue 255, 0, 255, 255, // magenta 0, 255, 0, 255, // green 255, 255, 0, 255, // yellow 0, 255, 255, 255, // cyan 255, 255, 255, 255, // white ]); return function(filter) { const texture = new THREE.DataTexture(identityLUT, 4, 2, THREE.RGBAFormat); texture.minFilter = filter; texture.magFilter = filter; texture.needsUpdate = true; texture.flipY = false; return texture; }; }();
Let's make 2 of them, one filtered and one not
const lutTextures = [ { name: 'identity', size: 2, texture: makeIdentityLutTexture(THREE.LinearFilter) }, { name: 'identity not filtered', size: 2, texture: makeIdentityLutTexture(THREE.NearestFilter) }, ];
Taking the example using a custom shader from the article on post processing lets use these 2 custom shaders instead.
const lutShader = { uniforms: { tDiffuse: { value: null }, lutMap: { value: null }, lutMapSize: { value: 1, }, }, vertexShader: ` varying vec2 vUv; void main() { vUv = uv; gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); } `, fragmentShader: ` #include <common> #define FILTER_LUT true uniform sampler2D tDiffuse; uniform sampler2D lutMap; uniform float lutMapSize; varying vec2 vUv; vec4 sampleAs3DTexture(sampler2D tex, vec3 texCoord, float size) { float sliceSize = 1.0 / size; // space of 1 slice float slicePixelSize = sliceSize / size; // space of 1 pixel float width = size - 1.0; float sliceInnerSize = slicePixelSize * width; // space of size pixels float zSlice0 = floor( texCoord.z * width); float zSlice1 = min( zSlice0 + 1.0, width); float xOffset = slicePixelSize * 0.5 + texCoord.x * sliceInnerSize; float yRange = (texCoord.y * width + 0.5) / size; float s0 = xOffset + (zSlice0 * sliceSize); #ifdef FILTER_LUT float s1 = xOffset + (zSlice1 * sliceSize); vec4 slice0Color = texture2D(tex, vec2(s0, yRange)); vec4 slice1Color = texture2D(tex, vec2(s1, yRange)); float zOffset = mod(texCoord.z * width, 1.0); return mix(slice0Color, slice1Color, zOffset); #else return texture2D(tex, vec2( s0, yRange)); #endif } void main() { vec4 originalColor = texture2D(tDiffuse, vUv); gl_FragColor = sampleAs3DTexture(lutMap, originalColor.xyz, lutMapSize); } `, }; const lutNearestShader = { uniforms: {...lutShader.uniforms}, vertexShader: lutShader.vertexShader, fragmentShader: lutShader.fragmentShader.replace('#define FILTER_LUT', '//'), };
You can see in the fragment shader there is this line
#define FILTER_LUT true
To generate the second shader we comment out that line.
Then we use them to make 2 custom effects
const effectLUT = new THREE.ShaderPass(lutShader); const effectLUTNearest = new THREE.ShaderPass(lutNearestShader);
Translating our existing code that draws the background as a separate scene we a RenderPass
for both the scene drawing the glTF and the scene drawing the background.
const renderModel = new THREE.RenderPass(scene, camera); renderModel.clear = false; // so we don't clear out the background const renderBG = new THREE.RenderPass(sceneBG, cameraBG);
and we can setup our EffectComposer
to use all the passes
const composer = new THREE.EffectComposer(renderer); composer.addPass(renderBG); composer.addPass(renderModel); composer.addPass(effectLUT); composer.addPass(effectLUTNearest); composer.addPass(outputPass);
Let's make some GUI code to select one lut or the other
const lutNameIndexMap = {}; lutTextures.forEach((info, ndx) => { lutNameIndexMap[info.name] = ndx; }); const lutSettings = { lut: lutNameIndexMap.identity, }; const gui = new GUI({ width: 300 }); gui.add(lutSettings, 'lut', lutNameIndexMap);
The last thing to do is turn on one effect or the other, depending on whether or not we want filtering, set the effect to use the selected texture, and render via the EffectComposer
const lutInfo = lutTextures[lutSettings.lut]; const effect = lutInfo.filter ? effectLUT : effectLUTNearest; effectLUT.enabled = lutInfo.filter; effectLUTNearest.enabled = !lutInfo.filter; const lutTexture = lutInfo.texture; effect.uniforms.lutMap.value = lutTexture; effect.uniforms.lutMapSize.value = lutInfo.size; composer.render(delta);
Given it's the identity 3DLUT nothing changes
but we select the unfiltered LUT we get something much more interesting
Why does this happen? Because with filtering on, the GPU linearly interpolates between the colors. With filtering off it does no interpolation so looking up colors in the 3DLUT only gives one of the exact colors in the 3DLUT.
So how do we go about making more interesting 3DLUTs?
First decide on the resolution of the table you want and generate the slices of the lookup cube using a simple script.
const ctx = document.querySelector('canvas').getContext('2d'); function drawColorCubeImage(ctx, size) { const canvas = ctx.canvas; canvas.width = size * size; canvas.height = size; for (let zz = 0; zz < size; ++zz) { for (let yy = 0; yy < size; ++yy) { for (let xx = 0; xx < size; ++xx) { const r = Math.floor(xx / (size - 1) * 255); const g = Math.floor(yy / (size - 1) * 255); const b = Math.floor(zz / (size - 1) * 255); ctx.fillStyle = `rgb(${r},${g},${b})`; ctx.fillRect(zz * size + xx, yy, 1, 1); } } } document.querySelector('#width').textContent = canvas.width; document.querySelector('#height').textContent = canvas.height; } drawColorCubeImage(ctx, 8);
and we need a canvas
<canvas></canvas>
then we can generate a identity 3d lookup table for any size.
The larger the resolution the more fine adjustments we can make but being a cube of data the size required grows quickly. A size 8 cube only requires 2k but a size 64 cube requires 1meg. So use the smallest that reproduces the effect you want.
Let's set the size to 16 and then click save the file which gives us this file.
We also need to capture an image of the thing we want to apply the LUT to, in this case the scene we created above before applying any effects. Note that normally we could right click on the scene above and pick "Save As..." but the OrbitControls
might be preventing right clicking depending on your OS. In my case I used my OSes screen capture feature to get a screenshot.
We then go it into an image editor, in my case Photoshop, load up the sample image, and paste the 3DLUT in the top left corner
note: I first tried dragging and dropping the lut file on top of the image in Photoshop but that didn't work. Photoshop made the image twice as large. I'm guessing it was trying to match DPI or something. Loading the lut file separately and then copying and pasting it into the screen capture worked.
We then use any of the color based full image adjustments to adjust the image. For Photoshop most of the adjustments we can use are available under the Image->Adjustments menu.
After we've adjusted the image to our liking you can see the 3DLUT slices we placed in the top left corner have the same adjustments applied.
Okay but how do we use it?
First I saved it as a png 3dlut-red-only-s16.png
. To save memory we could have cropped it to just the 16x256 top left corner of the LUT table but just for fun we'll crop it after loading. The good thing about using this method is we can get some idea of the effective of the LUT just by looking at the .png file. The bad thing is of course wasted bandwidth.
Here's some code to load it. The code starts with an identity lut so the texture is usable immediately. It then loads the image, copies out only the 3DLUT part into a canvas, gets the data from the canvas, set it on the texture and sets needsUpdate
to true to tell THREE.js to get the new data.
const makeLUTTexture = function() { const imgLoader = new THREE.ImageLoader(); const ctx = document.createElement('canvas').getContext('2d'); return function(info) { const lutSize = info.size; const width = lutSize * lutSize; const height = lutSize; const texture = new THREE.DataTexture(new Uint8Array(width * height), width, height); texture.minFilter = texture.magFilter = info.filter ? THREE.LinearFilter : THREE.NearestFilter; texture.flipY = false; if (info.url) { imgLoader.load(info.url, function(image) { ctx.canvas.width = width; ctx.canvas.height = height; ctx.drawImage(image, 0, 0); const imageData = ctx.getImageData(0, 0, width, height); texture.image.data = new Uint8Array(imageData.data.buffer); texture.image.width = width; texture.image.height = height; texture.needsUpdate = true; }); } return texture; }; }();
Let's use it to load the lut png we just created.
const lutTextures = [ { name: 'identity', size: 2, filter: true , }, { name: 'identity no filter', size: 2, filter: false, }, + { name: 'custom', url: 'resources/images/lut/3dlut-red-only-s16.png' }, ]; +lutTextures.forEach((info) => { + // if not size set get it from the filename + if (!info.size) { + // assumes filename ends in '-s<num>[n]' + // where <num> is the size of the 3DLUT cube + // and [n] means 'no filtering' or 'nearest' + // + // examples: + // 'foo-s16.png' = size:16, filter: true + // 'bar-s8n.png' = size:8, filter: false + const m = /-s(\d+)(n*)\.[^.]+$/.exec(info.url); + if (m) { + info.size = parseInt(m[1]); + info.filter = info.filter === undefined ? m[2] !== 'n' : info.filter; + } + } + + info.texture = makeLUTTexture(info); +});
Above you can see we encoded the size of the LUT into the end of the filename. This makes it easier to pass around LUTs as pngs.
While we're at it lets add a bunch more existing lut png files.
const lutTextures = [ { name: 'identity', size: 2, filter: true , }, { name: 'identity no filter', size: 2, filter: false, }, { name: 'custom', url: 'resources/images/lut/3dlut-red-only-s16.png' }, + { name: 'monochrome', url: 'resources/images/lut/monochrome-s8.png' }, + { name: 'sepia', url: 'resources/images/lut/sepia-s8.png' }, + { name: 'saturated', url: 'resources/images/lut/saturated-s8.png', }, + { name: 'posterize', url: 'resources/images/lut/posterize-s8n.png', }, + { name: 'posterize-3-rgb', url: 'resources/images/lut/posterize-3-rgb-s8n.png', }, + { name: 'posterize-3-lab', url: 'resources/images/lut/posterize-3-lab-s8n.png', }, + { name: 'posterize-4-lab', url: 'resources/images/lut/posterize-4-lab-s8n.png', }, + { name: 'posterize-more', url: 'resources/images/lut/posterize-more-s8n.png', }, + { name: 'inverse', url: 'resources/images/lut/inverse-s8.png', }, + { name: 'color negative', url: 'resources/images/lut/color-negative-s8.png', }, + { name: 'high contrast', url: 'resources/images/lut/high-contrast-bw-s8.png', }, + { name: 'funky contrast', url: 'resources/images/lut/funky-contrast-s8.png', }, + { name: 'nightvision', url: 'resources/images/lut/nightvision-s8.png', }, + { name: 'thermal', url: 'resources/images/lut/thermal-s8.png', }, + { name: 'b/w', url: 'resources/images/lut/black-white-s8n.png', }, + { name: 'hue +60', url: 'resources/images/lut/hue-plus-60-s8.png', }, + { name: 'hue +180', url: 'resources/images/lut/hue-plus-180-s8.png', }, + { name: 'hue -60', url: 'resources/images/lut/hue-minus-60-s8.png', }, + { name: 'red to cyan', url: 'resources/images/lut/red-to-cyan-s8.png' }, + { name: 'blues', url: 'resources/images/lut/blues-s8.png' }, + { name: 'infrared', url: 'resources/images/lut/infrared-s8.png' }, + { name: 'radioactive', url: 'resources/images/lut/radioactive-s8.png' }, + { name: 'goolgey', url: 'resources/images/lut/googley-s8.png' }, + { name: 'bgy', url: 'resources/images/lut/bgy-s8.png' }, ];
And here's a bunch of luts to choose from.
One last thing, just for fun, it turns out there's a standard LUT format defined by Adobe. If you search on the net you can find lots of these LUT files.
I wrote a quick loader. Unfortunately there's 4 variations of the format but I could only find examples of 1 variation so I couldn't easily test that all variations work.
I also wrote a quick drag and drop library. Let's use both to make it so you can drag and drop an Adobe LUT file to see it take affect.
First we need the 2 libraries
import * as lutParser from './resources/lut-reader.js'; import * as dragAndDrop from './resources/drag-and-drop.js';
Then we can use them like this
dragAndDrop.setup({msg: 'Drop LUT File here'}); dragAndDrop.onDropFile(readLUTFile); function ext(s) { const period = s.lastIndexOf('.'); return s.slice(period + 1); } function readLUTFile(file) { const reader = new FileReader(); reader.onload = (e) => { const type = ext(file.name); const lut = lutParser.lutTo2D3Drgba8(lutParser.parse(e.target.result, type)); const {size, data, name} = lut; const texture = new THREE.DataTexture(data, size * size, size); texture.minFilter = THREE.LinearFilter; texture.needsUpdate = true; texture.flipY = false; const lutTexture = { name: (name && name.toLowerCase().trim() !== 'untitled') ? name : file.name, size: size, filter: true, texture, }; lutTextures.push(lutTexture); lutSettings.lut = lutTextures.length - 1; updateGUI(); }; reader.readAsText(file); }
so you should be able to download an Adobe LUT and then drag and drop it on the example below.
Note that Adobe LUTs are not designed for online usage. They are large files. You can convert them to smaller files and save as our PNG format by dragging and dropping on the sample below, choosing a size and clicking "Save...".
The sample below is just a modification of the code above. We only draw the background picture, no glTF file. That picture is an identity lut image created from the script above. We then use the effect to apply whatever LUT file is loaded so the result is the image we'd need to reproduce the LUT file as a PNG.
One thing completely skipped is how the shader itself works. Hopefully we can cover a little more GLSL in the future. For now, if you're curious, you can follow the links in the post processing article as well as maybe take a look at this video.


|
SideCar
|
Collection of Setting objects that control the display of a background image in a PPIWidget widget. More...
#include </Users/howes/src/sidecar/GUI/PPIDisplay/BackgroundImageSettings.h>
Signals | |
| void | imageChanged (const QImage &image) |
| Notification emitted when the background image changes. More... | |
| Signals inherited from SideCar::GUI::OnOffSettingsBlock | |
| void | enabledChanged (bool state) |
| Notification sent out when the enabled state has changed. | |
| Signals inherited from SideCar::GUI::SettingsBlock | |
| void | settingChanged () |
| Notification sent out when a registered value has changed. | |
Public Member Functions | |
| BackgroundImageSettings (BoolSetting *enabled, PathSetting *path, OpacitySetting *opacity) | |
| Constructor. More... | |
| QString | getPath () const |
| Obtain the current image file path. More... | |
| double | getOpacity () const |
| Obtain the current image opacity value. More... | |
| const QImage & | getFiltered () const |
| Obtain the filtered background image. More... | |
| Public Member Functions inherited from SideCar::GUI::OnOffSettingsBlock | |
| OnOffSettingsBlock (BoolSetting *enabled) | |
| Constructor. More... | |
| bool | isEnabled () const |
| Determine if the settings block is enabled. More... | |
| void | toggleEnabled () |
| Toggle the enabled state of this settings block. | |
| void | setToggleEnabledAction (QAction *action) |
| Install a QAction object to control the on/off state of the settings block. More... | |
| void | connectWidget (QCheckBox *widget) |
| Public Member Functions inherited from SideCar::GUI::SettingsBlock | |
| SettingsBlock (QObject *parent=0) | |
| Constructor. | |
Static Public Member Functions | |
| static Logger::Log & | Log () |
Additional Inherited Members | |
| Protected Slots inherited from SideCar::GUI::SettingsBlock | |
| virtual void | postSettingChanged () |
| Notification handler invoked when a Setting object that was registered with one of the add() methods emits its valueChanged() signal. More... | |
| virtual void | emitSettingChanged () |
| Notification handler invoked when the QTimer object registered by the postSettingChanged() method fires. More... | |
| Protected Member Functions inherited from SideCar::GUI::SettingsBlock | |
| void | add (Setting *setting) |
| Relate a Setting object to this SettingsBlock object. More... | |
Collection of Setting objects that control the display of a background image in a PPIWidget widget.
Relies on the Qt QImage class to do most of the work. The QImage class supports a variety of image formats, including JPEG, PNG, and XPM.
Definition at line 20 of file BackgroundImageSettings.h.
| BackgroundImageSettings::BackgroundImageSettings | ( | BoolSetting * | enabled, |
| PathSetting * | path, | ||
| OpacitySetting * | opacity | ||
| ) |
Constructor.
| enabled | |
| path | |
| opacity |
Definition at line 17 of file BackgroundImageSettings.cc.
References SideCar::GUI::StringSetting::getValue(), SideCar::GUI::DoubleSetting::getValue(), imageChanged(), and LOGERROR.
|
inline |
Obtain the filtered background image.
This is the last image emitted in in the imageChanged signal.
Definition at line 55 of file BackgroundImageSettings.h.
Referenced by SideCar::GUI::PPIDisplay::PPIWidget::initializeContext().
|
inline |
Obtain the current image opacity value.
Definition at line 49 of file BackgroundImageSettings.h.
|
inline |
Obtain the current image file path.
May be empty if not set.
Definition at line 43 of file BackgroundImageSettings.h.
|
signal |
Notification emitted when the background image changes.
| image | new background image |
Referenced by BackgroundImageSettings().


title
#
CMDR
Lang
Plat
System
Rats
Info
Welcome to The Fuel Rats Rescue Web Board!
A drilled rat account is required to access this resource.
Sorry, You need a drilled rat account to access the web board.
Login to begin...
Login
PLACEHOLDER
FuelRats News -
DWB Changelog -
Send Feedback -
Logout


My internship
I didn't like Python
Mostly Java and Scala
Mathematically Inclined
I like compilers
Recent interest in functional programming
$ cd workspace/crawler/src/
$ grep -r 'for .* in' | wc -l
13
$ grep -r 'lambda' | wc -l
95
(^ This is Nikos)
Three months of developement
Three months of documentation
I learned Python somewhere in the process
sdtlib documentation
pip, virtualenv
byte vs unicode strings
No interfaces
↪ you better like reading source code...
No type-checking
Exceptions as control flow
↪ you better like stack traces...
Immutability?
def parseHTML(page):
"""Parses a page to an html tree.
@type page: string
@param page: the page to parse
@rtype: xml.etree.ElementTree.Element
@return: the root of the html tree
"""
try:
return lxml.html.fromstring(page)
except (LookupError,
UnicodeDecodeError,
lxml.etree.XMLSyntaxError,
lxml.etree.ParserError): # TBC
try:
return soupparser.fromstring(page)
except Exception:
return lxml.etree.Element("html")
max([ True, 2, [3, 4], {5: 6, 7: 8}, "nine", None ])
def similarity(string1, string2, bufferDict=None):
"""Computes the similarity between two strings."""
def extractFirst(page, query):
"""Executes a XPath query and return the first result."""
def bestXPath(contentZipPages):
"""Given a list of content/page, computes the best XPath
query that would return the content on each page.
@type contentZipPages: list of (string, etree.ElementTree)
@rtype: string"""
queries = ("/some/path", "/another/path", ...)
dct = dict()
ratio = lambda content, page, query: (
similarity(content, extractFirst(page, query)), dct)
topQueriesHead = nlargest(
10, queries, key=partial(ratio, *contentZipPages[0]))
topQueries = map(lambda (c, p):
max(topQueriesHead, key=partial(ratio, c, p)),
contentZipPages)
return max(set(topQueries), key=topQueries.count)
In [1]: 200 is 100 + 100
Out[1]: True
In [2]: 500 is 250 + 250
Out[2]: False
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/">
<channel>
<title>Quantum Diaries</title>
<atom:link href="http://www.quantumdiaries.org/feed/" rel="self" type="application/rss+xml" />
<link>http://www.quantumdiaries.org</link>
<description>Thoughts on work and life from particle physicists from around the world.</description>
<lastBuildDate>Tue, 28 Jan 2014 14:21:48 +0000</lastBuildDate>
<language>en-US</language>
<sy:updatePeriod>hourly</sy:updatePeriod>
<sy:updateFrequency>1</sy:updateFrequency>
<generator>http://wordpress.org/?v=3.7.1</generator>
<item>
<title>Anti-beam me up, Scotty!</title>
<link>http://www.quantumdiaries.org/2014/01/28/anti-beam-me-up-scotty/</link>
<comments>http://www.quantumdiaries.org/2014/01/28/anti-beam-me-up-scotty/#comments</comments>
<pubDate>Tue, 28 Jan 2014 13:46:08 +0000</pubDate>
<dc:creator><![CDATA[CERN]]></dc:creator>
<guid isPermaLink="false">http://www.quantumdiaries.org/?p=32171</guid>
<description><![CDATA[While the CERN accelerator complex was being revamped in 2013, the ASACUSA experiment took time to carefully review the data taken in 2012 at the Antiproton Decelerator (AD) facility. This painstaking work paid off and they just announced in Nature having produced the first ever beam of antihydrogen atoms. In laboratory experiments like the ones […]]]></description>
<content:encoded><![CDATA[
While the CERN accelerator complex was being revamped in 2013, the ASACUSA experiment took time to carefully review the data taken in 2012 at the Antiproton Decelerator (AD) facility. This painstaking work paid off and they just announced in Nature having produced the first ever beam of antihydrogen atoms.

...
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/">
<channel>
<title>Quantum Diaries</title>
<atom:link href="http://www.quantumdiaries.org/feed/" rel="self" type="application/rss+xml" />
<link>http://www.quantumdiaries.org</link>
<description>Thoughts on work and life from particle physicists from around the world.</description>
<lastBuildDate>Tue, 28 Jan 2014 14:21:48 +0000</lastBuildDate>
<language>en-US</language>
<sy:updatePeriod>hourly</sy:updatePeriod>
<sy:updateFrequency>1</sy:updateFrequency>
<generator>http://wordpress.org/?v=3.7.1</generator>
<item>...</item> <item>...</item>
<item>...</item> <item>...</item>
<item>...</item> <item>...</item>
<item>...</item> <item>...</item>
<item>...</item> <item>...</item>
<item>...</item> <item>...</item>
<item>...</item> <item>...</item>
<item>...</item> <item>...</item>
</channel>
</rss>
Find all possible XPaths for a given blog
Obtain training data from the web-feed
Execute all XPaths on the ~15 latest posts
Find the XPaths returning results most
similar to the training data


william n. wade
Republican
I am a retired investment banker - I currently have a small consulting practice working mostly with non-profits
Graduate Certification, Financial Marketing & Operations McIntyre School of Commerce, University of Virginia Graduate Certification – Finance & Statistics University of Wisconsin Bachelor’s Degree, Marketing & Finance University of Colorado
81507
2016 - Dan Thurlow for Rep. District 55 - 2018 Dan Thurlow for Colorado Senate District 7 - 2020 Joe Biden for President
Powerlink – Board of Directors – 2006 thru 2008 Big Brothers & Big Sisters of Pittsburgh, Board of Directors – 2008 thru 2012 Kevin Wolfgong Foundation, Chairman/Board of Directors – 2007 Homeward Bound of the Grand Valley – Homeless Shelter Board of Directors – 2012 thru present Vice Chairman – 2014 thru 2016 Board Chairman – 2017 thru present City of Grand Junction Planning Commission – 11/2012 thru 10/2020 Vice Chairman – 2016 thru 2020 City of Grand Junction Board of Zoning Appeals – 2012 thru 2014 21st Judicial District Review Commission – Governors Appointment - October 2013 Vice Chairman - 2015 thru 2016 Chairman – 2017 thru present Virginia United Methodist Housing Development Corporation National Advisory Board – appointed 8/2020 Senior Adults for Greater Education Corp. National Advisory Board – appointed 6/2020 .
During my career and since retirement I have spent most of my free time advocating for those less fortunate. A a board member with HomewardBound i led the effort that raised 7 million dollars to build the first trauma informed shelter facility in the western United States. My other Commission and Board work clearly demonstrates my commitment to making organizations successful and well run
For far too long, this state and country have swung back and forth between parties and redistricting has been a standard way to assure control. Although I am a conservative, I believe it is time we acted as a state for the greater good and set up safeguards to ensure that all voices will be heard.
I spent thirty years as an Investment Banker and managing large diverse groups of people. In those years I gained critical insight into building consensus and making companies work. You cannot design and close multi-million dollar investment deals without the ability to bring people together. My work over the past 15 years with the disadvantaged in Pennsylvania and Colorado has taught me how critical it is to be fair and impartial when making important decisions.
Spending 30 years in the world of investments and finance required excellent analytical skills and the ability to translate those skills into appropriate actions. Without demonstrable logic in my strategic decisions I could not have succeeded.
Male


Music
Who ByFire
They bicker. They record without ever being in the same room. But the Who can still conjure that old magic.
ROGER DALTREY AND PETE TOWNSHEND have known each other for 60 years. They love each other. “I used to say that I love him, but with my fingers crossed,” says Townshend of Daltrey.  “Now, I like him too. I like all his eccentricities, his foibles, his self-obsession, and his singer thing. Everything about him.”
Daltrey feels the same. He sits in a comfy chair later the same afternoon. “I’ve always kind of known Pete cares for me,” says Daltrey, crossing his legs in blue cargo shorts. He’s a little impatient because my time with Townshend ran long. “I hope he realizes I care about him. I think my actions through our career have shown that.” Roger other for 60 years. They tolerate each other.
The Making of Woodstock’69
It’s easy to forget how doomed it seemed at the time.
How King Princess Became a‘Cheap Queen’
For the cover of her debut album, Cheap Queen.
What Scares Stephen King?
His new book predicted Trump’s horrors, and he has a lot more on the way.


Spellbinder is a fantasy adventure /science fiction television series.
Not only it's one of my favorites, but it is the first ever english TV show I watched during my high school days.
The plot is around story where a boy blasted into an alternate dimention after a school camp prank gone wrong.


Test Driven Development (TDD) is a powerful software development practice for combining software design, unit testing, and coding in a continuous process to increase quality, maintainability, and productivity. Using TDD, developers build software in short development cycles following a workflow pattern called Red - Green - Refactor:
The developer repeats this process many times until the unit is complete and fully tested.
During this workshop, you’ll use code “katas” and pairing to practice the techniques. You will work on one or two code labs specifically crafted to encourage object-oriented thinking and design through test-first and merciless refactoring. You can use any IDE and language that you have available to you, as long as the micro-testing framework (e.g., JUnit, NUnit, rSpec) is also available. You will explore the TDD discipline at your own pace, in a low-stress environment, with frequent opportunity to get personalized assistance from Shawn and others. You will need to supply your own workstation.
Participants should have strong programming skills and be familiar with an object-oriented language and programming techniques. They should bring a laptop installed with their favorite programming language and IDE—and come prepared to write code. You will need to install your chosen xUnit framework prior to the tutorial.
Developers who are interested in introducing TDD into their team’s tool-box of powerful software engineering practices. Perhaps they have tried to encourage the TDD discipline already, but want more first-person experience in order to address concerns back home. Participants should be proficient in a modern object-oriented language.
The emphasis will be on learning by doing. There will be some preliminary demonstration and discussion, but we will forgo lengthy debate in favor of spending enough time on the labs. Each participant will receive personal attention from our team.
Shawn Wallace has about 20 years of software development under his belt. When he was introduced to TDD in 2007, it was truly a turning point in his carreer. He uses TDD on a daily basis. He will demonstrate the basics, and to convey the subtle “test-infected” mindset that drives developers to appreciate, adopt, and even enjoy working this way.
Shawn is an Architect with Centric Consulting in Columbus, Ohio. Working primarily with Microsoft tools and tech, he has been building software for all kinds of clients and even owned a software company for several years. He has been a certified trainer since 1997. Shawn is a former US Marine Infantryman and enjoys all things tech, learning about new shiny things, building things, shooting sports and coaching his son in football and watching all of the awesome things his daughter does. He resides in Grove City, Ohio with his family.


Preparation time
less than 30 mins
Cooking time
over 2 hours
Serves
Serves 6-8
Glazed rib of beef covered with fresh horseradish and beef dripping will not disappoint.
Preheat the oven to 220C/425F/Gas 7.
Boil the peeled and sliced potatoes in a large pan of salted water until soft to the point of a knife.
Drain the potatoes and shake in a colander so that the edges fluff up.
In a saucepan, melt the dripping with the horseradish, salt and pepper.
Score the beef all over with a sharp knife.
 Tip the potatoes into another tray.
Ladle most of the horseradish glaze over the top of the vegetables and meat (reserving some for the potatoes). Roast the meat in the oven for 20 minutes then reduce the temperature to 160C/325F/Gas 3 and baste the meat with the dripping.
Pour the remaining horseradish glaze over the potatoes and place them in the oven to cook for the duration of the beef cooking time.
Roast the meat for two hours,basting it with the dripping every half hour.
Allow the meat to rest under foil for 30 minutes before serving. If necessary, you could turn up the oven to crisp the potatoes while the meat is resting.


Some fields in OBO-Edit allow the use of backtick expressions. Backtick expressions are OSL expressions enclosed in ` (backtick) characters.
When a backtick expression is encountered in an appropriate context, the OSL expression is evaluated, and the backtick expression is replaced with the value of the expression.
For example, the following term filter will find all descendants of the currently selected term:
[Ancestor] [ID] [equals] "`GUI.getSubSelection().getID()`"
The backtick expression `GUI.getSubSelection().getID()` will be evaluated and replaced with the ID of the currently selected term.
Backtick expression are allowed in the "value" field of a filter and in certain places within an XML screen layout. See the documentation for each layout tag to determine the specific places where backtick expressions are allowed.


Azan Options
Choose Location:
Colombo
Madrid
Azan Volume:
Azan Play/Stop:
Play
Stop
Azan Toggle:
Off
On


Ajowi, Andiego headline Kisumu BFK leg
by Capital SportNAIROBI, Kenya, Nov 19 – The bout between Africa Games bronze medallist Elly Ajowi of the National Police Service and Kibra’s Joshua Wasike headline the fifth and final leg of the Boxing Federation of Kenya (BFK) contest to take place in Kisumu starting Thursday to Saturday.
The league dubbed “Road to Tokyo” will be used to select team Kenya’s provisional squad for the 2020 Olympics.
“Boxing Federation of Kenya will be having an open boxing selection as it used to be in earlier years. There will be no boardroom selection. All international boxers to take part in the final league in Kisumu have no choice but to prove their worth,” BFK Technical Delegate Albert Matito said.
National team coach Musa Benjamin said the team for Olympic qualifiers will be shortlisted after the League in Kisumu.
“A provisional team will be named to start preparations for the African qualifiers set for Senegal early next year,” Musa stated.
Also, in action will be Olympian Elizabeth Andiego who will face Metrine Sagina of Trans Nzoia in the women’s category.
Ajowi suffered a shock semifinal defeat at the hands of Kibra’s Wasike with the latter bantering over who will kiss the canvas first on Kisumu leg.
Africa Games silver medallist, Shaffi Bakari also suffered a semi-final defeat to Mohammed Hussein of Kibra.
Shaffi fought with a recurring injury he sustained in Morocco while Ajowi looked quite unfit and ill prepared on his fight against Wasike.
The 60kg lightweight class also has unfinished business with Benson Kamau of Nairobi looking to repeat his victory against international Ethan Maina of National Police Service.
The 52Kgs flyweight apart from the Bakari’s intended comeback will showcase another unfinished business between Kevin Maina of Kenya Defence Forces against Mohamed Hussein of Kibra.
The two played in the final of the last leg with Maina emerging the winner in a potentially explosive fight.
The women’s fight has attracted the likes of Gold Coast bronze medalist Christine Ongare who will be up against Siaya namesake Christine Aluoch in flyweight.
(Visited 14 times, 1 visits today)


ReactFire is a ReactJS mixin which allows for easy integration of Firebase into your React apps. See how this was made by reading the ReactFire documentation.


I'm A Celebrity's Ant and Dec mock Prince Andrew's 'sweat' comment after Newsnight disaster
As they introduced the show, Declan Donnelly cracked a joke about Prince Andrew's disastrous Newsnight interview
by Irishmirror.ieI'm A Celebrity...
As they introduced the show, Declan Donnelly cracked a joke about Prince Andrew's disastrous Newsnight interview.
Ant McPartlin said the stars in this year's line-up were "sweating" with nerves, but Dec said that "not everyone can sweat".
This was a reference to Prince Andrew claim that he wasn't "profusely sweating" when he danced with then 17-year-old Virginia Roberts because a medical condition meant he couldn't sweat.
Ant said: "And what a line up we've got in store for you this year.
"Ten celebrities all of them very nervous, all of them sweating."
"Presuming they can sweat, not everyone can sweat apparently," Dec interuppted.
There were laughs from the crew but Ant kept a poker face and carried on with the introductions.
The Duke of York last night answered questions for the first time about his links to paedophile billionaire Jeffrey Epstein.

I'm A Celebrity kicks off tonight with a host of famous faces heading to the jungle for three weeks of gruelling challenges.
On the line-up is Olympian and reality star and transgender icon Caitlyn Jenner, former Girls Aloud star Nadine Coyle, former EastEnders star Jacqueline Jossa, Good Morning Britain presenter Kate Garraway, Radio presenter Roman Kemp, former Big Brother star Adele Roberts, comedian Andrew Maxwell, Rak-Su singer Myles Stephenson, former rugby player James Haskell, and former footballer Ian Wright.
There are also a few rumoured late additions.


{% extends 'layouts/main.html' %} {% block title %}Home{% endblock %} {% block content %}
A tool for estimating malarial complexity of infection from bi-allelic single nucleotide polymorphism (SNP) barcode data.


About Me:
Hi! I am Bill Huang, I finished 4 years of college and got a Bachelor degree in Electrical Engineering (double E) in China, I had worked in China Agriculture Bank as networking administrator for 3 years. After moving to US, I worked in newspaper company as graphic designer for 20 years in Los Ageles. I am proud of being Holberton School student in January 2019, the school trained student be a software engineer by hand on project base. after 10 months of full web-stack training. Now I familliar with C, Python, Javascript, Linux Shell, MySql. I recently finished a web-app: Many-to-Many, from front-end: Html5, CSS, Javascript; back-end: Python, Mysql, Flask, RESTful API, deployment: webserver setup, Nginx configuration, Gunicorn binding App. Please visite my site at: https://billhong6981.github.io/Many-to-Many/ then click on landing page. Thank You!


|
Stanford
Stanford University is one of the world’s leading research universities. It is known for its entrepreneurial character, drawn from the legacy of its founders, Jane and Leland Stanford, and its relationship to Silicon Valley. Areas of excellence range from the humanities to social sciences to engineering and the sciences. Stanford is located in California’s Bay Area, one of the most intellectually dynamic and culturally diverse areas of the nation. |
| School Subjects(Division) | |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Tuition and Expenses
| EXPENSE | COST |
| Tuition | $52,857 |
| Room and Board | $16,433 |
| Student Fees Allowance | $1,905 |
| Books and Supplies Allowance | $1,245 |
| Personal Expenses Allowance | $2,130 |
| Total | $74,570 |
| Section | Average | 25th Percentile | 75th Percentile |
| Math | 781 | 770 | 800 |
| Reading | 747 | 720 | 770 |
| Composite | 1528 | 1490 | 1570 |


Home
Profiles
Recruitment
Company
Salary
This is section1
After graduation, a lot of students may confuse about their career. Which industry is popular? What job pay well? What skill is required by the dreamed job? This website will give you some opinion!
Let's explore!
This is section2
This is section3
Job Industries
Job required Level
Companies Industries
Companies Location
This is section4
Chevron
Alcoa
Coca-Cola Amatil
JLL
WorleyParsons
ANZ
This is section5
Based on industry
Based on location


Hi! I am Anika.Now I going to share about Myself. I love decorating on the cheap. I love molding and the amazing difference it makes in any home. I love the contrast of a painted wall and crisp white trim. I love copying a $200 piece and making my own, but better, for less than $20. I love New York City so much we got married there. I love painting walls, furniture, the cat -- if it makes the cat look better. I love NKOTB. I love God and thank him daily for this life I lead. I love you all for reading and that you come back. (It means the world to me.) And most of all, I love my husband and children, for their complete support, love and understanding (especially when it comes to NKOTB).
I've always loved Tuscan style -- but since visiting Napa Valley over the years (that leans heavily this way) and now Italy -- I've fallen in love with it all over again. Back in the day I mimicked the Tuscan look, but then it was a lot of golds, reds and ornate wrought iron. .Either way...I have a whole new appreciation for this decor style. I noticed quite a bit of symmetry in the spaces. You know me...symmetry in design makes me crazy happy, so I think that's one of the reasons I was so taken with it. I'll start with exteriors -- outside the themes are a lot of florals, stone, pottery and GREEN. You can't talk about Italian exteriors without mentioning the doors! I swear every door in every village/town we visited was unique and gorgeous. Solid wood of course...with some detail but not too much.


[t]Dear[/t] {$recipientName},
[t]Find attached the following invoice:[/t]
Invoice number: {$invoice_number}
Period: {$period}
Invoice date: {$invoice_date}
Invoice due date: {$invoice_due_date}
Your ref. name: {$your_ref_name}
Your ref.: {$your_ref}
[t]Kind regards[/t],
[t]{$consultantName}
{$clientName}[/t]


Russ Mehring
William Payne
Alex Okeson
Hui-Min Lu
Course Home
Home
List
Map
React Garage Viewer
Team Members
arrow_drop_down
Garages Map
Garages Map
Bus Map
Customers Map
Copyright @ Team Titans, All Rights Reserved.


RT @saturnflyer: woohoo! my @rubyconf presentation was posted http://confreaks.com/videos/2878-rubyconf2013-unleash-the-secrets-of-the-standard-library-with-simpledelegator-forwardable-and-more Unleash the Secrets of the Standard Library
12/4/2013, 12:23:29 PM
Favs: 0
Retweets: 0
link


A list of available APIs. See also our API design google document.
| Method | Description |
| Voter Basic Data | |
| deviceIdGenerate | Generate a device_id (store in cookie) that can be linked to a voter_id |
| voterAddressRetrieve | Retrieve an address for a voter |
| voterAddressSave | Save or update address for an existing voter |
| voterCount | Count the number of voters in the database. |
| voterCreate | Create an empty voter entry attached to a voter_device_id |
| voterRetrieve/?format=json | Export raw voter data to JSON format |
| GeoLocation | |
| Ballot Contest Data | |
| voterBallotItemsRetrieve | Retrieve a list of ballot items to display. |
| Candidates & Measures | |
| candidatesRetrieve | Retrieve a list of candidates competing for an office to display. |
| Organizations & People | |
| organizationCount | Count the number of organizations in the database. |
| organizationFollow | Store that the voter wants to follow this organization. |
| organizationFollowIgnore | Store that the voter wants to ignore this organization. |
| organizationStopFollowing | Store that the voter wants to stop following this organization. |
| organizationRetrieve | Retrieve one organization based on unique identifier. |
| voterGuidesToFollowRetrieve | Retrieve a list of voter guides that a voter might want to follow. |
| Positions (Support, Oppose, Info Only) or Stars | |
| Voter Friends | |
| Voter Language | |
| Messages |


Page Links: First Previous 1 2 Last Index Page
| NW1 23rd Dec 2010, 00:39 permalink Post: 957 |
Superstab
Hmm. There was, I think, a raft of high-incidence (alpha) protection fitted.
Digging out the old BAe conversion course notes: The "Anti-Stall" (SFC) 1&2 sytems offered: Super Stab: Increased authority of pitch autostab as incidence increased above 13.5 degrees - proportional to pitch rate and incidence angle - and a nose down pitch trim with a Vc (CAS) deceleration with incidence > 13.5 Stick "Wobbler": the "unmistakable warning" - when incidence > 19 and Vc<270kts the control columns took a life of their own and tried to fling you into the forward galley. Served you right. Some other high incidence stuff was fed from the ADC rather than the SFC, like: The ">13.5d incidence" feed to the SFC CAS (Vc) feed to the SFC Incidence from 16 to 19 degrees (rate dependant) to get the SFC to feed in up to 4 degree nose down pitch command and the sticj wobbler trigger. Increase of authority of yaw autostab as incidence > 13.5d Autotrim inhibit > 14.5d incidence Stick shaker >16.5d incidence AP/FD disconnect > 17.5d incidence There was loads of other technical stuff which engineers understood, but we had to learn by writing diagrams which made sense to us enough to pass the written exam. The bottom line was an aeroplane which flew beautifully, but which you had to understand well, and which you could not tease beyond its limits. If you ignored a limit or an SOP then you reached an unpleasant place far quicker than with the blunties - it was a challenge which rewarded as quickly and as deeply as it punished. |
|
| Bellerophon 23rd Dec 2010, 03:11 permalink Post: 958 |
CliveL
A warm welcome to the forum, please keep your most illuminating posts coming! EXWOK
Quote:
Purely in the interests of historical accuracy, may I point out that I did once complete a load sheet on a charter flight, but this occasioned such ribald comments from the starboard side of the flight deck, accompanied by ill-suppressed mirth from the maroon Mafioso in the engine room, that I decided in future to delegate all further such calculations to the F/O. Merry Christmas to all Bellerophon |
|
| M2dude 23rd Dec 2010, 08:31 permalink Post: 959 |
SUPERSTAB
To hopefully further clarify, this was controlled from the SFC computer and was a two part mix: 1) With Vc < 270 KTS the AUTOSTAB pitch damping was increased as a function of pitch rate and pitch rate DOT, Vc DOT and corrected (wing) incidence. Maximum possible demand limited to 8\xb0 nose down. 2) With Vc < 140 KTS and alpha/alpha rate greater than 19.5\xb0 (this itself would generate the 'wobbler' or 'unmistakable warning') a 4\xb0 nose down signal is generated over a 1 second time constant. I hope the enclosed diagram helps to put it all in place. Best Regards Dude |
|
| CliveL 16th Jan 2011, 06:52 permalink Post: 1109 |
Quote:
In mechanical back-up control demands were fed to relay jacks which acted as force amplifiers so the pilot was unaware of control run friction. The autopilot also fed into these relay jacks. This meant that the control precision and ability to harmonise control forces given by the electrical control system was not degraded by mechanical system shortcomings. In electrical signalling there was a dead space at the Powered Flying Control Units (PFCU) to allow for the difference between mechanical and electrical commands produced by autostabiliser activity. Variation of this dead space with flight condition gave the autostabiliser authority limits. Autostab. was not available in mechanical signalling when the PFCU servo valve was locked to the mechanical control system. So the control column movements were never 'ignored' by either system, but the mechanical system never 'saw' the autostabiliser commands. Cheers Clive |
|
| NW1 16th Jan 2011, 14:21 permalink Post: 1111 |
Dude - that really brings back pain form the past! I remember knowing (just) enough about the flying controls to pass the ARB, but a diagram similar to that one was presented at one "Technical Refresher" day (remember those?) by one of our more chatty training EOs (could have been you?!) together with a coloured plastic overhead projector schematic complete with slidey moving jacks and PFCUs and things and it worked! I completely understood the system right up until the first pint of Brains that night...
Flying in mechanical signalling was a different experience - losing the autostabs was bad enough (and proved how good that system was). A mate on the fleet once described it as like trying to fly around on a supersonic dustbin lid. I think that description was too kind - the thing was barely controllable in that configuration. One of our skippers described an airtest when he was on the JS where the crew were trying a decel in MS: as the phugoids were diverging he thought he was about to lose his life so leant forward to restore things. Sadly the switches had been left in MS, so he had to move the switches up to "Blue" as well as then pressing the reset tits - a procedure which he described as almost impossible due to the ever more extreme manoeuvres. Recovery, fotunately, was instant. Resetting electrical signalling and autostabilisation always felt like slotting into a groove on the Concorde. For that reason, I believe, flight in mechanical signalling was removed from transonic flight on airtests and altogether from Base Training. The simulator was the only sensible way of trying to fly like that... And that flying control pre-flight check! Learning it was a conversion course rite of passage: one of the sadder parts of reading this thread was realising I'd forgotten it. Great times, great aircraft, great people. Nostalgia isn't necessarily a thing of the past... see you in March? |
|
| M2dude 17th Jan 2011, 06:15 permalink Post: 1112 |
NW1
Ahhh the Tech refresher days. Not being an EO it would not have been me, no. But the 'trainers' often used to come seek me out in the hangar and (over coffee, not beer I'm afraid) confer about various system quirks and nasties to use on you guys during the tech' refreshers. (So I guess can be blamed for a few of the 'stinkers', sorry ). And I definately know who you mean by describing him as a 'chatty' EO.... a truly great guy though. Mech' signalling during decel'??, OUCH!! I would have thought that the 'supersonic dustbin lid' description would have been quite an accurate description of what must have been a very uncomfortable experience indeed. It was quite a vivid and scary description, I can just imagine trying to move the 3 switches up to BLUE from MECH and stabbing the reset buttons while your seat and the selector panel are seemingly going backwards and forwards, up and down in different directions!! . On the C of A renewal test flights I seem to remember that MECH was only tried fairly briefly at a very subsonic 300 KTS during the early stages of the flights, but even then it felt like the aeroplane was riding a sea of different sized golf balls and the outer wing sections seemed to flap about quite enegetically in a world of their own; it was pure bliss when we reset into BLUE. It really shows us all just how good the FBW and autostab really was, the fact that the aeroplane handled so beautifully throughout such an enormous envelope. Well done CliveL and ChristiaanJ and all you designer chaps. . Now NW1, I bet you can still really do the flying control check in your sleep ( ), but 'Great times, great aircraft, great people' is certainly a marvelous way to sum up such an amazing time of our lives. I still feel honoured and very lucky to have been a small part of it all for so many years. And as for March... Yes I will be there; see you on the 4th. Best regards Dude |
|
| M2dude 24th Apr 2011, 14:09 permalink Post: 1331 |
I personally doubt very much if the Emergency Pilot would be the 'way in' for the sidestick input. EFC
ROLL
commands were inputed from the SFC computer to the Autostab computers as 'stab demands' and therefore drove the MIDDLE and OUTER elevons only for roll. To make matters worse, if your test flight was really 'exciting' and you found yourself at any time at Vmo + 20 KTS, roll control would be through the middle elevons ONLY. I'm with CliveL in that the most likely scenario would be for the demand would feed via a D/A converter somehow. (It would be great to find out though).
I would have thought that the whole venture was a proof of concept by SFENA for future implementation in the Airbus family. This excersise would have been both costly and highly complex at system level, any other reason would really have been quite daft. Best Regards Dude Last edited by M2dude; 24th Apr 2011 at 15:08 . |
|
| M2dude 21st Jun 2011, 15:45 permalink Post: 1388 |
A Side Sticky Subject
As I recall, they referred to this research project as a CCV (Controlled Configured Vehicle) design study. It would be great if we could get this confirmed, but they talked about subsonic drag reductions of 10 to 15% by flying (not taking off!!) with a far more aft CG than the norm. The 'system' I seem to remember, as a result naturally commanded some down elevon, which increased lift. As the aircraft could then fly with less alpha, I guess this is where the drag reduction comes from. (Clive, I wonder if you could find out through one of your contacts if this was true?).
I'd still personally like to know how the sidestick was integrated into the flying control system, I've been thinking and can not now believe that sidestick inputs could be simply input to the flying control system 'at resolver level'. Remember that the concept of the FBW system on Concorde was that resolvers were utilised as simple 4 wire synchros, and the pitch and roll axis utilised a CX/CDX/CT chain, which produced the error signal to the ESA's in the Autostab computers. Using a sidestick completely breaks up the chain, and my guess is that a seperate digital unit contained the flight rules which were summed against PFCU CT position and sidestick input would have been necessary. It is possible then that an analog output from this 'box' could be fed to the Autostab Computer ESAs and hence drive the elevons. I'm probably completely wrong, but I'd surely still love to know the truth. As you say Clive, ideal stuff for Concorde 2. Best regards Dude Last edited by M2dude; 21st Jun 2011 at 18:53 . Reason: A fine wine may improve with age... my spelling however doesn't |


Which Northwestern stereotypical career are you? Take this quiz and find out! By Emma Kumer / Graphic by Emma Kumer


shopping_basket Shop Online
Using our convenient web app, you'll get all the power of gFood without having to call your order in. Order in your pajamas, order 24 hours a day, order on Christmas, we're here to serve you.
local_shippingFast Delivery
You've never seen ordering this quick.  We'd ask what that is, but gFood repects your privacy.
local_atm Great Deals
Money: You've got it, we want it. But let it never be said we're not incredibly fair! Burger sales? Check. Pizza sales? Check. Burger and pizza sales?? Check, check! We seriously can't stop making deals.


public interface TechLibrary extends CMLibrary
| Modifier and Type | Method and Description |
|---|---|
void |
addManufacturer(Manufacturer manufacturer)
Adds and saves a new manufacturer to the list.
|
void |
delManufacturer(Manufacturer manufacturer)
Removes a new manufacturer from the list.
|
void |
fixItemTechLevel(Electronics I,
int newTechLevel)
"Fixes" the tech level of the given item by making sure
it's manufacturer is non-random, and by assigning a random
tech level within the valid range, and modifying its name
and displaytext to reflect the new tech level
|
java.util.Iterator<Room> |
getComputerRooms(java.lang.String key)
Return all the rooms containing computers in the
given circuit key.
|
java.util.Iterator<Electronics.Computer> |
getComputers(java.lang.String key)
Return all the computers in the given circuit key.
|
Manufacturer |
getDefaultManufacturer()
Retreives the default manufacturer for new products
|
java.lang.String |
getElectronicsKey(CMObject o)
Returns the appropriate electronics key for this electronic item,
area, or room.
|
int |
getGlobalTechLevel()
Returns the global tech level
|
java.util.List<Electronics> |
getMakeRegisteredElectronics(java.lang.String key)
For the given key, return an eclusive list of all the electronics
that belong to that key.
|
java.util.List<java.lang.String> |
getMakeRegisteredKeys()
Returns a new exclusive list of all the registered electronics
keys being processed.
|
Manufacturer |
getManufacturer(java.lang.String name)
Retrieves the manufacturer of the given name, or null
if it is not found.
|
Manufacturer |
getManufacturerOf(Electronics E,
java.lang.String name)
Retrieves the manufacturer of the given name, or null
if it is not found.
|
int |
getRandomGlobalTechLevel()
Returns a random gaussian-distributed tech level from the
current low tech level bound to bound+10.
|
boolean |
isCurrentActive(java.lang.String key)
Returns whether the currents at the given key are still
active.
|
java.util.Iterator<Manufacturer> |
manufacterers()
Returns an iterator of manufacturers
|
java.lang.String |
registerElectrics(Electronics E,
java.lang.String oldKey)
Registers an electronic component that belongs
in a complex circuitry, like a panel or a
generator
|
boolean |
seekBatteryPower(Electronics.ElecPanel E,
java.lang.String key)
Certain Key Systems may automatically force batteries in their circuit
to activate in order to provide that system with power.
|
void |
unregisterAllElectronics(java.lang.String oldKey)
Unregisters all electronic components that belonged
in a complex circuitry, like a panel or a
generator, of the given key.
|
void |
unregisterElectronics(Electronics E,
java.lang.String oldKey)
Unregisters an electronic component that belonged
in a complex circuitry, like a panel or a
generator.
|
void |
updateManufacturer(Manufacturer manufacturer)
Updates a new manufacturer in the list.
|
activate, getServiceClient, L, propertiesLoaded, shutdown
copyOf, ID, initializeClass, name, newInstance
java.lang.String getElectronicsKey(CMObject o)
o
- the object to inspectvoid unregisterElectronics(Electronics E, java.lang.String oldKey)
E
- the electronic component to unregisteroldKey
- the last key registered to this devicevoid unregisterAllElectronics(java.lang.String oldKey)
oldKey
- the last key registered to this devicejava.lang.String registerElectrics(Electronics E, java.lang.String oldKey)
E
- the electronic component to registeroldKey
- the last key registered to this deviceboolean isCurrentActive(java.lang.String key)
key
- the current keyjava.util.List<java.lang.String> getMakeRegisteredKeys()
java.util.List<Electronics> getMakeRegisteredElectronics(java.lang.String key)
key
- the key to return electronics forboolean seekBatteryPower(Electronics.ElecPanel E, java.lang.String key)
E
- the key device to seek powerkey
- this devices keyManufacturer getDefaultManufacturer()
void addManufacturer(Manufacturer manufacturer)
manufacturer
- the one to addvoid delManufacturer(Manufacturer manufacturer)
manufacturer
- the one to removevoid updateManufacturer(Manufacturer manufacturer)
manufacturer
- the one to updateManufacturer getManufacturer(java.lang.String name)
name
- the manufacturer to fetchManufacturer getManufacturerOf(Electronics E, java.lang.String name)
E
- for random manufacturers, the item to checkname
- the manufacturer to fetchjava.util.Iterator<Manufacturer> manufacterers()
java.util.Iterator<Room> getComputerRooms(java.lang.String key)
key
- the circuit keyjava.util.Iterator<Electronics.Computer> getComputers(java.lang.String key)
key
- the circuit keyint getRandomGlobalTechLevel()
int getGlobalTechLevel()
void fixItemTechLevel(Electronics I, int newTechLevel)
I
- An electronics item that needs fixingnewTechLevel
- TODO


Counting constraints
[Using integer variables and constraints]
Functions | |
| void | Gecode::count (Home home, const IntVarArgs &x, int n, IntRelType irt, int m, IntConLevel icl=ICL_DEF) |
| Post propagator for . | |
| void | Gecode::count (Home home, const IntVarArgs &x, const IntSet &y, IntRelType irt, int m, IntConLevel icl=ICL_DEF) |
| Post propagator for . | |
| void | Gecode::count (Home home, const IntVarArgs &x, IntVar y, IntRelType irt, int m, IntConLevel icl=ICL_DEF) |
| Post propagator for . | |
| void | Gecode::count (Home home, const IntVarArgs &x, const IntArgs &y, IntRelType irt, int m, IntConLevel icl=ICL_DEF) |
| Post propagator for . | |
| void | Gecode::count (Home home, const IntVarArgs &x, int n, IntRelType irt, IntVar z, IntConLevel icl=ICL_DEF) |
| Post propagator for . | |
| void | Gecode::count (Home home, const IntVarArgs &x, const IntSet &y, IntRelType irt, IntVar z, IntConLevel icl=ICL_DEF) |
| Post propagator for . | |
| void | Gecode::count (Home home, const IntVarArgs &x, IntVar y, IntRelType irt, IntVar z, IntConLevel icl=ICL_DEF) |
| Post propagator for . | |
| void | Gecode::count (Home home, const IntVarArgs &x, const IntArgs &y, IntRelType irt, IntVar z, IntConLevel icl=ICL_DEF) |
| Post propagator for . | |
| void | Gecode::count (Home home, const IntVarArgs &x, const IntVarArgs &c, IntConLevel icl=ICL_DEF) |
| Posts a global count (cardinality) constraint. | |
| void | Gecode::count (Home home, const IntVarArgs &x, const IntSetArgs &c, IntConLevel icl=ICL_DEF) |
| Posts a global count (cardinality) constraint. | |
| void | Gecode::count (Home home, const IntVarArgs &x, const IntVarArgs &c, const IntArgs &v, IntConLevel icl=ICL_DEF) |
| Posts a global count (cardinality) constraint. | |
| void | Gecode::count (Home home, const IntVarArgs &x, const IntSetArgs &c, const IntArgs &v, IntConLevel icl=ICL_DEF) |
| Posts a global count (cardinality) constraint. | |
| void | Gecode::count (Home home, const IntVarArgs &x, const IntSet &c, const IntArgs &v, IntConLevel icl=ICL_DEF) |
| Posts a global count (cardinality) constraint. |
Detailed Description
- Note:
- Domain consistency on the extended cardinality variables of the Global Cardinality Propagator is only obtained if they are bounds consistent, otherwise the problem of enforcing domain consistency on the cardinality variables is NP-complete as proved by Qumiper et. al. in ''Improved Algorithms for the Global Cardinality Constraint''.
Function Documentation
| void Gecode::count | ( | Home | home, | |
| const IntVarArgs & | x, | |||
| int | n, | |||
| IntRelType | irt, | |||
| int | m, | |||
| IntConLevel | icl = ICL_DEF | |||
| ) |
Post propagator for .
Performs domain propagation but is not domain consistent.
| void Gecode::count | ( | Home | home, | |
| const IntVarArgs & | x, | |||
| const IntSet & | y, | |||
| IntRelType | irt, | |||
| int | m, | |||
| IntConLevel | icl = ICL_DEF | |||
| ) |
Post propagator for .
Performs domain propagation but is not domain consistent.
| void Gecode::count | ( | Home | home, | |
| const IntVarArgs & | x, | |||
| IntVar | y, | |||
| IntRelType | irt, | |||
| int | m, | |||
| IntConLevel | icl = ICL_DEF | |||
| ) |
Post propagator for .
Performs domain propagation (icl = ICL_DOM, default) and slightly less domain propagation (all other values for icl), where y is not pruned. Note that in both cases propagation is not comain consistent.
| void Gecode::count | ( | Home | home, | |
| const IntVarArgs & | x, | |||
| const IntArgs & | y, | |||
| IntRelType | irt, | |||
| int | m, | |||
| IntConLevel | icl = ICL_DEF | |||
| ) |
Post propagator for .
Performs domain propagation but is not domain consistent.
Throws an exception of type Int::ArgumentSizeMismatch, if x and y are of different size.
| void Gecode::count | ( | Home | home, | |
| const IntVarArgs & | x, | |||
| int | n, | |||
| IntRelType | irt, | |||
| IntVar | z, | |||
| IntConLevel | icl = ICL_DEF | |||
| ) |
Post propagator for .
Performs domain propagation but is not domain consistent.
| void Gecode::count | ( | Home | home, | |
| const IntVarArgs & | x, | |||
| const IntSet & | y, | |||
| IntRelType | irt, | |||
| IntVar | z, | |||
| IntConLevel | icl = ICL_DEF | |||
| ) |
Post propagator for .
Performs domain propagation but is not domain consistent.
| void Gecode::count | ( | Home | home, | |
| const IntVarArgs & | x, | |||
| IntVar | y, | |||
| IntRelType | irt, | |||
| IntVar | z, | |||
| IntConLevel | icl = ICL_DEF | |||
| ) |
Post propagator for .
Performs domain propagation (icl = ICL_DOM, default) and slightly less domain propagation (all other values for icl), where y is not pruned. Note that in both cases propagation is not comain consistent.
| void Gecode::count | ( | Home | home, | |
| const IntVarArgs & | x, | |||
| const IntArgs & | y, | |||
| IntRelType | irt, | |||
| IntVar | z, | |||
| IntConLevel | icl = ICL_DEF | |||
| ) |
Post propagator for .
Performs domain propagation but is not domain consistent.
Throws an exception of type Int::ArgumentSizeMismatch, if x and y are of different size.
| void Gecode::count | ( | Home | home, | |
| const IntVarArgs & | x, | |||
| const IntVarArgs & | c, | |||
| IntConLevel | icl = ICL_DEF | |||
| ) |
Posts a global count (cardinality) constraint.
Posts the constraint that and (no other value occurs).
Supports value (icl = ICL_VAL, default), bounds (icl = ICL_BND), and domain consistency (icl = ICL_DOM).
Throws an exception of type Int::ArgumentSame, if x contains the same unassigned variable multiply.
| void Gecode::count | ( | Home | home, | |
| const IntVarArgs & | x, | |||
| const IntSetArgs & | c, | |||
| IntConLevel | icl = ICL_DEF | |||
| ) |
Posts a global count (cardinality) constraint.
Posts the constraint that and (no other value occurs).
Supports value (icl = ICL_VAL, default), bounds (icl = ICL_BND), and domain consistency (icl = ICL_DOM).
Throws an exception of type Int::ArgumentSame, if x contains the same unassigned variable multiply.
| void Gecode::count | ( | Home | home, | |
| const IntVarArgs & | x, | |||
| const IntVarArgs & | c, | |||
| const IntArgs & | v, | |||
| IntConLevel | icl = ICL_DEF | |||
| ) |
Posts a global count (cardinality) constraint.
Posts the constraint that and (no other value occurs).
Supports value (icl = ICL_VAL, default), bounds (icl = ICL_BND), and domain consistency (icl = ICL_DOM).
Throws an exception of type Int::ArgumentSame, if x contains the same unassigned variable multiply.
Throws an exception of type Int::ArgumentSizeMismatch, if c and v are of different size.
| void Gecode::count | ( | Home | home, | |
| const IntVarArgs & | x, | |||
| const IntSetArgs & | c, | |||
| const IntArgs & | v, | |||
| IntConLevel | icl = ICL_DEF | |||
| ) |
Posts a global count (cardinality) constraint.
Posts the constraint that and (no other value occurs).
Supports value (icl = ICL_VAL, default), bounds (icl = ICL_BND), and domain consistency (icl = ICL_DOM).
Throws an exception of type Int::ArgumentSame, if x contains the same unassigned variable multiply.
Throws an exception of type Int::ArgumentSizeMismatch, if c and v are of different size.
| void Gecode::count | ( | Home | home, | |
| const IntVarArgs & | x, | |||
| const IntSet & | c, | |||
| const IntArgs & | v, | |||
| IntConLevel | icl = ICL_DEF | |||
| ) |
Posts a global count (cardinality) constraint.
Posts the constraint that and (no other value occurs).
Supports value (icl = ICL_VAL, default), bounds (icl = ICL_BND), and domain consistency (icl = ICL_DOM).
Throws an exception of type Int::ArgumentSame, if x contains the same unassigned variable multiply.
Throws an exception of type Int::ArgumentSizeMismatch, if c and v are of different size.


About the Classifier: Detect Sentiments in the text. This is a generic sentiment analysis classifier for texts in English. It works great in any kind of texts.
It classifies the text into three categories: "POSITIVE", "NEGATIVE" and "NEUTRAL"


This Call for Proposals closes on June 24th.
To get a feel for what we are interested in hearing about, you might want to look at other NodeConf chapters around the world ( London, Oslo, Barcelona).
We like to see anything that squarely fits into the spectrum of:
•Cutting-edge technological advances in the world of JavaScript or computer science in general, if somehow applicable to Node.js.
•We love hearing about the ingenious ideas & cool hacks you’re working on.
•JavaScript-related art installations or hacks.
•Hardware-related applications of JavaScript.
•Node.js community, history, past, present & future.

Not everybody is a natural talent on stage. Not everybody can produce kick-ass slide-decks. Not everybody is a live-demo-god. Not everybody knows they have something great to talk about.
There are about a million reasons why you don’t consider yourself a speaker, let alone at NodeConf Argentina, part of an established brand where all your heroes have spoken in the past. We are here to prove you wrong. If all you have is a gut feeling that you should be on stage, we are here to reach out and help you to develop or hone the skills you think you lack to deliver a great presentation.
•We are happy to brainstorm your interests to see if a great topic is hiding.
•We are happy to connect you with experienced speakers to help prepare your submission, or you can refer to the “Example Submission” section below for tips.
•We are happy to review and advise on how to produce a slide deck. If you don’t feel creative, just use these JSConf Keynote and PowerPoint templates.
•If you need practice giving talks, get in touch, we can hook you up with local meetup groups or set up a stage for you and a bunch of friends in advance, so you can practice in front of a friendly crowd.
•Again, whatever else you might need, we’re here to help.
Get in touch<EMAIL_ADDRESS>(just don’t use this to submit a proposal).
If you need more encouragement, check out the We Are All Awesome site that tries to convince you to speak!
If you get selected as a speaker at NodeConf Argentina, here’s what you get:
• Travel to Buenos Aires covered. This usually means we pay for your plane ticket, boat, raft, hyperloop pod, or space pod. We are happy to assist with booking your itinerary.
• Entrance to the conference. We won’t be done with the speaker selections by the end of the ticket sales, so if you want to make sure you can attend, you may want to purchase a ticket regardless. If you get selected to speak and you bought a ticket we will send you a refund.
• We cover your stay in Buenos Aires in a fancy hotel near the venue (including free Wifi) for the days of the conference and a day before and after (e.g. October 18th-20th). If you want to stay longer, we can arrange things, just let us know. You will have to cover extra nights, though.
If your employer can cover your travel and hotel, we are happy to list them as an awesome company sponsor.
If you have any special requirements, non-return trips (say you are going to awesome Patagonia for wine tasting, asado and whale sighting), just let us know, we can usually work these things out.)
If you want to bring a significant other, or bring your kid(s) and need child-care to be sorted out for the time of the conference, please also get in touch. We are here to make this easy for you!
Here’s roughly how we pick our talks:
Anonymize submissions, so we don’t bias against anything related to the submitter.
•Two rounds of voting:
- The first round rates each talk on a scale from 1 to 10.
- The top-N (~50) submissions are rated again on a 3-point scale (“meh”, “yay”, “MUST HAVE”).
•De-anonymize so we can (finally) bias against speaker details (based on our budget, we might opt for a local or at least closer-by [read: cheaper to transport] speaker). (and a number of details that we make up as we go along)
We expect 100-200 excellent submissions for 20-30 speaking slots. The process helps us select the right ones.
Here’s an example conference talk proposal from JSConf EU 2011:
How To Be Better
You’re read the Definitive Guide and flicked through the standard, you know how to assign default values with OR and you go to your local usergroup once in a while.
How do you move your JS skills along and upwards on the unstoppable path of true mastery? Do you want to be one of those folks who dismisses
wtfjs.com with a sniff, a wave of the hand and an offhand comment of “call recasts the parameter as an object”?
From the blindingly obvious (write more javascript) - through the positively heretical (never ever use JSLint - except when it’s a really good idea) - to the bizarre (take up needlework), come and be guided toward the bright shiny light where the gods live.
Submit your proposal by June 24th, 23:59:59 ART (GMT -3). No excuses.
Talks can be in English or Spanish. Don’t feel pressured to deliver your talk in english if you’re more comfortable speaking in spanish - and vice-versa! Live interpreting services will be available to attendees.
Talks are typically 25 minutes long (for longer talks we’d get in touch with you directly). There is no Q&A. We will be on a tight schedule and enforce the end of a talk rigorously. We suggest timing your presentation in advance.
Make sure you care, and make sure we see you care. Typos, sloppy formatting and all-lowercase submissions make our reading of your proposal tedious. These things will definitely count against your proposal.
Don’t overdo it either. If you need more than two paragraphs to get to the point of your topic, we need to ask you to slim things down. With the amount of submissions we get, the quicker you can to make a good impression, the better.
“I would have written a shorter letter, but I did not have the time” — Blaise Pascal
Original Topics. One of the things we strive to do with NodeConf Argentina is to push the community forward. We can’t do this if the same people keep talking about the same things all the time. Thus, we favour original content. If you want to discuss a topic that you have talked about elsewhere, try to add a twist, or new research, or development, something unique. Of course, if your talk is plain awesome as-is, go for that :)
All talks will be recorded and published on the internet for free, along with a recording of the slide deck, live-demo or other on-presenter-screen activity.
We do this for the benefit of the larger JS community and those who can’t make it to the conference. We hope you want to help out, but if you are in any way uncomfortable in any way, let us know and we will work things out.
Finally, since you retain full ownership of your slides and recording, we’d like to ask you to make your materials and recording available under a creative commons (we default to no commercial reuse) or other open source license.


In this project, you'll use generative adversarial networks to generate new images of faces.
You'll be using two datasets in this project:
Since the celebA dataset is complex and you're doing GANs in a project for the first time, we want you to test your neural network on MNIST before CelebA. Running the GANs on MNIST will allow you to see how well your model trains sooner.
If you're using FloydHub, set data_dir
to "/input" and use the FloydHub data ID "R5KrjnANiKVhLWAkpXhNBe".
# data_dir = './data'
# FloydHub - Use with data ID "R5KrjnANiKVhLWAkpXhNBe"
data_dir = '/input'
"""
DON'T MODIFY ANYTHING IN THIS CELL
"""
import helper
helper.download_extract('mnist', data_dir)
helper.download_extract('celeba', data_dir)
show_n_images = 25
"""
DON'T MODIFY ANYTHING IN THIS CELL
"""
%matplotlib inline
import os
from glob import glob
from matplotlib import pyplot
mnist_images = helper.get_batch(glob(os.path.join(data_dir, 'mnist/*.jpg'))[:show_n_images], 28, 28, 'L')
pyplot.imshow(helper.images_square_grid(mnist_images, 'L'), cmap='gray')
The CelebFaces Attributes Dataset (CelebA) dataset contains over 200,000 celebrity images with annotations. Since you're going to be generating faces, you won't need the annotations. You can view the first number of examples by changing show_n_images
.
show_n_images = 25
"""
DON'T MODIFY ANYTHING IN THIS CELL
"""
mnist_images = helper.get_batch(glob(os.path.join(data_dir, 'img_align_celeba/*.jpg'))[:show_n_images], 28, 28, 'RGB')
pyplot.imshow(helper.images_square_grid(mnist_images, 'RGB'))
Since the project's main focus is on building the GANs, we'll preprocess the data for you. The values of the MNIST and CelebA dataset will be in the range of -0.5 to 0.5 of 28x28 dimensional images. The CelebA images will be cropped to remove parts of the image that don't include a face, then resized down to 28x28.

You'll build the components necessary to build a GANs by implementing the following functions below:
model_inputs
discriminator
generator
model_loss
model_opt
train
This will check to make sure you have the correct version of TensorFlow and access to a GPU
"""
DON'T MODIFY ANYTHING IN THIS CELL
"""
from distutils.version import LooseVersion
import warnings
import tensorflow as tf
# Check TensorFlow Version
assert LooseVersion(tf.__version__) >= LooseVersion('1.0'), 'Please use TensorFlow version 1.0 or newer. You are using {}'.format(tf.__version__)
print('TensorFlow Version: {}'.format(tf.__version__))
# Check for a GPU
if not tf.test.gpu_device_name():
warnings.warn('No GPU found. Please use a GPU to train your neural network.')
else:
print('Default GPU Device: {}'.format(tf.test.gpu_device_name()))
Implement the model_inputs
function to create TF Placeholders for the Neural Network. It should create the following placeholders:
image_width
, image_height
, and image_channels
.z_dim
.Return the placeholders in the following the tuple (tensor of real input images, tensor of z data)
import problem_unittests as tests
def model_inputs(image_width, image_height, image_channels, z_dim):
"""
Create the model inputs
:param image_width: The input image width
:param image_height: The input image height
:param image_channels: The number of image channels
:param z_dim: The dimension of Z
:return: Tuple of (tensor of real input images, tensor of z data, learning rate)
"""
# TODO: Implement Function
tensor_of_real_input_images = tf.placeholder(tf.float32, [None, image_width, image_height, image_channels], name='inputs_real')
tensor_of_z_data = tf.placeholder(tf.float32, [None, z_dim], name='inputs_z')
learning_rate = tf.placeholder(tf.float32, None, name='learning_rate')
return tensor_of_real_input_images, tensor_of_z_data, learning_rate
"""
DON'T MODIFY ANYTHING IN THIS CELL THAT IS BELOW THIS LINE
"""
tests.test_model_inputs(model_inputs)
Implement discriminator
to create a discriminator neural network that discriminates on images
. This function should be able to reuse the variables in the neural network. Use tf.variable_scope
with a scope name of "discriminator" to allow the variables to be reused. The function should return a tuple of (tensor output of the discriminator, tensor logits of the discriminator).
def discriminator(images, reuse=False):
"""
Create the discriminator network
:param images: Tensor of input image(s)
:param reuse: Boolean if the weights should be reused
:return: Tuple of (tensor output of the discriminator, tensor logits of the discriminator)
"""
alpha = 0.2
with tf.variable_scope('discriminator', reuse=reuse):
layer1 = tf.layers.conv2d(images, 64, 5, strides=2, padding='same')
relul_1 = tf.maximum(alpha*layer1, layer1)
layer2 = tf.layers.conv2d(relul_1, 128, 5, strides=2, padding='same')
batchNorm_2 = tf.layers.batch_normalization(layer2, training=True)
relul_2 = tf.maximum(alpha*batchNorm_2, batchNorm_2)
layer3 = tf.layers.conv2d(relul_2, 256, 5, strides=2, padding='same')
batchNorm_3 = tf.layers.batch_normalization(layer3, training=True)
relul_3 = tf.maximum(alpha*batchNorm_3, batchNorm_3)
flatten = tf.reshape(relul_3, (-1, 4*4*256))
logits = tf.layers.dense(flatten,1)
prediction = tf.sigmoid(logits)
return prediction, logits
"""
DON'T MODIFY ANYTHING IN THIS CELL THAT IS BELOW THIS LINE
"""
tests.test_discriminator(discriminator, tf)
Implement generator
to generate an image using z
. This function should be able to reuse the variables in the neural network. Use tf.variable_scope
with a scope name of "generator" to allow the variables to be reused. The function should return the generated 28 x 28 x out_channel_dim
images.
def generator(z, out_channel_dim, is_train=True):
"""
Create the generator network
:param z: Input z
:param out_channel_dim: The number of channels in the output image
:param is_train: Boolean if generator is being used for training
:return: The tensor output of the generator
"""
# TODO: Implement Function
alpha=0.2
reuse = not is_train
with tf.variable_scope('generator', reuse=reuse):
x1 = tf.layers.dense(z, 4 * 4 * 512)
x1 = tf.reshape(x1, (-1, 4, 4, 512))
x1 = tf.layers.batch_normalization(x1, training=is_train)
x1 = tf.maximum(alpha * x1, x1)
x2 = tf.layers.conv2d_transpose(x1, 256, 4, strides=1, padding="valid")
x2 = tf.layers.batch_normalization(x2,training=is_train)
x2 = tf.maximum(alpha * x2, x2)
x3 = tf.layers.conv2d_transpose(x2, 128, 4, strides=2, padding="same")
x3 = tf.layers.batch_normalization(x3,training=is_train)
x3 = tf.maximum(alpha * x3, x3)
logits = tf.layers.conv2d_transpose(x3, out_channel_dim, 4, strides=2, padding="same")
outputs = tf.tanh(logits)
return outputs
"""
DON'T MODIFY ANYTHING IN THIS CELL THAT IS BELOW THIS LINE
"""
tests.test_generator(generator, tf)
Implement model_loss
to build the GANs for training and calculate the loss. The function should return a tuple of (discriminator loss, generator loss). Use the following functions you implemented:
discriminator(images, reuse=False)
generator(z, out_channel_dim, is_train=True)
def model_loss(input_real, input_z, out_channel_dim):
"""
Get the loss for the discriminator and generator
:param input_real: Images from the real dataset
:param input_z: Z input
:param out_channel_dim: The number of channels in the output image
:return: A tuple of (discriminator loss, generator loss)
"""
# TODO: Implement Function
d_model_real, d_logits_real = discriminator(input_real, reuse=False)
fake = generator(input_z, out_channel_dim, is_train=True)
d_logits_fake = discriminator(fake, reuse=True)
d_loss_real = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=d_logits_real,labels=tf.ones_like(d_logits_real) * (0.9)))
d_loss_fake = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=d_logits_fake,labels=tf.zeros_like(d_logits_fake)))
d_loss = d_loss_real + d_loss_fake
g_loss = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(logits=d_logits_fake, labels=tf.ones_like(d_logits_fake)))
return d_loss, g_loss
"""
DON'T MODIFY ANYTHING IN THIS CELL THAT IS BELOW THIS LINE
"""
tests.test_model_loss(model_loss)
Implement model_opt
to create the optimization operations for the GANs. Use tf.trainable_variables
to get all the trainable variables. Filter the variables with names that are in the discriminator and generator scope names. The function should return a tuple of (discriminator training operation, generator training operation).
def model_opt(d_loss, g_loss, learning_rate, beta1):
"""
Get optimization operations
:param d_loss: Discriminator loss Tensor
:param g_loss: Generator loss Tensor
:param learning_rate: Learning Rate Placeholder
:param beta1: The exponential decay rate for the 1st moment in the optimizer
:return: A tuple of (discriminator training operation, generator training operation)
"""
# TODO: Implement Function
t_vars = tf.trainable_variables()
g_vars = [var for var in t_vars if var.name.startswith('generator')]
d_vars = [var for var in t_vars if var.name.startswith('discriminator')]
all_update_ops = tf.get_collection(tf.GraphKeys.UPDATE_OPS)
g_update_ops = [var for var in all_update_ops if var.name.startswith('generator')]
d_update_ops = [var for var in all_update_ops if var.name.startswith('discriminator')]
with tf.control_dependencies(d_update_ops):
d_train_opt = tf.train.AdamOptimizer(learning_rate,beta1=beta1).minimize(d_loss, var_list=d_vars)
with tf.control_dependencies(g_update_ops):
g_train_opt = tf.train.AdamOptimizer(learning_rate,beta1=beta1).minimize(g_loss, var_list=g_vars)
return d_train_opt, g_train_opt
"""
DON'T MODIFY ANYTHING IN THIS CELL THAT IS BELOW THIS LINE
"""
tests.test_model_opt(model_opt, tf)
"""
DON'T MODIFY ANYTHING IN THIS CELL
"""
import numpy as np
def show_generator_output(sess, n_images, input_z, out_channel_dim, image_mode):
"""
Show example output for the generator
:param sess: TensorFlow session
:param n_images: Number of Images to display
:param input_z: Input Z Tensor
:param out_channel_dim: The number of channels in the output image
:param image_mode: The mode to use for images ("RGB" or "L")
"""
cmap = None if image_mode == 'RGB' else 'gray'
z_dim = input_z.get_shape().as_list()[-1]
example_z = np.random.uniform(-1, 1, size=[n_images, z_dim])
samples = sess.run(
generator(input_z, out_channel_dim, False),
feed_dict={input_z: example_z})
images_grid = helper.images_square_grid(samples, image_mode)
pyplot.imshow(images_grid, cmap=cmap)
pyplot.show()
Implement train
to build and train the GANs. Use the following functions you implemented:
model_inputs(image_width, image_height, image_channels, z_dim)
model_loss(input_real, input_z, out_channel_dim)
model_opt(d_loss, g_loss, learning_rate, beta1)
Use the show_generator_output
to show generator
output while you train. Running show_generator_output
for every batch will drastically increase training time and increase the size of the notebook. It's recommended to print the generator
output every 100 batches.
def train(epoch_count, batch_size, z_dim, learning_rate, beta1, get_batches, data_shape, data_image_mode):
"""
Train the GAN
:param epoch_count: Number of epochs
:param batch_size: Batch Size
:param z_dim: Z dimension
:param learning_rate: Learning Rate
:param beta1: The exponential decay rate for the 1st moment in the optimizer
:param get_batches: Function to get batches
:param data_shape: Shape of the data
:param data_image_mode: The image mode to use for images ("RGB" or "L")
"""
# TODO: Build Model
steps = 0
input_real, input_z, _ = model_inputs(data_shape[1], data_shape[2], data_shape[3], z_dim)
d_loss, g_loss = model_loss(input_real, input_z, data_shape[3])
d_train_opt, g_train_opt = model_opt(d_loss, g_loss, learning_rate, beta1)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for epoch_i in range(epoch_count):
for batch_images in get_batches(batch_size):
# TODO: Train Model
steps += 1
batch_images *= 2
batch_z = np.random.uniform(-1, 1, size=(batch_size, z_dim))
_ = sess.run(d_train_opt, feed_dict={input_real: batch_images, input_z: batch_z})
_ = sess.run(g_train_opt, feed_dict={input_real: batch_images, input_z: batch_z})
if steps % 100 == 0:
train_loss_d = sess.run(d_loss, feed_dict={input_real: batch_images, input_z: batch_z})
train_loss_g = g_loss.eval({input_z: batch_z})
print("Epoch {}/{}...".format(epoch_i + 1, epoch_count),
"Discriminator Loss: {:.4f}...".format(train_loss_d),
"Generator Loss: {:.4f}".format(train_loss_g))
show_generator_output(sess, 16, input_z, data_shape[3], data_image_mode)
Test your GANs architecture on MNIST. After 2 epochs, the GANs should be able to generate images that look like handwritten digits. Make sure the loss of the generator is lower than the loss of the discriminator or close to 0.
batch_size = 64
z_dim = 100
learning_rate = 0.0001
beta1 = 0.1
"""
DON'T MODIFY ANYTHING IN THIS CELL THAT IS BELOW THIS LINE
"""
epochs = 2
mnist_dataset = helper.Dataset('mnist', glob(os.path.join(data_dir, 'mnist/*.jpg')))
with tf.Graph().as_default():
train(epochs, batch_size, z_dim, learning_rate, beta1, mnist_dataset.get_batches,
mnist_dataset.shape, mnist_dataset.image_mode)
Run your GANs on CelebA. It will take around 20 minutes on the average GPU to run one epoch. You can run the whole epoch or stop when it starts to generate realistic faces.
batch_size = 64
z_dim = 100
learning_rate = 0.0001
beta1 = 0.5
"""
DON'T MODIFY ANYTHING IN THIS CELL THAT IS BELOW THIS LINE
"""
epochs = 1
celeba_dataset = helper.Dataset('celeba', glob(os.path.join(data_dir, 'img_align_celeba/*.jpg')))
with tf.Graph().as_default():
train(epochs, batch_size, z_dim, learning_rate, beta1, celeba_dataset.get_batches,
celeba_dataset.shape, celeba_dataset.image_mode)
When submitting this project, make sure to run all the cells before saving the notebook. Save the notebook file as "dlnd_face_generation.ipynb" and save it as a HTML file under "File" -> "Download as". Include the "helper.py" and "problem_unittests.py" files in your submission.


Hamid Contracting, LLC is a general contracting company based in South Jersey. We have over 30 years of
experience managing commerical and residential construction projects.
We specialize in new construction (start to finish), additions, and renovations.
Additionally, our co-owner is a Licensed Professional Engineer and can provide engineering
solutions in addition to construction expertise.
Please see our work below or contact us
if you would like more information on how we can help on your next project.
Our team has successfully completed commericial projects for clients in healthcare, government, and non-profit industries. These projects include new construction and additions/renovations to existing offices and other small to medium size buildings.
We have been building homes all over the New Jersey area for the past three decades. Our projects have ranged from single-story to multi-million dollar homes. We work with homeowners through each step of the process, such as choosing a budget, permitting, and selecting finishes.
Most of the houses we've built were designed in-house. We have engineers and designers on staff. We also offer architectural services such as drafting and 3D-Modeling.
Completed in 2018. Located in Galloway, NJ.
Located in Toms River, NJ
Located in Galloway, NJ
400 Vine Avenue
Galloway NJ, 08205
P:<PHONE_NUMBER>
E<EMAIL_ADDRESS>H: Monday - Friday: 8:00 AM to 5:00 PM


Creators of the online analytical processing (OLAP) database management system ClickHouse have announced their decision to officially incorporate as a company. The creator of ClickHouse, Alexey Milovidov (CTO), will be joined by co-founders and seasoned enterprise software executives, Yury Izrailevsky (President, Product and Engineering) and Aaron Katz (CEO), along with nearly $50M in Series A funding led by Index Ventures and Benchmark.
ClickHouse is an open-source, column-oriented OLAP database management system that allows users to generate analytical reports using SQL queries in real-time. Its technology works 100-1,000x faster than traditional database management systems, and processes hundreds of millions to over a billion rows and tens of gigabytes of data per server per second. With a widespread user base around the globe, the technology has received praise for its reliability, ease of use, and fault tolerance.
9/20/21
New financing will allow the open source success to build a world-class, commercial-grade cloud solution that’s secure, compliant, and convenient for any customer to use.
Read More9/20/21
The creators of the popular ClickHouse project just raised $50 million from Index and Benchmark to form a company that will take on Splunk and Druid in the white-hot data space.
Read More9/20/21
Our road to ClickHouse started like a good spy novel, with a complex series of introductions over Telegram, clandestine text conversations spanning months before we finally managed to meet the team “face-to-face” (aka over Zoom).
Read More9/20/21
Yandex announces the spin off of ClickHouse, Inc., a pioneering company focused on open-source column-oriented database management systems (DBMS) for analytical processing.
Read MoreIf you have any more thoughts or questions, feel free to contact the ClickHouse team directly at feedback@clickhouse.com


User Manual
If you are new to MNE, consider first reading the Cookbook, as it
gives some simple steps for starting with analysis. The other sections provide
more in-depth information about how to use the software.
You can also jump to the Python API Reference for specific Python function
and class usage information.
Cookbook
A quick run-through of the basic steps involved in M/EEG source analysis.
Reading your data
How to get your raw data loaded in MNE.
Preprocessing
Dealing with artifacts and noise sources in data.
Source localization
Projecting raw data into source (brain) space.
Time-frequency analysis
Decomposing time-domain signals into time-frequency representations.
Statistics
Using parametric and non-parametric tests with M/EEG data.
Decoding
Datasets
How to use dataset fetchers for public data
Migrating
Pitfalls
C Tools
Additional information about various MNE-C tools.
MATLAB Tools
Information about the MATLAB toolbox.
Appendices
More details about our implementations and software.


TechKnowFile 2016
Press space to navigate
Jr. UX Designer on the ACORN Team
U of T's student-facing information system, and ROSI SWS' replacement.
User Experience Design about designing useful, usable things while keeping the user's goals in the centre of the process.
It's also about creating enjoyable experiences.
Lean UX aims to improve user experience in the most efficient and effective way possible.
Focuses: Learning by experimenting, responding to change & building shared knowledge.
Don't worry about solutions just yet.
"If you can draw a circle, a square, a triangle, you can draw every interface." - Lean UX
The best insights will come from experimenting with new ideas and not being afraid to make mistakes.
Figure 1: Alternate uses of a whiteboard
(╯°□°）╯︵ ┻━┻


Use a master password to generate passwords for all sites
This is adapted from Nic Wolff's Password Generator so perhaps its best if I let him explain what it is.
 I mean, I don't mind having really important ones be made-up and memorized but what about all those e-commerce and community sites that want me to create accounts? I end up using the same password at all of them and then I feel stupid knowing that one SQL Server exploit or disgruntled admin could cost me my whole identity.
So, this is a little Javascript program that will concatenate two fields and MD5 them. The idea is that you choose one master password to secure all your others, and then generate passwords for each site, server, router, &c. by putting a completely obvious name for that resource in the "Site name" field.
Then just hit return and copy your new password so you can paste it into whatever site you're registering at. It'll be different for every site, and undiscoverable by anyone who doesn't know your master password but you can always retrieve it by simply using this form again.
(Note that all this is done by your browser running the program that's in the source of this page; nothing is passed back to my server. You can make your own local copy of this page, use it off-line, &c.)
The source for this site is available on Github.