text:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<title>ClassWriter</title>
<meta name="date" content="2014-07-08">
<link rel="stylesheet" type="text/css" href="../../../stylesheet.css" title="Style">

JavaScript is disabled on your browser.

org.objectweb.asm

Class ClassWriter

java.lang.Object

org.objectweb.asm.ClassVisitor

org.objectweb.asm.ClassWriter

public class ClassWriter
extends ClassVisitor

A ClassVisitor that generates classes in bytecode form. More
 precisely this visitor generates a byte array conforming to the Java class
 file format. It can be used alone, to generate a Java class "from scratch",
 or with one or more ClassReader and adapter class visitor
 to generate a modified class from one or more existing Java classes.

Author:

Eric Bruneton

Field Summary

Fields

Modifier and Type
Field and Description

(package private) static int
ACC_SYNTHETIC_ATTRIBUTE

Pseudo access flag to distinguish between the synthetic attribute and the
 synthetic access flag.

private int
access

The access flags of this class.

private AnnotationWriter
anns

The runtime visible annotations of this class.

private Attribute
attrs

The non standard attributes of this class.

(package private) ByteVector
bootstrapMethods

The BootstrapMethods attribute.

(package private) int
bootstrapMethodsCount

The number of entries in the BootstrapMethods attribute.

(package private) static int
BSM

The type of BootstrapMethods items.

(package private) static int
CLASS

The type of CONSTANT_Class constant pool items.

static int
COMPUTE_FRAMES

Flag to automatically compute the stack map frames of methods from
 scratch.

static int
COMPUTE_MAXS

Flag to automatically compute the maximum stack size and the maximum
 number of local variables of methods.

private boolean
computeFrames

<tt>true</tt> if the stack map frames must be recomputed from scratch.

private boolean
computeMaxs

<tt>true</tt> if the maximum stack size and number of local variables
 must be automatically computed.

(package private) ClassReader
cr

The class reader from which this class writer was constructed, if any.

(package private) static int
DOUBLE

The type of CONSTANT_Double constant pool items.

private int
enclosingMethod

The constant pool item that contains the name and descriptor of the
 enclosing method of this class.

private int
enclosingMethodOwner

The constant pool item that contains the name of the enclosing class of
 this class.

(package private) static int
FIELD

The type of CONSTANT_Fieldref constant pool items.

(package private) static int
FIELDORMETH_INSN

The type of field and method invocations instructions.

(package private) FieldWriter
firstField

The fields of this class.

(package private) MethodWriter
firstMethod

The methods of this class.

(package private) static int
FLOAT

The type of CONSTANT_Float constant pool items.

(package private) static int
HANDLE

The type of CONSTANT_MethodHandle constant pool items.

(package private) static int
HANDLE_BASE

The base value for all CONSTANT_MethodHandle constant pool items.

private AnnotationWriter
ianns

The runtime invisible annotations of this class.

(package private) static int
IINC_INSN

The type of the IINC instruction.

(package private) static int
IMETH

The type of CONSTANT_InterfaceMethodref constant pool items.

(package private) static int
IMPLVAR_INSN

The type of instructions with an implicit local variable index argument.

(package private) int
index

Index of the next item to be added in the constant pool.

(package private) static int
INDY

The type of CONSTANT_InvokeDynamic constant pool items.

(package private) static int
INDYMETH_INSN

The type of the INVOKEDYNAMIC instruction.

private ByteVector
innerClasses

The InnerClasses attribute.

private int
innerClassesCount

The number of entries in the InnerClasses attribute.

(package private) static int
INT

The type of CONSTANT_Integer constant pool items.

private int
interfaceCount

Number of interfaces implemented or extended by this class or interface.

private int[]
interfaces

The interfaces implemented or extended by this class or interface.

(package private) boolean
invalidFrames

<tt>true</tt> if the stack map tables of this class are invalid.

(package private) Item[]
items

The constant pool's hash table data.

(package private) static int
ITFMETH_INSN

The type of the INVOKEINTERFACE/INVOKEDYNAMIC instruction.

(package private) Item
key

A reusable key used to look for items in the items hash table.

(package private) Item
key2

A reusable key used to look for items in the items hash table.

(package private) Item
key3

A reusable key used to look for items in the items hash table.

(package private) Item
key4

A reusable key used to look for items in the items hash table.

(package private) static int
LABEL_INSN

The type of instructions with a 2 bytes bytecode offset label.

(package private) static int
LABELW_INSN

The type of instructions with a 4 bytes bytecode offset label.

(package private) FieldWriter
lastField

The fields of this class.

(package private) MethodWriter
lastMethod

The methods of this class.

(package private) static int
LDC_INSN

The type of the LDC instruction.

(package private) static int
LDCW_INSN

The type of the LDC_W and LDC2_W instructions.

(package private) static int
LONG

The type of CONSTANT_Long constant pool items.

(package private) static int
LOOK_INSN

The type of the LOOKUPSWITCH instruction.

(package private) static int
MANA_INSN

The type of the MULTIANEWARRAY instruction.

(package private) static int
METH

The type of CONSTANT_Methodref constant pool items.

(package private) static int
MTYPE

The type of CONSTANT_MethodType constant pool items.

private int
name

The constant pool item that contains the internal name of this class.

(package private) static int
NAME_TYPE

The type of CONSTANT_NameAndType constant pool items.

(package private) static int
NOARG_INSN

The type of instructions without any argument.

(package private) ByteVector
pool

The constant pool of this class.

(package private) static int
SBYTE_INSN

The type of instructions with an signed byte argument.

(package private) static int
SHORT_INSN

The type of instructions with an signed short argument.

private int
signature

The constant pool item that contains the signature of this class.

private ByteVector
sourceDebug

The SourceDebug attribute of this class.

private int
sourceFile

The index of the constant pool item that contains the name of the source
 file from which this class was compiled.

(package private) static int
STR

The type of CONSTANT_String constant pool items.

private int
superName

The constant pool item that contains the internal name of the super class
 of this class.

(package private) static int
TABL_INSN

The type of the TABLESWITCH instruction.

(package private) java.lang.String
thisName

The internal name of this class.

(package private) int
threshold

The threshold of the constant pool's hash table.

(package private) static int
TO_ACC_SYNTHETIC

Factor to convert from ACC_SYNTHETIC_ATTRIBUTE to Opcode.ACC_SYNTHETIC.

(package private) static byte[]
TYPE

The instruction types of all JVM opcodes.

(package private) static int
TYPE_INSN

The type of instructions with a type descriptor argument.

(package private) static int
TYPE_MERGED

Merged type Item stored in the ClassWriter typeTable,
 instead of the constant pool, in order to avoid clashes with normal
 constant pool items in the ClassWriter constant pool's hash table.

(package private) static int
TYPE_NORMAL

Normal type Item stored in the ClassWriter typeTable,
 instead of the constant pool, in order to avoid clashes with normal
 constant pool items in the ClassWriter constant pool's hash table.

(package private) static int
TYPE_UNINIT

Uninitialized type Item stored in the ClassWriter
 typeTable, instead of the constant pool, in order to
 avoid clashes with normal constant pool items in the ClassWriter constant
 pool's hash table.

private short
typeCount

Number of elements in the typeTable array.

(package private) Item[]
typeTable

A type table used to temporarily store internal names that will not
 necessarily be stored in the constant pool.

(package private) static int
UTF8

The type of CONSTANT_Utf8 constant pool items.

(package private) static int
VAR_INSN

The type of instructions with a local variable index argument.

(package private) int
version

Minor and major version numbers of the class to be generated.

(package private) static int
WIDE_INSN

The type of the WIDE instruction.

Fields inherited from class org.objectweb.asm.ClassVisitor

api, cv

Constructor Summary

Constructors

Constructor and Description

ClassWriter(ClassReader classReader,
           int flags)

Constructs a new ClassWriter object and enables optimizations for
 "mostly add" bytecode transformations.

ClassWriter(int flags)

Constructs a new ClassWriter object.

Method Summary

Methods

Modifier and Type
Method and Description

private Item
addType(Item item)

Adds the given Item to typeTable.

(package private) int
addType(java.lang.String type)

Adds the given internal name to typeTable and returns its index.

(package private) int
addUninitializedType(java.lang.String type,
                    int offset)

Adds the given "uninitialized" type to typeTable and returns its
 index.

private Item
get(Item key)

Returns the constant pool's hash table item which is equal to the given
 item.

protected java.lang.String
getCommonSuperClass(java.lang.String type1,
                   java.lang.String type2)

Returns the common super type of the two given types.

(package private) int
getMergedType(int type1,
             int type2)

Returns the index of the common super type of the two given types.

int
newClass(java.lang.String value)

Adds a class reference to the constant pool of the class being build.

(package private) Item
newClassItem(java.lang.String value)

Adds a class reference to the constant pool of the class being build.

int
newConst(java.lang.Object cst)

Adds a number or string constant to the constant pool of the class being
 build.

(package private) Item
newConstItem(java.lang.Object cst)

Adds a number or string constant to the constant pool of the class being
 build.

(package private) Item
newDouble(double value)

Adds a double to the constant pool of the class being build.

int
newField(java.lang.String owner,
        java.lang.String name,
        java.lang.String desc)

Adds a field reference to the constant pool of the class being build.

(package private) Item
newFieldItem(java.lang.String owner,
            java.lang.String name,
            java.lang.String desc)

Adds a field reference to the constant pool of the class being build.

(package private) Item
newFloat(float value)

Adds a float to the constant pool of the class being build.

int
newHandle(int tag,
         java.lang.String owner,
         java.lang.String name,
         java.lang.String desc)

Adds a handle to the constant pool of the class being build.

(package private) Item
newHandleItem(int tag,
             java.lang.String owner,
             java.lang.String name,
             java.lang.String desc)

Adds a handle to the constant pool of the class being build.

(package private) Item
newInteger(int value)

Adds an integer to the constant pool of the class being build.

int
newInvokeDynamic(java.lang.String name,
                java.lang.String desc,
                Handle bsm,
                java.lang.Object... bsmArgs)

Adds an invokedynamic reference to the constant pool of the class being
 build.

(package private) Item
newInvokeDynamicItem(java.lang.String name,
                    java.lang.String desc,
                    Handle bsm,
                    java.lang.Object... bsmArgs)

Adds an invokedynamic reference to the constant pool of the class being
 build.

(package private) Item
newLong(long value)

Adds a long to the constant pool of the class being build.

int
newMethod(java.lang.String owner,
         java.lang.String name,
         java.lang.String desc,
         boolean itf)

Adds a method reference to the constant pool of the class being build.

(package private) Item
newMethodItem(java.lang.String owner,
             java.lang.String name,
             java.lang.String desc,
             boolean itf)

Adds a method reference to the constant pool of the class being build.

int
newMethodType(java.lang.String methodDesc)

Adds a method type reference to the constant pool of the class being
 build.

(package private) Item
newMethodTypeItem(java.lang.String methodDesc)

Adds a method type reference to the constant pool of the class being
 build.

int
newNameType(java.lang.String name,
           java.lang.String desc)

Adds a name and type to the constant pool of the class being build.

(package private) Item
newNameTypeItem(java.lang.String name,
               java.lang.String desc)

Adds a name and type to the constant pool of the class being build.

private Item
newString(java.lang.String value)

Adds a string to the constant pool of the class being build.

int
newUTF8(java.lang.String value)

Adds an UTF8 string to the constant pool of the class being build.

private void
put(Item i)

Puts the given item in the constant pool's hash table.

private void
put112(int b1,
      int b2,
      int s)

Puts two bytes and one short into the constant pool.

private void
put122(int b,
      int s1,
      int s2)

Puts one byte and two shorts into the constant pool.

byte[]
toByteArray()

Returns the bytecode of the class that was build with this class writer.

void
visit(int version,
     int access,
     java.lang.String name,
     java.lang.String signature,
     java.lang.String superName,
     java.lang.String[] interfaces)

Visits the header of the class.

AnnotationVisitor
visitAnnotation(java.lang.String desc,
               boolean visible)

Visits an annotation of the class.

void
visitAttribute(Attribute attr)

Visits a non standard attribute of the class.

void
visitEnd()

Visits the end of the class.

FieldVisitor
visitField(int access,
          java.lang.String name,
          java.lang.String desc,
          java.lang.String signature,
          java.lang.Object value)

Visits a field of the class.

void
visitInnerClass(java.lang.String name,
               java.lang.String outerName,
               java.lang.String innerName,
               int access)

Visits information about an inner class.

MethodVisitor
visitMethod(int access,
           java.lang.String name,
           java.lang.String desc,
           java.lang.String signature,
           java.lang.String[] exceptions)

Visits a method of the class.

void
visitOuterClass(java.lang.String owner,
               java.lang.String name,
               java.lang.String desc)

Visits the enclosing class of the class.

void
visitSource(java.lang.String file,
           java.lang.String debug)

Visits the source of the class.

Methods inherited from class java.lang.Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Field Detail

COMPUTE_MAXS

public static final int COMPUTE_MAXS

Flag to automatically compute the maximum stack size and the maximum
 number of local variables of methods. If this flag is set, then the
 arguments of the visitMaxs method of the
 MethodVisitor returned by the visitMethod
 method will be ignored, and computed automatically from the signature and
 the bytecode of each method.

See Also:

ClassWriter(int),
Constant Field Values

COMPUTE_FRAMES

public static final int COMPUTE_FRAMES

Flag to automatically compute the stack map frames of methods from
 scratch. If this flag is set, then the calls to the
 MethodVisitor.visitFrame(int, int, java.lang.Object[], int, java.lang.Object[]) method are ignored, and the stack map
 frames are recomputed from the methods bytecode. The arguments of the
 visitMaxs method are also ignored and
 recomputed from the bytecode. In other words, computeFrames implies
 computeMaxs.

See Also:

ClassWriter(int),
Constant Field Values

ACC_SYNTHETIC_ATTRIBUTE

static final int ACC_SYNTHETIC_ATTRIBUTE

Pseudo access flag to distinguish between the synthetic attribute and the
 synthetic access flag.

See Also:

Constant Field Values

TO_ACC_SYNTHETIC

static final int TO_ACC_SYNTHETIC

Factor to convert from ACC_SYNTHETIC_ATTRIBUTE to Opcode.ACC_SYNTHETIC.

See Also:

Constant Field Values

NOARG_INSN

static final int NOARG_INSN

The type of instructions without any argument.

See Also:

Constant Field Values

SBYTE_INSN

static final int SBYTE_INSN

The type of instructions with an signed byte argument.

See Also:

Constant Field Values

SHORT_INSN

static final int SHORT_INSN

The type of instructions with an signed short argument.

See Also:

Constant Field Values

VAR_INSN

static final int VAR_INSN

The type of instructions with a local variable index argument.

See Also:

Constant Field Values

IMPLVAR_INSN

static final int IMPLVAR_INSN

The type of instructions with an implicit local variable index argument.

See Also:

Constant Field Values

TYPE_INSN

static final int TYPE_INSN

The type of instructions with a type descriptor argument.

See Also:

Constant Field Values

FIELDORMETH_INSN

static final int FIELDORMETH_INSN

The type of field and method invocations instructions.

See Also:

Constant Field Values

ITFMETH_INSN

static final int ITFMETH_INSN

The type of the INVOKEINTERFACE/INVOKEDYNAMIC instruction.

See Also:

Constant Field Values

INDYMETH_INSN

static final int INDYMETH_INSN

The type of the INVOKEDYNAMIC instruction.

See Also:

Constant Field Values

LABEL_INSN

static final int LABEL_INSN

The type of instructions with a 2 bytes bytecode offset label.

See Also:

Constant Field Values

LABELW_INSN

static final int LABELW_INSN

The type of instructions with a 4 bytes bytecode offset label.

See Also:

Constant Field Values

LDC_INSN

static final int LDC_INSN

The type of the LDC instruction.

See Also:

Constant Field Values

LDCW_INSN

static final int LDCW_INSN

The type of the LDC_W and LDC2_W instructions.

See Also:

Constant Field Values

IINC_INSN

static final int IINC_INSN

The type of the IINC instruction.

See Also:

Constant Field Values

TABL_INSN

static final int TABL_INSN

The type of the TABLESWITCH instruction.

See Also:

Constant Field Values

LOOK_INSN

static final int LOOK_INSN

The type of the LOOKUPSWITCH instruction.

See Also:

Constant Field Values

MANA_INSN

static final int MANA_INSN

The type of the MULTIANEWARRAY instruction.

See Also:

Constant Field Values

WIDE_INSN

static final int WIDE_INSN

The type of the WIDE instruction.

See Also:

Constant Field Values

TYPE

static final byte[] TYPE

The instruction types of all JVM opcodes.

CLASS

static final int CLASS

The type of CONSTANT_Class constant pool items.

See Also:

Constant Field Values

FIELD

static final int FIELD

The type of CONSTANT_Fieldref constant pool items.

See Also:

Constant Field Values

METH

static final int METH

The type of CONSTANT_Methodref constant pool items.

See Also:

Constant Field Values

IMETH

static final int IMETH

The type of CONSTANT_InterfaceMethodref constant pool items.

See Also:

Constant Field Values

STR

static final int STR

The type of CONSTANT_String constant pool items.

See Also:

Constant Field Values

INT

static final int INT

The type of CONSTANT_Integer constant pool items.

See Also:

Constant Field Values

FLOAT

static final int FLOAT

The type of CONSTANT_Float constant pool items.

See Also:

Constant Field Values

LONG

static final int LONG

The type of CONSTANT_Long constant pool items.

See Also:

Constant Field Values

DOUBLE

static final int DOUBLE

The type of CONSTANT_Double constant pool items.

See Also:

Constant Field Values

NAME_TYPE

static final int NAME_TYPE

The type of CONSTANT_NameAndType constant pool items.

See Also:

Constant Field Values

UTF8

static final int UTF8

The type of CONSTANT_Utf8 constant pool items.

See Also:

Constant Field Values

MTYPE

static final int MTYPE

The type of CONSTANT_MethodType constant pool items.

See Also:

Constant Field Values

HANDLE

static final int HANDLE

The type of CONSTANT_MethodHandle constant pool items.

See Also:

Constant Field Values

INDY

static final int INDY

The type of CONSTANT_InvokeDynamic constant pool items.

See Also:

Constant Field Values

HANDLE_BASE

static final int HANDLE_BASE

The base value for all CONSTANT_MethodHandle constant pool items.
 Internally, ASM store the 9 variations of CONSTANT_MethodHandle into 9
 different items.

See Also:

Constant Field Values

TYPE_NORMAL

static final int TYPE_NORMAL

Normal type Item stored in the ClassWriter typeTable,
 instead of the constant pool, in order to avoid clashes with normal
 constant pool items in the ClassWriter constant pool's hash table.

See Also:

Constant Field Values

TYPE_UNINIT

static final int TYPE_UNINIT

Uninitialized type Item stored in the ClassWriter
 typeTable, instead of the constant pool, in order to
 avoid clashes with normal constant pool items in the ClassWriter constant
 pool's hash table.

See Also:

Constant Field Values

TYPE_MERGED

static final int TYPE_MERGED

Merged type Item stored in the ClassWriter typeTable,
 instead of the constant pool, in order to avoid clashes with normal
 constant pool items in the ClassWriter constant pool's hash table.

See Also:

Constant Field Values

BSM

static final int BSM

The type of BootstrapMethods items. These items are stored in a special
 class attribute named BootstrapMethods and not in the constant pool.

See Also:

Constant Field Values

cr

ClassReader cr

The class reader from which this class writer was constructed, if any.

version

int version

Minor and major version numbers of the class to be generated.

index

int index

Index of the next item to be added in the constant pool.

pool

final ByteVector pool

The constant pool of this class.

items

Item[] items

The constant pool's hash table data.

threshold

int threshold

The threshold of the constant pool's hash table.

key

final Item key

A reusable key used to look for items in the items hash table.

key2

final Item key2

A reusable key used to look for items in the items hash table.

key3

final Item key3

A reusable key used to look for items in the items hash table.

key4

final Item key4

A reusable key used to look for items in the items hash table.

typeTable

Item[] typeTable

A type table used to temporarily store internal names that will not
 necessarily be stored in the constant pool. This type table is used by
 the control flow and data flow analysis algorithm used to compute stack
 map frames from scratch. This array associates to each index <tt>i</tt>
 the Item whose index is <tt>i</tt>. All Item objects stored in this array
 are also stored in the items hash table. These two arrays allow
 to retrieve an Item from its index or, conversely, to get the index of an
 Item from its value. Each Item stores an internal name in its
 Item.strVal1 field.

typeCount

private short typeCount

Number of elements in the typeTable array.

access

private int access

The access flags of this class.

name

private int name

The constant pool item that contains the internal name of this class.

thisName

java.lang.String thisName

The internal name of this class.

signature

private int signature

The constant pool item that contains the signature of this class.

superName

private int superName

The constant pool item that contains the internal name of the super class
 of this class.

interfaceCount

private int interfaceCount

Number of interfaces implemented or extended by this class or interface.

interfaces

private int[] interfaces

The interfaces implemented or extended by this class or interface. More
 precisely, this array contains the indexes of the constant pool items
 that contain the internal names of these interfaces.

sourceFile

private int sourceFile

The index of the constant pool item that contains the name of the source
 file from which this class was compiled.

sourceDebug

private ByteVector sourceDebug

The SourceDebug attribute of this class.

enclosingMethodOwner

private int enclosingMethodOwner

The constant pool item that contains the name of the enclosing class of
 this class.

enclosingMethod

private int enclosingMethod

The constant pool item that contains the name and descriptor of the
 enclosing method of this class.

anns

private AnnotationWriter anns

The runtime visible annotations of this class.

ianns

private AnnotationWriter ianns

The runtime invisible annotations of this class.

attrs

private Attribute attrs

The non standard attributes of this class.

innerClassesCount

private int innerClassesCount

The number of entries in the InnerClasses attribute.

innerClasses

private ByteVector innerClasses

The InnerClasses attribute.

bootstrapMethodsCount

int bootstrapMethodsCount

The number of entries in the BootstrapMethods attribute.

bootstrapMethods

ByteVector bootstrapMethods

The BootstrapMethods attribute.

firstField

FieldWriter firstField

The fields of this class. These fields are stored in a linked list of
 FieldWriter objects, linked to each other by their
 FieldVisitor.fv field. This field stores the first element of this
 list.

lastField

FieldWriter lastField

The fields of this class. These fields are stored in a linked list of
 FieldWriter objects, linked to each other by their
 FieldVisitor.fv field. This field stores the last element of this
 list.

firstMethod

MethodWriter firstMethod

The methods of this class. These methods are stored in a linked list of
 MethodWriter objects, linked to each other by their
 MethodVisitor.mv field. This field stores the first element of
 this list.

lastMethod

MethodWriter lastMethod

The methods of this class. These methods are stored in a linked list of
 MethodWriter objects, linked to each other by their
 MethodVisitor.mv field. This field stores the last element of this
 list.

computeMaxs

private boolean computeMaxs

<tt>true</tt> if the maximum stack size and number of local variables
 must be automatically computed.

computeFrames

private boolean computeFrames

<tt>true</tt> if the stack map frames must be recomputed from scratch.

invalidFrames

boolean invalidFrames

<tt>true</tt> if the stack map tables of this class are invalid. The
 MethodWriter.resizeInstructions() method cannot transform existing
 stack map tables, and so produces potentially invalid classes when it is
 executed. In this case the class is reread and rewritten with the
 COMPUTE_FRAMES option (the resizeInstructions method can resize
 stack map tables when this option is used).

Constructor Detail

ClassWriter

public ClassWriter(int flags)

Constructs a new ClassWriter object.

Parameters:

flags - option flags that can be used to modify the default behavior
            of this class. See COMPUTE_MAXS,
            COMPUTE_FRAMES.

ClassWriter

public ClassWriter(ClassReader classReader,
           int flags)

Constructs a new ClassWriter object and enables optimizations for
 "mostly add" bytecode transformations. These optimizations are the
 following:

The constant pool from the original class is copied as is in the new
 class, which saves time. New constant pool entries will be added at the
 end if necessary, but unused constant pool entries won't be
 removed.

Methods that are not transformed are copied as is in the new class,
 directly from the original class bytecode (i.e. without emitting visit
 events for all the method instructions), which saves a lot of
 time. Untransformed methods are detected by the fact that the
 ClassReader receives MethodVisitor objects that come from
 a ClassWriter (and not from any other ClassVisitor
 instance).

Parameters:

classReader - the ClassReader used to read the original class. It
            will be used to copy the entire constant pool from the
            original class and also to copy other fragments of original
            bytecode where applicable.

flags - option flags that can be used to modify the default behavior
            of this class. These option flags do not affect methods
            that are copied as is in the new class. This means that the
            maximum stack size nor the stack frames will be computed for
            these methods. See COMPUTE_MAXS,
            COMPUTE_FRAMES.

Method Detail

visit

public final void visit(int version,
         int access,
         java.lang.String name,
         java.lang.String signature,
         java.lang.String superName,
         java.lang.String[] interfaces)

Description copied from class: ClassVisitor

Visits the header of the class.

Overrides:

visit in class ClassVisitor

Parameters:

version - the class version.

access - the class's access flags (see Opcodes). This parameter
            also indicates if the class is deprecated.

name - the internal name of the class (see
            getInternalName).

signature - the signature of this class. May be <tt>null</tt> if the class
            is not a generic one, and does not extend or implement generic
            classes or interfaces.

superName - the internal of name of the super class (see
            getInternalName). For
            interfaces, the super class is Object. May be
            <tt>null</tt>, but only for the Object class.

interfaces - the internal names of the class's interfaces (see
            getInternalName). May be
            <tt>null</tt>.

visitSource

public final void visitSource(java.lang.String file,
               java.lang.String debug)

Description copied from class: ClassVisitor

Visits the source of the class.

Overrides:

visitSource in class ClassVisitor

Parameters:

file - the name of the source file from which the class was compiled.
            May be <tt>null</tt>.

debug - additional debug information to compute the correspondance
            between source and compiled elements of the class. May be
            <tt>null</tt>.

visitOuterClass

public final void visitOuterClass(java.lang.String owner,
                   java.lang.String name,
                   java.lang.String desc)

Description copied from class: ClassVisitor

Visits the enclosing class of the class. This method must be called only
 if the class has an enclosing class.

Overrides:

visitOuterClass in class ClassVisitor

Parameters:

owner - internal name of the enclosing class of the class.

name - the name of the method that contains the class, or
            <tt>null</tt> if the class is not enclosed in a method of its
            enclosing class.

desc - the descriptor of the method that contains the class, or
            <tt>null</tt> if the class is not enclosed in a method of its
            enclosing class.

visitAnnotation

public final AnnotationVisitor visitAnnotation(java.lang.String desc,
                                boolean visible)

Description copied from class: ClassVisitor

Visits an annotation of the class.

Overrides:

visitAnnotation in class ClassVisitor

Parameters:

desc - the class descriptor of the annotation class.

visible - <tt>true</tt> if the annotation is visible at runtime.

Returns:

a visitor to visit the annotation values, or <tt>null</tt> if
         this visitor is not interested in visiting this annotation.

visitAttribute

public final void visitAttribute(Attribute attr)

Description copied from class: ClassVisitor

Visits a non standard attribute of the class.

Overrides:

visitAttribute in class ClassVisitor

Parameters:

attr - an attribute.

visitInnerClass

public final void visitInnerClass(java.lang.String name,
                   java.lang.String outerName,
                   java.lang.String innerName,
                   int access)

Description copied from class: ClassVisitor

Visits information about an inner class. This inner class is not
 necessarily a member of the class being visited.

Overrides:

visitInnerClass in class ClassVisitor

Parameters:

name - the internal name of an inner class (see
            getInternalName).

outerName - the internal name of the class to which the inner class
            belongs (see getInternalName).
            May be <tt>null</tt> for not member classes.

innerName - the (simple) name of the inner class inside its enclosing
            class. May be <tt>null</tt> for anonymous inner classes.

access - the access flags of the inner class as originally declared in
            the enclosing class.

visitField

public final FieldVisitor visitField(int access,
                      java.lang.String name,
                      java.lang.String desc,
                      java.lang.String signature,
                      java.lang.Object value)

Description copied from class: ClassVisitor

Visits a field of the class.

Overrides:

visitField in class ClassVisitor

Parameters:

access - the field's access flags (see Opcodes). This parameter
            also indicates if the field is synthetic and/or deprecated.

name - the field's name.

desc - the field's descriptor (see Type).

signature - the field's signature. May be <tt>null</tt> if the field's
            type does not use generic types.

value - the field's initial value. This parameter, which may be
            <tt>null</tt> if the field does not have an initial value,
            must be an Integer, a Float, a Long, a
            Double or a String (for <tt>int</tt>,
            <tt>float</tt>, <tt>long</tt> or <tt>String</tt> fields
            respectively). This parameter is only used for static
            fields. Its value is ignored for non static fields, which
            must be initialized through bytecode instructions in
            constructors or methods.

Returns:

a visitor to visit field annotations and attributes, or
         <tt>null</tt> if this class visitor is not interested in visiting
         these annotations and attributes.

visitMethod

public final MethodVisitor visitMethod(int access,
                        java.lang.String name,
                        java.lang.String desc,
                        java.lang.String signature,
                        java.lang.String[] exceptions)

Description copied from class: ClassVisitor

Visits a method of the class. This method must return a new
 MethodVisitor instance (or <tt>null</tt>) each time it is called,
 i.e., it should not return a previously returned visitor.

Overrides:

visitMethod in class ClassVisitor

Parameters:

access - the method's access flags (see Opcodes). This
            parameter also indicates if the method is synthetic and/or
            deprecated.

name - the method's name.

desc - the method's descriptor (see Type).

signature - the method's signature. May be <tt>null</tt> if the method
            parameters, return type and exceptions do not use generic
            types.

exceptions - the internal names of the method's exception classes (see
            getInternalName). May be
            <tt>null</tt>.

Returns:

an object to visit the byte code of the method, or <tt>null</tt>
         if this class visitor is not interested in visiting the code of
         this method.

visitEnd

public final void visitEnd()

Description copied from class: ClassVisitor

Visits the end of the class. This method, which is the last one to be
 called, is used to inform the visitor that all the fields and methods of
 the class have been visited.

Overrides:

visitEnd in class ClassVisitor

toByteArray

public byte[] toByteArray()

Returns the bytecode of the class that was build with this class writer.

Returns:

the bytecode of the class that was build with this class writer.

newConstItem

Item newConstItem(java.lang.Object cst)

Adds a number or string constant to the constant pool of the class being
 build. Does nothing if the constant pool already contains a similar item.

Parameters:

cst - the value of the constant to be added to the constant pool.
            This parameter must be an Integer, a Float, a
            Long, a Double, a String or a
            Type.

Returns:

a new or already existing constant item with the given value.

newConst

public int newConst(java.lang.Object cst)

Adds a number or string constant to the constant pool of the class being
 build. Does nothing if the constant pool already contains a similar item.
 This method is intended for Attribute sub classes, and is
 normally not needed by class generators or adapters.

Parameters:

cst - the value of the constant to be added to the constant pool.
            This parameter must be an Integer, a Float, a
            Long, a Double or a String.

Returns:

the index of a new or already existing constant item with the
         given value.

newUTF8

public int newUTF8(java.lang.String value)

Adds an UTF8 string to the constant pool of the class being build. Does
 nothing if the constant pool already contains a similar item. This
 method is intended for Attribute sub classes, and is normally not
 needed by class generators or adapters.

Parameters:

value - the String value.

Returns:

the index of a new or already existing UTF8 item.

newClassItem

Item newClassItem(java.lang.String value)

Adds a class reference to the constant pool of the class being build.
 Does nothing if the constant pool already contains a similar item.
 This method is intended for Attribute sub classes, and is
 normally not needed by class generators or adapters.

Parameters:

value - the internal name of the class.

Returns:

a new or already existing class reference item.

newClass

public int newClass(java.lang.String value)

Adds a class reference to the constant pool of the class being build.
 Does nothing if the constant pool already contains a similar item.
 This method is intended for Attribute sub classes, and is
 normally not needed by class generators or adapters.

Parameters:

value - the internal name of the class.

Returns:

the index of a new or already existing class reference item.

newMethodTypeItem

Item newMethodTypeItem(java.lang.String methodDesc)

Adds a method type reference to the constant pool of the class being
 build. Does nothing if the constant pool already contains a similar item.
 This method is intended for Attribute sub classes, and is
 normally not needed by class generators or adapters.

Parameters:

methodDesc - method descriptor of the method type.

Returns:

a new or already existing method type reference item.

newMethodType

public int newMethodType(java.lang.String methodDesc)

Adds a method type reference to the constant pool of the class being
 build. Does nothing if the constant pool already contains a similar item.
 This method is intended for Attribute sub classes, and is
 normally not needed by class generators or adapters.

Parameters:

methodDesc - method descriptor of the method type.

Returns:

the index of a new or already existing method type reference
         item.

newHandleItem

Item newHandleItem(int tag,
                 java.lang.String owner,
                 java.lang.String name,
                 java.lang.String desc)

Adds a handle to the constant pool of the class being build. Does nothing
 if the constant pool already contains a similar item. This method is
 intended for Attribute sub classes, and is normally not needed by
 class generators or adapters.

Parameters:

tag - the kind of this handle. Must be Opcodes.H_GETFIELD,
            Opcodes.H_GETSTATIC, Opcodes.H_PUTFIELD,
            Opcodes.H_PUTSTATIC, Opcodes.H_INVOKEVIRTUAL,
            Opcodes.H_INVOKESTATIC,
            Opcodes.H_INVOKESPECIAL,
            Opcodes.H_NEWINVOKESPECIAL or
            Opcodes.H_INVOKEINTERFACE.

owner - the internal name of the field or method owner class.

name - the name of the field or method.

desc - the descriptor of the field or method.

Returns:

a new or an already existing method type reference item.

newHandle

public int newHandle(int tag,
            java.lang.String owner,
            java.lang.String name,
            java.lang.String desc)

Adds a handle to the constant pool of the class being build. Does nothing
 if the constant pool already contains a similar item. This method is
 intended for Attribute sub classes, and is normally not needed by
 class generators or adapters.

Parameters:

tag - the kind of this handle. Must be Opcodes.H_GETFIELD,
            Opcodes.H_GETSTATIC, Opcodes.H_PUTFIELD,
            Opcodes.H_PUTSTATIC, Opcodes.H_INVOKEVIRTUAL,
            Opcodes.H_INVOKESTATIC,
            Opcodes.H_INVOKESPECIAL,
            Opcodes.H_NEWINVOKESPECIAL or
            Opcodes.H_INVOKEINTERFACE.

owner - the internal name of the field or method owner class.

name - the name of the field or method.

desc - the descriptor of the field or method.

Returns:

the index of a new or already existing method type reference
         item.

newInvokeDynamicItem

Item newInvokeDynamicItem(java.lang.String name,
                        java.lang.String desc,
                        Handle bsm,
                        java.lang.Object... bsmArgs)

Adds an invokedynamic reference to the constant pool of the class being
 build. Does nothing if the constant pool already contains a similar item.
 This method is intended for Attribute sub classes, and is
 normally not needed by class generators or adapters.

Parameters:

name - name of the invoked method.

desc - descriptor of the invoke method.

bsm - the bootstrap method.

bsmArgs - the bootstrap method constant arguments.

Returns:

a new or an already existing invokedynamic type reference item.

newInvokeDynamic

public int newInvokeDynamic(java.lang.String name,
                   java.lang.String desc,
                   Handle bsm,
                   java.lang.Object... bsmArgs)

Adds an invokedynamic reference to the constant pool of the class being
 build. Does nothing if the constant pool already contains a similar item.
 This method is intended for Attribute sub classes, and is
 normally not needed by class generators or adapters.

Parameters:

name - name of the invoked method.

desc - descriptor of the invoke method.

bsm - the bootstrap method.

bsmArgs - the bootstrap method constant arguments.

Returns:

the index of a new or already existing invokedynamic reference
         item.

newFieldItem

Item newFieldItem(java.lang.String owner,
                java.lang.String name,
                java.lang.String desc)

Adds a field reference to the constant pool of the class being build.
 Does nothing if the constant pool already contains a similar item.

Parameters:

owner - the internal name of the field's owner class.

name - the field's name.

desc - the field's descriptor.

Returns:

a new or already existing field reference item.

newField

public int newField(java.lang.String owner,
           java.lang.String name,
           java.lang.String desc)

Adds a field reference to the constant pool of the class being build.
 Does nothing if the constant pool already contains a similar item.
 This method is intended for Attribute sub classes, and is
 normally not needed by class generators or adapters.

Parameters:

owner - the internal name of the field's owner class.

name - the field's name.

desc - the field's descriptor.

Returns:

the index of a new or already existing field reference item.

newMethodItem

Item newMethodItem(java.lang.String owner,
                 java.lang.String name,
                 java.lang.String desc,
                 boolean itf)

Adds a method reference to the constant pool of the class being build.
 Does nothing if the constant pool already contains a similar item.

Parameters:

owner - the internal name of the method's owner class.

name - the method's name.

desc - the method's descriptor.

itf - <tt>true</tt> if <tt>owner</tt> is an interface.

Returns:

a new or already existing method reference item.

newMethod

public int newMethod(java.lang.String owner,
            java.lang.String name,
            java.lang.String desc,
            boolean itf)

Adds a method reference to the constant pool of the class being build.
 Does nothing if the constant pool already contains a similar item.
 This method is intended for Attribute sub classes, and is
 normally not needed by class generators or adapters.

Parameters:

owner - the internal name of the method's owner class.

name - the method's name.

desc - the method's descriptor.

itf - <tt>true</tt> if <tt>owner</tt> is an interface.

Returns:

the index of a new or already existing method reference item.

newInteger

Item newInteger(int value)

Adds an integer to the constant pool of the class being build. Does
 nothing if the constant pool already contains a similar item.

Parameters:

value - the int value.

Returns:

a new or already existing int item.

newFloat

Item newFloat(float value)

Adds a float to the constant pool of the class being build. Does nothing
 if the constant pool already contains a similar item.

Parameters:

value - the float value.

Returns:

a new or already existing float item.

newLong

Item newLong(long value)

Adds a long to the constant pool of the class being build. Does nothing
 if the constant pool already contains a similar item.

Parameters:

value - the long value.

Returns:

a new or already existing long item.

newDouble

Item newDouble(double value)

Adds a double to the constant pool of the class being build. Does nothing
 if the constant pool already contains a similar item.

Parameters:

value - the double value.

Returns:

a new or already existing double item.

newString

private Item newString(java.lang.String value)

Adds a string to the constant pool of the class being build. Does nothing
 if the constant pool already contains a similar item.

Parameters:

value - the String value.

Returns:

a new or already existing string item.

newNameType

public int newNameType(java.lang.String name,
              java.lang.String desc)

Adds a name and type to the constant pool of the class being build. Does
 nothing if the constant pool already contains a similar item. This
 method is intended for Attribute sub classes, and is normally not
 needed by class generators or adapters.

Parameters:

name - a name.

desc - a type descriptor.

Returns:

the index of a new or already existing name and type item.

newNameTypeItem

Item newNameTypeItem(java.lang.String name,
                   java.lang.String desc)

Adds a name and type to the constant pool of the class being build. Does
 nothing if the constant pool already contains a similar item.

Parameters:

name - a name.

desc - a type descriptor.

Returns:

a new or already existing name and type item.

addType

int addType(java.lang.String type)

Adds the given internal name to typeTable and returns its index.
 Does nothing if the type table already contains this internal name.

Parameters:

type - the internal name to be added to the type table.

Returns:

the index of this internal name in the type table.

addUninitializedType

int addUninitializedType(java.lang.String type,
                       int offset)

Adds the given "uninitialized" type to typeTable and returns its
 index. This method is used for UNINITIALIZED types, made of an internal
 name and a bytecode offset.

Parameters:

type - the internal name to be added to the type table.

offset - the bytecode offset of the NEW instruction that created this
            UNINITIALIZED type value.

Returns:

the index of this internal name in the type table.

addType

private Item addType(Item item)

Adds the given Item to typeTable.

Parameters:

item - the value to be added to the type table.

Returns:

the added Item, which a new Item instance with the same value as
         the given Item.

getMergedType

int getMergedType(int type1,
                int type2)

Returns the index of the common super type of the two given types. This
 method calls getCommonSuperClass(java.lang.String, java.lang.String) and caches the result in the
 items hash table to speedup future calls with the same
 parameters.

Parameters:

type1 - index of an internal name in typeTable.

type2 - index of an internal name in typeTable.

Returns:

the index of the common super type of the two given types.

getCommonSuperClass

protected java.lang.String getCommonSuperClass(java.lang.String type1,
                                   java.lang.String type2)

Returns the common super type of the two given types. The default
 implementation of this method loads the two given classes and uses
 the java.lang.Class methods to find the common super class. It can be
 overridden to compute this common super type in other ways, in particular
 without actually loading any class, or to take into account the class
 that is currently being generated by this ClassWriter, which can of
 course not be loaded since it is under construction.

Parameters:

type1 - the internal name of a class.

type2 - the internal name of another class.

Returns:

the internal name of the common super class of the two given
         classes.

get

private Item get(Item key)

Returns the constant pool's hash table item which is equal to the given
 item.

Parameters:

key - a constant pool item.

Returns:

the constant pool's hash table item which is equal to the given
         item, or <tt>null</tt> if there is no such item.

put

private void put(Item i)

Puts the given item in the constant pool's hash table. The hash table
 must not already contains this item.

Parameters:

i - the item to be added to the constant pool's hash table.

put122

private void put122(int b,
          int s1,
          int s2)

Puts one byte and two shorts into the constant pool.

Parameters:

b - a byte.

s1 - a short.

s2 - another short.

put112

private void put112(int b1,
          int b2,
          int s)

Puts two bytes and one short into the constant pool.

Parameters:

b1 - a byte.

b2 - another byte.

s - a short.


Pakistan Super League (PSL) fever is in full swing. As the final is fast approaching, fans are full of excitement and adding to this exhilaration is news of singer Nazia Hassan being honoured at the closing ceremony.
I am pleased to offer our song Dosti to @thepslt20. It will feature along with Disco Deewane as a special Tribute to my (late) sister Nazia Hassan at the HBLPSL Closing Ceremony in Karachi.
A lot of people came to me saying that they want to make a film on Nazia but my family has been very reluctant. It's a very sensitive thing and Nazia is no more so she can't represent herself," he had said.


text:
Posted on May 22, 2013 by John Stevenson
Prometheus Fails (In more ways than one)
Every now and then a story comes along that's willing to ask the big questions: who are we? why are we here? Is there life after death?
Prometheus is one such story. It asks us the question, what if we had proof we were created by some higher power (in this case technologically superior aliens)? Would that change our fundamental understanding of ourselves? Would it lead to a crisis of faith or would we find resolution and assurance in that discovery? And of course we would be compelled to ask them the biggest question of all: Why did you create us?
Yes, Prometheus started out with a lot of very philosophical and metaphysical questions.
And then it got distracted by shiny explosions and goofy aliens.
"Oooohhh, look at the pretty Boom Booms!" – Prometheus, probably.
Of course I can't really blame Prometheus for failing to answer those questions. After all, those are questions that we've spent our entire existence as a sentient species trying to answer: countless religions and philosophies have come and gone in our quest to answer life's existential questions. That said, I can blame Prometheus for asking these questions and then spending the rest of the movie trying to pretend it never asked them. Seriously, the beginning starts out with scientists postulating about the reasons for why ancient aliens would create our species and what that means for our sense of self, and our place in the universe. Then the crew takes off on their journey to answer these questions…and promptly forgets all of that when they finally land on the planet.
These themes are never explored once they actually reach the planet, aside from a very short segment near the end of the movie which I'll touch on later. That's what really bothers me about it, it's not that they failed to adequately answer these questions, it's that they don't even try. It's as if, halfway through making the film, they found out that the themes they were exploring were too difficult to work into their movie and decided to ditch the whole endeavor and hoped the audience wouldn't notice. Of course even that might have been forgivable if not for one thing:
Prometheus isn't scary. Not even a little.
This was supposed to be a prequel to Alien, the movie famous for its claustrophobic scifi horror. This is the movie that made my mom scream in the theater and make the man next to her throw his popcorn in the air and angering his girlfriend, forever ruining his chances of finding love and happiness in this lifetime. Yet Prometheus just isn't scary, it's not even tense. For one, whereas Ripley was someone real you could root for in the movie, none of the characters in this film were at all endearing or relatable. Two, since we now have this lovely technology that allows us to render anything we want, all of the alien monsters are in full view and…well they aren't that scary either. Half the reason Alien worked so well is because you couldn't see the damn movie monster most of the time, leaving your imagination to fill in the blanks and as I said back in October, your imagination will always be scarier than what Hollywood can invent. And while it was a bit weird seeing an octopus being pulled out of a woman's womb, it wasn't exactly scary. Let's compare the womb-octopus with the famous chest burster from the original film, because that's obviously what they were trying to recreate.
The chest burster was scary because it was fast and unexpected. One minute the guy is eating and laughing, then suddenly his sternum is ripping open and a big head filled with teeth comes scuttling out covered in gore. I think the whole scene takes like two minutes, if that. With the womb-octopus, she finds out she's got something strange in her before it ever starts to become a threat, making it an expected threat and thus boring. Then it takes her like ten minutes to give herself a C-section so she can remove it. And yeah she's screaming and crying, but honestly I didn't really care about her character so her distress is completely lost on me, and it's just not scary. You know what is scary? A woman giving birth, that's what's scary. That's some ugly, ugly shit right there. I know it's not considered polite to say that, but it's the truth, childbirth is gross. An integral part of our propagation as a species yes, but let's not pretend it's pretty. Compared to an actual birth, this scene is just downright timid.
Congratulations it's a…whatever.
Another thing the movie tries to copy from it's much better forebears is the famous motion-tracker scenes from Aliens. In Aliens, the marines use hand-held scanners to detect the movement of the aliens around them and once again the creators of Prometheus seem to completely miss the primary reasons this was a tense moment in the original movie. Once again, we couldn't see the aliens and those motion scanners were the only thing between the marines and death by thousands of alien monsters. But it wasn't simply the fact that you couldn't see the aliens that was scary, it was the location in which it was happening. It was an abandoned facility, the former inhabitants eaten by the aliens now stalking the marines, and every shadow could be hiding a deadly Xenomorph. The marines were frightened. They actually had to do some acting here and look scared, and that makes a huge difference. You know how they went about trying to copy this scene in Prometheus? Like this:
Pictured: Something scary…I guess.
In Prometheus the guy is wrapped up in a nice blanket drinking some cocoa like a kid home from school on a cold winter's day, while watching a little red blip stalking some other guys still stuck in the alien facility. Real scary guys. In fact, it's the titular Prometheus that really kills any chance of creating the claustrophobic fear that permeated the original movies.
For much of the movie the Prometheus serves as a safe harbor for the characters, and for the audience. Every time the movie comes close to creating a truly frightening atmosphere, it always cuts back to some other characters lounging around the Prometheus like the crew from Cheers enjoying an evening drink. Aside from the Android shenanigans, and the aforementioned womb-octopus, nothing bad really happens on the ship until the final minutes of the movie. In the original movies there were no safe harbors, the characters were always trapped with the alien crawling all around them, no character was safe anywhere in the movie. Even though Alien 3 was horrible in many respects, the attack in the med bay (I think, it's been a while) was a really good horror scene. Two characters are reconciling their differences, the entire area is clean and brightly lit, and then BAM! An alien eats an entire character right in the middle of a conversation! That's how you raise the stakes of a story, by killing a character right when and where you least expect it. There was nothing like this here. I mean was anyone really surprised when the two morons who walked into a room filled with alien eggs died a terrible death? No, we all saw that coming a mile away, and that's not scary.
The only scary thing about this movie is just how little sense it makes. Why does David the android start putting black goo in people's coffee? Why are these aliens creating a bioweapon of mass destruction? Why are they bent on the destruction of the human race? In fact, how do we even know that's the goal? I mean sure they kill Pete Weyland, but who the hell wouldn't? The guy is a massive dick. The minute the ship starts taking off though, the main character just somehow knows that the aliens are going to earth to unleash their new weapon. How does she know that? Is she really so arrogant as to think that the first thing this alien is going to do upon waking up from a centuries long sleep is visit her homeworld and destroy it? Maybe the dude was just headin' home to tell his people just how crazy things got at their secret weapons lab.
Dude…shit just got crazy.
Maybe he was just freaked the fuck out by seeing his science experiments walking around in his ship, did they ever consider that? The alien was basically waking up in his version of Planet of the Apes, suddenly the creatures he created in a test tube are capable of space flight in (to him) the blink of an eye. Last time this guy saw us walking around was probably before we were even clothing ourselves, and he was observing us using whatever fancy equipment their biolab has.
Peter Weyland's appearance temporarily gave me hope that maybe the movie would redeem itself in the final few minutes, because he once again brought up the themes that were touched on during the beginning of the film. He wanted to cheat death, he wanted the secret of immortality, and who better to give him that secret than the species that created us? This hearkens back to the first story ever, and my personal favorite, the Epic of Gilgamesh in which Gilgamesh attempts to trick the gods into giving him the secret to immortality. In the end Gilgamesh discovers that there is no such thing as immortality, and that because his life is finite, he can appreciate life in a way no god could ever appreciate it. It's a very moving and deeply spiritual awakening, and represents Gilgamesh finally coming to terms with Enkidu's death.
In Promtheus though, instead of Peter Weyland or any of the other characters learning something profound, the aliens just bitch slap poor old Guy Pearce across the room, rip an android in half and then set out to destroy Earth (for some reason). And the trouble is that none of the character subplots present in the movie go anywhere either, there's ultimately no payoff to any of the stories.
Like poor Vickers, replaced by an android because her father wanted a son. Emotionally crippling her and leaving her unable to run in anything other than a straight line apparently.
So you might be asking why I didn't make this a Story that Never Was article. Well the reason is…I don't really know what story they could have told here. I don't have a better idea, because honestly I don't think the Alien franchise demanded a prequel. Honestly, does anyone really care where the Aliens came from? I always just assumed they were just some hostile species that had naturally evolved somewhere and some aliens decided to visit the wrong planet, leading to their deaths and the crashed ship we find in Alien. What we need is a good Alien sequel. Just retcon all the Alien 3 and Alien Resurrection crap and give us a proper sequel, one where the aliens finally land on earth (which incidentally was supposed to be what Alien 3 was going to be about before production trouble nixed it). What really amazes me about Prometheus is that it's getting a sequel…really? Does anyone really care where the main character and the severed head of an android end up?
Perhaps Prometheus is an apt name for this movie after all. It tried to steal the fire from the more successful Alien franchise, and now it is doomed to have its literary liver torn out by me ad infinitum through all of its sequels. We'll see how many livers get ripped out when Prometheus 2 is released I suppose…
Oh god, not another sequel!
Pass it on!
This entry was posted in:Uncategorized
Published by John Stevenson
I'm a freelance writer based out of Seattle, Washington.
View all posts by John Stevenson
Previous PostBioshock Infinite: What the Hell Just Happened?
Next PostStar Trek: Into Safety
Andreas Lang says:
oh my god, amazing review xD
I heard from friends that the movie is ****.so i didnt watch it yet.
A very good comment:
"Who cares where the aliens come from?"
Damn right! 😀
I dont care either where they come from, nor do i care why the REAPERS ARE SWEEPING THE UNIVERSE!
A villain is there to give the "good guys" a chance to unfold their stories and characters.
One might also give the villain some thought and reason to its character, so the actions of the "good guys" can be reflected from another angle by the audience as well.
But hell…some bestial xenomorphs with which i cant even talk?
Thats not a good start for reasonable villains. Indeed, any reason put into such entities seems either goofy or completely devoid of importance to me. Its also metaphysically anthropomorphizing them. I mean, why should they be bent to any reason reasonable to us? They are ALIEN. Thats what makes them alien xD
And yeah, i also dont really care about the birthplace of an unreasonable entitiy 😛 At least not in gory Sci-Fi-Horror, which i expect to be focussing on a dark picture of alien life.
jmstevenson says:
Thanks Andreas, glad you liked it!
Exactly what I thought, the aliens aren't exactly a villain that needs a backstory. They just need to show up and eat people, that's it. Prometheus just tried too hard to make them some kind of understandable threat, but we didn't want to understand them!
Szabi says:
Great review, big thanks!
Interesting one, because I didn't really like Prometheus but not for the reasons you mentioned. I wouldn't mind a good prequel for Aliens, and I wouldn't insist on the horror part of it – a good sci-fi could make me happy, but this was neither…
My main problem was the total inconsistency of the storyline – nothing made really sense, feels like they tried to create a sort of mysterious tale with many unanswered questions, but the end result is a random mixture of various story elements without cohesion and sense…
I think this is the fundamental problem with this movie…
Glad you enjoyed it! I wouldn't mind a good prequel for Aliens for either, but I have no idea what a good prequel would look like. Like I said, I don't think there is any kind of backstory you can lend to the Aliens that could make for a compelling 90-minute movie.
And yeah my initial draft of this article was actually trying to break down the story and analyze it, but I just gave up on that because you can't analyze this mess. None of the story's plots or characters end up going anywhere, and nothing makes sense. And you're right, that's the fundamental flaw with this movie.
Alienated says:
I was disappointed by Prometheus but not for all of the same reasons as you.
In general I think it's got a very Roger Corman-style plot that has theological aspirations. I get the shits with the film's apologists accusing every last person who doesn't like the show of "not getting it". I got it. Plenty of us did. I got about 95% of it the first time I saw it and I've even watched it a number of successive times to try and find the appeal. I can't get past the stupidity. I do love the higher themes and the film's ability to generate conversation, but that doesn't excuse the fact that the basic plot as you see it is plain B-grade and unresearched.
It felt like Paul W.S Anderson wrote and directed it. I get the impression that Ridley Scott's previous sci-fi success was due to good scripts. Give him a shitty script and he'll give you a bad film that looks beautiful. Which still takes significant talent but Prometheus isn't a good film.
Everyone says the characters were annoying and I'll argue that it isn't a popularity contest. Likeable characters aren't he be-all and end-all but I'll agree that these characters were certainly grating and most of them were very one-dimensional. I don't mind a large cast being a bit underdeveloped, but the main players in this were all well-worn stereotypes. Fassbender did a fantastic job with what he was given, but his character was a caricature. Everything about him was telegraphed with big flamboyant conversations and actions. Oscar-bait and nothing more. Everyone knew to suspect the droid. Most adults could see that he was asking Holloway's permission to experiment on him.
I actually like that they cut the crap of the scientists pitching their expedition and went straight to the deployment. It's the other shortcuts that bug the hell out of me. No one knows the job until the get there. They fly to a planet without surveying and enter the atmosphere, spot a nice landing spot and they're where they want to be. If that didn't bug a viewer, then I've got serious doubts about the rest of their critical opinion. At least in the original they were following a beacon. In this one they enter the atmosphere and find something straight away. That feels very dumb. There's also sphynxes to indicate exactly where they should investigate just to compound this Alien Vs Predator vibe.
People who talk ill of James Cameron while praising Ridley Scott ought to get off their high-horses and have a good think. Cameron wouldn't have made something so scientifically illiterate in the Alien universe. He's highly scientific, but as an entertainer he knows when it's appropriate to let spectacle overtake scientific reality. I don't think Scott has this sensibility.
I liked the arm-breaking scene but apart from that the film seriously lacked horror. I felt detached most of the time. The caesarian scene was a bloodless joke. It didn't help that the film had well and truly overstayed it's welcome before that scene. It just became like a ridiculous soap-opera with ridiculous exposition after ridiculous exposition. Weyland and his daughter didn't need to be in there.
I don't care about the unanswered questions. This film answered questions that no-one needed to know and cheapened the franchise with over-exposition everywhere else. The really dumb over-exposition hurt the film's popularity more than anything. If you ask me, they answered too many questions and as a result the whole experience feels really cheap.
The first three films did a great job growing the universe. This abortion felt like Scott trying too hard to distance himself from the sequels while he provides needless exposition that shrinks the universe. Say what you will about Alien 3 with its strange cuts and disappearing characters. At least it felt like a dark and mature adult film and not a cable tv show in 3d.
Thanks for writing in. I find it's funny to see how everyone disliked the film, but all for different reasons! I liked this comment:
It just became like a ridiculous soap-opera with ridiculous exposition after ridiculous exposition. Weyland and his daughter didn't need to be in there.
That's exactly what I thought about that subplot. Definitely too soap opera type drama and not enough aliens killing hapless characters. 😛
lozanogo says:
I guess when I saw the film my expectations were kept at bay and I didn't find such a terrible film. Neither a good one, don't get me wrong.
My wife and I are quite fans of the Alien movies and we knew the movie was not a prequel of Alien but rather happened just before it and the Alien theme was secondary, at least that part was shown proportionately in the movie. Also, with all the reboots and prequels around, I had to grip my expectations and avoid them flying high, otherwise I would end up extremely disappointed.
I agree that there where toooo many illogical inconsistencies in the story, i.e. how come the guy with the mapping devices happens to get lost?, was he only a walking carrying bag for 4 little scanners? But I feel that the greatest problem, like mentioned in your review, is that there were too many storylines that felt too shallow. I think the main question of the movie was 'who are the Engineers?', but it was shadowed quickly by Weyland's speech of 'who we are and what is our purpose in life?'. In the sense of the main question, or rather what I think it is, the movie started and ended correctly, it was just that there were too many minutes in between talking about nonsense or distracting from the main point.
Just played through Bioshock Infinite and instantly turned to your review after finishing the game 😀 Great analysis as always, dropped you a comment as well 😉 Hope to see more of it in the future, if you think that theres more to explain 😀
Kenneth Harkin says:
Thanks for the review. I disliked the movie for many of the reasons you gave. I had some hope with the two morons who were killed by the black goo. Initially when they were trapped alone in the alien facility (btw, how the hell did that happen!?!? They saw that storm coming for some time!) the sensors detected something and what was their FIRST response? They WENT THE OTHER WAY!!! All I could think was "holy crap, they are not stupid!" Alas before you know it the same guys who didn't want to be within a mile of anything that could possibly be out of place decide to play with the scary black goo…
There was other stupidity I just could not tolerate. They travel for years to study this alien world and facility but before being certain of anything they just pop the tops on their environmental suits, all warnings to the contrary. Once again we have an android or corporate stooge playing saboteur by trying to infect others. This time it was with some funky goo that nobody knew anything about.
The only actions I liked, in a limited way, were the engineer's response to being woken by Weyland. He comes to life after uncounted eons in stasis only to find the monkeys from the lab experiment running around with some mechanical toy asking him questions. I kind of liked his simply killing them and moving along. This creature was like a god to us both in our view of it and its of us. Our questions, even though in its own language, were like the buzzing of flies and stomping on us was no different than us stepping on ants in our living room. Leaving the answers to our questions in that way was the perfect answer since no film writer, except perhaps the Montey Python crew in The Meaning of Life, is going to answer it.
Why his first action was supposedly to destroy Earth I haven't the foggiest. Frankly I would try to see if any of my species still exist and get back up to speed first.
All That Matters is the Ending: The Patient November 20, 2022
House of The Dragon: A Storytelling Review November 4, 2022
Horizon Zero Dawn: Forbidden West November 4, 2022
The Rings of Power Lacks Power September 27, 2022
All That Matters is the Ending: Obi-Wan Kenobi June 30, 2022
#retakemasseffect Aeterno Elementum AI God Arakus bioshock Bioshock Infinite Bioware Booker DeWitt Breaking Bad Characters Christmas Comstock Depression Dialogue Discovery Dr. Claw Dragon Age dragon age inquisition Drama Endings Film Game of Thrones games Game Writing Gaming Garrus Godwin's Law Greeks HBO humor. Infinite Inspector Gadget Johnny Depp Life is Strange literature Lord of the Rings Mark Twain Marvel mass effect Mass Effect 3 Mass Effect Andromeda ME3 Movies Muppets News Obi-wan Kenobi Opera Personal Planescape Torment Plays Plot Retake Mass Effect review Rogue One Science Fiction Scifi Starchild star trek Star Wars Stories symbolism Terminator The Clone Wars The Da Vinci Code Themes true detective TV Writing Videogames Video Games walking dead Walter White Westworld Writers Writing
Support my Patreon Page!
John Stevenson's Twitter accout
Click here to receive a email every time I update my blog and get more bloggy goodness even faster.

redpajama_set_name: RedPajamaCommonCrawl


text:
5 Questions with Jess Loudon
by anitakumar | Dec 7, 2017
Jessica Loudon
"Basically, the actor's job is to be the ultimate detective, collect all the pieces of the puzzle and put it together to create a fully formed, nuanced, believable character." – Jess Loudon
Generosity of spirit is crucial in this industry. Whilst it is important to keep things close to our heart it is equally important to share our passion and combine knowledge and talent amongst our community. In short, what you give, you get back.
Jess Loudon is an abundance of generosity. From the moment she walks into a room you instantly feel the weight of the world fall off your shoulders into oblivion. The first time I met Jess was when I was auditioning her for a role, with a big smile, and a voice showered in enthusiasm she introduced herself and I knew, before she even began her audition monologue, that she simply oozed talent.
In an industry that can too often feel like a place of "take, take, take," people like Jess are to be cherished. They are unapologetically their generous selves, insightful, talented, a joy to work with and know. It is no wonder this wonderful woman is in high demand on the Australian theatre circuit.
After leaving a law career to train and work at the Atlantic Theater Company in New York City, she returned to Australia three years ago and has worked with numerous theatre companies including Bell Shakespeare and Sport for Jove (SFJ) – where Jess is currently starring in their 2017 summer season as Mistress Overdone in Measure for Measure and Brighella in Servant of Two Masters.
Loudon's career is growing by the minute and with her success she becomes more and more grounded. There is nothing she takes for granted, she simply loves the work and we absolutely love her for it.
Alixandra: What are some of your rituals when preparing for a role?
Jess: When I'm prepping for a role, number one is to read the play – A LOT! When I'm feeling confused or lost, I always go back to the play.The playwright gives you everything you need to know.
Then I look at supporting material. If it's based on a real event, I will do as much research as I can for more insight – newspapers, documentaries, interviews. If it is fictional, I research the playwright to try to understand his/her point of view, life experience, political stance – all of this will inform their work either consciously or subconsciously.
Then I think about what my character would sound and look like. I play with voices and physicality's to bring into the rehearsal room. Ultimately, it makes the other actors and the director's lives easier if you've done all of this as you are more free to play.
Basically, the actor's job is to be the ultimate detective, collect all the pieces of the puzzle and put it together to create a fully formed, nuanced, believable character. And then it's also our job to throw it all away and start from scratch if the director wants us too. Flexibility is key.
Sport Fot Jove's Measure for Measure.
Cast L-R – Aanisa Vylet, Janine Watson, Meg Clarke, Jess Loudon. Photo by Zelko Nedic.
A: What are you more passionate about theatre or film and why?
J: I have always been passionate about live performance. I love film and television but I am fairly inexperienced when it comes to those forms of media.
Because my training was in NYC at Atlantic Theatre Company, my formative experiences were seeing Broadway shows (for free – the perks of being an acting student in NYC!). I also performed consistently Off-Broadway throughout my acting training so I also had the benefit of practical experience in one of the most competitive, joyful, challenging, uplifting cities to work in as an actor. You have to be at the top of your game all the time in NYC – no slacking off. There are 40,000 other actors there who would be very happy to take your place!
I would love to expand into film and television but the stage is my great love.
A: How do you prepare for auditions?
J: I prep for an audition the same way I prep for a role. If it is an audition for a specific role, you are creating a role and sharing it with the audition panel in the exact same way you would share your ideas of a character with the director in the rehearsal room.
Occasionally, I will have an audition for a company or a director I have never met before. General auditions are fairly standard for larger theatre companies. You will get a 10-15 minute slot with the artistic director, casting director and assistant. In that case, they normally ask you to prepare two contrasting monologues so they can get an idea of your range and whether they can use you potentially in upcoming productions.
When it comes to those sort of auditions, I automatically go back to what I learned with the monologue guru, Karen Kohlhaas, at Atlantic in NYC. It's important to have a repertoire of monologues you have memorised and performance ready at all times. And the most important one is the "Getting to Know You" one – find a recent play (the past five years) with a character as close to your age and life experience as possible and learn it.
Here's the thing though. As actors, we tend to hang on to our favourite monologues because we know we really hit them out of the park and they're comfortable like a security blanket. However, your "Getting to Know You" monologue needs to change fairly regularly. You can't keep trotting out the same monologue for ten years as your "Old Faithful". You are not the same person when you first graduate as you are two years later and then, 5 years into your career, you're different again! You're not the same person at 25 as you were when you were 19 and again big changes from early 30s to mid 40s etc. The GTKY monologue needs to change as much as you do.
I would highly recommend Karen's book, How to Choose a Monologue for Any Audition.
A: Beginning at the audition what has the whole process been like working with Sport for Jove?
J: I have wanted to work for SFJ for five years. It took me two years to get a general audition with them after I graduated then, another year after that to get an audition for a specific role and finally I was lucky enough to snag a role in the Summer Season this year!
Every actor in Sydney wants to work for SFJ. With good reason. They are the ultimate actor's company – Damien Ryan is a phenomenal performer, writer, producer and director and, best of all, a lovely person. He has created an environment that is free and joyful and playful and challenging – for me, it's like being back in NYC with my Broadway tribe.
I am an unabashed, unapologetic Shakespeare nerd. I love it. I even do IPA (phonetic alphabet) on my script for fun, regardless of whether it's my character or someone else's. In my opinion, Shakespeare is the extreme sport version of acting, like skydiving or bungee jumping – you have to be fierce and fearless and dive right in. You have to be at peak performance, physically, vocally and emotionally connected at all times. And, to my delight, SFJ is a little haven for like-minded Shakespeare nerds – no egos, no divas, just a bunch of storytellers committed to bringing the Bard's words to life.
As you can imagine, I was absolutely busting with excitement at the first read. That excitement has never left throughout the entire process.
Working under the direction of Frankie Savige, George Banders and Lizzie Schebesta has been a complete and utter joy. And I have learned so much from my fellow cast members as well. I can't wait for the audiences at Bella Vista and Leura to see these magical worlds they have created for Servant of Two Masters and Measure for Measure.
A: Whats next for Jess Loudon?
J: I'm looking forward to expanding my skill set in 2018. It's five years since I graduated and I want to avoid the stagnation that can occur when you've been on the audition rounds without further training.
Doing the SFJ season has ignited an interest in comedia and slapstick for me. I'm hoping to expand my knowledge next year by doing weekly training with Combat Circus in Sydney with the phenomenal Scottie Witt – is there anything that man can't do? And I would love to do some clowning training with Gaulier in France – better start saving my pennies!
From a career viewpoint, I would love to do more Mainstage work in Australia. There is so much exciting new work coming up – I want to be a part of it!
Personally, I have been given the honour and privilege of representing my fellow actors as an elected member of the National Performers Committee for Actors Equity in Australia. I take this role very seriously and I am committed to ensuring we all get a fair go. As a proud feminist, I am particularly committed to our industry achieving gender parity – we have a long way to go but we'll get there if we're all in it together! If you're not a member of MEAA yet, get involved – your Union is here for you.
And, most importantly, I want to enjoy every single aspect of my life, both as an actor and also outside the industry. I don't want to become myopic or navel gazing. I want to keep on expanding and learning and growing as a person and an artist.
Alixandra is a graduate of the Actors College of Theatre and Television Sydney and the Terry Schreiber Studio and Theatre in NYC. She has also studied at the Eric Morris Workshop in LA and the Bova Actors Workshop in New York under scholarship, The Actors Studio NYC and Alixandra interned at The Performing Garage NYC run by William Dafoe.
In March 2015 she launched her own company, Suspicious Woman Productions with the opening of John Patrick Shanleys "The Big Funk" in Sydney. Alixandra is also an accomplished Jazz and Cabaret Singer having performed in Sydney, Melbourne and NYC. Currently, she is applying her theatre producing skills in the packaging and financing of feature films, in addition to continuing her work as an actor, singer and with Casting Networks International. Alixandra is also the founder of L.A Connect, a boutique personal service connecting talent and Businesses.


text:
Former Gang Members and Crime Victims Tell Their Stories during Fulton County Youth Summit	 | Print |
Anti-drug activist James Cooper (left) held the microphone as crime victim James Brown told his story of being robbed and shot in the neck, which left him paralyzed from the neck down.
Cooper, a former drug dealer who served prison time for his gang and drug activities, and Brown told their stories Wednesday during the "Be Heard: A Youth Crime Prevention Summit" for teens ages 12-17. The July 10, 2013, summit allowed teens to talk about gangs, drugs and crime while interacting with experienced professionals who specialize in the prevention of bullying, gangs, drug trafficking and other issues affecting young people.
Summit organizers used Polleverywhere.com to obtain instant feedback, responses and answers to questions posed during the event. Students used their cell phones to text responses throughout the summit. Fulton County agencies participating in the event included the Clerk of Superior Court, the Marshal's Office, Fulton County Police, Sheriff's Office, the District Attorney's office, the Housing and Human Services Department, Office of Children and Youth and the Facilities and Transportation Department. Operation Correct Start participated as a community sponsor. V103's Greg Street served as the moderator.


text:
EDITORIAL: Remembering David Dudley
David Dudley, residential program manager, speaks at Shelter Now at 43 Saint Casimir Dr. in Meriden, Thursday, February 16, 2017. | Dave Zajac, Record-Journal
It almost sounds like a detail to point out that David Dudley was a super football player, but you don't get quotes like this from sitting on the sidelines:
"The hardest hits I've ever taken on the football field was in practice at Platt from Davey Dudley. When I got to the college level, I feared nothing."
So said Tom McFadden, a lifelong friend.
Dudley died, unexpectedly, on June 26 at the age of 52. The 100 percent effort he brought to play on the gridiron pretty much characterized the way he approached all of life. It's tragic when such people are lost so early in life, and it's now upon others to step in to follow his well set example.
Dudley spent his career advocating for the homeless, most recently as the residential program director of Meriden's Shelter NOW. He'd also been appointed as a board member of the Connecticut Coalition to End Homelessness.
His years of public service also included serving as the program coordinator for the New Opportunities Fatherhood Initiative, which, as one colleague put it, Dudley built "from nothing."
"He cared," said Bill Rybczyk, Shelter NOW director for research, development and planning. "Whether he was working with a group of fathers or the homeless, he gave care and compassion."
Dudley had a pretty good experience of his own when it came to being a father. He and his wife, Jamie, were married for more than 27 years, having met when they were 12 years old. They have five daughters. "He had a way to make people feel he was speaking from the heart when he spoke to them," said daughter Jordyn-Marie.
Football became a way of bonding for the family. Dudley is considered one of the best linebackers to have come out of Platt High School, which earned him an athletic scholarship at UConn.
His work for the homeless will be greatly missed. "We are in the middle of a major renovation at the emergency shelter that was his vision and led by him and he's not going to see it completed," said Rybczyk.
That may be so, but what remains is the inspiration of a life well lived and well devoted to the well-being of others. That's a legacy that endures.
EDITORIAL: Meriden revaluation causing stress
Revaluation in Meriden has become a fretful process. Some homeowners are finding drastic increases...
Editorial: Shaping Our Post-Pandemic World
Anyone who assumed, in January of 2021, that the following months would usher in our post-pandemic...
EDITORIAL: Consignment shops attract a new clientele
There's been an uptick in younger customers shopping at area consignment stores, say proprietors who...
EDITORIAL: Republicans engender bitterness with council move in Wallingford
Actions involving the Wallingford Town Council recently have been upsetting to people and led to bit...


Our clients typically include overworked parents, downsizing seniors, busy entrepreneurs, people selling their homes and small business owners, in addition to those going through life-changing transitions like marriage, divorce, illness, empty nest, moving or relocating, a new job or a new baby. These individuals are usually looking for solutions when they don't have the time, energy or just simply don't know where to begin.
What are the benefits of being organized?
We're here to provide you with a new perspective on your home, office and other needs, free from judgment and with the utmost respect for your privacy. In addition to our guidance and expertise, we pride ourselves on our ability to deliver encouragement and support to keep you motivated and focused right to the finish line. Think of us like compassionate coaches, helping you accomplish a specific goal while instilling in you the confidence and ability to maintain and sustain your newfound success.
We understand the process can sometimes be harder for some than others. That's why we begin with an initial phone conversation and free consultation. This not only provides you the opportunity to get to know us, but also gives us a better idea of the services you need and an opportunity to establish a clear and concise plan to accomplish your goals.


Travel like a nomad! Stay in some of the most affordable budget hotels in Machilipatnam. Fret not over your travel costs and choose some of the best affordable accommodations in Machilipatnam for a memorable trip. Replete with all the basic amenities, these budget hotels won't let you complain for anything. With so many to choose from budget hotels, you won't have to think about your travel cost. Budget hotels like Hotel CityCentral and OYO 9352 Hotel SRC Grand will suit both your pockets and your comfort levels in Machilipatnam. If costs are restricting you from planning your travel, then we will help you by offering some of the best budget hotels for a memorable holiday.


text:
Security Hole Found in Obamacare Website
Jose Pagliery CNN Money
NEW YORK (CNNMoney) -- The Obamacare website has more than annoying bugs. A cybersecurity expert has found a way to hack into users' accounts.
Until the Department of Health fixed the security hole last week, anyone could easily reset your Healthcare.gov password without your knowledge and potentially hijack your account.
The glitch was discovered last week by Ben Simo, a software tester in Arizona. Simo found that gaining access to people's accounts was frighteningly simple:
Guess an existing user name, and the website will confirm it exists. Claim you forgot your password, and the site will reset it. View the site's unencrypted source code in any browser to find the password reset code. Plug in the user name and reset code, and the website displays a person's three security questions (your oldest niece's first name, name of favorite pet, date of wedding anniversary, etc.). Answer the security questions wrong, and the website spits out the account owner's email address -- again, unencrypted.
Armed with the account holder's email address, a person with malicious intent can easily track down their target on social media, where they're likely to discover the answers to those security questions.
It wouldn't even take a skilled hacker. Anyone with bad intentions -- and a minimal understanding of how to read a website's code -- could have figured it out. While such an attack might not yield your Social Security number or health information, it would expose your address and phone number.
By Friday, that dent in security was gone. But security consultants say it's disconcerting that such a privacy concern remained unaddressed for more than three weeks after the federal government launched the Obamacare website Oct. 1.
The Department of Health and Human Services, which is rolling out the health care overhaul, confirmed the flaws existed. After being contacted for this story, the department said changes were made that would prevent outsiders from seeing someone's password reset code.
"We have taken great care to ensure that people's usernames and information are kept secure," said health spokeswoman Joanne Peters.
Simo tried to report the defect as soon as he found it, but the Obamacare hotline operator referred him to law enforcement -- which was neither helpful nor relevant. While attempting to retrace Simo's steps on Friday, CNNMoney found that some of the issues had been fixed -- but not all.
Still, Simo fears that a savvy hacker could find other holes and Obamacare applicants' data will be compromised on a mass scale.
"This seems really sloppy," Simo said. "Either the developers were incompetent and did not know how to do the basic things to protect user information, or the development was so fractured that the individuals building the system didn't understand how they fit into the bigger picture."
The flaw wasn't mentioned at last week's congressional hearing, when government contractors CGI Federal and Quality Software Services Inc. testified about their responsibilities in the project. But another point was made by Congressman Mike Rogers, R-Mich.: companies keep patching up the website's holes, and adding thousands of new lines of computer code, exposing the entire system to unforeseen security problems.
Cyberattacks on Obamacare exchange websites are already underway. At least one state, Connecticut, has seen outsiders attempt to gain "irregular" access, according to Jim Wadleigh, chief information officer of Access Health CT.
Congress' inquiries continued Tuesday, when the Ways and Means Committee posed questions about the site's glitches and security to Marilyn Tavenner, head of the health department's Centers for Medicare & Medicaid Services.
The security hole is just the latest in a series of mishaps for the Obamacare website's launch. In the first weeks, system errors prevented people from signing up to the newly launched insurance exchanges. Over the past weekend, a government contractor's network failure again left users unable to apply.
Monday brought the latest worrisome disclosure: that the entire Obamacare website operates on a single computer server in Virginia -- without any backup, according to Congressman Rogers
about-Obamacare
About-affordable-care-act
'Lighten Up' Offers Holistic Program for Healthy Life
'Lighten Up' Offers a New, Holistic Approach to a Healthy Lifestyle
Health Coalition Launched
Kitzhaber Proposes Health Care Reform
Sen. Smith Leads Health Disparity Forum


Scientists have identified specific extracts from cruciferous vegetables — such as broccoli, cauliflower, cabbage and Brussels sprouts — that help maintain healthy hormone levels.1-11 Maintaining optimal hormone balance is essential to any anti-aging strategy. Triple Action Cruciferous Vegetable Extract combines some of these botanical extracts into the most comprehensive food-based, plant compilation for cell protection yet.
Life Extension has combined its cruciferous vegetable complex with trans-resveratrol based on indications from a published scientific literature that resveratrol may be the most effective compound for maintaining optimal health and promoting longevity.23 The whole grape extract contains a spectrum of polyphenols naturally found in red wine, such as proanthocyanidins, anthocyanins, and flavonoids.
Mol Cell Endocrinol. 2012 Nov 5;363(1-2):74-84.