--- layout: page title: "Learning GNU Emacs, 3rd Edition" prev: OEBPS/index.html next: OEBPS/pr01s02.html book_path: books/learning-gnu-emacs--_oeb/ --- {% include JB/setup %} {% raw %}
Emacs is the most powerful text editor available today. Unlike most other editors (in particular, unlike the standard Unix editor, vi), Emacs is a complete working environment. No matter what you do, you can start Emacs in the morning, work all day and all night, and never leave it: you can use it to edit, rename, delete, and organize files; to compile programs; to run shell commands; and so on. Before windowing systems like X and Microsoft Windows became popular, Emacs often served as a complete windowing system of its own. All you needed was a terminal, and you could live within Emacs forever. Emacs is also infinitely flexible; you can write your own commands, change the keys that are associated with commands, and (if you are willing to take the time) do just about anything you want.
Because it does so much, Emacs has a reputation for being extremely complicated. We don't think that's warranted; we teach you Emacs from the ground up, covering first the basics and then some of the more advanced features.
In this book, we have tried to reach as broad an audience as possible: from casual users to professional writers and web authors to programmers to system administrators. No matter what you do with Emacs, you will find it's easy to learn; after one or two sessions, you'll know the basics of editing any file. After you learn the basics, you can go on to learn about more advanced topics that provide the real benefits of using Emacs. These include:
Using multiple windows and buffers so you can work on several files at once
Customizing keyboard commands
Tailoring Emacs to fit your work style
Making Emacs your work environment where you can do all your everyday tasks, such as organizing files, compiling programs, and issuing shell commands
Creating macros to streamline repetitive tasks
Using Emacs to support programming in many languages (including C, C++, Lisp, Java, and Perl)
Formatting files with various markup languages, such as HTML and XML
Using word abbreviations to avoid spelling out long phrases or to correct common misspellings
Of course, many of the topics may not apply to you; some topics may be appropriate for a second reading but not for the first. Toward the end of the preface, we'll sketch several different ways to approach the book, depending on your interests and experience.


fun createJson(input: String, callback: JsonConstructionCallback): Unit
Creates json objects from the parsed items found by parsing mentions, emojis, and urls
input
- the input string from the edit text
callback
- the callback where the resulting json is returned


unit.py¶
TODO: Replace this with info about this file
-
class
sc2.unit.
Unit
(proto_data, bot_object)¶ -
property
add_on_land_position
¶ If this unit is an addon (techlab, reactor), returns the position where a terran building (BARRACKS, FACTORY, STARPORT) has to land to connect to this addon.
- Return type
-
property
add_on_position
¶ If this unit is a terran production building (BARRACKS, FACTORY, STARPORT), this property returns the position of where the addon should be, if it should build one or has one attached.
- Return type
-
property
add_on_tag
¶ Returns the tag of the addon of unit. If the unit has no addon, returns 0.
- Return type
int
-
property
age
¶ Returns how old the unit object data is (in game seconds). This age does not reflect when the unit was created / trained / morphed!
- Return type
float
-
property
age_in_frames
¶ Returns how old the unit object data is (in game frames). This age does not reflect the unit was created / trained / morphed!
- Return type
int
-
property
air_dps
¶ Returns the dps against air units. Does not include upgrades.
- Return type
float
-
property
air_range
¶ Returns the range against air units. Does not include upgrades.
- Return type
float
-
property
alliance
¶ Returns the team the unit belongs to.
- Return type
Alliance
-
property
armor
¶ Returns the armor of the unit. Does not include upgrades
- Return type
float
-
property
armor_upgrade_level
¶ Returns the upgrade level of the units armor.
- Return type
int
-
property
assigned_harvesters
¶ Returns the number of workers currently gathering resources at a geyser or mining base.
- Return type
int
-
attack
(target, queue=False)¶ Orders unit to attack. Target can be a Unit or Point2. Attacking a position will make the unit move there and attack everything on its way.
- Parameters
- Return type
-
property
attack_upgrade_level
¶ Returns the upgrade level of the units attack. # NOTE: Returns 0 for units without a weapon.
- Return type
int
-
property
bonus_damage
¶ Returns a tuple of form ‘(bonus damage, armor type)’ if unit does ‘bonus damage’ against ‘armor type’. Possible armor typs are: ‘Light’, ‘Armored’, ‘Biological’, ‘Mechanical’, ‘Psionic’, ‘Massive’, ‘Structure’.
-
property
buff_duration_max
¶ Returns the maximum amount of frames of the visible timer bar. # NOTE: Returns 0 for units without a timer bar.
- Return type
int
-
property
buff_duration_remain
¶ Returns the amount of remaining frames of the visible timer bar. # NOTE: Returns 0 for units without a timer bar.
- Return type
int
-
property
buffs
¶ Returns the set of current buffs the unit has.
- Return type
Set
-
build
(unit, position=None, queue=False)¶ Orders unit to build another ‘unit’ at ‘position’. Usage:
self.do(SCV.build(COMMANDCENTER, position)) # Target for refinery, assimilator and extractor needs to be the vespene geysir unit, not its position self.do(SCV.build(REFINERY, target_vespene_geysir))
- Parameters
unit (
UnitTypeId
) –queue (
bool
) –
- Return type
-
build_gas
(target_geysir, queue=False)¶ Orders unit to build another ‘unit’ at ‘position’. Usage:
# Target for refinery, assimilator and extractor needs to be the vespene geysir unit, not its position self.do(SCV.build_gas(target_vespene_geysir))
- Parameters
target_geysir (
Unit
) –queue (
bool
) –
- Return type
-
property
build_progress
¶ Returns completion in range [0,1].
- Return type
float
-
calculate_damage_vs_target
(target, ignore_armor=False, include_overkill_damage=True)¶ Returns a tuple of: [potential damage against target, attack speed, attack range] Returns the properly calculated damage per full-attack against the target unit. Returns (0, 0, 0) if this unit can’t attack the target unit.
If ‘include_overkill_damage=True’ and the unit deals 10 damage, the target unit has 5 hp and 0 armor, the target unit would result in -5hp, so the returning damage would be 10. For ‘include_overkill_damage=False’ this function would return 5.
If ‘ignore_armor=False’ and the unit deals 10 damage, the target unit has 20 hp and 5 armor, the target unit would result in 15hp, so the returning damage would be 5. For ‘ignore_armor=True’ this function would return 10.
- Parameters
target (
Unit
) –ignore_armor (
bool
) –include_overkill_damage (
bool
) –
- Return type
Tuple
[float
,float
,float
]
-
calculate_dps_vs_target
(target, ignore_armor=False, include_overkill_damage=True)¶ Returns the DPS against the given target.
- Return type
float
-
property
can_attack
¶ Checks if the unit can attack at all.
- Return type
bool
-
property
can_attack_air
¶ Checks if the unit can air attack at all. Does not include upgrades.
- Return type
bool
-
property
can_attack_both
¶ Checks if the unit can attack both ground and air units.
- Return type
bool
-
property
can_attack_ground
¶ Checks if the unit can attack ground units.
- Return type
bool
-
property
can_be_attacked
¶ Checks if the unit is revealed or not cloaked and therefore can be attacked.
- Return type
bool
-
property
cargo_left
¶ Returns how much cargo space is currently left in the unit.
- Return type
Union
[float
,int
]
-
property
cargo_max
¶ How much cargo space is available at maximum.
- Return type
Union
[float
,int
]
-
property
cargo_size
¶ Returns the amount of cargo space the unit needs.
- Return type
Union
[float
,int
]
-
property
cargo_used
¶ Returns how much cargo space is currently used in the unit. Note that some units take up more than one space.
- Return type
Union
[float
,int
]
-
property
cloak
¶ Returns cloak state. See https://github.com/Blizzard/s2client-api/blob/d9ba0a33d6ce9d233c2a4ee988360c188fbe9dbf/include/sc2api/sc2_unit.h#L95
- Return type
CloakState
-
property
detect_range
¶ Returns the detection distance of the unit.
- Return type
float
-
distance_to
(p)¶ Using the 2d distance between self and p. To calculate the 3d distance, use unit.position3d.distance_to(p)
-
property
energy
¶ Returns the amount of energy the unit has. Returns 0 for units without energy.
- Return type
float
-
property
energy_max
¶ Returns the maximum amount of energy the unit can have. Returns 0 for units without energy.
- Return type
float
-
property
energy_percentage
¶ Returns the percentage of amount of energy the unit has. Returns 0 for units without energy.
- Return type
float
-
property
facing
¶ Returns direction the unit is facing as a float in range [0,2π). 0 is in direction of x axis.
- Return type
float
-
gather
(target, queue=False)¶ Orders a unit to gather minerals or gas. ‘Target’ must be a mineral patch or a gas extraction building.
- Parameters
target (
Unit
) –queue (
bool
) –
- Return type
-
property
ground_dps
¶ Returns the dps against ground units. Does not include upgrades.
- Return type
float
-
property
ground_range
¶ Returns the range against ground units. Does not include upgrades.
- Return type
float
-
property
has_add_on
¶ Checks if unit has an addon attached.
- Return type
bool
-
has_buff
(buff)¶ Checks if unit has buff ‘buff’.
- Return type
bool
-
property
has_cargo
¶ Checks if this unit has any units loaded.
- Return type
bool
-
property
has_reactor
¶ Check if a structure is connected to a reactor addon. This should only ever return True for BARRACKS, FACTORY, STARPORT.
- Return type
bool
-
property
has_techlab
¶ Check if a structure is connected to a techlab addon. This should only ever return True for BARRACKS, FACTORY, STARPORT.
- Return type
bool
-
property
has_vespene
¶ Checks if a geyser has any gas remaining. You can’t build extractors on empty geysers.
- Return type
bool
-
property
health
¶ Returns the health of the unit. Does not include shields.
- Return type
float
-
property
health_max
¶ Returns the maximum health of the unit. Does not include shields.
- Return type
float
-
property
health_percentage
¶ Returns the percentage of health the unit has. Does not include shields.
- Return type
float
-
hold_position
(queue=False)¶ Orders a unit to stop moving. It will not move until it gets new orders.
- Parameters
queue (
bool
) –- Return type
-
property
ideal_harvesters
¶ Returns the ideal harverster count for unit. 3 for gas buildings, 2*n for n mineral patches on that base.
- Return type
int
-
in_ability_cast_range
(ability_id, target, bonus_distance=0)¶ Test if a unit is able to cast an ability on the target without checking ability cooldown (like stalker blink) or if ability is made available through research (like HT storm).
-
property
is_active
¶ Checks if the unit has an order (e.g. unit is currently moving or attacking, structure is currently training or researching).
- Return type
bool
-
property
is_armored
¶ Checks if the unit has the ‘armored’ attribute.
- Return type
bool
-
property
is_attacking
¶ Checks if the unit is attacking. Only works for own units.
- Return type
bool
-
property
is_biological
¶ Checks if the unit has the ‘biological’ attribute.
- Return type
bool
-
property
is_blip
¶ Checks if the unit is detected by a sensor tower.
- Return type
bool
-
property
is_burrowed
¶ Checks if the unit is burrowed.
- Return type
bool
-
property
is_carrying_minerals
¶ Checks if a worker or MULE is carrying (gold-)minerals.
- Return type
bool
-
property
is_carrying_resource
¶ Checks if a worker is carrying a resource.
- Return type
bool
-
property
is_carrying_vespene
¶ Checks if a worker is carrying vespene gas.
- Return type
bool
-
property
is_cloaked
¶ Checks if the unit is cloaked.
- Return type
bool
-
property
is_collecting
¶ Checks if a unit is gathering or returning. Only works for own units.
- Return type
bool
-
property
is_constructing_scv
¶ Checks if the unit is an SCV that is currently building. Only works for own units.
- Return type
bool
-
property
is_detector
¶ Checks if the unit is a detector. Has to be completed in order to detect and Photoncannons also need to be powered.
- Return type
bool
-
property
is_enemy
¶ Checks if the unit is hostile.
- Return type
bool
-
is_facing
(other_unit, angle_error=0.05)¶ Check if this unit is facing the target unit. If you make angle_error too small, there might be rounding errors. If you make angle_error too big, this function might return false positives.
- Parameters
other_unit (
Unit
) –angle_error (
float
) –
- Return type
bool
-
property
is_flying
¶ Checks if the unit is flying.
- Return type
bool
-
property
is_gathering
¶ Checks if a unit is on its way to a mineral field or vespene geyser to mine. Only works for own units.
- Return type
bool
-
property
is_hallucination
¶ Returns True if the unit is your own hallucination or detected.
- Return type
bool
-
property
is_idle
¶ Checks if unit is idle.
- Return type
bool
-
property
is_light
¶ Checks if the unit has the ‘light’ attribute.
- Return type
bool
-
property
is_massive
¶ Checks if the unit has the ‘massive’ attribute.
- Return type
bool
-
property
is_mechanical
¶ Checks if the unit has the ‘mechanical’ attribute.
- Return type
bool
-
property
is_memory
¶ Returns True if this Unit object is referenced from the future and is outdated.
- Return type
bool
-
property
is_mine
¶ Checks if the unit is controlled by the bot.
- Return type
bool
-
property
is_mineral_field
¶ Checks if the unit is a mineral field.
- Return type
bool
-
property
is_moving
¶ Checks if the unit is moving. Only works for own units.
- Return type
bool
-
property
is_on_screen
¶ Checks if the unit is on the screen.
- Return type
bool
-
property
is_patrolling
¶ Checks if a unit is patrolling. Only works for own units.
- Return type
bool
-
property
is_powered
¶ Checks if the unit is powered by a pylon or warppism.
- Return type
bool
-
property
is_psionic
¶ Checks if the unit has the ‘psionic’ attribute.
- Return type
bool
-
property
is_ready
¶ Checks if the unit is completed.
- Return type
bool
-
property
is_repairing
¶ Checks if the unit is an SCV or MULE that is currently repairing. Only works for own units.
- Return type
bool
-
property
is_returning
¶ Checks if a unit is returning from mineral field or vespene geyser to deliver resources to townhall. Only works for own units.
- Return type
bool
-
property
is_revealed
¶ Checks if the unit is revealed.
- Return type
bool
-
property
is_selected
¶ Checks if the unit is currently selected.
- Return type
bool
-
property
is_snapshot
¶ Checks if the unit is only available as a snapshot for the bot. Enemy buildings that have been scouted and are in the fog of war or attacking enemy units on higher, not visible ground appear this way.
- Return type
bool
-
property
is_structure
¶ Checks if the unit is a structure.
- Return type
bool
-
property
is_transforming
¶ Checks if the unit transforming. Only works for own units.
- Return type
bool
-
is_using_ability
(abilities)¶ Check if the unit is using one of the given abilities. Only works for own units.
- Return type
bool
-
property
is_vespene_geyser
¶ Checks if the unit is a non-empty vespene geyser or gas extraction building.
- Return type
bool
-
property
is_visible
¶ Checks if the unit is visible for the bot. NOTE: This means the bot has vision of the position of the unit! It does not give any information about the cloak status of the unit.
- Return type
bool
-
property
mineral_contents
¶ Returns the amount of minerals remaining in a mineral field.
- Return type
int
-
move
(position, queue=False)¶ Orders the unit to move to ‘position’. Target can be a Unit (to follow that unit) or Point2.
- Parameters
- Return type
-
property
movement_speed
¶ Returns the movement speed of the unit. Does not include upgrades or buffs.
- Return type
float
-
property
name
¶ Returns the name of the unit.
- Return type
str
-
property
noqueue
¶ Checks if the unit is idle.
- Return type
bool
-
property
order_target
¶ Returns the target tag (if it is a Unit) or Point2 (if it is a Position) from the first order, returns None if the unit is idle
- Return type
Union
[int
,Point2
,None
]
-
property
orders
¶ Returns the a list of the current orders.
- Return type
List
[UnitOrder
]
-
property
owner_id
¶ Returns the owner of the unit. This is a value of 1 or 2 in a two player game.
- Return type
int
-
property
passengers
¶ Returns the units inside a Bunker, CommandCenter, PlanetaryFortress, Medivac, Nydus, Overlord or WarpPrism.
- Return type
Set
[Unit
]
Returns the tags of the units inside a Bunker, CommandCenter, PlanetaryFortress, Medivac, Nydus, Overlord or WarpPrism.
- Return type
Set
[int
]
-
patrol
(position, queue=False)¶ Orders a unit to patrol between position it has when the command starts and the target position. Can be queued up to seven patrol points. If the last point is the same as the starting point, the unit will patrol in a circle.
- Parameters
- Return type
-
property
position_tuple
¶ Returns the 2d position of the unit as tuple without conversion to Point2.
- Return type
Tuple
[float
,float
]
-
property
race
¶ Returns the race of the unit
- Return type
Race
-
property
radius
¶ Half of unit size. See https://liquipedia.net/starcraft2/Unit_Statistics_(Legacy_of_the_Void)
- Return type
float
-
repair
(repair_target, queue=False)¶ Order an SCV or MULE to repair.
- Parameters
repair_target (
Unit
) –queue (
bool
) –
- Return type
-
research
(upgrade, queue=False)¶ Orders unit to research ‘upgrade’. Requires UpgradeId to be passed instead of AbilityId.
- Parameters
upgrade (
UpgradeId
) –queue (
bool
) –
- Return type
-
return_resource
(target=None, queue=False)¶ Orders the unit to return resource. Does not need a ‘target’.
- Parameters
target (
Optional
[Unit
]) –queue (
bool
) –
- Return type
-
scan_move
(*args, **kwargs)¶ Deprecated: This ability redirects to ‘AbilityId.ATTACK’
- Return type
-
property
shield
¶ Returns the shield points the unit has. Returns 0 for non-protoss units.
- Return type
float
-
property
shield_health_percentage
¶ Returns the percentage of combined shield + hp points the unit has. Also takes build progress into account.
- Return type
float
-
property
shield_max
¶ Returns the maximum shield points the unit can have. Returns 0 for non-protoss units.
- Return type
float
-
property
shield_percentage
¶ Returns the percentage of shield points the unit has. Returns 0 for non-protoss units.
- Return type
float
-
property
shield_upgrade_level
¶ Returns the upgrade level of the units shield. # NOTE: Returns 0 for units without a shield.
- Return type
int
-
property
sight_range
¶ Returns the sight range of the unit.
- Return type
float
-
stop
(queue=False)¶ Orders a unit to stop, but can start to move on its own if it is attacked, enemy unit is in range or other friendly units need the space.
- Parameters
queue (
bool
) –- Return type
-
property
surplus_harvesters
¶ Returns a positive int if unit has too many harvesters mining, a negative int if it has too few mining.
- Return type
int
-
property
tag
¶ Returns the unique tag of the unit.
- Return type
int
-
target_in_range
(target, bonus_distance=0)¶ Checks if the target is in range. Includes the target’s radius when calculating distance to target.
- Parameters
target (
Unit
) –bonus_distance (
float
) –
- Return type
bool
-
property
tech_alias
¶ Building tech equality, e.g. OrbitalCommand is the same as CommandCenter For Hive, this returns [UnitTypeId.Hatchery, UnitTypeId.Lair] For SCV, this returns None
- Return type
Optional
[List
[UnitTypeId
]]
-
train
(unit, queue=False)¶ Orders unit to train another ‘unit’. Usage: self.do(COMMANDCENTER.train(SCV))
- Parameters
unit (
UnitTypeId
) –queue (
bool
) –
- Return type
-
property
type_id
¶ UnitTypeId found in sc2/ids/unit_typeid. Caches all type_ids of the same unit type.
- Return type
-
property
unit_alias
¶ Building type equality, e.g. FlyingOrbitalCommand is the same as OrbitalCommand For flying OrbitalCommand, this returns UnitTypeId.OrbitalCommand For SCV, this returns None
- Return type
Optional
[UnitTypeId
]
-
property
vespene_contents
¶ Returns the amount of gas remaining in a geyser.
- Return type
int
-
warp_in
(unit, position)¶ Orders Warpgate to warp in ‘unit’ at ‘position’.
- Parameters
unit (
UnitTypeId
) –queue –
- Return type
-
property
weapon_cooldown
¶ Returns the time until the unit can fire again, returns -1 for units that can’t attack. Usage: if unit.weapon_cooldown == 0:
self.do(unit.attack(target))
- elif unit.weapon_cooldown < 0:
self.do(unit.move(closest_allied_unit_because_cant_attack))
- else:
self.do(unit.move(retreatPosition))
- Return type
float
-
property


A practical introduction to git
Anna Kennedy
Overview
- Version control
- Git concepts
- Using git locally
- Using git with a (Gitlab) remote
- Undoing mistakes
- Branches
- Caring for your commit history
Version control
- Version control means that we keep a history of all the changes made in a set of documents.
- Git is one example of a version control system
- Pre-version control:
- CVS / SVN:
- Centralised storage with revision history
- Git:
SVN
Centralised storage with revision history
- client-server model
- central server houses master repo
- developer laptop is the client
- check-out -> modify -> check-in
- Advantages / disadvantages
- + simple system
- - difficult to work offline
- - difficult to work collaboratively
- - advanced functionality quite hard to get right
Git
Distributed version control
- every copy of the project is a full repository
- Advantages / disadvantages
- - steep learning curve
- + save changes locally when working offline
- + branching
- + merging
- + every copy is a full backup
- + very fast
Projects in git
- Any directory can be brought under git's control
- both new and existing projects
- git init initialises a directory with a .git subdir
- This directory is now a local git repository
- The .git folder contains metadata about the project
- To remove a project from git, simply delete the .git folder
Exercise: Initialise a new project in git
- Make a new directory and move into it
- Initialise the directory as a git repository
$ mkdir myproject
$ cd myproject
$ git init
Initialized empty Git repository in /home/myname/projects/myproject
$ ls -la
drwxr-xr-x 4096 Apr 5 09:54 .
drwxr-xr-x 4096 Apr 4 12:40 ..
drwxr-xr-x 4096 Apr 5 08:13 .git
Configure global git variables
- Git requires that version history is associated with users
- Thus we need to set name and email as global variables
- Trying to use git without this results in the following annoying message:
Your name and email address were configured automatically based
on your username and hostname. Please check that they are accurate.
You can suppress this message by setting them explicitly:
$ git config --global user.name "Your Name"
$ git config --global user.email<EMAIL_ADDRESS>Exercise: Check / set your name and email settings
- Use git config -l to see if you've already set your name and email address
- If you need to set them, use
$ git config --global user.name "Your Name"
$ git config --global user.email<EMAIL_ADDRESS>Checking the current status
- Running git status at any point shows the current state of the directory
- It also often gives hints about how to proceed or undo steps
$ git init
Initialized empty Git repository in /home/myname/projects/myproject
$ git status
On branch master
Initial commit
nothing to commit (create/copy files and use "git add" to track)
Getting help
- Access the man pages on the command-line like:
$ git help
The most commonly used git commands are:
add Add file contents to the index
branch List, create, or delete branches
checkout Checkout a branch or paths to the working tree
$ git help add
NAME
git-add - Add file contents to the index
SYNOPSIS
git add [-n] [-v] [-f] [-i] [-p] [--] [...]
Adding files to the project
- git add filename to add files to staging
- git add . to add everything
Exercise: Add files to the project
- Make a file inside the directory "helloworld.txt"
- Add this file to git
$ vim helloworld.txt
$ git status
On branch master
Untracked files:
(use "git add file..." to include in what will be committed)
helloworld.txt
$ git add helloworld.txt
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD file..." to unstage)
new file: helloworld.txt
Committing the changes to the local repo
- After a file is added to staging, we then have to commit the changes
- git commit and then enter commit message on the next screen
- git commit -m "commit message" to do both steps at once
Exercise: Commit the changes to your local repo
- Commit this file to your local repository
$ git commit -m "First commit"
$ git status
On branch master
nothing to commit, working directory clean
Basic git rhythm
- Make changes
- Stage the changes with git add
- Commit the changes with git commit
View commit history
- git log shows a history of commits
- git log -p shows what has changed with each commit
- git log -2 only shows the last two commits
$ git log -p
commit 320a8f00a4a0de7c9b3f39851d3bc164d0769697
Author: myname<EMAIL_ADDRESS>Date: Mon Apr 4 12:52:23 2016 +0200
First commit
diff --git a/file1.txt b/file1.txt
new file mode 100644
index 0000000..907b308
--- /dev/null
+++ b/file1.txt
@@ -0,0 +1 @@
+Hello everyone!
 Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
Exercise: Make and view a more interesting commit history
- So far we literally only have one commit - let's make a bit more to work with
- Make two more files, and commit them
- Edit one file, and commit that
- Make two files and only commit one of them
- Now commit the other one
- Use git log and git status to follow the history as you go
Comparing files
- git diff compares current files with the latest committed version
- After you've made a change to a file, but before it's committed
- Use 'git diff' to see what the difference between the files is
$ echo "Pleased to meet you all." >> helloworld.txt
$ git diff
diff --git a/file1.txt b/file1.txt
index 404c772..2d48565 100644
--- a/file1.txt
+++ b/file1.txt
@@ -1,2 +1,3 @@
Hello everyone!
+Pleased to meet you all.
Exercise: Compare files
- Make a change to a file
- Use 'git diff' to see what the difference between the file now and the last committed version
$ git diff
diff --git a/file1.txt b/file1.txt
index 404c772..2d48565 100644
--- a/file1.txt
+++ b/file1.txt
@@ -1,2 +1,3 @@
Hello everyone!
+Pleased to meet you all.
Stashing your work
- We like to try and keep our commits meaningful (more on this later)
- but if you're in the middle of working on something and you need to pause or switch branches
- you can save your work-in-progress state with git stash
- Can stash multiple events
- git stash list to view them
- git stash apply to pick up your most recent stash
Exercise: Stashing your work
- Make some changes to a file
- Stash your changes
- View the stash list
- Verify the directory is at the state of the latest commit
- Apply the stash to regain your work in progress
$ git stash
Saved working directory and index state WIP on master: e99a3ac Allow user login
HEAD is now at e99a3ac Latest hegnar configs
$ git stash list
stash@{0}: WIP on master: e99a3ac Allow user login
Using a remote repository
- So far we only used our local repository
- If we're interested in collaboration or backups, we need to look at communicating with a remote repository
- For this course, our remote is housed in Gitlab
- Otherwise the remote could be
- plain git
- gitolite
- Gitorious
- Github
Gitlab
- Gitlab provides a web-gui frontend
- Lots of useful collaborative and exploratory features
Creating a remote in Gitlab
- Pretty straightforwards to create a new remote in Gitlab
Exercise: Create a new remote repository
- Within the Gitlab UI, make a new project
- Name your project, leave it as private
- Notice that it tells you how to proceed!
- Within your local repository, tell git where the remote is:
$ git remote add origin git@gitlab.example.com:myname/myprojectname.git
# Set a new remote
Pushing changes from the local to the remote repo
- So far all our work is only in our local repository
- Use git push to send our commits to the remote repository
- The first time we do this we need to set the upstream branch
- origin is git's default name for the remote repo
$ git push -u origin master
Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (5/5), 721 bytes | 0 bytes/s, done.
Total 5 (delta 2), reused 0 (delta 0)
To git@gitlab.example.com:myname/myproject.git
e99a3ac..f91ed8c master -> master
Exercise: Push changes from the local to the remote repo
- Use git push to send your commits to the remote repository
- The first time we do this we need to set the upstream branch with -u
- You should see your files in Gitlab now
$ git push -u origin master
Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (5/5), 721 bytes | 0 bytes/s, done.
Total 5 (delta 2), reused 0 (delta 0)
To git@gitlab.example.com:myname/myproject.git
e99a3ac..f91ed8c master -> master
Retrieving changes from the remote
- If changes have been made on the remote, we need to update our local repository to get those changes
- Use git pull to retrieve any changes
Exercise: pulling remote changes
- Edit a file in Gitlab
- Pulled the changes your local repository
- What do git status and git log say?
$ git pull
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 2), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From gitlab.example.com:myname/myproject
f91ed8c..3f522c5 master -> origin/master
Updating f91ed8c..3f522c5
Fast-forward
file1.txt | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
Pull behind the scenes
- So far we've done git pull to get the changes from the remote repository
- git pull really means git fetch then git merge
- We'll talk more about merging soon
- Be aware that sometimes doing a fetch and then a merge instead of pull can give you more insight into what git is doing
Viewing remotes on the command line
- git remote shows and can amend the remote repository
- This information is also available in .git/config
- origin is just git's default name for the remote
$ git remote -v
origin git@gitlab.example.com:anna/testrepository.git (fetch)
origin git@gitlab.example.com:anna/testrepository.git (push)
Basic git rhythm with remote
- Get updates with git pull
- Make changes
- Stage the changes with git add
- Commit the changes with git commit
- Push the changes to the remote with git push
Basic git rhythm with remote
Working collaboratively
- Git is an amazing tool for working collaboratively
- However then we need to start worrying about changes we didn't make
- If you're the sole committer to a repository, things are usually straightforwards
- However in a team, chances are that people will make conflicting changes at times
- Let's take a pragmatic look at two common issues
Troubleshooting 1: the push is rejected
- If you try to git push your changes and see something like:
$ git push
To git@gitlab.example.com:myname/myproject.git
! [rejected] master -> master (fetch first)
error: failed to push some refs to 'git@gitlab.example.com:myname/testrepository.git'
hint: Updates were rejected because the remote contains work that you do not have locally.
- Then you're trying to push before you've updated your local repo with remote changes.
- Fix this by doing a git pull first
$ git pull
$ git push
Troubleshooting 2: we got a merge conflict
- If we try to git pull (git fetch + git merge) and see something like:
Auto-merging file1.txt
CONFLICT (content): Merge conflict in file1.txt
Automatic merge failed; fix conflicts and then commit the result.
- Then we have a merge conflict we need to resolve
Let's see what the problem is:
$ git status
Unmerged paths:
(use "git add ..." to mark resolution)
both modified: file1.txt
$ git diff
diff --cc file1.txt
index 528038e,f324c51..0000000
--- a/file1.txt
+++ b/file1.txt
@@@ -1,4 -1,4 +1,8 @@@
++<<<<<<< HEAD
+hello
++=======
+ goodbye
++>>>>>>><PHONE_NUMBER>a3a5a0432bea090b82b58d74d5aa9d
- Resolution: decide what the file should contain
- Git writes markers in the file around conflicting sections
- Edit the file (including deleting the markers)
- Add, commit, push.
$ cat file1.txt
<<<<<<< HEAD
hello
=======
goodbye
>>>>>>><PHONE_NUMBER>a3a5a0432bea090b82b58d74d5aa9d
$ nano file1.txt
$ git add file1.txt
$ git commit -m "Fixing conflict"
$ git push
Working collaboratively
- With that in mind, let's move on to using a common repository
- For the purposes of this course, we've set up an example repo in Gitlab for us all to clone
- Then we can experiment with making and resolving conflicts
Cloning an existing repository
- If we want to work on an existing repository, we can either edit the files in Gitlab, or clone the repo locally.
- Editing in the UI tends to only be practical for very small, isolated changes.
- To clone a repo, find the correct URL in Gitlab, displayed ssh/http on the project page.
- SSH needs a key to have been set up, HTTPS needs a username and password.
$ git clone git@gitlab.example.com:myname/myproject.git
or
$ git clone https://gitlab.example.com/myname/myproject.git
Exercise: Clone a remote
- Clone the example repo to your local directory
- Make a new file, add and commit the changes locally
- If you're working in a group, remember to do git pull to get any changes made by other people
- Push the changes back to the remote
- Did you get any conflicts?
- Verify the new file is visible in Gitlab
$ git clone git@gitlab.example.com:myname/myproject.git
$ git add ...
$ git commit ...
$ git pull
$ git push
Exercise: resolving issues
- Make a file in the Github UI and commit it
- Without doing a pull, edit the same file locally
- Add and commit the file
- What happens when you try to push it back to the remote?

- How is this different to git reset?
$ git revert HEAD~
Revert "Adding deploy button"
This reverts commit 28972f7572e9465cc6a0994ce5fcc31ba2d1afbb.
Branches
- One of git's most powerful features
- Allow simultaneous work in different environments
- Develop features
- Only merge in new code when you're ready
Git workflow: master branch only
master is git's default main branch
Git workflow: master branch and a hotfix branch
Git workflow: development and release branches
Branch commands
- git branch displays the checked-out branches
- git branch branchname creates a new branch
- git checkout branchname switches to the new branch
- git checkout -b combines the above commands to create a new branch and switch to it
$ git branch
* master
$ git branch featurebranch
$ git branch
* master
featurebranch
$ git checkout featurebranch
$ git branch
* featurebranch
master
Exercise: working with branches
Let's make a new feature branch of the existing repository that you cloned.
$ git checkout -b featurebranch
Switched to a new branch 'featurebranch'
$ git branch
* featurebranch
master
- Create some more files and edit existing files
- Add and commit your changes
- The first time you push, you'll need to set up the remote for this branch like:
$ git push --set-upstream origin featurebranch
Merging branches
- You've developed a whole new feature in the feature branch, and now it's time to merge it back into the master branch
- We can merge branches on the command line
- or use merge request in Gitlab (this is called 'pull request' in Github)
- Merge requests are more appropriate for merging to production branches as they encourage code review and thoughtful deploys
Exercise: merging branches in Gitlab
- In Gitlab, create a new merge request to merge your feature branch into the master branch
- Explore the request and check the changes you made
- Accept the merge request
- See the changes now appear in the main branch in Gitlab
- Locally switch back to the master branch with git checkout and do a git pull to get up-to-date
$ git checkout master
Switched to branch 'master'
Your branch is behind 'origin/master' by 2 commits, and can be fast-forwarded.
(use "git pull" to update your local branch)
$ git pull
Updating 7a59581..4d4adb3
Fast-forward
file2.txt | 1 +
1 file changed, 1 insertion(+)
create mode 100644 file2.txt
Exercise: merging branches on the command line
- On the command line, ensure you're on the feature branch
- Make some changes in the feature branch, add, commit, and push them
- Switch back to the master branch, merge in the feature branch, and push back to the remote
$ git checkout master
$ git merge master featurebranch
$ git push
- Note that we merge into the branch we're standing in
Investigative tools
- Sometimes we need to work out exactly what's going on in a repository
- git log to see a history of commits
- git reflog to see a history of both commits and amends
- git blame filename to see who authored every line in a file
- git log --graph to see the relationship of branches
$ git log --graph
* commit f91ed8cabfd053cde63f168087885bfdd0358419
| Updated readme
|
* commit b8775a17e6fa9c9b6a9dd9f7b323a280a4db8faf
|\ Merge: 9544040 e99a3ac
| | Merge branch 'master' of gitlab.example.com:myname/myproject
| |
| * commit e99a3ac35a86c9bce4c8993ed8b6f1b7c8bf2a39
| | Allow user login
| |
* | commit 9544040efc0537d2f5a10975c0b779c3ccad0142
|/ Add remote users
|
Exercise: Investigative tools
- Try out the following tools:
- git log to see a history of commits
- git reflog to see a history of both commits and amends
- git log --graph to see the relationship of branches
- git blame filename to see who authored every line in a file
Working with multiple stable branches
- Alongside the main master branch, there can also be other stable branches
- A common workflow is to develop features in a feature branch and then merge up through the environments
Working with multiple stable branches
Feature vs stable branches
- Feature branches
- can be considered private branches
- a place to experiment
- therefore often messy commit history
- Stable branches
- can be considered public branches
- need to think a bit more carefully about commit history
- Further reading: sandofsky.com/blog/git-workflow.html
Caring for your
commit history
Why do we need to worry about our commit history?
- A well-maintained commit history will allow you to:
- track when features were introduced
- discover when bugs were introduced
- provides some amount of documentation
- A good commit history tells a story
Commit message guidelines
- Use one line to describe what the commit does
- Examples of good commit messages:
- Allow users to sign in remotely
- Fixed bug #123
- Added postcode field to address table
- Examples of bad commit messages:
- Commit4
- Typo
- dfkasdjefskjh
Commit history choices: Rebasing
- You've made a feature branch, and done some work on it
- but while you've been working on it, your colleagues have made some changes to master
- if you do a git merge all the master commits will go on top of your feature commits
- So instead we do a git rebase to apply the commits underneath your feature commits
- Let's demonstrate the difference with a diagram
Commit history choices:
Merging with fast-forwarding
- If no changes have occured on the master branch while feature development was underway
- git will try to merge branches with fast-forward
- All commits from the feature branch are visible in the master branch
- This can be useful, or can be clutter in the version history
- We can use --no-ff to submit a single commit for the merge
- Let's visualise the difference
Editing the commit history
- In order to tell a good story with your commit history, you will probably need to edit your commit history at times
- git commit --amend lets you amend your most recent commit
- git rebase --interactive for more complex history rewrites
- git push --force branchname to push your new historys
- NB NEVER rewrite your commit history after you've 'gone public' with the branch (ie, pushed to a shared repository).
Interactive rebase
- git rebase --interactive will drop you into a text editor where we can specify all the things we want to change
- Commands:
- pick = use commit
- reword = use commit, but edit the commit message
- edit = use commit, but stop for amending
- squash = use commit, but meld into previous commit
- fixup = like "squash", but discard this commit's log message
- exec = run command (the rest of the line) using shell
Interactive rebase
$ git rebase -i HEAD~3
pick 6c169da Fixed bug #234
pick 78413bb Typo in user prefs
pick 2bc4f9b Allow users to update their preferences
# Rebase 28972f7..2bc4f9b onto :w28972f7
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
#
# These lines can be re-ordered; they are executed from top to bottom.
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
# Note that empty commits are commented out
Rewrite a commit message
$ git rebase -i HEAD~3
reword 6c169da Fixed bug #234
pick 78413bb Typo in user prefs
pick 2bc4f9b Allow users to update their preferences
Fixed bug #234: do not allow remote access to db
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
$ git log
commit 6c169da
Fixed bug #234: do not allow remote access to db
Squashing commits together
$ git rebase -i HEAD~3
pick 6c169da Fixed bug #234: do not allow remote access to db
squash 78413bb Typo in user prefs
pick 2bc4f9b Allow users to update their preferences
Rebasing
# This is a combination of 2 commits.

Summary
- Version control
- Git concepts
- Using git locally
- Using git with a remote
- Undoing mistakes
- Branches
- Caring for your commit history


This page explains the multilang protocol for versions 0.7.0 and below. The protocol changed in version 0.7.1.
Storm Multi-Language Protocol
The ShellBolt
Support for multiple languages is implemented via the ShellBolt class. This class implements the IBolt interfaces and implements the protocol for executing a script or program via the shell using Java’s ProcessBuilder class.
Output fields
Output fields are part of the Thrift definition of the topology. This means that when you multilang in Java, you need to create a bolt that extends ShellBolt, implements IRichBolt, and declared the fields in declareOutputFields
.
You can learn more about this on Concepts
Protocol Preamble
A simple protocol is implemented via the STDIN and STDOUT of the executed script or program. A mix of simple strings and JSON encoded data are exchanged with the process making support possible for pretty much any language.
Packaging Your Stuff
To run a ShellBolt on a cluster, the scripts that are shelled out to must be
in the resources/
directory within the jar submitted to the master.
However, During development or testing on a local machine, the resources directory just needs to be on the classpath.
The Protocol
Notes: * Both ends of this protocol use a line-reading mechanism, so be sure to trim off newlines from the input and to append them to your output. * All JSON inputs and outputs are terminated by a single line contained “end”. * The bullet points below are written from the perspective of the script writer’s STDIN and STDOUT.
- Your script will be executed by the Bolt.
- STDIN: A string representing a path. This is a PID directory. Your script should create an empty file named with it’s pid in this directory. e.g. the PID is 1234, so an empty file named 1234 is created in the directory. This file lets the supervisor know the PID so it can shutdown the process later on.
- STDOUT: Your PID. This is not JSON encoded, just a string. ShellBolt will log the PID to its log.
- STDIN: (JSON) The Storm configuration. Various settings and properties.
- STDIN: (JSON) The Topology context
- The rest happens in a while(true) loop
- STDIN: A tuple! This is a JSON encoded structure like this:
{
// The tuple's id
"id": -6955786537413359385,
// The id of the component that created this tuple
"comp": 1,
// The id of the stream this tuple was emitted to
"stream": 1,
// The id of the task that created this tuple
"task": 9,
// All the values in this tuple
"tuple": ["snow white and the seven dwarfs", "field2", 3]
}
- STDOUT: The results of your bolt, JSON encoded. This can be a sequence of acks, fails, emits, and/or logs. Emits look like:
{
"command": "emit",
// The ids of the tuples this output tuples should be anchored to
"anchors": [1231231, -234234234],
// The id of the stream this tuple was emitted to. Leave this empty to emit to default stream.
"stream": 1,
// If doing an emit direct, indicate the task to sent the tuple to
"task": 9,
// All the values in this tuple
"tuple": ["field1", 2, 3]
}
An ack looks like:
{
"command": "ack",
// the id of the tuple to ack
"id": 123123
}
A fail looks like:
{
"command": "fail",
// the id of the tuple to fail
"id": 123123
}
A “log” will log a message in the worker log. It looks like:
``` { “command”: “log”, // the message to log “msg”: “hello world!”
} ```
- STDOUT: emit “sync” as a single line by itself when the bolt has finished emitting/acking/failing and is ready for the next input
sync
Note: This command is not JSON encoded, it is sent as a simple string.
This lets the parent bolt know that the script has finished processing and is ready for another tuple.


Price List
Starting prices come standard with one stringer, a maximum of three fin boxes, glassed clear, sanded finish. Prices below are
estimates only - please contact us to discuss your order in detail.
Board Length Starting Prices
- 6ft and Under: $600
- $100 for each additional foot
- Over 10ft: contact to discuss
Standard Add-ons
- (All prices approximate.)
- Color: $35 per side (shortboard), $50 per side (longboard)
- Deck patch: $25
- Additional fin boxes: $20 each
- Sanded gloss finish: $100
- Additional/specialty stringer: contact for price
- Other speciality requests: contact to discuss


{% extends "layout.html" %} {% block page_title %} Money Claims Prototype {% endblock %} {% block home_link %} /prototype-14/index {% endblock %} {% block content %} {% include "includes/phase_banner_beta.html" %} Account confirmed You can return to your claim at any time by using your email address and password to sign in. Continue {% endblock %}
You can return to your claim at any time by using your email address and password to sign in.


VALIE EXPORT
WOmen'S ART: A manIFESTO 1972
Slut shaming
...because man has defined the image of woman for both man and woman...
Home
Animation 1
Animation 2


{% extends "results.html" %} {% block body %}
Learning docker it may help to understand the difference between these commands. There is a hierarchy to their usage
that brings you from a raw image to a working container.
docker Command Reference
This builds the image named arangodb from the information in Dockerfile
The docker create command creates a writeable container layer over the specified image and prepares it for running the specified command. The container ID is then printed to STDOUT.
You can then use the docker startcommand to start the container at any point.
docker run creates AND starts the writeable container named "test" from the debian image and detachs so the container runs in the background.
The docker-compose command pulls together containers into a system that performs some function. It reads the default file docker-compose.yml or an alternative.
This builds the containers defined in the docker-compose.yml file but does not start them.
This builds the containers defined in the docker-compose.yml and starts them up.
The --build switch forces a rebuild of the images supporting the containers and then containers are created and started.{% endblock %}}


Newbie Guide:
Select the one you seek below. Their location will be indicated on the radar.
Northwind
Rosella
Treant Bremec
Arujien
Andellia
Alshupes
Thalia
Pixy Murika
Back To The Main List


Matrix of word usage frequency between documents..
Sort by:
Each colored cell represents two documents that used the same word. Darker cells indicate documents that more frequently used the same words. The color of the cell represents the category or grouping assigned to the documents. Cooccurrences between documents of different groups are grayscale.
A typical NLP (natural language processing) data structure is an "Occurence Matrix". Each cell in the occurrence matrix represents the number of times (or frequency or probability) that a word occurs in a given set of words (usually a document or webpage).
At a fundamental level, this occurence matrix is really a graph (network of connections) where each element of the matrix at row i and column j represents the value of a connection (edge) from vertex i to node (vertex) j.
So if you start with a word in the Occurrence Graph and traverse through the it's document nodes and reach all the word nodes connected to each of those documents individually you can identify the words that "co-occur" in the same document. To form a new, smaller graph, with nodes of the same type you can delete all the document nodes and edges and replace them with the word-to-word nodes that are equivalent.
This results in a Co-Occurrence graph, which itself can be viewed as a Matrix (just like the Occurence Matrix). Each element ij represents the value of an edge from vertex i to vertex j.
Thanks to d3.js by Mike Bostock.


0
0
m/s
0
kcal
0
m
00
:
00
Start
Stop
Reset
Destination:
Please Enter The Place You Want To Go:
Search
Directions
Navigation


|
ChessGame
A two player console chess games
|
This is a console based two player chess game.
First make sure you are in the root folder of this game. To compile the code just run the following command. It deletes eventually excisting old compiled code and compile the project.
Note: Make sure you have the latest gcc compiler version installed to compile the code
To start the game, simply execute the following command in your teriminal at the project root folder.
To play the game, you will be asked to enter a figures origin and target. To select a figure just type in its coordinates. For example to make an initial move type in: >Please select a figure: E2
>Please select a target: E4
Note: The input is case insensitive
If you type in a invalid input, you will be asked to retype in your move. The game accepts only valid move corresponding to the standard chess rules. After a succesfull move the current board will be printed. Now the other player can type in it's move.
 The file location is at the rootfolder: SaveFile.txt. If you want to protect your savegame from overriding, move it to another location
This project is documented using doxygen. The documentation can be found here


This page explains the definition of sample objects in the planning workflow.
The second step describes the set of objects that forms the scope of the current plan, and selects a subset of representative objects for experimentation.
A general description of the characteristics of the set of objects, called collection, includes basic properties such as the size of the collection, the class of objects and the object formats they are currently represented in.
As a complete evaluation of the quality of preservation action tools is infeasible on the potentially very large collection of objects, you have to select representative sample objects that should cover the range of essential characteristics present in the collection at hand. From a collection of text documents this can be for instance three sample objects: One very large document containing many pictures, one document that contains several equations which are linked from the table of figures, and one exceptionally small documents that just contains plain text.
The selection of sample objects is an essential task within the preservation planning workflow. Potential preservation actions which are defined in the next workflow step will be carried out on these sample objects in the context of well-defined experiments. Significant results from these experiments are only obtained if the sample object have been carefully chosen.
To reduce effort to a minimum, this subset should be as small as possible. However, the sample objects are used as a representative set for testing the effects of applying preservation actions to the whole set of objects. A complete and thorough evaluation of the quality of preservation actions relies heavily on the completeness of features present within the test set. Thus it needs to be as large as needed to cover the variety of essential characteristics on both a technical and an intellectual level.
Depending on the degree of variance within the collection, typically between 3 and 10 sample objects are selected. For these samples, an in-depth characterisation should be performed, describing the significant properties and their technical characteristics such as their name and provenance, the file format, and specific risk factors. Identification of the selected objects can be done using DROID which has been integrated into Plato.
Sample objects chosen from the collection can be easily uploaded into Plato. At the very bottom of the page use the 'Browse...' button to choose a file from your local file system. Afterwards press 'Upload File' which incorporates the file as sample object into the preservation plan. The screenshot further down shows two files that have been uploaded 'Polar bear 1' and 'Polar bear 2'.
In case your samples are objects that can't be uploaded, such as specific database records, you might choose 'Add record' from the bottom of the web page. This enables you to describe the sample object without uploading a file.
For the samples, an in-depth characterisation is performed, describing the significant properties and their technical characteristics such as their name and provenance, the file format, and specific risk factors. The uploaded sample record can be identified by clicking 'Identify format' on the page. For identification Plato uses the software tool DROID which it calls and displays the output: PUID (Pronom Unique Identifier), Name, Version and MIME-type.
Plato also provides the function to characterise uploaded files
in-depth (for some formats). When you press the button 'Describe
sample records in XCDL`, Plato will use characterisation services
that extract properties of the objects using the XCL engine and
thus producing an XCDL for each objects. This can be used to
compare original and transformed objects during experiment
evaluation. All information about sample objects, including the
characterisation in XCDL, is stored in the preservation plan.
Further information on this subject can be found in the
publications on the documentation
page.
Another integrated well-known characterisation tool is JHove . The screenshot
below shows the tree view you get when you click the "View
characteristics" button in Plato.
And finally, we have integrated FITS, the
File Information Toolset.
It includes tools such as Jhove,
DROID, the ExifTool and others, and normalises the output in XML as
shown in the screenshot below:


|
yyjson 0.7.0
A high performance C JSON library.
|
yyjson consists of two types of data structures: immutable and mutable.
| Immutable | Mutable | |
|---|---|---|
| Document | yyjson_doc | yyjson_mut_doc |
| Value | yyjson_val | yyjson_mut_val |
Please note that the data structures described in this document are considered private, and it is recommended to use the public API to access them.
Each JSON value is stored in an immutable yyjson_val
struct:
The type of the value is stored in the lower 8 bits of the tag
.
The size of the value, such as string length, object size, or array size, is stored in the higher 56 bits of the tag
.
Modern 64-bit processors are typically limited to supporting fewer than 64 bits for RAM addresses (Wikipedia). For example, Intel64, AMD64, and ARMv8 have a 52-bit (4PB) physical address limit. Therefore, it is safe to store the type and size information within the 64-bit tag
.
A JSON document stores all strings in a contiguous memory area.
Each string is unescaped in-place and ended with a null-terminator.
For example:
A JSON document stores all values in another contiguous memory area.
The object
and array
containers store their own memory usage, allowing easy traversal of the child values.
For example:
Each mutable JSON value is stored in an yyjson_mut_val
struct:
The tag
and uni
fields are the same as the immutable value, and the next
field is used to build a linked list.
A mutable JSON document is composed of multiple yyjson_mut_val
.
The child values of an object
or array
are linked as a cycle,
the parent holds the tail of the circular linked list, enabling yyjson to perform operations append
, prepend
and remove_first
in constant time.
For example:
A JSON document (yyjson_doc
, yyjson_mut_doc
) is responsible for managing the memory of all its JSON values and strings. When a document it is no longer needed, it is important for the user to call yyjson_doc_free()
or yyjson_mut_doc_free()
to free the memory associated with it.
A JSON value (yyjson_val
, yyjson_mut_val
) has the same lifetime as its document. The memory is managed by its document and and cannot be freed independently.
For more information, refer to the API documentation.


Through email is not the most efficient communication way, it is the most popular way to communicate in people. Ten The interview is often the most daunting part of the English communication for many international students who come from non- English speaking country.
Ironically, most of them perform poorly in the speaking section in the interview because they over-prepare for it. The “error-free” templates and picture-perfect “model answers” committed to memory make the entire preparation process a strategic failure. From my perspective, the interviewer does not only just wants to get a “correct answer” but also intend to examine the interviewer’s English proficiency.
Personal preferences may vary when it comes to words, pronunciation and expression, bull all interviewers value spontaneity. It is fairly easy for them to spot thoughtless spouting of prepared answers, because there are few or no nature pauses in answers given by rote. In addition, candidates tend to hesitate noticeably when the interviewers ask for further elaboration on a prepared response. This dramatic hesitation seriously erodes the candidate’s credibility in proving English proficiency, which often results in a bad impression. As an international student from a non-English-speaking country, I am confident of my technical skills in my procession. However, the ability of English communication is the passport to get a job in an English-speaking country. Language ability cannot be achieved overnight. It needs time and energy.
It is true that speaking a second language is partly a talent, but it is mostly a skill. I believe it will, like any other sill, improve with practical guidance and continued practice.


Curious about what you can do with NW.js and how you can do it ? Don't want to setup a project just to test one feature or one line of code ? You've come to the right place !
NW.js Playground lets you write and execute pieces of code without having to setup a NW.js app. Just type your code below and click Run.
var dare = 'try me'; console.log(dare); // Open inspector to see the result
Made with highlight.js, Bootstrap, and obviously NW.js - Fork me on Github


Homepage
Budget
Analytics
Copyright
Money
Management
Balance
||DATA||lt;/small>0
Total Income
Total Expenses
Dashboard
Expenses
Income
All


The need for Autonomy, Robotics and Cognition Research
It has been repeatedly argued that the mind, or an intelligent autonomous system, is an
amalgam of several competences – computational capabilities related to perception,
planning, control and reasoning. Thus, the design of an autonomous system depends
on the integration of algorithms and data structures in computer vision, computer
audition, tactile processing, control theory, planning and reasoning (artificial
intelligence). As these fields however are practiced mostly in silos by experts who
cannot know the details of the other disciplines, it becomes hard to achieve the
integration that may give rise to autonomy.
Motivation for the workshop
This workshop, the first of its kind, gathers experts from all these disciplines surrounding
intelligent behavior, to address a number of basic questions: what kinds of description
should an autonomous system extract about the world? Should it be a general purpose
description that then different processes will utilize, or should an autonomous system
directly produce a plethora of different representations about the world? Could
autonomy be accomplished with one sense, or is a sensor fusion a necessary ingredient
for autonomy and intelligence? How much prediction is required to achieve autonomy
and how does this constrain the planning sub-system as it needs to be integrated with
sensing? How much of the system’s time should be devoted to computation and how
much to communication? Does autonomy require some sort of language, like natural
language?
Format of the workshop
These and other related questions will be addressed by international experts during a
two day workshop at the University of Maryland, supported in part by the National
Science Foundation, DARPA and ONR. The format of the workshop consists of half
hour talks and panels examining specific questions. The workshop is free of charge but
participants need to register so that we can plan for the breakfast and lunch during the
workshop days.


Your privacy is important to us. It is Fast Expo Collective LLC's policy to respect your privacy and comply with any applicable law and regulation regarding any personal information we may collect about you, including across our website, https://shieldbattery.net, and other sites we own and operate.
Personal information is any information about you which can be used to identify you. This includes information about you as a person (such as name, address, and date of birth), your devices, payment details, and even information about how you use a website or online service.
In the event our site contains links to third-party sites and services, please be aware that those sites and services have their own privacy policies. After following a link to any third-party content, you should read their posted privacy policy information about how they collect and use personal information. This Privacy Policy does not apply to any of your activities after you leave our site.
This policy is effective as of 28 December 2021.
Last updated: 28 December 2021
Information we collect falls into one of two categories: “voluntarily provided” information and “automatically collected” information.
“Voluntarily provided” information refers to any information you knowingly and actively provide us when using or participating in any of our services and promotions.
“Automatically collected” information refers to any information automatically sent by your devices in the course of accessing our products and services.
When you visit our website, our servers may automatically log the standard data provided by your web browser. It may include your device’s Internet Protocol (IP) address, your browser type and version, the pages you visit, the time and date of your visit, the time spent on each page, and other details about your visit.
Additionally, if you encounter certain errors while using the site, we may automatically collect data about the error and the circumstances surrounding its occurrence. This data may include technical details about your device, what you were trying to do when the error happened, and other technical information relating to the problem. You may or may not receive notice of such errors, even in the moment they occur, that they have occurred, or what the nature of the error is.
Please be aware that while this information may not be personally identifying by itself, it may be possible to combine it with other data to personally identify individual persons.
When you visit our website or interact with our services, we may automatically collect data about your device, such as:
Data we collect can depend on the individual settings of your device and software. We recommend checking the policies of your device manufacturer or software provider to learn what information they make available to us.
We may ask for personal information — for example, when you register an account or when you contact us — which may include one or more of the following:
We consider “user-generated content” to be materials (text, image and/or video content) voluntarily supplied to us by our users for the purpose of publication, processing, or usage on our platform. All user-generated content is associated with the account or email address used to submit the materials.
Please be aware that any content you submit for the purpose of publication will be public after posting (and subsequent review or vetting process). Once published, it may be accessible to third parties not covered under this privacy policy.
Transaction data refers to data that accumulates over the normal course of operation on our platform. This may include transaction records, stored files, user profiles, analytics data and other metrics, as well as other types of information, created or generated, as users interact with our services.
We only collect and use your personal information when we have a legitimate reason for doing so. In which instance, we only collect personal information that is reasonably necessary to provide our services to you.
We may collect personal information from you when you do any of the following on our website:
We may collect, hold, use, and disclose information for the following purposes, and personal information will not be further processed in a manner that is incompatible with these purposes:
We may combine voluntarily provided and automatically collected personal information with general information or research data we receive from other trusted sources. For example, If you provide us with your location, we may combine this with general information about currency and language to provide you with an enhanced experience of our site and service.
When we collect and process personal information, and while we retain this information, we will protect it within commercially acceptable means to prevent loss and theft, as well as unauthorized access, disclosure, copying, use, or modification.
Although we will do our best to protect the personal information you provide to us, we advise that no method of electronic transmission or storage is 100% secure, and no one can guarantee absolute data security.
You are responsible for selecting any password and its overall security strength, ensuring the security of your own information within the bounds of our services. For example, ensuring any passwords associated with accessing your personal information and accounts are secure and confidential.
We keep your personal information only for as long as we need to. This time period may depend on what we are using your information for, in accordance with this privacy policy. For example, if you have provided us with personal information as part of creating an account with us, we may retain this information for the duration your account exists on our system. If your personal information is no longer required for this purpose, we will delete it or make it anonymous by removing all details that identify you.
However, if necessary, we may retain your personal information for our compliance with a legal, accounting, or reporting obligation or for archiving purposes in the public interest, scientific, or historical research purposes or statistical purposes.
We do not aim any of our products or services directly at children under the age of 13, and we do not knowingly collect personal information about children under 13.
We may disclose personal information to:
Third parties we currently use include:
The personal information we collect is stored and/or processed in United States, or where we or our partners, affiliates, and third-party providers maintain facilities.
The countries to which we store, process, or transfer your personal information may not have the same data protection laws as the country in which you initially provided the information. If we transfer your personal information to third parties in other countries: (i) we will perform those transfers in accordance with the requirements of applicable law; and (ii) we will protect the transferred personal information in accordance with this privacy policy.
Your choice: By providing personal information to us, you understand we will collect, hold, use, and disclose your personal information in accordance with this privacy policy. You do not have to provide personal information to us, however, if you do not, it may affect your use of our website or the products and/or services offered on or through it.
Information from third parties: If we receive personal information about you from a third party, we will protect it as set out in this privacy policy. If you are a third party providing personal information about somebody else, you represent and warrant that you have such person’s consent to provide the personal information to us.
Marketing permission: If you have previously agreed to us using your personal information for direct marketing purposes, you may change your mind at any time by contacting us using the details below.
Access: You may request details of the personal information that we hold about you.
Correction: If you believe that any information we hold about you is inaccurate, out of date, incomplete, irrelevant, or misleading, please contact us using the details provided in this privacy policy. We will take reasonable steps to correct any information found to be inaccurate, incomplete, misleading, or out of date.
Non-discrimination: We will not discriminate against you for exercising any of your rights over your personal information. Unless your personal information is required to provide you with a particular service or offer (for example processing transaction data), we will not deny you goods or services and/or charge you different prices or rates for goods or services, including through granting discounts or other benefits, or imposing penalties, or provide you with a different level or quality of goods or services.
Downloading of Personal Information: We provide a means for you to download the personal information you have shared through our site. Please contact us for more information.
Notification of data breaches: We will comply with laws applicable to us in respect of any data breach.
Complaints: If you believe that we have breached a relevant data protection law and wish to make a complaint, please contact us using the details below and provide us with full details of the alleged breach. We will promptly investigate your complaint and respond to you, in writing, setting out the outcome of our investigation and the steps we will take to deal with your complaint. You also have the right to contact a regulatory body or data protection authority in relation to your complaint.
Unsubscribe: To unsubscribe from our email database or opt-out of communications (including marketing communications), please contact us using the details provided in this privacy policy, or opt-out using the opt-out facilities provided in the communication. We may need to request specific information from you to help us confirm your identity.
We use “cookies” to collect information about you and your activity across our site. A cookie is a small piece of data that our website stores on your computer, and accesses each time you visit, so we can understand how you use our site. This helps us serve you content based on preferences you have specified.
Please refer to our Cookie Policy for more information.
If we or our assets are acquired, or in the unlikely event that we go out of business or enter bankruptcy, we would include data, including your personal information, among the assets transferred to any parties who acquire us. You acknowledge that such transfers may occur, and that any parties who acquire us may, to the extent permitted by applicable law, continue to use your personal information according to this policy, which they will be required to assume as it is the basis for any ownership or use rights we have over such information.
Our website may link to external sites that are not operated by us. Please be aware that we have no control over the content and policies of those sites, and cannot accept responsibility or liability for their respective privacy practices.
At our discretion, we may change our privacy policy to reflect updates to our business processes, current acceptable practices, or legislative or regulatory changes. If we decide to change this privacy policy, we will post the changes here at the same link by which you are accessing this privacy policy.
If the changes are significant, or if required by applicable law, we will contact you (based on your selected preferences for communications from us) and all our registered users with the new details and links to the updated or changed policy.
If required by law, we will get your permission or give you the opportunity to opt in to or opt out of, as applicable, any new uses of your personal information.
Where the disclosure of your personal information is solely subject to Australian privacy laws, you acknowledge that some third parties may not be regulated by the Privacy Act and the Australian Privacy Principles in the Privacy Act. You acknowledge that if any such third party engages in any act or practice that contravenes the Australian Privacy Principles, it would not be accountable under the Privacy Act, and you will not be able to seek redress under the Privacy Act.
The GDPR distinguishes between organisations that process personal information for their own purposes (known as “data controllers”) and organizations that process personal information on behalf of other organizations (known as “data processors”). We, Fast Expo Collective LLC, located at the address provided in our Contact Us section, are a Data Controller with respect to the personal information you provide to us.
We will only collect and use your personal information when we have a legal right to do so. In which case, we will collect and use your personal information lawfully, fairly, and in a transparent manner. If we seek your consent to process your personal information, and you are under 16 years of age, we will seek your parent or legal guardian’s consent to process your personal information for that specific purpose.
Our lawful bases depend on the services you use and how you use them. This means we only collect and use your information on the following grounds:
Where you give us consent to collect and use your personal information for a specific purpose. You may withdraw your consent at any time using the facilities we provide; however this will not affect any use of your information that has already taken place. When you contact us, you may consent to your name and email address being used so we can respond to your enquiry. While you may request that we delete your contact details at any time, we cannot recall any email we have already sent. If you have any further enquiries about how to withdraw your consent, please feel free to enquire using the details provided in the Contact Us section of this privacy policy.
Where you have entered into a contract or transaction with us, or in order to take preparatory steps prior to our entering into a contract or transaction with you. For example, if you purchase a product, service, or subscription from us, we may need to use your personal and payment information in order to process and deliver your order.
Where we assess it is necessary for our legitimate interests, such as for us to provide, operate, improve and communicate our services. We consider our legitimate interests to include research and development, understanding our audience, marketing and promoting our services, measures taken to operate our services efficiently, marketing analysis, and measures taken to protect our legal rights and interests.
In some cases, we may have a legal obligation to use or keep your personal information. Such cases may include (but are not limited to) court orders, criminal investigations, government requests, and regulatory obligations. If you have any further enquiries about how we retain personal information in order to comply with the law, please feel free to enquire using the details provided in the Contact Us section of this privacy policy.
We will ensure that any transfer of personal information from countries in the European Economic Area (EEA) to countries outside the EEA will be protected by appropriate safeguards, for example by using standard data protection clauses approved by the European Commission, or the use of binding corporate rules or other legally accepted means.
Restrict: You have the right to request that we restrict the processing of your personal information if (i) you are concerned about the accuracy of your personal information; (ii) you believe your personal information has been unlawfully processed; (iii) you need us to maintain the personal information solely for the purpose of a legal claim; or (iv) we are in the process of considering your objection in relation to processing on the basis of legitimate interests.
Objecting to processing: You have the right to object to processing of your personal information that is based on our legitimate interests or public interest. If this is done, we must provide compelling legitimate grounds for the processing which overrides your interests, rights, and freedoms, in order to proceed with the processing of your personal information.
Data portability: You may have the right to request a copy of the personal information we hold about you. Where possible, we will provide this information in CSV format or other easily readable machine format. You may also have the right to request that we transfer this personal information to a third party.
Deletion: You may have a right to request that we delete the personal information we hold about you at any time, and we will take reasonable steps to delete your personal information from our current records. If you ask us to delete your personal information, we will let you know how the deletion affects your use of our website or products and services. There may be exceptions to this right for specific legal reasons which, if applicable, we will set out for you in response to your request. If you terminate or delete your account, we will delete your personal information within 30 days of the deletion of your account. Please be aware that search engines and similar third parties may still retain copies of your personal information that has been made public at least once, like certain profile information and public comments, even after you have deleted the information from our services or deactivated your account.
Under California Civil Code Section 1798.83, if you live in California and your business relationship with us is mainly for personal, family, or household purposes, you may ask us about the information we release to other organizations for their marketing purposes.
To make such a request, please contact us using the details provided in this privacy policy with “Request for California privacy information” in the subject line. You may make this type of request once every calendar year. We will email you a list of categories of personal information we revealed to other organisations for their marketing purposes in the last calendar year, along with their names and addresses. Not all personal information shared in this way is covered by Section 1798.83 of the California Civil Code.
Some browsers have a “Do Not Track” feature that lets you tell websites that you do not want to have your online activities tracked. At this time, we do not respond to browser “Do Not Track” signals.
We adhere to the standards outlined in this privacy policy, ensuring we collect and process personal information lawfully, fairly, transparently, and with legitimate, legal reasons for doing so.
At all times, you may decline cookies from our site if your browser permits. Most browsers allow you to activate settings on your browser to refuse the setting of all or some cookies. Accordingly, your ability to limit cookies is based only on your browser’s capabilities. Please refer to the Cookies section of this privacy policy for more information.
In accordance with your right to non-discrimination, we may offer you certain financial incentives permitted by the CCPA that can result in different prices, rates, or quality levels for the goods or services we provide.
Any CCPA-permitted financial incentive we offer will reasonably relate to the value of your personal information, and we will provide written terms that describe clearly the nature of such an offer. Participation in a financial incentive program requires your prior opt-in consent, which you may revoke at any time.
In the past 12 months, we have collected the following categories of personal information enumerated in the California Consumer Privacy Act:
For more information on information we collect, including the sources we receive information from, review the “Information We Collect” section. We collect and use these categories of personal information for the business purposes described in the “Collection and Use of Information” section, including to provide and manage our Service.
If you are a California resident, you have rights to delete your personal information we collected and know certain information about our data practices in the preceding 12 months. In particular, you have the right to request the following from us:
To exercise any of these rights, please contact us using the details provided in this privacy policy.
If you are a California resident, in addition to the rights discussed above, you have the right to request information from us regarding the manner in which we share certain personal information as defined by California’s “Shine the Light” with third parties and affiliates for their own direct marketing purposes.
To receive this information, send us a request using the contact details provided in this privacy policy. Requests must include “California Privacy Rights Request” in the first line of the description and include your name, street address, city, state, and ZIP code.
For any questions or concerns regarding your privacy, you may contact us using the following details:
Travis Collins
privacy@shieldbattery.net


Table Of Contents
Console¶
バージョン 1.9.1 で追加.
Reboot of the old inspector, designed to be modular and keep concerns separated. It also have a addons architecture that allow you to add a button, panel, or more in the Console itself.
警告
This module works, but might fail in some cases. Please contribute!
Additional informations¶
Some properties can be edited live. However, due to the delayed usage of some properties, it might crash if you don’t handle all the cases.
Addons¶
Addons must be added to Console.addons before the first Clock tick of the application, or before the create_console is called. You cannot add addons on the fly currently. Addons are quite cheap until the Console is activated. Panel are even cheaper, nothing is done until the user select it.
By default, we provide multiple addons activated by default:
- ConsoleAddonFps: display the FPS at the top-right
- ConsoleAddonSelect: activate the selection mode
- ConsoleAddonBreadcrumb: display the hierarchy of the current widget at the bottom
- ConsoleAddonWidgetTree: panel to display the widget tree of the application
- ConsoleAddonWidgetPanel: panel to display the properties of the selected widget
If you need to add custom widget in the Console, please use either
ConsoleButton
, ConsoleToggleButton
or ConsoleLabel
An addon must inherit from the ConsoleAddon
class.
For example, here is a simple addon for displaying the FPS at the top/right of the Console:
from kivy.modules.console import Console, ConsoleAddon
class ConsoleAddonFps(ConsoleAddon):
def init(self):
self.lbl = ConsoleLabel(text="0 Fps")
self.console.add_toolbar_widget(self.lbl, right=True)
def activate(self):
self.event = Clock.schedule_interval(self.update_fps, 1 / 2.)
def deactivated(self):
self.event.cancel()
def update_fps(self, *args):
fps = Clock.get_fps()
self.lbl.text = "{} Fps".format(int(fps))
Console.register_addon(ConsoleAddonFps)
You can create addon that adds panels. Panel activation/deactivation are not tied to the addon activation/deactivation, but on some cases, you can use the same callback for deactivating the addon and the panel. Here is a simple About panel addon:
from kivy.modules.console import Console, ConsoleAddon, ConsoleLabel
class ConsoleAddonAbout(ConsoleAddon):
def init(self):
self.console.add_panel("About", self.panel_activate,
self.panel_deactivate)
def panel_activate(self):
self.console.bind(widget=self.update_content)
self.update_content()
def panel_deactivate(self):
self.console.unbind(widget=self.update_content)
def deactivate(self):
self.panel_deactivate()
def update_content(self, *args):
widget = self.console.widget
if not widget:
return
text = "Selected widget is: {!r}".format(widget)
lbl = ConsoleLabel(text=text)
self.console.set_content(lbl)
Console.register_addon(ConsoleAddonAbout)
-
kivy.modules.console.
start
(win, ctx)[ソース]¶ Create an Console instance attached to the ctx and bound to the Window’s
on_keyboard()
event for capturing the keyboard shortcut.
-
class
kivy.modules.console.
Console
(**kwargs)[ソース]¶ ベースクラス:
kivy.uix.relativelayout.RelativeLayout
Console interface
This widget is created by create_console(), when the module is loaded. During that time, you can add addons on the console to extend the functionalities, or add your own application stats / debugging module.
-
activated
¶ True if the Console is activated (showed)
-
add_panel
(name, cb_activate, cb_deactivate, cb_refresh=None)[ソース]¶ Add a new panel in the Console.
- cb_activate is a callable that will be called when the panel is activated by the user.
- cb_deactivate is a callable that will be called when the panel is deactivated or when the console will hide.
- cb_refresh is an optional callable that is called if the user click again on the button for display the panel
When activated, it’s up to the panel to display a content in the Console by using
set_content()
.
-
add_toolbar_widget
(widget, right=False)[ソース]¶ Add a widget in the top left toolbar of the Console. Use right=True if you wanna add the widget at the right instead.
-
addons
= [<class 'kivy.modules.console.ConsoleAddonSelect'>, <class 'kivy.modules.console.ConsoleAddonFps'>, <class 'kivy.modules.console.ConsoleAddonWidgetPanel'>, <class 'kivy.modules.console.ConsoleAddonWidgetTree'>, <class 'kivy.modules.console.ConsoleAddonBreadcrumb'>]¶ Array of addons that will be created at Console creation
-
highlight_at
(x, y)[ソース]¶ Select a widget from a x/y window coordinate. This is mostly used internally when Select mode is activated
-
inspect_enabled
¶ Indicate if the inspector inspection is enabled. If yes, the next touch down will select a the widget under the touch
-
mode
¶ Display mode of the Console, either docked at the bottom, or as a floating window.
-
widget
¶ Current widget being selected
-
-
class
kivy.modules.console.
ConsoleAddon
(console)[ソース]¶ ベースクラス:
builtins.object
Base class for implementing addons
-
activate
()[ソース]¶ Method called when the addon is activated by the console (when the console is displayed)
-
console
= None¶ Console instance
-
-
class
kivy.modules.console.
ConsoleButton
(**kwargs)[ソース]¶ ベースクラス:
kivy.uix.button.Button
Button specialized for the Console
-
class
kivy.modules.console.
ConsoleToggleButton
(**kwargs)[ソース]¶ ベースクラス:
kivy.uix.togglebutton.ToggleButton
ToggleButton specialized for the Console
-
class
kivy.modules.console.
ConsoleLabel
(**kwargs)[ソース]¶ ベースクラス:
kivy.uix.label.Label
LabelButton specialized for the Console


Research Related
Upcoming Conferences
-
Eurodyn 2020, XI International Conference on Structural Dynamics
- Important Dates - October 30 Abstract submission Last Date
- Publication of Proceedings - No Information Provided
- Venue
List of Journals for Strucutral Engineers
SCI/SCIE
- Journal of Structural Engineering, ASCE
- Journal of Bridge Engineering, ASCE
- Journal of Computing in Civil Engineering, ASCE
- Engineering Structures, Elsevier
- Materials and Structures, Springer
- Engineering Computations, Emerald
- Structural Engieerning and Mechanics, Technopress
- Earthquakes and Structures, Technopress
- Computers and Concrete, Technopress
- ACI Structural Journal, ACI
- Structures, Elsevier
- Journal of Structural Concrete
- Advances in Structural Engineering
- Magazine of Concrete Research
- Reliability Engineering & System Safety
- Structures and Buildings, ICE
- Archives of Civil and Mechanical Enigneering, Elsevier
- Int. Journal of Concrete Structures and Materials, Springer
- Structure and Infrastructure Engineering, T&F
- Journal of Earthquake Engineering, T&F
- Bulletin of Earthquake Engineering, Springer
- Frontiers of Structural and Civil Engineering, Springer
- Journal of Structural Stability and dynamics, WorldScientific
- Advances in Engineering Software, Elsevier
- Sadhana, Springer
- Simulation Modelling Practice and Theory, Elsevier
- Archives of Computational Methods in Engineering, Springer
Scopus/ESCI
- International journal of structural engineering, Inder Science
- Journal of Structural Engineering, SERC Chennai
- Asian Journal of Civil Engineering
- HKIE Transactions
Guide to Write a Research Paper
n
Draft Process
This process is very much helpful in writing a research paper. I named this process a n-Draft process, because it involves writing different versions untill the research paper is acceptable for publication. The number of drafts required may vary from person to person (for some 5 drafts may be enough and for others may require 10). However, any person will require minimum 3 drafts, namely 0th Draft, 1st Draft and 2nd Draft. A breif description of each draft is as follows
-
0th Draft - The objective of this draft is to prepare the Initial Outline of the research paper and filling it with Intial Meat. Keep in mind that this is not a final but initial draft, The primary purpose of this draft is to Initiate the research paper. This stage is more like preparing the Skeleton, in the later stages we will add meat to the skeleton. By outline I mean, preparing the list of section and subsection headings. Once an Initial Outline is prepared then add Intial Meat to it, that is fill the sections and subsections with anything you want. Don't worry about appropriateness, justifications, citations etc. We will come to those in the later stages.
-
1st Draft - Once the 0th Draft is prepared then ask the question Why do you think this 0th Draft is not appropriate for submission?. I mean prepare of list of comments that makes the 0th Draft unworthy for submission. Overall the entire research paper wriitng can be summarised in to Prepare a 0th Draft → Get Comments → Address the comments → Revise the Draft → Get Comments →. Repeat the cycle untill the draft is submittable. Once you revise the 0th Draft after addressing all the comments you listed on the 0th Draft, name that revised draft as 1st Draft.
-
2nd Draft - Once again ask the question Why do you think this 1st Draft is not appropriate for submission? on the 1st Draft. Prepare a list of comments and revise the 1st Draft after addressing all the commnets, name that revised draft as 2nd Draft.
-
3rd Draft - Repeat the Revision Cycle untill the latest draft is acceptable for submission, i.e. Take your n^{th} Draft → Get Comments → Address the comments → Revise the Draft and name it as (n+1)^{th} Draft
When I ask the question Why do you think this 1st (or 2nd or 3rd) Draft is not appropriate for submission?, What I am really asking is, Does this draft met all the requirements mentioned in the publication checklists? The moment you know all the criteria mentioned in the publication checklist are checked, then you are ready to hit the submission button.


import com.sleepycat.db.*;public int id() throws DbException;
The DbTxn.id method returns the unique transaction id associated with the specified transaction. Locking calls made on behalf of this transaction should use the value returned from DbTxn.id as the locker parameter to the DbLockTab.get or DbLockTab.vec calls.