@(restaurantName: String)
All fields must be entered!
This restaurant already exists!
Restaurant successfully added!
Add Logo
Pricing
Name
Description
Add Cover Photo
Category
Location
Choose Exact Location


Forest old boy keen to see his own City Ground dynasty as defender delivers some fighting talk
Sabri Lamouchi's Reds will return to action at Bristol City this weekend following the international break
by Sarah ClapsonSTAND AND DELIVER
Owner Evangelos Marinakis has had a key influence on the plans to redevelop Nottingham Forest’s City Ground.
Following the initial announcement earlier in the year, fresh images of how the stadium could look were released last week as a planning application is expected to be submitted before the end of the year.
Phase one of the project centres on the Peter Taylor Stand, which will be rebuilt to an increased capacity of 10,000 and accommodate new facilities such as a museum and club shop.
And in the intervening months between the plans being unveiled and going to public consultation, Marinakis has helped to instigate some “subtle changes” to the Peter Taylor Stand proposals.
RISING SON
Lars Bohinen played a key role in Nottingham Forest's rapid rise from Division One strugglers to Premier League contenders in the 90s and is now hoping his son can do the same 25 years later.
The Norwegian midfielder had a special relationship with the City Ground faithful and still looks back on his time playing for the Reds with great affection.
Now managing Aelsund, Lars has guided his team to the top division where he will come up against his talented son, although Bohinen senior is hoping Emil can use his form as a stepping stone to English football.
Emil currently has four goals and six assists in the Eliteserien and his dad feels he is well suited to the rigours of Championship football.
DAWS OPENING
Skipper Michael Dawson jokes he has had to be “held back”, so keen is he to get back out on the pitch for Nottingham Forest.
But the defender knows there are no guarantees he will walk straight into Sabri Lamouchi’s line-up after recovering from a calf problem.
Dawson had started each of the Reds’ opening nine league games of the season before being forced off in the 3-2 victory over Stoke City at the end of September.
Since then, he has watched on as Forest have maintained their push towards the top of the Championship table, with summer signing Chema and Tobias Figueiredo fighting it out to partner Joe Worrall in defence.
INJURY LATEST
Nottingham Forest make the trip to Ashton Gate on Saturday looking to make it three wins on the spin.
It will be two weeks since their last game by the time they kick off against Bristol City, but Sabri Lamouchi’s men will be hoping to carry the momentum from the win over Derby last time out.
Forest start the game above this weekend’s opponents on goal difference alone, with both sides sat on 28 points, although the Reds do have a game in hand.
But Lee Johnson’s men go into the game with their injury worries easing.
Nottingham Forest latest
This is your round up of all things Forest; the one-stop shop that will keep you updated on the latest goings on at the City Ground and beyond.
Transfers, injuries, match-days and managers, we’ve got you covered.
We’ll be bringing the very latest on the Reds throughout the week and around the clock.
Make sure you keep yourself updated with our handy daily catch up...
Must reads...
- Reds skipper Dawson on the battle ahead
- New Notts owners on Forest relationship
- Lamouchi's message over stadium plans
- Worrall picks his Reds team of the decade
For all your latest NFFC news, opinion, analysis and transfer gossip, click here
You can follow our Reds reporter Sarah Clapson on Twitter, and her email address is<EMAIL_ADDRESS>Sign up for our free Forest WhatsApp service for latest news
Keep up to date with the latest Nottingham Forest news, features and exclusives from Nottinghamshire Live via our free WhatsApp service.
Text NEWS to<PHONE_NUMBER>2 and then add the number to your phone contacts book as ForestLive to receive daily updates and breaking news from our Reds reporter Sarah Clapson.
Your phone number won't be shared with any other members of the group. Click here for more information on the service.


8 soldiers stuck under snow as avalanche hits Army patrol in Siachen
Sources said that the patrolling party, including porters, were evacuating another person who had fallen sick at his post.
by ANINew Delhi: An avalanche hit Army positions in the Siachen Glacier after which eight personnel are stuck under snow, Army sources said.
The avalanche had hit the Army positions in the northern glacier at around 3:30 pm today. The altitudes in the northern glacier are around 18,000 feet and above.
The Army personnel hit by the avalanche were part of a patrolling party consisting eight persons and were in the northern glacier when the incident happened.
Sources said that the patrolling party, including porters, were evacuating another person who had fallen sick at his post.
All possible efforts are being made by the force to recover the troops from under the snow where the temperatures below minus 30 degrees are common during the winters.
Siachen Glacier is the world's highest battlefield and more troops have been killed in weather and terrain-related incidents in the area than in enemy firing.
India has deployed troops in its territory since 1984, after Pakistan tried to usurp the glacier by sending its troops and mountaineering expeditions in the area.
Catch the latest news, live coverage and in-depth analyses from India and World. Follow us on Facebook and Twitter.


I’m an inquisitive Data Scientist who loves exploring data and spotting trends. I am passionate about working with large data sets and algorithms to build predictive models that cater to complex business needs and help businesses make more informed decisions.
I’ve been able to up-skill in Machine Learning and Data Analysis using Python from General Assembly, Sydney.


We're loading the content, give us a second. This won't take long!
Navigation
Copyright 2017. All rights reserved
Contact Us
Customise your look with premium colours and personalised details.


--- layout: page title: "Real World Haskell, 1st Edition" prev: starting_split_000.html next: starting_ghc.html book_path: books/real-world-haskell-_oeb/ --- {% include JB/setup %} {% raw %}
As you read the early chapters of this book, keep in mind that we will sometimes introduce ideas in restricted, simplified form. Haskell is a deep language, and presenting every aspect of a given subject all at once is likely to prove overwhelming. As we build a solid foundation in Haskell, we will expand upon these initial explanations.


- read() - Method in class org.apache.fontbox.cmap.FilterInputStream
-
Reads the next byte of data from this input stream.
- read(byte[]) - Method in class org.apache.fontbox.cmap.FilterInputStream
-
Reads up to byte.length
bytes of data from this
input stream into an array of bytes.
- read(byte[], int, int) - Method in class org.apache.fontbox.cmap.FilterInputStream
-
Reads up to len
bytes of data from this input stream
into an array of bytes.
- read() - Method in class org.apache.fontbox.cmap.PushbackInputStream
-
Reads the next byte of data from this input stream.
- read(byte[], int, int) - Method in class org.apache.fontbox.cmap.PushbackInputStream
-
Reads up to len
bytes of data from this input stream into
an array of bytes.
- read() - Method in class org.apache.fontbox.ttf.MemoryTTFDataStream
-
Read an unsigned byte.
- read(byte[], int, int) - Method in class org.apache.fontbox.ttf.MemoryTTFDataStream
-
- read() - Method in class org.apache.fontbox.ttf.TTFDataStream
-
Read an unsigned byte.
- read(int) - Method in class org.apache.fontbox.ttf.TTFDataStream
-
Read a specific number of bytes from the stream.
- read(byte[], int, int) - Method in class org.apache.fontbox.ttf.TTFDataStream
-
- read() - Method in class org.apache.fontbox.util.FilterInputStream
-
Reads the next byte of data from this input stream.
- read(byte[]) - Method in class org.apache.fontbox.util.FilterInputStream
-
Reads up to byte.length
bytes of data from this
input stream into an array of bytes.
- read(byte[], int, int) - Method in class org.apache.fontbox.util.FilterInputStream
-
Reads up to len
bytes of data from this input stream
into an array of bytes.
- read() - Method in class org.apache.fontbox.util.PushbackInputStream
-
Reads the next byte of data from this input stream.
- read(byte[], int, int) - Method in class org.apache.fontbox.util.PushbackInputStream
-
Reads up to len
bytes of data from this input stream into
an array of bytes.
- read32Fixed() - Method in class org.apache.fontbox.ttf.TTFDataStream
-
Read a 16.16 fixed value, where the first 16 bits are the decimal and the last 16 bits are the fraction.
- readByte() - Method in class org.apache.fontbox.cff.DataInput
-
Read one single byte from the buffer.
- readBytes(int) - Method in class org.apache.fontbox.cff.DataInput
-
Read a number of single byte values from the buffer.
- readCard16() - Method in class org.apache.fontbox.cff.CFFDataInput
-
Read one single Card16 value from the buffer.
- readCard8() - Method in class org.apache.fontbox.cff.CFFDataInput
-
Read one single Card8 value from the buffer.
- readInstructions(TTFDataStream, int) - Method in class org.apache.fontbox.ttf.GlyfDescript
-
Read the hinting instructions.
- readInt() - Method in class org.apache.fontbox.cff.DataInput
-
Read one single int (4 bytes) from the buffer.
- readInternationalDate() - Method in class org.apache.fontbox.ttf.TTFDataStream
-
Read an eight byte international date.
- readLong() - Method in class org.apache.fontbox.ttf.MemoryTTFDataStream
-
Read an unsigned byte.
- readLong() - Method in class org.apache.fontbox.ttf.TTFDataStream
-
Read an unsigned byte.
- readOffset(int) - Method in class org.apache.fontbox.cff.CFFDataInput
-
Read the offset from the buffer.
- readOffSize() - Method in class org.apache.fontbox.cff.CFFDataInput
-
Read the offsize from the buffer.
- readShort() - Method in class org.apache.fontbox.cff.DataInput
-
Read one single short value from the buffer.
- readSID() - Method in class org.apache.fontbox.cff.CFFDataInput
-
Read a SID from the buffer.
- readSignedByte() - Method in class org.apache.fontbox.ttf.TTFDataStream
-
Read a signed byte.
- readSignedInt() - Method in class org.apache.fontbox.ttf.MemoryTTFDataStream
-
Read a signed integer.
- readSignedShort() - Method in class org.apache.fontbox.ttf.MemoryTTFDataStream
-
Read an signed short.
- readSignedShort() - Method in class org.apache.fontbox.ttf.TTFDataStream
-
Read an signed short.
- readString(int) - Method in class org.apache.fontbox.ttf.TTFDataStream
-
Read a fixed length ascii string.
- readString(int, String) - Method in class org.apache.fontbox.ttf.TTFDataStream
-
Read a fixed length ascii string.
- readUnsignedByte() - Method in class org.apache.fontbox.cff.DataInput
-
Read one single unsigned byte from the buffer.
- readUnsignedByte() - Method in class org.apache.fontbox.ttf.TTFDataStream
-
Read a unsigned byte.
- readUnsignedByteArray(int) - Method in class org.apache.fontbox.ttf.TTFDataStream
-
Read an unsigned byte array.
- readUnsignedInt() - Method in class org.apache.fontbox.ttf.TTFDataStream
-
Read an unsigned integer.
- readUnsignedShort() - Method in class org.apache.fontbox.cff.DataInput
-
Read one single unsigned short (2 bytes) value from the buffer.
- readUnsignedShort() - Method in class org.apache.fontbox.ttf.MemoryTTFDataStream
-
Read an unsigned short.
- readUnsignedShort() - Method in class org.apache.fontbox.ttf.TTFDataStream
-
Read an unsigned short.
- readUnsignedShortArray(int) - Method in class org.apache.fontbox.ttf.TTFDataStream
-
Read an unsigned short array.
- register(int, String) - Method in class org.apache.fontbox.cff.charset.CFFCharset
-
Adds a new SID/name combination to the charset.
- register(int, int) - Method in class org.apache.fontbox.cff.encoding.CFFEncoding
-
Adds a new code/SID combination to the encoding.
- REPEAT - Static variable in class org.apache.fontbox.ttf.GlyfDescript
-
if set, the next byte specifies the number of additional
times this set of flags is to be repeated.
- reset() - Method in class org.apache.fontbox.cmap.FilterInputStream
-
Repositions this stream to the position at the time the
mark
method was last called on this input stream.
- reset() - Method in class org.apache.fontbox.util.FilterInputStream
-
Repositions this stream to the position at the time the
mark
method was last called on this input stream.
- resolve() - Method in class org.apache.fontbox.ttf.GlyfCompositeDescript
-
Resolve all parts of an composite glyph.
- resolve() - Method in class org.apache.fontbox.ttf.GlyfDescript
-
Resolve all parts of an composite glyph.
- resolve() - Method in interface org.apache.fontbox.ttf.GlyphDescription
-
Resolve all parts of an composite glyph.
- ResourceLoader - Class in org.apache.fontbox.util
-
This class will handle loading resource files(AFM/CMAP).
- reverse(int) - Static method in class ca.weblite.codename1.lang.Integer
-
Reverses the order of the bits of the specified integer.
- reverse(long) - Static method in class ca.weblite.codename1.lang.Long
-
Reverses the order of the bits of the specified long value.
- reverseBytes(int) - Static method in class ca.weblite.codename1.lang.Integer
-
Reverses the order of the bytes of the specified integer.
- reverseBytes(long) - Static method in class ca.weblite.codename1.lang.Long
-
Reverses the order of the bytes of the specified long value.
- reverseBytes(short) - Static method in class ca.weblite.codename1.lang.Short
-
Reverses the bytes of the specified short.
- rotateLeft(int, int) - Static method in class ca.weblite.codename1.lang.Integer
-
Rotates the bits of the specified integer to the left by the specified
number of bits.
- rotateLeft(long, int) - Static method in class ca.weblite.codename1.lang.Long
-
Rotates the bits of the specified long value to the left by the specified
number of bits.
- rotateRight(int, int) - Static method in class ca.weblite.codename1.lang.Integer
-
Rotates the bits of the specified integer to the right by the specified
number of bits.
- rotateRight(long, int) - Static method in class ca.weblite.codename1.lang.Long
-
Rotates the bits of the specified long value to the right by the
specified number of bits.
- ROUND_XY_TO_GRID - Static variable in class org.apache.fontbox.ttf.GlyfCompositeComp
-
If set, xy values are rounded to those of the closest grid lines.


Carol Y
Work
About
Resume
Fun
The fun stuff - my food related hobbies
Sometimes, I like to draw pictures of food…
See More Art
and make cards with food puns...
and make miniature clay food.


STICKY SLIDER NAV V2
Sliding content with sticky tab nav
html
javascript
css
vue
Other
ES6
something about es6
Flexbox
something about flexbox
React
something about react
Angular
something about angular
Other
something about other


SYNTAX: -acquire_experiment [full_img_path]
DESCRIPTION: Acquires an image experiment in Zen, saves it as LSM file to given path.
Image window is closed as soon as Zen finishes saving image to file system.
An image experiment can be many types of images: single scan, z stack, time series,
bleaching etc. The type of image acquired depends on what is checked for the image
experiment in Zen. Currently only single scans or z stacks can be set programmatically
for the experiment type.
BUG: If image is acquire but not saved, Zen does not hide the image experiment progress
bar even after the image is done.
ARGS:
full_img_path [string, optional]: full path of lsm image to be saved. If not
specified the image will be acquired but not saved and closed. MUST be surrounded
by "" if spaces exist in path.
EXAMPLE: -acquire_experiment "C:\TestImages\testimage01.lsm"
SYNTAX: -import_marked_locations file_path
DESCRIPTION: clears current marked locations in zen, and then imports a file containing
xyz tab delimited stage coordinates and adds them to the marked location list. First
line of file is skipped, assumed to be header: x tab y tab z.
File would look like (not tab before first column):
x y z
25.5 1500.00 15.00
1400 2500 -21
5500 -2500 0
BUG: the popup menu does not display new marked locations, you must click [Mark] once
in the Marked Locations menu in the |Stage| tab for it to update the menu. This action
will add another marked location to the list, so just ignore this last entry.
ARGS:
file_path [string, required]: full path to a text file containing locations to be be added
to the marked locations list in zen
EXAMPLE: -import_marked_locations "C:\mylocations.xyz"
SYNTAX: -export_marked_locations file_path
DESCRIPTION: saves the current marked locations in Zen to a text file in xyz tab delimited
format to the path specified.
File would look like (no tabs before first column):
x y z
25.5 1500.00 15.00
1400 2500 -21
5500 -2500 0
ARGS:
file_path [string, required]: full path to a text file containing to be written to.
EXAMPLE: -exportmarked_locations "C:\mylocations.xyz"
SYNTAX: -set_experiment_actions isZStack isTimeseries
DESCRIPTION: Checks or unchecks the checkboxes for experiment type, adding specific
actions to the next image experiment acquired. Currently the Bleaching, TileScan,
Positions, and Regions checkboxes are not supported and cannot be modified programatically.
ARGS
isZStack [boolean(1=TRUE, 0=False), required]: true checks zstack checkbox, adding
zstack to the experiment.
isTimeseries [boolean(1=TRUE, 0=False), required]: true checks timeseries checkbox,
adding timeseries to the experiment.
EXAMPLE: -set_experiment_actions 1 0
SYNTAX: -get_experiment_actions
DESCRIPTION: Checks or unchecks the checkboxes for experiment type, adding specific
actions to the next image experiment acquired. Currently the Bleaching, TileScan,
Positions, and Regions checkboxes are not supported and cannot be modified programatically.
OUTPUT: isZstack isTimeseries
isZStack [boolean(True, False)]: true mean z stack checkbox is checked.
isTimeseries [boolean(True, False)]: true means time series checkbox is checked.
adding timeseries to the experiment.
EXAMPLE: -get_experiment_actions
SYNTAX: -set_aotf track_name laser_name val
DESCRIPTION: For the given track name and laser name, sets the aotf to the given value.
The AOTF is a percent value in which the laser light is accurately attenuated.
ARGS:
track_name [string, required]: name of the track as specified in the |Imaging Setup| tab. This
default for this is "Track1"
laser_name [string, required]: name of laser to be adjusted as they are named in the |Channels| tab.
In this case the laser name is the wavelength of the laser, found below the first track
there is a series of labeled check boxes, each for a laser.
Typicals names: 458, 477, 488,514,543,633
val [float, required]: percent value for aotf. rounded to one decimal or integer
EXAMPLE: -set_aotf "Track1" "488" 35
SYNTAX: -get_aotf track_name laser_name
DESCRIPTION: For the given track name and laser name, gets the aotf value
The AOTF is a percent value in which the laser light is accurately attenuated.
ARGS:
track_name [string, required]: name of the track as specified in the |Imaging Setup| tab. This
default for this is "Track1"
laser_name [string, required]: name of laser to be adjusted as they are named in the |Channels| tab.
In this case the laser name is the wavelength of the laser, found below the first track
there is a series of labeled check boxes, each for a laser.
Typicals names: 458, 477, 488,514,543,633
OUTPUT: val
val [double]: value of aotf for specified track_name and laser_name
EXAMPLE: -get_aotf "Track1" "488"
SYNTAX: -set_channel_gain track_name channel_name val
DESCRIPTION: given the track and the name of the channel, sets the gain level for the
detector to the specified value (integer).
ARGS:
track_name [string, required]: name of the track as specified in the |Imaging Setup| tab. This
default for this is "Track1"
channel_name [integer, required]: name of channel wheret he gain will be changed as defined in the
imaging tab. Usually called something like "Ch1","Ch2" etc.
val [r, integer]: new gain level for detector
EXAMPLE: -set_channel_gain "Track1" "Ch2" 650
SYNTAX: -get_channel_gain track_name channel_name
DESCRIPTION: given the track and the name of the channel, gets the gain level for the
detector.
ARGS:
track_name [string, required]: name of the track as specified in the |Imaging Setup| tab. This
default for this is "Track1"
channel_name [integer, required]: name of channel wheret he gain will be changed as defined in the
imaging tab. Usually called something like "Ch1","Ch2" etc.
OUTPUT: val
val [double]: value for channel gain for specified track and channel
EXAMPLE: -get_channel_gain "Track1" "Ch2"
SYNTAX: -set_pinhole_diameter track_name channel_name val
DESCRIPTION: Set the pinhole diameter for pinhole associated with specified track and channel.
ARGS:
track_name [string, required]: name of the track as specified in the |Imaging Setup| tab. This
default for this is "Track1"
channel_name [integer, required]: name of channel wheret he gain will be changed as defined in the
imaging tab. Usually called something like "Ch1","Ch2" etc.
val [double/int, required]: diameter for the pinhole, in micrometers, rounded to 2 decimals
points or intenger
EXAMPLE: -set_pinhole_diameter Track1 CH2 75
SYNTAX: -get_pinhole_diameter track_name channel_name
DESCRIPTION: get the pinhole diameter for pinhole associated with specified track and channel.
ARGS:
track_name [string, required]: name of the track as specified in the |Imaging Setup| tab. This
default for this is "Track1"
channel_name [integer, required]: name of channel wheret he gain will be changed as defined in the
imaging tab. Usually called something like "Ch1","Ch2" etc.
OUTPUT: val
val [double]: diameter of specified pinhole (um).
EXAMPLE: -set_pinhole_diameter Track1 CH2
SYNTAX: -set_pinhole_xy pinhole_name x y
DESCRIPTION: Set the pinhole xy position for the specified pinhole_name. Units in um.
BUG: This appears to overwrite the stored positions for the pinhole, so you cannot
revert to the original position by clicking "Move to Stored Position". Conclusion:
Dont use this unless you know the preset value!! Only works with PH1, cannot select
other pinholes. No solution found yet.
NOTE: This function is disabled
ARGS:
pinhole_name [r, string/int]: either the name or index of the pinhole to adjust.
Name is name found in "Adjust Pinhole and Collimator" in Maitain Tab
Index starts at 0 for choices in "Adjust Pinhole and Collimator" in Maitain Tab
x [double/int, required]: x position for pinhole, in micrometers, rounded to 2 decimals
points or intenger
y [double/int, required]: y position for pinhole, in micrometers, rounded to 2 decimals
points or intenger
EXAMPLE: -set_pinhole_xy "PH2" 100 -50
SYNTAX: -get_pinhole_xy pinhole_name
DESCRIPTION: get the pinhole xy position for the specified pinhole_name. Units in um.
BUG: This appears to overwrite the stored positions for the pinhole, so you cannot
revert to the original position by clicking "Move to Stored Position". Conclusion:
Dont use this unless you know the preset value!! Only works with PH1, cannot select
other pinholes. No solution found yet.
NOTE: This function is disabled
ARGS:
pinhole_name [r, string/int]: either the name or index of the pinhole to adjust.
Name is name found in "Adjust Pinhole and Collimator" in Maitain Tab
Index starts at 0 for choices in "Adjust Pinhole and Collimator" in Maitain Tab
OUTPUT: x y
x [double]: x coordinate of specified pinhole (um).
y [double]: x coordinate of specified pinhole (um).
EXAMPLE: -set_pinhole_xy "PH2"
SYNTAX: -set_laser_current_percent laser_name val
DESCRIPTION: Set the % current for the specified laser. This only works if the laser
current is adjustable (HeNe lasers are not adjustable, for example).
WARNING: For gas argon based laser systems do not set about 50%, will shorten life!!
ARGS:
laser_name [string/int, required]: either name or index of the laser to adjust
Name is the name in the |Laser| column in the Laser tab in the acquisition tab
Index starts at 0 in the entries in the table in the Laser tab
val [integer, required]: sets the percent current for the laser
EXAMPLE: -set_laser_current_percent "Argon/2" 50
SYNTAX: -get_laser_current_percent laser_name
DESCRIPTION: Get the % current for the specified laser. This only works if the laser
current is adjustable (HeNe lasers are not adjustable, for example).
WARNING: For gas argon based laser systems do not set about 50%, will shorten life!!
Bug: Can only seem to select argon laser (first laser by index), which for this system is
acceptable because that is the only adjustable current laser.
ARGS:
laser_name [string/int, required]: either name or index of the laser to adjust
Name is the name in the |Laser| column in the Laser tab in the acquisition tab
Index starts at 0 in the entries in the table in the Laser tab.
OUTPUT: val
val [integer]: the percent current for the laser.
EXAMPLE: -get_laser_current_percent "Argon/2"
SYNTAX: -zstack_center_current
DESCRIPTION: Centers z stack on current z coordinate position so that the next
acquired z stack is centered around this new coordinate (with -acquire_experiment
command).
This adjusts the zstack center offset so that:
zstack_center + zstack_center_offset = curent_z_position
ARGS:
none
EXAMPLE: -zstack_center_current
SYNTAX: -set_zstack_center z
DESCRIPTION: Sets center of z stack to specified z position (units in micrometers,
rounded to two decimal points or integer).
ARGS:
z [float, required]: float specifying z posiiton of z stack center (units um,
rounded to 2 decimal points or integer).
EXAMPLE: -zstack_center 30.50
SYNTAX: -get_zstack_center
DESCRIPTION: gets center of z stack, halfway between start and end values
OUTPUT: z
z [double]: double specifying z posiiton of z stack center (um)
EXAMPLE: -get_zstack_center
SYNTAX: -set_zstack_range z1 z2 mode
DESCRIPTION: sets start and end of zstack, keeping EITHER nz or dz constant.
ARGS:
z1 [double, required]: double specifying start of zstack (um)
z2 [double, required]: double specifying end of zstack (um)
mode [string, required]: keyword that must be either "SLICES" or "SPACING".
If SLICES, then zstack slices number is kept constant while setting range.
If SPACING, then spacing between z slices is kept constant while setting range.
EXAMPLE: -set_zstack_range 50 100
SYNTAX: -get_zstack_range
DESCRIPTION: gets start and end of currently set zstack.
OUTPUT: z1 z2
z1 [double, required]: double specifying start of zstack (um)
z2 [double, required]: double specifying end of zstack (um)
EXAMPLE: -get_zstack_range
SYNTAX: -set_zstack_dz dz
DESCRIPTION: Set spacing between z slices for a zstack in the z stack tab
ARGS:
dz [float, required]: float specifying z axis spacing between z slices units um,
rounded to 2 decimal points or integer).
EXAMPLE: -zstack_dz 10.00
SYNTAX: -get_zstack_dz
DESCRIPTION: Get spacing between z slices for a zstack in the z stack tab
OUTPUT: dz
dz [float, required]: float specifying z axis spacing between z slices (um)
EXAMPLE: -get_zstack_dz
SYNTAX: -set_zstack_nz nz
DESCRIPTION: Set total number of z slices in z stack tab.
ARGS:
nz [integer, required]: number of z slices for next z stack acquired.
EXAMPLE: -set_zstack_nz 6
SYNTAX: -get_zstack_nz
DESCRIPTION: get total number of z slices in z stack tab.
OUTPUT: nz
nz [integer, required]: number of z slices for next z stack acquired.
EXAMPLE: -get_zstack_nz
SYNTAX: -load_config config_name
DESCRIPTION: Loads specified imaging configuration, which is listed in the
configuration menu (acquisition tab). An imaging configuration is a collection
of all of the settings needed to acquire an image in a certain way in Zen.
BUG: if config_name does not exist a popup menu will appear that must be manually closed
instead of returning a "FAIL: config not exist message".
ARGS:
config_name [string, required]: name of configuration to be loaded, this should match
one of the configurations in the configuration menu.
EXAMPLE: -load_config "10X_Test"
SYNTAX: -save_config "config_name"
DESCRIPTION: Saves current settings under given configuration name.
BUG: The saved config does not appear in the config list when the user clicks on the load
button in the config menu, but the config does exist in the program and can be reloaded
programatically.
ARGS:
config_name [string, required]: name of configuration to be saved. Zen requires the
configuration name have no spaces or special characters.
EXAMPLE: -save_config "2p5X_Test"
SYNTAX: -get_config_name
DESCRIPTION: Returns name of current imaging configuration used in Zen.
OUTPUT: config_name
config_name [string]: name of current imaging configuration.
EXAMPLE: -get_config_name
SYNTAX: -move_stage_xyz x y z
DESCRIPTION: Moves stage and focus to specified xyz coordinate
ARGS:
x [float, required]: float specifying x axis stage coordinate that the stage
will move to (unite are um, float is rounded to 2 decimals or integer).
y [float, required]: float specifying y axis stage coordinate that the stage
will move to (unite are um, float is rounded to 2 decimals or integer).
z [float, required]: float specifying z axis stage coordinate that the stage
will move to (unite are um, float is rounded to 2 decimals or integer).
EXAMPLE: -move_stage_xyz 1500.00 -1000.00 35
SYNTAX: -get_stage_xyz
DESCRIPTION: Moves stage and focus to specified xyz coordinate
Output: x y z
x [float, required]: float specifying x axis stage coordinate (um).
y [float, required]: float specifying y axis stage coordinate (um).
z [float, required]: float specifying z axis stage coordinate (um).
EXAMPLE: -get_stage_xyz
SYNTAX: -move_stage_home
DESCRIPTION: moves stage and focus to zero for x,y,z axis.
ARGS:
none
EXAMPLE: -move_stage_home
SYNTAX: -set_stage_zero
DESCRIPTION: The current x,y,z coordinates for stage and focus is set to 0.
ARGS:
none
EXAMPLE: -set_stage_zero
SYNTAX: -disp_args
DESCRIPTION: Displays arguments in a message box. Used for debugging
ARGS:
Any collection of args
EXAMPLE: -disp_args 35 61 "Hello World"
SYNTAX: anything that does not match previous commands
DESCRIPTION: if command is not part of this list and not supported, the status
REJECTED will be returned.
ARGS:
none
EXAMPLE: -invalid_command123
SYNTAX: -tcp_resend ind
DESCRIPTION: Resend last command group recieved by server and the responses. The last
10 commands are remembered. Calling this command by itself OR the last command in the
command group will NOT be added to the command history, so calling it on the nth command
will return the same result. -tcp_resend 1 will send back the previous command recieved
by the macro. -tcp_resend 0 is the current.
ARGS:
ind [integer, required] Resends the respone(s) to a specific message sent by
by the client. ind can be from 0 (most recent response) to 9 (oldest reponse
remembered.
EXAMPLE: -tcp_resend 1
SYNTAX: -tcp_ping
DESCRIPTION: Requests tcp server to send message back to client
ARGS:
none
EXAMPLE: -tcp_ping
SYNTAX: -tcp_clear_msg_out_buffer
DESCRIPTION: Clears the vb6 message buffer for outgoing commands. Calling this command by
itself OR the last command in the command group will NOT be added to the command history,
so calling it on the nth command will return the same result.
WARNING: Not ever recommended, for macro debugging use only.
ARGS:
none
EXAMPLE: -tcp_clear_msg_out_buffer
SYNTAX: -tcp_clear_msg_out_buffer
DESCRIPTION: Gets the vb6 message buffer for outgoing commands, which is a list of the last
10 commands recieved and the macros responses.
ARGS:
none
EXAMPLE: -tcp_get_msg_out_buffer
SYNTAX: -tcp_clear_msg_in_buffer
DESCRIPTION: Clears the vb6 message buffer for outgoing commands.
WARNING: Not ever recommended, for macro debugging use only.
ARGS:
none
EXAMPLE: -tcp_clear_msg_in_buffer
Clear message in buffer
SYNTAX: -tcp_get_msg_in_buffer
DESCRIPTION: Gets the vb6 message buffer for outgoing commands. Similiar to calling
-tcp_resend 0.
ARGS:
none
EXAMPLE: -tcp_get_msg_in_buffer
Clear message in buffer
SYNTAX: anything that does not match previous commands
DESCRIPTION: if command is not part of this list and not supported, the status
REJECTED will be returned.
ARGS:
none
EXAMPLE: -invalid_command123


Micky Wiped Out I
Micky Wiped Out II
Harlem Shake
Dance Off
Stevie's Wedding
Lucky Lucky Man
Don't Stop
Grace
I have a dream
Float Like a butterfly
Cold and Shaken
First Dance
Getting put in the chair
Getting put to bed
Wheelchair Fail
Rosie and Lauren Fail
Just an FYI - These vids are not on youtube for everyone to see. They're set to private!


18
1 Some time later, David's army attacked the army of Philistia and defeated them. They captured the city of Gath and the surrounding villages.
2 His army also defeated the army of the Moab people group. The people were forced to accept David to be their ruler, and also to pay money each year to David's government, in order that David's army would protect them.
3 David's army also fought against the army of Hadadezer, the king of the region of Zobah in Aram near the city of Hamath, when Hadadezer was trying to establish control over the area near the Euphrates River.
4 David's army captured one thousand of Hadadezer's chariots, seven thousand chariot drivers, and twenty thousand soldiers. They hamstrung most of their horses; there were only one hundred horses that they did not cripple.
5 When the army of Aram came from the city of Damascus to help Hadadezer's army, David's soldiers killed twenty-two thousand of them.
6 Then David stationed groups of his soldiers in Damascus, and the people of Aram were forced to accept David to be their ruler, and to pay to David's government each year the payment that he demanded. And Yahweh enabled David's army to win battles everywhere they went.
7 David soldiers took the gold shields that were carried by the officers of Hadadezer's army and brought them to Jerusalem.
8 They also brought from Tebah and Cun, two cities that belonged to Hadadezer, a lot of bronze, which David's son Solomon later used to make the huge bronze basin and the pillars and other bronze items for the temple.
9 When Tou, the king of the city of Hamath in Aram, heard that David's army had defeated the entire army of King Hadadezer,
10 he sent his son Hadoram to King David, to greet him and congratulate him about his defeating Hadadezer's army, which had been fighting the army of Tou. Hadoram brought to David many items made of gold, silver, and bronze.
11 King David dedicated those thngs to Yahweh, like he had done with the silver and gold that his soldiers had taken from the Edom and Moab people groups, and from the Ammon people group and from the people of Philistia, and from the descendants of Amalek.
12 The army of David's army commander Abishai, whose mother was Zeruiah, killed 18,000 soldiers from Edom in the Valley of Salt.
13 Then David stationed groups of his soldiers there in Edom, and the people of Edom were forced to accept David to be their king and to pay money to David's government every year. And Yahweh enabled David's army to win battles wherever they went.
14 David ruled over all the Israelite people, and he always did for them what was just and fair.
15 Joab son of Zeruiah was the chief army commander.  Shavsha was the official secretary.
17 Benaiah son of Jehoiada ruled over the Kereth and Peleth groups who were David's bodyguards. And David's sons were his most important officials.


Start by exploring the field. The technology domain is very vast and has a wide variety of options. The first 2 years of your engineering years should be exploring the options that this field provides (Not a hard and fast rule, but this time period should be adequate enough for you to find something of your interest). In future, you wouldn't want to end up doing something that you don't like, have no interest in or simply have no knowledge about. Take it easy and Network with as many people as possible. Knowing your seniors is very important.
Befriend most of the teachers in your department. Try interning at reputed institutions like IIScs, IITs or at startups. Wouldn't recommend interning at large established companies. They dull you down, and above all you wouldn't have done anything worthwhile to add to your resume. While you are not interning, try reading on google scholar - the latest papers on your field of interest and publish your own in high impact journals like Springer.
Internships > Projects > Certifications
If you're not able to secure internships, try doing projects on the domain you're interested in or in any domain. Mind you, these preferably should be personal projects and not academic (the ones you do during your semester). Certifications from Udemy are pretty much worthless. Certifications of courses that are offered by big universities (Stanford, Harvard, Cornell etc) are much more valuable. Else, instead of doing an application based capstone project, take up research projects. Most unis have PhD profs who would be more than happy to involve interested students. Make that your undergraduate thesis. Grades, open source profile, papers and UG thesis can help you get into merit heavy colleges like CMU, Caltech, USC etc. Not only do they help you get good colleges they also help you land better jobs.
Higher studies may be pursued either abroad or in India in engineering or management streams. Getting admission for post graduation in India is very difficult due to tough competition compared to abroad admissions. However, if one aims to get admission into top ranking institutes, he /she must ensure initially whether they have good percentile of marks/CGPA in graduation. Preparation of good “Statement of Purpose” explaining the reasons clearly, why he/she wishes to pursue higher education is very important. The students should also take recommendation letters from their professors and keep them ready for submission when applying for Admissions.
If getting good campus placement is your target, then efforts must be put right from day one of final year. Students targeting at core jobs should have sound knowledge of fundamentals of their branches. Students targeting software jobs should be good at soft skills and programming. If target is to get an opening in a multi national company, then learning a foreign language would be very much helpful.
Attending mock group discussions and mock interviews would do lot of good in their preparation for campus interviews. Dress code, body language and time discipline will all be closely watched by the HR officials during selection process. Resume preparation is very vital and preparation of answers to typical questions like “tell me about yourself” is very important.
Majority of campus placements particularly in IT companies will begin after seventh semester, as the IT body NASSCOM’s had urged all its members and colleges not to commence campus recruitments before the end of seventh semester. During the campus placements, students should submit their resumes with latest photograph against any job notification to the placement office within stipulated deadline. Before interviews, study about the company by going through their websites and interacting with alumni working in similar organizations.
 Participate in societies that interest you theatre, comedy, music everything try new stuff, this will make you really confident moving forward and maybe you will get a new career choice, its not that hard in today's YouTube era)
TV series and movie competitions between friends is cool but hampers you in final years when you have to focus on studies, try to get that sweet balance spot between studies and fun early on if you miss out on that you might easily become a slave to the laptop or mobile screen soon. Keep your GPA above 8 at least. As long as you take exams seriously it's not difficult. Specially try to do well in the early years as it generally gets more difficult in 3rd/4th year.
Get serious about learning skills and getting internships. Join Internshala / Letsintern early on. You can join marketing/writing internships right from first Summer and learn some new programming language/framework during Winter. You can often get research internships by mailing professors from geographically closer colleges. Starting mailing them after you have some experience from projects/interns. Learn Latex(overleaf) , design your resume using an overleaf template.
Decide what you want to do after Undergrad by 2nd/3rd year and start working towards that. A graduate degree from North America can be greatly beneficial. But you need to start working on building a profile early on. M.Tech from top Indian schools can be worth it specially if you can get in right after Undergrad. Some work experience would help in Masters and Research internship towards PHD.
Samsung had come on-campus for a 2021 summer internship in SRIB, Bangalore. The CGPA cut-off was 7.5. There were three rounds in the hiring process.
Round 1 (Coding round): The coding was conducted on Cocubes platform and there were three simple questions. I do not remember the exact questions but there were one DP question and the question of one tree which were of easy level. I think the shortlist was based on how fast we have solved and how efficient our solution is. So submit as soon as you have coded the solution even you have time but make sure your solution is the most efficient. 24 people were shortlisted for the technical interview.
Round 2 (Technical interview): The interview was on Skype. The questions asked were
I have given brute force, hashmap, and two-pointer solutions
for the first question. He asked me to code the two-pointer
solution and I had done that. For the second question, I gave
him the brute force and DP approach. He asked me if I can
optimize it and I have given him a solution with O(1) space
complexity. He then asked me to write the pseudo-code for that
solution and I have done that. He was satisfied with my
answers.
15 out of 24 were shortlisted for the next round.
Round 3 (Technical interview): This round was also on Skype. The questions asked were
He gave me a few print statements related to pointers and
asked me for the output. Something like
this.
Implement two stacks using one array. He had asked me to code it and I did that.
The entire interview was mostly based on CS fundamentals. They
had asked KMP algorithm, OOPS concepts, questions on ML, and a
few puzzles for other shortlisted people. 9 students were
finally selected, and I was one of them.


{{extend 'layout.html'}}
The generation of peptides from native proteins is commonly referred to as antigen processing. The antigen presentation pathway is fundamental to the cellular adaptive immune reponse.
Accurate prediction of the peptides that will form antigenic epitopes is essential to rational vaccine design. Such prediction is largely done by estimating the binding affinity of the peptide to the MHC-II molecule. This is determined by the binding core region of the ligand. Peptide binding will often be allele restricted or promiscuous and bind to multiple alleles. Methods such as TEPITOPE and NetMHCIIpan rely on determining the polymorphic pockets of the MHC binding groove, almost entirely located on the beta-chain. The particular amino acids in the binding pockets determine the peptide specificity of that allele.
Given the size of pathogen proteomes and variation between strains it is clear that computational tools are necessary for automated screening and selection of immunological features before experiments are performed. With the availability of whole genomes for many microbial species it is now feasible to computationally search an annotated proteome for likely epitopes, this is the basis of immunoinformatics. Given that the immune system may present sequences from any protein antigen to stimulate T-cell responses, consideration of the entire proteome is necessary for a complete picture of the potential antigen repertoire.


2018-11-30: Friday, 4:50pm… the tests all pass… Yeah, I’ll wait for...
2018-11-29: Ugh, these EV chargers are work are so slow…. charging...
2018-11-21: My 3-day old niece went in for open heart surgery...
2018-11-17: I picked up the iPad Pro 12.9 last week. The...
2018-11-14: Well, today was the big suck. Until tomorrow!
2018-11-14: Wow… it’s already been a bit over a year since...
2018-11-12: It’s 74F outside, but my house is freezing. It drops...
2018-11-12: I wonder what’s happening in “Twitter-land”. Well… that was a...
2018-10-29: The past three weeks I’ve had this lingering sickness that...
2018-10-26: Imagine trying to track down where an errant . is...
2018-10-22: Gah. Always hate waking up from a nap and feeling...
2018-10-19: I find it a bit amusing that I get to...
2018-10-12: The worst thing about my Model 3 so far: I...
2018-10-09: The experiment of stopping at the supercharger near work -...
2018-10-09: This was not the route to take to work today…...
2018-10-04: Supercharging is so fast!! A quick 15 minute stop charges...
2018-10-03: Frustration levels for the day: 🥃💀
2018-10-01: Love me some 240V/60A electrical work... ✓ Power at 240V/60A breaker box ✓ 240V to the...
2018-10-01: Joy… after an all day install for my wall charger,...
2018-10-01: My favorite thing about at Tesla DIY project is the...
2018-09-27: Well… I started with an estimated 260 mile range home....
2018-09-27: The test: can I make it home when my car...
2018-09-27: First real commute in with the Model 3. First thoughts:...
2018-09-25: Does anyone have or know of a Bluetooth door lock...
2018-09-25: Hmm… no more car key means I’m going to be...
2018-09-24: Model 3 picked up, looks great.  The best...
2018-09-15: I sometimes get far too angry about programming annoyances. Latest...
2018-09-14: I guess it’s time to retire my iPhone SE -...
2018-08-31: Ah. No more boiler-plate!   As some of my previous...
2018-08-28: I think something is wrong with me… I like writing...
2018-08-28: Oh my… I just got a random call tonight confirming...
2018-08-27: Of course all of IKEA’s customer support “circuits are busy”…...
2018-08-25: Why is this so hard!? This is beyond ridiculous and just terrible customer service. Just...
2018-08-24: I got to ride my bike into work today for...
2018-08-23: I hate graphs like this; they provide no actual information...
2018-08-23: After switching cases with my daughter, I got downgraded to...
2018-08-21: Unit Testing Doesn’t Need to be Involved: owensd.io/2018/08/2…
2018-08-20: 30 minutes until my D&D session… that’s enough time to...
2018-08-20: The RTX 20* series looks pretty interesting, but my guess...
2018-08-19: I’m currently using the hosted micro.blog service, but that still...
2018-08-19: I swapped my CPU and graphics card out with my...
2018-08-18: I’ve been looking at a photo editing computer for my...
2018-08-18: Ah, now this is looking much better. Nether with it’s...
2018-08-18: This is just ridiculous. I have nearly three feet of...
2018-08-17: IKEA desk comes tomorrow. Still debating on a 13” MacBook...
2018-08-17: Projects: Back to C One of the things I really enjoy doing in my...
2018-08-16: Taking it Back, One Step at a Time Today I’ve started the long process of transitioning all of...
2018-08-16: One of the things I like most about micro.blog is...
2018-08-16: Hmm… I was worried about losing out on YouTube Premium...
2018-08-16: Hmm… ok, so how do I get the GitHub Pages...
2018-08-15: Social Cleaning I have a bunch of stuff to cleanup my social...
2018-08-14: Better claim it. =)


hello world (preventDefault on all mouse events)
hello sunshine (preventDefault on all mouse events, but added preventDefaultClick from mouseup)
hello beautiful (preventDefault on all mouse events and touch events)
hello goodness (preventDefault on all mouse events and touch events, but passive event listener for touch)
On the entire page .preventDefault() is called on all mouse events.
This does not block mouse driven clicks on for example hello world.
On Hello sunshine, the preventDefaultClick from mouseup
blocks the mouse driven click.
On Hello beautiful, the preventDefault on the touch events
blocks the mouse events and thus the mouse driven click.
On Hello goodness, the preventDefault on the touch events
cannot be called as the touch events are passive.
Script driven clicks are not affected by none of the methods,
so a sync click event should always be logged after the mouseup event has been logged


Artificial Intelligence and Content Ownership
There has been a rapid advancement in AI technology that has led to it being able to generate art, music, and even full-length movies. With the increasing market and industry impact of AI-generated content, it has become necessary to consider the ethical implications of content ownership in this context.
As part of my Ethics in Computer Science course at Virginia Tech, my team was tasked with writing a report on an ethical problem in Computer Science. We decided to work on Artificial Intelligence and Content Ownership thanks to OpenAI making AI a hot-topic again. The report focused on reviewing key cases and literature regarding AI-produced media ownership and determining a potential solution for the ethical implications that could arise. To achieve this goal, various stakeholder perspectives were considered, including those of the software/model builder, artists, hardware team, and company selling the software, as well as the owner of the machine.
One of the key challenges that we encountered while working on this report was determining who should get credit for AI-generated content. Should it be the software/model builder who developed the program? Should it be the artists who select among the generated pieces? Or should it be the hardware team, the company selling the software, or the owner of the machine?
To address this challenge, we examined different scenarios and analyzed the various ethical implications of each one. For example, if the software/model builder is given credit for the content, it could create a disincentive for artists to use the software, as they may feel that their creative contribution is undervalued. On the other hand, if the artists who select among the generated pieces are given credit, it could lead to a lack of incentive for software/model builders to continue innovating and developing new algorithms.
We also considered the legal implications of AI-generated content ownership. Since current copyright laws were not designed to handle such scenarios, it is necessary to redefine the laws to incorporate these challenges. Furthermore, we examined the potential impact of AI-generated content on the job market, as it could potentially lead to job displacement for those involved in content creation.
Overall, the report presented a comprehensive analysis of the ethical implications of AI-generated content ownership. It highlighted the need for stakeholders to work together to develop a clear and ethical framework for content ownership in the age of AI. By considering the perspectives of different stakeholders and analyzing the ethical and legal implications of various scenarios, we were able to provide a comprehensive and nuanced perspective on this important topic.
Full Report here


A Cool Tool I Wish I Had Found Earlier
Writing as someone who recently came into the world of computer programming, and is still very much in the process of learning how to code, I think one of the biggest barriers of entry to new computer scientists is the terminal. How are you supposed to write and compile your first hello world program if you don’t know how to navigate a filesystem without a “standard” GUI? Some might say Eclipse, or another IDE, but I say you’d be cheating yourself out of a really important part of the general CS education: a deep understanding of the UNIX terminal environment.
There is a lot of stuff that I still learn every day using the modern bash shell, and there are common things I do that I do not fully understand, or still have to glance at the man page before I can make work. For example, am I the only one who types this in, without really knowing what x, z, v, and f are each individually doing?
tar xzvf archive.tar.gz
I type that in because it’s the custom, the way I’ve learned to do it, but that is a damaging legacy to perpetuate. It keeps you from truly learning about the tools we have at our fingertips in UNIX-based environments.
Enter this awesome website I found this weekend called explainshell.com, created by Idan Kamara. It reads terminal commands meant for a UNIX shell interpreter and, by parsing thousands of Ubuntu man page entries, returns a beautifully organized display of exactly what your command is trying to do. The tool comes with support for arguments, pipes, and almost all the UNIX goodies you’re used to using.
Check it out, and send it to your friends who are struggling to get their footing with the terminal. Then, find out what x, z, v, and f do.
comments powered by Disqus


Pillars of Salt
I am sitting at a faux-wooden table in a small, square, fluorescent-lit multipurpose room somewhere in the depths of the Westminster Public Library, getting badly beaten at chess by Richard, although he doesn’t know it yet. Richard, who told me that the Westminster Library has strange properties and changes the weather when he’s inside, has no hair on his arms. Richard sits leaning forward on his elbows at all times, even when it’s my turn, except to write down his or my move on a score sheet. He uncaps his fountain pen, carefully records the progression in abbreviated notation, and then recaps his pen. He slides his palms over his ears and splays his fingers out across the sides of his head, running them through his thinning and wiry grey hair. Richard has a beard that makes him look like Vincent Van Gogh’s Self Portrait with Straw Hat.
To my left, at the other end of the rectangular table, two men are deeply immersed in a match of their own. The one on Richard’s side of the table, probably in his mid fifties, has long thin hair but is starting to bald. He’s wearing a pill-covered white sweater that eases the transition between his thin arms and large belly. He looks like he could be asleep.  His opponent is a portly Indian man with a thick moustache. Behind me, at a table parallel to ours, someone is playing himself. I am the only person in this room under forty.
In the corner of the room to Richard’s left, there is an easel pad with unrelated phrases written all over it, like “Where am I?” and “I like dogs.” I realize only now that it was to this that Richard was referring when he said (seemingly out of nowhere) “Mary was trying to teach me to teach English,” when I first walked into the room thirty minutes ago. He then said, “She’s like…” and he paused for a long, long time. “She’s like one of those characters in Alice in Wonderland” and then softly “Yeah. … Yeah. The room changes shape according to where she sits.” And then, even more softly, something about geometry.
Richard and I are somewhere in the loosely defined middle game. I’ve just lost a strategically advanced pawn that was giving me control of the center of the board. I move my knight forward, putting pressure on his queen, but leaving my own rook on the back rank susceptible to his rook on the back rank. Richard snorts. He leans back and rests his hand over his mouth. He shakes his head. I am not sure whether this means he thinks I’ve made a good move or a bad move. I have no idea, though, so I’m awaiting further cues. Since the start of the game, I can tell that he’s been trying to feel out my skill level, and since the start, I’ve been trying to feel out the moment he realizes I don’t know what I’m doing.
The grandmasters of chess can usually think six moves ahead. Deep Blue, the chess-playing robot that beat Kasparov in 1997, can think a maximum of twenty moves ahead.
“Very obvious move,” he mutters as he takes my rook with his. There it is, I think, my cover is blown. I don’t know why it was such an obvious move, since my other rook and my queen support that square, so there’s definitely something I don’t understand. I retake with my queen anyways. I suspect Richard has caught me in some fiendish trap. He takes all of five seconds to move his queen diagonally into the unguarded center, an aggressive move, but one that does not immediately threaten any of my pieces. I move a pawn forward so that it threatens to take his queen, and he quickly counters by moving it one square to the right. He still does not hesitate, and there is still no immediate threat to any of my pieces. What are you planning, Richard?
The potential diagonal moves he can make with his queen have all shifted, and I notice that this has opened up a square in the center. I move my knight forward again, posing a weak threat to his back rank rook. He gives very little thought to this and moves his rook in front of my knight. Then his eyes widen. His head snaps up, his back straightens and he snatches his rook with a violence.
“Can I still…?” he says with a tight voice, asking if he can undo his move even though he took his hand off the piece. I give him a thumbs up and he puts the rook back.
“Might get pushed off the back rank. Wouldn’t be so good. Actually I think that would’ve been disastrous,” he says. I nod, pretending I know what he’s talking about. I think somehow I have reestablished my credibility. Then I see it: Had I allowed his rook to take my knight the next turn, I would’ve been able to move my queen all the way to his back rank, and it would’ve been checkmate. If he hadn’t taken the knight, I would’ve moved it to threaten his queen, which he would have had to move, and I would then move my knight again, forking his rook and king. He would be forced to move his king, I would take the rook, his next move is inconsequential, and then I would move my queen down the column and once more, it would be checkmate—at least, I’m pretty sure. I imagine the thoughts running through Richard’s head: that I had been setting this up the whole time, that exchanging rooks was all building up to this master stroke, that I was a strategic genius, thinking miles ahead. We’re right back where we started, aren’t we Richard?
If you were watching the room from a bird’s eye view, with the door in the bottom left hand corner of your vision, you would see my quiffed brown hair slightly to the right of the middle of the bottom side, about to have my hat handed to me, seated at one of two tables running vertically down the room. Spinning counter-clockwise until the tables run horizontally, separating the space into alternating rows of tables and non-tables, you would see Richard’s wiry corona in the bottom left, and in the right, a greasy-looking part separating long veils that almost reach the man’s belt. Spinning another ninety degrees, you would see black bushy locks slightly to the left of the middle of the bottom side, and if you listened closely, you would hear the leg of the person to whom the hair belonged shaking the table ever so slightly, twitching like a hare. In the bottom right I am unsure of what you would see; a man came in fifteen minutes into our game and sat down but I never turned around to see him.
If you were to speed backwards, you would travel through the cardboard ceiling tiles, through the structural support, wood flooring and cheap carpet into the room above. You would find yourself amongst medical volumes, like the Textbook of Clinical Neuropsychiatry and Behavioral Neuroscience and The Oxford Textbook of Medicine. If you kept going you would zoom through another low ceiling, and into the ‘C’s of the vast fiction section, and then into another floor of unknown content, and if you kept going still you would shoot out into the drizzly night air, and still rising, you would find yourself hovering above all of Marylebone, and you’d be able to see my route home, threaded through the constellations of street lamps.
The route is simple: a long stretch south of two blocks and then one to the west.  The westward block, Crawford Street, is on my daily route to school. It runs past a Thai restaurant, a tiny art gallery that is seldom visited by anyone, a printing.com, a FedEx that assures everyone year-round, “WE HAVE BOXES!”, a Yazco carpet emporium, a store that sells only Swedish stuff and a church.
Late Saturday night, three days ago, I am walking home down Crawford Street, stoned and paranoid, and I keep thinking about how everything could be disappearing that isn’t in my immediate cone of vision, how we can only fill in from memory everything that’s not in front of us. I start to question the reality of what I can’t see, to question whether everything isn’t actually disappearing, and suddenly I am walking with my back to a yawning chasm, and I don’t want to blink and lose everything in front of me too and the wind is sharp and cold and my eyes start watering. I want to turn around but I can’t make myself do it, and I can’t stop and I can’t go. Eventually I make myself look back, and everything is there, the cars, the lampposts, the dark storefronts of shops.
♔
On my way to attend my first Marylebone Chess Club meeting, I walked east past the Yazco and the printing.com and the Thai restaurant. The moon was shining through the edges of the swelling clouds. I wound my way north through the headlight trails of Gloucester Road and the sweet shisha smoke of the Arab cafés and shouldered through the swinging wooden door of the Westminster Library into an antechamber with staircases to the left and right and another set of swinging doors in the middle. I started towards the doors, but noticed a bulletin board with a sign that read, amongst announcements for other clubs and organizations, that the chess club meets in multipurpose room 103. Assuming this meant the third multipurpose room on the first floor, I walked up the left hand flight of stairs and entered a reading room with a long circulation desk. Behind this desk, a single man sat at his computer, immersed in whatever the screen was showing him. Every couple seconds, he would look down at his keyboard, pause, tap a key with his index finger, pause, and look back at the screen. I stood in front of him, in the hopes that he would take notice of me and be able to help.
Click. Click. Click.
“Um, sorry…” I said to get his attention
“Yeah. Just… one… s…” he trailed off, still staring at the screen. Click.
Eleven keystrokes later, a woman walked behind the desk carrying a stack of books, and upon my asking about the chess club, insisted on leading me thre, two flights of stairs down the rabbit hole to the basement.
Richard was leaning back with his hands behind his head and his legs crossed, staring deep into space. I asked him if this was the chess club. He took a couple seconds to reel in his thoughts, then turned to me and said yes, in fact it was. I waited for an invitation to take a seat opposite him, but he said nothing.
“Are you in the middle of something, or do you want to have a game?” I asked. Richard looked down at the board. He looked up, said yeah and started talking about Mary as I sat down and took off my coat. He was talking about the library changing the weather when I made my first move, and then he leaned forward onto his elbows and the game began.
I am sure I am the only person in this room under forty, and yet I’m still too old to be a beginner. Most people who reach grandmaster status started playing before the age of nine; maybe it’s something in the way the brain develops, or the necessity of a total and lifelong commitment to the game that can only crystalize before puberty, but somehow, unknowingly, I’ve let my chances of mastering chess slip away from me. There are 318,979,564,000 possible first four moves to a chess game, a number as enticing as it is intimidating. The more one plays and the more everyone plays, the smaller this number really gets to win the game, and maybe that’s why I would’ve needed to start playing eight years ago, because I am nowhere near wrapping my head around three hundred trillion.
It’s a number so large that nobody can ever wrap their head around it entirely. Chess has existed for about 1400 years, and no one has ever remained undefeated, no one has displayed such an irrefutable mastery of the game that he or she clearly had it all figured out. That is, until Deep Blue beat Gary Kasparov, the reigning world champion and second highest ranked player of all time, in a six game match. Kasparov won the first game, when Deep Blue resigned after 45 moves. Kasparov lost the second game though, a huge psychological blow that many, including Kasparov himself, attest as a major reason for his loss of the whole match. The third through fifth games were draws, and while games one, two and six are widely analyzed by YouTubers and websites from 1997, its as though games three through five didn’t happen. But then again, no one was ever interested in a tie between man and the machine. Someone had to lose.
It all came down to the sixth game, in which Gary Kasparov resigned after only 19 moves. It was the earliest he’d ever resigned from a game.
“It’s hard to take,” someone called Carol Haunton said regarding Kasparov’s loss to Deep Blue/IBM/the machine in an MSNBC interview. “I don’t want to feel like I belong to some Orwellian society.” I’m not fully on board with Carol’s Orwellian take on things—and I suspect she was imagining more of an Asimovian society—but she’s right that there’s something upsetting about the loss. For me, it’s less about the human race being superseded by computers, and more about the idea that we’ve reached the end of something that we’ll never get back.
There is a subtle aroma of burning dust in the room coming from the ventilators. Another unknown figure comes into the room and between low murmurs sits down next to the lone man to my southwest. I’ve just lost my one chance of beating Richard, I think. Richard has swiped back his rook, and all my imagined planning with it. I capture his pawn with my formerly game-winning knight. From where I’m sitting, his advanced queen is highlighting just how weak my defense is. Richard takes his hands off his ears to make his move and for a brief moment, a blanched outline of his fingers is left on his head. Richard is probably still tense because he let his guard down and he thinks I almost beat him. He moves his queen so that my king is in check, and my knight is threatened. I move my knight between his queen and my king, blocking the check, and protecting the knight with my queen. Richard puts more pressure on the knight with his back rank rook. I move my king. He moves his knight. I move my queen. He looks at me with his eyebrow raised and takes my knight. The knight is hanging, and there’s no gambit this time. At this point, Richard realizes, finally and irrevocably, that I do not know what I am doing.
♔
I was born in Morristown, New Jersey, and my family lived there for the first three years of my life. Due to an itinerant father, my family then preceded to move to Phoenix, Arizona for a year, back to Morristown, New Jersey for five years, to Milwaukee, Wisconsin for five years and then to London, England, where, having regularly molted family members along the way, my mom and I now live.
I have two early memories of chess. The first is of the giant chessboard with three foot tall pieces at the Biltmore Hotel in Phoenix. I was three when I lived there, so I don’t think I ever played on this board then, but when my family and I would come back to visit friends in the greater Phoenix area we would eat lunch at the hotel at least once per stay. It was always incredibly sunny and we always all got pink lemonades, and there was always a mini bottle of Tabasco sauce that came with the table that my dad would pocket. While my dad was paying the bill, one of my brothers and I would play a game of chess on the giant board. I don’t think I ever won. I’m not sure if I just became more perceptive, or the hotel’s upkeep started to decline, but it seemed like the white chess pieces and squares became progressively more scuffed over the years, the sparrows became more and more aggressive in scavenging for food until they were circling us, brushing our hair with their wings as we ate.
The second is of a Lego Chess computer game that my brothers and I used to play when we lived in New Jersey for the second time. We had a chunky Compaq monitor with an accompanying chunky CPU box in a wood paneled corner of our living room that I used to sit at for too long playing Backyard Baseball, Freddi Fish and Dragonfire. The Lego Chess games took place on a pirate- or cowboy-themed board with Lego figurines representing each piece, and when you moved a piece it would walk to its new position (or in the case of the king and queen in the pirate mode, be carried on a plank by monkeys). If, for instance, you were in cowboy mode and you took the opposition’s pawn with your knight, the offensive caricature of a Native American that represented their pawn would disappear in a puff of dust. Then there was a short cut-scene animation of a Native American with an axe that had snuck up on a cowboy adjusting his horse’s saddle. As the Native American wound up to throw the axe, the axe head flew backwards off the handle, and the cowboy heard this, I guess, and turned to point his gun at the Native American. The Native American ran away, and the cowboy smiled while a victorious trumpet noise played.
There was a cut-scene for each piece captured and for each win, and to me these scenes always sort of implied that chess was only a stand-in for another conflict. I think that is pretty fundamental to why I have always wanted to play chess. In the beginning of these Lego Chess games, I would have my war strategies laid out, of sneaking behind enemy lines or luring their pieces into a trap. In my head, I would win in a shocking display of genius as the veil fell away from my plans and the enemy was left helpless. In reality, the computer would make a move within the third or fourth turn that would ruin my plans, and instead of adjusting I would try more and more tangentially to continue to follow my original plan, and of course this would only make things worse.
There were three levels of increasing difficulty that you had to get through to win. The first level was programmed to be really easy, and I could almost always win. The second level was much harder, and I could only get through if I was lucky. The third level was pretty much impossible; I beat it only once. I don’t know exactly what I had imagined winning would be like, but the reality wasn’t anywhere close. I remember it was in the late afternoon on a warm day, but the corner of the room with the computer was darker and colder, a place the sunlight never reached. My head felt muddled from too much time spent with a screen, and I knew even then that I should have been outside in the brightness instead of on the computer. I walked out onto our brick patio and I could feel the warmth on my bare feet and the weight of the air on my body. I had the uneasy feeling that I’d done something wrong by spending that time indoors, like if my mother found out, she would be disappointed but she’d try to hide it. I dug an old soccer ball out of some long grass and started kicking it around in our backyard, and the bad feelings started to fade away. How could I have known then, Richard?
♔
Richard moves his knight three squares, putting me in check. I counter rather weakly by moving my king out of the way. Richard moves his queen one square diagonally forward, putting me in check again. I’m on the run now; all I can do is move my king again. He moves his bishop five squares diagonally, putting me in check for the third time in a row. This time I block him with my bishop. He moves his queen five squares directly forward, and takes the bishop, and it’s pretty much game over. Three, one, five, five, and now here I am, with Richard, in the Westminster Library.
“Is that the game?” I ask.
“Yeah,” he says softly, calmly. “Alright.”
It’s eight when I walk back out the swinging door. The drizzle had turned into something heavier while I was inside the library, and I can hear the car tires peeling through the water. Richard must have been playing chess for some time now if he ran the club, and yet he and I had had a fairly close game. Richard is closer to that three hundred trillion than I—but not that much closer. And yet if there’s one thing I’m sure of about Richard, it’s that every Tuesday night he’ll be there in the basement, rain or shine, even if no one else comes. I was only thinking about my plans when we were playing, but he must have been planning something too.
I’m starting to think he was right about everything.
I stand on the street for a while. The rain is a welcome cold on my face after the dry heat of the basement. I look up. The rain is a veil over the sky. If you were to follow the direction of my gaze though, you would travel through the veil. Through the stratosphere, and the mesosphere, and the exosphere, and into a vacuum. And if you kept going, past the moon and the sun and the galaxy, deeper and deeper into the universe, and you turned around, you would be able to see trillions of stars. I stand there for a while, with the rain running down my face, and then turn back towards home.


1: /* 2: * Copyright 2001-2005 Stephen Colebourne 3: * 4: * Licensed under the Apache License, Version 2.0 (the "License"); 5: * you may not use this file except in compliance with the License. 6: * You may obtain a copy of the License at 7: * 8: * http://www.apache.org/licenses/LICENSE-2.0 9: * 10: * Unless required by applicable law or agreed to in writing, software 11: * distributed under the License is distributed on an "AS IS" BASIS, 12: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13: * See the License for the specific language governing permissions and 14: * limitations under the License. 15: */ 16: package org.joda.time.chrono; 17: 18: import java.util.Locale; 19: 20: import org.joda.time.DateTimeConstants; 21: import org.joda.time.DateTimeFieldType; 22: import org.joda.time.DurationField; 23: import org.joda.time.DurationFieldType; 24: import org.joda.time.field.BaseDateTimeField; 25: import org.joda.time.field.FieldUtils; 26: import org.joda.time.field.UnsupportedDurationField; 27: 28: /** 29: * Provides time calculations for the era component of time. 30: * 31: * @author Stephen Colebourne 32: * @author Brian S O'Neill 33: * @since 1.0 34: */ 35: final class GJEraDateTimeField extends BaseDateTimeField { 36: 37: /** Serialization version */ 38: private static final long serialVersionUID =<PHONE_NUMBER>305515528L; 39: 40: private final BasicChronology iChronology; 41: 42: /** 43: * Restricted constructor 44: */ 45: GJEraDateTimeField(BasicChronology chronology) { 46: super(DateTimeFieldType.era()); 47: iChronology = chronology; 48: } 49: 50: public boolean isLenient() { 51: return false; 52: } 53: 54: /** 55: * Get the Era component of the specified time instant. 56: * 57: * @param instant the time instant in millis to query. 58: */ 59: public int get(long instant) { 60: if (iChronology.getYear(instant) <= 0) { 61: return DateTimeConstants.BCE; 62: } else { 63: return DateTimeConstants.CE; 64: } 65: } 66: 67: public String getAsText(int fieldValue, Locale locale) { 68: return GJLocaleSymbols.forLocale(locale).eraValueToText(fieldValue); 69: } 70: 71: /** 72: * Set the Era component of the specified time instant. 73: * 74: * @param instant the time instant in millis to update. 75: * @param era the era to update the time to. 76: * @return the updated time instant. 77: * @throws IllegalArgumentException if era is invalid. 78: */ 79: public long set(long instant, int era) { 80: FieldUtils.verifyValueBounds(this, era, DateTimeConstants.BCE, DateTimeConstants.CE); 81: 82: int oldEra = get(instant); 83: if (oldEra != era) { 84: int year = iChronology.getYear(instant); 85: return iChronology.setYear(instant, -year); 86: } else { 87: return instant; 88: } 89: } 90: 91: public long set(long instant, String text, Locale locale) { 92: return set(instant, GJLocaleSymbols.forLocale(locale).eraTextToValue(text)); 93: } 94: 95: public long roundFloor(long instant) { 96: if (get(instant) == DateTimeConstants.CE) { 97: return iChronology.setYear(0, 1); 98: } else { 99: return Long.MIN_VALUE; 100: } 101: } 102: 103: public long roundCeiling(long instant) { 104: if (get(instant) == DateTimeConstants.BCE) { 105: return iChronology.setYear(0, 1); 106: } else { 107: return Long.MAX_VALUE; 108: } 109: } 110: 111: public long roundHalfFloor(long instant) { 112: // In reality, the era is infinite, so there is no halfway point. 113: return roundFloor(instant); 114: } 115: 116: public long roundHalfCeiling(long instant) { 117: // In reality, the era is infinite, so there is no halfway point. 118: return roundFloor(instant); 119: } 120: 121: public long roundHalfEven(long instant) { 122: // In reality, the era is infinite, so there is no halfway point. 123: return roundFloor(instant); 124: } 125: 126: public DurationField getDurationField() { 127: return UnsupportedDurationField.getInstance(DurationFieldType.eras()); 128: } 129: 130: public DurationField getRangeDurationField() { 131: return null; 132: } 133: 134: public int getMinimumValue() { 135: return DateTimeConstants.BCE; 136: } 137: 138: public int getMaximumValue() { 139: return DateTimeConstants.CE; 140: } 141: 142: public int getMaximumTextLength(Locale locale) { 143: return GJLocaleSymbols.forLocale(locale).getEraMaxTextLength(); 144: } 145: 146: /** 147: * Serialization singleton 148: */ 149: private Object readResolve() { 150: return iChronology.era(); 151: } 152: }
| ID | Line | Type | Detected |
|---|---|---|---|
| 4747 | 51 | Replace a constant (Replace 0 with 1(INT)) | |
| 4748 | 51 | Replace a constant (Replace 0 with -1(INT)) | |
| 4750 | 60 | Negate jump condition (Replace IFGT with IFLE) | |
| 4749 | 60 | Remove method call | |
| 4751 | 61 | Replace a constant (Replace 0 with 1(INT)) | |
| 4752 | 61 | Replace a constant (Replace 0 with -1(INT)) | |
| 4753 | 63 | Replace a constant (Replace 1 with 2(INT)) | |
| 4754 | 63 | Replace a constant (Replace 1 with 0(INT)) | |
| 4755 | 68 | Remove method call | |
| 4756 | 68(1) | Remove method call | |
| 4757 | 80 | Replace a constant (Replace 0 with 1(INT)) | |
| 4758 | 80 | Replace a constant (Replace 0 with -1(INT)) | |
| 4760 | 80(1) | Replace a constant (Replace 1 with 0(INT)) | |
| 4759 | 80(1) | Replace a constant (Replace 1 with 2(INT)) | |
| 4761 | 80 | Remove method call | |
| 4762 | 82 | Remove method call | |
| 4763 | 83 | Negate jump condition (Replace IF_ICMPEQ with IF_ICMPNE) | |
| 4764 | 84 | Remove method call | |
| 4765 | 85 | Replace arithmetic operator (Replace INEG with remove right opereand) | |
| 4766 | 85 | Remove method call | |
| 4767 | 92 | Remove method call | |
| 4768 | 92(1) | Remove method call | |
| 4769 | 92(2) | Remove method call | |
| 4771 | 96 | Replace a constant (Replace 1 with 2(INT)) | |
| 4772 | 96 | Replace a constant (Replace 1 with 0(INT)) | |
| 4773 | 96 | Negate jump condition (Replace IF_ICMPNE with IF_ICMPEQ) | |
| 4770 | 96 | Remove method call | |
| 4774 | 97 | Replace a constant (Replace 0 with 1(LONG)) | |
| 4775 | 97 | Replace a constant (Replace 0 with -1(LONG)) | |
| 4777 | 97(1) | Replace a constant (Replace 1 with 0(INT)) | |
| 4776 | 97(1) | Replace a constant (Replace 1 with 2(INT)) | |
| 4778 | 97 | Remove method call | |
| 4781 | 99 | Replace a constant (Replace -9223372036854775808 with -9223372036854775807(LONG)) | |
| 4779 | 99 | Replace a constant (Replace -9223372036854775808 with 0(LONG)) | |
| 4780 | 99 | Replace a constant (Replace -9223372036854775808 with<PHONE_NUMBER>854775807(LONG)) | |
| 4783 | 104 | Negate jump condition (Replace IFNE with IFEQ) | |
| 4782 | 104 | Remove method call | |
| 4785 | 105 | Replace a constant (Replace 0 with -1(LONG)) | |
| 4784 | 105 | Replace a constant (Replace 0 with 1(LONG)) | |
| 4786 | 105(1) | Replace a constant (Replace 1 with 2(INT)) | |
| 4787 | 105(1) | Replace a constant (Replace 1 with 0(INT)) | |
| 4788 | 105 | Remove method call | |
| 4791 | 107 | Replace a constant (Replace<PHONE_NUMBER>854775807 with -9223372036854775808(LONG)) | |
| 4790 | 107 | Replace a constant (Replace<PHONE_NUMBER>854775807 with 0(LONG)) | |
| 4789 | 107 | Replace a constant (Replace<PHONE_NUMBER>854775807 with<PHONE_NUMBER>854775806(LONG)) | |
| 4792 | 113 | Remove method call | |
| 4793 | 118 | Remove method call | |
| 4794 | 123 | Remove method call | |
| 4795 | 127 | Remove method call | |
| 4796 | 127(1) | Remove method call | |
| 4798 | 135 | Replace a constant (Replace 0 with -1(INT)) | |
| 4797 | 135 | Replace a constant (Replace 0 with 1(INT)) | |
| 4800 | 139 | Replace a constant (Replace 1 with 0(INT)) | |
| 4799 | 139 | Replace a constant (Replace 1 with 2(INT)) | |
| 4801 | 143 | Remove method call | |
| 4802 | 143(1) | Remove method call | |
| 4803 | 150 | Remove method call |


Although you can do more or less all the version control aspects via the GitHub website, this is not very convenient when you are working on your R projects. Now you have an idea of how the GitHub workflow works, we can start to integrate these version control concepts with RStudio.
To use Git from within RStudio you need to make sure that Git can be found by RStudio.
If you haven’t done so already, make sure to go to: Tools
> Global Options
> Git/SVN
and check that ’Enable version control interface for RStudio projects` is enabled. Also, check that the path to Git is present and correct.
You also need to inform Git of your name and e-mail address so that it can label the commits with these details. To do this, go to Tools
> Shell
and provide the following details:
git config --global user.name "yourGitHubUsername"
git config --global user.email<EMAIL_ADDRESS>You can verify that these are set up properly by running git config --global --list
in the shell.
If you want version control of your R project, you need to make sure that the project is under control of Git.
The easiest way to start this is by creating a new project that is linked to an existing GitHub repository.
We can link a new project to the GitHub repository that we generated previously. To do this, we need to copy the URL for this repository. To do this, you have to go to the repository page and click on the Clone or download
button. You can then copy the URL as shown below:
Next, we need to create a new project. Go to File
> New Project
> Version Control
> Git
.
In Repository URL
paste the link to your GitHub repository. Give the project a name (avoid spaces and try to use a meaningful name) and tell RStudio where to save it. It is useful to tick the Open in a new session
box, so that your project opens in a new RStudio session. That way RStudio opens a session with a clean environment.
Your project will open and your RStudio session should now have an extra tab in the top right corner (where your Environment is), named Git
. This is where all the changes will show up as you work on your project.
These options can also be found by using the button in the toolbar. When you have opened a file and look at the options under this button it also enables you to find differences from the last commit (if there are any) or view the commit history of that file.
Let’s make some changes to our local repository, which is now under Git control. Here we are first creating a folder called notebooks
and adding an R Markdown file named 01_import_and_clean_data.Rmd
.
Once you have created the file you’ll see the folder appearing in the Git
tab. When you tick the Staged
box, the Status
changes to Added. This means that Git is tracking your file and will include it in the next commit.
There are a few other icons that can appear in the Git pane, so here is an overview:
When we edit the file a bit we can see how it changed by clicking on the Diff
button in the Git
toolbar.
If we are happy with the changes then we can commit them. You can do this by pressing the Commit
button in the Git
tab and adding a commit message. All the files that are staged will be included in that particular commit. If there are files that you do not want to commit yet then you can untick them before pressing the Commit
button.
To ensure that the changes end up on your remote repository you need to push the changes. To do this, press the Push
button in the top right corner. RStudio will give you a message that the changes are pushed:
Challenge 1 - Version control in RStudio
- Create a new repository on GitHub
- Create a new R Project under version control
- Link the R Project with the remote repository
Challenge 2 - Branching and changes
- Create a new branch (e.g.
new_notebook
) from within RStudio. To do this, use the following button in theGit
pane:- Create a
notebooks
folder and save a new R Markdown file in it.- Ensure that changes to the new file are tracked.
- Make some changes to the file and commit them.
- Push the changes to the remote repository.
Challenge 3 - Pull requests
- Go to your GitHub repository and navigate to the newly created branch
- Create a pull request
- Merge the pull request with the
master
branch- Congratulate yourself on being a version control Pro!
So far we have used repositories that we created ourselves. But you might find that you want to add to somebody else’s project. Or you like their project and want to adapt it to your needs. In that case you need to make a personal copy of that project. This is called forking.
To fork a repository you need to navigate to the repository page on the maintainer’s GitHub account whilst logged into your own account. You then click on the fork
button. The repository is then copied to your account:
The forked repository will show up in your repository list. It will specify that it is a forked repository:
Once you have forked a repository to your GitHub account you can make changes to it. Good practice is to create a new branch in your copy of the repository, so that you do not run the risk of confusing the master
branch of your copy with the master
branch of the original repository.
In this case we’re adding a new branch called new_feature
.
After you have created a new branch on your forked copy you can start editing/adding as you like. You do this as you have done before, by staging and committing changes to your repository.
When you want to suggest incorporating some of these changes into the original repository you will have to open a pull request. This works in the same way is described in the pull requests section, but instead of comparing two branches on the same repository, you are comparing the branch on your forked copy with the master
branch of the original repository.
Your pull request will show up in the original repository. Note that you can also see that the original repository has been forked:
GitHub keeps track of bugs, improvements and tasks through Issues. The good thing about issues is that they can be shared and discussed with collaborators, in a similar way as to how the pull request system works.
An issue is created from the Issues
tab in the repository:
A new issue requires a title and description. It’s good to try and be as concise and complete as possible so that the developer knows what it is that you want. You can label the issue - in this case it is an Enhancement, but there is a whole range of labels you can choose from. Labelling can be particularly helpful when there are many issues and it helps you organise and prioritise your work.
Issues are always assigned a unique ID, which you can use to refer to them in comments:
When you have a public repository everyone can fork the repository and make changes to that (forked) copy. You can also invite people to collaborate on your project.
In order to do that you need to go to the Settings
> Manage access
page:
Here you can invite collaborators and once they have accepted, then can open pull requests and make changes to the repository.
To find repositories where you are a collaborator on you need to go to Settings
> Repositories
. Unfortunately these repositories do not show up on your own Repositories tab.
Below are several challenges that incorporate some of the topics that we have covered throughout the course.
To practice collaboration we are teaming up. For these challenges we will work in pairs. Both people will create a repository which contains their GitHub username in the title (repo_<GitHubUserName>
, e.g. repo_martinimus
). Then each person adds the other one as a collaborator.
Once you are added as a collaborator, you link the collaborative repository (i.e. the repository where you were added as a collaborator, not your own) to RStudio and make some changes that you suggest to your collaborator by creating a pull request. Your collaborator will then assess the changes and you can have a bit of back-and-forth before accepting and merging the changes.
Challenge 1 - Creating a repository for collaboration
- Create a new repository on GitHub. Name it
repo_<GitHubUserName>
, e.g.repo_martinimus
.- Find a collaborator and ask to be added as a collaborator to their repository. You should get a verification e-mail on the e-mail address that is registered with your GitHub account. Verify and check that the repository shows up on your GitHub page (remember, these will be in
Settings
>Repositories
).- Put the collaborative repository under version control in RStudio (e.g.
repo_<GitHubUserNameCollaborator>
).
Challenge 2 - Making and discussing changes
- Create a new branch on the collaborative repository, either through RStudio or the GitHub website.
- In RStudio, create a new R Markdown file in the collaborative repository and stage, commit and push the changes to the branch you have just created.
- Go to the repository you are both working on and start a pull request for the changes you just pushed.
- To practice, let the collaborator comment on the changes and ask for more details instead of merging the pull request.
- Amend the R Markdown file again with the requested details and commit/change/push again.
- The collaborator can now accept the changes and merge the branches.


A short explanation of the functional iterator painter
First choose a some function $$F(x,y) = \begin{bmatrix}g(x,y) \\ h(x,y)\end{bmatrix}: \mathbb{R}^2 \to \mathbb{R}^2$$. For example, the "Julia iteration" would be $$ \begin{bmatrix} g(x,y) \\ h(x,y) \end{bmatrix} = \begin{bmatrix} x^2-y^2 + c_\text{real} \\ 2xy + c_\text{imag} \end{bmatrix} $$ which comes from separating the real and imaginary components, $$ z^2 = (x+iy)^2 = (x^2-y^2) + i(2xy) $$Next, iterate from some initial point $(x_0, y_0)$: $$ (x_n, y_n) = F(x_{n-1}, y_{n-1}) $$ Pixels are colored based on how quickly sequence diverges when the pixel coordinate is used as $(x_0, y_0)$. The field, "convergence limit", is the maximum number of iterations performed, while "divergence limit" is the number at which we conclude the sequence (from that particular initial point) has diverged. In other words, the sequence terminates when either $$ n \gt \text{convergence limit} $$ or $$ ||F(x_n,y_n)|| \gt \text{divergence limit} $$ A pixel is colored based the value of $n$ when the sequence terminates (when the pixel coordinate is used as the initial value of the sequence).


Each recognition result has the following fields:
| Property Name | Type | Description |
|---|---|---|
| matchedText | String | The matched email address. |
| recognitionLevel | Number | The recognition level. Always 0.7. |
| username | String | The username (the part before the @ ). |
| domain | String | The domain of the address (the part after the @ . May also include a hostname in front. |
{ "com.solveforall.recognition.EmailAddress": [ { "matchedText"<EMAIL_ADDRESS>"recognitionLevel": 0.7, "username": "admin", "domain": "solveforall.com" } ] }


About
Hi,
My name is Blessing, I am a PhD graduate in Business and Management from the Cardiff Metropolitan University. My thesis focused on the operational performance of the UK retail industry: A statistical analysis of operational key performance indicators and their impact on profitability. This study bridged the gap in the field of performance measurement as well as contributed “something new” to the entire body of knowledge.
I also hold a Master’s degree in Business Administration (MBA) and a B.Sc degree in Parasitology & Entomology. My personality, education and experience have enabled me to take on the challenges that life can present.
I am quite passionate and always optimistic to accept responsibilities as they present themselves at every stage in life so as to ever remain on top of my game. My ever burning desire to remain successful in life has remained my watch word, hence my pragmatic approach to occurrences and situations around me.
I am a positive-thinker and a result-oriented individual who is constantly seeking ways to proffer solutions to real world problems. My interest also focuses on Information Technology, Statistical analysis, Business development and Management.
In my strive for fulfillment, I have embarked on some projects however, the latest project I am working on now is on my food blog website globalfoodbook.com where I share my cooking tips and blog about human health and food.
There is a popular saying thus; “food is wealth” truly , but I see this as ‘tell me what you eat and I could possibly estimate your lifespan’. Apart from sharing my cooking tips, I also share some health tips for healthy living on the site.
I remain focused and optimistic, as I paddle my way through high waters.
I hope you find my site very educative and interesting! Cheers
Blessing


Toggle navigation
Your Application Name
File
Save Settings
Load Settings
Exit
View
Fullscreen
Console
Command Line Output
Help
About
Your Application Name
Your Application Description
Path to Your Publish Script
General Article Information
Article Title
Article Type(s)
lowercase, no commas
Article Folder
lowercase
Author
Publish Date
YYYY-MM-DD
Tagline
Tags
lowercase, use commas
General Game Information
Game Title
lowercase, hyphenated
Genres
lowercase, use commas
Developer
Publisher
Release Date
YYYY-MM-DD
Trailer Video ID
from YouTube
Extra Information for Game at a Glance
Summary Quote
capitalized normally, punctuated normally
Platforms
capitalize each, multiple if not out yet, only one if you played the full game on a specific platform
Main Character
capitalized normally
Character Thumbnail Image
name of image with extension
Time Spent
how long you spent on the game, in hours
Completion
amount of game completed, as a percentage
Winning Traits
first word capitalized, use commas
Recommended
first word capitalized, any text
Publish
About
V0.1.0
About
Your Application Name
Easily publish Colludia articles
Your Application Name
created by
Your Name
.


AnDevCon talk on Fragments
29 May 2014I gave a talk on Android Fragments on May 29, 2014 at AnDevCon in Boston. The talk was well attended and well received. You can download the slide deck from the presentation if you like.
Life used to be simple. We had Activities and they were good. You could define all of your app's UI in a layout and animate it in an Activity. Then Apple brought out the iPad and Google answered with Honeycomb. Things got complex. Google realized that tablets would drive the need for developers to reuse parts of their UI, and the answer was the Fragment class. Fragments enable developers to use bits of UI along with the associated business logic in various parts of their app or even in multiple apps.
The Slide deck has a matching github repository that has several really useful example projects in it. The easiest way to build the examples is with Android Studio and gradle.
fragment-logged
This example app uses native fragments to demonstrate several concepts:
- Dynamic vs Static Fragments: Static fragments are created with the
<fragment>
tag in a layout. Dynamic fragments are added at run time to a<frame>
tag. - Using a Bundle to store Activity state information throughout the Activity's lifecycle.
- The interrelationship of the Activity lifecycle with the Fragment lifecycle. There is a really useful set of classes (CallLogger, LoggedActivity and LoggedFragment) that enable you to log calls from lifecycle events without adding any code to your Activities and Fragments themselves.
- How the Back button and configuration changes (screen rotation) affect the Activity and Fragment lifecycles.
fragment-comms
This example app demonstrates five styles of communicating data between Activities and Fragments.
- ActivityIntent - How to communicate to a fragment through the Intent that started the Activity.
- FactoryMethod - Communicate build arguments to a Fragment in a way that will survive the Activity and Fragment lifecycles.
- ObserverPattern - Two way communication between any combination of multiple Fragments and Activities using the standard Java Observer pattern.
- LayoutElements - Communicate static build arguments to a Fragment by placing them in the Layout.
- SetArguments - Using the setArguments call on the Fragment itself to give it arguments available to it during the entire lifecycle.
- LocalBroadcast - Available only when using the Support Library, LocalBroadcast enables the Observer Pattern without the need for the participants to keep track of Observers.
fragment-comms-support
This project is just like the fragment-comms project except that it uses the support library.
hall-of-mirrors
The hall-of-mirrors example demonstrates that Fragments can be nested within other Fragments.