Recipe 20.16. Binding Constants at Compile Time
Credit: Raymond Hettinger, Skip Montanaro
Problem
Runtime lookup of global and built-in names is slower than lookup of
local names. So, you would like to bind constant global and built-in
names into local constant names at compile time.
Solution
To perform this task, we must
examine and rewrite bytecodes in the function's code
object. First, we get three names from the standard library module
opcode, so we can operate symbolically on
bytecodes, and define two auxiliary functions for bytecode
operations:
from opcode import opmap, HAVE_ARGUMENT, EXTENDED_ARG
globals( ).update(opmap)
def _insert_constant(value, i, code, constants):
''' insert LOAD_CONST for value at code[i:i+3]. Reuse an existing
constant if values coincide, otherwise append new value to the
list of constants; return index of the value in constants. '''
for pos, v in enumerate(constants):
if v is value: break
else:
pos = len(constants)
constants.append(value)
code[i] = LOAD_CONST
code[i+1] = pos & 0xFF
code[i+2] = pos >> 8
return pos
def _arg_at(i, code):
''' return argument number of the opcode at code[i] '''
return code[i+1] | (code[i+2] << 8)
Next comes the workhorse, the internal function that does all the
binding and folding work:
def _make_constants(f, builtin_only=False, stoplist=( ), verbose=False):
# bail out at once, innocuously, if we're in Jython, IronPython, etc
try: co = f.func_code
except AttributeError: return f
# we'll modify the bytecodes and consts, so make lists of them
newcode = map(ord, co.co_code)
codelen = len(newcode)
newconsts = list(co.co_consts)
names = co.co_names
# Depending on whether we're binding only builtins, or ordinary globals
# too, we build dictionary 'env' to look up name->value mappings, and we
# build set 'stoplist' to selectively override and cancel such lookups
import _ _builtin_ _
env = vars(_ _builtin_ _).copy( )
if builtin_only:
stoplist = set(stoplist)
stoplist.update(f.func_globals)
else:
env.update(f.func_globals)
# First pass converts global lookups into lookups of constants
i = 0
while i < codelen:
opcode = newcode[i]
# bail out in difficult cases: optimize common cases only
if opcode in (EXTENDED_ARG, STORE_GLOBAL):
return f
if opcode == LOAD_GLOBAL:
oparg = _arg_at(i, newcode)
name = names[oparg]
if name in env and name not in stoplist:
# get the constant index to use instead
pos = _insert_constant(env[name], i, newcode, newconsts)
if verbose: print '%r -> %r[%d]' % (name, newconsts[pos], pos)
# move accurately to the next bytecode, skipping arg if any
i += 1
if opcode >= HAVE_ARGUMENT:
i += 2
# Second pass folds tuples of constants and constant attribute lookups
i = 0
while i < codelen:
newtuple = [ ]
while newcode[i] == LOAD_CONST:
oparg = _arg_at(i, newcode)
newtuple.append(newconsts[oparg])
i += 3
opcode = newcode[i]
if not newtuple:
i += 1
if opcode >= HAVE_ARGUMENT:
i += 2
continue
if opcode == LOAD_ATTR:
obj = newtuple[-1]
oparg = _arg_at(i, newcode)
name = names[oparg]
try:
value = getattr(obj, name)
except AttributeError:
continue
deletions = 1
elif opcode == BUILD_TUPLE:
oparg = _arg_at(i, newcode)
if oparg != len(newtuple):
continue
deletions = len(newtuple)
value = tuple(newtuple)
else:
continue
reljump = deletions * 3
newcode[i-reljump] = JUMP_FORWARD
newcode[i-reljump+1] = (reljump-3) & 0xFF
newcode[i-reljump+2] = (reljump-3) >> 8
pos = _insert_constant(value, i, newcode, newconsts)
if verbose: print "new folded constant: %r[%d]" % (value, pos)
i += 3
codestr = ''.join(map(chr, newcode))
codeobj = type(co)(co.co_argcount, co.co_nlocals, co.co_stacksize,
co.co_flags, codestr, tuple(newconsts), co.co_names,
co.co_varnames, co.co_filename, co.co_name,
co.co_firstlineno, co.co_lnotab, co.co_freevars,
co.co_cellvars)
return type(f)(codeobj, f.func_globals, f.func_name, f.func_defaults,
f.func_closure)
Finally, we use _make_constants to optimize itself
and its auxiliary function, and define the functions that are meant
to be called from outside this module to perform the optimizations
that this module supplies:
# optimize thyself!
_insert_constant = _make_constants(_insert_constant)
_make_constants = _make_constants(_make_constants)
import types
@_make_constants
def bind_all(mc, builtin_only=False, stoplist=( ), verbose=False):
""" Recursively apply constant binding to functions in a module or class.
"""
try:
d = vars(mc)
except TypeError:
return
for k, v in d.items( ):
if type(v) is types.FunctionType:
newv = _make_constants(v, builtin_only, stoplist, verbose)
setattr(mc, k, newv)
elif type(v) in (type, types.ClassType):
bind_all(v, builtin_only, stoplist, verbose)
@_make_constants
def make_constants(builtin_only=False, stoplist=[ ], verbose=False):
""" Call this metadecorator to obtain a decorator which optimizes
global references by constant binding on a specific function.
"""
if type(builtin_only) == type(types.FunctionType):
raise ValueError, 'must CALL, not just MENTION, make_constants'
return lambda f: _make_constants(f, builtin_only, stoplist, verbose)
Discussion
Assuming you have saved the code in this recipe's
Solution as module optimize.py somewhere on your
Python sys.path, the following example
demonstrates how to use the make_constants
decorator with arguments (i.e., metadecorator)
to optimize a functionin this case, a reimplementation of
random.sample:
import random
import optimize
@optimize.make_constants(verbose=True)
def sample(population, k):
" Choose `k' unique random elements from a `population' sequence. "
if not isinstance(population, (list, tuple, str)):
raise TypeError('Cannot handle type', type(population))
n = len(population)
if not 0 <= k <= n:
raise ValueError, "sample larger than population"
result = [None] * k
pool = list(population)
for i in xrange(k): # invariant: non-selected at [0,n-i)
j = int(random.random( ) * (n-i))
result[i] = pool[j]
pool[j] = pool[n-i-1] # move non-selected item into vacancy
return result
Importing this module emits the following output. (Some details, such
as the addresses and paths, will, of course, vary.)
'isinstance' -> <built-in function isinstance>[6]
'list' -> <type 'list'>[7]
'tuple' -> <type 'tuple'>[8]
'str' -> <type 'str'>[9]
'TypeError' -> <class exceptions.TypeError at 0x402952cc>[10]
'type' -> <type 'type'>[11]
'len' -> <built-in function len>[12]
'ValueError' -> <class exceptions.ValueError at 0x40295adc>[13]
'list' -> <type 'list'>[7]
'xrange' -> <type 'xrange'>[14]
'int' -> <type 'int'>[15]
'random' -> <module 'random' from '/usr/local/lib/python2.4/random.pyc'>[16]
new folded constant: (<type 'list'>, <type 'tuple'>, <type 'str'>)[17]
new folded constant: <built-in method random of Random object at 0x819853c>[18]
On my machine, with the decorator
optimize.make_constants as shown in this snippet,
sample(range(1000), 100) takes 287 microseconds;
without the decorator (and thus with the usual
bytecode that the Python 2.4 compiler produces), the same operation
takes 333 microseconds. Thus, using the decorator improves
performance by approximately 14% in this exampleand it does so
while allowing your own functions' source code to
remain pristine, without any optimization-induced obfuscation. On
functions making use of more constant names within loops, the
performance benefit of using this recipe's decorator
can be correspondingly greater.
A common and important technique for manual optimization of a Python
function, once that function is shown by profiling to be a bottleneck
of program performance, is to ensure that all global and built-in
name lookups are turned into lookups of local names. In the source of
functions that have been thus optimized, you see strange arguments
with default values, such as _len=len, and the
body of the function uses this local name _len to
refer to the built-in function len. This kind of
optimization is worthwhile because lookup of local names is much
faster than lookup of global and built-in names. However, functions
thus optimized can become cluttered and less readable. Moreover,
optimizing by hand can be tedious and error prone.
This recipe automates this important optimization technique: by just
mentioning a decorator before the def statement,
you get all the constant bindings and foldings, while leaving the
function source uncluttered, readable, and maintainable. After
binding globals to constants, the decorator makes a second pass and
folds constant attribute lookups and tuples of constants. Constant
attribute lookups often occur when you use a function or other
attribute from an imported module, such as the use of
random.random in the
sample function in the example snippet.
Tuples of constants commonly occur in for loops
and conditionals using the in operator, such as
for x in ('a', 'b', 'c'). The best way to
appreciate the bytecode transformations performed by the decorator in
this recipe is to run
"dis.dis(sample)"
and view the disassembly into bytecodes, both with and without the
decorator.
If you want to optimize every function and method in a module, you
can call optimize.bind_all(sys.modules[_ _name_
_]) as the last instruction in the
module's body, before the tests. To optimize every
method in a class, you can call
optimize.bind_all(theclass) just after the end of
the body of the class theclass statement. Such
wholesale optimization is handy (it does not require you to deal with
any details) but generally not the best approach.
It's best to bind, selectively, only functions whose
speed is important. Functions that particularly benefit from
constant-binding optimizations are those that refer to many global
and built-in names, particularly with references in loops.
To ensure that the constant-binding optimizations do not alter the
behavior of your code, apply them only where dynamic updates of
globals are not desired (i.e., the globals do not change). In more
dynamic environments, a more conservative approach is to pass
argument builtin_only as true, so
that only the built-ins get optimized (built-ins include functions
such as len, exceptions such as
IndexError, and such constants as
true or False). Alternatively,
you can pass a sequence of names as the stoplist
argument, to tell the binding optimization functions to leave
unchanged any reference to those names.
While this recipe is meant for use with Python 2.4, you can also use
this approach in Python 2.3, with a few obvious caveats. In
particular, in version 2.3, you cannot use the new 2.4
@decorator syntax. Therefore, to use in Python
2.3, you'll have to tweak the
recipe's code a little, to expose
_make_constants directly, without a leading
underscore, and use f=make_constants(f) in your
code, right after the end of the body of the def f
statement. However, if you are interested in optimization, you should
consider moving to Python 2.4 anyway: Python 2.4 is very compatible
with Python 2.3, with just a few useful additions, and version 2.4 is
generally measurably faster than Python 2.3.
See Also
Library Reference and Python in a
Nutshell docs on the opcode module.
|


Web Developer Examples and Resources by Thinh Pham
Why are forms so important in HTML
Websites have grown up along with the evolution of the Internet and modern technology's advent with many new standards. Nowadays, a successful website should demonstrate and satisfy visitors and user experience with its performance. A webform is one of the vital aspects that contribute to the overall user experience. A webform is one of the best ways to get input from prospective clients and indirectly establish a cordial relationship. Thus, forms are critical in HTML. A web form allows visitors to contact the owner's web page and information, such as an order, a catalog request, or a query passed on to the database. On some websites, the information will be transferred directly to the company email after submitted. PHP, HTML, or Java are programming languages that construct web forms. "A successful implementation of the code is essential for the success of the form." Examples of web forms are text boxes, text areas, radio buttons, checkboxes, dropdown lists, hidden fields, file upload, and buttons. Also, a web form is a communication bridge that allows a user to communicate with a company and vice versa.
A successful web form will help avoid misunderstandings and complications that can harm the company image. For example, if we want the users to create an account with our website. Asking for a residential address would be inappropriate and irrelevant. Thus, illogical questions cause confusion and distrust and may lead people not to complete the signup at all. Knowing how to target audiences and market to frame relevant questions on a web form is essential; spending time researching what kind of forms will give us some insight into how visitors think of our website. There are some ways that we can improve the experience of visitors when using web forms. Informing the visitor of the needed information is the key to give the user's experience perfect on any respective website. Therefore, it is crucial to inform the visitors about anything they might want to know about filling in our web forms. We can explain why the visitor needs to fill in such information in our form, what will happen with the data, or why we ask for specific details. This step will reassure the visitors comfortable with the web forms, and a chance of getting their sign up is higher. Another way is assisting, such as adding help text in a subtle and unobstructed way to explain form fields that are not common to the users. Considering other languages that will be used for the web forms. It will be beneficial if there are other language options since not everyone who visits our website might be comfortable with our primary language. Moreover, using multiple languages is a benefit for the company that targets and seeks international audiences. On the other hand, keeping the web form simple is a good practice; only ask for information that we need. Trying to order form fields logically or by their importance to make the form look neat and clear our expectations by showing examples in front of the form field ( ex abc@gmail.com). Try to offer possible default values and allow users to toggle through the form by using their keyboard. Also, showing clear error messages is essential such as utilizing the fly error messages to give direct feedback and making instant corrections.
Finally, providing clear feedback after the user submits data, indicates steps to make the process of filling in the web form clear, and using color combinations to inform the user about his progress while filling in the form ( ex red for error or incomplete information and green signifies correct word). In conclusion, a good web form will boost user's experience in many aspects and improve the connection between users and the websites. Understanding common mistakes that users will make, giving clear instructions, information on the web page is a plus for a successful web form. Keeping it clean, simple, and trustworthy is also vital to improving user experience with our web form.


Preparation time
less than 30 mins
Cooking time
30 mins to 1 hour
Serves
Serves 6
Dietary
If you like sweet American desserts you’ll love this chocolate whoopie pie sandwiched with marshmallow cream with peanut brittle and a shot of peanut butter milkshake.
Equipment and Preparation: You will need a silicone sheet and a piping bag with a plain round nozzle.
Line a baking tray with a silicone sheet. Line another tray with baking parchment.
Place the sugar in a large frying pan over a medium heat. Melt the sugar and cook, without stirring, until it turns golden brown, then add the peanuts. Pour the mixture onto the silicone sheet. Leave to set.
For the whoopie pies, place the flour, cocoa, baking powder, bicarbonate of soda, salt, butter, sugar, eggs, vanilla extract, buttermilk and coffee in a free-standing food mixer and mix until well combined.
Place the mixture in a piping bag with a plain round nozzle and pipe 4cm/1½in circles, leaving a 3cm/1¼in gap between them on the baking parchment.
Bake the whoopie pies for 10 minutes until springy to the touch. Leave to cool on a wire rack.
For the filling, whisk the cream with the sugar in a large bowl and stir in the marshmallows.
For the peanut butter milkshake, place all the milkshake ingredients in a blender and blend until smooth.
To serve, take one of the whoopies and spoon on a tablespoon of the cream and sandwich with another whoopie. Smash the brittle and serve some on the side. Pour the milkshake in a shot glass and serve alongside.


Prodigious Poo Appears In Portland
by Dave DiamondI'm not sure if the poo has gone to Portland or if Portland has gone to poo, but a giant inflatable poo emoji has appeared in Pioneer Square in Portland, Oregon.
It turns out that November 19th, is World Toilet Day so Poo-Pourri decided to take their giant inflatable poo emoji on tour. The current stop is in Portland and there are 20 other cities scheduled. The inflatable is 30 feet tall and for a small fee you can explore the inside.


Generate Color Scheme from JSON
You can generate your own color scheme from VSCode directly:
- Open VSCode
- Press (CMD or CTRL) + SHIFT + P
- Enter: '> Developer: Generate Color Scheme From Current Settings'
- Copy the contents and paste them here!
{{ getErrorMessage() }}


dumpsfs
OS/161 Reference Manual
Name
dumpsfs - dump information about an SFS filesystem
Synopsis
/sbin/dumpsfs raw-device
host-dumpsfs disk-image-file
Description
dumpsfs dumps out selected information regarding the contents and
structure of the SFS filesystem on the device it is passed.
Like mksfs, it is also compiled for the
System/161 host OS, and in that form can access System/161's disk
image files.
Requirements
dumpsfs uses the following system calls:
dumpsfs should function properly once assignment 4 is complete. You may
wish to extend it in the course of that assignment.


Property definition
Edit (pull request)A property definition defines a named, typed value that can be associated with an entity defined in this specification. It is used to associate a transparent property or characteristic of that entity which can either be set (configured) on or retrieved from it.
Keynames
| Keyname | Required | Type | Description | tosca_definitions_version |
|---|---|---|---|---|
| type | yes | string | The required data type for the property. | alien_dsl_1_3_0 alien_dsl_1_2_0 tosca_simple_yaml_1_0 |
| description | no | string | The optional description for the property. | alien_dsl_1_3_0 alien_dsl_1_2_0 tosca_simple_yaml_1_0 |
| required | no (default true) | boolean | Optional key to define if the property is requied (true) or not (false). If this key is not declared for the property definition, then the property SHALL be considered required by default. | alien_dsl_1_3_0 alien_dsl_1_2_0 tosca_simple_yaml_1_0 |
| default | no | N/A | An optional key that may provide a value to be used as a default if not provided by another means. This value SHALL be type compatible with the type declared by the property definition’s type keyname. | alien_dsl_1_3_0 alien_dsl_1_2_0 tosca_simple_yaml_1_0 |
| status (1) | no | string (default: supported) | The optional status of the property relative to the specification or implementation. See table below for valid values. | N.A. |
| constraints | no | list of constraints | The optional list of sequenced constraints for the property. | alien_dsl_1_3_0 alien_dsl_1_2_0 tosca_simple_yaml_1_0 |
| entry_schema (2) | no | entry schema | An optional key used to declare the schema definition for entries of “container” types such as list or map. | alien_dsl_1_3_0 alien_dsl_1_2_0 tosca_simple_yaml_1_0 |
- (1) Status has been added in the latest versions of the specification and is not yet supported in alien4cloud. Table below details the supported values as defined in the TOSCA specification.
- (2) Entry schema definition in TOSCA specification is inconsistent as it is stated you can use a string but the grammar example actually defines a complex object as defined here. Alien4cloud supports the complex definition as stated in the grammar section of the specification.
Status valid values:
| Value | Description | |:————–|:————| | supported | Indicates the property is supported. This is the default value for all property definitions. | | unsupported | Indicates the property is not supported. | | experimental | Indicates the property is experimental and has no official standing. | | deprecated | Indicates the property has been deprecated by a new specification version. |
Grammar
<property_name>:
type: <property_type>
description: <property_description>
required: <property_required>
default: <property_default_value>
constraints:
- <property_constraint_1>
- ...
- <property_constraint_n>
Example of a “container” type (list or map)
<property_name>:
type: <property_type>
description: <property_description>
required: <property_required>
default: <property_default_value>
entry_schema:
description: <schema_description>
type: <entries_type>
constraints:
- <entries_constraint_1>
- ...
- <entries_constraint_n>
See:
Example
The following example shows how to define a node type with properties:
node_types:
fastconnect.nodes.PropertiesSample:
properties:
property_1:
type: string
property_2:
type: string
required: false
default: This is the default value of the property
description: this is the second property of the node
constraints:
- min_length : 4
- max_length : 8
property_3:
type: integer
default: 45
property_4:
type: list
entry_schema:
type: integer
constraints:
- valid_values: [ 2, 4, 5, 8]


Home-made Polish Cake
Fruit and Vegetable Spread
Homestyle BBQ
Sandwich Party
Dumplings
Rasberry Fruit Tarts
Pizza
Cupcakes
Choose us to make your next potluck a hit!


Here is a list of all our books that we have released. You can check them out.
Hangne phin lap ki kot kiba ngi la pynmih. Phi lah ban peit ia ki.
This is in garo now
Creation Story in Khasi and Garo, Story and colouring books


API url
1. Describe your graph
Graph id:
Info:
3. Get the graph
Get the built graph object from the API using the id
Graph id:
Info:


|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object com.adobe.xmp.XMPUtils
public class XMPUtils
Utility methods for XMP. I included only those that are different from the Java default conversion utilities.
| Method Summary | |
|---|---|
static void |
appendProperties(XMPMeta source,
XMPMeta dest,
boolean doAllProperties,
boolean replaceOldValues)
Alias without the new option deleteEmptyValues . |
static void |
appendProperties(XMPMeta source,
XMPMeta dest,
boolean doAllProperties,
boolean replaceOldValues,
boolean deleteEmptyValues)
Append properties from one XMP object to another. |
static java.lang.String |
catenateArrayItems(XMPMeta xmp,
java.lang.String schemaNS,
java.lang.String arrayName,
java.lang.String separator,
java.lang.String quotes,
boolean allowCommas)
Create a single edit string from an array of strings. |
static java.lang.String |
convertFromBoolean(boolean value)
Convert from boolean to string. |
static java.lang.String |
convertFromDate(XMPDateTime value)
Convert from XMPDateTime to string. |
static java.lang.String |
convertFromDouble(double value)
Convert from long to string. |
static java.lang.String |
convertFromInteger(int value)
Convert from int to string. |
static java.lang.String |
convertFromLong(long value)
Convert from long to string. |
static boolean |
convertToBoolean(java.lang.String value)
Convert from string to Boolean. |
static XMPDateTime |
convertToDate(java.lang.String rawValue)
Converts a string value to an XMPDateTime . |
static double |
convertToDouble(java.lang.String rawValue)
Converts a string value to a double . |
static int |
convertToInteger(java.lang.String rawValue)
Converts a string value to an int . |
static long |
convertToLong(java.lang.String rawValue)
Converts a string value to a long . |
static byte[] |
decodeBase64(java.lang.String base64String)
Decode from Base64 encoded string to raw data. |
static java.lang.String |
encodeBase64(byte[] buffer)
Convert from a byte array to a base64 encoded string. |
static void |
removeProperties(XMPMeta xmp,
java.lang.String schemaNS,
java.lang.String propName,
boolean doAllProperties,
boolean includeAliases)
Remove multiple properties from an XMP object. |
static void |
separateArrayItems(XMPMeta xmp,
java.lang.String schemaNS,
java.lang.String arrayName,
java.lang.String catedStr,
PropertyOptions arrayOptions,
boolean preserveCommas)
Separate a single edit string into an array of strings. |
| Methods inherited from class java.lang.Object |
|---|
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Method Detail |
|---|
public static java.lang.String catenateArrayItems(XMPMeta xmp, java.lang.String schemaNS, java.lang.String arrayName, java.lang.String separator, java.lang.String quotes, boolean allowCommas) throws XMPException
xmp
- The XMP object containing the array to be catenated.schemaNS
- The schema namespace URI for the array. Must not be null or
the empty string.arrayName
- The name of the array. May be a general path expression, must
not be null or the empty string. Each item in the array must
be a simple string value.separator
- The string to be used to separate the items in the catenated
string. Defaults to "; ", ASCII semicolon and space
(U+003B, U+0020).quotes
- The characters to be used as quotes around array items that
contain a separator. Defaults to '"'allowCommas
- Option flag to control the catenation.
XMPException
- Forwards the Exceptions from the metadata processingpublic static void separateArrayItems(XMPMeta xmp, java.lang.String schemaNS, java.lang.String arrayName, java.lang.String catedStr, PropertyOptions arrayOptions, boolean preserveCommas) throws XMPException
xmp
- The XMP object containing the array to be updated.schemaNS
- The schema namespace URI for the array. Must not be null or
the empty string.arrayName
- The name of the array. May be a general path expression, must
not be null or the empty string. Each item in the array must
be a simple string value.catedStr
- The string to be separated into the array items.arrayOptions
- Option flags to control the separation.preserveCommas
- Flag if commas shall be preserved
XMPException
- Forwards the Exceptions from the metadata processingpublic static void removeProperties(XMPMeta xmp, java.lang.String schemaNS, java.lang.String propName, boolean doAllProperties, boolean includeAliases) throws XMPException
schemaNS
and propName
- The named property is
removed if it is an external property, or if the
flag doAllProperties
option is true. It does not matter whether the
named property is an actual property or an alias.
schemaNS
and empty propName
- The all external
properties in the named schema are removed. Internal properties are also
removed if the flag doAllProperties
option is set. In addition,
aliases from the named schema will be removed if the flag includeAliases
option is set.
schemaNS
and empty propName
- All external properties in
all schema are removed. Internal properties are also removed if the
flag doAllProperties
option is passed. Aliases are implicitly handled
because the associated actuals are internal if the alias is.
schemaNS
and non-empty propName
.
xmp
- The XMP object containing the properties to be removed.schemaNS
- Optional schema namespace URI for the properties to be
removed.propName
- Optional path expression for the property to be removed.doAllProperties
- Option flag to control the deletion: do internal properties in
addition to external properties.includeAliases
- Option flag to control the deletion:
Include aliases in the "named schema" case above.
Note: Currently not supported.
XMPException
- Forwards the Exceptions from the metadata processingpublic static void appendProperties(XMPMeta source, XMPMeta dest, boolean doAllProperties, boolean replaceOldValues) throws XMPException
deleteEmptyValues
.
source
- The source XMP object.dest
- The destination XMP object.doAllProperties
- Do internal properties in addition to external properties.replaceOldValues
- Replace the values of existing properties.
XMPException
- Forwards the Exceptions from the metadata processingpublic static void appendProperties(XMPMeta source, XMPMeta dest, boolean doAllProperties, boolean replaceOldValues, boolean deleteEmptyValues) throws XMPException
Append properties from one XMP object to another.
XMPUtils#appendProperties was created to support the File Info dialog's Append button, and
has been been generalized somewhat from those specific needs. It appends information from one
XMP object (source) to another (dest). The default operation is to append only external
properties that do not already exist in the destination. The flag
doAllProperties
can be used to operate on all properties, external and internal.
The flag replaceOldValues
option can be used to replace the values
of existing properties. The notion of external
versus internal applies only to top level properties. The keep-or-replace-old notion applies
within structs and arrays as described below.
replaceOldValues
is true then the processing is restricted to the top
level properties. The processed properties from the source (according to
doAllProperties
) are propagated to the destination,
replacing any existing values.Properties in the destination that are not in the source
are left alone.
replaceOldValues
is not passed then the processing is more complicated.
Top level properties are added to the destination if they do not already exist.
If they do exist but differ in form (simple/struct/array) then the destination is left alone.
If the forms match, simple properties are left unchanged while structs and arrays are merged.
deleteEmptyValues
is passed then an empty value in the source XMP causes
the corresponding destination XMP property to be deleted. The default is to treat empty
values the same as non-empty values. An empty value is any of a simple empty string, an array
with no items, or a struct with no fields. Qualifiers are ignored.
The detailed behavior is defined by the following pseudo-code:
appendProperties ( sourceXMP, destXMP, doAllProperties, replaceOldValues, deleteEmptyValues ): for all source schema (top level namespaces): for all top level properties in sourceSchema: if doAllProperties or prop is external: appendSubtree ( sourceNode, destSchema, replaceOldValues, deleteEmptyValues ) appendSubtree ( sourceNode, destParent, replaceOldValues, deleteEmptyValues ): if deleteEmptyValues and source value is empty: delete the corresponding child from destParent else if sourceNode not in destParent (by name): copy sourceNode's subtree to destParent else if replaceOld: delete subtree from destParent copy sourceNode's subtree to destParent else: // Already exists in dest and not replacing, merge structs and arrays if sourceNode and destNode forms differ: return, leave the destNode alone else if form is a struct: for each field in sourceNode: AppendSubtree ( sourceNode.field, destNode, replaceOldValues ) else if form is an alt-text array: copy new items by "xml:lang" value into the destination else if form is an array: copy new items by value into the destination, ignoring order and duplicates
Note: appendProperties can be expensive if replaceOldValues is not passed and the XMP contains large arrays. The array item checking described above is n-squared. Each source item is checked to see if it already exists in the destination, without regard to order or duplicates.
Simple items are compared by value and "xml:lang" qualifier, other qualifiers are ignored. Structs are recursively compared by field names, without regard to field order. Arrays are compared by recursively comparing all items.
source
- The source XMP object.dest
- The destination XMP object.doAllProperties
- Do internal properties in addition to external properties.replaceOldValues
- Replace the values of existing properties.deleteEmptyValues
- Delete destination values if source property is empty.
XMPException
- Forwards the Exceptions from the metadata processingpublic static boolean convertToBoolean(java.lang.String value) throws XMPException
value
- The string representation of the Boolean.
true
and false
are:
XMPConst.TRUESTR
and XMPConst.FALSESTR
XMPException
- If an empty string is passed.public static java.lang.String convertFromBoolean(boolean value)
value
- a boolean value
XMPConst.TRUESTR
and
XMPConst.FALSESTR
.public static int convertToInteger(java.lang.String rawValue) throws XMPException
int
.
rawValue
- the string value
XMPException
- If the rawValue
is null
or empty or the
conversion fails.public static java.lang.String convertFromInteger(int value)
value
- an int value
public static long convertToLong(java.lang.String rawValue) throws XMPException
long
.
rawValue
- the string value
XMPException
- If the rawValue
is null
or empty or the
conversion fails.public static java.lang.String convertFromLong(long value)
value
- a long value
public static double convertToDouble(java.lang.String rawValue) throws XMPException
double
.
rawValue
- the string value
XMPException
- If the rawValue
is null
or empty or the
conversion fails.public static java.lang.String convertFromDouble(double value)
value
- a long value
public static XMPDateTime convertToDate(java.lang.String rawValue) throws XMPException
XMPDateTime
.
rawValue
- the string value
XMPDateTime
-object.
XMPException
- If the rawValue
is null
or empty or the
conversion fails.public static java.lang.String convertFromDate(XMPDateTime value)
XMPDateTime
to string.
value
- an XMPDateTime
public static java.lang.String encodeBase64(byte[] buffer)
buffer
- the byte array to be converted
public static byte[] decodeBase64(java.lang.String base64String) throws XMPException
base64String
- a base64 encoded string
XMPException
- Thrown if the given string is not property base64 encoded
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |


This is to be used in the HEAD Tag.
This Tag Eshtablishes Relationship between Current Document and other
Documents.
This is not a Container Tag and thus need not be closed.
Attributes
HREF :
Specifies the Relative or Absolute Address (URL)
of the file to be linked.
HREFLANG :
Specifies the Language used in the document
linked to. Use Standard codes for languages. Visit
http://www.oasis_open.org/cover/iso639.html for more Information regarding Language Codes.
MEDIA :
It specifies the Destination medium
for the Style Information. It may be a Single Type or a Comma separated
List .
SCREEN :
It is for Online Viewing
of the Document. It is the Default
.
PRINT :
It is for Traditional Printed
Material and for Documents to be Viewed in the Print Preview
Mode .
PROJECTION :
It is for viewing on Projectors
.
BRAILLE :
It is for Braille Tactile Feedback
Devices .
SPEECH :
It is for a Speech Synthesizer
.
ALL :
It Applies to All Devices
.
REL :
It defines the Relation between the current
document and another resource.
TOP :
It defines the Homepage of the
Site or the Top of the Site Hierarchy
CONTENTS :
It defines the Location of a
resource that lists the contents of the Site.
INDEX :
It Provides a link to the Index of
the Site.
GLOSSARY :
It indicates the location of a
Glossary Resource.
COPYRIGHT :
It indicates the Location of a
Copyright Statement.
NEXT & PREVIOUS :
It eshtablishes Relationships
between documents or resources in series.
HELP :
It indicates the Location of a
Help resource.
SEARCH :
It specifies the Location of a
Search resource.
STYLESHEET :
It specifies information about
CSS.
REV :
It eshtablishes Reverse Relationships between the
current document and other resources .
TYPE :
It specifies the MIME Type of the
Style Sheet Specification Standard used.


kdl.prox.dbvis
Class LinearStateTransFcn
java.lang.Object
kdl.prox.dbvis.LayoutStateTransitionFunction
kdl.prox.dbvis.LinearStateTransFcn
public class LinearStateTransFcn
- extends LayoutStateTransitionFunction
A simple implementation of LayoutStateTransitionFunction that does linear
interpolation between the start and end states. In other words, for each vertex
it draws a line between its start and end X,Y locations, then divides it into
equal numIntermediateStates segments.
|
Method Summary |
java.util.List |
calcIntermediateStates(edu.uci.ics.jung.graph.Graph graph,
edu.uci.ics.jung.visualization.VertexLocationFunction startVertLocFcn,
edu.uci.ics.jung.visualization.VertexLocationFunction endVertLocFcn,
int numIntermediateStates)
Creates and returns the intermediate states that animate the layout from
startVertLocFcn to endVertLocFcn. |
static java.awt.geom.Point2D |
getStartLocation(edu.uci.ics.jung.graph.Vertex vertex,
edu.uci.ics.jung.visualization.VertexLocationFunction startVertLocFcn,
edu.uci.ics.jung.visualization.VertexLocationFunction endVertLocFcn)
|
| Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
LinearStateTransFcn
public LinearStateTransFcn()
calcIntermediateStates
public java.util.List calcIntermediateStates(edu.uci.ics.jung.graph.Graph graph,
edu.uci.ics.jung.visualization.VertexLocationFunction startVertLocFcn,
edu.uci.ics.jung.visualization.VertexLocationFunction endVertLocFcn,
int numIntermediateStates)
- Description copied from class:
LayoutStateTransitionFunction
- Creates and returns the intermediate states that animate the layout from
startVertLocFcn to endVertLocFcn. Note that it's the implementation's
responsibility to ensure that all vertices in either startVertLocFcn
or endVertLocFcn appear in all intermediate states. The simplest
way to do this is to use locations from endVertLocFcn if there's no entry
in startVertLocFcn. Later we may treat added vertices specially, e.g.,
by fading them in at the animation's end.
- Specified by:
calcIntermediateStates
in class LayoutStateTransitionFunction
numIntermediateStates
- number of states to add between start and end.
must be >0. (It's up to callers to check.)
- Returns:
- a List of numIntermediateStates intermediate VertexLocationFunction
instances representing animated states between the passed start and
end states. NB: does not include the start and end states
getStartLocation
public static java.awt.geom.Point2D getStartLocation(edu.uci.ics.jung.graph.Vertex vertex,
edu.uci.ics.jung.visualization.VertexLocationFunction startVertLocFcn,
edu.uci.ics.jung.visualization.VertexLocationFunction endVertLocFcn)
- Parameters:
vertex
- startVertLocFcn
- endVertLocFcn
-
- Returns:
- location for vertex. uses startVertLocFcn first, but if null uses
endVertLocFcn. NB: does not check if endVertLocFcn is null


Angry woman allegedly pours soup on Nayas new husband for ditching her
by Qwame BenedictHusband of Kumawood actress Nayas known as Alex Nana Kofi Sarfo has been attacked by a German lady in Hamburg for allegedly using and duping her.
In a video that has gone viral, the angry woman was seen recording and cursing the Chief of Hamburg.
According to the jilted woman, Nana Kofi Sarfo took a huge sum of money from her to help secure her documents, but has refused to work it out neither has he refunded her money.
Nayas husband who seemed uncomfortable about the situation reported the woman to Germany authorities, the police came to the lady’s house with him
Watch the video below;
Looks like actress Nayas is not the only person who is controversial…lol


The applicant who was a communicant of the organization couldn't decant his feelings in the right way, and as a result, he was not able to communicate what he wanted to say effectively. [G|D]
Although the descant and desiccant were insignificant compared to the intoxicant, each of their individual contributions were essential to creating the desired result. [G|D]
Even though the lubricant and mendicant were scant, they still managed to recant their story which turned out to be highly valuable. [G|D]
The supplicant made a significant effort to try and fill the vacant spot by using her secant approach, but unfortunately it was not enough. [G|D]


[1]
cabana boys keep ice water topped off and spacious.
[2]
cabana boys keep ice water topped off and spacious balcony.


General support queries. User Guides: https://support.komodoplatform.com/ Support staff: Angelina#6231 gcharang#6833. If you want to ask JL777 a question, use the #ask-jl777 channel.
100 messages
Before 05-Dec-19 12:00 AM
agnewpickens22-Dec-18 01:22 AM
Got an uncaught syntax error using the command from the console.
Unexpected identifier error(edited)
Hermes22-Dec-18 01:23 AM
now you can enter the webpage
it had an error
agnewpickens22-Dec-18 01:25 AM
OK thx, I think I need to activate pirate first since I relaunched, will try the command again once pirate launches.
Invalid or unsuspected token error after pirate activated.
OK, guid says to use client shutting down console.
Waiting on CLI response
May take a while? I'll report back when it responds.(edited)
Hermes22-Dec-18 01:30 AM
you are using the CLI as showed in the guide?
agnewpickens22-Dec-18 01:34 AM
Yes, not doing anything, going to let it get to sync bar and try again.
Had to relaunch Agama because my computer locked up, so will wait for some connections.
Hermes22-Dec-18 01:41 AM
strange..well after stoping it and rescanning it ...it should get passed that block
agnewpickens22-Dec-18 01:54 AM
OK, will try that.
Got a block not found error, I am stuck 1 block behind that one you named.
Hermes22-Dec-18 01:58 AM
use the previous block use this command to see if it helps
I'm on a hella slow IBM Thinkcentre, LOL, been running an Agama wallet on this thing since early Iguana days.
I cut & pasted the command to a txt file.
1
CrisF22-Dec-18 03:11 AM
Hi,
I've been trying to track down some KMD I lost in early December while doing a z_transaction (sendmany).
Seems it might have been given to a miner (not a wrong address)??
I'd like to find out what went on so it doesn't happen again.
Can anyone tell me what happened here?
(HEX too many characters to fit in Discord)
https://pastebin.com/9Q4U7110(edited)
Hey guys do you know if there will be an option of buying KSB with credit cards or debit cards? Because that’s the only one thing missing for Komodo to be completely independent of Bitcoin
NutellaLicka23-Dec-18 01:40 AM
Does anyone know what this means when I try and start my coin daemon?
Is anyone around right now?
I tried updating manually (not on the machine that has a broken komodod) and got everything updated.
I launched the chain and then tried performing one simple test transaction.
It appears to be stuck, and nothing is showing up in the destination address.
I may have broken my wallet.dat file, and may need to rescan or something?
Hermes24-Dec-18 03:45 AM
the chain is stuck? using the CLI?
if the chain stuck the transaction cannot be processed until it's 100% synced
Bryan_Beus24-Dec-18 03:50 AM
I was able to get the new agama up and running.
In the transaction history, it says those are failed transactions, basically.
Should just reset.
Hermes24-Dec-18 03:54 AM
try rescanning ..the wallet.dat shouldn't be affected ..
Bryan_Beus24-Dec-18 04:41 AM
I was able to get the t addresses working through agama.
Trying the daemon again.
See if it will let me send z's
Diesmaster25-Dec-18 09:46 AM
@everyone Merry Christmas
61
32
25
12
12
1
13
4
14
Mr. HashEm25-Dec-18 11:25 AM
jspook1625-Dec-18 04:57 PM
gsnew25-Dec-18 10:25 PM
Here is my contribution from the German telegram Komodo chat.
Translated with Google
Just my modest opinion: In over 25 years stock market, I have often put on the best technology. In the end, I still work today.
Most of those with the best marketing have won.
Therefore, I would not necessarily recommend today in the circle of friends to buy kmd.c
We absolutely need aggressive marketing, and very quickly. The technology and the ecosystem is absolutely great, but that does not help us if nobody is interested in investing.
(edited)
2
I thanks the komodo team for his great work
lluisin27-Dec-18 02:47 PM
Hello. i have some komodo in ledger nano S which i would like to move. I am attempting do do a transaction with the magnum wallet but i get the following error:
Hello again, I finally got my Agama wallet set up and started mining ARRR. On the worker stats page it says I was paid 61. How long does it take to transfer to Agama wallet. Thank you
SHossain30-Dec-18 02:58 PM
you can check the payments here https://piratepool.io/payments
you will get paid from the mining pool after they process payment
please ask further pirate mining related questions in #mining channel of Pirate Discord https://pirate.black/discord
Step up your game with a modern voice & text chat app. Crystal clear voice, multiple server and channel support, mobile apps, and more.
@Bitcoinandy ^^
Bitcoinandy30-Dec-18 03:01 PM
Thank you. I think I asked there as well. I’m new so please bear with me.
ch6ris31-Dec-18 11:22 AM
g'day could someone help me out with a speed mode deposit I made in barterdex?
It was a deposit made on Oct 10, Can't remember how long I locked it for but can't see it in deposit history or claim deposit section.
Can see it on the blockchain, from memory I set lock time to before the end of year.(edited)
It's disappeared from barterdex but I can see it siting in a certain address on an explorer. Anyway to check lock time? Funds should be automatically returned?
for how long did you deposit for? you can't claim it back before the time expires
ch6ris31-Dec-18 01:42 PM
Yeah not sure about that. maybe that's it .
Can't remember how long I locked the funds for.
Guess I will try again in the future.
SHossain31-Dec-18 01:43 PM
i have recently claimed 2 txs which was set for 1 year. my funds came back with accured rewards.
if you dont' know the time, you need to keep trying every other week until the expiry time
funds will be back as long as you have privkey of that address
jl777c31-Dec-18 01:43 PM
there is api call that displays when it is due
SHossain31-Dec-18 01:44 PM
@ch6ris which OS you are using? can use use CLI?
ch6ris31-Dec-18 01:45 PM
Any chance someone could check for me. This one is only 10 kmd, but I have another address with more.
@ch6ris (ch6ris#5240)
You tipped @SHossain1.999698 ARRR
A network fee of 0.0001 ARRR was deducted from the amount.
This operation is pending.
Walloom31-Dec-18 02:34 PM
yes, and its the same each time, but diff when i had encrypt
same with the seed , diff when had pin
Nabob31-Dec-18 02:36 PM
so it means you have wrong seed, if you can retrive valid address with encrypt seed please get private key first(edited)
SHossain31-Dec-18 02:51 PM
@Walloom maybe you are using the PIN in seed box instead of the PIN box?(edited)
Walloom31-Dec-18 04:22 PM
Nope, was reading handwriting wrong on one of seed phrase


This is a message!
Dylan Beattie
17 April 2021
This post has a photo in it:
LOUD BOB!
This post has a list in it!
Hey
Lists are cool
see?
Alice
Bob
Catherine
Dave


Language Aid License
Aoren Software hereby grants you, effective on the date you accept this
license a world-wide, non-exclusive license for the following usage of
this software:
You may use, display, perform, make use of, distribute and deploy
unmodified copies in whole of the software.
You may use the software in conjunction with third party plugin modules
to extend functionality, however Aoren Software takes no responsibility
for said products and
takes on no liability whatsoever should they produce any undesired
effects or damage.
You may not sell, re-sell, rent or repackage the software in any way or
form.
You may not attempt to circumvent copy protection measures of the
software.
Subject to the above terms and conditions, the license granted here is
perpetual (for the duration of the applicable copyright in the work).
Notwithstanding the above, licensor reserves the right to release the
work under different license terms or to stop distributing the work at
any time; provided, however that any such election will not serve to
withdraw this license (or any other license that has been, or is
required to be, granted under the terms of this License), and this
license will continue in full force and effect unless terminated as
stated above.
 IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE AND SOURCE CODE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE
AND SOURCE CODE.


- Download the build folder and place it
in your site's directory. We'll suppose it is in
/lib/guppy/
- Include guppy.min.js and guppy-default.min.css in your page:
<link rel="stylesheet" href="/lib/guppy/style/guppy-default.min.css">

- Initialise the editor with the path to the "build"
folder, as well as a list of symbol files you want it to use
(this function takes many more arguments as well, allowing
global configuration of all editors on the page. See the
documentation
for details.)
Guppy.init({"path":"/lib/guppy","symbols":"/lib/guppy/sym/symbols.json"});
- Initialise an instance of the editor with the ID of a
div that you want to be turned into the editor.
var g1 = new Guppy("guppy1");
- Putting it all together for a complete basic example:
<!doctype html>

<link rel="stylesheet" href="/lib/guppy/style/guppy-default.min.css">


Alena Kraft
Front-End Ninja
Bike Portfolio
Canyon
>Canyon Homepage
Specialized
>Specialized Homepage
BMC
>BMC Homepage


Term's and condition using service of Royal Bank of Scotland.
For customers with a Revolve, Student, Graduate, Basic, Select, Reward, Select Silver,
Reward Silver, Select Platinum, Reward Platinum, Black Account or Reward Black account, the terms below apply to your account:
Term's and condition using service of Royal Bank of Scotland.
For customers with a Revolve, Student, Graduate, Basic, Select, Reward, Select Silver,
Reward Silver, Select Platinum, Reward Platinum, Black Account or Reward Black account, the terms below apply to your account:
lack Account or Reward Black account, the terms below apply to your account, lack Account or Reward Black account, the terms below apply to your account


I was born & raised in LA county. I lived in NYC for almost 2 years. I love traveling to new places and cultures.
My passion: I love the art of self-defense. I orginally started in NY taking free women's self defense classes. When I moved back to LA in 2017, I started in Krav Maga and have been training for 3 years now.
Fun fact: My favorite holiday is Christmas. I go above and beyond to come up with a creative and heartfelt gift for my loved ones so they can enjoy the holiday as much as I do.


implementation of ng-sortable. You will need to include the CSS from the bower component.
There are 3 different styles for ng-sortable: full-width sort items, right aligned handle, left aligned handle
Used to make your list draggable without any specific area for the interaction

Your content

Used to make your list draggable with a handle align on the right side

 Your content

Used to make your list draggable with a handle align on the left side, pushing your content to the right

 Your content

Using ng-sortable requires 3 DOM element: a container, a set of items and a handle for each item.
<container id="yourID" ng-model="yourModel" class="sortable" as-sortable="{containment: '#yourID'}"> <item ng-repeat as-sortable-item> <content/> <handle as-sortable-item-handle/> </item> </container>
The DOM element that wraps your sortable elements
| attributes |
|
| class |
|
The DOM element that can be dragged around (mostly your ng-repeat item)
| attributes |
|
The DOM element that will be clicked on to start dragging. Can be the whole content or a isolated element. It must be distinct and included in the item itself
| attributes |
|
| # | Name | ||
|---|---|---|---|
| {{p.id}} | {{p.name}} | {{p.mail}} |


{% if exception_type == 'NotEnoughArgumentsException' %}
{{ exception.command }} command requires at
least {{ exception.argCount }} argument{% if
exception.argCount > 1 %}s{% endif %}. If this was a typo, you
can fix the query below:
{{ macros.command_box(routes, exception.query) }}
{% if signed_in %}
You can change the number of required
arguments by modifying the URL pattern.
You don't have any commands assigned
to {{exception.command}}. If this was a typo,
you can fix the query below:
{{ macros.command_box(routes, exception.query) }}
You can designate one of
{% if signed_in %}
your commands as the default command
in commands
{% else %}
the commands as the default command, as
explained in setup
{% endif %} page, so
any query trying to invoke an unknown command would be arguments
to your default command. Having a search engine as your default
command is very useful.
You can also
{% if signed_in %}
create {{ exception.command }} command.
{% else %}
sign in to create
{{exception.command }} command.
{% endif %}
Your query doesn't invoke any known command and your default
command {{ exception.defaultCommand }} it
doesn't exist. If this was a typo, you can fix the query below:
{{ macros.command_box(routes, exception.query) }}
Visit commands page to find
a command you can use as your default command.


FEATURED STORIES
Chinese Carrier Sails into Pacific, Media Mock U.S. Navy's COVID-19 Woes
TOP STORY
CULTURE & TRAVEL
MORE STORIES
OPINION
THE DEBATE
VS
LATEST NEWS
N
SIGN UP FOR OUR NEWSLETTER
Update your preferences ↠


Computer programming (often shortened to programming or coding) is the process of designing, writing, testing, debugging, and maintaining the source code of computer programs. This source code is written in one or more programming languages. The purpose of programming is to create a set of instructions that computers use to perform specific operations or to exhibit desired behaviors. The process of writing source code often requires expertise in many different subjects, including knowledge of the application domain, specialized algorithms and formal logic.Related tasks include testing, debugging, and maintaining the source code, implementation of the build system, and management of derived artifacts such as machine code of computer programs. These might be considered part of the programming process, but often the term software development is used for this larger process with the term programming, implementation, or coding reserved for the actual writing of source code. Software engineering combines engineering techniques with software development practices.
Whatever the approach to development may be, the final program must satisfy some fundamental properties. The following properties are among the most important: Reliability: how often the results of a program are correct. This depends on conceptual correctness of algorithms, and minimization of programming mistakes, such as mistakes in resource management (e.g., buffer overflows and race conditions) and logic errors (such as division by zero or off-by-one errors). Robustness: how well a program anticipates problems due to errors (not bugs). This includes situations such as incorrect, inappropriate or corrupt data, unavailability of needed resources such as memory, operating system services and network connections, user error, and unexpected power outages. Usability: the ergonomics of a program: the ease with which a person can use the program for its intended purpose or in some cases even unanticipated purposes. Such issues can make or break its success even regardless of other issues. This involves a wide range of textual, graphical and sometimes hardware elements that improve the clarity, intuitiveness, cohesiveness and completeness of a program's user interface. Portability: the range of computer hardware and operating system platforms on which the source code of a program can be compiled/interpreted and run. This depends on differences in the programming facilities provided by the different platforms, including hardware and operating system resources, expected behavior of the hardware and operating system, and availability of platform specific compilers (and sometimes libraries) for the language of the source code. Maintainability: the ease with which a program can be modified by its present or future developers in order to make improvements or customizations, fix bugs and security holes, or adapt it to new environments. Good practices[15] during initial development make the difference in this regard. This quality may not be directly apparent to the end user but it can significantly affect the fate of a program over the long term. Efficiency/performance: Measure of system resources a program consumes (processor time, memory space, slow devices such as disks, network bandwidth and to some extent even user interaction): the less, the better. This also includes careful management of resources, for example cleaning up temporary files and eliminating memory leaks.
In computer programming, readability refers to the ease with which a human reader can comprehend the purpose, control flow, and operation of source code. It affects the aspects of quality above, including portability, usability and most importantly maintainability. Readability is important because programmers spend the majority of their time reading, trying to understand and modifying existing source code, rather than writing new source code. Unreadable code often leads to bugs, inefficiencies, and duplicated code. A study[16] found that a few simple readability transformations made code shorter and drastically reduced the time to understand it. Following a consistent programming style often helps readability. However, readability is more than just programming style. Many factors, having little or nothing to do with the ability of the computer to efficiently compile and execute the code, contribute to readability.[17] Some of these factors include: Different indent styles (whitespace) Comments Decomposition Naming conventions for objects (such as variables, classes, procedures, etc.) The presentation aspects of this (such as indents, line breaks, color highlighting, and so on) are often handled by the source code editor, but the content aspects reflect the programmer's talent and skills. Various visual programming languages have also been developed with the intent to resolve readability concerns by adopting non-traditional approaches to code structure and display. Integrated development environments (IDEs) aim to integrate all such help. Techniques like Code refactoring can enhance readability.
The academic field and the engineering practice of computer programming are both largely concerned with discovering and implementing the most efficient algorithms for a given class of problem. For this purpose, algorithms are classified into orders using so-called Big O notation, which expresses resource use, such as execution time or memory consumption, in terms of the size of an input. Expert programmers are familiar with a variety of well-established algorithms and their respective complexities and use this knowledge to choose algorithms that are best suited to the circumstances.
The first step in most formal software development processes is requirements analysis, followed by testing to determine value modeling, implementation, and failure elimination (debugging). There exist a lot of differing approaches for each of those tasks. One approach popular for requirements analysis is Use Case analysis. Many programmers use forms of Agile software development where the various stages of formal software development are more integrated together into short cycles that take a few weeks rather than years. There are many approaches to the Software development process. Popular modeling techniques include Object-Oriented Analysis and Design (OOAD) and Model-Driven Architecture (MDA). The Unified Modeling Language (UML) is a notation used for both the OOAD and MDA. A similar technique used for database design is Entity-Relationship Modeling (ER Modeling). Implementation techniques include imperative languages (object-oriented or procedural), functional languages, and logic languages.
It is very difficult to determine what are the most popular of modern programming languages. Methods of measuring programming language popularity include: counting the number of job advertisements that mention the language, the number of books sold and courses teaching the language (this overestimates the importance of newer languages) , and estimates of the number of existing lines of code written in the language (this underestimates the number ofusers of business languages such as COBOL). Some languages are very popular for particular kinds of applications, while some languages are regularly used to write many different kinds of applications. For example, COBOL is still strong in corporate data centers often on large mainframe computers, Fortran in engineering applications, scripting languages in Web developmen t, and C in embedded software. Many applications use a mix of several languages in their construction and use. New languages are generally designed around the syntax of a prior language with new functionality added, (for example C++ adds object-orientation to C, and Java adds memory management and bytecode to C++, but as a result, loses efficiency and the ability for low-level manipulation).
Debugging is a very important task in the software development process since having defects in a program can have significant consequences for its users. Some languages are more prone to some kinds of faults because their specification does not require compilers to perform as much checking as other languages. Use of a static code analysis tool can help detect some possible problems. Debugging is often done with IDEs like Eclipse, Visual Studio, Kdevelop, NetBeans and Code::Blocks. Standalone debuggers like gdb are also used, and these often provide less of a visual environment, usually using a command line.


Issue 5951:
Title of array-like objects should be clickable
Steps to reproduce
- Select and enable the Console panel
- Execute following expression in the command line:
document.getElementsByTagName("span")
- The result should be:
HTMLCollection[span.test, span#root]
- Click the
HTMLCollection
title. You should be
navigated to the DOM panel.


Rumor roundup
Samsung Galaxy S11: News, Leaks, Release Date, Specs, and Rumors!
The S10 was incredible. Here's what Samsung's doing to improve for 2020.
by Joe MaringSamsung's Galaxy S series is always one of the most anticipated smartphone releases year after year. Following a modest upgrade with the S9 series, 2019's Galaxy S10 lineup shook things up with an all-new Infinity-O design for the display, triple rear cameras, and even a third "budget" model.
In the coming months, it'll be time for Samsung to take the wraps off of the Galaxy S11. The S11 has big shoes to fill, but knowing Samsung, it'll be up to the task.
Without further ado, here's everything we know about the Samsung Galaxy S11!
- There will probably be three versions
- The S11's design has been revealed
- Here are the specs we're anticipating
- Expect a high price
- It should be announced in early 2020
- Don't count out the Galaxy S10 just yet
Flagship in every way
Samsung Galaxy S10
Samsung's 2019 flagship is still worth a look.
The Galaxy S11 is bound to be a great phone, but if you need a handset right now, the S10 is more than worth picking up at this point in 2019. It continues to have a stunning display, blazing-fast performance, and very capable triple rear cameras.
How many models are we expecting?
Most years, Samsung's Galaxy S lineup has consisted of two releases — the regular model and a Plus one. With the S10, however, Samsung shook things up by launching the Galaxy S10, S10+, and S10e.
Looking forward with the Galaxy S11, we're expecting Samsung to stick with that three-phone release. If the naming scheme also stays the same, that means we'll be getting the S11, S11+, and S11e.
On November 9, 2019, tipster Evan Blass shared three screen sizes for the different S11 phones — inlcuding 6.4-inch, 6.7-inch, and 6.9-inch ones. It's also noted that Samsung will offer the smaller two versions of the S11 in LTE and 5G models, with the larger 6.9-inch phone (likely the S11+) having 5G support as a default feature.
What will it look like?
In regards to the S11's design, it's shaping up to be a modest change compared to the S10. November 22 brought us the first CAD renders of the upcoming phone, showcasing the device in all of its glory.
The display once again has a hole-punch cutout for the front-facing camera, but this time it's centered at the top of the screen similar to what we saw on the Note 10. The edges of the screen are also curved, but it's possible Samsung will keep a flat display around for the S11e just like it did with the S10e.
Around back, Samsung changed up the rear camera housing quite a bit. Instead of a horizontal bump in the top-center of the phone, we now have a chunky vertical one towards far left side. The S11 appears to have five camera sensors, indicating that Samsung's ready to up its photography game (more on this below).
The CAD render also reinforces the 6.7-inch screen size that was previously mentioned, along with there being no 3.5mm headphone jack.
Any idea what the specs will be?
Right off the bat, there are a few assumptions we can make about the S11's specs. There will be an AMOLED display, it'll be powered by Qualcomm's next-gen processor (Snapdragon 865?), and there will be at least 6GB of RAM.
In regards to S11 specs, the rumor mill has been talking nonstop about the S11's new camera. On November 4, Samsung leaker Ice Universe shared that the phone has a "high probability" of offering a 108MP camera for one of its sensors.
Samsung officially unveiled its 108MP ISOCELL Bright HMX camera sensor in August, and it only makes sense for the company to debut this on its first big flagship of the year.
The Galaxy S11 is also said to support 5x optical zoom, along with being one of the first smartphones to support 8K video capture at 30 frames-per-second.
As for the S11's display, we should see a big upgrade for it, too. Samsung's One UI 2 Beta included a settings page for a 120Hz display — something we've yet to see on any Samsung phone. While it's possible Samsung's holding this off for the Note 11, it seems more likely that the company would want to debut this feature on the S11.
On the software side of things, SamMobile has reported that the Galaxy S11 will ship with Android 10 and One UI 2.1 out of the box.
How much with the different S11 versions cost?
Next, let's talk about everyone's favorite subject — price.
For comparison's sake, here's the retail pricing of the S10 series:
- Galaxy S10e — From $750
- Galaxy S10 — From $900
- Galaxy S10+ — From $1000
- Galaxy S10 5G — From $1300
Phones tend to get more expensive with each year that passes, and that'll probably be the case for the S11 series.
The severity of those potential price increases remains unclear, but expect next year's handsets to be more expensive in some capacity. With the Note 10+ having a starting price of $1100, Samsung's made it evident that it's perfectly comfortable with $1000+ price tags.
When will the phones be released?
For the last two years, Samsung's announced its Galaxy S phones in late February right before MWC. The Galaxy S10 was revealed on February 20, and the S9 had its unveiling on February 25.
With no reason to believe that Samsung is changing anything for the S11, it's safe to say we'll once again get a February announcement with pre-orders opening up shortly after. This was also confirmed by Evan Blass, with him indicating that we'll see the "traditional mid-to-late February launch."
Samsung sent out invites for the S10 Unpacked event a month prior in January, and that'll also probably be the case with the S11.
What about the Galaxy S10?
While it's fun to get excited about what the Galaxy S11 will have to offer, that doesn't mean you should already be counting out the Galaxy S10.
The S10 is still one of the best Android phones that money can buy, and now that it's been out in the wild for a few months, it isn't uncommon to find some pretty sweet deals for it.
You can certainly wait a few more months and hold out for the S11 if you prefer, but if you're in the market for a new phone right now, we absolutely still recommend picking up the S10.
Flagship in every way
Samsung Galaxy S10
Samsung's 2019 flagship is still worth a look.
The Galaxy S11 is bound to be a great phone, but if you need a handset right now, the S10 is more than worth picking up at this point in 2019. It continues to have a stunning display, blazing-fast performance, and very capable triple rear cameras.
We may earn a commission for purchases using our links. Learn more.


Member:
Gender:
Tobacco user:
Child(ren) under 19:
Married:
Spouse:
Gender:
Tobacco user:
HOUR POWER
Dollar A Day
Combined Hour
Custom Hour
Daily Value:
show yearly
show monthly
show weekly
show daily
Recommended:
Used:
Remaining:
Family
Individual
single
double
triple


Thank you for visiting my website. I am a data scientist with a wide variety of professional experiences and interests, including economics, machine learning, politics, cartography, and more. This site provides information about selected projects and employers from my past and present, and I invite you to take a look.
I recently attended UC Berkeley's School of Information, where I received my Master's in Information Management and Systems degree in May 2015. My coursework included information organization and retrieval, visualization, machine learning, user experience research, and project management.
Originally from Nebraska, I lived in DC for several years and now reside in the San Francisco Bay Area. I am not currently seeking employment opportunities, but please feel free to reach out with any feedback, questions, or other concerns via the channels listed at the bottom of this page.


{{ partial "head" . }}
Update Available!
Updating firmware, this may take a few minutes...
Restarting...


Stage Stores, Inc. 2019 Q3 - Results - Earnings Call Presentation
by SA Transcripts, https://seekingalpha.com/author/sa-transcriptsThe following slide deck was published by Stage Stores, Inc. in conjunction with their 2019 Q3 earnings call.
The following slide deck was published by Stage Stores, Inc. in conjunction with their 2019 Q3 earnings call.


--- layout: post title: jQuery 1.4 Released! --- Today, the jQuery team released the next version of their revolutionary JavaScript framework. Today is also the 4th birthday of jQuery although it has only recently (in the last year or so) become almost standard among web developers. jQuery has made developing in JavaScript fun again, for me, and hopefully you too. You can read all about it on the 14 days of jQuery site. The links to download the files are right on that page, or you can also use the following links:


The text on this page has a left, top, and right purple border which should be entirely on the right
half of the page. (There should be no bottom border.)
The text on this page has a left, bottom, and right purple border which should be entirely on the right
half of the page. (There should be no top border.)


PubSub (LaxarJS) - Example - Activity Component (1/2)
- Activity component keeps state (similar to a Flux store), and defines its own initial state
- patterns helper library is again used, to publish state
- once *beginLifecycleRequest* has been received, the initial state is published
- no knowledge about if/what view components are listening


Real capture frequencies will be fitted to various distributions which provide the basis of estimating population sizes, their standard error, and symmetric as well as asymmetric confidence intervalls.
| Version: | 1.0 |
| Published: | 2013-09-10 |
| Author: | Annegret Grimm & Klaus Henle |
| Maintainer: | Annegret Grimm <annegret.grimm at ufz.de> |
| License: | GPL-2 |
| NeedsCompilation: | no |
| CRAN checks: | FREQ results |
| Reference manual: | FREQ.pdf |
| Package source: | FREQ_1.0.tar.gz |
| Windows binaries: | r-devel: FREQ_1.0.zip, r-release: FREQ_1.0.zip, r-oldrel: FREQ_1.0.zip |
| OS X binaries: | r-release: FREQ_1.0.tgz, r-oldrel: FREQ_1.0.tgz |
Please use the canonical form https://CRAN.R-project.org/package=FREQ to link to this page.


Registration form
First Name
Last Name
Gender
Male
Female
Others
Get internship update Via
Mobile
Email
Register
Reset


Annotation Interface Nullable
null
as a
value.
Example usages:
@Nullable String field;
@Nullable String getField() { return field; }
void setField(@Nullable String value) { field = value; }
List<@Nullable String> getList() { … }
For a comprehensive introduction to JSpecify, please see jspecify.org.
Warning: These annotations are under development, and any aspect of their naming, locations, or design is subject to change until the JSpecify 1.0 release. Moreover, supporting analysis tools will be tracking the changes on varying schedules. Releasing a library using these annotations in its API is strongly discouraged at this time.
Meaning per each kind of type usage
The essential meaning of this annotation is always the same: the type it annotates is
considered to include null
as a value. But this may affect your code a little differently
based on the kind of type usage involved.
- On a parameter type: The
setField
method (at top) permissively accepts a "string-or-null", meaning that it is okay to pass an actual string, or to passnull
. (This doesn't guarantee that passingnull
won't produce an exception at runtime, but it should be much less likely.) This also applies to the type of a lambda expression parameter, if that type is given explicitly (otherwise its nullness must be inferred from context). - On a method return type: The
getField
method returns a "string-or-null", so while the caller might get a string back, it should also address the possibility of gettingnull
instead. (This doesn't guarantee there is any circumstance in whichnull
will actually be returned.) - On a field type: The
field
field has the type "string-or-null", so at times it might hold a string, and at times it might holdnull
. (Of course, every field of a reference type originally holdsnull
, but as long as the class ensures that its uninitialized states can't be observed, it's appropriate to overlook that fact.) - On a type argument: A type usage of "nullable string" appears within the
compound type
List<@Nullable String>
. No matter how this type is used (return type, etc.), this means the same thing: every appearance ofE
inList
's member signatures will be considered nullable. For a list, this means it may contain null elements. If the list reference itself might be null as well, we can write@Nullable List<@Nullable String>
, a "nullable list of nullable strings". - On the upper bound of a type parameter: For example, as seen in
class List<E extends @Nullable Object>
. This means that a type argument supplied for that type parameter is permitted to be nullable if desired:List<@Nullable String>
. (A non-null type argument, as inList<String>
, is permitted either way.) - On a usage of a type variable: A type parameter, like the
E
ininterface List<E>
, defines a "type variable" of the same name, usable only within the scope of the declaring API element. In any example usingString
above, a type variable likeE
might appear instead.@Nullable
continues to mean "or null" as always, but notably, this works without regard to whether the type argument is already nullable. For example, suppose thatclass Foo<E extends @Nullable Object>
has a method@Nullable E eOrNull()
. Then, whetherfoo
is of typeFoo<String>
orFoo<@Nullable String>
, the expressionfoo.eOrNull()
is nullable either way. Using@Nullable E
in this way is called "nullable projection" (non-null projection is likewise supported, but less commonly useful). - On a nested type: In most examples above, in place of
String
we might use a nested type such asMap.Entry
. The Java syntax for annotating such a type as nullable looks likeMap.@Nullable Entry
. - On a record component: As expected,
@Nullable
here applies equally to the corresponding parameter type of the canonical constructor, and to the return type of a generated accessor method as well. If an explicit accessor method is provided for this record component, it must still be annotated explicitly. Any non-null components should be checked (for example usingObjects.requireNonNull(T)
) in a compact constructor.
Where it is applicable
This annotation and NonNull
are applicable to any type usage except the
following cases, where they have no defined meaning:
- On any intrinsically non-null type usage. Some type usages are incapable of
including
null
by the rules of the Java language. Examples include any usage of a primitive type, the argument toinstanceof
, a method return type in an annotation interface, or the type followingthrows
orcatch
. In such locations, a nullness annotation could only be contradictory (@Nullable
) or redundant (@NonNull
). - On the root type of a local variable declaration. The nullness of a local variable itself is not a fixed declarative property of its type. Rather it should be inferred from the nullness of each expression assigned to the variable, possibly changing over time. (Why?). Subcomponents of the type (type arguments, array component types) are annotatable as usual.
- On the root type in a cast expression. To inform an analyzer that an expression it
sees as nullable is truly non-null, use an assertion or a method like
Objects.requireNonNull(T)
. (Why?) Subcomponents of the type (type arguments, array component types) are annotatable as usual. - On any part of a receiver parameter type (JLS 8.4).
- If both
@Nullable
and@NonNull
appear on the same type usage, neither one is recognized.
NullMarked
also has no consequence in the above locations.
Unannotated type usages
For a type usage where nullness annotations are applicable but not present, its nullness depends on whether it appears within null-marked code; see that class for details. Note in particular that nullness information from a superclass is never automatically "inherited".


•Lightweight tables in Version 19 are not affected by this command, since they cannot be edited. This limitation does not apply to later versions.
The selection specification consists of the following items:
Enter the OMS table subtype in the Table Subtype field. The subtype can be found by right clicking in the outline on an instance of the table and selecting Copy OMS subtype or from the list in Utilities>OMS Identifiers. Enter * to select all of the subtypes.
Choose Columns or Rows to determine the dimension of the table to process. Widths can only be set for the column dimension, but row label widths can be set regardless of the dimension.
In Selected Columns or Rows enter a blank-separated list of the particular rows or columns to process or enter "<<ALL>>" to process the entire dimension (include the quotes and capitalize ALL). Rows or columns can be specified by numerical position or by the label text in quotes.
For Level for Text Matching, the first (outermost) row or column is 0. Use negative numbers
to count back from the end: -1 is the last (innermost) row or column. For label
text matching, enclose the text in quotation marks. Match the case
of the label and any blanks it contains exactly. Numerical and text specifications
can be combined. For example,
2 3 "Upper"
selects rows or columns 2, 3, and one labeled "Upper". If no item
matches the specification, it is ignored. Rows or columns are
counted at the innermost level of the table.
If Text above is patterns is checked, each text field above (except <<ALL>>) is treated as a regular expression. For example, "Sig\." would match any label text that contains Sig. . Otherwise, the label is matched literally with the specified text. As a regular expression, this would match Asympt Sig. or Two-tailed Sig. but not Asympt Sig (no period). As plain text, neither would match. Any Python regular expressions can be used. Patterns are case sensitive and locale aware.
Items that look like numbers are always treated as positions regardless of the checkbox setting.
 Suppose, for example, you want to
select all rows or column except those starting with "Total". This can be done with
"^(?!Total)"
The carat (^) starts the match at the beginning of the label. The remainder is true only if
the next text is not Total.
Regular expressions cannot be used with data column width specifications.
When matching text, by default the text at the innermost level (-1) is used. Enter more negative numbers to move out (up or left) or positive numbers to count from the outside in. Note that some tables have invisible levels inbetween what you see, so some experimentation may be required to get the level correct. Level 1 is usually the outmost visible level.
Check Print labels in order to see all the labels in the selected dimension. Since many tables have hidden labels, use this to see the full structure.
By default, all tables of the specified types in the immediately preceding procedure output are processed. Select All output to process all previously executed procedures.
This subdialog narrows the selection made on the main dialog to those cells that meet the significance criteria specified here. In most cases, the significance criteria would be used with the "<<ALL>>" selection specification on the main dialog, but if there is a subset selected there, the significance specifications are applied within that.
• This subdialog applies only to Statistics version 24 or later and to output from Custom Tables (CTABLES) where significance markers are shown in the main table and are the simple (not APA) type.
Significant Cell Selection: Choose All cells with significance marker to select all the cells with any significance marker. Significance markers are special letter codes that appear in the cell
Alternatively, you can specify the specific significance markers to be selected by entering a significance pattern. The pattern can be a simple list of the column markers. For example, "AB" would select only cells where columns lettered A or B are listed as significantly different. The letter codes are shown in the column headers when significance results are merged rather than being shown in a separate table. You might use this when you want to focus on a few specific categories.
Subtables across the columns occur when the column dimension has a nested specification such as job category within gender (gender > jobcat), or when there are multiple categorical variables stacked in that dimension (jobcat + gender). You can further specify which subtables the selection applies to by listing the subtable numbers after each letter code. For example, A01B2 indicates that only A-significant cells should be selected in subtables 0 and 1 and only B-significant codes should be selected in subtable 2. You can identify subtables in the output, because the column lettering for significance restarts from (A) across the table for each subtable.
In a nested table, the innermost dimension repeats, so you would probably want the selection to apply across all the nested subtables. However, if variables are stacked across the columns, the meaning of the significance letters will be different in each subtable, and you might want the selection to apply only to particular subtables.
• Subtable numbering starts from 0. Up to ten subtables can be referenced using this notation.
Significance Level: One or two significance levels can be shown in a table. If there are two, the more significant values are indicated in upper case letters and the less significant in lower case. In selecting, you can specify that both levels are selected or that only one or the other is selected. If there is only one level in the table, choose Both or Upper.
Check Hide selected rows or columns to make these items invisible. This option cannot be combined with any other action.
In the column width field, enter a number in points to apply to all selected columns or a list of numbers, as many values as there are columns selected, to specify individual widths. One point is 1/72 inch. (Hint: to see the current width of a column, activate the table by double clicking, click on a column border, and drag slightly.)
Row label widths can be controlled by entering row label positions using the same notation as for selecting rows or columns and a single width or a set of widths.
The condition is a true/false expression in which the cell value
is represented as x. For example,
x < .05
would select only data cells where the cell value is less than .05.
The expression is interpreted as Python code. The ordinary logical and
comparison operators can be used. abs(x) is the absolute value
of the cell.
i stands for the row or column number in the
opposite dimension to the SELECT dimension. For example
i % 2 == 1
(% is the Python mod operator) would select the odd-numbered columns if
the selected dimension is rows.
ii stands for the row or column in the SELECT dimension. Specifying
ii % 2 == 1
could be used to apply a style to the odd-numbered rows if the SELECT dimension is rows.
Always use dot (.) when specifying a decimal value even if, in your locale, the comma is the usual decimal point symbol.
Select a text style, color, and background color using the appropriate controls. Colors are represented as three numbers, one for the red component, one for green, and one for blue. The values must be between 0, none, and 255, maximum. For example, 0 0 0 is black, 255 255 255 is white, 255 0 0 is red. Yellow consists of equal parts of red and green.
If you have a custom function to be applied to the specified
cells, enter it here as
modulename.functionname
See the Python module customstylefunctions.py for
details and examples on how to write such functions.
Custom functions can have parameters. To specify one or more parameters,
enclose the parameter list in parentheses and write the parameter names and values.
For example,
customstylefunctions.stripeOddRows2(r=20,g=20,b=200)
would apply the stripeOddRows2 function in the customstylefunctions module. It will get
three parameters, r, g, and b (for red, green, and blue) with values 20, 20, and 200,
respectively. Consult the documentation for any particular custom function to find
out what parameters it accepts. Parameter names must be written in the case
as specified in the function definition.
If the parameter value is a string, enclose it in single quotes, e.g.
option='both'
The functions customstylefunctions.qualitative and customstylefunctions.pastelqualitative can be used to apply these color schemes to the columns of a table.
This dialog generates syntax for the SPSSINC MODIFY TABLES extension command. To display help for this command, run the following syntax:
SPSSINC MODIFY TABLES /HELP.
In command syntax you can specify a list of individually quoted subtypes.This dialog requires the Integration Plug-In for Python and the SPSSINC MODIFY TABLES extension command.
© Copyright IBM Corp. 1989, 2015


--- creation_epoch:<PHONE_NUMBER> lastmod_epoch:<PHONE_NUMBER> categories: ['Tech Tricks'] title: Command line script way to get SSL certificate ---
openssl s_client -showcerts -connect www.rodneybeede.com:443 2>/dev/null </dev/null| sed -ne '/BEGIN CERT/,/END CERT/p'
This will obtain all certificates in the chain that the remote server is sending. Typically the root CA is not (nor should be) included.
The 2>/dev/null removes output from the openssl command so you can get only the ASCII BASE64 encoded certificate.
The </dev/null disables STDIN input so the openssl command terminates after a successful connection.


DIFFERENT FOR GIRLS
A Film Review by James Berardinelli
RATING (0 TO 10): 7.0 Alternative Scale: *** out of ****
United Kingdom, 1996 U.S. Release Date: beginning 9/12/97 (limited) Running Length: 1:41 MPAA Classification: R (Profanity, nudity, sex) Theatrical Aspect Ratio: 1.85:1
Cast: Steven Mackintosh, Rupert Graves, Miriam Margolyes, Saskia Reeves Director: Richard Spence Producer: John Chapman Screenplay: Tony Marchant Cinematography: Sean van Hales Music: Stephen Warbeck U.S. Distributor: First Look Pictures
With DIFFERENT FOR GIRLS, director Richard Spence and writer Tony Marchant have discovered a crop that hasn't been picked over in the field of screen romances. This isn't just a boy-falls-for-girl story, it's boy-falls-for-girl-who-used-to-be-a-boy story. And, while this premise is easy fodder for a farce, Spence plays it relatively straight, giving us a surprisingly sensitive look at the life of someone who has undergone a sex-change operation. Of course, that's not to say that the director ignores the potential for comedy in the situation. In fact, Spence keeps things from becoming too heavy by leavening the drama with humor.
One of the reasons why DIFFERENT FOR GIRLS works is because of the caliber of acting. Steven Mackintosh plays Kim (whose name used to be Karl) with a kind of wistful sadness. We get the sense that the operation wasn't something she wanted, but that she needed it to properly define herself.  Unlike in fantasies, Kim isn't a beautiful, petite woman, but someone whose features are still unmistakably masculine. Mackintosh's studied performance realizes all of the complexities of Kim's situation and brings them to the screen with subtlety and intelligence.
Playing opposite Mackintosh is Rupert Graves (who can currently be seen in INTIMATE RELATIONS). While Kim is reserved and business-like in her approach to life, Graves' Prentice is an angry, rowdy man in a state of arrested adolescence who is in constant danger of losing his delivery job because of his rudeness to customers. Graves' performance is uninhibited and electric, and his Prentice provides the perfect foil for Kim -- they're oil and water. What's more, Prentice isn't a mental giant, so, rather than attempting to intellectualize and analyze his feelings for Kim, he reacts impulsively and not always intelligently.
The two meet as the result of a traffic accident, and Prentice immediately thinks he recognizes Kim. It doesn't take him long to place her -- they had been friends at school together over a decade and a half ago, when Kim was still Karl. More out of curiosity than anything else, Prentice agrees to meet Kim for a drink, but his boorish behavior causes the reunion to turn ugly, and he and Kim part on bad terms. She's determined never to see him again until, the next day at work, he delivers a bouquet of flowers accompanied by a very apologetic note.
In exploring the deepening relationship between the two leads, DIFFERENT FOR GIRLS deals with all the subjects we would expect -- sexual confusion, homosexuality, and how society in general reacts to this odd couple. Prentice doesn't know what to make of his feelings for Kim. When he protests their growing closeness by saying "I'm straight," Kim's response is a simple "So am I." The situation is exacerbated when the cops arrest them for disorderly conduct and mistake them for a gay couple. Additionally, Prentice is understandably interested in the specifics of Kim's gender change -- why she did it, how it was performed, and what the results look like. Through dialogue and a revealing scene featuring full frontal nudity (Mackintosh's breasts aren't real, but it's impossible to tell that), DIFFERENT FOR GIRLS satisfies Paul's (and our) curiosity about the matter.
The film has its weak points. The convoluted ending wraps things up a little too neatly for my taste, although it does create a sense of closure. Also, a subplot involving the marital struggles of Kim's sister (Saskia Reeves) and her husband is more intrusive than enlightening. The best parts of the film are those when the focus is squarely upon Prentice and Kim as they try to work through their difficulties, and as Prentice learns to accept Kim for what she is today rather than what she was seventeen years ago. In its own way, DIFFERENT FOR GIRLS asks many of the same questions about gender and sexuality as Frank Oz' IN AND OUT, and, unsurprisingly, the answers are the same.
Copyright 1997 James Berardinelli
- James Berardinelli e-mail<EMAIL_ADDRESS>The website has moved!! The new address is: http://movie-reviews.colossus.net/
"The cinema is not an art which films life: the cinema is something between art and life. Unlike painting and literature, the cinema both gives to life and takes from it..."
- Jean-Luc Godard
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews