Try out our Premium Member services: Virtual Legal Assistant, Query Alert Service and an ad-free experience. Free for one month and pay only if you like it.
IN THE HIGH COURT OF KERALA AT ERNAKULAM Crl.Rev.Pet.No. 331 of 2001() 1. P.JAYARAM ... Petitioner Vs 1. STATE OF KERALA ... Respondent For Petitioner :SRI.T.V.PRABHAKARAN For Respondent :SRI.N.N.SUGUNAPALAN,SC,POLUTION C.BOARD The Hon'ble MR. Justice THOMAS P.JOSEPH Dated :29/09/2008 O R D E R THOMAS P.JOSEPH, J. = = = = = = = = = = = = = = = = = = = = = = = = CRL.R.P. No. 331 of 2001 = = = = = = = = = = = = = == = = = = = = = = = = = Dated this the 29th day of September, 2008 O R D E R
--------------
Heard.
2. Perused records.
3. Respondent, Kerala State Pollution Control Board, initiated prosecution against the revision petitioner and others by filing complaint in the court of the Judicial First Class Magistrate, Kolencherry for offences punishable under Sections 43, 44, 47 read with 49 of the Water (Prevention and Control of Pollution) Act, 1974 (for short, "the Act") alleging that the revision petitioner and others discharged effluents which did not conform to the standards laid down by the respondent which amounted to violation of Sections 24, 25 and 26 of the Act and that the discharge of the polluted effluent by the revision petitioner and others through unauthorised outlet violated Sections 25 and 26 of the Act. Petitioner filed Crl.M.P. No.3405 of 2000 claiming that he is an employee of the Government of India and therefore entitled to the protection of Section 197 of the Code of Criminal Procedure (hereinafter referred to as 'the CRL. R.P. NO.331 OF 2001 -: 2 :- Code'). Since the respondent has not obtained the sanction, prosecution against him is not sustainable. Petitioner also contended that since the occupier of the premises is made an accused, it is not necessary to array its employees also as accused. He requested the trial court to drop all further proceedings. That petition was opposed by the respondent contending that the first accused in the case, M/s. F.A.C.T. Ltd., is only a Company in which the Government of India holds more than 51% shares and that is is not a Government Undertaking and hence its employees are not entitled to the protection under Section 197 of the Code. The further contention that since the occupier has been made accused, its employees need not be arrayed as accused is factually and legally incorrect. The learned Magistrate after hearing both sides rejected the contentions raised by the petitioner an dismissed the petition (Crl.M.P No.3405 of 2000). The legality, regularity and propriety of that order is under challenge.
4. First accused, M/s.FACT Ltd. is only a Company in which Government of India holds more than 51% shares. It is not a Government Undertaking. It is true that the revision petitioner is an employee of the Government of India but, the offence is said to have been committed in relation to his employment in the first accused (M/s. FACT Ltd.) He was concededly on deputation. At the relevant time he was not in the service of the Government of India but was in CRL. R.P. NO.331 OF 2001 -: 3 :- the service of the first accused and his salary was being paid by the first accused. In such situation, sanction under Section 197 of the Code is not required for prosecution. This is authoritatively held in Mohd. Hadi Raja v. State of Bihar (1998 SCC (Cri.) 1265 and Sharma v. Abhimanyu (2005 (4) KLT 738 (SC). Therefore, the objection that prosecution without obtaining sanction is not sustainable, lacks merit and substance.
5. There is no merit in the further contention that because the occupier has been arrayed as accused, its employees need not be arrayed as accused.
6. There is no merit in this revision petition. It is only to be dismissed.
Resultantly, this revision petition fails and it is accordingly dismissed. Office is directed to send the records to the court below forthwith. The court below shall expedite the trial and disposal of the case.
Criminal Miscellaneous Petition No.1444 of 2001 shall stand dismissed.
THOMAS P.JOSEPH, JUDGE.
vsv CRL. R.P. NO.331 OF 2001 -: 4 :- THOMAS P.JOSEPH, J.
=================== CRL.R.P. NO.331 OF 2001 =================== O R D E R 29TH SEPTEMBER, 2008


| maybe_lossy_cast {vctrs} | R Documentation |
By default, lossy casts are an error. Use allow_lossy_cast()
to
silence these errors and continue with the partial results. In this
case the lost values are typically set to NA
or to a lower value
resolution, depending on the type of cast.
Lossy cast errors are thrown by maybe_lossy_cast()
. Unlike
functions prefixed with stop_
, maybe_lossy_cast()
usually
returns a result. If a lossy cast is detected, it throws an error,
unless it's been wrapped in allow_lossy_cast()
. In that case, it
returns the result silently.
maybe_lossy_cast( result, x, to, lossy = NULL, locations = NULL, ..., loss_type = c("precision", "generality"), x_arg, to_arg, details = NULL, message = NULL, class = NULL, .deprecation = FALSE )
result |
The result of a potentially lossy cast. |
x |
Vectors |
to |
Type to cast to. |
lossy |
A logical vector indicating which elements of Can also be a single |
locations |
An optional integer vector giving the
locations where |
... |
Only use these fields when creating a subclass. |
loss_type |
The kind of lossy cast to be mentioned in error messages. Can be loss of precision (for instance from double to integer) or loss of generality (from character to factor). |
x_arg |
Argument names for |
to_arg |
Argument names for |
details |
Any additional human readable details. |
message |
An overriding message for the error. |
class |
Only use these fields when creating a subclass. |
.deprecation |
If |


--- development-team: - question: Understanding and Applying Scrum answer: Empiricism, Scrum Values, Scrum Roles, Scrum Events, Scrum Artifacts, Sprint Goal, Done - question: Developing People and Teams answer: Self-Organising Teams - question: Managing Products with Agility answer: Forecasting and Release Planning, Product Value, Product Backlog Management, Stakeholder & Customers - question: Developing and Delivering Products Professionally answer: Emergent Software Development, Managing Technical Risk, Continuous Quality, Continuous Integration / Delivery, Optimising Flow - question: Evolving the Agile Organisation answer: Organisational Design and Culture ---


Go to the source code of this file.
Functions | |
| int | main (int argc, char **argv) |
| example of a client to communicate with the mofs-ROS package More... | |
| int main | ( | int | argc, |
| char ** | argv | ||
| ) |
example of a client to communicate with the mofs-ROS package
Created on: 27 May 2013 Author: Miguel A. Olivares-Mendez SnT - University of Luxembourg Automation Research Group
mofs was previously a C++ library and now a ROS package developed by Miguel Angel Olivares Mendez at the Computer Vision Group - Universidad Politecnica de Madrid and at Automation Research Group
Used under the conditions of ROS
any doubts don't hesitate to contact me: migue l.ol ivare smen dez@u ni.l u
Definition at line 27 of file mofsClient.cpp.


BytesFunc¶
| Authors: | Michael Griffin |
|---|---|
| Version: | 3.0.0 for 2021-09-11 |
| Copyright: | 2014 - 2021 |
| License: | This document may be distributed under the Apache License V2.0. |
| Language: | Python 3.6 or later |
Table of Contents
Introduction¶
The BytesFunc module provides high speed array processing functions for use with Python ‘bytes’ and ‘bytearray’ objects. These functions are patterned after the functions in the standard Python “operator” module together with some additional ones from other sources.
The purpose of these functions is to perform mathematical calculations on “bytes” and “bytearray” objects significantly faster than using native Python.
Function Summary¶
The compare operators used for ‘ball’, ‘bany’, and ‘findindex’ are examples only, and other compare operations are available. Many functions will accept other parameter combinations of sequences and numeric parameters. See the details for each function for what parameter combinations are valid.
Brief Description¶
| Function | Equivalent to |
|---|---|
| and_ | Perform a bitwise AND across the sequence. |
| ball | True if all elements of the sequence meet the match criteria. |
| bany | True if any elements of the sequence meet the match criteria. |
| bmax | Return the maximum value in the sequence. |
| bmin | Return the minimum value in the sequence. |
| bsum | Return the sum of the sequence. |
| eq | True if all elements of the sequence equal the compare value. |
| findindex | Returns the index of the first value in an array to meet the specified criteria. |
| ge | True if all elements of the sequence are greater than or equal to the compare value. |
| gt | True if all elements of the sequence are greater than the compare value. |
| invert | Perform a bitwise invert across the sequence. |
| le | True if all elements of the sequence are less than or equal to the compare value. |
| lshift | Perform a bitwise left shift across the sequence. |
| lt | True if all elements of the sequence are less than the compare value. |
| ne | True if all elements of the sequence are not equal the compare value. |
| or_ | Perform a bitwise OR across the sequence. |
| rshift | Perform a bitwise right shift across the sequence. |
| xor | Perform a bitwise XOR across the sequence. |
Python Equivalent¶
{summarytable}
Description¶
Parameters¶
Parameter Formats¶
Parameters come in several forms.
- Sequences. Sequences are either “bytes” or “bytearray” objects. Bytes sequences are immutable and must not be used for output destinations. Bytearray sequences are mutable, and may be used for inputs or outputs.
- Numeric parameters. Numeric input parameters are individual integers and must be in the range of 0 to 255.
- Comparison operators. Comparison operators are unicode strings in the form used by Python for compare operations. These must be quoted strings, and not bare Python symbols. See the section below for a list of these.
- Sequence length control. Sequence length control allows only part of a sequence to be used as an input. See the section below for details.
- Overflow detection disable. Overflow detection control is used for disable integer overflow. See the section below for details.
Example:
sequence = bytes([1, 2, 5, 99, 8])
# Find the maximum value and return it. The answer should be 99.
result = bytesfunc.bmax(sequence)
Example:
sequence1 = bytes([1, 2, 5, 99, 8])
sequence2 = bytearray([0, 0, 0, 0, 0])
# Xor each element in sequence1 with '7', and write the output to
# sequence2. Sequence2 should be bytearray(b'\x06\x05\x02d\x0f').
bytesfunc.xor(sequence1, 7, sequence2)
Example:
sequence1 = bytes([1, 2, 5, 99, 8, 101])
# Find the first index of sequence1 which is greater than or equal to 99.
# The answer should be 3.
result = bytesfunc.findindex('>=', sequence, 99)
Function Documentation Details¶
{opdocs}
Parameter Details¶
Comparison Operators¶
Some functions use comparison operators. These are unicode strings containing the Python compare operators and include following:
| Operator | Description |
|---|---|
| ‘<’ | Less than. |
| ‘<=’ | Less than or equal to. |
| ‘>’ | Greater than. |
| ‘>=’ | Greater than or equal to. |
| ‘==’ | Equal to. |
| ‘!=’ | Not equal to. |
All comparison operators must contain only the above characters and may not include any leading or trailing spaces or other characters.
Numeric Parameters¶
“Bytes” and “bytearray” objects are sequences of 8 bit bytes with each element being in the range of 0 to 255. When a function accepts a non-sequence numeric parameter, this must also be in the range of 0 to 255.
Using Less than the Entire Sequence¶
If the size of the sequence is larger than the desired length of the calculation, it may be limited to the first part of the sequence by using the ‘maxlen’ parameter. In the following example only the first 3 elements will be operated on, with the following ones left unchanged.:
x = bytes([20,21,22,23,24,25])
result = bytesfunc.bmax(x, maxlen=3)
Suppressing or Ignoring Math Errors¶
Some functions can be made to ignore some mathematical errors (e.g. integer overflow) by setting the ‘matherrors’ keyword parameter to True.:
x = bytes([20,21,22,23,24,250,250])
result = bytesfunc.sum(x, matherrors=True)
Ignoring errors may be desirable if the side effect (e.g. the result of an integer overflow) is the intended effect, or for reasons of a minor performance improvement in some cases. Benchmark your calculation before deciding if this is worth while.
Differences with Native Python¶
In some cases ‘BytesFunc’ will not produce exactly the same result as Python. There are several reasons for this, the primary one being that BytesFunc operates on different underlying data types. Specifically, BytesFunc uses the platform’s native integer types while Python integers are of arbitrary size and can never overflow (Python simply expands the word size indefinitely), while BytesFunc integers will overflow the same as they would with programs written in C.
Think of BytesFunc as exposing C style semantics in a form convenient to use in Python. Some convenience which Python provides (e.g. no limit to the size of integers) is traded off for large performance increases.
SIMD Support¶
General¶
SIMD (Single Instruction Multiple Data) is a set of CPU features which allow multiple operations to take place in parallel. Some, but not all, functions may make use of these instructions to speed up execution.
Disabling SIMD¶
Those functions which do support SIMD features will automatically make use of them by default unless this feature is disabled. There is normally no reason to disable SIMD, but should there be hardware related problems the function can be forced to fall back to conventional execution mode.
If the optional parameter “nosimd” is set to true (“nosimd=True”), SIMD execution will be disabled. The default is “False”.
To repeat, there is normally no reason to wish to disable SIMD.
Platform Support¶
SIMD instructions are presently supported only on the following:
- 64 bit x86 (i.e. AMD64) using GCC.
- 32 bit ARMv7 using GCC (tested on Raspberry Pi 3).
- 64 bit ARMv8 AARCH64 using GCC (tested on Raspberry Pi 4).
Other compilers or platforms will still run the same functions and should produce the same results, but they will not benefit from SIMD acceleration.
However, non-SIMD functions will still be much faster standard Python code. See the performance benchmarks to see what the relative speed differences are. With wider data types (e.g. double precision floating point) SIMD provides only marginal speed ups anyway.
Raspberry Pi 32 versus 64 bit¶
The Raspberry Pi uses an ARM CPU. This can operate in 32 or 64 bit mode. When in 32 bit mode, the Raspberry Pi 3 operates in ARMv7 mode. This has 64 bit ARM NEON SIMD vectors.
When in 64 bit mode, it acts as an ARMv8, with AARCH64 128 bit ARM NEON SIMD vectors.
The Raspbian Linux OS is 32 bit mode only. Other distros such as Ubuntu offer 64 bit versions.
The “setup.py” file uses platform detection code to determine which ARM CPU and mode it is running on. Due to the availability of hardware for testing, this code is tailored to the Raspberry Pi 3 and Raspberry Pi 4 and the operating systems listed. This code then selects the appropriate compiler arguments to pass to the setup routines to tell the compiler what mode to compile for.
If other ARM platforms are used which have different platform signatures or which require different compiler arguments, the “setup.py” file may need to be modified in order to use SIMD acceleration.
However, the straight ‘C’ code should still compile and run, and still provide performance many times faster than when using native Python.
SIMD Function Support¶
The following table shows which functions are supported by SIMD on which CPU architectures.
{simdtable}
SIMD Support Attributes¶
There is an attribute which can be tested to detect if BytesFunc is compiled with SIMD support and if the current hardware supports the required SIMD level.
bytesfunc.simdsupport.hassimd
The attribute “hassimd” will be True if the module supports SIMD.
example:
import bytesfunc
bytesfunc.simdsupport.hassimd
==> True
Performance¶
Variables affecting Performance¶
The purpose of the BytesFunc module is to execute common operations faster than native Python. The relative speed will depend upon a number of factors:
- The function.
- Function options. Turning checking off will result in faster performance.
- The data in the sequence and the parameters.
- The size of the sequence.
- The platform, including CPU type (e.g. x86 or ARM), operating system, and compiler.
The speeds listed below should be used as rough guidelines only. More exact results will require application specific testing. The numbers shown are the execution time of each function relative to native Python. For example, a value of ‘50’ means that the corresponding BytesFunc operation ran 50 times faster than the closest native Python equivalent.
Both relative performance (the speed-up as compared to Python) and absolute performance (the actual execution speed of Python and BytesFunc) will vary significantly depending upon the compiler (which is OS platform dependent) and whether compiled to 32 or 64 bit. If your precise actual benchmark performance results matter, be sure to conduct your testing using the actual OS and compiler your final program will be deployed on. The values listed below were measured on x86-64 Linux compiled with GCC.
Note: Some more complex BytesFunc functions do not work exactly the same way as the native Python equivalents. This means that the benchmark results should be taken as general guidelines rather than precise comparisons.
Typical Performance Readings¶
In this set of tests, all error checking was turned on and SIMD acceleration was enabled where this did not conflict with the preceding (the defaults in each case).
The Bytesfunc versus Python factor of 100.0 means the bytesfunc version ran 100 times faster than in native Python on that platform. Benchmarks for different hardware and platforms cannot be compared via this benchmark in terms of absolute performance as these are relative, not absolute numbers.
An SIMD versus non-SIMD factor of 10.0 means the SIMD version was 10 times faster than the non-SIMD version. An SIMD versus non-SIMD factor of 0.0 means the function did not support SIMD on the tested platform.
ARMv7 Benchmarks¶
The following tests were conducted on an ARM CPU in 32 bit mode (ARMv7) on a Raspberry Pi 3.
{pybench_ARMv7}
ARMv8 Benchmarks¶
The following tests were conducted on an ARM CPU in 64 bit mode (ARMv8) on a Raspberry Pi 4.
{pybench_ARMv8}
Platform Effects¶
The platform, including CPU, OS, compiler, and compiler version can affect performance, and this influence can change significantly for different functions.
If your application requires exact performance data, then benchmark your application in the specific platform (hardware, OS, and compiler) that you will be using.
Platform support¶
List of tested Operation Systems, Compilers, and CPU Architectures¶
BytesFunc is written in ‘C’ and uses the standard C libraries to implement the underlying math functions. BytesFunc has been tested on the following platforms.
| OS | Bits | Compiler | Python Version Tested |
|---|---|---|---|
| Ubuntu 20.04 LTS | 64 bit | GCC | 3.8 |
| Ubuntu 21.04 | 64 bit | GCC | 3.9 |
| Debian 11 | 32 bit | GCC | 3.9 |
| Debian 11 | 64 bit | GCC | 3.9 |
| OpenSuse 15.3 | 64 bit | GCC | 3.6 |
| Centos 8.4 | 64 bit | GCC | 3.6 |
| FreeBSD 13 | 64 bit | LLVM | 3.8 |
| OpenBSD 6.9 | 64 bit | LLVM | 3.8 |
| MS Windows 10 | 64 bit | MS VS C 2015 | 3.9 |
| Raspbian (RPi 3) | 32 bit | GCC | 3.7 |
| Ubuntu 20.04 (RPi 4) | 64 bit | GCC | 3.8 |
- The Raspbian (RPi 3) tests were conducted on a Raspberry Pi 3 ARM CPU running in 32 bit mode.
- The Ubuntu ARM tests were conducted on a Raspberry Pi 4 ARM CPU running in 64 bit mode.
- All others were conducted using VMs running on x86 hardware.
Platform Oddities¶
As most operators are implemented using native behaviour, details of some operations may depend on the CPU architecture.
Lshift and rshift will exhibit a behaviour that depends on the CPU type whether it is 32 or 64 bit, and array size.
For 32 bit x86 systems, if the array word size is 32 bits or less, the shift is masked to 5 bits. That is, shift amounts greater than 32 will “roll over”, repeating smaller shifts.
On 64 bit systems, this behaviour will vary depending on whether SIMD is used or not. Arrays which are not even multiples of SIMD register sizes may exibit different behaviour at different array indexes (depending on whether SIMD or non-SIMD instructions were used for those parts of the array).
ARM does not display this roll-over behaviour, and so may give different results than x86. However, negative shift values may result in the shift operation being conducted in the opposite direction (e.g. right shift instead of left shift).
The conclusion is that bit shift operations which use a shift amount which is not in the range of 0 to “maximum number” may produce undefined results. So valid bit shift amounts should be 0 to 7.


{% extends 'base.html' %} {% block container %}
For occasional use, choose the 3 Day Ticket option.
These tickets are convenient for short term users.
You can buy a 3 Day Ticket at stations with credit card terminals.
For frequent use, choose the annual membership
The simple and convenient way to enjoy dublinbikes all year round.
You can enjoy all the benefits of DublinBikes at the swipe of a card.
Rental Charges
First 1/2 hour: Free
Up to 1 hour: €0.50
p to 2 hours: €1.50
Up to 3 hours: €3.50


public interface RpcEndpoint
It is guaranteed that onStart
, receive
and onStop
will be called in sequence.
The life-cycle of an endpoint is:
constructor -> onStart -> receive* -> onStop
Note: receive
can be called concurrently. If you want receive
to be thread-safe, please use
ThreadSafeRpcEndpoint
If any error is thrown from one of RpcEndpoint
methods except onError
, onError
will be
invoked with the cause. If onError
throws an error, RpcEnv
will ignore it.
| Modifier and Type | Method and Description |
|---|---|
void |
onConnected(org.apache.spark.rpc.RpcAddress remoteAddress)
Invoked when
remoteAddress is connected to the current node. |
void |
onDisconnected(org.apache.spark.rpc.RpcAddress remoteAddress)
Invoked when
remoteAddress is lost. |
void |
onError(Throwable cause)
Invoked when any exception is thrown during handling messages.
|
void |
onNetworkError(Throwable cause,
org.apache.spark.rpc.RpcAddress remoteAddress)
Invoked when some network error happens in the connection between the current node and
remoteAddress . |
void |
onStart()
Invoked before
RpcEndpoint starts to handle any message. |
void |
onStop()
Invoked when
RpcEndpoint is stopping. |
scala.PartialFunction<Object,scala.runtime.BoxedUnit> |
receive()
Process messages from
RpcEndpointRef.send or RpcCallContext.reply . |
scala.PartialFunction<Object,scala.runtime.BoxedUnit> |
receiveAndReply(RpcCallContext context)
Process messages from
RpcEndpointRef.ask . |
org.apache.spark.rpc.RpcEnv |
rpcEnv()
The
RpcEnv that this RpcEndpoint is registered to. |
org.apache.spark.rpc.RpcEndpointRef |
self()
The
RpcEndpointRef of this RpcEndpoint . |
void |
stop()
A convenient method to stop
RpcEndpoint . |
void onConnected(org.apache.spark.rpc.RpcAddress remoteAddress)
remoteAddress
is connected to the current node.remoteAddress
- (undocumented)void onDisconnected(org.apache.spark.rpc.RpcAddress remoteAddress)
remoteAddress
is lost.remoteAddress
- (undocumented)void onError(Throwable cause)
cause
- (undocumented)void onNetworkError(Throwable cause, org.apache.spark.rpc.RpcAddress remoteAddress)
remoteAddress
.cause
- (undocumented)remoteAddress
- (undocumented)void onStart()
RpcEndpoint
starts to handle any message.void onStop()
RpcEndpoint
is stopping. self
will be null
in this method and you cannot
use it to send or ask messages.scala.PartialFunction<Object,scala.runtime.BoxedUnit> receive()
RpcEndpointRef.send
or RpcCallContext.reply
. If receiving a
unmatched message, SparkException
will be thrown and sent to onError
.scala.PartialFunction<Object,scala.runtime.BoxedUnit> receiveAndReply(RpcCallContext context)
RpcEndpointRef.ask
. If receiving a unmatched message,
SparkException
will be thrown and sent to onError
.context
- (undocumented)org.apache.spark.rpc.RpcEnv rpcEnv()
RpcEnv
that this RpcEndpoint
is registered to.org.apache.spark.rpc.RpcEndpointRef self()
RpcEndpointRef
of this RpcEndpoint
. self
will become valid when onStart
is
called. And self
will become null
when onStop
is called.
Note: Because before onStart
, RpcEndpoint
has not yet been registered and there is not
valid RpcEndpointRef
for it. So don't call self
before onStart
is called.
void stop()
RpcEndpoint
.


Always striving to work in a fast-paced environment that allows me to explore my passion for data and advance my technical skills; driving the continued growth and success of an innovative, data-focused company.
Twitter
maddran
LinkedIn
BP Canada Energy Group 16/06 — 17/10
Trade Analyst / Commodity Risk Analyst
Generated daily position and performance estimates for natural gas portfolios in one of the world’s largest commodity trading operations.
Highlights
- Worked with control functions to reconcile position and performance numbers daily; addressing concerns and system issues in a timely manner to ensure silent running of trading operations.
- Developed and implemented several improvements in the form of process simplification and automation concerning vast data sets.
- Central to the testing, release, and troubleshooting of new Energy Trading and Risk Management (ETRM) tool and associated processes.
Canadian Energy Systems Analysis Research (CESAR) 15/09 — 16/06
Undergraduate Researcher
Research work focused on modeling and quantifying the impact of future shifts on Alberta’s energy systems, including scenario-based economic and pricing models.
Highlights
- Findings published in peer-reviewed report: CESAR Scenarios - Reducing Carbon Footprint of Oil Sands
Altalink LP May 2015 — Aug 2015
Life Cycle Engineering Summer Student
Highlights
- Developed a tool capable of generating accurate projections of failure rates of various transmission assets via probabilistic simulations. Applied knowledge in failure analysis and stochastic simulations
- Updated and expanded capabilities of several tools that were deployed companywide (Substation Project Cost Breakdown tool, Lifecycle Cost Analysis tool, just to name a few)
University of Calgary Sep 2010 — Jun 2016
Electrical Engineering with Distinction
BSc
Courses
- energy systems
- C/C++
- Assembly Language
- Microelectronics
- Linear algebra
- Numerical Computation
- signals and communication sytems
- computer organization
University of Calgary Sep 2010 — Jun 2016
Economics with Distinction
BA
Courses
- statistics
- econometrics
- decision / game theory
- behavioral economics
- energy economics
Python for Data Science
- Pandas
- Numpy
- Matplotlib
- Scikit-learn
- NLTK
- NetworkX
Data Visualization
- Plotly / Dash (Python)
- Tableau
- D3.js
Web Development
- HTML
- CSS
- Javascript
English
Native speaker
Data Science
- Visualization
- Sports Analytics
Sports
- Distance running
- Badminton
- NHL Hockey


We are a local real estate investment company with a spirit of teamwork and caring. For the past few years, our team has been helping homeowners navigate difficult circumstances by providing real estate solutions. More than real estate, our vision and passion puts us in the people business. Our mission is to help our local communities, one family at a time, through real estate solutions and education.
We are excited to announce our first ever cash incentive program, where YOU can be part of our mission! This program is designed specifically for community members to be rewarded for taking an active approach in helping their neighbors and their community. Many people want or need to sell their home, but do not realize all of their options. With the help of friends like you, we can provide solutions for more and more people. We pay you just to let us know about available houses!
The process is simple. Do you have a friend or family member who is behind in payments or needs to sell right away? Is there a vacant, distressed or neglected house on your block? Simply contact us with the information, then we'll pay you $$$ if we decide to move forward in buying the property. We're looking to buy four to eight properties per month . so this is an incredible opportunity for you to make some SERIOUS cash! This is a perfect opportunity for part-time or weekend work, and if you're interested in learning real estate investing there is no better way to start. In fact, many full-time investors started out referring properties in programs just like this!


Work Order System
Schedule, track, manage wind turbines inspections all in one place
Overview
SkySpecs is a drone company deploys autonomous drones to provide automated wind turbine inspections for the Wind Energy Industry. We built a work order system for SkySpecs to streamline their workflow. This is a website that can be fully utilized by SkySpecs employees to track their customer commitments, creating and viewing both history and upcoming inspections.
Problem Statement
With the growth of the company, customers and corresponding inspections are increasing which necessitates an infrastructure to centralize work orders, streamline their workflow and run business systematically and more efficiently.
The workflow of SkySpecs includes 6 steps, as shown in figure 1. They receive a request by phone and schedule via Google Calendar. However, there is only one web portal for the 5th step to store a collection of uploaded data and annotation. From their workflow, we found the main problems resided in two perspectives- scheduling inspections (Problem 2) and keeping track of orders (Problem 1, 3, 4).
Objectives
After meeting with higher-ups of SkySpecs, they gave us a list of expected project outcomes, as shown in the table below. We prioritized the three key objectives and then started our design process.
| Priority | Stakeholder Objective | Specifications | Related Problem |
|---|---|---|---|
| 1 | Schedule Inspections | Determine when to inspect each wind farm | Problem 2 |
| 2 | Ticket System | Interface for SkySpecs employees to view and interact with orders | Problem 1, 3, 4 |
| 3 | Calendar Integration | Automatically place submitted orders on SkySpecs’ calendar | Problem 4 |
Design Process
Scope
Rapid Prototyping
Although our sponsor gave us a list of possible expectations, they were not 100% sure about what are the most useful and practical deliverables. Thus, we faced the challenge of helping our stakeholders figure out what they need in the system. We went through several rounds of fast prototyping and review, resulting in the wireframes shown on the right.
Rescoping
We discovered that there were too many factors to be considered during the scheduling process, so we shifted to the workflow after inspections are scheduled. After discussion with our sponsor, we have determined that the deliverables for this project will be:
- Work Order System: Interfaces for SkySpecs employees to view and interact with orders. (Original Objective 2: Ticket System)
- Calendar: Automatically place submitted orders on SkySpecs’ calendar. (Original Objective 3: Calendar Integration)
Research
To flesh out the work order system, the research was twofold. Firstly, defined the target audience and conducted user interviews to gain insights of their needs. Secondly, did Comparative Evaluation to understand how does work order system function.
After the background research of SkySpecs organization, we generalized our target audience into four main categories: Director, Operator, Analyst and SkySpecs' Customer. And their major responsibilities are:
- Director: schedule with their customers and assign inspections to the operator.
- Operator: perform inspections on wind farms and upload data into the web portal.
- Analyst: annotate the damage seveity of turbine data in the web portal.
As you can see from figure 3 above, the primary user of the work order system was the SkySpecs crew while the secondary user was their customer. We planned to sketch out a fully-functional system and then modify separate views for the different user account. So we conducted in-depth interviews and observed their workflow with all primary users of SkySpecs in the work site. And then we analyzed the problem they were facing and came up with some insights.
Moving forward, we then did the comparative evaluation, including indirect comparisons with existing work order platforms: NetFacilities, eMaint, and Fiix, etc. We also did the analogous comparisons with scheduling systems: Google Calendar, Doodle, etc.
Key Findings
Initial Design
Our initial design focused on both the work order workflow itself and its related information (customer and turbine), as you can see from the system structure below. The main workflow is to create new work order through a 4-step-process. The relevant information will be programmatically brought up from customer or turbine table database. If new customer or turbine, users can toggle to the corresponding section and manually enter the information. The agenda/calendar provides the visual aid in a separate part with the same details as in work order table.
Below shows the system structure and key wireframes that we came up with from the research insights. I also listed out how each feature match with the insight.
Invision Mock-ups
Iteration
Our project continued after the summer when the SkySpecs made a lot of changes to their existing web portal. Because the Work Order System is not a standalone website and will be integrated into their current site, we need to consider these changes and tweak our design.
Validation
We have worked closely with our sponsor through weekly meetings and to identify what features they need to consolidate in a work order system. We also had three design reviews to evaluate the design at each stage and iterated based on received feedback. We conducted late-stage usability testing to validate the work order system, testing the functionality, efficiency, flexibility of the work order system and made some tweaks.
| # | Criteria | Features |
|---|---|---|
| 1 | Efficiency | Turbines can be programmatically brought up, not manually anymore. The process of creating new work order has been simplified too. |
| 2 | Flexibility | Users not only can save and edit the work order later, but they now can fill in the turbine number for inspection without selecting the exact turbine. |
| 3 | Calendar | The calendar now becomes a visual view of the work order table. |
We previously planned to set separate accounts for different users (director, analyst, operator, and customer). As SpySpecs set up the login user account as each customer, we no longer needed to consider different user views and customer information section. And they also built the turbine section we design into their system, so we no need to worry about turbine information too. The final narrowed-down project scope is shown below:
Key Change 1.
System Structure
1. Users log in to the individual customer account, so the customer section is removed.
2. SkySpecs added the turbine information under each wind farm, so we removed the turbine section from work order system too.
3. As the calendar/agenda shows the same information as the work order table, so the agenda section has been merged into the work order system as a parallel calendar view.
Key Change 2.
Turbine Selection Process
In the previous design, users had to enter the inspected turbine information one by one manually. With the technical support, the turbine information can now populate by importing from CSV file or bringing up from the existing wind farm database. The new turbine information will be added to the database programmatically from the CSV file as well.
Key Change 3.
Create New Work Order Steps
The 4-step-process of creating new work order has been reorganized and reduced to 3 steps. And some repetitive details, like the windfarm address and contact information which already exist in the database, have been removed. Either does the turbine details.
Create New Work Order 4-step Process (Before)
Simplified 3-step Process (After)
New System Structure
The new system structure now contains two main parts: the functional work order table and creating new work order process, starting from selecting turbines to adding dates and assignees to sending a notification to the client.
Final Design
In this section, I showcase three critical features of the work order system and some other features at the end.
Invision Mock-upsKey Feature 1.
Create New Work Order
Simple workflow makes it possible for the user to create a new work order in a fast and flexible way.
Key Feature 2.
Bulk Action
The checkbox before each row allows the user to select multiple work orders and do bulk action, including "assign to", "add estimated dates" and "delete".
Key Feature 3.
Calendar View
The calendar view shows the same informaiton as the table does but encodes in a visual way. It also has additional weather information but less interactive function.
Takeaways
From a technical side, what a UX designer should do is understanding user's needs through conducting user research and transforming the requirements into design and followed by iterations. This project allowed me to practice what I had learned and adapted them into real use cases. Most importantly, with the exposure to real-world problems, I learned how I could resolve the conflict between design and requirements.
From the professional respective, I got the chance to work with different stakeholders: the SkySpecs team (our sponsor and user), the development team, our project mentor and another designer. This one-year experience taught me how to reach consensus and solve disagreement within the project team, and how to gather feedback from our users and communicate our ideas to them.


Exotic Travels is a travel management company established by Jordan Desilva in Colombo,Sri Lanka.Today under the chairman ship of Jim Henry the country has spread across the country.It provides online air tickets booking.In addition,it provides hotel booking in various exotic locations all over the world.Moreover it provides rental car bookings.To avail the travel package services please log on to the web site.


It’s hard to believe it’s been a month since my accident. It still feels like yesterday I was breathing the stifling air of the Princess Alexandra Hospital.
My recovery has been rapid and feels like it accelerates every day. I’m moving less cautiously and more freely, getting stronger and feeling less tired all the time.
Both my orthopaedic and maxillo facial outpatients appointments have gone well. The doctors are happy with my progress.
I’ve been back at work this past week, not full time but close to it. I handled it well except for Tuesday when I got extremely tired early and was useless for half the day. My boss has been giving me a ride to work each morning but I had the stamina to walk home the last three afternoons. Both being at work and walking home has done the world of good.
The only situation where my back continues to give me any pain is after lying down for hours. I can sleep for a couple of hours totally pain free but any longer than that and it starts to get more than uncomfortable.  I was getting up 3 or 4 times a night but lately it’s down to the once and the pain is low enough to sleep through most of the time. A week ago I’d be dying to get out of bed in the morning to relieve the pressure but now I’m able to hang around for a while. The difference sleeping better makes is huge.
My jaw is gradually getting stronger. I’m eating food with a little more substance now.  The more I work it the stronger it gets but I won’t be anywhere near eating properly until the bones are fully healed in another two and a half weeks.
My teeth still feel a little strange and I’m sure once the wire is taken out of my mouth in a bit over week I’m going to lose at least one tooth but I’ll deal with that then.
I’m hitting the scars across my face and neck with chlorsig twice a day without fail and it’s paying dividends.  I can feel the nerves rebuilding themselves through the extreme itchiness that no scratching can appease. It seems feeling is creeping back into those areas.
In another week I start a back and neck rehabilitation program at the Wesley Hospital, just a block and a half from my apartment. It’s a thorough and intensive two week, full time program involving physiotherapists, occupational therapists, neurologists and psychiatrists. It’s supposed to be the best program available for rehabilitating my kind of injuries and is very expensive but thankfully covered by insurance.
I’m getting to the point where basic movement is no longer a problem and I’m itching to do more. Right up until the day of the accident I was running, riding or swimming at least an hour a half a day. That’s been followed by a month of almost complete inactivity. I’m looking forward to the rehab program because it’ll get me moving again with the medical supervision to make sure I don’t do any further damage to myself.
At the end of those two weeks my bones will be healed, I’ll be physically active and if not back to 100% strength I’ll be well on my way to complete recovery.


Home
Astronomy
Physics
Chemistry
Upload
About
Contact
Physics Experiments
Conservation of Energy
What You Need:
Two weights
String
Scissors
Friction
What You Need:
Calculator
Book


Table of Contents
Introduction About System Requirements Disclaimer & License Contact Installation Overview Compilation Import in Python Examples Examples for ShortCut Examples for SparseSinkhorn ReferencesIntroduction
About
OTToolbox is a toolbox for numerical optimal transport for Python 3 with numpy and scipy. The front end is written in Python 3 and several functions are provided by shared c++ libraries.
It provides implementations for various algorithms for solving discrete optimal transport problems, via the linear programming formulation due to Kantorovich. It includes a naive dense solver for reference and convenience. The main functionality are implementations of the sparse multi-scale linear program solver described in [Schmitzer 2016a] and the stabilized sparse Sinkhorn algorithm based on entropy regularization, as described in [Schmitzer 2016b]. These two components will be referred to by ShortCut and SparseSinkhorn in the following. References to figures refer to figures in the respective articles. Parts of the ShortCut algorithm have recently been included in the numerical benchmark [Schrieber et al. 2016].
In this early stage there is no extensive documentation available. It is recommended to try to complete the installation and then look at some of the example files.
Note that this is highly experimental software. It does virtually no safety checks on the users input data and will likely crash your Python session if invalid data is provided. See also Disclaimer & License.
System Requirements
Currently the toolbox is in a very early beta stage and no systematic testing for system compatibility has been performed.
So far it has been tested with:
- Ubuntu [12.04, 14.04, 16.04], Python 3.4.3, numpy 1.11.2, scipy 0.15.1, g++ [4.6.3, 4.8.4, 5.4.0]
- OS X 10.9.5, Python 3.4.3, numpy 1.9.0, scipy 0.14.0
If you are new to Python we recommend the Anaconda distribution (or Miniconda) which provides a convenient way to set up a working Python environment. Moreover, while the toolbox can be operated from standard Python scripts, we highly recommend using jupyter for interactive testing and development.
In addition, ShortCut requires an external linear program solver. Currently, interfaces are provided for the following solvers:
- ILOG CPLEX Optimization Studio (tested with versions 12.5 and 12.6.1). Online documentation. For academic researchers CPLEX is available under the IBM Academic Initiative.
- LEMON Graph Library 1.3.1
Disclaimer & License
This toolbox is prototypical software, developed as part of ongoing research on efficient algorithms and should be considered experimental. It is distributed such that other researchers can test and reproduce published results as well as extend it.It comes without any guarantees or warranty. Use at your own risk.
This toolbox is released under the `Modified BSD License'. The full license text is given below.
Copyright (c) 2016, Bernhard Schmitzer
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
(1) Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
(2) Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
(3) The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission.

Contact
The toolbox is developed by Bernhard Schmitzer, currently a post-doctoral reasearcher at the University of Münster, (website). Feedback on how to make the toolbox more user-friendly, about bugs, successful installation on a new system configuration or requests for additional features is much appreciated.
Installation
Overview
Installation consists of two steps: compiling the c++ libraries and importing the front end modules into Python. Currently both steps require some manual handling by the user.
Compilation
Installing ShortCut requires steps 1-3, installing SparseSinkhorn requires steps 2 & 4.- Preparation for ShortCut: If you want to compile the ShortCut component with some of the external libraries, you need to configure the build script first. To do so, open the file Solvers/compile_constants.sh with a text editor. Find the sections for the CPLEX or Lemon specific settings and adjust the location to the libraries on your system. At least one must be provided to use the toolbox. Be sure to remove the comments in front of the lines that specify the include and linker information!
- Compile Common Components: ShortCut and SparseSinkhorn share some components. For compilation execute the script Solvers/compile_common.sh from a terminal. Check for possible compiler and linker errors.
- Compile ShortCut: First execute the script Solvers/compile_shortcut.sh from a terminal. Then, depending on which LP solver you want to use, run the corresponding compilation script: Solvers/compile_cplex.sh for CPLEX and Solvers/compile_lemon.sh for LEMON. Again, carefully check the output for compiler and linker errors.
- Compile SparseSinkhorn: Execute the script Solvers/compile_sinkhorn.sh from a terminal.
Import in Python
After compilation it is important that Python knows where to look for the toolbox. This is achieved by the following commands (run within Python), where you must replace XXXX by the appropriate location of the toolbox on your system. The directory /XXXX/OTToolbox_v0.1.2/ should contain the file CClasses.py.
import sys
sys.path.append("/XXXX/OTToolbox_v0.1.2/")
Note: In the example files, this is already done via relative paths, see the file Examples/lib/header_rootdir.py for details.
After this, the various modules of the toolbox can be imported in Python for example via:
# dense linear program solvers, only available if compiled with corresponding external libraries
import Solvers.OT_CPLEX as OT_CPLEX
import Solvers.OT_Lemon as OT_Lemon
# basic convenience functions, hierarchical partition handling
import OTTools
import OTTools.HierarchicalPartition as HierarchicalPartition
import Solvers.CostFunctionComputation as SolverCFC
# ShortCut, only available if compiled with corresponding external libraries
import Solvers.ShortCutSolver as ShortCutSolver
import Solvers.ShortCutSolver_CPLEX as ShortCutSolver_CPLEX
import Solvers.ShortCutSolver_Lemon as ShortCutSolver_Lemon
# SparseSinkhorn
import Solvers.Sinkhorn as Sinkhorn
Examples
In the directory Examples/ some example files are provided. Most of them are IPython / jupyter notebooks (see Requirements), which allow for a more interactive demonstration with embedded plots. All examples contain some explaining comments with the code.Examples for ShortCut
These examples require that the ShortCut Code with either CPLEX or Lemon libraries is compiled.| Filename | Description |
| Basic LP Solver | Dense-01-CPLEX.py | Very simple test file which solves a dense transport problem with CPLEX. Can be used to verify whether installation worked properly. |
| Dense-01-Lemon.py | Very simple test file which solves a dense transport problem with LEMON. Can be used to verify whether installation worked properly. Note: The LEMON solver is a bit more elaborate to set up than the CPLEX solver, since marginals and cost function must be truncated to a discrete grid. Therefore most further examples use the CPLEX solver. Should CPLEX not be available to you, this script explains how to set up problems with LEMON and how to adapt other scripts if required. For the set-up of the ShortCut-Solver with Lemon see also Example-ShortCutSolver-01-Basic-Lemon.ipynb. |
| ShortCut Solver | |
| ShortCut-01-Basic-CPLEX.ipynb | Basic demonstration of the ShortCut-Solver on a small test problem, comparison with the naive dense solver, using dense data structures. Uses CPLEX as internal LP solver. |
| ShortCut-01-Basic-Lemon.ipynb | Basic demonstration of the ShortCut-Solver on a small test problem, comparison with the naive dense solver, using dense data structures. Uses Lemon as internal LP solver. |
| ShortCut-02-SparseDataStructures.ipynb | Solving a larger test problem with the ShortCut-Solver on sparse data structures. Comparison to the dense solver is no longer possible. |
| ShortCut-03-PaddingTest.ipynb | The construction of shielding neighourboods is compared with the padding method proposed in [Oberman & Ruan 2015]. It is shown on an extreme test problem that the padding method will not always provide a globally optimal result. |
Examples for SparseSinkhorn
These examples require that the SparseSinkhorn Code is compiled. The SparseSinkhorn solver is more complicated to set up, as it requires much more parameters to be set. This is due to the wide variety in modelling aspects that need to be chosen (e.g. standard transport, unbalanced transport, barycenter or gradient flows with various parameters), and computational choices (e.g. data structure for kernel [dense or truncated], epsilon-scaling, convergence criteria...). Also the code is currently kept extremely modular, to simplify adjustments and development. Therefore, the introduction sequence is somewhat lengthy.
For these reasons the examples are run in a different way. There are two `execution notebooks', SparseSinkhorn-01-OptimalTransport.ipynb and SparseSinkhorn-02-Barycenter.ipynb which first load configuration parameters from separate files and then solve the specified problem. For the first, there is also a script version, SparseSinkhorn-01-OptimalTransport.py. The script only solves the problem and provides verbose output on the multi-scale scheme, log-stabilization and runtime. It terminates and discards any results. The notebooks provide some elementary post-processing for visualizing the results. How to select the configuration files is explained in the jupyter notebooks and the header section of the py script. We will now briefly discuss the prepared configuration files.
| Configuration File Tag | Description |
| (Un-)balanced transport: run with SparseSinkhorn-01-OptimalTransport.ipynb or SparseSinkhorn-01-OptimalTransport.py | |
| cfg/Sinkhorn/CompareEnhancements/1 | Example for comparison of enhancements in Fig. 2. This uses the standard dense Sinkhorn algorithm, only with log-stabilization, at epsilon=0.1. Will take many iterations and a lot of time. We recommend only running this with the script. |
| cfg/Sinkhorn/CompareEnhancements/2 | Example for comparison of enhancements in Fig. 2. This uses log-stabilization and epsilon-scaling for final value epsilon=0.1. We recommend only running this with the script. |
| cfg/Sinkhorn/CompareEnhancements/3 | Example for comparison of enhancements in Fig. 2. This uses log-stabilization, epsilon-scaling and truncated kernels for final value epsilon=0.1. We recommend only running this with the script. |
| cfg/Sinkhorn/CompareEnhancements/4 | Example for comparison of enhancements in Fig. 2. This uses the fully enhanced algorithm with log-stabilization, epsilon-scaling, truncated kernels and the coarse-to-fine scheme for final value epsilon=0.1. We recommend only running this with the script. |
| cfg/Sinkhorn/ImageBenchmark/OT_256 | Example for Fig. 3 for 256x256 grids. Uses standard optimal transport. |
| cfg/Sinkhorn/ImageBenchmark/WF_256 | Similar, but uses Wasserstein-Fisher-Rao distance, not explicitly shown in paper. |
| cfg/Sinkhorn/Gaussians/OT_128_000-001 | Computes standard optimal transport between two pairs of Gaussians with different mass. We recommend trying the post-processing with displacement interpolation in the jupyter notebook. It shows how one Gaussian must send mass to the other to balance the overall distribution. |
| cfg/Sinkhorn/Gaussians/WF_128_000-001 | Computes Wasserstein-Fisher-Rao transport between two pairs of Gaussians with different mass. We recommend trying the post-processing with displacement interpolation in the jupyter notebook. Here the mass can be balanced by creation / annihilation, leading to a more natural interpolation. |
| (Un-)balanced barycenters: run with SparseSinkhorn-02-Barycenter.ipynb | |
| cfg/Sinkhorn/Barycenter/OT_simple_1-2-1 | Computes a Wasserstein barycenter, as shown in Fig. 6. |
| cfg/Sinkhorn/Barycenter/WF_three_1-2-1 | Computes a Wasserstein-Fisher-Rao barycenter, as shown in Fig. 7. |
References
[Oberman & Ruan 2015] An efficient linear programming method for Optimal Transportation, http://arxiv.org/abs/1509.03668
:[Schmitzer 2016a] A Sparse Multi-Scale Algorithm for Dense Optimal Transport, Journal of Mathematical Imaging and Vision, 56 (2): 238-259 (2016), http://arxiv.org/abs/1510.05466
:[Schmitzer 2016b] Stabilized Sparse Scaling Algorithms for Entropy Regularized Transport Problems, https://arxiv.org/abs/1610.06519
:[Schrieber et al. 2016] DOTmark - A Benchmark for Discrete Optimal Transport, https://arxiv.org/abs/1610.03368
:


You decide to rummage through some old newspapers of mine to see if the evidence surrounding each case starts to
add up
.


Planter Box Generator
A parametric design experiment for CNC milling by
Paul Kaplan
Material Thickness:
Bottom Size:
Side Panel Width:
Side Panel Height:
Download SVG


Joey Antipas: We Were Beaten Hands Down 25 Nov 2019, 23:46 Chicken Inn coach Joey Antipas says Bulawayo Chiefs beat them 3-1 as they prepared well in a Castle Lager Premier Soccer League match played in the city at the weekend. (Video: Joseph Njani)


2016/01/24: Arrays vs Hashes
This week I will be talking about two of the most fundamental data structures in computer programming for storing data: arrays and hashes. Although you may have heard that databases are used for storing data, you could thing of arrays and hashes as temporary containers to manipulate data read from or to be sent to a database. These two data structures are quite useful and necessary to manipulate data.
The first thing to understand in order to conceptualize what an array is, and later a hash, is to consider the core of data. Data is something you want to store. For example, lets suppose you wanted to store something as basic as just your first name--Jack, in my case. In programming you would make a variable called "first_name" and assign it the value "Jack", like so (in Ruby):
first_name = "Jack"
Now suppose you were asked to store all your classmates, too. This could quickly get cubersome:
first_name_student1 = "Jack"
first_name_student2 = "Jill"
first_name_student3 = "Billy"
first_name_student4 = "Bob"
You can quickly see that this gets to be impractical really fast. Enter the concept of the array. The easiest way to think of arrays if you are new to them is to think of the times you have used a spreedsheet, like in Excel. We could represent the list of students as a column named "students" and place each name into it's own cell in a column.
+-----------------+---------------+ | row_number | students | +-----------------+---------------+ | 0 | Jack | | 1 | Jill | | 2 | Billy | | 3 | Bob | +-----------------+---------------+
In code, you would assign a "column's" rows to an array variable like this:
students = ["Jack", "Jill", "Billy", "Bob"]
Notice that like in a spreadsheet, there is a "row number" for each student. In programming we call this the element number. Unlike a row in a spreadsheet where we start counting with the number one, in programming we start at zero, because that's what computers start counting at. We could think of the row number as merely the student ID number. So in our example, here is how we would access Jack's first name:
print #{students[0]}
OUTPUTS:
Jack
This is great and all but what happens when we want to store their last name? Well, we could apply the same concept and rename our array variables, i.e., the "columns" in the spreedsheet analogy, to "students_first" and "students_last", like so:
+-----------------+----------------+---------------+ | student_ID | students_first | students_last | +-----------------+----------------+---------------+ | 0 | Jack | Hamilton | | 1 | Jill | Anderson | | 2 | Billy | Kid | | 3 | Bob | Barker | +-----------------+----------------+---------------+
And once again, in code equivalent:
students_first = ["Jack", "Jill", "Billy", "Bob"]
students_last = ["Hamilton", "Anderson", "Kid", "Barker"]
print "#{students_first[2]} #{students_first[2]}"
OUTPUTS:
Billy Kid
Okay, so this is sort of okay. But what if we now want to store everyone's address, and then home phone, then cell phone, emergency contact person, and THEIR telephone number, etcetera. Now the array is becoming cumbersome just like when we needed a unique variable for each student, we're now finding that we need a unique array variable for each additional related piece of information for each student.
What we need is the hash. A hash is what's known as an associative array. It lets you represent an object's properties, associating a value with a key, or in our student analogy, a student's attributes. For example, we know from our example that for each student, we need to retain the following information:
- first_name
- last_name
- street_address
- city
- state
- zip
- home_phone
- cell_phone
As you will see below, we can MUCH more easily represent a student with a hash. We create a hash for each student, associating the individual student's information to the respective student attributes. We can still make use of the array concept and assign each student's hash object to the array element representing their student ID:
students[0] = {
:first_name => "Jack"
:last_name => "Hamilton"
:street_address => "1234 Hill St"
:city => "San Diego"
:state => "CA"
:zip => "92101"
:home_phone => "619-555-1234"
:cell_phone => "619-555-5678"
}
students[1] = {
:first_name => "Jill"
:last_name => "Anderson"
:street_address => "Area 51"
:city => "Las Vegas"
:state => "NV"
:zip => "89101"
:home_phone => "702-555-1234"
:cell_phone => "702-555-5678"
}
We repeat for each student's info and access all their info with a print statement as follows:
students.each do |student| # Grab each student hash from the students array
student.each do |key, value| # Grab each key/value pair from the student hash
p "Key: #{key} contains Value: #{value}" # Print it
end
puts "\n" # A nice carriage-return after each student
end
OUTPUTS:
"Key: first_name contains Value: Jack"
"Key: last_name contains Value: Hamilton"
"Key: street_address contains Value: 1234 Hill St"
"Key: city contains Value: San Diego"
"Key: state contains Value: CA"
"Key: zip contains Value: CA"
"Key: home_phone contains Value:<PHONE_NUMBER>"
"Key: cell_phone contains Value:<PHONE_NUMBER>"
"Key: first_name contains Value: Jill"
"Key: last_name contains Value: Anderson"
"Key: street_address contains Value: Area 51"
"Key: city contains Value: Las Vegas"
"Key: state contains Value: NV"
"Key: zip contains Value: 89101"
"Key: home_phone contains Value:<PHONE_NUMBER>"
"Key: cell_phone contains Value:<PHONE_NUMBER>"
You can see just how powerful combining the concepts of arrays and hashes can be! Until next time. -- JLH


- CameraFragment - Class in com.commonsware.cwac.camera.acl
-
- CameraFragment() - Constructor for class com.commonsware.cwac.camera.acl.CameraFragment
-
- CameraFragment - Class in com.commonsware.cwac.camera
-
Primary class for using `CameraView` as a fragment.
- CameraFragment() - Constructor for class com.commonsware.cwac.camera.CameraFragment
-
- CameraHost - Interface in com.commonsware.cwac.camera
-
Specification of a CameraHost, which is the primary way
by which an app will interact with the library.
- CameraHost.FailureReason - Enum in com.commonsware.cwac.camera
-
Indication of why we were unable to open up a camera.
- CameraHost.RecordingHint - Enum in com.commonsware.cwac.camera
-
Indication of what purpose we plan to put the camera
towards.
- CameraHostProvider - Interface in com.commonsware.cwac.camera
-
Interface that needs to be implemented on activities that
inflate layouts containing a CameraView widget, so that
the widget can obtain its CameraHost immediately.
- CameraUtils - Class in com.commonsware.cwac.camera
-
- CameraUtils() - Constructor for class com.commonsware.cwac.camera.CameraUtils
-
- CameraView - Class in com.commonsware.cwac.camera
-
- CameraView(Context) - Constructor for class com.commonsware.cwac.camera.CameraView
-
- CameraView(Context, AttributeSet) - Constructor for class com.commonsware.cwac.camera.CameraView
-
- CameraView(Context, AttributeSet, int) - Constructor for class com.commonsware.cwac.camera.CameraView
-
- cancel() - Method in class com.commonsware.cwac.camera.ZoomTransaction
-
Cancels an outstanding smooth zoom request.
- cancelAutoFocus() - Method in class com.commonsware.cwac.camera.acl.CameraFragment
-
- cancelAutoFocus() - Method in class com.commonsware.cwac.camera.CameraFragment
-
Call this to cancel an auto-focus operation that had
been started via a call to autoFocus().
- cancelAutoFocus() - Method in class com.commonsware.cwac.camera.CameraView
-
- com.commonsware.cwac.camera - package com.commonsware.cwac.camera
-
- com.commonsware.cwac.camera.acl - package com.commonsware.cwac.camera.acl
-
- configureRecorderAudio(int, MediaRecorder) - Method in interface com.commonsware.cwac.camera.CameraHost
-
This will be called by the library to give you a chance
to configure the audio of the MediaRecorder, just prior
to beginning to record a video.
- configureRecorderAudio(int, MediaRecorder) - Method in class com.commonsware.cwac.camera.SimpleCameraHost
-
- configureRecorderOutput(int, MediaRecorder) - Method in interface com.commonsware.cwac.camera.CameraHost
-
This will be called by the library to give you a chance
to configure the output of the MediaRecorder, just
prior to beginning to record a video.
- configureRecorderOutput(int, MediaRecorder) - Method in class com.commonsware.cwac.camera.SimpleCameraHost
-
- configureRecorderProfile(int, MediaRecorder) - Method in interface com.commonsware.cwac.camera.CameraHost
-
This will be called by the library to give you a chance
to configure the profile of the MediaRecorder, just
prior to beginning to record a video.
- configureRecorderProfile(int, MediaRecorder) - Method in class com.commonsware.cwac.camera.SimpleCameraHost
-


Hot Chicken Sandwich
Applewood smoked Bacon, BBQ Sauce, Cheddar, and red onions.
Italian BMT
Chipotle mayo, cherry peppers, pepper Jack avacado, lettuce, and red onion.
Hot Chicken Sandwich
Applewood smoked Bacon, BBQ Sauce, Cheddar, and red onions.
Italian BMT
Chipotle mayo, cherry peppers, pepper Jack avacado, lettuce, and red onion.


Overview¶
AIQC is an open source Python framework that brings reproducible deep learning workflows to open science.
Mission = empower open science: [1] Reduce the programming & data science know-how required to adopt deep learning. [2] Automatically record experiment workflows. [3] Provide a free alternative to expensive cloud SaaS & walled gardens. [4] Accelerate Earth-healing discoveries.
Tech = easy-to-use Python package: [1] Provide best-practice guardrails in the form of an object-oriented API (e.g. Label, Hyperparamset, Job). [2] Simplify preprocessing and batch model tuning/ scoring. [3] Prevent data leakage and evaluation bias. [4] Persist experiments in a SQLite database file.
I. Rapidly prepare folded data for analysis without leakage.¶
Make datasets from files (csv, parquet), structures (pandas, numpy), & images (pillow).
Designate columns by name as either Features or Labels.
Easily split, fold, & stratify samples (size_validation=0.12, fold_count=5).
Apply encoders by dtype (float64) without leaking test/ validation data.
II. Train many variations of an algorithm in a single batch.¶
Queue a batch a many training jobs; one job per hyperparameter combination.
Automatically passes param combinations into model functions as **kwargs.
Tweak the model topology as a param (params[‘extra_conv3D_layer’]=True).
Repeat a job to to give it a chance to perform well (repeat_count=3).
III. Evaluate algorithm performance with metrics & charts.¶
Automated performance metrics & visualization for every split/ fold.
Define multi-metric success criteria for early stopping.
Captures per-epoch history metrics for learning curves.
Aggregate metrics for sets of cross-folded jobs.
IV. Effortlessly track, reproduce, & prove experiments.¶
# Everything is saved. No more writing down parameters or screenshotting charts!
batch.jobs[0].hyperparamcombo.hyperparameters
{
'include_nth_layer': True,
'initialization': 'he_normal',
'batch_size': 8,
'dense_neurons': 64
}
# Recorded end-to-end:
batch.jobs[0].results[0].get_model() # trained model
batch.algorithm.function_model_build # model definition
batch.jobs[0].results[0].predictions['fold_validation'] # predictions
batch.jobs[0].fold.samples['fold_validation']['features'] # sample indeces by split
Automatically records experiments in a local SQLite database file.
No infrastructure hassle; aiqc.setup() creates the database for you.
V. Easy to install. With tutorials to guide you.¶
# pip install --upgrade aiqc
import aiqc
from aiqc import datum # data for tutorials.
aiqc.setup() # create & connect to the database.
Example datasets built into package. Example image datasets in github repo.
Use any IDE (jupyter, rstudio, vscode, pycharm, spyder) & OS (win, mac, lin).
Easy to learn with 2 step tutorials: make a Pipeline to feed an Experiment.


|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: REQUIRED | OPTIONAL | DETAIL: ELEMENT |
@Documented @Retention(value=RUNTIME) @Target(value=TYPE) @Inherited public @interface ReportsCrashes
Provide configuration elements to the
ACRA.init(android.app.Application)
method. The only mandatory
configuration item is the formKey()
parameter which is the Id of
your Google Documents form which will receive reports.
| Required Element Summary | |
|---|---|
String |
formKey
|
| Optional Element Summary | |
|---|---|
String[] |
additionalDropBoxTags
|
String[] |
additionalSharedPreferences
Add here your SharedPreferences identifier Strings if you use
others than your application's default. |
String |
applicationLogFile
To use in combination with ReportField.APPLICATION_LOG to set the
path/name of your application log file. |
int |
applicationLogFileLines
To use in combination with ReportField.APPLICATION_LOG to set the
number of latest lines of your application log file to be collected. |
int |
connectionTimeout
|
ReportField[] |
customReportContent
Redefines the list of ReportField s collected and sent in your
reports. |
boolean |
deleteOldUnsentReportsOnApplicationStart
This property can be used to determine whether old (out of date) reports should be sent or not. |
boolean |
deleteUnapprovedReportsOnApplicationStart
Controls whether unapproved reports are deleted on application start or not. |
boolean |
disableSSLCertValidation
Set this to true if you need to post reports to your own server using an SSL connection with a self-signed certificate. |
int |
dropboxCollectionMinutes
|
String[] |
excludeMatchingSettingsKeys
Provide here regex patterns to be evaluated on each Settings.System, Settings.Secure and Settings.Global key to exclude KV pairs from the collected SharedPreferences. |
String[] |
excludeMatchingSharedPreferencesKeys
Provide here regex patterns to be evaluated on each SharedPreference key to exclude KV pairs from the collected SharedPreferences. |
boolean |
forceCloseDialogAfterToast
In ReportingInteractionMode.TOAST mode, set this to true if you
prefer displaying the native Force Close dialog after the Toast. |
String |
formUri
The Uri of your own server-side script that will receive reports. |
String |
formUriBasicAuthLogin
When using the formUri() parameter to send reports to a custom
server-side script, you can set here and in
formUriBasicAuthPassword() the credentials for a BASIC HTTP
authentication. |
String |
formUriBasicAuthPassword
When using the formUri() parameter to send reports to a custom
server-side script, you can set here and in
formUriBasicAuthLogin() the credentials for a BASIC HTTP
authentication. |
String |
googleFormUrlFormat
Default behavior is to send reports to an URL following the format: "https://spreadsheets.google.com/formResponse? |
HttpSender.Method |
httpMethod
The HttpSender.Method to be used when posting with formKey() . |
boolean |
includeDropBoxSystemTags
If enabled, DropBox events collection will include system tags: system_app_anr system_app_wtf system_app_crash system_server_anr system_server_wtf system_server_crash BATTERY_DISCHARGE_INFO SYSTEM_RECOVERY_LOG SYSTEM_BOOT SYSTEM_LAST_KMSG APANIC_CONSOLE APANIC_THREADS SYSTEM_RESTART SYSTEM_TOMBSTONE data_app_strictmode |
String[] |
logcatArguments
Arguments to be passed to the logcat command line. |
boolean |
logcatFilterByPid
Set this to true if you want to include only logcat lines related to your Application process. |
String |
mailTo
Add your crash reports mailbox here if you want to send reports via email. |
int |
maxNumberOfRequestRetries
|
ReportingInteractionMode |
mode
The interaction mode you want to implement. |
HttpSender.Type |
reportType
|
int |
resDialogCommentPrompt
|
int |
resDialogEmailPrompt
|
int |
resDialogIcon
|
int |
resDialogOkToast
|
int |
resDialogText
|
int |
resDialogTitle
|
int |
resNotifIcon
|
int |
resNotifText
|
int |
resNotifTickerText
|
int |
resNotifTitle
|
int |
resToastText
Resource id for the Toast text triggered when the application crashes if the ReportingInteractionMode.TOAST mode is used. |
boolean |
sendReportsInDevMode
Set this to false if you want to disable sending reports in development mode. |
int |
sharedPreferencesMode
If using a custom sharedPreferencesName() , pass
here the mode that you need for the SharedPreference file creation:
Context.MODE_PRIVATE , Context.MODE_WORLD_READABLE or
Context.MODE_WORLD_WRITEABLE . |
String |
sharedPreferencesName
|
int |
socketTimeout
If the request is retried due to timeout, the socketTimeout will double before retrying the request. |
| Element Detail |
|---|
public abstract String formKey
public abstract String formUri
public abstract ReportingInteractionMode mode
The interaction mode you want to implement. Default is
ReportingInteractionMode.SILENT
which does not require any
resources configuration.
Other modes have resources requirements:
ReportingInteractionMode.TOAST
requires
resToastText()
to be provided to define the text that you want
to be displayed to the user when a report is being sent.ReportingInteractionMode.NOTIFICATION
requires
resNotifTickerText()
, resNotifTitle()
,
resNotifText()
, resDialogText()
.ReportingInteractionMode.DIALOG
requires
resDialogText()
ReportingInteractionMode.SILENT
public abstract int resDialogCommentPrompt
public abstract int resDialogEmailPrompt
public abstract int resDialogIcon
public abstract int resDialogOkToast
public abstract int resDialogText
public abstract int resDialogTitle
public abstract int resNotifIcon
public abstract int resNotifText
public abstract int resNotifTickerText
public abstract int resNotifTitle
public abstract int resToastText
ReportingInteractionMode.TOAST
mode is used. Can also be used
in ReportingInteractionMode.NOTIFICATION
and
ReportingInteractionMode.DIALOG
modes to display a Toast message
while the report is being created, before the dialog/notification
appears. This allows the user to know what is happening just before the
application is terminated.
public abstract String sharedPreferencesName
ACRA.PREF_DISABLE_ACRA
or ACRA.PREF_ENABLE_ACRA
ACRA.PREF_ALWAYS_ACCEPT
ACRA.PREF_ENABLE_DEVICE_ID
ACRA.PREF_ENABLE_SYSTEM_LOGS
PreferenceManager.getDefaultSharedPreferences(Context)
.public abstract int sharedPreferencesMode
sharedPreferencesName()
, pass
here the mode that you need for the SharedPreference file creation:
Context.MODE_PRIVATE
, Context.MODE_WORLD_READABLE
or
Context.MODE_WORLD_WRITEABLE
. Default is
Context.MODE_PRIVATE
.
Context.getSharedPreferences(String, int)
public abstract boolean includeDropBoxSystemTags
public abstract String[] additionalDropBoxTags
public abstract int dropboxCollectionMinutes
public abstract String[] logcatArguments
Arguments to be passed to the logcat command line. Default is { "-t", "100", "-v", "time" } for:
logcat -t 100 -v time
Do not include -b arguments for buffer selection, include
ReportField.EVENTSLOG
and ReportField.RADIOLOG
in
customReportContent()
to activate alternative
logcat buffers reporting. They will use the same other arguments as those
provided here.
See Listing of logcat Command Options.
public abstract String formUriBasicAuthLogin
formUri()
parameter to send reports to a custom
server-side script, you can set here and in
formUriBasicAuthPassword()
the credentials for a BASIC HTTP
authentication.
public abstract String formUriBasicAuthPassword
formUri()
parameter to send reports to a custom
server-side script, you can set here and in
formUriBasicAuthLogin()
the credentials for a BASIC HTTP
authentication.
public abstract ReportField[] customReportContent
Redefines the list of ReportField
s collected and sent in your
reports. If you modify this list, you have to create a new Google Drive
Spreadsheet & Form which will be based on these fields as column headers.
The fields order is significant. You can also use this property to modify fields order in your reports.
The default list is the following, except if you send reports by mail
using mailTo()
.
ReportField.REPORT_ID
ReportField.APP_VERSION_CODE
ReportField.APP_VERSION_NAME
ReportField.PACKAGE_NAME
ReportField.FILE_PATH
ReportField.PHONE_MODEL
ReportField.BRAND
ReportField.PRODUCT
ReportField.ANDROID_VERSION
ReportField.BUILD
ReportField.TOTAL_MEM_SIZE
ReportField.AVAILABLE_MEM_SIZE
ReportField.CUSTOM_DATA
ReportField.IS_SILENT
ReportField.STACK_TRACE
ReportField.INITIAL_CONFIGURATION
ReportField.CRASH_CONFIGURATION
ReportField.DISPLAY
ReportField.USER_COMMENT
ReportField.USER_EMAIL
ReportField.USER_APP_START_DATE
ReportField.USER_CRASH_DATE
ReportField.DUMPSYS_MEMINFO
ReportField.LOGCAT
ReportField.INSTALLATION_ID
ReportField.DEVICE_FEATURES
ReportField.ENVIRONMENT
ReportField.SHARED_PREFERENCES
ReportField.SETTINGS_SYSTEM
ReportField.SETTINGS_SECURE
ReportField.SETTINGS_GLOBAL
public abstract String mailTo
Add your crash reports mailbox here if you want to send reports via
email. This allows to get rid of the INTERNET permission. Reports content
can be customized with customReportContent()
. Default fields
are:
ReportField.USER_COMMENT
ReportField.ANDROID_VERSION
ReportField.APP_VERSION_NAME
ReportField.BRAND
ReportField.PHONE_MODEL
ReportField.CUSTOM_DATA
ReportField.STACK_TRACE
public abstract boolean deleteUnapprovedReportsOnApplicationStart
ReportingInteractionMode.NOTIFICATION
mode reports were
previously kept until the user explicitly opens the Notification dialog
AND choose to send or discard the report. Until then, on application
restart, ACRA was issuing a new crash notification for previous reports
pending for approval. This could be misunderstood by the user with a new
crash, resulting in bad appreciation of the application.
public abstract boolean deleteOldUnsentReportsOnApplicationStart
public abstract int connectionTimeout
public abstract int socketTimeout
maxNumberOfRequestRetries()
public abstract int maxNumberOfRequestRetries
socketTimeout()
public abstract boolean forceCloseDialogAfterToast
ReportingInteractionMode.TOAST
mode, set this to true if you
prefer displaying the native Force Close dialog after the Toast.
public abstract String[] additionalSharedPreferences
SharedPreferences
identifier Strings if you use
others than your application's default. They will be added to the
ReportField.SHARED_PREFERENCES
field.
public abstract boolean logcatFilterByPid
public abstract boolean sendReportsInDevMode
public abstract String[] excludeMatchingSharedPreferencesKeys
public abstract String[] excludeMatchingSettingsKeys
public abstract String applicationLogFile
ReportField.APPLICATION_LOG
to set the
path/name of your application log file. If the string does not contain
any path separator, the file is assumed as being in
Context.getFilesDir()
.
Context.getFilesDir()
.public abstract int applicationLogFileLines
ReportField.APPLICATION_LOG
to set the
number of latest lines of your application log file to be collected.
Default value is 100.
public abstract String googleFormUrlFormat
Default behavior is to send reports to an URL following the format:
"https://spreadsheets.google.com/formResponse?formkey=%s&ifq" with %s
replaced by the formKey()
value.
If Google ever changed its URI schemes for Forms (changing the host name or parameters names for example), you would be able to override it with the new value with the present method.
public abstract boolean disableSSLCertValidation
Set this to true if you need to post reports to your own server using an SSL connection with a self-signed certificate.
public abstract HttpSender.Method httpMethod
The HttpSender.Method
to be used when posting with formKey()
.
public abstract HttpSender.Type reportType
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: REQUIRED | OPTIONAL | DETAIL: ELEMENT |


--- title: Modifying Quake 3 - part 2- Gamer inputs tags: meta: abstract: In the previous post, we saw how to compile and Q3 source code and some of details on Q3. In this post, I'll explain some basics on how Q3 works and we will create a mechanism to accept user input. In the last post, we will define the behavior of the homing-missile. thumbnail: date: 2007-04-11T00:02 ---
< Continued from Part 1: Compiling Quake 3 source code
Before you modify the code (some basics)
It is important to understand some concepts of Quake 3 before you modify the code. Here I am defining only very small part required to understand the code illustrated here. There are lots of things that you will find out once you have started doing more than what's presented here.
Anything that is created in the game is called an entity. Every entity created in Quake 3 has an associated think function. The think function defines the kind of behavior the entity will exhibit at various times in the game.
For example if you see the fire_rocket method in g_missile.c under the game project (under quake3.sln), you will find lines stating:
bolt->nextthink = level.time + 15000; bolt->think = G_ExplodeMissile; //Game time here is in milliseconds.
G_ExplodeMissle is a think function for the rocket. This means that after 15 seconds the rocket will explode. Let us call this time frame as the Next Think time.
We can have our own think function that will define what the rocket will do after a time specified. By default a missile entity doesn’t require processing once released, but depending on the entity type and its behavior , the next think time can be different.
The Homing Missile
By definition, homing missile is a kind of missile which when fired will find a nearest target and steer itself towards it and finally blast into the target.
In Quake 3, we will enable firing of homing missile from the rocket launcher itself. A player can select whether he wants to fire a simple rocket or homing missile (same rocket behaving differently).
We can divide this task into two parts:
Taking inputs from the player
First we must have a place where we can store the input of the player. Therefore, we insert a variable homingMissle in clientPersistant_t typed structure. This structure is declared in the file g_local.h under the game project. The changed structure is shown below.
// client data that stays across multiple respawns, but is cleared // on each level change or team change at ClientBegin() typedef struct { clientConnected_t connected; usercmd_t cmd; // we would lose angles if not persistant qboolean localClient; // true if "ip" info key is "localhost" qboolean initialSpawn; // the first spawn should be at a cool location qboolean predictItemPickup; // based on cg_predictItems userinfo qboolean pmoveFixed; // char netname[MAX_NETNAME]; int maxHealth; // for handicapping int enterTime; // level.time the client entered the game playerTeamState_t teamState; // status in teamplay games int voteCount; // to prevent people from constantly calling votes int teamVoteCount; // to prevent people from constantly calling votes qboolean teamInfo; // send team overlay updates? int homingMissle; // is homing missle on for the client } clientPersistant_t;
You must be wondering why I am using int when I can use a boolean. That's because in the code I am also introducing different types of homing missiles. Their think functions are different. I will be explaining only the basic homing missile code here.
Once we have placed a varible here, we must initialize it with a default value whenever a new player is created. This is done in function ClientBegin(...) in file g_client.c as shown below.
void ClientBegin( int clientNum ) { gentity_t *ent; ........... ent->client = client; client->pers.homingMissle = 0; client->pers.connected = CON_CONNECTED; client->pers.enterTime = level.time; ........... // count current clients and rank for scoreboard CalculateRanks(); }
Now, we have to take input from the player during the game and set it to the homingMissile variable. If you have played Quake 3, you will know that commands can be given by the sequence "Press '~'. Then give command as "/CommandName command-parameters(if any)". So lets say our command name is homing.
We will not be using any parameters with the command. So this variable can be toggled within its value-range. The range used in this code is from 0 to 5. i.e. When the player intiates game the value is 0. Then when player gives homing command, the value is 1. Thereafter, 2,3,4,5 and finally after 5 it will be back to 0.
To achieve such functionality, we will have to introduce our command in the file g_cmds.c.This we do by modifying the method ClientCommand(...) in this file.
void ClientCommand( int clientNum ) { gentity_t *ent; ............ else if (Q_stricmp (cmd, "stats") == 0) Cmd_Stats_f( ent ); else if (Q_stricmp (cmd, "homing") == 0) Cmd_SetHoming_f (ent); else trap_SendServerCommand( clientNum, va("print \"unknown cmd %s\n\"", cmd ) ); }
As you can see we also used a new method Cmd_SetHoming_f(...). This is declared as shown below
//New method added void Cmd_SetHoming_f (gentity_t *ent) { //0 -> off //1 -> Constant speed //2 -> Variable speed //3 -> Fireworks with varible speed //4 -> Fireworks with varible speed and wide angle //5 -> Fireworks with varible speed and all view if (ent->client->pers.homingMissle == 0) { trap_SendServerCommand( ent-g_entities, va("print \"Homing Missiles with constant speed are on.\n\"")); ent->client->pers.homingMissle = 1; } else if (ent->client->pers.homingMissle == 1) { trap_SendServerCommand( ent-g_entities, va("print \"Homing Missiles with variable speed are on.\n\"")); ent->client->pers.homingMissle = 2; } else if (ent->client->pers.homingMissle == 2) { trap_SendServerCommand( ent-g_entities, va("print \"Homing Missiles with variable speed and fireworks are on.\n\"")); ent->client->pers.homingMissle = 3; } else if (ent->client->pers.homingMissle == 3) { trap_SendServerCommand( ent-g_entities, va("print \"Homing Missiles with variable speed, fireworks and wide angle are on.\n\"")); ent->client->pers.homingMissle = 4; } else if (ent->client->pers.homingMissle == 4) { trap_SendServerCommand( ent-g_entities, va("print \"Homing Missiles with variable speed, fireworks and all view are on.\n\"")); ent->client->pers.homingMissle = 5; } else { trap_SendServerCommand( ent-g_entities, va("print \"Homing Missiles are off.\n\"")); ent->client->pers.homingMissle = 0; } }
So now whenever the player gives command "/homing", the values will be toggled within the range and appropriate behavior will be exhibited by the missiles. You can also bind some key say 'h' to the homing command. Give the command /bind h homing
As you can see, different values have different behaviors stated. The behavior for value=1 will be explained here, the rest will be briefly stated later.


E-Governance
Introduction
What is e-Government?
E-government is the use of information and communications technologies (ICT) to transform the traditional government by making it accessible, transparent, effective and accountable. E-government does not mean putting more computers on the desks of government officials. And e-government is more than just a government website on the Internet. Political, social, economic and technological aspects determine egovernance. It establishes a relationship between government officials and citizens, providing greater access to government information and services by making the government accessible online; promoting citizen participation by enabling citizens to interact more conveniently with government officials, such as by requesting government service and filing required documents through website; increasing government accountability by making its operations more transparent, thereby reducing the opportunities for corruption; and supporting development goals by providing business, rural and traditionally underserved communities with information, opportunities and communications capabilities. E-government is not only used in developed countries. Some of the most innovative uses of the Internet in governance are being successfully used in the developing countries, as well.
E-government will not be successful just only buying more computers and putting up websites. It’s not sufficient to automate administrative practices from the paper system to digital system. Rather, e-government is a process of transforming government; it requires planning, political will and a sustained dedication of resources. Success of egovernment will not be guaranteed with the mere purchase of advanced technology or the direct automation of complex procedures until it can increase the rate of citizen participation there by bringing about the greater effectiveness in government. Technology introduction can not change the mentality of bureaucrats who do not view the citizen as valued customer of government or an important participant in decisionmaking.
Why e-Governance?
We are in the process of building "New Nepal". "New Nepal " should not become only a popular slogan but really the "New Nepal" with all the positive values and aspirations of its citizens geared towards the peace and progress. There are many dimensions streamlined and drivers identified to make our "New Nepal" dreams come true. One of such dimensions is the reformation of the government. Governance and its service process should be well reengineered to fulfill the aspirations of its citizens. Information and Communication Technology (ICT) and its tools can help its effective and efficient transformation.
With the advent of the information age, the ways we work, study, and live have been experiencing dramatic changes. Due to the influence of economic and information globalization and the rise of the digital economy, governments are "reinventing" themselves to meet new expectations and the priorities of citizens and businesses. These dynamics are compelling many governments to create a new vision for its relationship with businesses and citizens and to create a new organizational structure to fulfill its mandate. E-Government can fulfill the mandate of government formulating a new vision of how government views its citizens, employees and businesses, and building a citizen-centered, service-oriented, public-participative government with efficient, accountable, transparent and performance government system. ICT based online service is the most democratic and unbiased service system. It offers equal opportunity to all races, genders, ethnic groups.
E-Government breaks the barrier of geographical diversity and makes the government services handy to all citizens at villages who are even not connected by roads and opens up many opportunities, provided Internet connectivity is available either through wireless communication, fiber optic cables, dial-ups, VSATs or whatever other medium.
Besides providing service to citizens, it’s important to empower and motivate government employees to expect better service from them. E-Governance should transform the government workers into empowered knowledge workers. Nepal should not miss the benefits of global economy and specially the benefits offered by Internet.
Strategic Objectives of e-Governance:
The strategic objective of e-governance is to support and simplify governance for all parties - government, citizens, businesses and its employees. The use of ICTs can connect all three parties and support processes and activities. There may be two major objectives of e-governance:
1. Service to the Public: This objective of e-government is to satisfactorily fulfill the public’s needs and expectations on the front-office side, by simplifying their interaction with various online services. The use of ICTs in government operations facilitates speedy, transparent, accountable, efficient and effective interaction with the public, citizens, business and other agencies.
2. Efficient Government: In the back-office, the objective of e-government in government operations is to facilitate a speedy, transparent, accountable, efficient and effective process for performing government administration activities. Significant cost savings (per transaction) in government operations can be the result.
For implementing these strategies into reality, government must be subjected to transformation.
The transformation process is not so easy and not so simple. It requires a coherent strategy and should begin with an examination of the nation’s regulatory environment and the ability of the population to make use of planned technologies. The primary driving factor for e-government reform should not be the potential it offers to save money and reformation does not mean cutting staff. The savings incurred from egovernment initiatives most often benefit the businesses and citizens utilizing the improved system more so than the government agencies that invested in them to begin with. In order to realize the benefits of transformation themselves, governments must develop a citizen-centric model involving key stakeholders outside of government— community, businesses, professional associations, scientists, academics and NGOs. Without their input and demand, even e-government projects that focus on internal government processes may not prove successful because citizens are unlikely to use a system that does not respond to their needs.
Process reform, leadership, strategic investment, collaboration and citizen participation are essential elements in the transformation process. Once government makes strategies to transform the governance process, it must prepare to meet the significant challenges and opportunities that will arise during implementation. The implementation process should address the issues of infrastructure development, law and public policy, e-literacy, accessibility, privacy, security and workforce issues. Awareness, education and rollout programs are also needed. To make the egovernance initiative successful, a good marketing program is required through out the country to encourage citizens to make use of them.


Removes a GPG key from the authenticated user's GitHub account. Requires that you are authenticated via Basic Auth or via OAuth with at least admin:gpg_key scope.
admin:gpg_key
DELETE /user/gpg_keys/:gpg_key_id
Status: 204 No Content


Unit tests for the messaging system. The classes in this package are JUnit unit tests designed to test various parts of the messaging system's functionality in isolation.


TorZillaPrint: Extra Tests |
| return to the main test |
| screen | |
|---|---|
| [clientRect] devicePixelRatio 1 | |
| [scrollY] devicePixelRatio 1 | |
| code based on work by Alex Catarineu 1 |
| [tor browser] chrome:// & resource:// | |
|---|---|
images |
|
| js | |
| css | |
| combined | |
| results |
| chrome:// | |
|---|---|
The chrome:// list from
privacycheck.sec.lrz.de was created from
all Firefox 10-62 releases, for Windows/Linux/Mac, and does not include any new resources which may be present in subsequent
releases. This test removed one item, chrome://global/content/minimal-xul.css , for stability purposes on this site.
| |
images |
|
| js | |
| css | |
| combined | |
| [alphabetically sorted] all | |
| chrome:// code based on work by privacycheck.sec.lrz.de |
| application language | ||
|---|---|---|
dtd 1 | ||
| dtd nullprinciple 2 | ||
| dom.properties 3 | ||
| MediaDocument.properties 3 | ||
| xmlparser.properties 3 | ||
| app language code based on work by Alex Catarineu here 1 and here 2 and z3t on HackerOne 3 |
| monsta font list | ||
|---|---|---|
| This is to show that without mitigation measures, font entropy is high: The list linked below, will include os lists, whitelists, and some unique fonts bundled with popular applications. In reality a much smaller list can be used without sacrificing much entropy. | ||
font list |
fonts_monsta | |
| fingerprintjs2 1 | ||
| font fallback 2 | ||
| monsta | ||
| font fallback [monsta] | ||
| code based on work by fingerprintjs2 1 and Arthur Edelstein 2 |
| widgets / form controls | |
|---|---|
one | |
| two | |
| one | |
| two | |


--- layout: default title: Posts by tag tagline: Find posts relating to tags ---
Use the links below to filter posts by tag.


Assignment
Assign
Dropdown link
Dropdown link
Title
Description
Add
For
Classroom1
Classroom2
Classroom3
Classroom1
Classroom2
Classroom3
Points
Classroom1
Classroom2
Classroom3
Due
Classroom1
Classroom2
Classroom3
Topic
Classroom1
Classroom2
Classroom3