|
My Project
|
Routines for emitting high-level (C) language syntax in a well formatted way. More...
#include "type.hh"
Go to the source code of this file.
Classes | |
| class | EmitXml |
| Base class (and interface) for pretty printing and XML markup of tokens. More... | |
| class | EmitNoXml |
| A trivial emitter that outputs syntax straight to the stream. More... | |
| class | TokenSplit |
| A token/command object in the pretty printing stream. More... | |
| class | circularqueue< _type > |
| A circular buffer template. More... | |
| class | EmitPrettyPrint |
| A generic source code pretty printer. More... | |
Routines for emitting high-level (C) language syntax in a well formatted way.


interface DBInterface
Database.
Methods
| DAL |
dal()
Return a DAL instance. |
|
| array |
getConfig()
Return the configuration. |
|
| PDO |
getPDO()
Return the database instance. |
|
| Query |
query(string $sql, array $args = array())
Execute an SQL query. |
|
| integer |
id()
Return the last inserted id. |
|
|
inTransaction()
Check if we are in a transaction. |
||
|
beginTransaction()
Start a new SQL transaction. |
||
|
commit()
Commit the SQL transaction. |
||
|
rollback()
Roll back the SQL transaction. |
Details
at line 15
public DAL
dal()
Return a DAL instance.
at line 22
public array
getConfig()
Return the configuration.
at line 29
public PDO
getPDO()
Return the database instance.
at line 38
public Query
query(string $sql, array $args = array())
Execute an SQL query.
at line 45
public integer
id()
Return the last inserted id.
at line 52
public
inTransaction()
Check if we are in a transaction.
at line 58
public
beginTransaction()
Start a new SQL transaction.
at line 64
public
commit()
Commit the SQL transaction.
at line 70
public
rollback()
Roll back the SQL transaction.


{% load avatar_tags %}
If a participant in the competition has referred you to the {{ CHALLENGE.name }}, please enter the email address they use for the competition here. If you complete the setup and earn at least {{ active_threshold_points }} points, you will both be awarded {{ referral_points }} extra points!


Register
Log in
Manage
Messages
Send
Manage
Manage your account settings
Profile
Password
Change profile details
Username
Email
Phone number
Save changes
Change password
Old password
New password
Confirm password
Save changes


Hello!!!
Click to spice the page up a little bit!!!
PAGE
TRANFORMUS!!!
Ok, so let's get started!!!
To proceed, please choose a theme which suits you:
DAY
NIGHT


We extend blockchain!
- reintermediate sticky interfaces
- benchmark collaborative e-markets
- empower distributed eyeballs
- strategize distributed metrics
- expedite global experiences
- syndicate cross-platform web services
- matrix world-class architectures
- deploy sexy ROI


You have to figure it out.
Tutorial/How to
play
You have to figure it out.
HEY.hold(more)@
<anonymous>
You have to find italisization.
E
tile_black
font
Hello, can you, like, find the code? Thanks.
Here's the link.
Also, I have
a secret to tell you
, please go to Console, put "
m.c.29fd0a29.p
" and decode the output. I can't tell you how.


See: Description
| Interface | Description |
|---|---|
| DurationWrapper.DurationFactory |
Interface for defining conversion from general numeric type to a Duration.
|
| InstantWrapper.InstantFactory |
Interface for defining conversion from general numeric type to a Instant.
|
| Class | Description |
|---|---|
| DateTime |
ISO-8601 compliant custom scalar.
|
| DateTimeCoercing |
Coercion support for
DateTime custom scalar class. |
| DurationWrapper<T extends DurationWrapper> |
Wrapper for a Duration.
|
| EpochMilliseconds |
Custom scalar representing a specific number of milliseconds since epoch
|
| EpochSeconds |
Custom scalar representing a specific number of seconds since epoch
|
| InstantWrapper<T extends InstantWrapper> |
Wrapper for a Instant.
|
| Milliseconds |
Custom scalar representing a specific length of time in milliseconds
|
| Minutes |
Custom scalar representing a specific length of time in minutes
|
| NumberCoercing<T extends NumberCoercing.NumberWrapper> |
Base implementation of the
graphql-java Coercing interface to deal with varying
generic numeric types. |
| NumberCoercing.NumberWrapper |
Base class for numeric wrapper types.
|
| PredefinedScalars |
Registration for all of the predefined scalars that ship with this library.
|
| Seconds |
Custom scalar representing a specific length of time in seconds
|
| StringCoercing<T> |
Base class for implementations of
Coercing interface that expect String literals |


|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
public interface Project
ProjectHome
| Attribute Name | Attribute Value |
|---|---|
| atg.repository.query.SupportedQueries | and, comparison, constant, inFolders, includesAny, includes, includesItem, isNull, matchId, not, or, patternMatch, property, propertyOf, unconstrained, patternMatch, textSearch |
| categoryAdvancedPriority | 60 |
| categoryAssetsPriority | 30 |
| categoryBasicsPriority | 10 |
| categoryDeploymentPriority | 40 |
| categoryHistoryPriority | 50 |
| categoryInfoPriority | 70 |
| categoryStatusPriority | 20 |
| references | [:process.project] |
| resourceBundle | atg.epub.PublishingRepositoryResources |
Property assets ("Assets"): Set
getAssets()
| Attribute Name | Attribute Value |
|---|---|
| resourceBundle | atg.epub.PublishingRepositoryResources |
Property checkedIn ("Checked in"): boolean
isCheckedIn()
setCheckedIn(boolean)
| Attribute Name | Attribute Value |
|---|---|
| resourceBundle | atg.epub.PublishingRepositoryResources |
Property checkedInAssets ("Checked in assets"): Set
getCheckedInAssets()
| Attribute Name | Attribute Value |
|---|---|
| resourceBundle | atg.epub.PublishingRepositoryResources |
Property checkinDate ("Checkin date"): Timestamp
getCheckinDate()
setCheckinDate(java.sql.Timestamp)
| Attribute Name | Attribute Value |
|---|---|
| resourceBundle | atg.epub.PublishingRepositoryResources |
Property completionDate ("Completion date"): Timestamp
getCompletionDate()
setCompletionDate(java.sql.Timestamp)
| Attribute Name | Attribute Value |
|---|---|
| resourceBundle | atg.epub.PublishingRepositoryResources |
Property creationDate ("Creation date"): Timestamp
getCreationDate()
setCreationDate(java.sql.Timestamp)
| Attribute Name | Attribute Value |
|---|---|
| resourceBundle | atg.epub.PublishingRepositoryResources |
Property creator ("Creator"): RepositoryItem
getCreator()
setCreator(atg.repository.RepositoryItem)
| Attribute Name | Attribute Value |
|---|---|
| resourceBundle | atg.epub.PublishingRepositoryResources |
Property deploymentApprovalTimes ("Deployment approval times"): Map
getDeploymentApprovalTimes()
setDeploymentApprovalTimes(java.util.Map)
| Attribute Name | Attribute Value |
|---|---|
| resourceBundle | atg.epub.PublishingRepositoryResources |
Property deploymentIds ("Deployment ids"): Map
getDeploymentIds()
setDeploymentIds(java.util.Map)
| Attribute Name | Attribute Value |
|---|---|
| resourceBundle | atg.epub.PublishingRepositoryResources |
Property deploymentSnapshots ("Deployment target snapshots"): Map
getDeploymentSnapshots()
setDeploymentSnapshots(java.util.Map)
| Attribute Name | Attribute Value |
|---|---|
| resourceBundle | atg.epub.PublishingRepositoryResources |
Property deploymentStatuses ("Deployment target statuses"): Map
getDeploymentStatuses()
setDeploymentStatuses(java.util.Map)
| Attribute Name | Attribute Value |
|---|---|
| resourceBundle | atg.epub.PublishingRepositoryResources |
Property deploymentTimes ("Deployment times"): Map
getDeploymentTimes()
setDeploymentTimes(java.util.Map)
| Attribute Name | Attribute Value |
|---|---|
| resourceBundle | atg.epub.PublishingRepositoryResources |
Property description ("Description"): String
getDescription()
setDescription(java.lang.String)
| Attribute Name | Attribute Value |
|---|---|
| resourceBundle | atg.epub.PublishingRepositoryResources |
Property displayName ("Name"): String
getDisplayName()
setDisplayName(java.lang.String)
| Attribute Name | Attribute Value |
|---|---|
| resourceBundle | atg.epub.PublishingRepositoryResources |
Property editable ("Editable"): boolean
isEditable()
setEditable(boolean)
| Attribute Name | Attribute Value |
|---|---|
| resourceBundle | atg.epub.PublishingRepositoryResources |
Property history ("History"): List
of History
getHistory()
setHistory(java.util.List)
| Attribute Name | Attribute Value |
|---|---|
| resourceBundle | atg.epub.PublishingRepositoryResources |
Property id ("Project id"): String
getId()
setId(java.lang.String)
| Attribute Name | Attribute Value |
|---|---|
| resourceBundle | atg.epub.PublishingRepositoryResources |
Property locked ("Locked"): boolean
isLocked()
setLocked(boolean)
| Attribute Name | Attribute Value |
|---|---|
| resourceBundle | atg.epub.PublishingRepositoryResources |
Property status ("Status"): ProjectEnumStatus
getStatus()
setStatus(atg.epub.project.ProjectEnumStatus)
| Attribute Name | Attribute Value |
|---|---|
| resourceBundle | atg.epub.PublishingRepositoryResources |
Property statusDetail ("Status detail"): String
getStatusDetail()
setStatusDetail(java.lang.String)
| Attribute Name | Attribute Value |
|---|---|
| resourceBundle | atg.epub.PublishingRepositoryResources |
Property version ("Version"): int
getVersion()
| Attribute Name | Attribute Value |
|---|---|
| resourceBundle | atg.epub.PublishingRepositoryResources |
Property workflow ("Workflow"): RepositoryItem
getWorkflow()
| Attribute Name | Attribute Value |
|---|---|
| resourceBundle | atg.epub.PublishingRepositoryResources |
Property workflowId ("Workflow id"): String
getWorkflowId()
setWorkflowId(java.lang.String)
| Attribute Name | Attribute Value |
|---|---|
| resourceBundle | atg.epub.PublishingRepositoryResources |
Property workspace ("Workspace"): String
getWorkspace()
setWorkspace(java.lang.String)
| Attribute Name | Attribute Value |
|---|---|
| resourceBundle | atg.epub.PublishingRepositoryResources |
| Method Summary | |
|---|---|
boolean |
_isMutable()
Returns true if the item is mutable. |
void |
abandon()
This method will abandon the project so it can never be deployed |
void |
acquireAssetLocks()
Acquires asset locks for all assets in the Project. |
void |
addAsset(java.lang.String[] pAssetURIs)
Adds an asset to this project |
History |
addHistory(java.lang.String pAction,
java.lang.String pActionType,
java.lang.String pDescription,
java.util.Collection pParams)
Adds a history element/note to this project |
void |
approveDeployment()
Flags the project as approved for deployment to all known deployment targets. |
void |
approveDeployment(Target pTarget)
Flags the project as approved for deployment to the specified deployment target. |
boolean |
assetInProject(VersionManagerURI pAssetURI)
Returns true if the specified asset already exists in this project |
void |
checkin(java.lang.String pUsername,
java.lang.String pComment)
Checks in the assets in the workspace associated with this project |
void |
cloneAssets(Project pSourceProject)
Checks out all the assets that are in the source project, into this project |
void |
complete()
This method will complete a project by setting its completionDate, editable flag to false, and status flag to completed |
void |
complete(boolean pFireCompleteMessage)
This method will complete a project by setting its completionDate, editable flag to false, and status flag to completed |
void |
copyTo(Project destination)
Copies the property values of this instance to another instance of the same data type. |
void |
delete(int pMessageStatus,
java.lang.String pInitiatorID)
This method will delete a project, its associated workflow, and associated workspace. |
void |
delete(java.lang.String pInitiatorID)
This method will delete a project, its associated workflow, and associated workspace. |
void |
discardAsset(java.lang.String[] pAssetURIs)
Removes an asset from the project completely. |
java.util.Collection |
findCrossProjectDeleteDependencies(java.util.Collection pCandidateProjects)
This method is only valid for Projects that are not checked-in, thus only valid in the late check-in work-flow model. |
java.util.Set |
getAssets()
Getter for property assets ("Assets") |
boolean |
getAssetsUpToDate()
Checks for asset conflicts |
java.util.Set |
getCheckedInAssets()
Getter for property checkedInAssets ("Checked in assets") |
java.sql.Timestamp |
getCheckinDate()
Getter for property checkinDate ("Checkin date") |
java.sql.Timestamp |
getCompletionDate()
Getter for property completionDate ("Completion date") |
java.sql.Timestamp |
getCreationDate()
Getter for property creationDate ("Creation date") |
RepositoryItem |
getCreator()
Getter for property creator ("Creator") |
java.util.Map |
getDeploymentApprovalTimes()
Getter for property deploymentApprovalTimes ("Deployment approval times") |
java.util.Map |
getDeploymentIds()
Getter for property deploymentIds ("Deployment ids") |
java.util.Map |
getDeploymentSnapshots()
Getter for property deploymentSnapshots ("Deployment target snapshots") |
java.util.Map |
getDeploymentStatuses()
Getter for property deploymentStatuses ("Deployment target statuses") |
java.util.Map |
getDeploymentTimes()
Getter for property deploymentTimes ("Deployment times") |
java.lang.String |
getDescription()
Getter for property description ("Description") |
java.lang.String |
getDisplayName()
Getter for property displayName ("Name") |
boolean |
getHasCheckedIn()
Returns true if the value of property checkedIn is null. |
boolean |
getHasEditable()
Returns true if the value of property editable is null. |
boolean |
getHasLocked()
Returns true if the value of property locked is null. |
boolean |
getHasVersion()
Returns true if the value of property version is null. |
java.util.List |
getHistory()
Getter for property history ("History") |
java.lang.String |
getId()
Getter for property id ("Project id") |
ProjectEnumStatus |
getStatus()
Getter for property status ("Status") |
java.lang.String |
getStatusDetail()
Getter for property statusDetail ("Status detail") |
int |
getVersion()
Getter for property version ("Version") |
RepositoryItem |
getWorkflow()
Getter for property workflow ("Workflow") |
java.lang.String |
getWorkflowId()
Getter for property workflowId ("Workflow id") |
java.lang.String |
getWorkspace()
Getter for property workspace ("Workspace") |
boolean |
isAssetsUpToDate()
Checks for asset conflicts |
boolean |
isCheckedIn()
Getter for property checkedIn ("Checked in") |
boolean |
isEditable()
Getter for property editable ("Editable") |
boolean |
isLocked()
Getter for property locked ("Locked") |
boolean |
isRemoved()
Returns true if the underlying object has been removed. |
void |
prepareInstanceForWrite()
This must be called if the application intends to both read and write the instance in the same transaction, and it intends to do a read before doing a write. |
void |
releaseAssetLocks()
If the project has any locked assets and is in a state where those asset locks are no longer necessary, then this method will release those asset locks. |
void |
renounce(java.lang.String pComment)
Flags the project as renounced for all known deployment targets. |
void |
renounce(Target pTarget,
java.lang.String pComment)
Flags the project as renounced for the specified deployment target. |
void |
reopen()
This method is only valid for Projects that are not checked-in, thus only valid in the late check-in work-flow model. |
Workspace |
resolveWorkspace()
A convenience method for resolving the Workspace named in getWorkspace(). |
void |
revertAsset(VersionManagerURI pAssetURI,
java.lang.String pVersion)
Reverts an asset in the project to the version which was originally checked out. |
void |
revertDeployment(Target pTarget,
java.lang.String pInitiatorID,
java.util.Calendar pDeployTime)
This method is only valid for Projects that are not checked-in, thus only valid in the late check-in work-flow model. |
void |
revertDeployments(java.lang.String pInitiatorID,
java.util.Calendar pDeployTime)
This method is only valid for Projects that are not checked-in, thus only valid in the late check-in work-flow model. |
void |
revokeDeploymentApproval(Target pTarget)
Revokes approval of the Project for deployment to the specified deployment Target. |
void |
setCheckedIn(boolean value)
Setter for property checkedIn ("Checked in"). |
void |
setCheckinDate(java.sql.Timestamp value)
Setter for property checkinDate ("Checkin date"). |
void |
setCompletionDate(java.sql.Timestamp value)
Setter for property completionDate ("Completion date"). |
void |
setCreationDate(java.sql.Timestamp value)
Setter for property creationDate ("Creation date"). |
void |
setCreator(RepositoryItem value)
Setter for property creator ("Creator"). |
void |
setDeploymentApprovalTimes(java.util.Map value)
Setter for property deploymentApprovalTimes ("Deployment approval times"). |
void |
setDeploymentIds(java.util.Map value)
Setter for property deploymentIds ("Deployment ids"). |
void |
setDeploymentSnapshots(java.util.Map value)
Setter for property deploymentSnapshots ("Deployment target snapshots"). |
void |
setDeploymentStatuses(java.util.Map value)
Setter for property deploymentStatuses ("Deployment target statuses"). |
void |
setDeploymentTimes(java.util.Map value)
Setter for property deploymentTimes ("Deployment times"). |
void |
setDescription(java.lang.String value)
Setter for property description ("Description"). |
void |
setDisplayName(java.lang.String value)
Setter for property displayName ("Name"). |
void |
setEditable(boolean value)
Setter for property editable ("Editable"). |
void |
setHasCheckedIn(boolean value)
If this is set to false, then the underlying value of property checkedIn is set to null. |
void |
setHasEditable(boolean value)
If this is set to false, then the underlying value of property editable is set to null. |
void |
setHasLocked(boolean value)
If this is set to false, then the underlying value of property locked is set to null. |
void |
setHistory(java.util.List value)
Setter for property history ("History"). |
void |
setId(java.lang.String value)
Setter for property id ("Project id"). |
void |
setLocked(boolean value)
Setter for property locked ("Locked"). |
void |
setStatus(ProjectEnumStatus value)
Setter for property status ("Status"). |
void |
setStatusDetail(java.lang.String value)
Setter for property statusDetail ("Status detail"). |
void |
setWorkflowId(java.lang.String value)
Setter for property workflowId ("Workflow id"). |
void |
setWorkspace(java.lang.String value)
Setter for property workspace ("Workspace"). |
void |
updateDeploymentIds(java.lang.String pTargetID,
java.lang.String pDeploymentId)
Updates the deploymentIds Map properties with the given value. |
void |
updateDeploymentSnapshots(java.lang.String pTargetID,
java.lang.String pSnapshotID)
Updates the deploymentSnapshots Map properties with the given value. |
void |
updateDeploymentStatuses(java.lang.String pTargetID,
java.lang.Integer pApprovalFlag)
Updates the deploymentStatuses Map property with the given value. |
void |
updateDeploymentTimes(java.lang.String pTargetID,
java.sql.Timestamp pDeploymentTime)
Updates the deploymentTimes Map properties with the given value. |
void |
writeInstance()
This must be called after modifying an instance with a persistent implementation to guarantee that all changes are made persistent and visible to queries. |
| Methods inherited from interface javax.ejb.EJBLocalObject |
|---|
getEJBLocalHome, getPrimaryKey, isIdentical, remove |
| Method Detail |
|---|
java.util.Set getAssets() throws javax.ejb.EJBException
Set
javax.ejb.EJBException
boolean isCheckedIn() throws javax.ejb.EJBException
javax.ejb.EJBException
boolean getHasCheckedIn() throws javax.ejb.EJBException
javax.ejb.EJBException
void setCheckedIn(boolean value) throws javax.ejb.EJBException
writeInstance()
method must be called afterwards to insure that any changes are made persistent (if the instance is backed by a persistent implementation). The prepareInstanceForWrite()
method may need to be called before making any changes.
value
- boolean
javax.ejb.EJBException
void setHasCheckedIn(boolean value) throws javax.ejb.EJBException
javax.ejb.EJBException
java.util.Set getCheckedInAssets() throws javax.ejb.EJBException
Set
javax.ejb.EJBException
java.sql.Timestamp getCheckinDate() throws javax.ejb.EJBException
Timestamp
javax.ejb.EJBException
void setCheckinDate(java.sql.Timestamp value) throws javax.ejb.EJBException
writeInstance()
method must be called afterwards to insure that any changes are made persistent (if the instance is backed by a persistent implementation). The prepareInstanceForWrite()
method may need to be called before making any changes.
value
- Timestamp
javax.ejb.EJBException
java.sql.Timestamp getCompletionDate() throws javax.ejb.EJBException
Timestamp
javax.ejb.EJBException
void setCompletionDate(java.sql.Timestamp value) throws javax.ejb.EJBException
writeInstance()
method must be called afterwards to insure that any changes are made persistent (if the instance is backed by a persistent implementation). The prepareInstanceForWrite()
method may need to be called before making any changes.
value
- Timestamp
javax.ejb.EJBException
java.sql.Timestamp getCreationDate() throws javax.ejb.EJBException
Timestamp
javax.ejb.EJBException
void setCreationDate(java.sql.Timestamp value) throws javax.ejb.EJBException
writeInstance()
method must be called afterwards to insure that any changes are made persistent (if the instance is backed by a persistent implementation). The prepareInstanceForWrite()
method may need to be called before making any changes.
value
- Timestamp
javax.ejb.EJBException
RepositoryItem getCreator() throws javax.ejb.EJBException
RepositoryItem
javax.ejb.EJBException
void setCreator(RepositoryItem value) throws javax.ejb.EJBException
writeInstance()
method must be called afterwards to insure that any changes are made persistent (if the instance is backed by a persistent implementation). The prepareInstanceForWrite()
method may need to be called before making any changes.
value
- RepositoryItem
javax.ejb.EJBException
java.util.Map getDeploymentApprovalTimes() throws javax.ejb.EJBException
Map
javax.ejb.EJBException
void setDeploymentApprovalTimes(java.util.Map value) throws javax.ejb.EJBException
writeInstance()
method must be called afterwards to insure that any changes are made persistent (if the instance is backed by a persistent implementation). The prepareInstanceForWrite()
method may need to be called before making any changes.
value
- Map
javax.ejb.EJBException
java.util.Map getDeploymentIds() throws javax.ejb.EJBException
Map
javax.ejb.EJBException
void setDeploymentIds(java.util.Map value) throws javax.ejb.EJBException
writeInstance()
method must be called afterwards to insure that any changes are made persistent (if the instance is backed by a persistent implementation). The prepareInstanceForWrite()
method may need to be called before making any changes.
value
- Map
javax.ejb.EJBException
java.util.Map getDeploymentSnapshots() throws javax.ejb.EJBException
Map
javax.ejb.EJBException
void setDeploymentSnapshots(java.util.Map value) throws javax.ejb.EJBException
writeInstance()
method must be called afterwards to insure that any changes are made persistent (if the instance is backed by a persistent implementation). The prepareInstanceForWrite()
method may need to be called before making any changes.
value
- Map
javax.ejb.EJBException
java.util.Map getDeploymentStatuses() throws javax.ejb.EJBException
Map
javax.ejb.EJBException
void setDeploymentStatuses(java.util.Map value) throws javax.ejb.EJBException
writeInstance()
method must be called afterwards to insure that any changes are made persistent (if the instance is backed by a persistent implementation). The prepareInstanceForWrite()
method may need to be called before making any changes.
value
- Map
javax.ejb.EJBException
java.util.Map getDeploymentTimes() throws javax.ejb.EJBException
Map
javax.ejb.EJBException
void setDeploymentTimes(java.util.Map value) throws javax.ejb.EJBException
writeInstance()
method must be called afterwards to insure that any changes are made persistent (if the instance is backed by a persistent implementation). The prepareInstanceForWrite()
method may need to be called before making any changes.
value
- Map
javax.ejb.EJBException
java.lang.String getDescription() throws javax.ejb.EJBException
String
javax.ejb.EJBException
void setDescription(java.lang.String value) throws javax.ejb.EJBException
writeInstance()
method must be called afterwards to insure that any changes are made persistent (if the instance is backed by a persistent implementation). The prepareInstanceForWrite()
method may need to be called before making any changes.
value
- String
javax.ejb.EJBException
java.lang.String getDisplayName() throws javax.ejb.EJBException
String
javax.ejb.EJBException
void setDisplayName(java.lang.String value) throws javax.ejb.EJBException
writeInstance()
method must be called afterwards to insure that any changes are made persistent (if the instance is backed by a persistent implementation). The prepareInstanceForWrite()
method may need to be called before making any changes.
value
- String
javax.ejb.EJBException
boolean isEditable() throws javax.ejb.EJBException
javax.ejb.EJBException
boolean getHasEditable() throws javax.ejb.EJBException
javax.ejb.EJBException
void setEditable(boolean value) throws javax.ejb.EJBException
writeInstance()
method must be called afterwards to insure that any changes are made persistent (if the instance is backed by a persistent implementation). The prepareInstanceForWrite()
method may need to be called before making any changes.
value
- boolean
javax.ejb.EJBException
void setHasEditable(boolean value) throws javax.ejb.EJBException
javax.ejb.EJBException
java.util.List getHistory() throws javax.ejb.EJBException
List
of History
javax.ejb.EJBException
void setHistory(java.util.List value) throws javax.ejb.EJBException
writeInstance()
method must be called afterwards to insure that any changes are made persistent (if the instance is backed by a persistent implementation). The prepareInstanceForWrite()
method may need to be called before making any changes.
value
- List
of History
javax.ejb.EJBException
java.lang.String getId() throws javax.ejb.EJBException
String
javax.ejb.EJBException
void setId(java.lang.String value) throws javax.ejb.EJBException
writeInstance()
method must be called afterwards to insure that any changes are made persistent (if the instance is backed by a persistent implementation). The prepareInstanceForWrite()
method may need to be called before making any changes.
value
- String
javax.ejb.EJBException
boolean isLocked() throws javax.ejb.EJBException
javax.ejb.EJBException
boolean getHasLocked() throws javax.ejb.EJBException
javax.ejb.EJBException
void setLocked(boolean value) throws javax.ejb.EJBException
writeInstance()
method must be called afterwards to insure that any changes are made persistent (if the instance is backed by a persistent implementation). The prepareInstanceForWrite()
method may need to be called before making any changes.
value
- boolean
javax.ejb.EJBException
void setHasLocked(boolean value) throws javax.ejb.EJBException
javax.ejb.EJBException
ProjectEnumStatus getStatus() throws javax.ejb.EJBException
ProjectEnumStatus
javax.ejb.EJBException
void setStatus(ProjectEnumStatus value) throws javax.ejb.EJBException
writeInstance()
method must be called afterwards to insure that any changes are made persistent (if the instance is backed by a persistent implementation). The prepareInstanceForWrite()
method may need to be called before making any changes.
value
- ProjectEnumStatus
javax.ejb.EJBException
java.lang.String getStatusDetail() throws javax.ejb.EJBException
String
javax.ejb.EJBException
void setStatusDetail(java.lang.String value) throws javax.ejb.EJBException
writeInstance()
method must be called afterwards to insure that any changes are made persistent (if the instance is backed by a persistent implementation). The prepareInstanceForWrite()
method may need to be called before making any changes.
value
- String
javax.ejb.EJBException
int getVersion() throws javax.ejb.EJBException
javax.ejb.EJBException
boolean getHasVersion() throws javax.ejb.EJBException
javax.ejb.EJBException
RepositoryItem getWorkflow() throws javax.ejb.EJBException
RepositoryItem
javax.ejb.EJBException
java.lang.String getWorkflowId() throws javax.ejb.EJBException
String
javax.ejb.EJBException
void setWorkflowId(java.lang.String value) throws javax.ejb.EJBException
writeInstance()
method must be called afterwards to insure that any changes are made persistent (if the instance is backed by a persistent implementation). The prepareInstanceForWrite()
method may need to be called before making any changes.
value
- String
javax.ejb.EJBException
java.lang.String getWorkspace() throws javax.ejb.EJBException
String
javax.ejb.EJBException
void setWorkspace(java.lang.String value) throws javax.ejb.EJBException
writeInstance()
method must be called afterwards to insure that any changes are made persistent (if the instance is backed by a persistent implementation). The prepareInstanceForWrite()
method may need to be called before making any changes.
value
- String
javax.ejb.EJBException
boolean isRemoved() throws javax.ejb.EJBException
javax.ejb.EJBException
void copyTo(Project destination) throws javax.ejb.EJBException
javax.ejb.EJBException
void writeInstance() throws javax.ejb.EJBException
javax.ejb.EJBException
void prepareInstanceForWrite() throws javax.ejb.EJBException
javax.ejb.EJBException
boolean _isMutable()
void checkin(java.lang.String pUsername, java.lang.String pComment) throws LockManagerException, VersionException, atg.workflow.process.action.VersionConflictException, TransactionDemarcationException, PublishingException, atg.epub.project.AssetLockException, javax.ejb.EJBException
pUsername
- A username to use for logging the checkinpComment
- An optional checkin comment
LockManagerException
- If a lock could not be acquired from the lock manager
VersionException
- If an error occurs in the version manager
atg.workflow.process.action.VersionConflictException
- If there is an asset conflict in any of the assets being checked in
TransactionDemarcationException
- If a transaction error occurs
PublishingException
- If there are unexpected errors, e.g. no associated workspace or the Project is checked-in when it should not be
atg.epub.project.AssetLockException
- If assets were already locked by another Project
javax.ejb.EJBException
- A system-level error occurredboolean isAssetsUpToDate() throws VersionException, javax.ejb.EJBException
VersionException
- If there is an error in the version manager
javax.ejb.EJBException
- A system-level error occurredboolean getAssetsUpToDate() throws VersionException, javax.ejb.EJBException
VersionException
- If there is an error in the version manager
javax.ejb.EJBException
- A system-level error occurredvoid complete(boolean pFireCompleteMessage) throws TransactionDemarcationException, WorkflowException, javax.ejb.FinderException, javax.jms.JMSException, javax.ejb.EJBException
pFireCompleteMessage
- true to fire the completed message, false to not
TransactionDemarcationException
- If a transaction error occurs
WorkflowException
- If a workflow error occurs while completing
javax.ejb.FinderException
- If the associated process cannot be found
javax.jms.JMSException
- If the project complete message cannot be sent
javax.ejb.EJBException
- A system-level error occurredvoid complete() throws TransactionDemarcationException, WorkflowException, javax.ejb.FinderException, javax.jms.JMSException, javax.ejb.EJBException
TransactionDemarcationException
- If a transaction error occurs
WorkflowException
- If a workflow error occurs while completing
javax.ejb.FinderException
- If the associated process cannot be found
javax.jms.JMSException
- If the project complete message cannot be sent
javax.ejb.EJBException
- A system-level error occurredvoid abandon() throws TransactionDemarcationException, WorkflowException, javax.ejb.FinderException, javax.jms.JMSException, javax.ejb.EJBException
TransactionDemarcationException
- If a transaction error occurs
WorkflowException
- If a workflow error occurs while completing
javax.ejb.FinderException
- If the associated process cannot be found
javax.jms.JMSException
- If the project complete message cannot be sent
javax.ejb.EJBException
- A system-level error occurredvoid cloneAssets(Project pSourceProject) throws RepositoryException, InvalidAssetException, VersionException, TransactionDemarcationException, LockManagerException, PublishingException, javax.ejb.EJBException
pSourceProject
- The source project which contains the assets that should be checked out in this project
RepositoryException
- If a repository exception occurs
InvalidAssetException
- If any of the asset URIs generated from the source project cannot be resolved
VersionException
- If a version manager error occurs
TransactionDemarcationException
- If a transaction error occurs
LockManagerException
- If an asset lock cannot be acquired
PublishingException
- If an error occurs in publishing
javax.ejb.EJBException
- A system-level error occurredHistory addHistory(java.lang.String pAction, java.lang.String pActionType, java.lang.String pDescription, java.util.Collection pParams) throws javax.ejb.CreateException, TransactionDemarcationException, javax.ejb.EJBException
pAction
- The action which is referenced for this elementpActionType
- The type of actionpDescription
- The description/note for this elementpParams
- Parameter for the history message eg. if revoking a projects from a target this could be the target ID
javax.ejb.CreateException
- If the history element cannot be created
TransactionDemarcationException
- If a transaction error occurs
javax.ejb.EJBException
- A system-level error occurredvoid delete(java.lang.String pInitiatorID) throws javax.ejb.RemoveException, VersionException, atg.deployment.common.DeploymentException, PublishingException, TransactionDemarcationException, javax.jms.JMSException, javax.ejb.EJBException
pInitiatorID
- Some identifier (typically Profile login) of who is issuing this call
javax.ejb.RemoveException
- If the project cannot be deleted from the repository
VersionException
- thrown if the VersionManager encounters errors with the associated workspace
atg.deployment.common.DeploymentException
- if there are errors confirming there are no pending deployments for the project
PublishingException
- if there are unexpected errors, e.g. no associated workspace or the Project is checked-in when it should not be
TransactionDemarcationException
javax.jms.JMSException
javax.ejb.EJBException
- A system-level error occurredvoid delete(int pMessageStatus, java.lang.String pInitiatorID) throws javax.ejb.RemoveException, VersionException, atg.deployment.common.DeploymentException, PublishingException, TransactionDemarcationException, javax.jms.JMSException, javax.ejb.EJBException
pMessageStatus
- The status to set into the delete project messagepInitiatorID
- Some identifier (typically Profile login) of who is issuing this call
javax.ejb.RemoveException
- If the project cannot be deleted from the repository
VersionException
- thrown if the VersionManager encounters errors with the associated workspace
atg.deployment.common.DeploymentException
- if there are errors confirming there are no pending deployments for the project
PublishingException
- if there are unexpected errors, e.g. no associated workspace or the Project is checked-in when it should not be
TransactionDemarcationException
javax.jms.JMSException
javax.ejb.EJBException
- A system-level error occurredvoid addAsset(java.lang.String[] pAssetURIs) throws InvalidAssetException, RepositoryException, VersionException, TransactionDemarcationException, LockManagerException, PublishingException, javax.ejb.EJBException
pAssetURIs
- An array of asset URIs to add to the project
InvalidAssetException
- If a URI specifies an invalid asset
RepositoryException
- If a repository error occurs
VersionException
- If a version manager error occurs
TransactionDemarcationException
- If a transaction error occurs
LockManagerException
- If an asset lock cannot be acquired
PublishingException
- If an error occurs in publishing
javax.ejb.EJBException
- A system-level error occurredboolean assetInProject(VersionManagerURI pAssetURI) throws InvalidAssetException, javax.ejb.EJBException
pAssetURI
- The URI of the asset to check if it is in this project
InvalidAssetException
- If the URI specifies an invalid asset
javax.ejb.EJBException
- A system-level error occurredvoid revertAsset(VersionManagerURI pAssetURI, java.lang.String pVersion) throws InvalidAssetException, VersionException, TransactionDemarcationException, RepositoryException, javax.ejb.EJBException
pAssetURI
- The URI of the asset to revertpVersion
- The version to revert to or null for latest version
InvalidAssetException
- If the supplied asset URI is invalid and cannot be resolved
VersionException
- If a version manager error occurs
TransactionDemarcationException
- If a transaction error occurs
RepositoryException
- If a repository error occurs
javax.ejb.EJBException
- A system-level error occurredvoid discardAsset(java.lang.String[] pAssetURIs) throws InvalidAssetException, PublishingException, VersionException, TransactionDemarcationException, javax.ejb.EJBException
pAssetURIs
- An array of asset URIs to be discarded
InvalidAssetException
- If the supplied asset URI is invalid and cannot be resolved
PublishingException
- If an asset cannot be discarded for some reason.
VersionException
- If a version manager error occurs
TransactionDemarcationException
- If a transaction error occurs
javax.ejb.EJBException
- A system-level error occurredvoid updateDeploymentStatuses(java.lang.String pTargetID, java.lang.Integer pApprovalFlag) throws javax.ejb.EJBException
pTargetID
- Target.getID() for the target to set a value forpApprovalFlag
- the value deployment status to set for the given target
javax.ejb.EJBException
- A system-level error occurredvoid updateDeploymentSnapshots(java.lang.String pTargetID, java.lang.String pSnapshotID) throws javax.ejb.EJBException
pTargetID
- Target.getID() for the target to set a value forpSnapshotID
- the value Snapshot ID to set for the given target
javax.ejb.EJBException
- A system-level error occurredvoid updateDeploymentTimes(java.lang.String pTargetID, java.sql.Timestamp pDeploymentTime) throws javax.ejb.EJBException
pTargetID
- Target.getID() for the target to set a value forpDeploymentTime
- when this project should be considered to be deployed.
javax.ejb.EJBException
- A system-level error occurredvoid updateDeploymentIds(java.lang.String pTargetID, java.lang.String pDeploymentId) throws javax.ejb.EJBException
pTargetID
- Target.getID() for the target to set a value forpDeploymentId
- the deployment id.
javax.ejb.EJBException
- A system-level error occurredWorkspace resolveWorkspace() throws PublishingException, VersionException, javax.ejb.EJBException
PublishingException
- if there is no associated workspace or the workspace could not be found
VersionException
- if the VersionManager encounters errors with the associated workspace
javax.ejb.EJBException
- A system-level error occurredvoid approveDeployment(Target pTarget) throws PublishingException, VersionException, atg.epub.project.AssetLockException, javax.ejb.EJBException
pTarget
- the deployment target to approve deployment of the Project to
PublishingException
- if there are unexpected errors, e.g. no associated workspace or the Project is checked-in when it should not be
VersionException
- when there are technical errors locking assets for the late-checkin model
atg.epub.project.AssetLockException
- if assets were already locked by another Project
javax.ejb.EJBException
- A system-level error occurredvoid approveDeployment() throws PublishingException, VersionException, atg.epub.project.AssetLockException, javax.ejb.EJBException
PublishingException
- if there are unexpected errors, e.g. no associated workspace or the Project is checked-in when it should not be
VersionException
- when there are technical errors locking assets for the late-checkin model
atg.epub.project.AssetLockException
- if assets were already locked by another Project
javax.ejb.EJBException
- A system-level error occurredvoid renounce(Target pTarget, java.lang.String pComment) throws PublishingException, javax.ejb.EJBException, javax.jms.JMSException
pTarget
- the deployment target to approve deployment of the Project topComment
- An optional comment
PublishingException
- if there are unexpected errors, e.g. no associated workspace or the Project is checked-in when it should not be
javax.ejb.EJBException
- when there are technical errors.
javax.jms.JMSException
- when there are error sending JMS message about this operationvoid renounce(java.lang.String pComment) throws PublishingException, javax.ejb.EJBException, javax.jms.JMSException
pComment
- An optional checkin comment
PublishingException
- if there are unexpected errors, e.g. no associated workspace or the Project is checked-in when it should not be
javax.ejb.EJBException
- when there are technical errors.
javax.jms.JMSException
- when there are error sending JMS message about this operationvoid acquireAssetLocks() throws PublishingException, VersionException, atg.epub.project.AssetLockException, javax.ejb.EJBException
PublishingException
- if there are unexpected errors, e.g. no associated workspace or the Project is checked-in when it should not be
VersionException
- when there are technical errors locking assets for the late-checkin model
atg.epub.project.AssetLockException
- if assets were already locked by another Project
javax.ejb.EJBException
- A system-level error occurredvoid releaseAssetLocks() throws PublishingException, VersionException, javax.ejb.EJBException
PublishingException
- if there are unexpected errors, e.g. no associated workspace or the Project is checked-in when it should not be
VersionException
- when there are technical errors unlocking assets for the late-checkin model
javax.ejb.EJBException
- A system-level error occurredvoid revokeDeploymentApproval(Target pTarget) throws PublishingException, javax.jms.JMSException, TransactionDemarcationException, javax.ejb.EJBException
pTarget
- the Target to revoke deployment approval for
PublishingException
- if there are unexpected errors, e.g. no associated workspace or the Project is checked-in when it should not be
javax.jms.JMSException
- if there were errors advancing any work-flows waiting an approved deployment
TransactionDemarcationException
- if there are system level transaction errors
javax.ejb.EJBException
- A system-level error occurredvoid reopen() throws PublishingException, VersionException, javax.ejb.EJBException
PublishingException
- if there are unexpected errors, e.g. no associated workspace or the Project is checked-in when it should not be
VersionException
- if the VersionManager encounters errors with the associated workspace
javax.ejb.EJBException
- A system-level error occurredvoid revertDeployment(Target pTarget, java.lang.String pInitiatorID, java.util.Calendar pDeployTime) throws PublishingException, VersionException, atg.deployment.common.DeploymentException, javax.ejb.EJBException
pTarget
- the deployment target to revert this Project frompInitiatorID
- some identifier (typically Profile login) of who is issuing this callpDeployTime
- a specific time to run the deployment, or NULL if run as soon as possible
PublishingException
- if there are unexpected errors, e.g. no associated workspace or the Project is checked-in when it should not be
VersionException
- if there are errors performing the revert proper
atg.deployment.common.DeploymentException
- if there are errors confirming there are no pending deployments for the project
javax.ejb.EJBException
- A system-level error occurredvoid revertDeployments(java.lang.String pInitiatorID, java.util.Calendar pDeployTime) throws PublishingException, VersionException, atg.deployment.common.DeploymentException, javax.ejb.EJBException
pInitiatorID
- some identifier (typically Profile login) of who is issuing this callpDeployTime
- a specific time to run the deployment, or NULL if run as soon as possible
PublishingException
- if there are unexpected errors, e.g. no associated workspace or the Project is checked-in when it should not be
VersionException
- if there are errors performing the revert proper
atg.deployment.common.DeploymentException
- if there are errors confirming there are no pending deployments for the project
javax.ejb.EJBException
- A system-level error occurredjava.util.Collection findCrossProjectDeleteDependencies(java.util.Collection pCandidateProjects) throws VersionException, TransactionDemarcationException, javax.ejb.EJBException
pCandidateProjects
- A collection of candidate projects to check against.
VersionException
- if there are errors performing the revert proper
TransactionDemarcationException
- If a transaction error occurs
javax.ejb.EJBException
- A system-level error occurred
|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |


?m
JARDIN
BOTANICO
NACIONAL
̉DR.
RAFAEL
M.
MOSCOSO"
SANTO
DOMINGO,
REPUBLICA
DOMINICANA
15639
NO__FAMILIA_
Andropogon
glomeratus(Vlfalt.
)1SP
Republica
Dominicana:
Prov.
La
Vega:
Southeast
of
Bonao,
Loma
La
Peguera
azfe
:
Falcombridge
Dominicana
mine
locality
hill
near
entry,
with
Radio
Antennas
on
it:
Pinus
occidentalis
.
Acrophylla
shrub
understory.
18¡50'N
,
70
0
2
5'W,
alt.
800Ft.
July
28,
1981.
T.
Zanoni,
C.
Ramirez,
J.B.Watson.
M.
Mejia.
01362159
Legend -
Level of confidence that token is an accurately-transcribed word
extremely low
very low
low
undetermined
medium
high
very high


HBImageTableCell Class Reference
| Inherits from | PSTableCell |
|---|---|
| Conforms to | PSHeaderFooterView |
| Declared in | HBImageTableCell.h |
Overview
The HBImageTableCell
class in CepheiPrefs
provides a simple way to
display an image as a table cell, or a header or footer.
Specifier Parameters
| icon | Required. The file name of the image to display in the cell. |
|---|
If you use HBImageTableCell
as a header or footer with headerCellClass
or footerCellClass
, it will size automatically to fit the image. If you
use it as a cell with cellClass
, you must set the height yourself using
the height
key.
Example Usage
<!-- As a header (or footer): -->
<dict>
<key>cell</key>
<string>PSGroupCell</string>
<key>headerCellClass</key>
<string>HBImageTableCell</string>
<key>height</key>
<integer>100</integer>
<key>icon</key>
<string>logo.png</string>
</dict>
<!-- As a cell: -->
<dict>
<key>cellClass</key>
<string>HBImageTableCell</string>
<key>height</key>
<integer>100</integer>
<key>icon</key>
<string>logo.png</string>
</dict>


Kenlit will be a main focus for the NACOSTI Kenya Science Week Workshop on Data Science. Yould will need to install free software on your machine to follow the practical sessions. Please follow the instructions below.
The workshop will provide an introduction to data science for those who are new to the subject and welcomes people of all abilities. We also aim to cater for more experienced data scientist who are already working in R or Python.
Please follow the instructions below carefully. Additional instructions for more experienced participants are marked as optional.
The Lens Database. Create a free account at the Lens https://www.lens.org/ 1a. Optionally ask for a free token from the Lens for the session on accessing data with an API but it is not formally needed for the workshop. This will be of interest to participants who have worked with APIs before.
Tableau Public. Sign up for a Tableau Public account https://public.tableau.com/en-us/s/ and download the Tableau Public software. You may optionally want to download the trial desktop version (requires a monthly subscription) but you can switch to the free Public version at the end of the trial.
We will use the free Open Refine to illustrate data cleaning tasks
Download the latest release of Open Refine from here http://openrefine.org/download.html
Open refine is a programme that runs in Chrome. So if you cannot open it set your browser to Chrome.
Optionally, R users may want to try out Chris Muir’s refinr
package https://github.com/ChrisMuir/refinr. A range of options for using Open Refine in Python seem to be available. However, it is unclear how many of these are actually working.
Gephi is an open source Java based programme. Download the version for your OS from here https://gephi.org/.
When you open Gephi you should see this:
Click on Les Miserables.gexf
and then OK and you should see this network:
If you do not see this then you will probably need to either fix the path to your Java installation or reinstall from scratch. To fix this kind of problem follow this thread [https://github.com/gephi/gephi/issues/1787]
To work with the data you will need to do the following
In the console run the following to install packages that we will be using. This can take a while so do it in advance.
install.packages("tidyverse") # a set of packages including dplyr, tidyr, stringr
install.packages("tidytext") # for text mining
install.packages("spacyr") # use python spaCy text mining in R
install.packages("reticulate") # run Python in RStudio
install.packages("widyr") # helper package to assist with creating network visualisations
install.packages("igraph")
install.packages("ggraph")
install.packages("cowplot")
install.packages("usethis")
# install from github
devtools::install_github("poldham/kenlitr")
devtools::install_github("poldham/places")
If you are interested in working with Python:
From the terminal and on the path to your python installation run the following
Start up your Python session and then run
You should be good to go.
This is optional for those with some experiene with R who are interested in running Python inside RStudio.
If you are an RStudio user and want to work in Python inside RStudio you may want to specify the version of Python to use. For example Mac OSX comes with Python 2.7 installed and it will default to that as the first version of Python it finds. To change this specify the path to the version of Python you want to use in the R console (not a code chunk). Adapt for your system.
library(reticulate)
use_python("/Library/Frameworks/Python.framework/Versions/3.7/bin/python3", required = T)
An alternative approach is to use the usethis::
then add the following using your path to python:
Now restart R for the change to take effect.
Note that there are good reasons not to do this. It is generally preferable to run Python in environments using Anaconda to avoid dependency clashes etc. However, for the purposes of the workshop this will be good enough.
Next, go to FILE > NEW FILE > PYTHON SCRIPT
Then use Python as normal. For more experienced users note that you can run python in R markdown code chunks by creating a code chunk with {python}
as you would for an R code chunk. However, the execution of each code chunk closes the Python session… so it is often easier to work with a Python script to keep the Python shell available for experimentation.
An example of this working in practice is below.
Note that the console is now showing that it is running Python with >>>
rather than >
for R.
Save python scripts as normal.


Unofficial bindings for node to libpng.
Please also refer to the Documentation.
This is a native Addon to NodeJS which delivers prebuilt binaries. Only some environments are supported:
| Node Version | Windows 64-Bit | Windows 32-Bit | Linux 64-Bit | Linux 32-Bit | OSX |
|---|---|---|---|---|---|
| Earlier | ✗ | ✗ | ✗ | ✗ | ✗ |
| Node 6 (Abi 48) | ✓ | ✓ | ✓ | ✗ | ✓ |
| Node 7 (Abi 51) | ✓ | ✓ | ✓ | ✗ | ✓ |
| Node 8 (Abi 57) | ✓ | ✓ | ✓ | ✗ | ✓ |
| Node 9 (Abi 59) | ✓ | ✓ | ✓ | ✗ | ✓ |
| Node 10 (Abi 64) | ✓ | ✓ | ✓ | ✗ | ✓ |
Multiple ways of reading and decoding PNG encoded images exist:
In order to use the Promise-based API, simply omit the third argument.
import { readPngFile } from "node-libpng";
async function readMyFile() {
const image = await readPngFile("path/to/image.png");
console.log(`Reading was successful. The dimensions of the image are ${image.width}x${image.height}.`);
}
If an error occured while reading the file or decoding the buffer, the Promise which writePngFile
returns will reject with the error.
In order to use the callback-based API, simply provide a callback as the third argument.
import { readPngFile } from "node-libpng";
function readMyFile() {
readPngFile("path/to/image.png", (error, image) => {
if (error !== null) {
// TODO: Check what `error` contains.
}
console.log(`Reading was successful. The dimensions of the image are ${image.width}x${image.height}.`);
});
}
If an error occured while reading the file or decoding the buffer, it will be passed as the first argument to the callback.
Otherwise null
will be passed. The PngImage instance will be passed as the second argument. If an error occured,
it will be undefined
.
It is possible to read the image from the disk in a blocking way, using Node's readFileSync
:
import { readPngFileSync } from "node-libpng";
function readMyFile() {
const image = readPngFileSync("path/to/image.png");
console.log(`Reading was successful. The dimensions of the image are ${image.width}x${image.height}.`);
}
If an error occured while reading the file or decoding the buffer, it will be throw
n.
Buffers can be decoded directly into a PngImage instance:
import { decode } from "node-libpng";
function decodeMyBuffer() {
const buffer = ...; // Some buffer containing the raw PNG file's data.
const image = decode(buffer);
console.log(`Decoding was successful. The dimensions of the image are ${image.width}x${image.height}.`);
}
If an error occured while decoding the buffer, it will be throw
n.
The decoding happens synchroneously.
Multiple ways for encoding and writing raw image data exist:
PngImage.data
.PngImage.data
.PngImage.data
.In order to use the Promise-based API, simply omit the 4th argument.
import { writePngFile } from "node-libpng";
async function writeMyFile() {
// Let's write a 100x60 pixel PNG file.
const imageData = Buffer.alloc(100 * 60 * 3);
// TODO: Manipulate the image data somehow.
const options = {
width: 100,
height: 60
};
await writePngFile("path/to/image.png", imageData, options);
console.log("File successfully written.");
}
In this example, a 100x60 pixel image will be encoded and written to disk. Based on the length of the buffer and the provided dimensions the presence of an alpha channel will be automatically calculated.
It is possible to omit either width
or height
from the options.
If an error occured while writing the file or encoding the buffer, the Promise which writePngFile
returns will
reject with the error.
In order to use the callback-based API, provide a callback as the 4th argument.
import { writePngFile } from "node-libpng";
function writeMyFile() {
// Let's write a 100x60 pixel PNG file.
const imageData = Buffer.alloc(100 * 60 * 3);
// TODO: Manipulate the image data somehow.
const options = {
width: 100,
height: 60
};
await writePngFile("path/to/image.png", imageData, options, (error) => {
if (error !== null) {
// TODO: Check what `error` contains.
}
console.log("File successfully written.");
});
}
In this example, a 100x60 pixel image will be encoded and written to disk. Based on the length of the buffer and the provided dimensions the presence of an alpha channel will be automatically calculated.
It is possible to omit either width
or height
from the options.
If an error occured while writing the file or encoding the buffer, it will be passed as the first and only argument
in the callback. Otherwise null
will be passed.
It is possible to write the image to disk in a blocking way, using Node's writeFileSync
:
import { writePngFileSync } from "node-libpng";
function writeMyFile() {
// Let's write a 100x60 pixel PNG file.
const imageData = Buffer.alloc(100 * 60 * 3);
// TODO: Manipulate the image data somehow.
const options = {
width: 100,
height: 60
};
writePngFileSync("path/to/image.png", imageData, options);
console.log("File successfully written.");
}
In this example, a 100x60 pixel image will be encoded and written to disk. Based on the length of the buffer and the provided dimensions the presence of an alpha channel will be automatically calculated.
It is possible to omit either width
or height
from the options.
If an error occured while writing the file or encoding the buffer, it will be throw
n.
Buffers can be encoded directly from a buffer containing the raw pixel data:
import { encode } from "node-libpng";
function encodeMyBuffer() {
const buffer = ...; // Some buffer containing the raw pixel data.
const options = {
width: 100,
height: 100
};
const encodedPngData = encode(buffer);
// The Buffer `encodedPngData` now contains the raw PNG-encoded data.
console.log("File successfully encoded.");
}
Based on the length of the buffer and the provided dimensions the presence of an alpha channel will be automatically calculated.
If an error occured while encoding the buffer, it will be throw
n.
The encoding happens synchroneously.
PNG specifies five different types of colors:
In the PngImage.data buffer the colors are stored the way they were encoded in the PNG image. This library provides utilities for accessing the pixels in both the native format as well as rgba format.
In order to retrieve the color in the image's native format at a given position PngImage.at can be used.
import { readPngFileSync } from "node-libpng";
const image = readPngFileSync("path/to/grayscale-image.png");
const color = image.at(10, 10);
const colorType = image.colorType;
// Will log: "The color type of the image is gray-scale. Pixel at 10,10 is of color 168."
console.log(`The color type of the image is ${colorType}. Pixel at 10,10 is of color ${color.join(", ")}.`);
const image = readPngFileSync("path/to/rgb-image.png");
const color = image.at(10, 10);
const colorType = image.colorType;
// Will log: "The color type of the image is rgb. Pixel at 10,10 is of color 100, 150, 200."
console.log(`The color type of the image is ${colorType}. Pixel at 10,10 is of color ${color.join(", ")}.`);
Dealing with all of these different color formats can be quite irritating. A set of conversion utilities as for example a utility for converting any color format to rgba (convertToRGBA) exist.
It is also possible to do this automatically.
A method for retrieving the automatically converted color exists: PngImage.rgbaAt.
It will convert any color into rgba format. Unlike other implementations, all color formats are supported.
const image = readPngFileSync("path/to/any-color-format-image.png");
const color = image.rgbaAt(10, 10);
const colorType = image.colorType;
// Will log: "The color type of the image is palette. Pixel at 10,10 is of color 100, 150, 200, 255."
console.log(`The color type of the image is ${colorType}. Pixel at 10,10 is of color ${color.join(", ")}.`);
Several basic utilities for modifying an image exist.
A simple utility for cropping an image to a sub-rectangle exists: PngImage.crop. It's a simplified version of PngImage.resizeCanvas.
It will reduce the image in-place to the specified rectangle:
import { readPngFileSync, rect } from "node-libpng";
const image = readPngFileSync("path/to/image.png");
image.crop(rect(10, 10, 100, 100));
// Will log: "New dimensions: 100x100".
console.log(`New dimensions: ${image.width}x${image.height}.`);
Use PngImage.resizeCanvas for advanced cropping operations.
Take a look at ResizeCanvasArguments.
It takes a configuration object which makes it possible to provide:
In the following example, a 10 pixel margin is applied to the top and to the left and a 50x50 pixel area is copied from the image at offset 20,20. The image is resized to 100x100, so a 40 pixel margin will exist to the right and to the bottom. The background is filled in red:
import { readPngFileSync, rect, xy, colorRGB } from "node-libpng";
const image = readPngFileSync("path/to/image.png");
image.resizeCanvas({
offset: xy(10, 10),
clip: rect(20, 20, 50, 50),
dimensions: xy(100, 100),
fillColor: colorRGB(255, 0, 0),
});
// Will log: "New dimensions: 100x100".
console.log(`New dimensions: ${image.width}x${image.height}.`);
Use PngImage.copyFrom to copy an area of one image into another one:
import { readPngFileSync, xy, rect } from "node-libpng";
const source = readPngFileSync("path/to/source-image.png");
const target = readPngFileSync("path/to/target-image.png");
target.copyFrom(source, xy(10, 10), rect(100, 100, 50, 50));
The above example will copy a 50x50 rectangle from the source image at position 100,100 to the target image at position 10,10. The offset and the subrectangle can be omitted to copy the whole source image to the top left corner of the target image.
Use PngImage.fill to fill an area with a specified color:
import { readPngFileSync, colorRGB, rect } from "node-libpng";
const image = readPngFileSync("path/to/source-image.png");
// Change a 100x100 pixel area at offset 10,10 to red:
image.fill(colorRGB(255, 0, 0), rect(10, 10, 100, 100));
With PngImage.set an individual pixel's color can be changed:
import { readPngFileSync, colorRGB, xy } from "node-libpng";
const image = readPngFileSync("path/to/source-image.png");
// Change the pixel at 10,10 to red:
image.set(colorRGB(255, 0, 0), xy(10, 10));
As it is a native addon, node-libpng is much faster than libraries like pngjs:
The chart below shows the comparison of decoding an image between pngjs (sync api) and node-libpng. The time to fully decode a 4096x4096 image is measured (Higher is better).
(The x-axis scale shows the amount of fully decoded images per second.)
The chart below shows the comparison of encoding an image between pngjs (sync api) and node-libpng. The time to fully encode a 4096x4096 image is measured (Higher is better).
(The x-axis scale shows the amount of fully encoded images per second.)
The chart below shows the comparison of accessing all pixels in a decoded image between pngjs and node-libpng. The time to fully access every pixel in the raw data is measured (Higher is better).
(The x-axis scale shows the amount of fully accessed images per second.)
Yarn is used instead of npm, so make sure it is installed, probably: npm install -g yarn
.
Generally, it should be enough to just run:
make
which will install all node dependencies, compile the dependencies and C++ code, compile typescript, execute all test, lint the sources and build the docs.
Libpng requires an OS specific configuration headerfile pnglibconf.h
.
This can be generated by executing:
git submodule update --init --recursive
cd deps/libpng
mkdir build
cd build
cmake ..
make
cp pnglibconf.h ../../config/linux/
Generated using TypeDoc


Hacking the Google Favicon
There’s been a lot of nerd rage about the new google favicon. I joined in with a rationalization for my distaste for their new design. After a few days of the lower-case “g” on a gray background, I decided today that I just couldn’t take it. Here’s how I fixed it, so my Mac shows the old logo.
Certainly, any company ought to think long and hard about any branding change so fundamental and wide-reaching as a change in logo. If you’re a web company, then your favicon IS your logo, and everything else is secondary. For Google’s sake, I sure hope they understand just how significant this change was, and weighed the pros and cons carefully.
While I recognize my position deep in peanut-gallery territory, I simply cannot accept that it was a good move. A favicon needs to be:
- Far from gray. Browser tabs are gray, and the purpose of a favicon is to let the faster right-brain processes identify your site in a list of tabs or bookmarks. If I can’t see it, it’s useless. FAIL
- Mostly not transparent. If you’re going to use a gray logo, fine. Put it on a white background, so you know it will stand out. A small logo in a transparent background is invisible. FAIL
- Evoke your corporate branding. I should be able to associate your favicon with your brand without thinking about it. If, for example, your corporate branding is focused on lots of bright colors on a white background, your favicon should echo this. FAIL
- Use big, simple shapes. Fine details (like those in the double-curl style of lower-case “g”) get lost at 16x16 size. FAIL
Yahoo and Google are effectively equivalent in terms of the objective quality of their search results. Scores of user-studies have shown that our perception in SERP quality is due primarily to brand loyalty and nothing else. If you’re a Yahoo searcher, and you see a red Y, your comfort filter tells you it’s good, no matter where the results actually came from. You can’t tell the difference, because, for the most part, there isn’t one. Most of the time, Yahoo and Google search pull up exactly the same sites, or close to it. They’re both very very good, and search is a case where there is a right answer, even if the method of finding it is a bit fuzzy.
For some searches, it seems that Yahoo is even significantly better than Google. Compare for yourself. Somewhat humorously, the results for “yahoo is better than google” seems to yield much better results on Yahoo. I tried the reverse search, expecting to see some kind of amusing self-bias, but actually Yahoo did that better, too. From my cursory non-scientific view, it seems like Yahoo puts a bit more weight on the title, and there are probably other slight differences. But the point is, the differences are slight enough to be overlooked. They’re both pretty damn good at finding what you ask for.
I work at Yahoo. But I use Google for search. I perhaps ought to bleed a little more purple than I do. I also own stock in Yahoo, so in a small way, using Google for search is not a financially rational move. So why do I do it?
Brand loyalty. I was using Google ever since it’s been around, and I’ll probably keep using it for a long time. I imprinted early on that big G in the white square, and some very low-level neural systems tell me loud and proud that, when it comes to searching, that G means Good. Frankly, rewiring all that stuff isn’t worth the effort.
I think that brand loyalty explains a lot of the nerd rage over the new favicon. Yes, it doesn’t affect the results. Yes, it’s just a case of cheese moving, and not even a very relevant one. And, face it, you’re not going to stop using Google over it if you’re already a Google user. But you may be consistently annoyed for several months while the brain circuits rewire themselves to imprint on the new design.
Unacceptable. I’m a web geek. I’m a hacker.  I refuse to be subjected to some marketing exec’s idea of what is best for me, when I clearly know my needs better. I don’t even care if he went to Stanford AND coded a rocket ship in Python.
Warning
If you use any Google services that require a login (such as GMail, Groups, Orkut, or pretty much anything other than Search), then you’ll need Apache 2. I tried really hard to make it work with Apache 1.3, but no dice.
The good news is, Apache 2 comes standard with Leopard. The bad news is, it doesn’t come standard with Tiger.
Since I was using Tiger, and Apache 1.3, this was a much more involved hack than I’d anticipated going in. Luckily, it’s just a matter of change one line in the /etc/hosts
file to turn it off, which is good, because I had other things to do before I could fix it. I use MacPorts for a bunch of stuff, so I figured I’d just install Apache 2 that way.
Easier said than done, at least in my case.
I already had PHP and MySQL running a local copy of this site, and some other stuff. MacPorts really shines if you use it for everything—try to run Apache on MacPorts and run PHP and MySQL from some other location, and you’re in for a world of hurt. It took a lot of SFTW and learning about reconfiguring to get it all working properly.
I’m not the best guy in the world to critique package management systems, but I’ve got some end-user experience. I use apt-get on my web server, MacPorts on my laptop, and of course, yinst on all the Yahoo! machines I work on. Of course, that’s not counting the Registry and Add/Remove programs dialog from Windows Land (which is hell), and the much more user-friendly “Applications” folder on the Mac (which is lovely, but not really a full-featured package manager). Of these, yinst is the best, hands down. Powerful, simple, effective, and sadly, 100% closed-source and proprietary. If you’re not at Yahoo, you’re not using yinst.
But enough about installing stuff. Long story short, you need Apache 2, or don’t go any further. If you primarily use Firefox, you can just follow Paul’s advice, and install this Greasemonkey script.
I still recommend doing this, especially if you write code for the web, and you’re not normally a “back end guy”. It’s good to tinker with this stuff, and even break it once in a while in your own little sandbox. Unless you tinker, you never learn anything new. Newton did revolutionary work in optics, largely motivated by his need for a better telescope to look at the planets. It’s good to have a working knowledge of the tools of your trade, even if they’re just a means to an end.
So, fixing the G favicon…
mod_proxy to the rescue!
The premise of this hack is pretty simple:
- Edit the
/etc/hosts
file to point “www.google.com” to your local machine. - Use mod_proxy to transparently send all requests for “www.google.com” on to Google’s actual IP address, except for
/favicon.ico
- Point
/favicon.ico
at the old favicon file, sitting on your local machine.
The interesting thing is that you can do this for any file or url out there that you want to swap in your local machine. Don’t like the favicon that a given site uses? Change it! You have the power! That’s the beauty of the web.
Prereqs
For this hack, you’ll need:
- Apache 2 with mod_proxy, mod_ssl, and mod_rewrite
-
If you have a Mac with Leopard and the developer tools stuff on it, you probably already have this, and might just need to enable them. I’ll tell you how.
If you don’t already have Apache 2 and/or mod_proxy installed, then that’s outside the scope of this post, like I said above. Sorry.
- About
1530 minutes -
Yes, it’s really that easy.It’s fairly easy, but a bit trickier than I’d originally thought.
I use a Mac, and these instructions are fairly mac-centric. If you use a Linux or Unix machine, then most of it will still make sense. If you use a Windows machine, then a lot of it won’t apply, but the basic idea should still be possible if you use Apache and install mod_proxy.
Some Apache setups install the Apache Control script as apache2ctl
, and others call it apachectl
. Since I used MacPorts, I’ve got apachectl
on my machine. Substitute as required for your setup.
 I’d like to hear it. If you run into any sticky points and DO get out of it, then definitely post a comment! I’ll update this post with your info.
Get the old favicon
I couldn’t find the actual ico file, but I found some screenshots on the internet talking about the favicon change. I got a pretty good png, and lifted out just the 16x16 piece from the address bar in the screenshot.
Then, I used png2ico to convert that png to an ico file. It’s a great tool that I use all the time to make favicons. It lets you embed multiple pngs into the ico, but in this case, all that I really care about is the 16x16 that shows up in my address bar and on the tabs in Firefox and Safari.
All in all, that took probably less than 10 minutes. But you can do this step even faster by just downloading the Old Google Favicon. Extract it in Terminal or iTerm by doing this:
tar -xzvf old-google-favicon.tgz
You’ll get a file called old-google-favicon.ico
. Put that under the “Sites” folder in your home directory. If you just un-tarred it using the command above, then it would be:
mv old-google-favicon.ico ~/Sites/
Turn on Apache
If you already run web pages and whatnot on your local machine, then you are already set. Skip to the next step.
To see if Apache is running, fire up a web browser and go to localhost. If you see the default Apache startup screen, then you’re all set. If it redirects to localhost.com or a web search, or you get a “could not connect to server” message, then you need to enable Apache.
If you’re running Leopard, open up System Preferences, and click on Sharing. Click the little lock in the lower-left corner, and enter your password. Check “Personal Web Sharing”.
Try hitting localhost again. If it still doesn’t work, then do this in a terminal:
sudo apachectl graceful
If that doesn’t work, try:
sudo apache2ctl graceful
If it’s still not working, sorry, don’t know what to tell ya. Good luck.
Test
At this point, you should be able to see the desired favicon at http://localhost/~YOUR_USER_NAME/old-google-favicon.ico
, where YOUR_USER_NAME is the username that you log in with. (If you’re not sure what that is, open up a terminal, and type whoami
, and it’ll tell you.)
If you’ve configured Apache to have some different document root, then adjust the path accordingly. For example, since my Mac is effectively a single-user machine, I just have the default document root pointed at /Users/isaacs/Sites/
, so the favicon is at http://localhost/old-google-favicon.ico
. Your setup may vary.
Ultimately, it doesn’t much matter where you put it, since we’ll be telling Apache exactly where to find it later.
Enable Apache Modules
Fire up your favorite text editor, and open your httpd.conf
. By default, this file is in /etc/httpd/
or /etc/apache2/
; if you installed with MacPorts, then it’s in /opt/local/etc/apache2/
. (You’ll have to save it as the super-user, since it’s a root-owned file, so that means vi and emacs users will have to open it with sudo
. GUI editors will usually prompt for your password when you try to save the file.)
Each of these lines have to be in there somewhere. If they’re missing, add them. If they’re commented-out, un-comment them.
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule ssl_module modules/mod_ssl.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule rewrite_module modules/mod_rewrite.so
If you notice that these rules look “out of place” for the stuff that’s already there, then modify to match. For example, if the other rules are all loading the .so files out of “libexec”, then change “modules” to “libexec”.
Restart apache by running this command in a terminal:
sudo apachectl graceful
If it tells you that the server couldn’t be restarted, try this to get a more helpful error message:
sudo apachectl configtest
If it’s not working, sorry, don’t know what to tell ya. You may need to install some of the required modules using the apxs utility.
SSL
Because we’ll be proxying an SSL (ie, https://…) connection, your server will have to be able to do SSL so that it can maintain the level of encryption.
I followed these instructions to create SSL keys. It directs you towards a sign.sh
script, and finding that was a bit tricky. For your convenience, I’ve provided it here.
Also, I put the ssl.key
folder in the same folder as the other Apache stuff, the location of the ServerRoot
directive. That way, I can refer to it by a relative path. If you prefer to have it in a separate location, that’s fine, but you’ll need to refer to it by the complete path in the configs below.
Get Google’s IP Addresses
In a terminal, run this:
nslookup www.google.com
You’re looking for the “Address” lines, not the “Server” line. In my bash profile, I have a handy shortcut for this, so I just type getip www.google.com
to see the results from both nslookup and ping.
Make a note of those IP addresses. As of this writing, from my location, I got these:
<IP_ADDRESS>
<IP_ADDRESS>
<IP_ADDRESS>
We’re actually going to define a load balancer to distribute your requests between these three. While that’s probably overkill, part of the benefit of this is educational, and that’s what a proxy would normally do.
Host File
Open up your /etc/hosts
file in a text editor, and add this line:
<IP_ADDRESS> www.google.com
Then, in a terminal, run this command to refresh your IP caches:
lookupd -flushcache
Bring up www.google.com in a web browser, and you should be looking at that default Apache page again. If so, you’re on track. If not, figure out what went wrong. You can see if Apache is in trouble by running this command and then hitting the url again:
tail -f /var/log/apache2/error_log
MacPorts users: tail -f /opt/local/apache2/logs/error_log
You may need to comment that line out with a # and do the lookupd -flushcache
if you want to search google while doing this. Or you could just use Yahoo! Search temporarily. Maybe in the process, you’ll get used to Yahoo search and even find that you like it better. (See? I’m a good little purple-blooded corporate monkey!)
Set up mod_proxy
So, now let’s take your new and un-improved www.google.com, and turn it into a proxy for the actual www.google.com.
If you have a separate conf file where you keep your Apache customizations (which I highly recommend), then add this stuff in there. If you don’t, then you can just add it to /etc/httpd/httpd.conf
or /etc/apache2/httpd.conf
or /opt/local/apache2/conf/httpd.conf
. Either way should work, as long as Apache finds out about it somehow.
Stuff that you may need to change wrapped in strong tags.
#google proxy stuff
Listen 443
SSLPassPhraseDialog builtin
SSLSessionCache dbm:/var/run/ssl_scache
SSLMutex file:/var/run/ssl_mutex
SSLRandomSeed startup builtin
<VirtualHost :80>
# the place where you put the .ico file.
DocumentRoot /Users/isaacs/Sites/
ProxyPreserveHost On
ProxyRequests Off
ServerName www.google.com
<LocationMatch .>
Order deny,allow
Allow from <IP_ADDRESS>
</LocationMatch>
SSLProtocol all -SSLv2
SSLSessionCacheTimeout 300
AllowCONNECT 443 563 80
SSLEngine on
# enable SSLv3 but not SSLv2
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile ssl.key/server.crt
SSLCertificateKeyFile ssl.key/server.key
# correction for browsers that don't always handle SSL connections well
# You don't really use MSIE on your own machine, though, do you??
SetEnvIf User-Agent ".MSIE." \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
SSLProxyEngine on
<Proxy balancer://googlecluster>
# the IP addresses you fetched before.
BalancerMember http://<IP_ADDRESS>
BalancerMember http://<IP_ADDRESS>
BalancerMember http://<IP_ADDRESS>
</Proxy>
# Browsing History seemed broken unless it proxies back to https.
# This is probably safer anyhow, for privacy.
ProxyPass /history https://www.google.com/history
ProxyPassReverse /history https://www.google.com/history
RewriteEngine On
RewriteRule /favicon.ico /old-google-favicon.ico [L]
ProxyPass / balancer://googlecluster/
</VirtualHost>
<VirtualHost :443>
# the place where you put the .ico file.
DocumentRoot /Users/isaacs/Sites/
ProxyPreserveHost On
ProxyRequests Off
ServerName www.google.com
<LocationMatch .>
Order deny,allow
Allow from <IP_ADDRESS>
</LocationMatch>
<Proxy balancer://googlecluster>
# the IP addresses you fetched before.
# note the "https" on these ones.
BalancerMember https://<IP_ADDRESS>
BalancerMember https://<IP_ADDRESS>
BalancerMember https://<IP_ADDRESS>
</Proxy>
SSLProtocol all -SSLv2
SSLSessionCacheTimeout 300
AllowCONNECT 443 563 80
SSLEngine on
# enable SSLv3 but not SSLv2
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile ssl.key/server.crt
SSLCertificateKeyFile ssl.key/server.key
# correction for browsers that don't always handle SSL connections well
# You don't really use MSIE on your own machine, though, do you??
SetEnvIf User-Agent ".MSIE." \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
SSLProxyEngine on
RewriteEngine On
RewriteRule /favicon.ico /old-google-favicon.ico [L]
ProxyPass / balancer://googlecluster/
</VirtualHost>
Save the file, and then restart Apache:
sudo apachectl graceful
Again, if it doesn’t work, try this to figure out what’s wrong:
sudo apachectl configtest
Test
Now, go to www.google.com. You should see the google home page, complete with the old lovable [G] favicon. If you see google, but not the old favicon, go directly to the favicon.ico and refresh a whole bunch. Clear your cache, etc.
If you get the new favicon, try running some tests. Search, go to your account. Make sure everything works.
When you hit an https address, you’ll get a prompt that the certificate is issued by an untrusted authority. This is good! Check the cert details, and make sure that they’re what you typed when you created the certificate. Now, the question, do you trust yourself? (I’d already added myself as a trusted authority, so didn’t get this problem in Firefox, but I did see it in Safari.)
If it doesn’t show you the new favicon, then you might have put the virtual host config someplace where it doesn’t belong, or where it won’t be picked up. Tail the error_log file and see if Apache tells you anything is wrong. Note that some Apache configurations use “apache.conf” instead of “httpd.conf”, so maybe try that.
If it doesn’t load at all, tail the apache logs again, and see if anything is barfing.
Done
You may now resume your google usage as normal, before the disruptive new favicon appeared.
Note: The Google Notifier won’t work, because it checks the certificate, and doesn’t give you the option to trust another authority, which is, in my opinion, very bad design. Also, the Google Notifier sends your password and username out in clear text by default, so it’s very insecure. You shouldn’t be using it in the first place.
Instead, you can use the RSS feed to get inbox alerts without exposing your info.


Greatest Dancer winner to star on Strictly
Ellie Fergusson won under the guidance of coach Oti Mabuse.
The Greatest Dancer winner Ellie Fergusson will be reunited with coach Oti Mabuse on Strictly.
Ferguson, just 14, won the first series of the BBC competition under the guidance of Mabuse.
The teenage performer will be reunited with her coach on Strictly Come Dancing, with the young star set to claim her prize and perform.
Fergusson has watched the show since she was two, and is supporting her coach and Kelvin Fletcher this series.
She said she was happy to return to school following an intense time on The Greatest Dancer.
The young star said: “I’m still at school and dancing as normal.
“I was straight back to school the day after I won it.
“I was kind of looking forward to it, because it had been such a busy period. I kind of wanted to get back to normal after being on a high for so long.”
Fergusson will work with Mabuse again when she joins the Strictly team this Sunday, and will have some nerves, although she knows how to cope with her pre-show tension.
She said: “It’s what I love to do. It’s my favourite part. I just like gong out there and enjoying it.
“I’m always nervous, I always get butterflies. But I always get adrenaline, that kicks in and excites me more.”
Strictly airs tonight on BBC One at 7.15pm.


Implemented the Viterbi Algorithm to discover the sequence of hidden states. Using A=1, B=2,..., Z=26, the message was "THE NSA IS LISTENING".


@header = {
}
@footer = {
}
@main(header, footer , "/tools") {
On this page, you will find links to tools that can help improve your privacy on the Internet.
With respect to fingerprinting, the best solutions that exist today are to simply block tracking scripts.

Because the number of spoofers is likely low, your other discriminating
data (e.g. fonts and plugins) should be more than sufficient to
fingerprint and track you.
Browser extensions
| Extension |
Description |
Website |
|
|
| uBlock Origin |
An efficient ad and tracker blocker with a small performance footprint! |
|
|
|
| Ghostery |
Protect your privacy by blocking trackers on the Web and by learning who is watching you! |
|
|
|
| HTTPS Everywhere |
Encrypt the web! Enable HTTPS automatically on websites that are known to support it. A project by the EFF (Electronic Frontier Foundation).
This extension includes an option to verify SSL certificates directly by
the EFF SSL Observatory.
|
|
|
|
| Lightbeam |
Visualize in details the servers you are contacting when you are surfing on the Internet! Developed by Mozilla.
Presentation of Lightbeam
by Gary Kovacs, former CEO of Mozilla, in a TED talk
|
|
|
|
| AdBlock Plus |
Block advertisements, trackers and more!
We recommend the use of additional lists like the
Fanboy Complete AdBlock list
. |
|
|
|
| Disconnect |
Stop tracking by third-party sites and visualize who is tracking you! |
|
|
|
| Privacy Badger |
Block spying ads and invisible trackers! A project by the EFF (Electronic Frontier Foundation). |
|
|
|
| NoScript |
Take control of what is running in your browser by blocking unwanted scripts! |
|
|
|
| Self-Destructing Cookies |
Remove cookies that are no longer used as soon as you close a tab! |
|
|
|
Search engine, browser and operating systems
DuckDuckGo -
Official webpage
"The search engine that doesn't track you." Launched in 2008, DuckDuckGo differentiates itself from
other search engines by emphasizing the protection of searchers' privacy and avoiding
the filter bubble
of personalized search results. DuckDuckGo does not collect or share personal information.
Tor and the Tor browser -
Official webpage
The Tor network is a group of servers aimed at improving users' anonymity by routing all their traffic through
a dedicated network. The Tor browser is based on Firefox and it uses the Tor network. It has been heavily modified
to limit as most as possible known fingerprinting techniques so that users share a unique fingerprint (even if in practice,
the reality is a little bit different).
Tails -
Official webpage
Based around the Tor browser and the Tor network, Tails (The Amnesic Incognito Live System) goes a step further
by providing the exact same environment to its users. The operating system has been heavily modified so that it
does not leave a single trace on the computer. With the Tor browser, these are the strongest tools against
fingerprinting at the price of a delcine in usability.
IP address
Contrary to what people may think, modifying the IP address has no impact on fingerprinting since
no addresses are collected to form your fingerprint. Your computer can still be identified and
tracked on several browsing sessions. On its own, the IP address is still a really strong form of
identification since it may hardly vary over time depending on your internet service provider. Modifying
your IP address is a good way to cover your tracks and hide your true location when you are browsing
the web.
The most widespread way to change your IP address is to use a VPN (Virtual Private Network) service
that will route securely all your network traffic through a trusted server. The
Best VPN website has a rich list of VPN providers
with detailed reviews about their strengths and weaknesses.
Cookies
Cookies can be used in addition to fingerprinting to track users on the web and identify with ease returning visitors.
One way to counter unwanted tracking is to either limit authorized cookies or block cookies altogether.
One recommendad setting is to never accpet cookies from third-party sites since it is one of the main way for
advertisers to track you. You will find instructions on how to block them on
Firefox
and Chrome.
For the more privacy conscious users among us, you can completely block them in the browser settings
( Firefox
or Chrome)
or use an extension like Self-Destructing Cookies as mentionned in the browser extensions section. The only downside to these
techniques is that you have to whitelist sites if you still want to authorize cookies on some on them.
}


Class: Scope::Base
- Inherits:
-
Object
- Object
- Scope::Base
- Defined in:
- /home/fedora/origin-server/controller/app/models/scope.rb
Direct Known Subclasses
Class Method Summary (collapse)
- + (Object) default_expiration(scope = scope_name) protected
- + (Object) describe
- + (Object) description(desc) protected
- + (Object) expirations protected
- + (Object) maximum_expiration(scope = scope_name) protected
- + (Object) scope_description
Instance Method Summary (collapse)
- - (Object) <=>(other)
- - (Object) ==(other)
-
- (Boolean) allows_action?(controller)
Return true if the controller action is allowed.
- - (Object) as_json(*args)
-
- (Boolean) authorize_action?(permission, resource, other_resources, actor_or_id)
Return true if the user action is authorized.
- - (Object) default_expiration
- - (Object) describe
-
- (Object) limits_access(criteria)
Given a Mongoid query criteria, apply a set of restrictions to the query object.
- - (Object) maximum_expiration
- - (Object) scope_description
Class Method Details
+ (Object) default_expiration(scope = scope_name) (protected)
157 158 159 |
# File '/home/fedora/origin-server/controller/app/models/scope.rb', line 157 def self.default_expiration(scope=scope_name) @default_expiration ||= (expirations[scope] || expirations[nil]).first end |
+ (Object) describe
148 149 150 |
# File '/home/fedora/origin-server/controller/app/models/scope.rb', line 148 def self.describe [[scope_name, scope_description, default_expiration, maximum_expiration]] end |
+ (Object) description(desc) (protected)
166 167 168 |
# File '/home/fedora/origin-server/controller/app/models/scope.rb', line 166 def self.description(desc) self._description = desc end |
+ (Object) expirations (protected)
153 154 155 |
# File '/home/fedora/origin-server/controller/app/models/scope.rb', line 153 def self.expirations @expirations ||= Rails.configuration.openshift[:scope_expirations].freeze end |
+ (Object) maximum_expiration(scope = scope_name) (protected)
161 162 163 |
# File '/home/fedora/origin-server/controller/app/models/scope.rb', line 161 def self.maximum_expiration(scope=scope_name) @maximum_expiration ||= (expirations[scope] || expirations[nil]).last end |
+ (Object) scope_description
144 145 146 |
# File '/home/fedora/origin-server/controller/app/models/scope.rb', line 144 def self.scope_description _description end |
Instance Method Details
- (Object) <=>(other)
136 137 138 |
# File '/home/fedora/origin-server/controller/app/models/scope.rb', line 136 def <=>(other) other.to_s <=> to_s end |
- (Object) ==(other)
132 133 134 |
# File '/home/fedora/origin-server/controller/app/models/scope.rb', line 132 def ==(other) other.to_s == to_s end |
- (Boolean) allows_action?(controller)
Return true if the controller action is allowed. A request action is forbidden unless at least scope allows it.
84 85 86 |
# File '/home/fedora/origin-server/controller/app/models/scope.rb', line 84 def allows_action?(controller) false end |
- (Object) as_json(*args)
140 141 142 |
# File '/home/fedora/origin-server/controller/app/models/scope.rb', line 140 def as_json(*args) to_s end |
- (Boolean) authorize_action?(permission, resource, other_resources, actor_or_id)
Return true if the user action is authorized. A user action is forbidden unless at least one scope allows it.
The actor may be either a CloudUser object or an id of a CloudUser
94 95 96 |
# File '/home/fedora/origin-server/controller/app/models/scope.rb', line 94 def (, resource, other_resources, actor_or_id) false end |
- (Object) default_expiration
116 117 118 |
# File '/home/fedora/origin-server/controller/app/models/scope.rb', line 116 def default_expiration self.class.default_expiration end |
- (Object) describe
128 129 130 |
# File '/home/fedora/origin-server/controller/app/models/scope.rb', line 128 def describe self.class.describe end |
- (Object) limits_access(criteria)
Given a Mongoid query criteria, apply a set of restrictions to the query object. Since many scopes may be queried, set the following options on the criteria to allow post processing
:for_ids - a list of IDs that are allowed to be viewed by this
scope. If set, no other IDs are returned.
:visible - set to true if any results should be visible, or
||= false if the scope does not grant access
The caller is responsible for limiting the Mongoid criteria appropriately for the user's access.
111 112 113 114 |
# File '/home/fedora/origin-server/controller/app/models/scope.rb', line 111 def limits_access(criteria) criteria.[:visible] ||= false criteria end |
- (Object) maximum_expiration
120 121 122 |
# File '/home/fedora/origin-server/controller/app/models/scope.rb', line 120 def maximum_expiration self.class.maximum_expiration end |
- (Object) scope_description
124 125 126 |
# File '/home/fedora/origin-server/controller/app/models/scope.rb', line 124 def scope_description self.class.scope_description end |


{{ drink.strInstructions }} Show details
Search for a cocktail in the field above.
Nothing found. Try another cocktail.


Learn To Code National Survey
We conduct this survey annually to learn about people who want to learn about computer programming.
Full name
Email address
We'll never share your email with anyone else.
Age you started learning to code?
What is your goal?
Choose a goal from the list
Start a software company
Work at a start-up
Learn a new skill
Quit full-time job for more freedom
Learn to think differently
Gender
Guy
Gyal
Select the languages you know:
HTML/CSS
JavScript
PHP
Python
Go
What challenges do you expect to face while learning how to code?
Submit


This site serves the Helm Repo for k8s-charts. You're probably looking for the git Repo located here.


Explore
Read
Contact
Sign in w/ twitter
${logged_in_user.screen_name}
everything's on github
@smarttypes


|  Home  |  Info  |  Resources  |  Suggestions  |  Games (Freetime ONLY)  |  Blog  |  Gallery  |  Trunk Or Treat Ideas  |
|---|
On this website you can find things that you might use during class!
If you want a feature of some sort added, then fill out the Google Form on the Suggestions page.
Here is a countdown until fall break!

A new page has been added to the website, go check it out!


Some of the LoDash methods can be registered as $filter, default list is defined in FilterMethodList variable inside angular-lodash.js file. Filters are intended to be used inside view templates.
By default methods listed in FilterMethodList are registered as $filter, you can change that list through ngDashConfigProvider.setFilters(), ngDashConfigProvider.addFilters() and ngDashConfigProvider.removeFilters(). Checkout the page source for more details!


A Happy life is one spent in learning, earning and yearning
This blog is a reflection of my journey at EDA. It's a massive step in my career towards something that I will love doing, keep learning with new challenges everyday.I love technology and it never stops to amaze me and having to built that technology and being a part of it is exciting.I believe in loving what you do and that way you can cherish every moment of your life. Work takes out biggest slice of our life. So, why compromise? Enjoy my blog, love your feedback..


Tutorial¶
| Authors: | MDP Developers |
|---|---|
| Copyright: | This document has been placed in the public domain. |
| Homepage: | https://mdp-toolkit.github.io |
| Contact: |<EMAIL_ADDRESS>|
| Version: | 3.6 |
This document is also available as pdf file.
This is a guide to basic and some more advanced features of
the MDP library. Besides the present tutorial, you can learn
more about MDP by using the standard Python tools.
All MDP nodes have doc-strings, the public
attributes and methods have telling names: All information about a
node can be obtained using the help
and dir
functions within
the Python interpreter. In addition to that, an automatically generated
API documentation
is available.
Note
Code snippets throughout the script will be denoted by:
>>> print "Hello world!"
Hello world!
To run the following code examples don’t forget to import mdp
and numpy
in your Python session with:
>>> import mdp
>>> import numpy as np
You’ll find all the code of this tutorial here.


tab_config
tab_alexa
tab_info
auth
auth_info
ip
port
api_token
other
refresh_info
refresh
events
events_info
port