An object adapter is the mechanism that connects a request using an object reference with the proper code to service that request. The Portable Object Adapter, or POA, is a particular type of object adapter that is defined by the CORBA specification. The POA is designed to meet the following goals:
This document presents an introduction to using the POA with the Java 2 Platform, Standard Edition. For a more complete description of the POA, see Chapter 11 of the CORBA 2.3.1 Specification.
The steps for creating and using a POA will vary according to the specific application being developed. The following steps generally occur during the POA life cycle:
Each step is described in more detail in the sections that follow.
Step 1: Get the root POA
Step 2: Define the POA's PoliciesThe first step is to get the first POA, which is called the rootPOA. The root POA is managed by the ORB and provided to the application using the ORB initialization interface under the initial object name "RootPOA".
An example of code that will get the root POA object and cast it to a POA is:
ORB orb = ORB.init( args, null ); POA rootPOA = POAHelper.narrow(orb.resolve_initial_references("RootPOA"));
Step 3: Create the POAThe Portable Object Adapter (POA) is designed to provide an object adapter that can be used with multiple ORB implementations with no rewriting needed to deal with different vendors' implementations.
The POA is also intended to allow persistent objects -- at least, from the client's perspective. That is, as far as the client is concerned, these objects are always alive, and maintain data values stored in them, even though physically, the server may have been restarted many times.
The POA allows the object implementer a lot more control over the object's identity, state, storage, and life cycle. You can create a POA without defining any policies and the default values will be used. The root POA has the following policies by default:
- Thread Policy: ORB_CTRL_MODEL
- Lifespan Policy: TRANSIENT
- Object Id Uniqueness Policy: UNIQUE_ID
- Id Assignment Policy: SYSTEM_ID
- Servant Retention Policy: RETAIN
- Request Processing Policy: USE_ACTIVE_OBJECT_MAP_ONLY
- Implicit Activation Policy: IMPLICIT_ACTIVATION
The following code snippet shows how policies are set in the RMI-IIOP (with POA) example:
Policy[] tpolicy = new Policy[3]; tpolicy[0] = rootPOA.create_lifespan_policy( LifespanPolicyValue.TRANSIENT ); tpolicy[1] = rootPOA.create_request_processing_policy( RequestProcessingPolicyValue.USE_ACTIVE_OBJECT_MAP_ONLY ); tpolicy[2] = rootPOA.create_servant_retention_policy( ServantRetentionPolicyValue.RETAIN);Each policy is discussed briefly in the following topics. For more information on POA policies, refer to Chapter 11, Portable Object Adapter of the CORBA/IIOP 2.3.1 Specification at http://www.omg.org/docs/formal/99-10-07.pdf
Thread Policy
This policy specifies the threading model used with the created POA. The default is
ORB_CTRL_MODEL
.The
ThreadPolicyValue
can have the following values:
ORB_CTRL_MODEL
- The ORB is responsible for assigning requests for an ORB-controlled POA to threads.SINGLE_THREAD_MODEL
- Requests for a single-threaded POA are processed sequentially. (NOTE: This policy is not supported in the ORB shipped with Sun's J2SE v.1.4.1 or higher).Lifespan Policy
This policy specifies the lifespan of the objects implemented in the created POA. The default is
TRANSIENT
.The
LifespanPolicyValue
can have the following values:
TRANSIENT
- The objects implemented in the POA cannot outlive the POA instance in which they are first created.PERSISTENT
- The objects implemented in the POA can outlive the process in which they are first created.Object Id Uniqueness Policy
This policy specifies whether the servants activated in the created POA must have unique object identities. The default is
UNIQUE_ID
.The
IdUniquenessPolicyValue
can have the following values:
UNIQUE_ID
- Servants activated with that POA support exactly one Object Id.MULTIPLE_ID
- A servant activated with that POA may support one or more Object Ids.Id Assignment Policy
This policy specifies whether Object Ids in the created POA are generated by the application or by the ORB. The default is
SYSTEM_ID
.The
IdAssignmentPolicyValue
can have the following values:
USER_ID
- Objects created with that POA are assigned Object Ids only by the application.SYSTEM_ID
- Objects created with that POA are assigned a unique object id by the POA. If the POA also has thePERSISTENT
policy, assigned Object Ids must be unique across all instantiations of the same POA.Servant Retention Policy
This policy specifies whether the created POA retains active servants in an Active Object Map. The default is
RETAIN
.The
ServantRetentionPolicyValue
can have the following values.
RETAIN
- to indicate that the POA will retain active servants in its Active Object Map.NON_RETAIN
- to indicate Servants are not retained by the POA.Request Processing Policy
This policy specifies how requests are processed by the created POA. The default is
USE_ACTIVE_OBJECT_MAP_ONLY
.The
RequestProcessingPolicyValue
can have the following values:
USE_ACTIVE_OBJECT_MAP_ONLY
- If the object ID is not found in the Active Object Map, anOBJECT_NOT_EXIST
exception is returned to the client. TheRETAIN
policy is also required.USE_DEFAULT_SERVANT
- If the object ID is not found in the Active Object Map or theNON_RETAIN
policy is present, and a default servant has been registered with the POA using theset_servant
operation, the request is dispatched to the default servant.USE_SERVANT_MANAGER
- If the object ID is not found in the Active Object Map or theNON_RETAIN
policy is present, and a servant manager has been registered with the POA using theset_servant_manager
operation, the servant manager is given the opportunity to locate or activate a servant or raise an exception.Implicit Activation Policy
This policy specifies whether implicit activation of servants is supported in the created POA. The default value is
IMPLICIT_ACTIVATION
.The
ImplicitActivationPolicyValue
can have the following values:
IMPLICIT_ACTIVATION
- Indicates implicit activation of servants. This requiresSYSTEM_ID
andRETAIN
policies to be set.NO_IMPLICIT_ACTIVATION
- Indicates no implicit servant activation.
Step 4: Activate the POAManagerCreating a new POA allows the application developer to declare specific policy choices for the new POA and to provide a different adapter activator and servant manager (these are callback objects used by the POA to activate POAs on demand and activate servants). Creating new POAs also allows the application developer to partition the name space of objects, as Object Ids are interpreted relative to a POA. Finally, by creating new POAs, the developer can independently control request processing for multiple sets of objects.
A POA is created as a child of an existing POA using the create_POA operation on the parent POA. To create a new POA, pass in the following information:
- Name of the POA. The POA is given a name that must be unique with respect to all other POAs with the same parent. In the following example, the POA is named
childPOA
.- POA Manager. Specify the POA Manager to be associated with the new POA. If, as is shown in the following example, null is passed for this parameter, a new POA Manager will be created. The user can also choose to pass the POA Manager of another POA.
- Policy List. Specify the policy list to be associated with the POA to control its behavior. In the following example, a persistent lifespan policy has already been defined for this POA.
The following code snippet shows how the POA is created in the Hello World: Persistent Server example.
// Create a POA by passing the Persistent Policy POA persistentPOA = rootPOA.create_POA("childPOA", null, persistentPolicy );
Each POA object has an associated
POAManager
object that controls the processing state of the POAs with which it is associated, such as whether requests to the POA are queued or discarded. ThePOAManager
can also deactivate the POA. A POA Manager may be associated with one or more POA objects.The
POAManager
can have the following states:
- Holding - In this state, associated POAs will queue incoming requests.
- Active - In this state, associated POAs will start processing requests.
- Discarding - In this state, associated POAs will discard incoming requests.
- Inactive - In this state, associated POAs will reject the requests that have not begun executing as well as as any new requests.
The
POAManagerOperations
javadocs contain more information on these states.POA Managers are not automatically activated when they are created. The following code snippet shows how the POAManager is activated in the Hello World: Persistent Server example. If the POA Manager is not activated in this way, all calls to the
Servant
will hang because, by default, the POA Manager is in theHOLD
state.// Activate PersistentPOA's POAManager. Without this step, // all calls to Persistent Server will hang because POAManager // will be in the 'HOLD' state. persistentPOA.the_POAManager().activate( );
Step 6: Create the object referenceThe following information is quoted from section 11.2.5 of the CORBA Specification.
At any point in time, a CORBA object may or may not be associated with an active servant.If the POA has the
RETAIN
policy, the servant and its associated Object Id are entered into the Active Object Map of the appropriate POA. This type of activation can be accomplished in one of the following ways.
- The server application itself explicitly activates individual objects (via the
activate_object
oractivate_object_with_id
operations).
- The server application instructs the POA to activate objects on demand by having the POA invoke a user-supplied servant manager. The server application registers this servant manager with
set_servant_manager
.
- Under some circumstances (when the
IMPLICIT_ACTIVATION
policy is also in effect and the language binding allows such an operation), the POA may implicitly activate an object when the server application attempts to obtain a reference for a servant that is not already active (that is, not associated with an Object Id).If the
USE_DEFAULT_SERVANT
policy is also in effect, the server application instructs the POA to activate unknown objects by having the POA invoke a single servant no matter what the Object Id is. The server application registers this servant withset_servant
.If the POA has the
NON_RETAIN
policy, for every request, the POA may use either a default servant or a servant manager to locate an active servant. From the POA's point of view, the servant is active only for the duration of that one request. The POA does not enter the servant-object association into the Active Object Map.When using RMI-IIOP technology, your implementations use delegation (known as the Tie model) to associate your implementation with the interface. When you create an instance of your implementation, you also need to create a Tie object to associate it with a CORBA interface. The following code snippet shows how to activate the Tie, if the POA policy is
USE_ACTIVE_OBJECT_MAP_ONLY
. This sample code is from the RMI-IIOP with POA example.
_HelloImpl_Tie tie = (_HelloImpl_Tie)Util.getTie( helloImpl ); String helloId = "hello"; byte[] id = helloId.getBytes(); tPOA.activate_object_with_id( id, tie );The CORBA Specification discusses creating object references (section 11.2.4), activating objects (section 11.2.5), and processing requests (section 11.2.6) in more detail than is done in this document. Please refer to the CORBA 2.3.1 Specification for more information.
Object references are created in servers. Once created, they may be exported to clients. Object references encapsulate object identity information and information required by the ORB to identify and locate the server and the POA with which the object is associated. References are created in the following ways:
- Explicitly activate a servant and associate it with an object reference.
The following example is from Hello World: Persistent Server. This example uses the
servant_to_reference
operation to map an activated servant to its corresponding object reference.
// Resolve Root Naming context and bind a name for the // servant. org.omg.CORBA.Object obj = orb.resolve_initial_references( "NameService" ); NamingContextExt rootContext = NamingContextExtHelper.narrow( obj ); NameComponent[] nc = rootContext.to_name( "PersistentServerTutorial" ); rootContext.rebind( nc, persistentPOA.servant_to_reference( servant ) );
Server application directly creates a reference. The following example is from the RMI-IIOP with POA example. In this example, the following code directly creates a reference. In doing so, they bring the abstract object into existence, but do not associate it with an active servant.
// Publish the object reference using the same object id // used to activate the Tie object. Context initialNamingContext = new InitialContext(); initialNamingContext.rebind("HelloService", tPOA.create_reference_with_id(id, tie._all_interfaces(tPOA,id)[0]) );
Server application causes a servant to implicitly activate itself. The behavior can occur only if the POA has been created with the
IMPLICIT_ACTIVATION
policy, which is the default behavior.Once an reference is created in the server, it can be made available to clients. For more information on creating object references and exporting to clients, please refer to section 11.2.4 of the CORBA 2.3.1 Specification for more information.
An adapter activator is optional. You would use an adapter activator if POAs need to be created during request processing. If all needed POAs are created when the application is executed, an adapter activator is not required.
An adapter activator supplies a POA with the ability to create child POAs on demand, as a
side-effect of receiving a request that names the
child POA (or one of its children), or when the find_POA
method is called with
an activate
parameter value of TRUE. The ORB will invoke an operation on an adapter activator when a
request is
received for a child POA that does not currently exist. The adapter activator can then create
the
required POA on demand.
A request must be capable of conveying the Object Id of the target object as well as the identification of the POA that created the target object reference. When a client issues a request, the ORB first locates an appropriate server (perhaps starting one if needed) and then it locates the appropriate POA within that server.
If the POA does not exist in the server process, the application has the opportunity to
re-create
the required POA by using an adapter activator. An adapter activator is a user-implemented
object that
can be associated with a POA. It is invoked by the ORB when a request is received for a
non-existent
child POA. The adapter activator has the opportunity to create the required POA. If it does
not, the
client receives the ADAPTER_NONEXISTENT
exception.
Once the ORB has located the appropriate POA, it delivers the request to that POA. The further processing of that request depends both upon the policies associated with that POA as well as the object's current state of activation.
For more information on Adapter Activators, please refer to section 11.3.3 of the CORBA 2.3.1 Specification or the AdapterActivatorOperations API documentation.
Servant Managers are optional. You would use a servant manager to allow the POA to activate servants on demand when a request for an inactive object is received. If your server loads all objects when it starts up, you do not need a servant manager.
A servant manager is a callback object that the application developer can associate with a POA. The ORB will invoke operations on servant managers to activate servants on demand, and to deactivate servants. Servant managers are responsible for managing the association of an object reference (as characterized by its Object Id value) with a particular servant, and for determining whether an object reference exists or not. Each servant manager type contains two operations, the first called to find and return a servant and the second to deactivate a servant. The operations differ according to the amount of information usable for their situation.
To use servant managers, the USE_SERVANT_MANAGER
policy must be set. Once
set, the
type of servant manager used in a particular situation depends on other policies in the POA.
The two
types of servant managers are:
ServantActivator
When the POA has the RETAIN
policy, it uses servant managers that are
ServantActivators
.
This type is typically used to activate persistent objects.
ServantLocator
When the POA has the NON_RETAIN
policy, it uses servant managers that are
ServantLocators
. Because the POA knows that the servant
returned by this servant manager will be used only for a single request, it can supply extra
information to the servant manager's operations and
the servant manager's pair of operations may be able to cooperate to do something different
than a
ServantActivator
. When the POA uses the
ServantLocator
interface, immediately after performing the operation invocation
on the
servant returned by preinvoke, the POA will invoke
postinvoke on the servant manager, passing the ObjectId value and the Servant value as
parameters
(among others). This feature may be used
to force every request for objects associated with a POA to be mediated by the servant
manager.
This type is typically used to activate transient objects.
For more information on Servant Managers, please refer to section 11.3.4 of the CORBA 2.3.1 Specification.
POAManager.activate() is required for a newly created POA if a null is passed for the POAManager parameter to POA::createPOA . If null is passed, a new POAManager is created and associated with the created POA. In this case, POAManager.activate() is needed.
To control several POAs with the same POAManager, you would:
There is no implicit relationship between the Root POA's POAManager and other POAs unless explicitly programmed by the programmer as shown above.
For more information, read section 11.3.2 of the CORBA specification, formal/99-10-07.
| Java IDL Home |


So you want all orbis paths (road segments, river reaches) between ".$from. " and ".$to."? Coming up...


|
solver
|
Go to the source code of this file.
Classes | |
| class | linalg::SparseCholesky |
| Class to perform an LDL factorization of a matrix. More... | |
LDL License:
Your use or distribution of LDL or any modified version of LDL implies that you agree to this License.
This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
Permission is hereby granted to use or copy this program under the terms of the GNU LGPL, provided that the Copyright, this License, and the Availability of the original version is retained on all copies. User documentation of any code that uses this code or any modified version of this code must cite the Copyright, this License, the Availability note, and "Used by permission." Permission to modify the code and to distribute modified code is granted, provided the Copyright, this License, and the Availability note are retained, and a notice that the code was modified is included.
Availability:
Stripped down by Alexander Domahidi, 2012. Modified to c++ code by New York University and Max Planck Gesellschaft, 2017


|
Ext.NET
5.3.0
.NET Component Framework for Enterprise Level Apps
|
Public Member Functions | |
| Builder (TChartCaptionItem component) | |
| virtual TBuilder | Name (string name) |
| The name of the caption property. More... | |
| Builder () | |
| Builder (ChartCaptionItem component) | |
| Builder (ChartCaptionItem.Config config) | |
| Public Member Functions inherited from Ext.Net.ChartCaption.Builder< TChartCaptionItem, TBuilder > | |
| Builder (TChartCaption component) | |
| Builder () | |
| Builder (ChartCaption component) | |
| Builder (ChartCaption.Config config) | |
| virtual TBuilder | Align (CaptionAlign align) |
| Determines the horizontal alignment of the caption's text. More... | |
| virtual TBuilder | AlignTo (CaptionAlignTo alignTo) |
| Whether to align the caption to the 'series' or the 'chart'. More... | |
| virtual TBuilder | Docked (CaptionDock docked) |
| The position of the caption in a chart. More... | |
| virtual TBuilder | Hidden (bool? hidden) |
| Controls the visibility of the caption. More... | |
| virtual TBuilder | Padding (int? padding) |
| The uniform padding applied to both top and bottom of the caption's text. More... | |
| virtual TBuilder | Style (CaptionTextSprite style) |
| Style attributes for the caption's text. More... | |
| virtual TBuilder | StyleObject (object styleObject) |
| Style attributes for the caption's text. More... | |
| virtual TBuilder | Text (string text) |
| The text displayed by the caption. More... | |
| virtual TBuilder | Weight (int? weight) |
| The weight controls the order in which the captions are created. More... | |
| virtual TBuilder | SetAlign (CaptionAlign align) |
| virtual TBuilder | SetAlignTo (CaptionAlignTo alignTo) |
| virtual TBuilder | SetDocked (CaptionDock dock) |
| virtual TBuilder | SetHidden (bool? hidden) |
| virtual TBuilder | SetPadding (int padding) |
| virtual TBuilder | SetStyle (object style) |
| virtual TBuilder | SetText (string text) |
| virtual TBuilder | SetWeight (int Weight) |
Static Public Member Functions | |
| static implicit | operator Builder (ChartCaptionItem component) |
| Static Public Member Functions inherited from Ext.Net.ChartCaption.Builder< TChartCaptionItem, TBuilder > | |
| static implicit | operator Builder (ChartCaption component) |
| TChartCaptionItem | : | ChartCaptionItem | |
| TBuilder | : | Builder | |
| TBuilder | : | TChartCaptionItem | |
| TBuilder | : | TBuilder |
|
inline |
|
inline |
|
inline |
|
inline |
|
inlinevirtual |
The name of the caption property.
|
inlinestatic |


Hi {{TO_FIRST_NAME}} {{TO_LAST_NAME}}
Your account was successfully affiliated with {{ORGANIZATION_NAME}}. You still may need to ask your point of contact to add additional roles to your account.
Thanks,
The {{ APPLICATION_TITLE }} Team


--- layout: post title: Microsoft loosing the API war? Oh well... tags: [microsoft] ---
(Please excuse the raw format of this post, it will get updated if I find something really awful in the next few days).
As no one really wants or have time to answer (or just pretend), I thought, well, let’s dig into this huge post.
First, please, Joel darling, I love your writing style and your blog, but stop making my life that difficult, and put the full length article separately from your blog!
First and foremost, seeing Linux as a huge threat to windows is premature, I completely agree with that. There’s several points to this I’d like to ask.
When you hear Linux taking hold of the server market, and even when you listen to Microsoft fears about linux eating some of the market share they could gain over Unix, I have a very strong feeling: The figures leading to these worldwide paranoia marketing campaigns rely on very big customers (i.e. people running a lot of servers). The figure in the SOHO market, both in terms of shipped units and deployed units, is still largely in favor of Microsoft, and I’m pretty sure Linux will have to wait for quite a long time at the door before it can enter this market.
For the desktop, Linux has progressed tremendously, no question asked about that. But so did Microsoft Windows. Can you replace a windows in a corporate environment (locked down, no administrative rights, no hardware plugging and unplugging everyday, etc) by a similarly locked down linux? Yes, absolutely, and it won’t make a huge difference for the users. The Java Desktop System from Sun is a good example of what can be achieved.
But now think about the other side of the fence, and the development of applications. (I’ll dig into that a bit later on, to follow Joel’s progression in his article). Do you really think that a CRM call center wants to use a web application? Do you think an administrative wants to complete all his reports and do his charting on a web application? Exactly my point. Ease of development is the main issue with a Linux desktop. Is Java bringing anything to the table for that?   Why? They don’t have the desktop software culture, they have the system application culture.
The whole talk about stability, management, configurability and composability of the windows platform was absolutely valid. But now there are solutions to these problems, and pretty good ones with that. Why can’t all these productions happen anyway? Because they look at the current state of things, and try to imagine what will happen in five or ten years (time taken for OS/2 to die nearly completely). If Microsoft just stopped innovating, it would be valid. But what can compete with Avalon and aero on linux today? Which project has been built to deliver something in the same time-frame as longhorn? (only acceptable links are for projects that are not still at version 0.0001 after four years of rewriting of the X server. If you get me something interesting, I will update this post and its associated logic).
All this to say, if Microsoft is still in the lead, it is because they know to adapt. It is also because they can adapt their strategy to what the consumer needs. Does the consumer need compatibility? Absolutely. Which leads me to my next point (and Joel’s).
Joel says there are two camps at Microsoft, the Raymond Chen Camp that favor compatibility bug for bug, and the MSDN Camp that doesn’t want to guarantee anything that is not documented, pushing an API specification as a moral contract with a developer. Which side am I? Most people responded to that in one way or another. My answer would be, both! Why would the two be incompatible?
For backward compatibility, Joel talks about VB6 and VB.net. I worked with both technologies, and can remember very clearly the first pages on the vb web site where object orientation, full multi threading and the new class library were announced, before the NGWS (that became the .net framework and CLR, and which were previously COM3) were announced by Bill Gates. Did Microsoft say at the time that VB.vNext would be incompatible? Never, and they presented it as an evolution of vb6, not as a break. Did the marketing suck? Absolutely, we led vb6 developers to think vb.next was just the next enhanced version, and not a complete change. I would have to agree with Joel when he says that. Should’ve Microsoft provided a better upgrade path to vb6 users? That’s a question I would tend to respond by the following: do you want to shape your community, be its slave, or be in between? With vb.net we are in the “in between”, a lot of vb weirdness are preserved (late binding anyone?), but a lot of things break as well. I think that in this case, the msdn camp didn’t win. The camp that won was the one thinking you had to move over, and recreate something that was not good enough any more, or would’ve taken significant engineering time to preserve for an overall bad result. Why would’ve it be difficult to support vb6 out of the box? VB was very limited, and you often relied (at least I did in the glory days) on a lot of api calls, libraries wraps, and pure simple hacks to turn the data entry language into proper efficient code. Would have it been possible to port that to .net? I highly doubt that any vb hacked multi-threaded application would’ve supported it (one of the ugliest hack of vb6 was the use of winAPI calls to create threads and execution of methods with the AdressOf keyword).
Where I start disagreeing with Joel completely, absolutely, vehemently (can you spell over reacting ?), is when he decry this, IIS6 and WinFX as not an “evolution” but a “break”. Here, I have to ask… What is broken exactly Joel? IIS5 was broken, IIS6 supports a new mode, and a compatibility mode for IIS5. Did they tighten security? Yes. Did they did that and it broke some application? Yes. Would’ve it been reasonable to provide a compatibility hack so that applications can be a danger to the overall system and work out of the box? I don’t think so.
Is WinFX replacing win32? Frankly, doesn’t seem to me like Win32 replaced win16? COM replaced OLE 1? OLE replaced DDE? They are all evolutions of the others, and each time they appear as a new technology, in addition to the old one. An example? Microsoft is building indigo, and still fixing bugs in DCOM. They are fixing DCOM but they still provide fixes for NetDDE (that no one in their right mind would ever use ever ever again). They’re building indigo, and they’re hooking it up with the COM stack to provide a two-way compatibility. They worked on .net and made sure you could use .net from COM and COM from .net.
Did .net 1.1 break a few things from 1.0? Yes, and that’s why you have a way to do side by side versioning on these libraries. But did win32 break a few behaviors from win16? Yes it did, and no it didn’t matter.
Question to you joel. I made my company buy your software, fogBugz (if you have a Cubiks company in your records, that’s because of me and only me, and next time am in the us I expect a dinner for that!). Anyway. If you want to add a new functionality, like workflow management of a bug, with validation by managers, and integration with the branching of source control software, are you going to implement that in the current fogBugz software? As a consumer of your product, I would love that (nothing to pay for it) but I really don’t expect that to happen. My guess is that you’ll ship that in the next version. Will you break what has been done for previous versions? Nope. But you will make sure to add stuff. That’s where I completely disagree with your analysis. What is important here is that the new apis are added on top of the current apis. They are not replacing the previous api, nor are they breaking the previous api. And that’s, once again, exactly why NetDDE still works even though DCOM have been there for years and Indigo is on the pipeline.
Joel continues by saying that “The old Microsoft, the Microsoft of Raymond Chen, might have implemented things like Avalon, the new graphics system, as a series of DLLs that can run on any version of Windows and which could be bundled with applications that need them.”. There are several reasons why he should know that’s not true. First, Microsoft like any commercial company needs to generate new revenues, upgrades revenues. I really hope for the sake of your company that you’re not going to freeze fogbugz at its current version and offer all the new functionality for free to all of your users. That would be immediate bankruptcy. Second reason is the scale of the change. Microsoft will include http.sys (the http kernel driver used by win2003) in windowsxp SP2 for free. That’s right, this new server side technology, you’ll get it on the desktop for absolutely free, nothing, peanuts. Not a sausage. Indigo will be available on winXP, win2k3 and Longhorn for free. Nothing. Peanuts. Not even one sausage. Now if you look at aero, you’re talking about a new display infrastructure, a new driver model, a fully new subsystem, completely replacing the previous one, while being completely backward compatible with GDI. If you ship an update to an OS that replaces 100% of its graphics file system, you can’t support windows in the same way as you used to, because it will soon become two different versions of windows.
Joel goes on by argumenting against WinFS as a search technology. I would just follow Robert’s point number (7), WinFS is first and foremost a technology for storing data, that relates to other data, adding meta-data to provide “intelligent” management, not just text search. Text search already works just fine on windows, thanks to the Indexing Server and the IFilter interfaces. Here, we’re talking more of other kind of data, not only text. How can I relate a picture with the people on it, and ask my operating system “show me pictures of my boyfriend from last year”? If you try to text index it, you reach a wall you won’t be able to overcome. WinFS is not there only for text, we already know how to work with text. As you say, it was not hot anymore I wasn’t born yet.
I would agree with Joel saying that memory management and easy of use of Visual Basic have been upgrading developers productivity tremendously. Who wouldn’t?
But then, he says “And yet, people aren't really using .NET much.”. Do you think that’s because of .net itself? Let me tell you a story. I bet my carreer three years ago on .net. That’s right, for the first c# beta, I said, I will be in .net and do only .net from now on. The market has been very hard for the first two years. Where is it now? Companies start seeing .net as something to use because of its productivity enhancements, but especially because it’s old enough and no one stood up and screamed “We were ruined because we chose .net”. It takes time for a new technology to build confidence in the manager paying the check for a new development project. You do sign checks and you still didn’t sign anything for .net, you should know. .net starts seeing a huge progress in the corporate environment, and it’s gradually replacing most of the Java developments (same trend in the financial services industry for that matter).
The point of .net was to provide a common execution environment, and cross language interoperability. The .net framework was mainly written to provide c# and vb.net the same api. Why? Because the vb api was always limited, there was never enough resources to put in there all the things the vb crowd wanted. Microsoft thought that if you could combine a big api, you could reduce development cost while increasing functionality. Yes they did reinvent the wheel. But so did they when they created OLE/COM, or when they created win32 even though they had win16. It’s just the same story over and over again.
Avalon is a new API for graphics. True enough. It is still backward compatible with gdi though. If you write a winforms application now, you’ll be able to write them in the future. If you write them now, they will still run on longhorn. But frankly, can we really push GDI any further? No, and that’s frankly for the best. Once again, I will say, there is absolutely nothing new. GDI+ was implemented on the win2k OS, and never retrofitted back in windows98 and Me. Ctctrl3d.dll or whatever the name of the common 3d controls under windows95 was not ported back to windows 3. And yet, a user interface for windows 3 is still working today. An API doesn’t disappear. The MSDOS subsystem is still in the operating system, protecting your investment. Yes you will have to learn again, a new technology, and that cost money and is frightening. But that’s also what makes this industry moving (like any other one for that matter), and what lets you ship new versions of your software. Your company, Joel, is the best counter example to your argument. You decided not to port to .net for cost reason. And you can still ship your software. And it works. And will in the foreseeable future. Yet you’re alarmed that you’re being let down. Where are the extensions to the vb4 runtime? There was none, it was added to the vb5 runtime. Same thing. Again. And again. And again. Oh, and we still have the sky above us. And I still got a job, and so does your company!
As for Microsoft wanting you to stop upgrading fogBugz, which we bought, even though we knew about Team System, in common with vault, that I made my company buy too… I will leave it to Eric to explain why Microsoft probably doesn’t care much about fogbugz.
When you say that “no developer with a day job has time to keep up with all the new development tools coming out of redmond”, are you suggesting most of my blog roll is actually fake professional people? A lot of people find the time to know in advance what they are going to do. If you want to succeed, you must aim high.  If you need to be on top, you always find the time to know beforehand where your industry, where what makes your day job possible is going. That’s why I have both longhorn and Whidbey installed. And my day job is a real day job. That’s what makes the difference between my salary and the one from my “enterprise developers” pals which are still feeling very sentimentally about vb6 and how cool it was.
And then the discussion slip to supposed “lock in”. There, I don’t understand. How would the win32 api be more open than the winFX api? How would the first one be less of a lock in than the second one? If you write code correctly against .net, you’re actually more open than when writing against win32, as technologies like mono let you run natively on linux, unix, freebsd, solaris, ibm mainframes, macosx… So where is the lock in exactly?
WinFX is only for longhorn, and that may be the lock-in: The fact that something new is only available in the new platform because it’s such a change that backporting it to old platforms would cost the same thing as providing a new version, which present both support and marketing advantages (Are you running Windows FX or WindowsXP? Instead of “Are you running WindowsXP or WindowsXP+Avalon+SP3?). That is not lock in, that is a new api. Each version of windows, historically has introduced new APIs, Windows98 SE introduced new APIs compared to Windows98. Did some software rely on that? Yes. Could they just not use it and keep on doing Windows95 compatible applications? Yes yes and yes. You have choice, and these technologies continue to be supported. If you have a bug in one of the win32 apis, and fill a ticket with Microsoft and have a support contract (like any serious developer team should have), then they will go down there and investigate, and provide you with a solution or a fix for that api. It may even get fixed in the next service pack. Is Win32 getting anywhere? No, no no no no… Not even imaginable. What you may discover though is that, even on Longhorn, the win32 api has been extended. See this post for a short example.
And there, I just don’t get it. Joel switch to an over focusing on web applications. Yes, GMail is sweet. So is Oddpost. I know of a few other web sites which are just cool as well. But nothing, nothing can replace an efficient rich client application. Do you think I would read 500 feeds from a web application? No, I’m using newsgator and outlook. Would I manage the 100 mails I receive a day from a web application? Not in your wildest deams. Would I do development, picture management, video editing and sorting (you know, just normal family divx videos, lots of them), from a web application? No, never ever. The web sucks, it is slow, forces me into waiting in between two pages. The only good thing about the web is the “liveness” of the data and the rich formatting. Guess what, Microsoft is providing Indigo for the first one and Avalon for the second! The web is nice to read web sites, I guess. I’m still not sure the browser paradigm will keep on living on for years though. People are bored of the “click, wait, see white screen, load page, click again”.
Then, I don’t understand anymore. Joel informs us that it’s over, the web have won. My experience might be slightly different, but I see lots of windows applications being written. I don’t see CRM call centers being web based in the near future. There is space for both technologies, one that REACH users whatever their computer or browser is, and one that is RICH and empowers users to work faster and better.   Why didn’t web tablets succeed back in the late 90s… Why did Be die?
(ok, I really needed to play drama queen and sound really nervous in there, Joel does say “I love my rich client applications and would go nuts if I had to use web versions of the applications I use daily”, but I can’t really start a big argument if I agree with him , or if he agrees with me, can I?)
Development positions… Yes, low level people are paid more because there are very few of them.  Not many people. How the remoting sinks work? Not many either. Do those that knows get paid better? Yeap (except for me obviously lol). That’s just a simple matter of a minority of developers interested in how it works rather than what does it let me do. This was true in the COM days. It was even true in the VB6 days.
Do most people refuse to move back from their web development position? I don’t think they refuse. They are waiting for the right technology that will let them have the same level of freedom than they have on the web. That’s why Microsoft says, all in all, that the very rich client is back. It’s cool, easy to use, and so rich that I don’t have to bother with a web site anymore, unless I want to reach. It will take years to do the conversion, but if the technology is cool enough, it will get users moving, which in turn will get devs moving, etc… As always, enterprise applications will be the last to move, in 10 to 15 years!
Could HTML have won? It would have with a richer model than the pull one, if standards for manipulating the dom and its events appeared back when the browser war was hot, and if the w3c didn’t turn into that huge unable to achieve monster that, these days, only shines when standardizing or clarifying what was done by others (shame to say that, considering how much I supported the w3c all these years).
HTML didn’t win. It’s one of the less bad technologies available, but everybody working on it feels frustrated. Microsoft is betting on providing enough candies for you not to get frustrated anymore. And in my opinion, it is going to work. Would I bet my career on it now? No. .net is just the right migration path. Future will tell (and hopefully prove Microsoft and me right).
So, Joel… Where did you invite me for dinner already?


I am a CS Engineer aspiring to achieve heigths of success. I believe in hard work that is done smartly and i love to learn new things, especially which makes me think out of the box. Ambitious, benevolent and candid are the ABC of my personality.
Achievements
• Joint Secretary of Association of Computer Science and Engineering.
• Certification of- Data Processing Specialist, In English Comprehension, Corporate Communications Professional and Creative Content Developer by AMCAT(Aspiring Minds).
• Secured 2nd rank among 100+ entries in city level group dance competition organized by KIT.
• Secured 80% in contest (problem solving through programming in C) conducted by IIT, Madras.
• Secured 1st rank among 200+ entries in college level exams organized by Aktu, Lucknow.
• Holder of Academic Excellence Award by Mukhtarul Amin(Owner of SuperHouse).
• Felicitation by Dr. Kirti Malhotra on occasion of International Women’s Day for efforts put on to manage extracurricular activities along with Academics.
• Cleared Round-1 of INDIAN ENGINEERING OLYMPIAD 2019(Awaiting for Round2 to be organised soon).
• Acknowledged by INTERNSHALA by providing a “badge” to certify me as a personality capable of adapting in industry for a long term.
Technical skills
• Languages : C, C++, Core Java, Advance Java, HTML, CSS, PHP, Python, Django, Bootstrap, Javascript, JQuery.
• Packages : MS Office
• Database : My SQL, Oracle, dbsqllite3.
• Operating System : Windows, Linux.
• Software : Rapid Miner, Pycharm, Net Beans IDE, SalesForce.


Review by Lars Lindahl<EMAIL_ADDRESS>"Army of Darkness" (1993) **1/2 (out of four)
Directed by Sam Raimi Written by Sam Raimi and Ivan Raimi
Starring Bruce Campbell, Embeth Davidtz, Ian Abercrombie, Marcus Gilbert, Richard Grove, and Bridget Fonda.
Army of Darkness, the third film in the Evil Dead trilogy, is as close as you'll get to seeing a comic book transformed into a movie. Full of cheesy one liners you'd normally hear Superman declare, the script is extremely terse and unspecific compared to others of the same genre (The story Teenage Mutant Ninja Turtles 2: The Secret of the Ooze presented feels like James Joyce's Ulysses compared to this one). The acting is horrendously bad, even for an Evil Dead film. Bruce Campbell, as the "everyday joe" turned macho superhero, looks like he's reading off cue cards while "damsel-in-distress" Embeth Davidtz is given a few lines and still seems to screw it up.
So why didn't this movie get zero stars? Because director Sam Raimi is making a bad movie on purpose!  To some extent, Raimi succeeds. I laughed hard at some scenes; they were just so asinine, you really can't help but laugh.
However, having seen Evil Dead II just a few days before, the third installment wasn't nearly as impressive as its immediate predecessor. I'll invent a term to better explain my dissatisfaction with Army of Darkness: Austin Powers Syndrome, or APS. Movies with APS at first seem very funny. Though, as the film progresses, an uncontrollable feeling of familiarity begins to emerge in the back of your brain. It takes a few minutes, but once you realize it, your enjoyment for the movie is no longer there. The jokes are exactly the same as the last film in the series, only slightly modified. Not modified enough to hide the fact that nearly everything in the movie you're watching has been recycled by another movie you cherished. It's a terrible feeling. I got this feeling watching Austin Powers: The Spy Who Shagged Me and I recently during Army of Darkness.
Raimi attempted a very difficult task and ultimately failed: He tried to satire the same subject using the same characters and the same story twice. The slight modification is, instead of alone in a cabin in the middle of the woods, our hero Ash (Campbell) is fighting evil ghosts and monsters during 1300 A.D. with a large army of soldiers. As continued from the point where Evil Dead II left off (although some scenes from the end of Evil Dead II are oddly left out of the beginning of Army of Darkness), Ash is sucked into the past along with all of the evils that terrorized him in the present. Conveniently, he finds himself in the middle of King Arthur's castle (the only hip place to be during 1300 A.D. according to the movies). Arthur promises to send Ash back to the present as long as he recovers the infamous book of the dead from the woods, an environment inhabited by dangerous spirits.
The sense of familiarity begins to come out when Ash finds himself in a cabin preparing to find the book. He is first humorously attacked by miniature Ash's, then by another, larger monster that could pass as his evil twin. As all of these events, no matter how wacky or unique they sound, are almost exactly staged and presented like in Evil Dead II when Ash was being attacked by his own right hand. I would have enjoyed Army of Darkness a lot more if I had not seen Evil Dead II.
It is fitting that Army of Darkness is not titled Evil Dead III, because, overall, it is very different from its two prequels. The budget is more than the first two films combined, the number of actors is more than the first two films combined, and the movie lacks the horror element that the others shared and cleverly ridiculed. As a guilty pleasure, Army of Darkness is great to watch with a group of friends. Everyone involved in the film knew they were making a bad movie and they had a lot of fun doing it. As it turns out, they made one of the best B-movies of the 1990's. But the ASP sticks onto the movie very early on and not once does it show signs of letting go.
Grade: **1/2 (out of four)
Lars Attacks! A teenager attacks past and present cinema http://www.angelfire.com/ny3/larsattacks
<EMAIL_ADDRESS>(c) 2000 Lars Lindahl
Do You Yahoo!? Send instant messages & get email alerts with Yahoo! Messenger. http://im.yahoo.com/
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


CrankyCritic® movie reviews: Crazy in Alabama Rated [PG-13], 104 minutes Starring Melanie Griffith, David Morse, Lukas Black Screenplay by Mark Childress, based on his novel Directed by Antonio Banderas website: www.crazyinalabama.com
IN SHORT: Good work from Melanie Griffith. Decent first flick from Antonio Banderas, director.
Juxtapose one very serious story about a child witnessing a racial murder in 1965 Alabama with a quirky story of his homicidal aunt's journey to Hollywood, where fame and a TV career await, and you've got actor Antonio Banderas' directorial debut Crazy in Alabama in a nutshell. How one story influences the events of the other is so subtle that Cranky didn't get it. Both stories, individually, are good in and of themselves. So let's get to them.
Melanie Griffith hasn't gotten the great character roles all that often in her career but when she gets a good one, as she does here, she goes to town. As Lucille, a would be actress who gets a call from the coast, nothing is going to keep her from obtaining her dream. Not the seven kids. Not the abusive husband who, before the film even begins, is beheaded and stuffed in a freezer. Lucille (Griffith), character that she is, takes the head with her as she drops off the kids and says good-bye to her best nephew, Peejoe (Lucas Black) who, in the round robin or restructured families, is shuffled off to live with another uncle, Dove (David Morse).
The setting allows for PeeJoe's story to focus on the racial strife of the time, which includes the usual redneck sheriff (Meat Loaf Aday) who, in the course of beating up some black kids who wanted to swim at the public pool, accidentally kills one. PeeJoe is the only witness but Sheriff Doggett, still after Lucille for the (now) discovered killing, is not beyond making some sort of deal to keep his fat butt free.
Lucille's cross country trek paves the way for lots of small scenes of interactions with "real" people across the heartland. The girl can flirt her way out of trouble and, by the time she hits LA, she's got an agent (Robert Wagner) and a handful of men in her thrall. She still has that head, by the way, which speaks to her regularly.
Eventually, both stories come back together in a courtroom run by Rod Steiger. His judge is a total cartoon, and would work well up against teevee's Judge Judy, but Crazy in Alabama is, at heart, a light flick. Two good stories. Good performances. Easy to rate...
On average, a first run movie ticket will run you Eight Bucks. Were Cranky able to set his own price to Crazy in Alabama, he would have paid...
$5.00
Dateflick. Buy popcorn. Snuggle.
The Cranky Critic® is a Registered Trademark of, and Copyright © 1999 by, Chuck Schwartz. All Rights Reserved. Cranky on the web at www.crankycritic.com
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


crash
OS/161 Reference Manual
Name
crash - commit various exceptions
Synopsis
/testbin/crash [operation]
Description
crash will perform any one of fourteen illegal processor operations,
any one of which should get it killed without causing the whole system
to crash.
The operations are coded `a' through `n' and may be chosen on the
command line. If no operation is chosen, a menu is displayed and a
choice solicited.
Restrictions
Test `f', which writes into the process's own code segment, will only
cause a processor exception if you implement read-only code segments.
Since this is not required, it is not required that test `f' pass.
However, using test `f' must not under any circumstances corrupt the
code in the copy of crash on disk!
Requirements
crash uses the following system calls:
crash should operate properly once the basic system call assignment is
complete.


Defines the base components of SQL expression trees.
All components are derived from a common base class ClauseElement. Common behaviors are organized based on class hierarchies, in some cases via mixins.
All object construction from this package occurs via functions which in some cases will construct composite ClauseElement structures together, and in other cases simply return a single ClauseElement constructed directly. The function interface affords a more "DSL-ish" feel to constructing SQL expressions and also allows future class reorganizations.
Even though classes are not constructed directly from the outside, most classes which have additional public methods are considered to be public (i.e. have no leading underscore). Other classes which are "semi-public" are marked with a single leading underscore; these classes usually have few or no public methods and are less guaranteed to stay the same in future releases.
Return an Alias object.
An Alias represents any FromClause with an alternate name assigned within SQL, typically using the AS clause when generated, e.g. SELECT * FROM table AS aliasname.
Similar functionality is available via the alias() method available on all FromClause subclasses.
- selectable
- any FromClause subclass, such as a table, select statement, etc..
- alias
- string name to be assigned as the alias. If None, a random name will be generated.
Join a list of clauses together using the AND operator.
The & operator is also overloaded on all _CompareMixin subclasses to produce the same result.
Return a BETWEEN predicate clause.
Equivalent of SQL clausetest BETWEEN clauseleft AND clauseright.
The between() method on all _CompareMixin subclasses provides similar functionality.
Create a bind parameter clause with the given key.
Produce a CASE statement.
The expressions used for THEN and ELSE, when specified as strings, will be interpreted as bound values. To specify textual SQL expressions for these, use the text(<string>) construct.
The expressions used for the WHEN criterion may only be literal strings when "value" is present, i.e. CASE table.somecol WHEN "x" THEN "y". Otherwise, literal strings are not accepted in this position, and either the text(<string>) or literal(<string>) constructs must be used to interpret raw string values.
Usage examples:
case([(orderline.c.qty > 100, item.c.specialprice), (orderline.c.qty > 10, item.c.bulkprice) ], else_=item.c.regularprice) case(value=emp.c.type, whens={ 'engineer': emp.c.salary * 1.1, 'manager': emp.c.salary * 3, })
Return a CAST function.
Equivalent of SQL CAST(clause AS totype).
Use with a TypeEngine subclass, i.e:
cast(table.c.unit_price * table.c.qty, Numeric(10,4))
or:
cast(table.c.timestamp, DATE)
Return a textual column clause, as would be in the columns clause of a SELECT statement.
The object returned is an instance of _ColumnClause, which represents the "syntactical" portion of the schema-level Column object.
Return an EXCEPT of multiple selectables.
The returned object is an instance of CompoundSelect.
Return an EXCEPT ALL of multiple selectables.
The returned object is an instance of CompoundSelect.
Return an Insert clause element.
Similar functionality is available via the insert() method on Table.
If both values and compile-time bind parameters are present, the compile-time bind parameters override the information specified within values on a per-key basis.
The keys within values can be either Column objects or their string identifiers. Each key may reference one of:
If a SELECT statement is specified which references this INSERT statement's table, the statement will be correlated against the INSERT statement.
Return an INTERSECT of multiple selectables.
The returned object is an instance of CompoundSelect.
Return an INTERSECT ALL of multiple selectables.
The returned object is an instance of CompoundSelect.
Return a JOIN clause element (regular inner join).
The returned object is an instance of Join.
Similar functionality is also available via the join() method on any FromClause.
To chain joins together, use the join() or outerjoin() methods on the resulting Join object.
Return a _Label object for the given ColumnElement.
A label changes the name of an element in the columns clause of a SELECT statement, typically via the AS SQL keyword.
This functionality is more conveniently available via the label() method on ColumnElement.
Return a literal clause, bound to a bind parameter.
Literal clauses are created automatically when non- ClauseElement objects (such as strings, ints, dates, etc.) are used in a comparison operation with a _CompareMixin subclass, such as a Column object. Use this function to force the generation of a literal clause, which will be created as a _BindParamClause with a bound value.
Return a textual column expression, as would be in the columns clause of a SELECT statement.
The object returned supports further expressions in the same way as any other column object, including comparison, math and string operations. The type_ parameter is important to determine proper expression behavior (such as, '+' means string concatenation or numerical addition based on the type).
Return a negation of the given clause, i.e. NOT(clause).
The ~ operator is also overloaded on all _CompareMixin subclasses to produce the same result.
Join a list of clauses together using the OR operator.
The | operator is also overloaded on all _CompareMixin subclasses to produce the same result.
Return an OUTER JOIN clause element.
The returned object is an instance of Join.
Similar functionality is also available via the outerjoin() method on any FromClause.
To chain joins together, use the join() or outerjoin() methods on the resulting Join object.
Create an 'OUT' parameter for usage in functions (stored procedures), for databases which support them.
The outparam can be used like a regular function parameter. The "output" value will be available from the ResultProxy object via its out_parameters attribute, which returns a dictionary containing the values.
Returns a SELECT clause element.
Similar functionality is also available via the select() method on any FromClause.
The returned object is an instance of Select.
All arguments which accept ClauseElement arguments also accept string arguments, which will be converted as appropriate into either text() or literal_column() constructs.
A list of ClauseElement objects, typically ColumnElement objects or subclasses, which will form the columns clause of the resulting statement. For all members which are instances of Selectable, the individual ColumnElement members of the Selectable will be added individually to the columns clause. For example, specifying a Table instance will result in all the contained Column objects within to be added to the columns clause.
This argument is not present on the form of select() available on Table.
Additional parameters include:
Return a Table object.
This is a primitive version of the Table object, which is a subclass of this object.
Create literal text to be inserted into a query.
When constructing a query from a select(), update(), insert() or delete(), using plain strings for argument values will usually result in text objects being created automatically. Use this function when creating textual clauses outside of other ClauseElement objects, or optionally wherever plain text is to be used.
Return a UNION of multiple selectables.
The returned object is an instance of CompoundSelect.
A similar union() method is available on all FromClause subclasses.
Return a UNION ALL of multiple selectables.
The returned object is an instance of CompoundSelect.
A similar union_all() method is available on all FromClause subclasses.
Return an Update clause element.
Similar functionality is available via the update() method on Table.
If both values and compile-time bind parameters are present, the compile-time bind parameters override the information specified within values on a per-key basis.
The keys within values can be either Column objects or their string identifiers. Each key may reference one of:
If a SELECT statement is specified which references this UPDATE statement's table, the statement will be correlated against the UPDATE statement.
Represents an table or selectable alias (AS).
Represents an alias, as typically applied to any table or sub-select within a SQL statement using the AS keyword (or without the keyword on certain databases such as Oracle).
This object is constructed from the alias() module level function as well as the alias() method available on all FromClause subclasses.
Represent an expression that is LEFT <operator> RIGHT.
Construct a new _BinaryExpression.
Represent a bind parameter.
Public constructor is the bindparam() function.
Construct a _BindParamClause.
Compare this _BindParamClause to the given clause.
Since compare() is meant to compare statement syntax, this method returns True if the two _BindParamClauses have just the same type.
Describe a calculated SQL expression that has a type, like CASE.
Extends ColumnElement to provide column-level comparison operators.
Base class for elements of a programmatically constructed SQL expression.
Returns the Engine or Connection to which this ClauseElement is bound, or None if none found.
Compare this ClauseElement to the given ClauseElement.
Subclasses should override the default behavior, which is a straight identity comparison.
Compile this SQL expression.
Uses the given Compiler, or the given AbstractDialect or Engine to create a Compiler. If no compiler arguments are given, tries to use the underlying Engine this ClauseElement is bound to to create a Compiler, if any.
Finally, if there is no bound Engine, uses an DefaultDialect to create a default Compiler.
parameters is a dictionary representing the default bind parameters to be used with the statement. If parameters is a list, it is assumed to be a list of dictionaries and the first dictionary in the list is used with which to compile against.
The bind parameters can in some cases determine the output of the compilation, such as for UPDATE and INSERT statements the bind parameters that are present determine the SET and VALUES clause of those statements.
Return immediate child elements of this ClauseElement.
This is used for visit traversal.
**kwargs may contain flags that change the collection that is returned, for example to return a subset of items in order to cut down on larger traversals, or to return child items from a different context (such as schema-level collections instead of clause-level).
Return a copy with bindparam() elments replaced.
Returns a copy of this ClauseElement with bindparam() elements replaced with values taken from the given dictionary:
>>> clause = column('x') + bindparam('foo') >>> print clause.compile().params {'foo':None} >>> print clause.params({'foo':7}).compile().params {'foo':7}
Compile and execute this ClauseElement, returning the result's scalar representation.
Return True if this clause element represents a complete executable statement.
Return a copy with bindparam() elments replaced.
Same functionality as params(), except adds unique=True to affected bind parameters so that multiple statements can be used.
Describe a list of clauses, separated by an operator.
By default, is comma-separated, such as a column listing.
Compare this ClauseList to the given ClauseList, including a comparison of all the clause items.
Represents a generic column expression from any textual string.
This includes columns associated with tables, aliases and select statements, but also any arbitrary text. May or may not be bound to an underlying Selectable. _ColumnClause is usually created publically via the column() function or the literal_column() function.
Construct a new _ColumnClause.
An ordered dictionary that stores a list of ColumnElement instances.
Overrides the __eq__() method to produce SQL clauses between sets of correlated columns.
Add a column to this collection.
The key attribute of the column will be used as the hash key for this dictionary.
add the given column to this collection, removing unaliased versions of this column as well as existing columns with the same key.
e.g.:
t = Table('sometable', Column('col1', Integer)) t.replace_unalised(Column('col1', Integer, key='columnone'))will remove the original 'col1' from the collection, and add the new column under the name 'columnname'.
Used by schema.Column to override columns during table reflection.
Represent an element that is usable within the "column clause" portion of a SELECT statement.
This includes columns associated with tables, aliases, and subqueries, expressions, function calls, SQL keywords such as NULL, literals, etc. ColumnElement is the ultimate base class for all such elements.
ColumnElement supports the ability to be a proxy element, which indicates that the ColumnElement may be associated with a Selectable which was derived from another Selectable. An example of a "derived" Selectable is an Alias of a Table.
A ColumnElement, by subclassing the _CompareMixin mixin class, provides the ability to generate new ClauseElement objects using Python expressions. See the _CompareMixin docstring for more details.
provides a constant 'anonymous label' for this ColumnElement.
This is a label() expression which will be named at compile time. The same label() is returned each time anon_label is called so that expressions can reference anon_label multiple times, producing the same label name at compile time.
the compiler uses this function automatically at compile time for expressions that are known to be 'unnamed' like binary expressions and function calls.
Return True if the given ColumnElement has a common ancestor to this ColumnElement.
Adapts a ClauseElement which may or may not be a ColumnElement subclass itself into an object which acts like a ColumnElement.
Defines comparison and math operations for ClauseElement instances.
Produce a BETWEEN clause, i.e. <column> BETWEEN <cleft> AND <cright>
Allow _CompareMixins to return the underlying ClauseElement, for non-ClauseElement _CompareMixins.
Allow _CompareMixins to return the appropriate object to be used in expressions.
Produce a column label, i.e. <columnname> AS <name>.
if 'name' is None, an anonymous label name will be generated.
produce a generic operator function.
e.g.:
somecolumn.op("*")(5)
produces:
somecolumn * 5
return a new delete() construct with the given expression added to its WHERE clause, joined to the existing clause via AND, if any.
return a new exists() construct with the given expression added to its WHERE clause, joined to the existing clause via AND, if any.
Represent an element that can be used within the FROM clause of a SELECT statement.
Given a ColumnElement, return the exported ColumnElement object from this Selectable which corresponds to that original Column via a common anscestor column.
return a SELECT COUNT generated against this FromClause.
a brief description of this FromClause.
Used primarily for error message formatting.
Return True if this FromClause is 'derived' from the given FromClause.
An example would be an Alias of a Table is derived from that Table.
return a join of this FromClause against another FromClause.
return an outer join of this FromClause against another FromClause.
replace all occurences of FromClause 'old' with the given Alias object, returning a copy of this FromClause.
Describe a SQL function.
Extends _CalculatedClause, turn the clauselist into function arguments, also adds a packagenames argument.
Generate _Function objects based on getattr calls.
Represent a grouping within a column expression
Construct a new Insert.
Add a word or expression between INSERT and INTO. Generative.
If multiple prefixes are supplied, they will be separated with spaces.
represent a JOIN construct between two FromClause elements.
The public constructor function for Join is the module-level join() function, as well as the join() method available off all FromClause subclasses.
Create a Select out of this Join clause and return an Alias of it.
The Select is not correlating.
Create a Select from this Join.
Represents a column label (AS).
Represent a label, as typically applied to any column-level element using the AS sql keyword.
This object is constructed from the label() module level function as well as the label() method available on all ColumnElement subclasses.
Represent the NULL keyword in a SQL statement.
Public constructor is the null() function.
Represents a SELECT statement.
Select statements support appendable clauses, as well as the ability to execute themselves and return a result set.
Construct a Select object.
The public constructor for Select is the select() function; see that function for argument descriptions.

The expression will be joined to existing HAVING criterion via AND.
append the given columns clause prefix expression to this select() construct.
append the given expression to this select() construct's WHERE criterion.
The expression will be joined to existing WHERE criterion via AND.
return a new select() construct with the given column expression added to its columns clause.
return a new select() construct which will correlate the given FROM clauses to that of an enclosing select(), if a match is found.
By "match", the given fromclause must be present in this select's list of FROM objects and also present in an enclosing select's list of FROM objects.
Calling this method turns off the select's default behavior of "auto-correlation". Normally, select() auto-correlates all of its FROM clauses to those of an embedded select when compiled.
If the fromclause is None, correlation is disabled for the returned select().
return a SQL EXCEPT of this select() construct against the given selectable.
return a SQL EXCEPT ALL of this select() construct against the given selectable.
Return a list of all FromClause elements which will be applied to the FROM clause of the resulting statement.
return child elements as per the ClauseElement specification.
return a new select() construct with the given expression added to its HAVING clause, joined to the existing clause via AND, if any.
an iteratorof all ColumnElement expressions which would be rendered into the columns clause of the resulting SELECT statement.
return a SQL INTERSECT of this select() construct against the given selectable.
return a SQL INTERSECT ALL of this select() construct against the given selectable.
return a Set of all FromClause elements referenced by this Select.
This set is a superset of that returned by the froms property, which is specifically for those FromClause elements that would actually be rendered.
return a new select() construct which will apply the given expression to the start of its columns clause, not using any commas.
return a new select() construct with the given FROM expression applied to its list of FROM objects.
return a 'grouping' construct as per the ClauseElement specification.
This produces an element that can be embedded in an expression. Note that this method is called automatically as needed when constructing expressions.
return a SQL UNION of this select() construct against the given selectable.
return a SQL UNION ALL of this select() construct against the given selectable.
return a new select() construct with the given expression added to its WHERE clause, joined to the existing clause via AND, if any.
Base class for Select and CompoundSelects.
Construct a new _SelectBaseMixin.
Append the given GROUP BY criterion applied to this selectable.
The criterion will be appended to any pre-existing GROUP BY criterion.
Append the given ORDER BY criterion applied to this selectable.
The criterion will be appended to any pre-existing ORDER BY criterion.
return a new selectable with the 'use_labels' flag set to True.
This will result in column expressions being generated using labels against their table name, such as "SELECT somecolumn AS tablename_somecolumn". This allows selectables which contain multiple FROM clauses to produce a unique set of column names regardless of name conflicts among the individual FROM clauses.
return a 'scalar' representation of this selectable, which can be used as a column expression.
Typically, a select statement which has only one column in its columns clause is eligible to be used as a scalar expression.
The returned object is an instance of _ScalarSelect.
return a new selectable with the given list of GROUP BY criterion applied.
The criterion will be appended to any pre-existing GROUP BY criterion.
return a 'scalar' representation of this selectable, embedded as a subquery with a label.
See also as_scalar().
return a new selectable with the given list of ORDER BY criterion applied.
The criterion will be appended to any pre-existing ORDER BY criterion.
part of the ClauseElement contract; returns True in all cases for this class.
Represents a "table" construct.
Note that this represents tables only as another syntactical construct within SQL expressions; it does not provide schema-level functionality.
Represent a literal SQL text fragment.
Public constructor is the text() function.
Construct a new _TextClause.
Handle a type keyword in a SQL statement.
Used by the Case statement.
Construct a new _UnaryExpression.
Construct a new Update.
return a new update() construct with the given expression added to its WHERE clause, joined to the existing clause via AND, if any.
Form the base for INSERT, UPDATE, and DELETE statements.
specify the VALUES clause for an INSERT statement, or the SET clause for an UPDATE.


RVS_AutofillTextField
@IBDesignable
open class RVS_AutofillTextField : UITextField
extension RVS_AutofillTextField: UITableViewDataSource
extension RVS_AutofillTextField: UITableViewDelegate
This class overloads the standard UITextField widget to provide a realtime “dropdown” menu of possible autocomplete choices (in a table and modal-style screen).
The dropdown is always displayed below the text field, and is attached to the main window root view (so it appears over everything else). It is not modal.
If the user selects a value from the table, that entire string is entered into the text field, and the dropdown is dismissed.
The dropdown is dismissed whenever focus leaves the text item.
When focus is set to the text field, the current text is evaluated, and a dropdown may appear, if required.
If the autofill functionality is not available, or is explicitly deactivated, the text item behaves exactly like a standard UITextField
.
-
When the table comes up, this will be the color. The default is the standard system color, with a 0.25 alpha.
Declaration
Swift
@IBInspectable public var tableBackgroundColor: UIColor
-
This is the text color to use in the table. Default is label color.
Declaration
Swift
@IBInspectable public var tableTextColor: UIColor
-
The minimum width of the table. It will be at least this wide, and will follow the width of the edit text item, if it is bigger. It will also never go beyond the trailing edge of the screen.
Declaration
Swift
@IBInspectable public var minimumTableWidthInDisplayUnits: CGFloat
-
This is a “circuit breaker” for the autofill capability. Default is on. If Off, the autofill will not be shown.
Declaration
Swift
@IBInspectable public var isAutoFillOn: Bool
-
This specifies whether or not matches are case-blind (default), or case-sensitive (true).
Declaration
Swift
@IBInspectable public var isCaseSensitive: Bool
-
If true (default is false), then the match is made at the end of the string.
Declaration
Swift
@IBInspectable public var isWildcardBefore: Bool
-
If true (default is true), then the match is made at the beginning of the string.
Declaration
Swift
@IBInspectable public var isWildcardAfter: Bool
-
This is the maximum number of results to be returned. Default is 5. If -1, then there is no limit.
Declaration
Swift
@IBInspectable public var maximumAutofillCount: Int
-
This is the data source for this widget. Be aware that this is a strong reference. This is not inspectable, and must be assigned programmatically.
Declaration
Swift
public var dataSource: RVS_AutofillTextFieldDataSource?
-
This is the font to use. It must be set programmatically.
Declaration
Swift
public var tableFont: UIFont
-
Called to close the table view, and, possibly, resign as first responder.
Declaration
Swift
public func closeTableViewAndResignFirstResponder()
-
This makes sure that we remove the table, if we are no longer the focus.
Declaration
Swift
@discardableResult public override func becomeFirstResponder() -> Bool
-
This makes sure that we remove the table, if we are no longer the focus.
Declaration
Swift
@discardableResult public override func resignFirstResponder() -> Bool
-
Called when we trigger a layout. We use this to register our callback.
Declaration
Swift
public override func layoutSubviews()
-
Called when we are being removed from our superview. We remove the callback (just to be sure -belt and suspenders).
Declaration
Swift
public override func removeFromSuperview()
-
This returns the number of rows to display in the autofill table.
Declaration
Swift
public func tableView(_: UITableView, numberOfRowsInSection: Int) -> Int
Return Value
The number of rows to display.
-
This returns one cell of the table, with the specific autofill suggestion.
Declaration
Swift
public func tableView(_ inTableView: UITableView, cellForRowAt inIndexPath: IndexPath) -> UITableViewCell
Parameters
inTableView
The table view.
cellForRowAt
The index of the cell to be returned (section will always be 0).
Return Value
A new, simple, default cell, with an attributed text content.
-
This reacts to the user selecting a suggested text item. It sets the edit field text to the selected text, and closes the table.
Declaration
Swift
public func tableView(_ inTableView: UITableView, didSelectRowAt inIndexPath: IndexPath)
Parameters
inTableView
The table view.
didSelectRowAt
The index of the selected row,