A system for constructing information search queries is provided. The system comprises a query language that has a predefined syntax and a constructor that creates a search object. The search object encapsulates a query constructed in the query language. Methods for using the system are also provided.
This is an application claiming benefit under 35 U.S.C. §119(e) of U.S. Provisional Patent Application Serial No. 60/657,341, entitled "COMPOSABLE QUERY BUILDING API AND QUERY LANGUAGE" and filed on February 28, 2005. The entirety of the aforementioned application, including all appendices thereto, is hereby incorporated by reference.
Computers are now commonly used to store, search for, and retrieve data as some of their primary tasks. Advances in various computing-related fields, such as dramatic increases in calculation speeds of processing units and data densities of storage devices, mean that more data can be stored, searched, and retrieved by computing systems than ever before. The vast quantity of data that can now be stored, searched, and retrieved creates challenges for systems that search through and organize that stored data.
Searches for data can be both complex to design and slow to execute. Complexity is usually derived at least in part from both the quantity of data to be searched and how that data is organized for storage. Complexity can also depend greatly on the specific means employed to perform a search for desired information within the great mass of data available. That specific means, such as a choice of a query language or the creation of a search query, can also have a great impact on the speed with which a search can be performed.
Performing a query typically requires a developer to construct a single large string, or other data structure, that contains an entire query composed in a predefined query language. The developer usually must then pass the entire query to an application programming interface ("API") that provides functions that will execute the query. Individual parts of the composed query usually cannot easily be reused or combined to create different queries. In addition, the developer is usually not aided in the construction of the query by the API, but rather must generally know all the capabilities of the query language in order to create a query.
Generally, a great deal of effort is expended constructing and reconstructing individual queries to locate various pieces of information. This approach is at odds with common principles of object-oriented software engineering that teach that computer code should be modular and reusable. Benefits of object-oriented design and programming practices have not generally been available in information search systems. Current systems fail to provide benefits of modular or reusable software designs for composing or constructing queries.
The following presents a simplified summary in order to provide a basic understanding of some aspects of the disclosed and described components and methods associated with those components. This summary is not an extensive overview. It is neither intended to identify key or critical elements nor delineate scope. Its sole purpose is to present some concepts in a simplified form as a prelude to the more detailed description that is presented later. Additionally, section headings used herein are provided merely for convenience and should not be taken as limiting in any way.
A system for creating modular queries on data is provided. The system includes an application programming interface that allows developers to access constructors and accessors for query objects. The application programming interface also aids in the construction of these query objects. Query objects can encapsulate at least portions of queries and can themselves be encapsulated in other query objects to create more complex queries that build from earlier encapsulated query portions. The query objects can be used directly or by applications to search for stored information.
A system for representing search queries is provided. Discrete portions of queries composed in a predefined query language are represented in a tree structure. The tree structure can be used as a portion of a more complex query structure by referencing another tree structure or being referenced itself Tree structures are encapsulated in query objects for use when performing queries.
Query objects can be used as composable building blocks of more complex queries by linking query objects together or encapsulating query objects within each other. Query objects can be constructed using an application space query language that can be mapped to a storage space query language. Such mapping can be accomplished using a schema space. Query objects constructed using an application space query language can be used to locate stored information that can be queried using a variety of storage space query languages by defining the schema space between the two query languages.
A query builder can assist in construction of query objects for use during searches for stored information. The query builder can be accessed through a user interface that allows a user to select portions of a query to integrate into a completed query. The completed query can be used to search for information in storage. The query builder can build a completed query itself or can use a query descriptor to find a matching query object that has been previously constructed and is available for use.
The disclosed and described components and methods comprise the features hereinafter fully described and particularly pointed out in the claims. The following description and the annexed drawings set forth in detail certain illustrative features. These features indicate a few of the various ways in which the disclosed and described components and methods can be employed. Specific implementations of the disclosed and described components and methods can include some, many, or all of such features and their equivalents. Variations of the specific implementations and examples presented herein will become apparent from the following detailed description when considered in conjunction with the drawings by one of ordinary skill in the art.
FIG. 1 is a system block diagram of a query construction system in accordance with one aspect of the disclosed invention.
FIG. 2 is a system block diagram of a tree structure that can represent a query.
FIG. 3 is a system block diagram of a bound search object.
FIG. 4 is a block diagram of a mapping between an application space and a storage space.
FIG. 5 is a system block diagram of a storage medium search system.
FIG. 6 is a system block diagram of a query construction system.
FIG. 7 is a system block diagram of a query construction system including remote access to preconstructed query objects.
FIG. 8 is a flow diagram of a general processing flow that can be used in conjunction with components disclosed or described herein.
FIG. 9 is a flow diagram of a general processing flow that can be used in conjunction with components disclosed or described herein.
FIG. 10 is a flow diagram of a general processing flow that can be used in conjunction with components disclosed or described herein.
FIG. 11 is a flow diagram of a general processing flow that can be used in conjunction with components disclosed or described herein.
FIG. 12 illustrates an exemplary networking environment.
FIG. 13 illustrates an exemplary operating environment.
As used in this application, the terms "component," "system," "module," and the like are intended to refer to a computer-related entity, such as hardware, software (for instance, in execution), and/or firmware. For example, a component can be a process running on a processor, a processor, an object, an executable, a program, and/or a computer. Also, both an application running on a server and the server can be components. One or more components can reside within a process and a component can be localized on one computer and/or distributed between two or more computers.
Artificial intelligence based systems (for example, explicitly and/or implicitly trained classifiers) can be employed in connection with performing inference and/or probabilistic determinations and/or statistical-based determinations as described hereinafter. As used herein, the term "inference" refers generally to the process of reasoning about or inferring states of the system, environment, and/or user from a set of observations as captured by events and/or data. Inference can be employed to identify a specific context or action, or can generate a probability distribution over states, for example. The inference can be probabilistic. - For example, an inference can include the computation of a probability distribution over states of interest based on a consideration of data and events. Inference can also refer to techniques employed for composing higher-level events from a set of events and/or data. Such inference results in the construction of new events or actions from a set of observed events and/or stored event data, whether or not the events are correlated in close temporal proximity, and whether the events and data come from one or several event and data sources. Various classification schemes and/or systems (for example, support vector machines, neural networks, expert systems, Bayesian belief networks, fuzzy logic, data fusion engines, or other similar systems) can be employed in connection with performing automatic and/or inferred actions.
Furthermore, the disclosed and described components can be implemented as a method, apparatus, or article of manufacture using standard programming and/or engineering techniques to produce software, firmware, hardware, or any combination thereof to control a computer. The term "article of manufacture" as used herein is intended to encompass a computer program accessible from any computer-readable device, carrier, or media. For example, computer readable media can include but are not limited to magnetic storage devices (such as hard disks, floppy disks, magnetic strips, or other types of media), optical disks (such as compact disks (CDs), digital versatile disks (DVDs), or other similar media types), smart cards, and flash memory devices (e.g., card, stick, key drive...). Additionally it should be appreciated that a carrier wave can be employed to carry computer-readable electronic data such as those used in transmitting and receiving electronic mail or in accessing a network such as the Internet or a local area network (LAN). Of course, those skilled in the art will recognize many modifications may be made to this configuration without departing from the scope or spirit of the disclosed and described components and methods.
Application developers can construct complex queries, often involving a number of different types of joins between various sets of data, using a sequence of simple individual API calls that compose queries in various ways. The API can aid in the construction of queries by exposing query capability to the programmer in ways that are easy to discover and use. Additionally, an API such as the one disclosed and described herein can provide a mechanism through which a programmer can create or build modular or reusable portions or queries that can be applied in other queries or in a similar query used in a different context.
A specific query language used to express queries can be specifically constructed to allow the incremental construction and composition of queries. Use of such a language can allow a developer to better utilize search functions when constructing queries. Such a query language can also facilitate creation of modular queries that can be reused in whole or in part. Query reuse and easy alteration of queries by substituting modules can also reduce the amount of time needed to create new queries.
FIG. 1 is a system block diagram of a query construction system 100. The query construction system 100 can be used to create an object that can encapsulate a query. A constructed object can also be used to perform a search for information stored on a computer system. As used herein, the term object can refer not only to a computing object in an object oriented computing environment but also to other appropriate data structures or constructs from other computing paradigms, such as data structures as found in the C or C++ programming languages or combinations of such structures along with executable code.
The query construction system 100 includes an application programming interface ("API") 110 that can be used to create a storage searcher object 120. The API can provide access to methods of the storage searcher object, such as constructors and accessors, among others. One of the benefits of using an API such as the API 110 is that commonly-used or necessary functions provided by the object can be made accessible to programmers through a clearly established system. Another benefit is that specific, lower-level implementation details of functions provided through the API 110 can be changed, for example, to correct defects, without breaking components that depend on that functionality. Further, the API 110 can be implemented such that the functions and components to which the API 110 provides access are natural-feeling parts of a query language as opposed to carriers for query strings composed in a query language that is not part of the programming language being used and that are passed to other components to perform searches.
The storage searcher object 120 encapsulates a query 130. Access to the query 130 is through the storage searcher object 120 that was created using the API 110. Such access can be accomplished using method calls or some other appropriate access method as indicated in a specific implementation. An arrangement such as this one can enhance integrity of the query in the sense that random or rogue users or processes cannot easily change the query, either by accident or otherwise. The query 130 can be composed in a predefined query language with its own syntax. The syntax of the predefined query language can be constructed so that query portions are modular and reusable. Additionally, the syntax can facilitate representation of queries, or portions of queries, in a tree structure. A tree structure such as this can be joined to or reference other tree structures to accumulate other portions of queries and build more complex queries.
FIG. 2 is a system block diagram of a tree structure 200 that can represent a query or portion of a query. The tree structure 200 includes a plurality of nodes 210. Each node 210 can include a term of a query. A term can include search terms and operators such as select, project, or join, among other things depending upon a specific implementation. Nodes, such as one of the nodes 210, can be linked together to express logical connections between query terms. The tree structure 200 can represent an entire query or merely a portion of a query. In either case, the tree structure 200 can be used as part of a more complex query by joining it with another tree structure. The tree structure 200 can be encapsulated in a search object for use during search functions.
The tree structure 200 can also be encapsulated in an object such as an expression object (not shown). The expression object can be encapsulated by a searcher object, such as the storage searcher object 120 disclosed and described in conjunction with FIG. 1. An expression object can be built as a query is constructed. Similarly, the expression object can be processed when the query is executed. In addition to or as an alternative to a query string, an expression object that represents a query can be passed to a searcher constructor to create a new searcher object that encapsulates the query represented by the expression object.
FIG. 3 is a system block diagram of a bound search object. The bound search object can be used to perform a search within a context to which it is bound.
In this example, and elsewhere as required or appropriate, a context can include a search domain, a physical storage area, or both, As shown in this specific example, a searcher object 310 has been created using an API, such as the API 110 of FIG. 1. The searcher object 310 includes a query 320. The query 320 can be a complete query that has been created as a single monolithic query or as a collection of partial queries assembled from modular pieces of partial queries.
The searcher object 310 can be bound to a context 330. The context 330 can be a set of information that can be represented in a predefined manner to facilitate searching through the set by searcher objects such as the searcher object 310 depicted. It should be noted that although only a single searcher object 310 and a single context 330 are depicted for ease of illustration and description, more than one searcher object can be bound to a single context. Similarly, a single searcher object can be used with more than one context. Such use can be though multiple bindings or by removing a preexisting binding to a context and adding a new binding to a new context.
A searcher object, such as the searcher 310, can be implemented as a class in an object-oriented programming language. Appropriate object-oriented programming languages that can be used include Java and SmallTalk. The class can appear as a collection that implements an enumeration method along with various other methods that can be used to construct other searcher objects as classes or instances of a class or classes. Constructor methods can accept one or more searcher objects as an input parameter or parameters and output a new searcher object that encapsulates any searcher object passed to it as an input parameter. In this manner, more complex queries can be constructed. Constructed searcher objects can represent filtered, sorted, or grouped collections, among other types. A query represented by a searcher object can be executed when an application begins enumerating over contents of a searcher object.
Alternatively, the searcher 310 can be implemented as a data structure, such as a data structure that can be created in a high-level programming language like C or C++, among others. In this type of implementation, attributes of the searcher object that would otherwise be represented by object oriented features, for example other encapsulated objects, can be implemented as fields of such a data structure or as otherwise appropriate to represent a specific object oriented feature. Appropriate functions can be defined to access, use, or otherwise manipulate member fields of the data structure. Failure to list examples from other computing paradigms, such as functional programming, among others, does not imply that corresponding implementations are not possible in those paradigms.
The context 330 can also be implemented as a class in an object-oriented programming language. A context class can provide a number of various properties, such as items, that can be used as starting point searchers. A pattern for a starting point searcher can also be a data class code generation pattern that includes one or more properties or one or more methods for creating new searchers, or both. For example, a context class can include an items property that represents all items in the context. An enumeration method can be used to display information about each item in the searcher object. Various manipulation methods, such as sorting and grouping methods, can be used to arrange included items in a desired fashion. Many other properties or methods can be implemented. For example, the context 330 can be implemented as another appropriate data structure as previously described in conjunction with other components. Various functions such as enumeration or iteration functions can be used in conjunction with such data structures.
As mentioned above, a searcher object, such as the searcher object 310, can encapsulate a query, such as the query 320. To construct the query 320, a searcher class can provide a number of methods for constructing queries. These methods generally can accept a searcher object as input, perform some data manipulation function, and output a new searcher object that encapsulates the input searcher object as a subquery. In this manner, increasingly complex queries can be composed.
Many possible methods can be created to perform functions that are analogous or similar to functions performed by various commands in a query language. A filter method can be provided that filters objects based upon property values of those objects. A type filter can filter an object based upon its type. A treat as type method can convert as searcher object from one that searches over a subtype to a searcher that searches over a supertype. A sort method can sort objects based upon one or more property values. A project method can project one or more individual properties of one or more objects. A group method can group objects according to one or more values. A union method can create a union of two sets of objects. Additionally, a query method can apply a complex query in a single step. Methods can be implemented such that invocation of a method can be used as a shortcut for calling the query method.
Encapsulated queries and subqueries can be used as a chain of queries to isolate each phase of execution of the query from each other phase. In so doing, each successive phase of execution of a query can only affect data produced by a preceding phase. However, this scheme can potentially result in commands executed in later phases that can undo or destroy at least parts of calculations or results from previous phases, such as ordering or grouping operations. To mitigate this concern, methods can be implemented in manners that guarantee that ordering will be preserved by the operation performed by that method. Additionally or alternatively, methods can be specified to be invoked in orders that will preserve ordering or grouping. Still further, certain types of methods, such as ordering or grouping methods, can be prevented from executing at certain phases or limited to executing only at phases where it is unlikely that work performed by those methods will be undone or destroyed by invocation of later methods.
To execute a query and obtain search results, a search object or search class can support a number of methods. For example, a get enumerator method can enumerate through all query results. A first result in a set of query results can be obtained by using a get first method. A get list method can copy query results into a list of query results. A get count method can obtain a count of a number of objects included in a query result. Indication whether execution of a query has produced any results can be obtained using a check for results method.
When constructed, a searcher object can be parameterized with a type of data over which the constructed searcher object can or will execute. Instances of that type can be returned by the searcher object when the searcher object executes. Additionally or alternatively, a record type can be returned. A record class can represent structural types for which there is no corresponding type. Queries over such types can be produced by a project method and a group method. Two searcher objects that return record types can be over the same type if and only if the record objects returned by each searcher object would have exactly the same number of columns with the same names and types.
In the examples presented herein, query expression strings that can be passed to a searcher object can accept two forms of parameters. The first form is a positional parameter. When using a positional parameter, a query string can refer to parameter values by position in an array of values that can be passed with the query string to a method. Positional parameters can be useful in scenarios when a query will be executed only once or where the value that is bound to the parameter does not change from one execution to another.
The second form is a named parameter. When using named parameters, the query string can refer to parameter values by using a name for the parameter. A dictionary of name to value mappings can be bound to the searcher object, thereby producing a new searcher object, before a query is executed. Named parameters can be useful in situations where the same query is executed multiple times with different parameter values. Using named parameters is slightly more complex than using positional parameters because of the additional binding operation.
Both positional parameters and named parameters can be used in the same query string and can only be used to provide literal values or subqueries. These parameters cannot be used to provide a property or method name by using a parameter. Subqueries can be passed as a parameter by using an expression object or a searcher object. In other implementations, different approaches or additional forms of parameters can be used.
A searcher object, such as the searcher object 310, can be implemented as a generic class. This specific implementation can make the searcher class difficult to use by applications that dynamically build queries based upon user input. To mitigate this difficulty, a factory class and a searcher interface can be implemented. Such a factory class and searcher interface can allow for the construction and manipulation of searcher objects without use of generic types or methods.
Use of these types without using generics can be useful for late bound applications that can build queries based upon user input. Constructor methods of factory types can be used to construct searcher objects. A type that can be specified in a parameter can correspond to a generic type in a class definition. The class definition can provide descriptions of a number of methods that can correspond to generic versions of the created type. Implementation of these methods can have the same semantics and restrictions as methods of the generic type.
As disclosed and described previously, various components can be implemented as a class or as an instance of a class. In one possible implementation, instances of classes can be immutable. Methods that manipulate a searcher object can return a new searcher object that encapsulates a new query that is based at least in part upon an original query. This implementation allows for protection of starting point queries in the sense that starting point queries cannot be modified. Additionally, this design choice lends itself to query optimizations through maintenance of a hash of query expressions that have been processed previously and reuse of those queries.
FIG. 4 is a block diagram of a mapping between an application space 410 and a storage space 420. The application space 410 can be a set of types that are used by a consumer of a file system API. Consumers can be classes that are automatically generated from descriptions that are encoded in a schema. Other types of objects can also be supported. Additionally, other data structures can be used in place of or in addition to objects or classes.
The storage space 420 can include a set of types that can be used by a back end provider of storage services. These back end services can be structured query language (SQL) types or user defined types (UDTs) that are generated for use by the store, among others. A schema space (not shown) can also be used. Such a schema space can support use of abstract types that are defined by a type designer. Additionally, a schema space can be used to assist with, or define, a mapping between the application space 410 and the storage space 420.
A mapping can be used to relate object-oriented concepts and constructs to SQL concepts. For example, a collection that can be enumerated can be mapped to a typed table or relation. An object can be mapped to a typed row or tuple. A property or method can be mapped to a column or attribute of a simple or user-defined type or for collections, a typed nested table. Other mappings are possible. It should be appreciated that specific details of mappings are largely dependent upon specific queries and implementations.
The application space 410 can include an application space query language 430. The application space query language 430 can be used by applications to construct or perform searches of stored information. The application space query language 430 can be a simple language that supports basic filtering commands or can be a full-featured query language with support for nesting and other complex concepts. Stored information can be in the form of objects 440 that are stored in a file system that can be accessed through a file system API 450. The application space query language 430 ultimately facilitates searches of the file system.
The design of the application space query language 430 and specifically its interaction and use by searcher objects can facilitate use of multiple query string syntaxes simultaneously. An application using a searcher object can identify which syntax is in use by examining the query string itself Additionally or alternatively, the application can access an assembly-level attribute to determine which syntax is being used. Other syntax matching approaches can also be employed.
In the examples presented herein, queries expressed by an application using a searcher object are always written in terms of the schema space of the application. Types, properties, and methods mentioned in the query string of the searcher object are those types, properties, and methods used by the application. This convention can be changed with modifications to the components and methods disclosed or described herein. However, use of this convention preserves the perspective of an application programmer working in the application space 410. Such preservation can make construction or use of queries by application programmers easier by presenting such application programmers with an environment with which the application programmers are already familiar.
A searcher object can be integrated with an object oriented or other programming language to support language integrated queries. To support language integrated queries, a searcher object can implement a queryable interface that has a single query method. The query method can take a parsed query expression and return an appropriate interface object. This query expression can be parsed and validated by a compiler at compile time.
For programming languages that do not or cannot support language integrated queries, or even for programming languages that do support language integrated queries, a query in a string can be used. The query in a string approach can work well when dynamically creating a query while an application is running. Because language integrated queries are commonly used as compile-time features, it can be difficult to dynamically build a query during execution or runtime. Strings can be concatenated to build dynamic queries during runtime.
The storage space 420 can include a structured query language 460. The structured query language can be a query language like SQL that can be used to perform queries against a database or a data server. A data server 470 can include data that can be queried for information to produce a result set 480. The result set 480 can include data that results from a set of manipulation commands in an SQL query issues against the data server 470.
FIG. 5 is a system block diagram of a storage medium search system 500. The storage medium search system 500 can be used to search for information in a file system. The file system can be located on a disk drive on a local computer or can be on some other medium such as flash memory or another suitable storage medium. Additionally or alternatively, the file system can be located on a remote computer, such as a networked server. Other storage configurations, such as RAID arrays or SANs can also be used with the file system.
The storage medium search system 500 includes a searcher object 510. The searcher object 510 can be implemented as any of the searcher objects previously described in conjunction with other figures. The searcher object 510 can be bound to a context 520. The context 520 can represent a set of information to be searched by the searcher object 510 and can be implemented as one of the contexts previously disclosed or described in conjunction with other figures.
The searcher object 510 can operate over a file system 530. The file system 530 can be any logical arrangement of electronic files that can also support objects and operations by or on objects. The file system 530 can reside on a disk storage system 540. The disk storage system 540 can be a single disk or can be a disk array such as a redundant array of independent disks (RAID), a storage area network (SAN), or another suitable storage medium, including an optical medium.
In operation, the storage medium search system can operate as follows. The searcher object 510 also accesses the context 520 to determine contextual limits for a search. The searcher object 510 accesses the file system 530 to locate files or objects within the context specified by the context 520. A series of methods is invoked by the searcher object 510 to perform a query encapsulated within the searcher object 510. To execute these methods, the searcher 510 reads information from the disk storage system 540. The searcher object 510 determines which information from the file system 530 is responsive to the executed query and outputs the results of its search.
FIG. 6 is a system block diagram of a query construction system 600. The query construction system 600 can provide an ability for an application programmer or other user to compose queries that can be integrated with other components on a computing system. Specifically, the query construction system 600 can allow for composition of queries from preexisting fragments or user-created fragments by defining search terms or operators.
The query construction system 600 includes a query builder 610. The query builder 610 can include a user interface (not shown) that provides access to the query builder 610 for a user. The user interface can be a graphical user interface, a text-based interface, a web-based interface, or any other suitable user interface. Specifically, the user interface of the query builder 610 can allow for a user to select items to include in a query being composed through a series of menus, navigation aids, or text entry boxes, among others. It should be recognized that specifics of the types of tools available for constructing queries through a user interface of the query builder 610 largely depend upon the type of user interface employed.
The query builder 610 also can include logic components for ensuring that queries are ultimately constructed in a logical and comprehensible fashion. As part of that logic, methods can be employed to rewrite queries that conform to semantic or syntactic requirements. Additionally or alternatively, these logic components can rewrite queries that are more efficient to execute than an initial query as entered by a user. In either case, the logic can also ensure that a rewritten query is correct.
The query builder 610 can access query fragments stored in a query fragment data store 620. The query fragment data store 620 can be implemented as a database, a collection of objects, or another suitable type of data store depending upon specific implementation details. Each fragment included in the query fragment data store 620 can be used as part of a more complex query. Additionally, at least some of the query fragments can be fully constructed queries in their own right and usable without further modification. When constructing a query, the user can access these query fragments through the user interface of the query builder 610.
The query builder 610 can also access an API 630. The API 630 can provide access to components or functions of an application space query language 640. By calling functions or accessing members through the API 630, a programmer can ensure that a query built conforms with any syntactic or semantic requirements of an underlying query language, such as the application space query language 640. By using the query builder 610, a programmer does not have to be concerned with details of the API 630. Instead, the query builder 610 can ensure that all queries are built in accordance with features of the API.
A query object 650 can be created by the query builder 610. This query object 650 can encapsulate a query in the manner previously described in conjunction with other figures. Additionally or alternatively, the query object 650 can be added to the query fragment data store 620 as a query fragment that is available for further use by the query builder 610 in constructing a query. As a stand-alone query, the query object 650 can be integrated with an application or simply used to perform a query to locate information stored in a storage space 660. Depending upon a specific implementation, the query object 650 can use a schema or a file system API (not shown) to access information stored in the storage space 660.
In operation, the query construction system 600 can function as follows. A user can access a user interface of the query builder 610 to construct a query. Upon selection of an appropriate interface tool, the query builder will obtain a query fragment from the query fragment data store 620 to include in a query under construction. The query builder 610 gathers all query fragments input by the user along with any query fragments selected from the query fragment data store 620 and uses the API 630 to assemble a the query object 650 in accordance with the application space query language 640. The query object 650 is then used to perform a query against information stored in the storage space 660.
FIG. 7 is a system block diagram of a query composition system 700. The query construction system 700 can allow an application programmer or other user to compose queries that can be integrated with other components on a computing system or that can be used as freestanding query components. Specifically, the query construction system 700 can allow for composition of queries from preexisting components that can be matched to a user-defined query and obtained from a remote computer.
The query composition system 700 includes a query builder 710. The query builder 710 can be implemented as described in conjunction with the query builder 610 of FIG. 6. Alternatively, a different query building system can be used as the query builder 710. Specifically, fewer than all the features described in conjunction with the query builder 610 of FIG. 6 can be included in the query builder 710 or additional feature can be added.
The query builder 710 can access an application space query language 70 when constructing a query. The application space query language 710 can be implemented as previously described in conjunction with other figures or can be another suitable query language. The query builder 710 can use a schema (not shown) when accessing the application space query language 720 or can incorporate rules of such a language in operation, among other approaches.
The query builder 710 can create a descriptor of a constructed query to use to obtain an appropriate search object that either precisely defines the query or is a close match that can be modified to define the constructed query. This descriptor can be any suitable descriptor such as an object descriptor, a hash, or some other appropriate descriptor. Types of appropriate descriptors will largely depend upon a specific implementation.
The query builder 710 can send the descriptor (not shown) over a network 730 to an object server 740. The object server 740 can send the descriptor to an object matcher 750. The object matcher 750 can access a data store of search objects 760 to obtain a search object that either exactly or approximately matches the query that is represented by the descriptor.
The object matcher 750 can use a variety of methods to match a descriptor with a search object of the search object data store 760. In addition to a number of conventional matching procedures, the object matcher can user components that include artificial intelligence to locate matching search objects. For example, matching of a descriptor with an appropriate search object can be carried out by a neural network, an expert system, a rules-based processing component, or a support vector machine (SVM).
A classifier is a function that maps an input attribute vector, X= (x 1, x 2, x 3, x 4, ...x n), to a confidence that the input belongs to a class, that is, f(X) = confidence(class). Such a classification can employ a probabilistic and/or statistical-based analysis (for example, factoring into the analysis utilities and costs) to prognose or infer an action that a user desires to be automatically performed. In the case of the object matcher 750, descriptors can be treated as patterns that can be classified to determine whether such patterns match a corresponding pattern of a search object. Other pattern-matching tasks can also be employed as will be evident to an artisan of ordinary skill upon reading this disclosure.
An SVM is an example of a classifier that can be employed. The SVM operates by finding a hypersurface in the space of possible inputs, which hypersurface attempts to split the triggering criteria from the non-triggering events. Intuitively, this makes the classification correct for testing data that is near, but not identical to training data. Other directed and undirected model classification approaches include, for example, naive Bayes, Bayesian networks, decision trees, and probabilistic classification models providing different patterns of independence can be employed. Classification as used herein also includes statistical regression that is utilized to develop models of priority.
As will be readily appreciated from the subject specification, components disclosed or described herein can employ classifiers that are explicitly trained (for example, by a generic training data) as well as implicitly trained (for example, by observing user behavior, receiving extrinsic information). For example, SVMs can be configured by a learning or training phase within a classifier constructor and feature selection module. Thus, the classifier(s) can be used to automatically perform a number of functions including but not limited to determining whether a descriptor matches a search object.
In operation, the query composition system can function as follows. The query builder 710 can create a query in accordance with an application space query language. Once such a query is constructed, the query builder 710 can create a descriptor of that query and send the descriptor over the network 730 to the object server 740.
Upon receiving the descriptor, the object server 740 passes the descriptor to the object matcher 750. The object matcher 750 uses the descriptor to identify a search object from the search object data store 760 that can be used directly or modified to perform the constructed query. The object server 740 sends the matching object over the network 730 to the query builder 710. The query builder 710 then makes any modifications to the object that are necessary for performance of a correct query and makes the object available for use.
FIG. 8 is a flow diagram of a process 800 that can be employed with components that have been disclosed or described herein. The process 800 can be used to build modular queries that can be reused in other processes or queries. Additionally, the query that is built can be used to access a file system to locate information that is responsive to the query.
Execution of the process 800 begins at START block 810 and continues to process block 820. At process block 820 a query (or portion thereof) is defined. At process block 830, a formal query (or portion thereof) is constructed in a predefined query language, such as an application space query language as described in conjunction with other figures. Processing continues to pass the constructed query to a storage searcher object at process block 840. A query tree is built from the constructed query at process block 850. At process block 860, the query is executed. Results of the executed query are obtained at process block 870. Processing concludes at END block 880.
FIG. 9 is a flow diagram that depicts a method 900 that can be used in conjunction with components that have been disclosed or described herein. The method 900 can be used to execute a query that has been constructed in an object-oriented design paradigm. Such query can be reused by other components.
Processing of the method 900 begins at START block 910. Processing continues to process block 920 where a search object enumerates items to be used in the search. At process block 930, a filter is applied to limit items in the search set to those that meet the filter criterion or criteria. At process block 940, a projection is performed to manipulate remaining data. Processing continues to process block 950 where a sort or group operation is performed to group data in a desired fashion. At process block 960 a query result set is created. Processing concludes at END block 970.
FIG. 10 is a flow diagram of a general processing method 1000 that can be used in conjunction with components that have been disclosed or described herein. Execution of the method 1000 begins at START block 1010 and continues to process block 1020. At process block 1020, a user access a query builder interface to construct a query. A storage area for a query being constructed to search is selected at process block 1030. Processing continues to process block 1040 where a context for the search is selected.
At process block 1050, components of the query being constructed are assembled in accordance with a predefined query language such as an application space query language, among others. Processing continues to process block 1060 where a search object is constructed from the assembled query components. Processing concludes at END block 1070.
FIG. 11 is a flow diagram of a general processing method 1100 that can be used in conjunction with components that have been disclosed or described herein. Execution of the method 1100 begins at START block 1110 and continues to process block 1120 where a user accesses a query builder interface. At process block 1130, search parameters are selected by the user or the query builder, or both.
Processing continues to process block 1140 where an appropriate descriptor of the search parameters is created. At process block 1150, the descriptor is sent to a search object server. The descriptor is matched to one or more available search objects at process block 1160. One or more matched search objects are sent to the query builder at process block 1170. Processing terminates at END block 1180.
In order to provide additional context for implementing various aspects of the subject invention, FIGS. 12 - 13 and the following discussion is intended to provide a brief, general description of a suitable computing environment within which various aspects of the subject invention may be implemented. While the invention has been described above in the general context of computer-executable instructions of a computer program that runs on a local computer and/or remote computer, those skilled in the art will recognize that the invention also may be implemented in combination with other program modules. Generally, program modules include routines, programs, components, data structures, etc., that perform particular tasks and/or implement particular abstract data types.
FIG. 12 is a schematic block diagram of a sample-computing environment 1200 with which the subject invention can interact. The system 1200 includes one or more client(s) 1210. The client(s) 1210 can be hardware and/or software (e.g., threads, processes, computing devices). The system 1200 also includes one or more server(s) 1220. The server(s) 1220 can be hardware and/or software (e.g., threads, processes, computing devices). The servers 1220 can house threads or processes to perform transformations by employing the subject invention, for example.
One possible means of communication between a client 1210 and a server 1220 can be in the form of a data packet adapted to be transmitted between two or more computer processes. The system 1200 includes a communication framework 1240 that can be employed to facilitate communications between the client(s) 1210 and the server(s) 1220. The client(s) 1210 are operably connected to one or more client data store(s) 1250 that can be employed to store information local to the client(s) 1210. Similarly, the server(s) 1220 are operably connected to one or more server data store(s) 1230 that can be employed to store information local to the servers 1240.
With reference to FIG. 13, an exemplary environment 1300 for implementing various aspects of the invention includes a computer 1312. The computer 1312 includes a processing unit 1314, a system memory 1316, and a system bus 1318. The system bus 1318 couples system components including, but not limited to, the system memory 1316 to the processing unit 1314. The processing unit 1314 can be any of various available processors. Dual microprocessors and other multiprocessor architectures also can be employed as the processing unit 1314.
The system bus 1318 can be any of several types of bus structure(s) including the memory bus or memory controller, a peripheral bus or external bus, and/or a local bus using any variety of available bus architectures including, but not limited to, Industrial Standard Architecture (ISA), Micro-Channel Architecture (MSA), Extended ISA (EISA), Intelligent Drive Electronics (IDE), VESA Local Bus (VLB), Peripheral Component Interconnect (PCI), Card Bus, Universal Serial Bus (USB), Advanced Graphics Port (AGP), Personal Computer Memory Card International Association bus (PCMCIA), Firewire (IEEE 1394), and Small Computer Systems Interface (SCSI).
Computer 1312 also includes removable/non-removable, volatile/non-volatile computer storage media. For example, FIG. 13 illustrates a disk storage 1324. The disk storage 1324 includes, but is not limited to, devices like a magnetic disk drive, floppy disk drive, tape drive, Jaz drive, Zip drive, LS-100 drive, flash memory card, or memory stick. In addition, disk storage 1324 can include storage media separately or in combination with other storage media including, but not limited to, an optical disk drive such as a compact disk ROM device (CD-ROM), CD recordable drive (CD-R Drive), CD rewritable drive (CD-RW Drive) or a digital versatile disk ROM drive (DVD-ROM). To facilitate connection of the disk storage devices 1324 to the system bus 1318, a removable or non-removable interface is typically used such as interface 1326.
It is to be appreciated that FIG. 13 describes software that acts as an intermediary between users and the basic computer resources described in the suitable operating environment 1300. Such software includes an operating system 1328. The operating system 1328, which can be stored on the disk storage 1324, acts to control and allocate resources of the computer system 1312. System applications 1330 take advantage of the management of resources by operating system 1328 through program modules 1332 and program data 1334 stored either in system memory 1316 or on disk storage 1324. It is to be appreciated that the subject invention can be implemented with various operating systems or combinations of operating systems.
A user enters commands or information into the computer 1312 through input device(s) 1336. The input devices 1336 include, but are not limited to, a pointing device such as a mouse, trackball, stylus, touch pad, keyboard, microphone, joystick, game pad, satellite dish, scanner, TV tuner card, digital camera, digital video camera, web camera, and the like. These and other input devices connect to the processing unit 1314 through the system bus 1318 via interface port(s) 1338.
Interface port(s) 1338 include, for example, a serial port, a parallel port, a game port, and a universal serial bus (USB). Output device(s) 1340 use some of the same type of ports as input device(s) 1336. Thus, for example, a USB port may be used to provide input to computer 1312, and to output information from computer 1312 to an output device 1340. Output adapter 1342 is provided to illustrate that there are some output devices 1340 like monitors, speakers, and printers, among other output devices 1340, which require special adapters. The output adapters 1342 include, by way of illustration and not limitation, video and sound cards that provide a means of connection between the output device 1340 and the system bus 1318. It should be noted that other devices and/or systems of devices provide both input and output capabilities such as remote computer(s) 1344.
Computer 1312 can operate in a networked environment using logical connections to one or more remote computers, such as remote computer(s) 1344. The remote computer(s) 1344 can be a personal computer, a server, a router, a network PC, a workstation, a microprocessor based appliance, a peer device or other common network node and the like, and typically includes many or all of the elements described relative to computer 1312. For purposes of brevity, only a memory storage device 1346 is illustrated with remote computer(s) 1344. Remote computer(s) 1344 is logically connected to computer 1312 through a network interface 1348 and then physically connected via communication connection 1350. Network interface 1348 encompasses wire and/or wireless communication networks such as local-area networks (LAN) and wide-area networks (WAN). LAN technologies include Fiber Distributed Data Interface (FDDI), Copper Distributed Data Interface (CDDI), Ethernet, Token Ring and the like. WAN technologies include, but are not limited to, point-to-point links, circuit switching networks like Integrated Services Digital Networks (ISDN) and variations thereon, packet switching networks, and Digital Subscriber Lines (DSL).
What has been described above includes illustrative examples of certain components and methods. It is, of course, not possible to describe every conceivable combination of components or methodologies, but one of ordinary skill in the art will recognize that many further combinations and permutations are possible. Accordingly, all such alterations, modifications, and variations are intended to fall within the spirit and scope of the appended claims.
In particular and in regard to the various functions performed by the above described components, devices, circuits, systems and the like, the terms (including a reference to a "means") used to describe such components are intended to correspond, unless otherwise indicated, to any component which performs the specified function of the described component (for example, a functional equivalent), even though not structurally equivalent to the disclosed structure, which performs the function in the herein illustrated examples. In this regard, it will also be recognized that the disclosed and described components and methods can include a system as well as a computer-readable medium having computer-executable instructions for performing the acts and/or events of the various disclosed and described methods.  In addition, while a particular feature may have been disclosed with respect to only one of several implementations, such feature can be combined with one or more other features of the other implementations as desired and advantageous for any given or particular application. Furthermore, to the extent that the terms "includes," and "including" and variants thereof are used in either the detailed description or the claims, these terms are intended to be inclusive in a manner similar to the term "comprising."
a constructor that creates a first search object that encapsulates a query constructed in the query language.
The system of claim 1, the encapsulated query is represented as a tree structure.
The system of claim 2, the tree structure of the encapsulated query references a second tree structure different from the tree structure of the encapsulated query.
a second search object that encapsulates the first search object.
The system of claim 4, further comprising an interface to a file system that can be searched by the second search object.
The system of claim 5, the file system resides on a disk drive.
The system of claim 5, the file system resides on a redundant array of independent disks.
A computer-readable medium comprising machine-interpretable data structures that include the components of claim 4.
constructing a first search object that encapsulates the defined part of the query.
representing the defined query as a first tree structure.
using the first tree structure to reference a second tree structure different than the first tree structure.
creating a second search object that encapsulates the first search object.
The method of claim 12, further comprising using the second search object to locate information in a file system.
The method of claim 13, wherein using the second search object includes accessing a file system interface.
means for constructing a first search object that encapsulates the defined part of the query.
means for representing the defined query as a first tree structure.
means for using the first tree structure to reference a second tree structure different than the first tree structure.
means for creating a second search object that encapsulates the first search object.
The system of claim 18, further comprising means for using the second search object to locate information in a file system.
The system of claim 19, the means for using the second search object includes means for accessing a file system interface.


If you advertise or sell jewelry, the Jewelry Guides offer specific information on how to describe your products truthfully and how to disclose important information to potential buyers.
If you advertise or sell jewelry, the claims you make about the products must be accurate. The Federal Trade Commission's (FTC's) Jewelry Guides offer specific information on how to describe jewelry products truthfully and non-deceptively and how to disclose material information to consumers. This brochure highlights the sections of the Jewelry Guides that concern diamonds, gemstones and pearls. You may need to scrutinize your product descriptions to make sure they are not misleading and that they disclose material information to consumers.
If the diamond's weight is described in decimal parts of a carat, the figure should be accurate to the last decimal place. For example, ".30 carat" could represent a diamond that weighs between .295 and .304 carat. If the weight is given to only one decimal place, it should be accurate to the second decimal place: If you say a diamond weighs .5 carat, the diamond should weigh between .495 and .504 carat.
If the diamond's weight is described in fractions, the fraction may represent a range of weights. For example, a diamond described as « carat could weigh between .47 and .54 carat. If you use the fraction method, you also should disclose that the diamond weight is not exact and the reasonable range of weight for each fraction or the weight tolerance used.
If you use fractions to represent the weight of a diamond in catalogs or other printed materials, you should disclose - clearly and conspicuously on every page that includes a representation - that the diamond weight is not exact. You can give the range of weights for each fraction or the tolerances used on a separate page of the catalog or materials. But in that case, you should state where the consumer can find the information on every page that includes a fractional representation. For example, your catalog may say "Diamond weights are not exact. See the chart on page x for weight ranges."
Thermal testers used to distinguish diamonds from cubic zirconia may not accurately identify moissanite - a laboratory-created gemstone that resembles a diamond. As a result, this stone may falsely register as a diamond on your thermal detector. How can you ensure that you recognize moissanite for what it is? A newer tester can do it for you, or you may have to learn other ways to distinguish moissanite from diamonds.
Heating, which can lighten, darken or change the color of some gems, or improve a gemstone's clarity.
Irradiation, which can add more color to colored diamonds, some other gemstones and pearls.
Impregnating some gems with colorless oils, wax or resins, which makes a variety of imperfections less visible and can improve a gemstones' clarity and appearance.
Fracture filling, which involves injecting colorless plastic or glass in the gems to hide cracks or fractures and improve the gemstones' appearance and durability.
Diffusion treatment, which adds color to the surface of colorless gems while the center of the stone remains colorless.
Dyeing, which adds color and improves color uniformity in some gemstones and pearls.
Bleaching, which lightens and whitens some gems, including jade and pearls.
Laser-drilling, which removes dark inclusions from diamonds, improving the clarity of the stone.
The Jewelry Guides state that sellers should tell consumers about gemstone treatments in certain circumstances. If the treatment is not permanent or if the treated stone requires special care, you should tell consumers that the stone has been treated and give them appropriate instructions to care for the gemstone. Even if a gemstone treatment is permanent and doesn't create special care requirements, the Guides require you to tell consumers about the treatment if it significantly affects the value of the gemstone.
How do you know whether a treatment has a "significant effect" on a stone's value? Consider whether the treatment makes the product less valuable than if it contained an untreated stone. Think about value from the consumer's perspective and ask yourself how your customer would react if he learns about the treatment after leaving the store, say, when taking the stone to an appraiser or selling the piece.
If the color of a treated gemstone will fade over time, tell the consumer that the gemstone has been treated, that the treatment is temporary, and that the stone's color will fade over time.
If ultrasonic cleaners or solvents should not be used to care for a treated stone, tell the consumer that the gemstone has been treated and the cleaners or solvents to avoid.
If a diamond has been laser-drilled to improve its clarity - but is then less valuable than a comparable diamond that has not been treated - tell the consumer the diamond was laser-drilled.
You should disclose information about treatments at the point of sale and in any print advertisement, mail order catalog, televised shopping program and online advertisement where a consumer can buy the treated gemstone without viewing the actual item in person.
You are required to tell consumers if the pearls you're selling are cultured or imitation. Your ads should not use the word pearl - by itself - unless the advertised product consists only of natural pearls. If the product contains cultured pearls, the word "cultured" or "cultivated" - or a synonym - should immediately precede the word pearl.
A statement that discloses only the type of cultured pearl you're selling - for example, freshwater, South Sea or Akoya pearls - does not comply with the requirement. Instead, say that the pearls are cultured: cultured freshwater pearls, South Sea cultured pearls or Akoya cultured pearls. If the product contains imitation pearls, use the word "artificial," "imitation," "simulated," or a synonym immediately preceding the word pearl.
Some black, bronze, gold, purple, blue and orange pearls, whether natural or cultured, occur that way naturally; others are dyed through various processes. You are required to tell consumers whether colored pearls are naturally colored, dyed or irradiated.
To learn more about making accurate representations of diamonds, gemstones, pearls, and other jewelry products, including gold, silver and platinum, ask for a free copy of the FTC's Guides for the Jewelry, Precious Metals and Pewter Industries. Call the FTC, toll-free, at 1-877-FTC-HELP (382-4357); TDD: 1-866-653-4261 or read it online at www.ftc.gov/bcp/guides/jewel-gd.shtm.
If you have a dispute with a customer about a jewelry representation, contact the FTC for guidance. You also may contact the Jewelers Vigilance Committee's (JVC) Alternative Dispute Resolution Service. The JVC is an independent, non-profit organization formed to advance ethical practices in the jewelry industry. Contact the JVC by mail: 25 West 45th Street, Suite 400, New York, NY 10036-4902, or by phone: 212-997-2002.


text:
New CEOs at Workday, Snagajob; Indeed's Sneaky New Terms of Service
A new year always brings new promise. For three companies in the employment space, it also means a new CEO. For Indeed, it means a new Terms of Service wrought with unpleasant surprises for those not paying attention. It also means new and interesting ways to quit your job, as Walmart recently found out. With Chad still getting his holiday hangover under control, Cheese is joined by industry veteran Sarah White, CEO at Aspect43, to help make sense of everything going on in the world of recruitment for the first week of 2023.
Disability Solutions works with employers each step of the way as consultative recruiting and engagement strategists for the disability community.
Joel (2s):
It may not seem like it, but Chad and I work pretty hard to bring you this show on a regular basis, and it's been an unwritten rule since we started the show that we take a few weeks during the holidays to step away from the show, as well as step away from each other so we can come back fresh and be the functioning derelicts, you know and love. Well, Chad spent the holiday polluting much of Europe with his Americanness and needs a few more days to recover. So no Chad means no editing of this show. It's gonna be like your favorite Pearl Jam bootleg tape from 1993, solid content, pretty shitty production value, and anything can happen.
Joel (45s):
Anyway, Chad will be back next week and things should be back to normal. Till then, I've invited a more than capable guest co-host to keep the seat warm for Chad until he gets back. Enjoy and here's to a kick-ass new year.
Chad and Cheese - Intro (1m 2s):
Hide your kids. Lock the doors. You're listening to HR's most dangerous podcast. Chad Sowash and Joel Cheesman are here to punch the recruiting industry right where it hurts complete with breaking news slash opinion and loads of snark. Buckle up, boys and girls, it's time for the Chad and Cheese Podcast.
Joel (1m 23s):
Oh, yeah, my New Year's resolution, less Chad, and I'm off to a great start. Hi, boys and girls, you're listening to the Chad and Cheese Podcast. This is your co-host Joel "Running for House Speaker" Cheesman.
Sarah White (1m 38s):
And this is Sarah "You're Never Gonna Make It" White.
On this week's show, cloudy with a chance of doom and gloom, Indeed's sneaky new terms of service, and a Walmart resignation gone loco. Let's do this. Guys, if you listen to our show, you know, Sovren has been a supporter for a very long time, but you may not know Textkernel who recently acquired Sovren. If you know Sovren, guys, you need to get to know TextKernel. That's Kernel as in corn, which Sarah and I both know a lot about. No one does resume parsing, matching, semantic search, talent sourcing, and more quite like Textkernel.
They also have some of the best industry intelligence around all available for free on their blog at text kernel.com. Everyone in the US, you know Sovern, they've been a sponsor of our show for a long time, but it's time to get to know our friends at Textkernel if you haven't already. Do yourself a favor, head on down to www.textkernel, that's T-E-X-T-K-E-R-N-E-L.com and tell them Chad and Cheese sent you. Sarah, welcome to the Chad and Cheese Podcast.
Joel (3m 1s):
A lot of our listeners will know who you are, but for those that don't, you are CEO and founder of Blink 182, I mean, Level 42, I mean Area 51. No, no, no. Aspect 43. Happy New Year and welcome to the show.
Happy New Year. We're not allowed to talk about the Area 51 stuff.
We're not? Yeah.
Sarah's in Idaho. I don't know what the fuck is going on in Idaho, dude. Like that whole, that whole desert, big sky. Yeah, that whole location. I hear Boise is nice though. I hear Boise is nice.
Boise. Boise's about 10 hours away. So I don't know--
From you?
You're in the same-- What do you--? God, that's Texas.
I'm way, way up north.
That's Texas land, man.
I am, oh, gosh, like an hour and a half south of Canada and a couple hours out of Glacier National Park and about three hours out of Seattle.
Is it officially a panhandle?
In Idaho that stick that goes northward, is that?
Sarah White (4m 1s):
Yeah. It is officially called a panhandle.
A panhandle. And you live in the panhandle?
I do. We just call it Northern Idaho.
Or Nordiho, Nordaho, Nodaho? I don't know. So Sarah and I have known each other, I thought it was 15 years. She corrected me. It's 17, apparently to the day when I signed her yearbook, "Stay cool dude. See you next year."
Yeah, middle school. Have a great summer.
Yeah, have a great summer, dude. See you at the pool. See you at the pool.
I actually had my very first glass of wine the day we met.
Oh, I thought you were gonna say you're drinking this morning. Like the holidays are rolling for Sarah White. So, Sarah, a lot of my listeners know you or know of you. You're quite an icon in the industry, but for those that don't know, give us a little Twitter buyer about you and a little bit about the company.
Yeah, so we actually research work and so I've been in the industry, literally, I fell into it on accident. But we look at market trends, what's going on, try to talk to especially recruiting talent acquisition employees. And then we work with the tech vendors to actually make better products because a lot of them kind of suck. So that's where we spend a lot of our time. And if we could change work for the better, why not?
And that is why invited you to the show. Everyone sucks. You have two beautiful children. I gotta mention that.
I do. I do.
You're too humble. You're too humble to admit it. So you're a Californian to Wisconsin via now Idaho. So you've got a nice mix of, I don't know, cheese and cow or something. I don't know.
Cheese, yeah, I mean, California's a cheese place also.
Cheesman. All right, well on the show we do some shoutouts. I'm gonna do one to get you acquainted to how this works. And then you apparently have a shoutout and then we'll get into some other housekeeping. So my first shout out of the year goes to the fans. Our fans, love them, love them. Anyway, every year we sent out a holiday card to our fans that have registered. And this year, if you haven't gotten it or didn't get it, it's Chad and I illustrated. Chad's on a great white shark. I'm on an eagle. We're riding a wave. We got some Christmas trees and candy canes and everything.
Oh, my gosh.
Our fans had some really fun ways of showing that they had put their holiday cards up for Christmas. And one fan in particular that got my attention had a wife that wasn't real happy about our card being among all the family cards and friend cards that they had. So this is my friend Brett Farmiloe, who I've talked about in the show.
I thought you're gonna say Brett Favre.
You know Brett the Farm--
I thought you were gonna say Brett Favre, yeah.
Brett the Farm-- Yeah. My friend Brett Favre, he's a big fan. Anyway, yeah, Brett Farmiloe, my friend at Terkel, Founder and CEO at Terkel, he said, quote, "FYI, my Chad and Cheese holiday card is so front and center at my house that my wife is annoyed with it and comments about it once a week." Quote, "Who is Chad? Who is cheese? Can we take this down?" End quote. That's right. This episode of couple's therapy is brought to you today by the Chad and Cheese Podcast. My shoutout is to everyone who shared our holiday card. You can also send those bills from your shrink and marriage counselor to Chad and not me.
Shoutout to the fans.
Where is the card being placed that's causing--? I mean, is it in the bedroom? Is it on the nightstand?
Come one. You probably have a little card thing where either around the fireplace or in the kitchen, you know. You like, you stick them and you sort of present them and virtue signal how many friends you have that are sending you cards. They're putting it with those cards. So amongst the scenes of sweatered families with woodland backgrounds is an animated Chad and Cheese riding a great white shark and an eagle.
So mixed in with the people from high school you never talked to?
It makes sense a few wives might get--
Yeah, a few wives might get a little bit distraught over such an image.
I guess. Okay, we'll go with that.
Your shoutout now.
Okay. My shoutout is to all of the people ops and recruiting pros that have been laid off in the last 24 hours and are handling it with so much freaking grace on LinkedIn. And they're like, "Oh, I really appreciated the opportunity. It was so great to be here. I just got laid off via an email that I woke up to this morning," and we have, you know, three big companies have done layoffs between yesterday and today. And the grace of which these people are handling this after working their asses off for the whole pandemic through great resignation, everything else, is really amazing. So huge shout out to, not just the ones handling it well, but just everyone doing this.
So I gotta ask, we talk a lot about Amazon on the show and Amazon just announced 18,000 today I believe, which is more than they had originally expected. Amazon more than most are doing an aggressive job of replacing recruiters. Any thoughts on the automation, the replacement of recruiters? Is that actually gonna be a thing our company's gonna follow Amazon's lead? Is this a failed experiment? What are your thoughts on that?
I mean, Amazon's clearly had a number of failed experiments related to their tech and primarily because they try to build stuff in-house and have AI bias issues and blah, blah, blah. With that said, we're absolutely gonna see a lot of recruiting jobs go away because of tech. No differently, I mean there's probably one or two other people watching this that are old enough to remember when ATSs were coming in. We brought our ATS in--
We have a lot of old people listening to our show.
Yeah, I'm with my people. You know, when we were bringing in ATS systems 2001, 2002, we were easily replacing 10 to 15 headcounts on our teams by bringing in one system. I had a person whose only job at one of my early TA roles, their only job was to print the resumes, staple, collate, count, and deliver them to me in a mail bin every single morning and after lunch. That was it. Like that was their whole job. And so, you know, there's going to be roles that are going to evolve and change and new ones are gonna pop up.
Sarah White (10m 35s):
So it's not all, you know, all doom and gloom, but things are gonna change, and it's not just in talent acquisition. I think we're gonna see it kind of across the board.
Joel (10m 43s):
Yeah. That person is now a greeter at your local Walmart. So they found somewhere else to go with their high-level skills. Speaking of high-tech, this brings me to my final shoutout. So this goes out to Bing and ChatGPT. Microsoft, in case you hadn't heard, gave ChatGPT in the open AI initiative $1 billion. In return for the check, they agreed that Microsoft could use the tech. So no surprise this week that news came out that Bing will be leveraging ChatGPT's technology to help compete with big G, Google.
Meanwhile, Google is apparently freaking out about ChatGPT.
They should.
They're on DEFCON One. Hey, I say competition is good for business. Sarah, GPT Chat, horrible brand. I probably said it wrong. I always do. What are your thoughts? Not so much on the brand, but the technology and how it could impact humanity and/or recruiting.
Oh, well, I don't know how much on humanity quite yet, but, yeah, it's going to be a biggie. I think on two fronts. I think it's gonna change the type of people we hire because it's gonna change jobs in general. It's gonna reduce the number of people, just like any other technology is. And I know we've been talking about AI, I feel like all 17 years we've known each other. It feels like we've been talking about the same thing and then all of a sudden it's happening and it's here and it's actually working. And so I think I took a lot of time playing around with ChatGPT over the holidays, and by a lot of time, I mean five hours because I got more done in five hours using that than we've had contractors get done in 70.
So I mean it's changing how our company and roles that we were gonna be hiring for, we don't have to anymore.
Really? Chris Russell, a friend of ours that we've known for a long time as well, apparently there's someone coding job boards with no developers whatsoever through some of the technologies that are out there. I assume that we'll be seeing rewrite your job descriptions with AI, rewrite resumes with AI. I mean there'll be a whole new cavalcade of startups that we'll be able to see and enjoy.
Sarah White (13m 8s):
Which means we're gonna see a whole bunch of LinkedIn influencers really pissed off in talking about how bad it sucks and you need that human touch.
Which also means I have job security as a podcaster because I have stuff to talk about. Speaking of job security and having something to do, Sarah, if you haven't signed up for free shit from Chad and Cheese, you gotta do yourself a favor. We're talking free t-shirts from our friends at JobGet. We're talking about free beer from our friends at Aspen Tech Labs, Whiskey from TextKernel. If it's your birthday, there's a chance to win rum from our friends at Plum. Just all kinds of goodness. You gotta go to Chad Cheese. We're on brand here, baby. We're on brand next year we're having a liver donation sponsor to the show.
But you gotta go chadcheese.com, click the free link, sign up, in order to get all that stuff. And while you're out there, leave us a review on your favorite podcasting platform of choice whether it's good or bad, it is our oxygen and we love to hear from you. And we also love everyone who is celebrating a birthday this month. I mentioned Rum with Plum. One of these lucky people, maybe not this week, but someone in January is gonna win a nice bottle of rum. But this week, celebrating a birthday from our fan club, we've got Muir, Muir McDonald, that's gotta be like an Irish name or something, M-U-I-R.
How would you pronounce that?
Sounds Wisconsin.
Muir? Muir?
M-U-I-R?
M-U-I-R. How would you pronounce it?
Muir like John Muir.
Muir. Muir. Okay.
Like the famous photographer of Yosemite.
You know better than I do. Hit us up, Muir, for how you pronounce that name. Mark Fogal, Zachary Larson, Steve Jewel, Rob Barn, Mark Katz, Peter Brooks, Mark Becker, Matt Luca, Shell Ford, Athena Carp, Peter Zalman, and Fish Dogs himself, Craig Fisher, all celebrate another trip around the sun this year.
Man, what holidays in, what is that, in March? Oh, St. Patty's Day, those are all St. Patty's Day babies.
Boom. There you go. That escalated quickly. Yes, St. Patrick's Day Babies. Congratulations to you. Sarah, we got to travel this year again, which is nice.
We did, yeah. A couple of times.
A couple times. So Chad is coming. Chad, the prince of Portugal is coming back to the States. Everyone, alert the authorities. He's gonna be back in States. I think he is actually right now as we speak. He's recovering from his hangover. But anyway, we'll be traveling again this year. Our travel is sponsored by our friends at Shaker Recruitment Marketing and we couldn't be happier. Also, I want to point out that we are now in four different languages aside from English. If your main language is not English, maybe it's French, German, Spanish, or Portuguese, you can listen to the Chad and Cheese Podcast in your native language through the power of technology.
I'm sure.
Joel (16m 7s):
And that is powered by our friends at Veritone. We wanna say a special--
That's awesome.
--to them. Also, do you play Fantasy Football, Sarah?
I did not this year, but normally I do.
I know you're a football fan.
Normally, you do? Okay, well, you didn't sign up to be on our Fantasy Football league. Hopefully, you'll explore that.
I didn't want to embarrass anybody.
Hopefully, you'll explore that next year.
Next year.
Yeah. Aaron Rogers will be off the board quickly if Sarah gets into the league as a Packers fan. But anyway, the tragedy from this week aside and the Damar Hamlin news is being beat to death, so prayers for him obviously, but not to spend too much time on that. It did make a mess of Fantasy. But Yahoo, our league that we used has sort of called it, and Dennis Tupper is our Fantasy winner from this year. But I want to read out the rest of the leaderboard, Sarah, mainly because I came in second place and I wanna like--
Well, then we have to talk about it.
So, again, Dennis, the Gridiron Menace, Tupper is number one. Number two, Joel, Blue, Cheesman. Get it? I'm blue because I lost. But blue cheese is also a thing. So I sort of like wrapped it into a buy one get one on that one.
I get it. I get cheese references.
Yeah. Number three we got Smoke and Joe Wilke followed by Serge, the raging Acadian, Boudreaux. If you know, you know. Chris, middle of the pack, Manion, Chad, prince of Portugal, Sowash right there at number six. Factory Fix his own, Iron Mike Schaffer, Factory Fix is our sponsor for Fantasy Football, by the way. Christie killing it in the name of James Goony GooGoo Gilliam. Matt Fool on the hill. Jason, No Repeat, Putnam. He was last year's champion. He ended in 11th place out of 12 and number 12 the Caboose Dan, no-show, Shoemaker, who came up really short this year on Fantasy Football.
So that is Dennis Tupper again is the winner. But let's get into some real news, shall we, Sarah?
I think that was good news.
That was good news but it's not really the news people tune in for.
We gotta get 20 minutes of bullshit before we actually talk about industry stuff. So, Sarah, you've been around the block a few times as we've already mentioned. What were your takeaways from 2022? It was kind of a nutty year. What did it look like from your perspective out there in panhandle Idaho?
Oh, man. Well, oh, I guess I was here a full year. I've only been here a little bit, but I'll tell you what I think the word of the year for 2022 is delusional. Like everybody wanted to believe what they wanted to believe without looking at the facts of actually what was happening. I think that was my biggest takeaway. We were continuing to talk about like, "Oh, these jobs are growing so quickly. Oh, no, there's not actually going to be layoffs. Oh, everything is fine." We wanted to have such blinders on and kind of ignore stuff in part because of what was coming out from media and government and all of this type of stuff. But it was tracking things that were happening in an unprecedented way.
And so we were making assumptions based off of kind of the wrong data. And so I think that was my biggest takeaway is that some of the standard ways that we were judging and looking and making decisions around growth and layoffs and investments and everything else probably needs to be reevaluated for a much more modern society and how things are going to work in the 2020s versus in the 1900s.
So I'm assuming that you have investments in some sort of stocks somewhere. So it was a real shitty year for Wall Street.
But labor for the most part has remained strong. So delusional.
But has it--
There were layoffs in Silicon Valley, pretty high-profile ones, but the labor market, at least in 2022, seemed to hold. Is that just a lagging indicator? Like we'll get to 2023 and I don't want to skip ahead, but like if labor is a lagging indicator, I assume that you think it's gonna catch up to the stock market and we're gonna see sort of labor catch up with the, I don't know, the cliff dive that we saw on Wall Street. But you will agree that people had a hard time firing people in 2022 even though they probably knew the writingis on the wall.
Oh, a hundred percent. Yeah, yeah. I think they were trying to get through and just be like, "No, no, no, we can do okay this year." You know, some of it, I don't know how much was tied back to like PPP rules or other, you know, there were multiple different types of funding coming in for keeping and you had to retain employees past a certain date. But it sure seems that as all of those rules fell off, we started seeing the layoffs and everything, start to kind of moving a little bit more aggressively. I do think that there's some lagging indicator here though because if somebody is underemployed, so let's say they, you know, get their hours cut back or get something else, if they even take a job so they go to work at Walmart as a greeter, for instance, right?
They're removed from all of the lists that something's wrong with their labor and so it still looks like they're fully employed. But when you start looking into more detail around like number of hours people are working, how much they're earning, all of these other factors, those are kind of red flags that we look at to look at kind of what the 12- to 18-month numbers are gonna be.
Yep. Are we undervaluing the effect of the gig economy on the world? You mentioned greeter but I'm sure a lot of those people are driving Ubers and delivering food on DoorDash and Bing.
Yeah. And I think a lot of the people that are doing that are doing that as a supplement to other things or as a stopgap. But the second they start doing that, they also come off of all of those numbers. So if they are just not taking unemployment and they are making slightly more driving an Uber, DoorDash or anything, they show as they're fully employed, even though they don't have a job. I mean, I'll use a very small example. We're a small firm. We definitely don't pay high, you know, tech industry rates. We posted a job in October. I had to turn the job off within six hours because we had almost a thousand applicants, all highly qualified.
I had posted the salary on there, the salary was, you know, maybe a couple years out of school, three to five years out of school, and not tech three years out of school, like normal-world three years out of school, and probably 70 percent of the applicants we got have been out of work since July, August, September. They've been on long-term.
Are they all working for FTX or any other crypto exchanges?
Most of them were not in tech at all. And I think that's where we're really, you know, the media talks a lot about the tech stuff because that's splashy and all of that. But we know of layoffs that were affecting all industries kind of across the board last year or small downsizings.
Yeah. Yeah. Right-sizing.
Right-sizing.
I'll ask you this before we get to 2023.
We saw crazy money go to our space in '21. I mean, stupid money, right?
Oh, gosh. Stupid money.
I remember fielding questions about predictions for '22 about are we gonna continue to see money, you know, go into our space and more unicorns being created. I predicted no, which I ended up being right. But what's your sense on the money that came into the space? What's happening to those companies or what's your best guess in terms of, you know, down rounds, layoffs, people having stock options or stock that's worthless than from when they got in? Any insights from you in terms of the money that sort of dried up in 2022?
Yeah, I mean I think we-- I have a little bit of unique perspective on this. In the last few years, we've done close to a billion dollars of M&A or investment support in the space. And so we've seen a ton of these transactions both working on pre- and post-terms with them. The money is a hundred percent drying up, but the money that was put out there into the companies, a lot of it they just blew, quite honestly. I think we're gonna actually see a huge number of acquisitions this year. Large number. There are still some strategic investors. We've had five either acquisition or investment groups reach out to us just this week already about decisions they wanna make this year.
So there is still money and everything going on, and I don't wanna say it's going to be down, it's going to be back to where it should have been to start with. I mean it was 2020, 2021. These valuations were insane for stuff. I mean, if you're selling a recruiting tool for $50,000, a pop on the high end, and you get $200 million of funding for a 10 percent, I'm not picking on anybody in particular. I just randomly made up those numbers. If that happens to correlate, right? Like realistically, how many types of products are you gonna have to sell or you're gonna have to completely change?
So I think it's going to be a really interesting year and I think it's super exciting because the consolidation you and I have both gone through, this will be our third big consolidation round in this industry, right?
We've gone through this a number of times. This isn't new, but when the consolidation happens, it always benefits the corporate recruiting teams and it benefits the businesses and it benefits the workers, and the applicants. And so I'm really excited because as soon as this consolidation around comes back, we're gonna have another round of really high-growth startups. And you and I were both in Paris and saw the stuff that is getting worked on that is going to be what is eligible in 2024, 2025. And it's some really amazing stuff.
Yeah. Yeah. And fortunately, with a lot of the Silicon Valley and tech layoffs, all those people are either gonna start companies or go work for new and exciting companies. So that brings us into '23. You've already kind of made a prediction, consolidation. Any other predictions or insights into the new year?
I'm gonna be Debbie Downer here for a second. We haven't even scratched the surface on layoffs this year. A lot of companies start planning for layoffs four to six months out. We're aware of layoffs right now that are going to run all the way through June that are already in process and getting worked on. And they are not just in tech. Like this is going to start crossing because once we hit one, the other big prediction, I'm gonna say totally off topic is eggs are gonna go absolutely insane. Like the cost of eggs, which is I think is gonna really piss people off.
Eggs, E-G-G-S.
E-G-G-S. So if you look at-- I think we're gonna have--
So buy your chickens now.
Buy your chickens. We're gonna have quite a summer I think because we're gonna have a couple of quarters of really high layoffs, we're gonna have people not finding jobs in the way they have been used to. We've got a huge number of people that have never gone through a recession or major downsizing. Maybe they saw their parents go through it, but there's a huge, you know, we have 12 to 15 years of people that really have never gone through that in their career. Everything's getting more expensive, housing, blah, blah, blah. And then something that has been this like stable, I think can be this tipping point. Predictions are eggs are going to be $12 a dozen by summer.
Like people are going to lose their minds because everything is going to be crazy. And eggs I think might just be the tipping point.
Forget about that Ruby on Rails developer. Eggs are gonna blow your mind in terms of how much that's shit's gonna cost.
Not everybody works in tech, right? Like we got people not making-- You know, it's hard enough as it is when something that, you know, what did we eat when we were in college? We ate 39-cent ramen noodles in 89-cent dozen of eggs and we would make--
Mac and cheese, eggs, yeah.
Mac and cheese or whatever else you could do. Like, the basic stuff, like little stuff like that is what really pisses people off. So hopefully we don't also have another tipping point thing, but I think 2023 is going to be a year where a lot of people just kind of look at their life and think about, okay, what is actually necessary? How do I make work matter? Like at the level it should, how do I make decisions in my personal life? What do I actually need? And I think we're gonna see businesses making the same decisions. Like who do we actually need for employees? What type of clients are we actually gonna go through? Everybody's gonna get much more targeted and focused on every aspect of life in 2023.
So we have a lot of vendors listen to our show.
Are we gonna see a bloodbath like we've seen? Now, in old days with job boards when they sort of ruled the world, if people weren't posting jobs, they were screwed.
But now we're in a little more diversity. You're a little bit more integrated into systems, you're a little harder to get rid of. How does that gonna impact vendors like in a big way? Are we gonna see an HR tech with two boobs? Like how is this gonna play out?
You know, sometimes when economy is bad, economy is really great for HR tech, and what is going to make the differentiator for vendors is their go-to market in their positioning. If they keep trying to sell and talk the same story and pretend that it's all about like, "Oh, it's really hard to find candidates" if you're still going after that approach, you're gonna really struggle moving in. If you adjust to what is happening with current conditions and you meet the practitioners kind of where they're at, we just did focus groups with, I think we had 24 recruiting leaders, TA leaders, all-sized companies, only one of those 24 so their top issues still was not finding enough candidates.
The expectations, and this is, I don't know, last month. So the expectations are changing and vendors can still have a lot of success if they change to meet those expectations and change with what is actually mattering in business. The companies that have failed, we've seen them right over and over, like amazing product, amazing sales teams, horrible messaging. They don't know how to explain what they're doing and what the value is. And if things are tightening up, you have to show your value and your impact without going to a point where everything turns into an ROI conversation. It's a really hard balance for people.
And if you have to pivot, figure out how to get ChatGPT to make eggs and you're set apparently from Sarah. So, Sarah, I'm reading an article recently this week talking about programmatic advertising come into podcasts. So, wow, precedent, right? So, for once, recruitment advertising is a step or two ahead of, I don't know, regular advertising. Recruiting has been leveraging solutions. Programmatic job ad solutions like JobADX to promote their jobs for years. What's JobADX you might ask, Sarah? What do you live under a rock in Idaho?
JobADX is the one tool you need to analyze and manage your entire job advertising process. That's right. Whether you want granular control or to set things on autopilot, your job ads follow a set of rules to create the best results showing up on hundreds of job sites focused on your goals. If you're new to programmatic or maybe you're looking to replace your current platform, you owe it to yourself to check out JobADX at www.jobadx.com. That's right. That's just the letter X, not the end E-X as in ex-husband or ex-wife, something Sarah and I know a little bit about.
Do yourself a favor, hit up jobadx.com today.
I think programmatic is going to be big because companies that are going to, even if they're doing downsizing, everything, the companies that are going to have advantage in 2025 as we come out of this, are going to be the ones that continue to focus on their brand. And so even if they're running programmatic, not to post a job, but just keep their brand and everything out. Yeah. And, you know, I'm not trying to pitch the ad, it just made me think about the last conversation.
And programmatic might help some of these job boards out there survive the oncoming doom and gloom that Sarah predicted for 2023. So if you're job board makes sure you're partnered with some of these programmatic solutions to keep the lights on if you need.
Speaking of job boards.
All right, Sarah, you may have heard a little company called Indeed, you've been around a while. A few people know who they are. So anyway, new year, new terms of service at our friends at Indeed. What first show of 2023 would be complete without talking about Indeed. By the way, obviously, no one reads Terms of Service. So we asked our resident Indeed whisperer Jim Durbin, his thoughts on what might be hiding in Indeed's Terms of Service. Here's what Jim told us. Number one, they're using ID.me for third-party verification, which means you have to upload a personal driver's license or other document when creating an account.
That sounds like a real headache.
Big Brother. Oh, I have so many-- Like ID.me just used anywhere. I just don't like at all.
All right, we'll get back to that. Let me go to the rest of the--
I'm sorry. Visceral reaction on ID.me.
The little surprises in Indeed's Terms of Services. All right, number two, the new salary transparency terms say that the information offered to candidates is a courtesy and not a warranty and they take no responsibility or liability for mistaken data presented on your job. So do yourself a favor, employers. Put those salary ranges on there because who knows what the fuck Indeed is gonna put on there and they're not liable for it. All right, number three, Indeed apply screening and assessments, has a section where they say they gather the data but won't hold it for you. For those government contractors dealing with OFCCP compliance, this is a problem.
You can't track compliance inside Indeed's platform, even though they want you to use Indeed's platform to do everything. Number four, there's a section about stopping spam candidates by requiring a cover letter. That's not new. It's just funny. Thanks, Jim, for that little insight there. Number five, you waive your right to jury trial and class actions when you use Indeed. That's convenient, isn't it? Number six, pay per application section makes it clear. You need to set a limit on the number of applies because you will pay for all of them. Jim says he anticipates a lot of people messing this one up. They're going to be mega bills accidentally rung up because some lowly admin didn't limit the applies on every job.
Sarah, I know you have to play nicely with all the vendors sometimes, but any thoughts on the updated Terms of Service or any thoughts on Indeed in general?
Oh, I'm gonna just go super easy, right? The pay transparency thing. If you don't post it on there, they will put

redpajama_set_name: RedPajamaCommonCrawl