Package game.entities
Class Player
- java.lang.Object
-
- city.cs.engine.Body
-
- city.cs.engine.DynamicBody
-
- city.cs.engine.Walker
-
- game.entities.Player
-
public class Player extends city.cs.engine.Walker
The Player object is the main entity in the game, and the one used by the player in the game
-
-
Field Summary
Fields Modifier and Type Field Description static int
MAX_HEALTH
static int
MIN_HEALTH
-
Constructor Summary
Constructors Constructor Description Player(city.cs.engine.World world, javax.swing.JProgressBar healthProgressBar)
The Player constructor initialises some base values, as well as populating the array of possible images and setting the first one.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addChangeListener(javax.swing.event.ChangeListener l)
protected void
changed()
int
getDirectionIndex()
int
getHealth()
boolean
getInAir()
boolean
getMoving()
int
getScore()
void
playSound(java.lang.String fileName)
Plays a sound effect for it's full length if audio is toggled on.void
removeChangeListener(javax.swing.event.ChangeListener l)
void
setDirectionIndex(int directionIndex)
void
setHealth(int health, javax.swing.JProgressBar healthProgressBar)
void
setInAir(boolean inAir)
void
setMoving(boolean moving)
void
setScore(int score)
void
setVolume(int unmappedVolume)
Sets the volume of the sound effects.void
toggleAudio()
Toggles audio on and off.void
updateHealth(int deltaHealth)
Sets the player health to a new value whilst ensuring it does not go above the player's MAX_HEALTH.void
updateImage(int actionIndex)
Updates the image being displayed based on a new action.void
updateScore(int deltaScore)
Sets the players score to a new value based on the difference provided.-
Methods inherited from class city.cs.engine.DynamicBody
applyForce, applyForce, applyImpulse, applyImpulse, applyTorque, getGravityScale, isBullet, setAngularVelocity, setBullet, setGravityScale, setLinearVelocity
-
Methods inherited from class city.cs.engine.Body
addCollisionListener, addDestructionListener, addImage, contains, getAngle, getAngleDegrees, getAngularVelocity, getBodiesInContact, getFillColor, getFixtureList, getImages, getLinearVelocity, getLineColor, getMass, getName, getPosition, getWorld, intersects, intersects, isAlwaysOutline, isClipped, move, putOn, putOn, removeAllCollisionListeners, removeAllDestructionListeners, removeAllImages, removeAttachedImage, removeCollisionListener, removeDestructionListener, rotate, rotate, rotateDegrees, rotateDegrees, setAlwaysOutline, setAngle, setAngleDegrees, setClipped, setFillColor, setLineColor, setName, setPosition, toString
-
-
-
-
Field Detail
-
MIN_HEALTH
public static final int MIN_HEALTH
- See Also:
- Constant Field Values
-
MAX_HEALTH
public static final int MAX_HEALTH
- See Also:
- Constant Field Values
-
-
Constructor Detail
-
Player
public Player(city.cs.engine.World world, javax.swing.JProgressBar healthProgressBar)
The Player constructor initialises some base values, as well as populating the array of possible images and setting the first one.- Parameters:
world
- The current level.healthProgressBar
- The health bar.
-
-
Method Detail
-
getHealth
public int getHealth()
-
setHealth
public void setHealth(int health, javax.swing.JProgressBar healthProgressBar)
-
updateHealth
public void updateHealth(int deltaHealth)
Sets the player health to a new value whilst ensuring it does not go above the player's MAX_HEALTH.- Parameters:
deltaHealth
- The difference in health.
-
getScore
public int getScore()
-
setScore
public void setScore(int score)
-
updateScore
public void updateScore(int deltaScore)
Sets the players score to a new value based on the difference provided.- Parameters:
deltaScore
- The difference in score.
-
getInAir
public boolean getInAir()
-
setInAir
public void setInAir(boolean inAir)
-
getMoving
public boolean getMoving()
-
setMoving
public void setMoving(boolean moving)
-
getDirectionIndex
public int getDirectionIndex()
-
setDirectionIndex
public void setDirectionIndex(int directionIndex)
-
updateImage
public void updateImage(int actionIndex)
Updates the image being displayed based on a new action.- Parameters:
actionIndex
- The index of the action in the image array.
-
setVolume
public void setVolume(int unmappedVolume)
Sets the volume of the sound effects. It takes unmapped readings from 0 to 100 and converts them from 0.01 to 2.0 for the volume.- Parameters:
unmappedVolume
- The unmapped value from the slider before it is transformed into a value for the volume changer.
-
toggleAudio
public void toggleAudio()
Toggles audio on and off.
-
playSound
public void playSound(java.lang.String fileName)
Plays a sound effect for it's full length if audio is toggled on.- Parameters:
fileName
- The filepath for the audio sample.
-
addChangeListener
public void addChangeListener(javax.swing.event.ChangeListener l)
-
removeChangeListener
public void removeChangeListener(javax.swing.event.ChangeListener l)
-
changed
protected void changed()
-
-


"""Asynchronous Task Pool Base Class."""
import abc
import copy
import random
import asyncio
import inspect
import warnings
import concurrent
from typing import Optional, Dict, List, Any, Callable, Union, Tuple
from .task import Task
from .signal import WorkerCloseSignal
from .exception import UnknownTaskType
[docs]class AioTaskPoolABC(abc.ABC):
"""Asynchronous Task Pool Abstract Base Class.
this pool is used when you need to limit the max number of parallel tasks at one time.
It's a derivative of `Producer Consumer model`.
The pool instance will manage a number of consumer as worker.
You can scale the worker's number as you wish with the `scale` interface.
And you, as the Producer, can send your task with the `submit` interface.
If you want to close submit interface, you can use `pause` interface.
"""
@abc.abstractproperty
def paused(self) -> bool:
"""Check if user can submit tasks.
If the task pool can accept new tasks,the result is False; else it's True.
Returns:
bool: can submit or not.
"""
return NotImplemented
@abc.abstractproperty
def size(self) -> int:
"""Pool's size.
Returns:
int: Pool's size
"""
return NotImplemented
@abc.abstractproperty
def closed(self) -> bool:
"""Check if the pool is closed."""
return NotImplemented
@abc.abstractproperty
def waiting_tasks_number(self) -> int:
"""Now number of the waiting tasks.
Returns:
int: The number of the waiting tasks.
"""
return NotImplemented
@abc.abstractproperty
def max_tasks_number(self) -> int:
"""Maximum number of the waiting tasks.
Returns:
int: The maximum number of the waiting tasks.
"""
return NotImplemented
@abc.abstractmethod
async def __aenter__(self) -> "AioTaskPool":
"""Asynchronous Context Interface.
You can use `async with` syntax to manager the task pool.
This will call `start` interface in the beginning.
"""
await self.start()
return self
@abc.abstractmethod
async def __aexit__(self, exc_type, exc, tb) -> None:
"""Asynchronous Context Interface.
You can use `async with` syntax to manager the task pool.
This will call `close` interface in the end.
"""
await self.close()
[docs] @abc.abstractmethod
async def start(self) -> None:
"""Initialize workers and open the task pool to accept tasks."""
return NotImplemented
[docs] @abc.abstractmethod
def pause(self) -> bool:
"""Pause the task pool.
Returns:
bool: Check if The task pool is paused
"""
return NotImplemented
[docs] @abc.abstractmethod
async def close(self, close_worker_timeout: Union[int, float, None] = None, close_pool_timeout: int = 3, safe=True) -> None:
"""Close all workers and paused the task pool.
Args:
close_worker_timeout (Union[int, float, None], optional): Timeout for closing all workers. Defaults to None.
close_pool_timeout (int, optional): Timeout for join left tasks. Defaults to 3.
safe (bool, optional): when getting exceptions, raise it or warning it. Defaults to True.
Raises:
te: close workers timeout.
e: unknown error when closing workers.
te: waiting for left tasks done timeout
e: unknown error when waiting for left tasks done
"""
return NotImplemented
[docs] @abc.abstractmethod
async def scale(self, num: int) -> int:
"""Scale the number of the task pool's worker.
Args:
num (int): num to scale.positive will increase the worker,negative will decrease the worker.
Returns:
int: the number will scale to.
"""
return NotImplemented
[docs] @abc.abstractmethod
def scale_nowait(self, num: int, soft=True) -> int:
"""Scale the number of the task pool's worker without waiting.
Args:
num (int): num to scale.positive will increase the worker,negative will decrease the worker.
soft (bool, optional): if True, this interface will send Signal to task pool to close workers;
else number of random workers will be cancel. Defaults to True.
Returns:
int: the number will scale to.
"""
return NotImplemented
[docs] @abc.abstractmethod
async def submit(self, task_func: Callable[[Any], Any], *,
args: List[Any] = [],
kwargs: Dict[str, Any] = {},
blocking: bool = True) -> Union[asyncio.Future, Any]:
"""Submit task to the task pool.
Args:
task_func (Callable[[Any], Any]): The task function which will be called by the workers.
args (List[Any], optional): The positional parameters for the task function. Defaults to [].
kwargs (Dict[str, Any], optional): The keyword parameters for the task function. Defaults to {}.
blocking (bool, optional): set if waiting for the task's result. Defaults to True.
Raises:
NotAvailable: The task pool is paused
Returns:
Union[asyncio.Future, Any]: if blocking is True, submit will return the result of the task;
else it will return a future which you can await it to get the result.
"""
return NotImplemented
[docs] @abc.abstractmethod
def submit_nowait(self, task_func: Callable[[Any], Any], *,
args: List[Any] = [],
kwargs: Dict[str, Any] = {}) -> asyncio.Future:
"""Submit task to the task pool with no wait.
Args:
task_func (Callable[[Any], Any]): The task function which will be called by the workers.
args (List[Any], optional): The positional parameters for the task function. Defaults to [].
kwargs (Dict[str, Any], optional): The keyword parameters for the task function. Defaults to {}.
Raises:
NotAvailable: The task pool is paused or
e: other exception
NotAvailable: task pool is full, can not put task any more
Returns:
asyncio.Future: a future which you can await it to get the result.
"""
return NotImplemented


--- layout: post title: Create a bug progress report from a Sharepoint 2003 bug list date: '2010-08-04T21:06:00.022+02:00' author: Bart Jolling tags: - Sharepoint modified_time: '2012-02-23T09:43:27.763+01:00' blogger_id: tag:blogger.com,1999:blog-8436642170609457318.post-5252296642751447676 blogger_orig_url: https://bartjolling.blogspot.com/2010/08/create-bug-progress-report-from.html ---
Sharepoint 2003 includes a list template for bug tracking. It provides very basic functionality like keeping bug statuses, description, comments, dates, assignments etc. For every update that is made to a bug report, Sharepoint just adds a new item to the list. It doesn't however include a bug progress report.
In order to create such a report, I will create a new view on the bug report list in Sharepoint in order to expose the necessary information. In MS Access I will created a linked table that allows us to perform queries on the data to put it in the correct format for use in a pivot table. This pivot table and pivot chart will contain the bug progress report.
Sharepoint bug reports: progress detailsOn the sharepoint bug list, create a new view containing the following fields:
MS Access linked tables
In order to create a bug progress report, we need to build a list of status changes for each of the issues. I have created four queries for the different situations that can occur.
The "StatusSequenceHistory" query determines the sequence of Ids of bug reports for each Issue Id. For each change it collects what Id was changed (FromId) and which new Id was created (ToId)
SELECT fr.[Issue Id] AS IssueId, fr.Id AS FromId, fr.Status AS FromStatus, min(to.Id) AS ToId FROM [Bug Reports: Progress Details] AS fr LEFT JOIN [Bug Reports: Progress Details] AS [to] ON fr.[Issue Id]=to.[Issue Id] WHERE fr.Id < to.Id AND to.Current=False AND fr.Current=False GROUP BY fr.[Issue Id], fr.Id, fr.Status ORDER BY fr.[Issue Id], fr.id;
Not all status will have a ToId and a FromId. The "StatusSequenceNew" query selects bug reports that have just been created but do not have a history yet.
SELECT [Issue Id] AS IssueId, min(Id) AS ToId FROM [Bug Reports: Progress Details] GROUP BY [Issue Id] HAVING Count(Id) = 1;
The "StatusSequenceFirst" query selects the very first bug report that was created.
SELECT [Issue Id] AS IssueId, min(Id) AS ToId FROM [Bug Reports: Progress Details] WHERE Current=False GROUP BY [Issue Id];
The "StatusSequenceLast" query selects the final bug report that was created which in fact is the current version of the bug report
SELECT fr.[Issue Id] AS IssueId, max(fr.Id) AS FromId, to.Status AS ToStatus, to.Id AS ToId FROM [Bug Reports: Progress Details] AS fr LEFT JOIN [Bug Reports: Progress Details] AS [to] ON fr.[Issue Id]=to.[Issue Id] WHERE fr.Id > to.Id AND to.Current=True AND fr.Current=False GROUP BY fr.[Issue Id], to.id, to.Status ORDER BY fr.[Issue Id], to.id;
The StatusSequence query
This query joins the complete history together and adds the status for each change
( SELECT IssueId,FromId, FromStatus, ToId, det.Status as ToStatus FROM StatusSequenceHistory old LEFT JOIN [Bug Reports: Progress Details] det ON old.ToId = det.Id ) UNION ( SELECT IssueId,FromId, det.Status as FromStatus, ToId, ToStatus FROM StatusSequenceLast cur LEFT JOIN [Bug Reports: Progress Details] det ON cur.FromId = det.Id ) UNION ( SELECT IssueId, NULL as FromId, NULL as FromStatus, ToId, det.Status as ToStatus FROM StatusSequenceFirst fir LEFT JOIN [Bug Reports: Progress Details] det ON fir.ToId =det.Id ) UNION ( SELECT IssueId, NULL as FromId, NULL as FromStatus, ToId, det.Status as ToStatus FROM StatusSequenceNew new LEFT JOIN [Bug Reports: Progress Details] det ON new.ToId =det.Id );
The ProgressReport query
This query adds the number of status changes for each change and for each day
( SELECT Int(d.Modified) AS ModifiedDate, s.FromStatus AS Status, -1 * COUNT(s.FromStatus) AS Diff FROM StatusSequence s RIGHT JOIN [Bug Reports: Progress Details] d ON s.ToId = d.Id WHERE s.FromStatus <> '' GROUP BY Int(d.Modified), s.FromStatus ) UNION ( SELECT Int(d.Modified) AS ModifiedDate, s.ToStatus AS Status, 1 * COUNT(s.ToStatus) AS Diff FROM StatusSequence s LEFT JOIN [Bug Reports: Progress Details] d ON s.ToId = d.Id GROUP BY Int(d.Modified), s.ToStatus );Microsoft Excel: Bug progress report
In Excel you can now create a link to the MS Access database as an external source. Choose the PivotTable/PivotChart option when connecting. Put the Modified Date in the left column of the PivotTable, the Status in the upper row and the Issue Id as in the data fields. Configure the Ids in order to show as a running total


Floyd Mayweather finally retires from boxing
by Adu SarpeahFloyd Mayweather, the former undisputed welterweight champion of the world, has announced that he will not be boxing again.
His first retirement came in 2007 but he swiftly returned to the ring. He retired again in 2015 after beating Manny Pacquiao but came back two years later to fight Conner McGregor in a match in which Mayweather reportedly bagged $300 million.
But this time, Mayweather is more concerned about his health now and will rather concentrate on other businesses than fighting.
In an interview with Reuters, the 42-year-old disclosed that though has received many offers, boxing was too brutal for him now while citing recent demises of boxers.
“I’ve got calls to get back into the ring, but my health is my wealth. Boxing is a very, very brutal sport. In the last few years a lot of fighters have passed away inside that squared circle,” Mayweather told Reuters.


About Us
We are two students from CZU, who are passionate about Machine Learning and AI. That's why we try to relate all of our projects to those topic to learn about our favourite subject while doing those projects.
We are two students from CZU, who are passionate about Machine Learning and AI. That's why we try to relate all of our projects to those topic to learn about our favourite subject while doing those projects.


Get Involved NOW
Find out how you can get involved in St Andrews!
HeForShe is a solidarity campaign for the advancement of gender equality. It was initiated by the UN. Read a recent article about HeForShe in St Andrews in the Saint or visit their facebook page @HeForSheStAndrews to find out more.
Women in Work Women in Work is a St Andrews based society founded in 2014 with the aim of broadening womens' outlook on the job world.Read a recent article about in the Tab or visit their facebook page @womeninworksta to find out more.
Women for Women International is a nonprofit humanitarian organization that provides practical and moral support to women survivors of war. Visit their facebook page @StAndrewsWomenForWomenInternational to find out more.
Her Choice aims to raise funds for thousands of women who are unable to access abortion facilities and to raise awareness of their plight. Visit their facebook page @herchoicestandrews to find out more.
Women in Computer Science is a St Andrews based society representing women studying or interested in computer science. Visit their facebook page @standrewswomenincs to find out more.
Feminist Society is St Andrews based society with the aim of making feminist issues relevant and accessible for everyone. Read a recent article about the St Andrews Feminist Society in Owl Eyes Magazine or visit their facebook page @standrewsfeminists to find out more.


Mariana Dominguez: Project Lead
Adrian Hartley: Database Engineer
Jazmine McGinnis: Lead Web Developer
Nestor Cervantes: Web Developer
Katie Evanko-Douglas: ML Engineer
Dave Liu: Data Engineer
Noah Povis: Data Engineer
Evan Barton: UI Developer
Tom Bauer: UI Developer


?NEW
YORK
BOTANICAL
GARDEN
01447753
ANNOTATION
LABEL
Oenothera
rosea
L'Her
ex
Ait.
determined
by
p,h.
Raven
&
D.R.
Parnell
197
O
NEW
YORK
BOTANICAL
GARDEN
ACADEMY
OF
NATURAL
SCIENCES
OF
PHILADELPHIA
EXPLORATION
of
BERMUDA
2-
STEWARDSON
BROWN,
COLLECTOR
AIDED
BY
A
GRANT
FROM
THE
ESTHER
HERRMAN
RESEARCH
FUND
OF
THE
NEW
YORK
ACADEMY
OP
SCIENCES
*
1908
^
?UND
/
01447753
Legend -
Level of confidence that token is an accurately-transcribed word
extremely low
very low
low
undetermined
medium
high
very high


Enter a user's email
This User exists!
Date of Birth: {{selectedApplication.birth_month}}/{{selectedApplication.birth_day}}/{{selectedApplication.birth_year}}
User Found, but no application on file. Have them fill out this form.
No User Found with that email. If they do not have an account, have them fill out this form.


--- template: auth ---
You recently made a request to reset your Urban Engine account Password. Please click the link below to complete the process.
link
If you you did not make this change or you believe an unauthorized person has accessed your account, please contact<EMAIL_ADDRESS>- Urban Engine Team


|
(TA)
" "
|
|
Zhiyu (Zoe) Chen (TA)
"Hi! I’m Zhiyu, a first year graduate student of computer science. I’m very excited to be the TA for CS16 class this quarter. This class gives you deeper knowledge of computer science world and guides you to be a great programmer. I hope all of you will enjoy it. Outside the class I would be happy to share and discuss with you everything related to computer science studies, advice on programming, careers or research, etc. Feel free to contact me on Piazza"
|
|
Bryanna Phan (Tutor)
"Hi everyone, my name is Bryanna and I’m very excited to be a tutor this quarter! You’ll probably see me at Coders SB meetings, so ask me about our events if you’re looking to get more involved on campus whether it be through this club, SB Hacks or the other wide variety of options. This quarter I’d definitely like to focus on helping students to solidify their problem-solving skills and to not be daunted by the programming assignments (trust me, I know how that can feel). Outside of class, I really love traveling, dogs, ping pong/badminton (even tho I’m not great), and tea :-) Feel free to reach out with any questions you may have on Piazza."
|
|
(Tutor)
"
"
|
|
Barbara Korycki (Tutor)
"Hi, my name is Barbara but my friends call me Barbs, or the occasional Babs. I’m a third year CS major and have been tutoring since last winter. As an intro-level course, CS16 is interesting to tutor because of the diversity in the students’ backgrounds, course-goals, majors, interests, etc. So this quarter I would like to focus on individualizing my approach in guiding my mentees; help P/NP non-majors grasp the basic foundational concepts, advise those who feel lost/confused/inadequate in their place in engineering (we’ve all been there), and challenge students who are more experienced and would like to take the course material to a more in-depth level. I also just came back from a semester abroad in Copenhagen if you would like advice on studying abroad as an engineer!
Feel free to reach out whenever over Piazza :-)
"
|
|
Madhu Kannan (Tutor)
"Hi! My name is Madhu, and I’m so excited to see all of you this quarter! I’m a third year CS/English double major, and I tutored CS 8 last quarter. I am also the secretary for Engineering Student Council, the student group that plans events for CoE undergraduates. CS 16 was the first class I ever took at UCSB, and it was fundamental to helping me understand what programming was and how I was going to use it for the next four years of my time here. I hope that I can help all of you come to that understanding as well, and leave this class feeling confident about you and your skills. In my spare time, I love reading books and binge-watching TV shows with my friends. (Who doesn't?) If you ever need advice on anything - from class assignments, to planning your courses, or even just a sympathetic ear if you’re having a hard time - you can always reach me on Piazza. :)
"
|
|
Yossi Hertzberg (Tutor)
"Hi! My name is Joseph, but everyone has always called me by my nickname, Yossi. I am a third year CS major and I am very excited to be one of your tutors for CS16. I worked as a tutor in high school as well, and I loved finding ways to make some of the same topics that I struggled with in a class less confusing for the next generation. I took CS16 during my freshman year here, so I hope to be able to help in this same way. I actually started at UCSB as a Mechanical Engineering major but found (eventually) that CS was much better for me, so I can help with many questions regarding major switching, especially into the CS department. Also, I love helping people see how to approach problems algorithmically in a way that a computer can understand, as this knowledge will help in all CS classes, and in any programming language. Outside of school, I love surfing, mountain biking, and playing with my two dogs.
Please do not hesitate to reach out to me with any questions on Piazza.
"
|
|
(Tutor)
""
|
|
(Tutor)
"
"
|
|
(Tutor)
""
|
|
(Tutor)
". "
|


Mamma Maggie's Soul Pizza
Hand-crafted pizzas at an affordable price.
What size pizza would you like?
Small - $12
Medium - $15
Large - $17
Please select your toppings. All toppings are $1 each.
Onions
Mushrooms
Pepperoni
Sausage
Add pizza to order
Your pizzas:
Add another pizza
Place your order!


Defending with Content Security Policy (CSP) frame-ancestors directive
The frame-ancestors directive can be used in a Content-Security-Policy HTTP response header to indicate whether or not a browser should be allowed to render a page in a <frame> or <iframe>. Sites can use this to avoid Clickjacking attacks by ensuring that their content is not embedded into other sites.
frame-ancestors allows a site to authorize multiple domains using the normal Content Security Policy semantics.
Content-Security-Policy: frame-ancestors Examples
Common uses of CSP frame-ancestors:
- Content-Security-Policy: frame-ancestors 'none';
- This prevents any domain from framing the content. This setting is recommended unless a specific need has been identified for framing.
- Content-Security-Policy: frame-ancestors 'self';
- This only allows the current site to frame the content.
- Content-Security-Policy: frame-ancestors 'self' '\*.somesite.com' 'https://myfriend.site.com';
- This allows the current site, as well as any page on somesite.com (using any protocol), and only the page myfriend.site.com, using HTTPS only on the default port (443).
Note that the single quotes are required.
See the following documentation for further details and more complex examples:
https://w3c.github.io/webappsec-csp/document/#directive-frame-ancestors
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors
Limitations
Browser support: CSP frame-ancestors is not supported by all the major browsers yet.
X-Frame-Options takes priority: Section "Relation to X-Frame-Options" of the CSP Spec says: "If a resource is delivered with an policy that includes a directive named frame-ancestors and whose disposition is "enforce", then the X-Frame-Options header MUST be ignored", but Chrome 40 & Firefox 35 ignore the frame-ancestors directive and follow the X-Frame-Options header instead.


--- layout: default title: Page Not Found ---
Oops! We couldn't find the page you were looking for.
Go home


Code Coverage |
|||||||||
Lines |
Functions and Methods |
Classes and Traits |
|||||||
| Total | |
98.88% |
177 / 179 |
|
97.22% |
70 / 72 |
|
95.65% |
22 / 23 |
| Contracts | n/a |
0 / 0 |
n/a |
0 / 0 |
n/a |
0 / 0 |
|||
| Models | |
100.00% |
10 / 10 |
|
100.00% |
10 / 10 |
|
100.00% |
4 / 4 |
| Repositories | |
92.59% |
25 / 27 |
|
88.24% |
15 / 17 |
|
83.33% |
5 / 6 |
| ServiceProviders | |
100.00% |
27 / 27 |
|
100.00% |
18 / 18 |
|
100.00% |
9 / 9 |
| Services | |
100.00% |
115 / 115 |
|
100.00% |
27 / 27 |
|
100.00% |
4 / 4 |


Henry Ossawa Tanner
First African American painter with international acclaim
- Henry Ossawa Tanner was born June 21st, 1859 in Pittsburgh, Pennsylvania as the first of nine children
- He decided to become a painter at the age of 13.
- In 1879, he started as the only African American pupil at the Pennsylvania Academy of the Fine Arts.
- For years, he wasn't accepted in the painting world nor in the photography world. He finally became a drawing teacher for a short time before traveling to Paris.
- He met and studied with many artists that he maintained friendships with.
- Throughout his developing career, he painted marine scenes, but eventually shifted his focus to religious themes.
- In 1896, he painted The Ressurection of Lazzarus, which solidified his position in the international art world.
- Following, he had a successful art career in Europe and the United States, finally living his life out in Paris with his wife.


class Guarantee
Constants
| PROBE_ABSENT |
|
| PROBE_MISCONFIGURED |
|
| PROBE_OK |
|
Methods
| __construct(APIClient $client) | ||
| probeExchange(Exchange $exchange) | ||
| ensureExchange(Exchange $exchange) | ||
| probeQueue(Queue $queue) | ||
| ensureQueue(Queue $queue) | ||
| probeBinding($vhost, $exchange, $queue, $routing_key, array $arguments = array()) | ||
| ensureBinding($vhost, $exchange, $queue, $routing_key = '', array $arguments = array()) |


RED CORNER (R)
Directed by Jon Avnet Running Time: 119 minutes Originally Released: October 31, 1997
Reviewed by E. Benjamin Kelsey
* * (out of four)
Richard Gere's outspoken disapproval for Red China is the main motivation behind RED CORNER, but making a bad movie to portray "bad" government is a bad idea all around. Regardless of personal political convictions, it can be assured that this film has potential to be marked "cruel and unusual punishment" by many. If you're lucky, you'll have a choice between this film and a good caning. I'm still split on that one.
Gere plays American businessman Jack Moore, the man responsible for handling the overseas syndication of American television. In Beijing on a business trip, Jack finds it hard to sell the Chinese media officials on western entertainment, especially when the officials view such programming as "pornographic, violent, and superstitious". Unable to convince them otherwise, Jack spends the evening letting loose at a fashion show where he hooks up with an artistic model and takes her back to his hotel room.
What develops (or under-develops) is a "one-man stands alone" routine as Jack finds himself without help from the American Embassy or the assigned defense attorney, who also happens to be convinced of her client's guilt. The attorney is Shen Yuelin, played by the only commendable actor/actress in the film, Bai Ling. Shen refuses to allow a guilty plea, explaining to Jack, who refuses to comply with the plea, that there is "severity for those resist, leniency for those who confess". This has become a tag line for the film, but trust me, when it comes to seeing this film, resist, resist, resist!
In time, Jack begins to plant doubts in Shen's mind, and eventually, she repeals the guilty plea and begins helping Jack search for evidence to prove his innocence. All they know is the victim is the daughter of an influential general, and whether this has anything to do with the case is hidden in ambiguity (hmmmm, I wonder!), but the more they seem to discover, the more thugs emerge from the shadows to "quiet" them. It's not a suspenseful film as much as it strives to be. In fact, it's quite on the boring side. Gere has always struck me as a very plain actor, and this film is just a showcase of all that is mundane in film-making. He's just too unaffected by all the events taking place around him, whether they be in his favor or not. We never even get to know Jack before he's thrown into a jail cell and put on trial, so our interest in his welfare is never achieved. As stated, Ling is the only thing about this film that doesn't deserve a full-blown thumbs down.
It's hard to say much about RED CORNER when it's such a bland production. Courtroom dramas usually have a bit of depth to them as discoveries are made and the clock ticks down. In RED CORNER, some crucial bits of information are discovered, but the ending is sickeningly convenient and disappointing. Regardless of events occurring in the first 115 minutes, the end result, founded on sheer luck, would've been the same. That means all the developments we sit through are there for nothing more than filling time. "You will be shot in a week, and the cost of the bullet will be billed to your family," Yuelin tells Jack at one point. Hey, I'll do ya one better: "You will be forced to watch RED CORNER, and the cost of the ticket will be billed to your family".
Ouch that's cruel!
January 02, 1998
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


II.3 Land Development Financing
Financing – Land Development (II.3.)
Land acquisitions require
equity (and some debt).
- The land for development is usually funded by equity capital.
- Sometimes debt capital is used to acquire the property
Construction requires accruing debt for hard costs, equity contributions for soft costs.
- Some or all direct construction costs (aka hard costs) can be funded with an interest accruing construction loan
from a commercial bank.
- Indirect construction costs aka soft costs) are usually funded with equity capital.
Land sales require a “release price” to remove the building ready land parcels from the construction
mortgage.
- Finished building lots that are being sold to a building developers must be “released” from the construction
mortgage lien.
- This release requires a payment to the construction lender that exceeds the pro-rata share of the finished
building lot’s value in the entire encumbered property.
- The construction lender’s intent is have the loan paid off before all of the lots are sold.
- This effectively delays the land developer’s cash proceeds until the last lots are sold.
Performance or completion bonds are required.
- These bonds assure the bond holder (the lender) that the bonding company will funds provided need to complete
the development in the event the contractor defaults during construction.
Fiduciary bonds.
- These bond provide a financial guaranty to the municipality in the event that the improvements fail after
construction .
This is a “beat the clock” game. Can the building lots be sold before the construction mortgage comes due?
- The land developer must be ready to start construction as soon as the land is acquired so that the improvements
can be constructed and the building lots are sold prior to the end of the construction loan term.
- Otherwise, the construction loans must be extended or paid off.
Determine the financing of subsequent phases.
- A large land development usually is built in phases.
- Consequently, the land developer must determine a way to ‘bank” the subsequent phases while the current phase is
under construction.
- Delayed closing provision in the original sale s agreement.
- Option to purchase the future phases when they are ready for development.
- Equity investors.
- Land contracts.
A good example of the financing of a land development for a warehouse industrial office part would be: http://dankohlhepp.com/uploads/3/0/6/8/3068213/war._1985_t.l._james.pdf


--- date: 2010-02-28T00:00:00Z published: true title: Notes from a production MongoDB deployment « Boxed Ice Blog url: /2010/02/28/notes-from-a-production-mongodb-deployment-boxed-ice-blog/ ---
Back in July last year I wrote about our migration from MySQL to MongoDB. We have been running MongoDB in production for our server monitoring service, Server Density, since then – 8 months – and have learnt quite a few things about it. These are the kind of things that you only experience once you reach a certain level of usage and it is surprising how few issues we’ve had. Where a problem or bug has cropped up, it has been quickly resolved/fixed by the MongoDB dev team; so we’re very happy.


| find_rshcmd {parallelly} | R Documentation |
Search for SSH clients on the current system
find_rshcmd(which = NULL, first = FALSE, must_work = TRUE)
which |
A character vector specifying which types of SSH clients to search for. If NULL, a default set of clients supported by the current platform is searched for. |
first |
If TRUE, the first client found is returned, otherwise all located clients are returned. |
must_work |
If TRUE and no clients was found, then an error is produced, otherwise only a warning. |
A named list of pathnames to all located SSH clients.
If first = TRUE
, only the first one is returned.
Attribute version
contains the output from querying the
executable for its version (via command-line option -V
).


Hello and welcome to the St.George's Business Club website. In this club, the main goal is to provide opportunities for students to utilize their business skills. We will provide opportunities to compete in business competitions. In addition, we will have guest speakers coming in to teach these students on how to win these competitions. To find out more, please go our 'About' page. If you have any questions, please to do not hesitate to contact any of us!! (Contact information can be found in the 'Our Team' page)
Hello and welcome to the St.George's Business Club website. In this club, the main goal is to provide opportunities for students to utilize their business skills. We will provide opportunities to compete in business competitions. In addition, we will have guest speakers coming in to teach these students on how to win these competitions. To find out more, please go our 'About' page. If you have any questions, please to do not hesitate to contact any of us!! (Contact information can be found in the 'Our Team' page)
Hello and welcome to the St.George's Business Club website. In this club, the main goal is to provide opportunities for students to utilize their business skills. We will provide opportunities to compete in business competitions. In addition, we will have guest speakers coming in to teach these students on how to win these competitions. To find out more, please go our 'About' page. If you have any questions, please to do not hesitate to contact any of us!! (Contact information can be found in the 'Our Team' page)


Total Allocated Amount: {{tmanualhdrallocatedamount }} | Total Unallocated Amount: {{tmanualhdrunallocatedamount }}
Total Allocated Amount: {{tmanualhdrallocatedamount}} | Total Unallocated Amount:{{tmanualhdrunallocatedamount}}
Total Allocated Amount:{{Policiesallocatedamount}}


Review action to pause patient
- Action
- {{ data['pnl-action'] or 'Pause letters and notifications' }}
- Pause start date
- {{ data['pnl-action'] or '19-Aug-2021' }}
- CRM Case Number
- {{ data['crm'] or 'CAS-12345-ABCDE' }}
- Change CRM
- Comments
- {{ data['comments'] or 'Result has come in with errors, waiting for lab to send new result.' }}
- Change Comments
Submit
Exit without saving


SweetFreeStuff.com
///////////////////////////////////////////
Free 12oz Cup of Krispy Kreme House, Decaf or Dark Roast Coffee on 9/29
Posted: 23 Sep 2014 11:35 AM PDT
http://feedproxy.google.com/&edburner&utm_medium=email
Free 12oz Cup of Krispy Kreme House, Decaf or Dark Roast Coffee on 9/29 to
celebrate National Coffee Day.
The post Free 12oz Cup of Krispy Kreme House, Decaf or Dark Roast Coffee on
9/29 appeared first on SweetFreeStuff.com.
///////////////////////////////////////////
Free Medium Dark Roast Coffee at Dunkin Donuts on 9/29
Posted: 23 Sep 2014 11:28 AM PDT
http://feedproxy.google.com/&edburner&utm_medium=email
Free medium Dark Roast coffee at Dunkin Donuts to celebrate National Coffee
Day on September 29.
The post Free Medium Dark Roast Coffee at Dunkin’ Donuts on 9/29 appeared
first on SweetFreeStuff.com.
///////////////////////////////////////////
Free Subscription to Cosmopolitan
Posted: 23 Sep 2014 03:30 AM PDT
http://feedproxy.google.com/&edburner&utm_medium=email
Free Subscription to Cosmopolitan
The post Free Subscription to Cosmopolitan appeared first on
SweetFreeStuff.com.
///////////////////////////////////////////
Free No Longer a Slumdog Book
Posted: 23 Sep 2014 02:20 AM PDT
http://feedproxy.google.com/&edburner&utm_medium=email
Free No Longer a Slumdog Book
The post Free No Longer a Slumdog Book appeared first on SweetFreeStuff.com.
///////////////////////////////////////////
Free Sample Bag of Lindt Excellence Chocolate
Posted: 23 Sep 2014 02:17 AM PDT
http://feedproxy.google.com/&edburner&utm_medium=email
Free Sample Bag of Lindt Excellence Chocolate
The post Free Sample Bag of Lindt Excellence Chocolate appeared first on
SweetFreeStuff.com.
///////////////////////////////////////////
Free Bakery Delights at Thorntons
Posted: 23 Sep 2014 01:27 AM PDT
http://feedproxy.google.com/&edburner&utm_medium=email
Download the Thorntons mobile app to redeem a coupon good for free bakery
delights. Good through 9/29 View Locations.
The post Free Bakery Delights at Thorntons appeared first on
SweetFreeStuff.com.
///////////////////////////////////////////
Free Samples from PINCHme
Posted: 22 Sep 2014 11:00 PM PDT
http://feedproxy.google.com/&edburner&utm_medium=email
*Offering samples for men only today 7/21 There are new samples available
at PINCHme! Log in or sign up for an account to see which new free product
samples you can request.
The post Free Samples from PINCHme appeared first on SweetFreeStuff.com.
///////////////////////////////////////////
Free Ovaltine Sample
Posted: 22 Sep 2014 02:19 PM PDT
http://feedproxy.google.com/&edburner&utm_medium=email
Answer a couple questions to see if you qualify for a free sample. Free
Ovaltine Sample
The post Free Ovaltine Sample appeared first on SweetFreeStuff.com.
///////////////////////////////////////////
Free SK-II Facial Treatment Essense Sample
Posted: 22 Sep 2014 01:22 AM PDT
http://feedproxy.google.com/&edburner&utm_medium=email
Free SK-II Facial Treatment Essense Sample
The post Free SK-II Facial Treatment Essense Sample appeared first on
SweetFreeStuff.com.


Captain America
Manager
Manager
- ID: 1
- Email<EMAIL_ADDRESS>- Office Number: 616
Iron Man
Engineer
Engineer
- ID: 2
- Email<EMAIL_ADDRESS>- GitHub Link: tony-ironman
Iron Heart
Engineer
Engineer
- ID: 3
- Email<EMAIL_ADDRESS>- GitHub Link: riri-ironheart
Spider-Man
Intern
Intern
- ID: 4
- Email<EMAIL_ADDRESS>- School Name: Midtown School of Science and Technology
Spider-Woman
Intern
Intern
- ID: 5
- Email<EMAIL_ADDRESS>- School Name: S.H.I.E.L.D
Miles Morales Spider-Man
Intern
Intern
- ID: 6
- Email<EMAIL_ADDRESS>- School Name: Brooklyn Visions Academy


--- layout: post title: Linux configuration for MySQL date: type: post published: false status: draft categories: - MySQL tags: - Linux meta: _edit_last: '2' author: login: admin email<EMAIL_ADDRESS>display_name: admin first_name: '' last_name: '' ---
For some time now I'm trying to create a standard setup procedure for setting up Linux machines, dedicated or almost dedicated to MySQL. I am a long time Linux user, but not a sys-admin and by no means a Linux expert. During the MySQL trainings I'm encouraging experienced sys-admins to speak up their mind; still, I can't make out a clear setup process.
I would like this post to sum up the top important Linux settings (not MySQL configuration): the ones you do the moment you unpack the machine and plug it in. I'll throw away a couple of settings; your advice is very much appreciated.
To have some sort of order, let's define a common machine and database requirements:
Here are a couple of steps I make on new machines:
Some points I wish to discuss:
A recent post on mysql performance blog has suggested changing the scheduling algorithm. How about it?
Would you favor RedHat (or RedHat based, like CentOS) distributions over Debian? I've had good experience with Ubuntu Server, but have heard a lot of criticism. What's you experience? Other flavors?
What file system would you use for MySQL? ext3 (slow on large files, considered rock solid)? XFS (fast, has some nasty bug-features behavior after crash)? Other file systems, preferably maintained by people not murdering their wives?
Important configuration not mentioned here?
Your comments are highly appreciated!


Settings
Game State
Dropbox
Use winnable deals when available
save to browser
load saved games from file
delete saved games from browser
connect to Dropbox
cloud_upload
save to Dropbox
cloud_download
load from Dropbox
apps


DSL datetime/timezone functions¶
Dates/times are not a separate data type; Miller uses ints for seconds since the epoch and strings for formatted date/times. In this page we take a look at what some of the various options are for processing datetimes and timezones in your data.
See also the section on time-related functions for information auto-generated from Miller's online-help strings.
Epoch seconds¶
Seconds since the epoch, or Unix Time, is seconds (positive, zero, or negative) since midnight January 1 1970 UTC. This representation has several advantages, and is quite common in the computing world.
Since this is a number in Miller -- 64-bit signed integer or double-precision floating-point -- it can represent dates billions of years into the past or future without worry of overflow. (There is no year-2038 problem here.) Being numbers, epoch-seconds are easy to store in databases, communicate over networks in binary format, etc. Another benefit of epoch-seconds is that they're independent of timezone or daylight-savings time.
One minus is that, being just numbers, they're not particularly human-readable -- hence the to-string and from-string functions described below. Another caveat (not really a minus) is that epoch milliseconds, rather than epoch seconds, are common in some contexts, particularly JavaScript. If you ever (anywhere) see a timestamp for the year 49,000-something -- probably someone is treating epoch-milliseconds as epoch-seconds.
mlr -n put 'end { print sec2gmt(1500000000); print sec2gmt(1500000000000); }'
2017-07-14T02:40:00Z 49503-02-10T02:40:00Z
You can get the current system time, as epoch-seconds, using the systime DSL function:
mlr --c2p --from example.csv put '$t = systime()'
color shape flag k index quantity rate t yellow triangle true 1 11 43.6498 9.8870<PHONE_NUMBER>.045347 red square true 2 15 79.2778 0.0130<PHONE_NUMBER>.045385 red circle true 3 16 13.8103 2.9010<PHONE_NUMBER>.045386 red square false 4 48 77.5542 7.4670<PHONE_NUMBER>.045393 purple triangle false 5 51 81.2290 8.5910<PHONE_NUMBER>.045394 red square false 6 64 77.1991 9.5310<PHONE_NUMBER>.045417 purple triangle false 7 65 80.1405 5.8240<PHONE_NUMBER>.045418 yellow circle true 8 73 63.9785 4.2370<PHONE_NUMBER>.045419 yellow circle true 9 87 63.5058 8.3350<PHONE_NUMBER>.045421 purple square false 10 91 72.3735 8.2430<PHONE_NUMBER>.045422
The systimeint DSL function
is nothing more than a keystroke-saver for int(systime())
.
UTC times with standard format¶
One way to make epoch-seconds human-readable, while maintaining some of their benefits such as being independent of timezone and daylight savings, is to use the ISO8601 format. This was the first (and initially only) human-readable date/time format supported by Miller going all the way back to Miller 1.0.0.
You can get these from epoch-seconds using the sec2gmt DSL function. (Note that the terms UTC and GMT are used interchangeably in Miller.) We also have sec2gmtdate DSL function.
mlr -n put 'end { print sec2gmt(0); print sec2gmt(1234567890.123); print sec2gmt(-1234567890.123); print; print sec2gmtdate(0); print sec2gmtdate(1234567890.123); print sec2gmtdate(-1234567890.123); }'
1970-01-01T00:00:00Z 2009-02-13T23:31:30Z 1930-11-18T00:28:29Z 1970-01-01 2009-02-13 1930-11-18
Local times with standard format; specifying timezones¶
You can use similar formatting for dates in your preferred timezone, not just UTC/GMT. We have the sec2localtime, sec2localdate, and localtime2sec DSL functions.
You can specify the timezone using any of the following:
- An environment variable, e.g.
export TZ=Asia/Istanbul
at your system prompt (set TZ=Asia/Istanbul
in Windows). - Using the
--tz
flag. This sets theTZ
environment variable, but only internally to themlr
process. - Within a DSL expression, you can assign to
ENV["TZ"]
. - By supplying an additional argument to any of the functions with
local
in their names.
Regardless, if you specify an invalid timezone, you'll be clearly notified:
mlr --from example.csv --tz This/Is/A/Typo cat
mlr : unknown time zone This/Is/A/Typo
export TZ=Asia/Istanbul mlr -n put 'end { print sec2localtime(0) }'
1970-01-01 02:00:00
mlr --tz America/Sao_Paulo -n put 'end { print sec2localtime(0) }'
1969-12-31 21:00:00
mlr -n put 'end { ENV["TZ"] = "Asia/Istanbul"; print sec2localtime(0); print sec2localdate(0); print localtime2sec("2000-01-02 03:04:05"); print; ENV["TZ"] = "America/Sao_Paulo"; print sec2localtime(0); print sec2localdate(0); print localtime2sec("2000-01-02 03:04:05"); }'
1970-01-01 02:00:00 1970-01-01 946775045 1969-12-31 21:00:00 1969-12-31 946789445
mlr -n put 'end { print sec2localtime(0, 0, "Asia/Istanbul"); print sec2localdate(0, "Asia/Istanbul"); print localtime2sec("2000-01-02 03:04:05", "Asia/Istanbul"); print; print sec2localtime(0, 0, "America/Sao_Paulo"); print sec2localdate(0, "America/Sao_Paulo"); print localtime2sec("2000-01-02 03:04:05", "America/Sao_Paulo"); }'
1970-01-01 02:00:00 1970-01-01 946775045 1969-12-31 21:00:00 1969-12-31 946789445
Note that for local times, Miller omits the T
and the Z
you see in GMT times.
We also have the gmt2localtime and localtime2gmt convenience functions:
mlr -n put 'end { ENV["TZ"] = "Asia/Istanbul"; print gmt2localtime("1970-01-01T00:00:00Z"); print localtime2gmt("1970-01-01 00:00:00"); }'
1970-01-01 02:00:00 1969-12-31T22:00:00Z
mlr -n put 'end { print gmt2localtime("1970-01-01T00:00:00Z", "America/Sao_Paulo"); print gmt2localtime("1970-01-01T00:00:00Z", "Asia/Istanbul"); print localtime2gmt("1970-01-01 00:00:00", "America/Sao_Paulo"); print localtime2gmt("1970-01-01 00:00:00", "Asia/Istanbul"); }'
1969-12-31 21:00:00 1970-01-01 02:00:00 1970-01-01T03:00:00Z 1969-12-31T22:00:00Z
Custom formats: strptime and strftime¶
The to-string and from-string functions we've seen so far are low-keystroking: with a little bit of typing you can convert datetimes to/from epoch seconds. The minus, however, is flexibility. This is where the strftime and strptime functions come into play.
Notes:
- The names
strftime
andstrptime
far predate Miller; they were chosen for familiarity. Thef
is for format: from epoch-seconds to human-readable string. Thep
is for parse: for doing the reverse. - Even though Miller is written in Go as of Miller 6, it still largely preserves C-like
strftime
andstrptime
semantics. As noted below, not all format strings used by the C library are recognized. - For
strftime
, this is thanks to https://github.com/lestrrat-go/strftime, with a Miller-specific modification for fractional seconds. - For
strftime
, this is thanks to https://github.com/pbnjay/strptime, with Miller-specific modifications.
Available format strings for strftime
, taken directly from https://github.com/lestrrat-go/strftime:
| Pattern | Description |
|---|---|
%A |
national representation of the full weekday name |
%a |
national representation of the abbreviated weekday |
%B |
national representation of the full month name |
%b |
national representation of the abbreviated month name |
%C |
(year / 100) as decimal number; single digits are preceded by a zero |
%c |
national representation of time and date |
%D |
equivalent to %m/%d/%y |
%d |
day of the month as a decimal number (01-31) |
%e |
the day of the month as a decimal number (1-31); single digits are preceded by a blank |
%F |
equivalent to %Y-%m-%d |
%H |
the hour (24-hour clock) as a decimal number (00-23) |
%h |
same as %b |
%I |
the hour (12-hour clock) as a decimal number (01-12) |
%j |
the day of the year as a decimal number (001-366) |
%k |
the hour (24-hour clock) as a decimal number (0-23); single digits are preceded by a blank |
%l |
the hour (12-hour clock) as a decimal number (1-12); single digits are preceded by a blank |
%M |
the minute as a decimal number (00-59) |
%m |
the month as a decimal number (01-12) |
%n |
a newline |
%p |
national representation of either "ante meridiem" (a.m.) or "post meridiem" (p.m.) as appropriate. |
%R |
equivalent to %H:%M |
%r |
equivalent to %I:%M:%S %p |
%S |
the second as a decimal number (00-60) |
%1S , ..., %9S |
the second as a decimal number (00-60) with 1..9 decimal places, respectively |
%T |
equivalent to %H:%M:%S |
%t |
a tab |
%U |
the week number of the year (Sunday as the first day of the week) as a decimal number (00-53) |
%u |
the weekday (Monday as the first day of the week) as a decimal number (1-7) |
%V |
the week number of the year (Monday as the first day of the week) as a decimal number (01-53) |
%v |
equivalent to %e-%b-%Y |
%W |
the week number of the year (Monday as the first day of the week) as a decimal number (00-53) |
%w |
the weekday (Sunday as the first day of the week) as a decimal number (0-6) |
%X |
national representation of the time |
%x |
national representation of the date |
%Y |
the year with century as a decimal number |
%y |
the year without century as a decimal number (00-99) |
%Z |
the time zone name |
%z |
the time zone offset from UTC |
%% |
a % |
Available format strings for strptime
:
| Pattern | Description |
|---|---|
%% |
A literal '%' character. |
%b |
Month as locale’s abbreviated name. |
%B |
Month as locale’s full name. |
%d |
Day of the month as a zero-padded decimal number. |
%f |
Microsecond as a decimal number, zero-padded on the left. |
%H |
Hour (24-hour clock) as a zero-padded decimal number. |
%I |
Hour (12-hour clock) as a zero-padded decimal number. |
%j |
Three-digit day of year, like 004 or 363. |
%m |
Month as a zero-padded decimal number. |
%M |
Minute as a zero-padded decimal number. |
%p |
Locale’s equivalent of either AM or PM. |
%S |
Second as a zero-padded decimal number. |
%y |
Year without century as a zero-padded decimal number. |
%Y |
Year with century as a decimal number. |
%z |
UTC offset in the form +HHMM or -HHMM. |
%Z |
Time zone name. UTC, EST, CST -- only if you're in that timezone. |
Examples:
mlr -n put 'end { print strftime(0, "%Y-%m-%dT%H:%M:%SZ"); print strftime(0, "%FT%TZ"); }'
1970-01-01T00:00:00Z 1970-01-01T00:00:00Z
mlr -n put 'end { ENV["TZ"] = "Asia/Istanbul"; print strftime(0, "%Y-%m-%d %H:%M:%S"); print strftime(0, "%Y-%m-%d %H:%M:%S %Z"); print strftime(0, "%Y-%m-%d %H:%M:%S %z"); print strftime(0, "%A, %B %e, %Y"); print strftime(123456789, "%I:%M %p"); }'
1970-01-01 00:00:00 1970-01-01 00:00:00 UTC 1970-01-01 00:00:00 +0000 Thursday, January 1, 1970 09:33 PM
Unfortunately, names from %A
and %B
are only available in English, as an artifact of a design
choice in the Go time
library which Miller (and its strftime
/ strptime
supporting packages as
noted above) rely on.
A note on timezones¶
A note on timezones for strptime
:
- Three-letter timezone names such as
CST
are recognized only if you're in them. (UTC
is an exception.) This is because these aren't globally unique:CST
can stand forCentral Standard Time
,_Cuba Standard Time
,_China Standard Time
, etc. - Timezone specifiers which are globally unique are of the form
-0400
and+0500
. - Specifiers like
-04:30
,UTC-8
, andAsia/Istanbul
were not supported in Miller 5 (which used the Cstrptime
library), and are likewise not supported in Miller 6. See however theTZ
environment-variable examples below. - If you wish to match a final
Z
in the input, use a finalZ
in the format string. For example (see ISO8601) you can match the timestamp1970-01-01T00:00:00Z
using the format string%FT%TZ
.
Fractional seconds¶
For historical reasons, Miller's strftime
and strptime
use different format specifications for fractional seconds. Examples:
mlr -n put 'end { print strftime(123456.789, "%Y-%m-%d %H:%M:%S"); print strftime(123456.789, "%Y-%m-%d %H:%M:%1S"); print strftime(123456.789, "%Y-%m-%d %H:%M:%3S"); print strftime(123456.789, "%Y-%m-%d %H:%M:%6S"); print strptime("1970-01-02 10:17:36.789000", "%Y-%m-%d %H:%M:%S"); print strptime("1970-01-02 10:17:36.789000", "%Y-%m-%d %H:%M:%S.%f"); }'
1970-01-02 10:17:36 1970-01-02 10:17:36.7 1970-01-02 10:17:36.789 1970-01-02 10:17:36.789000 (error) 123456.789
strptime_local and strftime_local¶
We also have strftimelocal and strptimelocal:
mlr -n put 'end { ENV["TZ"] = "America/Anchorage"; print strftime_local(0, "%Y-%m-%d %H:%M:%S %Z"); print strftime_local(0, "%Y-%m-%d %H:%M:%S %z"); print strftime_local(0, "%A, %B %e, %Y"); print strptime_local("2020-03-01 00:00:00", "%Y-%m-%d %H:%M:%S"); print; ENV["TZ"] = "Asia/Hong_Kong"; print strftime_local(0, "%Y-%m-%d %H:%M:%S %Z"); print strftime_local(0, "%Y-%m-%d %H:%M:%S %z"); print strftime_local(0, "%A, %B %e, %Y"); print strptime_local("2020-03-01 00:00:00", "%Y-%m-%d %H:%M:%S"); }'
1969-12-31 14:00:00 AHST 1969-12-31 14:00:00 -1000 Wednesday, December 31, 1969<PHONE_NUMBER> 1970-01-01 08:00:00 HKT 1970-01-01 08:00:00 +0800 Thursday, January 1, 1970<PHONE_NUMBER>
mlr -n put 'end { print strftime_local(0, "%Y-%m-%d %H:%M:%S %Z", "America/Anchorage"); print strftime_local(0, "%Y-%m-%d %H:%M:%S %z", "America/Anchorage"); print strftime_local(0, "%A, %B %e, %Y", "America/Anchorage"); print strptime_local("2020-03-01 00:00:00", "%Y-%m-%d %H:%M:%S", "America/Anchorage"); print; print strftime_local(0, "%Y-%m-%d %H:%M:%S %Z", "Asia/Hong_Kong"); print strftime_local(0, "%Y-%m-%d %H:%M:%S %z", "Asia/Hong_Kong"); print strftime_local(0, "%A, %B %e, %Y", "Asia/Hong_Kong"); print strptime_local("2020-03-01 00:00:00", "%Y-%m-%d %H:%M:%S", "Asia/Hong_Kong"); }'
1969-12-31 14:00:00 AHST 1969-12-31 14:00:00 -1000 Wednesday, December 31, 1969<PHONE_NUMBER> 1970-01-01 08:00:00 HKT 1970-01-01 08:00:00 +0800 Thursday, January 1, 1970<PHONE_NUMBER>
Relative times¶
You can get the seconds since the Miller process start using uptime:
mlr --c2p --from example.csv put '$u=uptime()'
color shape flag k index quantity rate u yellow triangle true 1 11 43.6498 9.8870 0.0011110305786132812 red square true 2 15 79.2778 0.0130 0.0011241436004638672 red circle true 3 16 13.8103 2.9010 0.0011250972747802734 red square false 4 48 77.5542 7.4670 0.0011301040649414062 purple triangle false 5 51 81.2290 8.5910 0.0011301040649414062 red square false 6 64 77.1991 9.5310 0.002481222152709961 purple triangle false 7 65 80.1405 5.8240 0.0024831295013427734 yellow circle true 8 73 63.9785 4.2370 0.0024831295013427734 yellow circle true 9 87 63.5058 8.3350 0.0024852752685546875 purple square false 10 91 72.3735 8.2430 0.002485990524291992
Time-differences can be done in seconds, of course; you can also use the following if you like:
mlr -F | grep hms
dhms2fsec (class=time #args=1) Recovers floating-point seconds as in dhms2fsec("5d18h53m20.250000s") =<PHONE_NUMBER>00 dhms2sec (class=time #args=1) Recovers integer seconds as in dhms2sec("5d18h53m20s") = 500000 fsec2dhms (class=time #args=1) Formats floating-point seconds as in fsec2dhms(500000.25) = "5d18h53m20.250000s" fsec2hms (class=time #args=1) Formats floating-point seconds as in fsec2hms(5000.25) = "01:23:20.250000" hms2fsec (class=time #args=1) Recovers floating-point seconds as in hms2fsec("01:23:20.250000") = 5000.250000 hms2sec (class=time #args=1) Recovers integer seconds as in hms2sec("01:23:20") = 5000 sec2dhms (class=time #args=1) Formats integer seconds as in sec2dhms(500000) = "5d18h53m20s" sec2hms (class=time #args=1) Formats integer seconds as in sec2hms(5000) = "01:23:20"
References¶
- Non-Miller-specific list of formatting characters for
strftime
andstrptime
: https://devhints.io/strftime - List of valid timezone names: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones


This project is a repository for my curriculum vitae. It is based on the example presented by Ethan White, and inspired in part by the post Ten reasons you should put altmetrics on your CV right now on the ImpactStory website. Obviously, although inspired by others, this CV contains my own publications and information.
In part it is an attempt to integrate dynamic links directly into my CV, and to provide a central location for the document. Previously I created (semi)monthly updates to my CV in Microsoft Word. Here I maintain version control and can directly update the CV and output it to a PDF or Word format though PanDoc.
Note that the formatting still leaves something to be desired (as far as I'm concerned), maybe some CSS will help, but for now this may fall a little bit out of date.


vignettes/calculating-time-on-task.Rmd
calculating-time-on-task.Rmd
The learning analytics practitioner will often find it useful to have at their disposal a measure of how much time a student or other participant in a pedagogical process has spent interacting with an activity, course or another specific area. While millisecond precision measurements are unlikely absent the context of a controlled experimental design, we can probably convince ourselves that we can estimate time-on-task or dwelltime, by analyzing log-data, even if these data were created for a different purpose.
One way of estimating dwelltime \(\hat{d}\) is:
\[ \hat{d} = \sum_{i=1}^{|X|} \begin{cases} x_i-x_{i-1},& \text{if } x_i-x_{i-1}\text{ }\leq \theta\\ 0, & \text{otherwise} \end{cases} \]
Where:
When users interact with Moodle they need to log in or otherwise start a session. While they are actively browsing the site they will create log-entries, however, we cannot guarantee that they log out –in fact our experience tells us that they do not. We therefore need to determine how to deal with the last click, and the path of least resistance is to discard this particular observation. Other options include imputing the data-point from the researchers favorite measure of central tendency.
Let’s start by loading the moodleR
package:
We will also be depending on dplyr verbs so:
my_log <- mdl_log()
colnames(my_log)
#> [1] "id" "eventname" "component"
#> [4] "action" "target" "objecttable"
#> [7] "objectid" "crud" "edulevel"
#> [10] "contextid" "contextlevel" "contextinstanceid"
#> [13] "userid" "courseid" "relateduserid"
#> [16] "anonymous" "other" "timecreated"
#> [19] "origin" "ip" "realuserid"
We see that we have a ’timecreatedcolumn and
userid` which can use to estimate dwelltime.
First let’s get a random user:
my_user_id <- mdl_log() %>%
head(1000L) %>%
slice_sample(n = 1) %>%
pull(userid)
And implement with dplyr verbs:
Thus far we have implemented the algorithm without a \(\theta\). This will very likely yield distorted values because it includes differences that span several sessions and time intervals which can be years. Let’s take a look at the distribution to ascertain a reasonable value for our \(theta\). For this we will use the ggplot2 package.
library(ggplot2)
density_plot <-
dwelltime_estimate %>%
ggplot(aes(dwelltime)) +
geom_density()+
scale_x_log10(labels = scales::label_number_si())
density_plot
We see a flattening occurring around 1000. Perhaps we can round this to 1200 (which corresponds to 20 minutes) for good measure:
density_plot +
geom_vline(xintercept = 1200, lty=2, color="blue")+
annotate(geom = 'text', x = 300, y = .4,
label = "theta == 1200",
parse = TRUE, color = 'blue',cex=5)
So,
my_theta <- 1200
dwelltime_estimate %>%
filter(dwelltime <=my_theta) %>%
summarize(total_dwelltime = sum(dwelltime, na.rm = TRUE))
#> # Source: lazy query [?? x 1]
#> # Database: sqlite 3.33.0 [/home/sasha/chi2/moodleR/mdl_cache/mdl_cache.sqlite]
#> total_dwelltime
#> <int>
#> 1 27079
And human readable:
dwelltime_estimate %>%
filter(dwelltime <=my_theta) %>%
summarize(total_dwelltime = sum(dwelltime, na.rm = TRUE)) %>%
pull(total_dwelltime) %>%
prettyunits::pretty_sec(compact = TRUE)
#> [1] "~7h"
It may be of use for the learning analytics researcher to now how the dwelltime is distributed over time. This can be accomplished by converting the timecreated
column to a date-object using the anytime package.
dwelltime_estimate <- dwelltime_estimate %>%
filter(dwelltime <= my_theta) %>%
collect() %>% # Since we're using non-dplyr verbs we need to collect
mutate(date = anytime::anydate(.data$timecreated)) %>%
group_by(date) %>%
summarize(
dwelltime = sum(dwelltime, na.rm = TRUE)
)
dwelltime_estimate %>%
ggplot(aes(x = date, y = dwelltime)) +
geom_line()+
scale_y_continuous(labels = prettyunits::pretty_sec, breaks = 1800*1:10)
Alternatively we can summarize by week using e.g. lubridate:
dwelltime_estimate %>%
mutate(Week = lubridate::week(date)) %>%
group_by(Week) %>%
summarize(
dwelltime = sum(dwelltime, na.rm = TRUE)
) %>%
ggplot(aes(x = Week, y = dwelltime))+
geom_line() +
scale_y_continuous(labels = prettyunits::pretty_sec, breaks = c(1800*1:15))+
scale_x_continuous( breaks = seq(0,53, by=5) )


Python Decorators are Just Wrappers
2020-05-06
2 minutes
Python decorators are just wrappers… that return functions
Part of my issue with understanding how decorators work was that I was treating them as a function/class that is returning a variable. I should have been thinking of them as a function/class returning a modified (i.e. decorated) function/class. As mentioned succinctly here, “Decorators are a form of metaprogramming; they enhance the action of the function or method they decorate.” So a decorator is just a wrapper of the function that you want to modify (that returns a function).
So if we want to decorate the function func
with the function decor
then the
sequence of evaluation would be modified_func = decor(func)(func_args)
.

Casually wrapping a function in another function may not be sufficient. To
Illustrate this I’ve created a function to_decorate
(a function that returns
its input divided by 2) that I want to decorate.
def to_decorate(x):
return(x/2)
to_decorate(2)
The not_decorator
function below does not act as a decorator even though it is
a wrapper for to_decorate
. The not_decorator
function is modifying the
result of to_decorate
instead of modifying the to_decorate
function itself.
We have to actually evaluate the function that is the argument to
not_decorator
. Because we have to evaluate it, the function that is the
argument to not_decorator
must also take in an argument. The result is that
this function ends up returning a variable rather than a function/class.
# modifying the output of func so func has to be evaluated not modified
def not_decorator(func):
return(abs(func))
The code below will error out since the to_decorate
function is looking for an
argument.
not_decorated = not_decorator(to_decorate)
Passing an argument will allow it to run, but it’s still not a decorator since it’s returning a variable instead of a function.
not_decorated = not_decorator(to_decorate(2))
print(not_decorated)
Let’s define the function decorator
which takes a function as an input,
evaluates the absolute value of the result of the function (the modification), a
returns a function as opposed to the result.
We have to wrap the modification in the inner
wrapper otherwise we won’t be
able to return a function/class. This was the issue with not_decorator()
above.
…
What about modifying a function with multiple decorators?
…
What about passing arguments to decorators?
…
381 Words


We build projects to provide learning environments, deployment and operational best practices, performance benchmarks, create documentation, share networking opportunities, and more. Our shared commitment to the open source spirit pushes Layer5 projects forward.
New members are always welcome.
Layer5 projects are open source software. Anyone can download, use, work on, and share it with others. It's built on principles like collaboration, globalism, and innovation. Layer5 projects are distributed under the terms of Apache v2.


Sensitivity slider allows you to set the top speed of the mouse cursor. Leftmost position is the slowest, rightmost the fastest. Please note, that this setting doesn't change the sensitivity curve visualization (the view is normalized to the sensitivity).
Dead-zone slider specifies percentage of the full movement range (up to 50%) that is ignored and doesn't cause any cursor movement. It allows for neck muscle relaxation as it doesn't require you to hold your head exactly centered to hold the cursor steady.
Curvature slider is used to modify the feel of the tracker; when moved to the right off the center position, the tracking is more precise around the center; when moved to the left, the speed rises more abruptly allowing for faster, yet less precise cursor control.
Step only check-box disables the Curvature slider and causes the cursor either stand still (when inside the dead-zone) or running the full speed in the direction of head movement.
Apply changes button allows you to check the new settings; when the result is unsatisfactory, either click the Revert changes button or wait for the timeout to get back to the previous state. If you like the settings, make sure you click the Keep button!
Calibrate button commences the calibration process. The first stage is the re-centering - center your sight and wait for the timeout; the calibration itself is started next - before the time is up, move your head to the left/right/top/bottom extremes. It allows the software to optimize the tracking to the range of motion of your head.
Recenter button allows only to center the view without going through the full blown calibration.


Spec
AlignmentGraphAlignment graph type.
Alignment graph type.
| Extends | Graph |
|---|---|
| All Extended | Graph |
| All Impl'd | AssignableConcept, ContainerConcept, DestructibleConcept |
| Defined in | <seqan/graph_align.h> |
| Signature |
template <typename TStringSet[, typename TCargo[, typename TSpec]]>
class Graph<Alignment<TStringSet, TCargo, TSpec> >;
|
Template Parameters
TStringSet |
The type of the StringSet containing the sequence information. Must be a DependentStringSet. |
|---|---|
TCargo |
The cargo type that can be attached to edges. Default: unsigned. |
TSpec |
The specializing type. Default: Default. Use WithoutEdgeId here to omit edge ids. NB: if edges do not store ids then external property maps do not work. |
Interface Function Overview
-
void assignStringSet(g, stringSet);
Assigns a new StringSet to an AlignmentGraph. -
bool convertAlignment(g, component, order, compLength);, bool convertAlignment(g, matrix);
Converts an alignment graph into an alignment matrix. -
TVertexDescriptor findVertex(ag, id, pos);
Finds a vertx given a sequence id and a position. -
TPos fragmentBegin(ag, v);
Gets the begin position for this vertex descriptor in the sequence. -
TSize fragmentLength(ag, v);
Gets the length of the fragment for this vertex descriptor in the sequence. -
void getDistanceMtarix(graph, mat[, tag]);, void getDistanceMtarix(graph, mat[, kTup][, alphabet], KmerDistance);
Computes a pairwise distance matrix from an AlignmentGraph. -
TPos getFirstCoveredPosition(ag, id);
Finds the first position in a sequence that is not assigned to a nil vertex. -
TPos getLastCoveredPosition(ag, id);
Finds the last position in a sequence that is not assigned to a nil vertex. -
getProjectedPosition(ag, seqId, pos, seqId2, pos2);
Projects a position of one sequence taking part in a pairwise match onto the other sequence. -
THost getStringSet(g);
Gets the StringSet of an AlignmentGraph. -
TInfix label(ag, v);
Get the label associated with this vertex descriptor or the sequence that is associated with a fragment. -
TId sequenceId(ag, v);
Gets the sequence id that is associated with this vertex descriptor or with a sequence of a fragment. -
THostRef stringSet(g);
Return reference to the StringSet of an AlignmentGraph.
Interface Functions Inherited From Graph
addEdge
addEdges
addVertex
assignEdgeMap
assignVertexMap
clear
clearEdges
clearVertices
degree
empty
findEdge
getAdjacencyMatrix
getNil
inDegree
numEdges
numVertices
outDegree
removeEdge
removeInEdges
removeOutEdges
removeVertex
resizeEdgeMap
resizeVertexMap
sourceVertex
targetVertex
transpose
write
Interface Functions Inherited From AssignableConcept
Interface Functions Inherited From ContainerConcept
Interface Metafunction Overview
Interface Metafunctions Inherited From Graph
Interface Metafunctions Inherited From ContainerConcept
Detailed Description
Example
#include <iostream> #include <seqan/basic.h> #include <seqan/stream.h> #include <seqan/align.h> #include <seqan/graph_align.h> using namespace seqan; int main() { typedef StringSet<DnaString, Dependent<> > TStringSet; typedef Graph<Alignment<TStringSet, void> > TAlignmentGraph; // Define scorings scheme. // // In this case, affine gap costs with match = 0, mismatch = -1, // gapextend = -1 and gapopen = -2. Score<int> scoringScheme(0, -1, -1, -2); // Define the two sequence to be allocated. DnaString seq1 = "atcgaatgcgga"; DnaString seq2 = "actcgttgca"; // Create StringSet with these two sequences and construct an // AlignmentGraph for them. TStringSet stringSet; appendValue(stringSet, seq1); appendValue(stringSet, seq2); TAlignmentGraph alignmentGraph(stringSet); // Compute global alignment of seq1 and seq1 using Gotoh's algorithm and // print score and alignment graph. int score = globalAlignment(alignmentGraph, scoringScheme, Gotoh()); std::cout << "Score = " << score << "\n" << alignmentGraph << std::endl; return 0; }
Score = -8 Alignment matrix: 0 . : ATCGAATGCGGA | ||| | ACTCGTTGC--A
Interface Functions Detail
void assignStringSet(g, stringSet);
Assigns a new StringSet to an AlignmentGraph.
Parameters
g
|
An AlignmentGraph. |
|---|---|
stringSet
|
The StringSet to assign to. |
Data Races
Thread safety unknown!
See Also
bool convertAlignment(g, component, order, compLength);
bool convertAlignment(g, matrix);
Converts an alignment graph into an alignment matrix.
Parameters
g
|
AlignmentGraph to convert. An alignment graph. |
|---|---|
component
|
Vertex to component mapping. |
order
|
The order of the component graph when sorting topologically. |
compLength
|
Component sizes. |
matrix
|
A string that represents an alignment matrix. |
Returns
bool |
true iff the alignment graph is a valid alignment and false otherwise. |
|---|
Remarks
The variant with component and order computes a topological sorting of connected components.
Data Races
Thread safety unknown!
TVertexDescriptor findVertex(ag, id, pos);
Finds a vertx given a sequence id and a position.
Parameters
ag
|
The AlignmentGraph to search in. |
|---|---|
id
|
The sequence id to search for. |
pos
|
The position to search for. |
Returns
TVertexDescriptor |
The vertex covering the given position on the specified sequence, getNil<TVertexDescriptor>() if none could be found. |
|---|
Data Races
Thread safety unknown!
TPos fragmentBegin(ag, v);
Gets the begin position for this vertex descriptor in the sequence.
Parameters
ag
|
The AlignmentGraph to query. |
|---|---|
v
|
The vertex descriptor of the vertex. |
Returns
TPos |
The begin position. |
|---|
Data Races
Thread safety unknown!
TSize fragmentLength(ag, v);
Gets the length of the fragment for this vertex descriptor in the sequence.
Parameters
ag
|
The AlignmentGraph to query. |
|---|---|
v
|
The vertex descriptor of the vertex. |
Returns
TPos |
The fragment size. |
|---|
Data Races
Thread safety unknown!
void getDistanceMtarix(graph, mat[, tag]);
void getDistanceMtarix(graph, mat[, kTup][, alphabet], KmerDistance);
Computes a pairwise distance matrix from an AlignmentGraph.
Parameters
graph
|
An AlignmentGraph containing the sequences and possible alignment edges. |
|---|---|
mat
|
Pairwise distance matrix. |
kTup
|
For KMerDistance, the length of the k-mers. |
alphabet
|
For KMerDistance, the alphabet to use for k-mer counting (e.g. compressed alphabets). |
tag
|
See DistanceCalculationTags. Default: KMerDistance. |
Data Races
Thread safety unknown!
TPos getFirstCoveredPosition(ag, id);
Finds the first position in a sequence that is not assigned to a nil vertex.
Parameters
ag
|
An AlignmentGraph. |
|---|---|
id
|
A sequence id. |
Returns
TPos |
A sequence position. |
|---|
Data Races
Thread safety unknown!
See Also
TPos getLastCoveredPosition(ag, id);
Finds the last position in a sequence that is not assigned to a nil vertex.
Parameters
ag
|
An AlignmentGraph. |
|---|---|
id
|
A sequence id. |
Returns
TPos |
A sequence position. |
|---|
Data Races
Thread safety unknown!
See Also
getProjectedPosition(ag, seqId, pos, seqId2, pos2);
Projects a position of one sequence taking part in a pairwise match onto the other sequence.
Parameters
ag
|
The AlignmentGraph to query. |
|---|---|
seqId
|
The sequenceId. |
pos
|
The position to project from. |
seqId2
|
The resulting id of the sequence that was projected onto. |
pos2
|
The reuslting position of the sequence was was projected onto. |
Data Races
Thread safety unknown!
THost getStringSet(g);
Gets the StringSet of an AlignmentGraph.
Parameters
g
|
An AlignmentGraph. |
|---|
Returns
THost |
A const reference to the StringSet's host. |
|---|
Data Races
Thread safety unknown!
See Also
TInfix label(ag, v);
Get the label associated with this vertex descriptor or the sequence that is associated with a fragment.
Parameters
ag
|
The AlignmentGraph to query. |
|---|---|
v
|
The vertex descriptor to query. |
Returns
TInfix |
An infix representing the sequence label. |
|---|
Data Races
Thread safety unknown!
TId sequenceId(ag, v);
Gets the sequence id that is associated with this vertex descriptor or with a sequence of a fragment.
Parameters
ag
|
The AlignmentGraph. |
|---|---|
v
|
Vertex descriptor of the vertex to retrieve sequence id for. |
Returns
TId |
The sequence id. |
|---|
Data Races
Thread safety unknown!
THostRef stringSet(g);
Return reference to the StringSet of an AlignmentGraph.
Parameters
g
|
An AlignmentGraph. |
|---|
Returns
THost |
A reference to the StringSet's host. |
|---|
Data Races
Thread safety unknown!


@(form: Form[(String,String)])(implicit flash: Flash)
@error.message
@message
Login
Try guillaume@@sample.com with secret as password.


I've been involved in creating software for over two decades. Most of the time I have gotten it wrong, sometimes I've gotten it right. As I get older it feels like I am getting it right more often. I find nothing more fulfilling than being involved in creating something that has a real impact on other people's lives.
I love sharing the insights I have gained from these experiences with others - I do this by speaking at events, writing and facilitating workshops.
Over the years I have had an opportunity to speak to a range of audiences - from a handful of people to hundreds. Some of these sessions have been recorded and can be viewed on my YouTube channel.
I have found that speaking on things I have personal experience with leads to deeper insights for both myself and those in attendance.
If you are involved in software development at a team level I recommend my talk "Insights gained from Team Tourism" to help spark new ideas you can try with your team.
For audiences that may be experiencing frustration with continously changing requirements or high defect rates I recommend "Understanding intrinsic attributes of software development".
For the purely developer based audiences "The Four Rules of Simple Design and related Code Design Insights" always goes down well.
Of course, if you have a specific topic or theme in mind - I'm happy to design a session that better fits your needs - contact me to find out more.
Read my latest writings on my active blog
If you would like a walk down memory lane, my pre 2013 thoughts can be found on GeeksWithBlogs.
Reviews on the books I have read can be found on my book review site.
I offer the following 1 days workshops.
'Legacy Code - Digitally Remastered' - a deep dive into patterns & practices for effective refactoring of C# code using ReSharper.
I offer the following 2 days workshops.
'Code Craft' - writing clean, testable and expressive object oriented code.
'Understanding Graph Databases using Neo4j' - An introduction to graph databases for intermediate & senior software developers.
Public workshops are offered on demand and happen when enough people sign up. If you are interested in attending, let me know and I will add you to the pool.
I also facilitate on site company workshops.
I currently reside in Auckland, New Zealand - you can contact me via the details below...


Shanaya Kapoor’s Short Dress Has An Elegant Fur Detailing That Makes It The Perfect Pick For Christmas Parties
20 Nov 2019, 05:36 by Garema Khurana
Shanaya Kapoor is very Bollywood ready! Her dad Sanjay Kapoor and bestie Ananya Panday have hinted at it on various occasions and if pictures could speak these ones will tell you that the stunner is one tiny step away from being signed up by a popular director. Check out her gorgeous pictures from the store launch of Shane & Falguni Peacock.
Shanaya Kapoor looks like a star, correction, superstar, in that slinky shimmery short dress (Image Source:- Viral Bhayani)
Shanaya Kapoor attended the store launch of Shane & Falguni Peacock in Kala Ghoda, Mumbai (Image Source:- Viral Bhayani)
Shanaya Kapoor dazzles like a thousand diamonds in that animal-print number with a glittery twist (Image Source:- Viral Bhayani)
There’s a classy and understated fur detailing on her dress that makes it our top pick for Christmas parties in town (Image Source:- Viral Bhayani)
Shanaya Kapoor seen here with her mother, both a fan of animal-print fashion, it seems (Image Source:- Viral Bhayani)
Maheep Kapoor sports red trousers, the colour pops out, instantly uplifting her look (Image Source:- Viral Bhayani)
Shanaya left her hair loose and sported absolutely no accessories, letting her dress stand out (Image Source:- Viral Bhayani)