jQuery Dropdown Check List TESTCASES
The Dropdown CheckList jQuery widget transforms a regular <SELECT> html element into a combo box with a text display of the selected elements and a dropdown of options. The plugin is hosted on google code.
Copyright © Adrian Tosca<EMAIL_ADDRESS>Ittrium, LLC<EMAIL_ADDRESS>Licensed like jQuery, see http://docs.jquery.com/Licensing.
TestCases
This page contains various test cases used to exercise DDCL.
Please Note that this page directly references the latest version checked into SVN, not
the current release point contained in the download .zip. It is used to test pending changes
and the samples here may not work on the stable release. Click on the version button
below to see the active version.
Please Note that this page is using jQuery 1.6.1, ui 1.8.13.
Please Note as of Version 1.2, all testing will be done with html pages defined for
strict mode (DOCTYPE http://www.w3.org/TR/html4/strict.dtd). This is to better reflect
modern standards and browsers.
The widget has been tested with browsers
- IE 6 / 7 / 8
- Firefox 3
- Safari 5
- Chrome 6
Simple Multi-selectorItems may be preslected, or not
|
||
|
Naked Selector |
Nothing preselected (but with explicit tabindex) |
Medium and High are preselected |
Long text, shorter control
The 'width' option allows you to set a fixed width on the control even if the
dropdown list is wider. The dropdown will keep its size so the items in the list
are correctly visible.
Include icon support via ThemeRoller
|
||
|
Naked Selector(styled) |
Narrow text, Wide items |
Narrow text, Wide items(styled) |
Long list of options, with scroll and disabled items
The 'maxDropHeight' option allows you to set a fixed height of the dropdown list.
This is usefull when there is a big number of items. The dropdown list is scrollable
to allow selection of all the items. Some select options have been disabled.
The height acts as a maximum, not a fixed value.
|
||
|
Naked Selector |
Drop down list taller than the maximum, default icon |
Drop down list shorter that the maximum, custom icon |
Option to let the first item in list check all items
The 'firstItemChecksAll' option allows you to attach a special behavior to the first item
in the list. If the item is checked, all items in the list are checked.
|
||
|
Naked Selector |
All as first option, NOT prechecked All as first option, EXCLUSIVE |
All as first option, prechecked (with explicit close) All as first option EXCLUSIVE, prechecked (with explicit close) |
Select with groups
The existing select element has groups (optgroup elements). The options are listed
in groups as with original select element.
|
||
|
Naked Selector |
With option groups |
With option groups (disabled) |
Single select with radio buttons instead of checkboxes
If the select element does not have an multiple attribute then the plugin will
display radiobuttons in the list.
Note that you can include an empty placeholder as the first item to suppress the browser auto-select.
|
||
|
Naked Selector |
As radio buttons |
Close on Click |
Empty default text
The 'emptyText' option allows you to set the text that is displayed when no
items are selected. You can include html markup in the string, which allows
you full control over any special styling you may want
|
||
|
Naked Selector |
Explicit empty text |
Explicit empty text (styled) |
Function for formatting the displayed text
The 'textFormatFunction' option allows you to supply a formatting function used to
display the control text. You can then customize the text display in any way you
wish. The callback function is run with a single argument that is the list of
selector options.
|
||
|
Naked Selector |
Custom display text handling |
Custom display text (styled) |
Callback handling when user completes their selection
The 'onComplete' option allows you to supply a callback function that is invoked
when the user completes their selection and closes the dropdown. It is passed
a single argument which is the original selector element.
Also, you can force the target selector into multiple selection mode
by using the 'forceMultiple' option, even if the underlying <SELECT> is
not marked as multiple.
-- The forceMultiple option does NOT work with IE 6 --
|
||
|
Naked Selector |
With values and an alert on complete |
Forced Multiple (not on IE6) |
Callback handling when user clicks any item
The 'onItemClick' option allows you to supply a callback function that is invoked
when the user clicks on an item. It is passed two arguments, the generated checkbox
element and the underlying html selector.
NOTE that the checkbox "checked" property reflects the user action already taken, BUT the underlying selector option state has not yet been updated.
You can reject the click by throwing any error from within your callback function.
You can also modify the underlying selector option(s) state.
|
||
|
Naked Selector |
Callback on change |
Callback on change(limit) |
First Item Checks All (not selected), all others preselected
The existing select element already has all options EXCEPT the first selected.
|
||
|
Naked Selector |
All items selected EXCEPT the first |
All items selected INCLUDING the first |
Simple Form Handling
Post a form so you can see how the values are returned to the server.
Enter the url of a form to post to in the "Post to:" field. The items returned with the form are named "selector1", "selector2", and "selector3" We are also testing multiple selectors that do NOT have uniquely assigned ids.
|
||
LABELS just do not work
DDCL has not been designed to operate with <LABEL> tags.
|
||
|
|
|
|
Rebuild of the control
Press the appropriate button to destroy the control and rebuild it, or alter the
underlying select and refresh it, or enable/disable it
|
||
|
Naked Selector |
|
|
Relative Positioned Parent Item
The parent item of the SELECT is relatively positioned, which causes
positioniong problems for the dropdown in version 1.1 and before
|
||
|
Outside the relative parent
In the relative parent
|
Outside the relative parent (absolute dropdown)
In the relative parent
|
Outside the relative parent (relative dropdown)
In the relative parent
|
Parent Item that Scrolls
The parent item of the SELECT inherently scrolls, which causes
positioniong problems for the dropdown in version 1.1 and before.
NOTE that the positioning fix applied with V1.2 causes the dropdown
popup to position properly in all cases. However, if you use
absolute positioning (the default), then the parent scrolls
without dragging the popup along. You can set the popup to
position relative to the parent, which will then scroll along
with the parent (EXCEPT IE6 and IE7). HOWEVER when the popup is relative, it consumes 'space' in the document and does not fly above subsequent content, but rather pushes the subsequent content further down the page. |
||
|
In the scrolling parent
Content to force scrolling. More content to force scrolling. Even more content to force scroling. |
In the scrolling parent (absolute dropdown)
Content to force scrolling. More content to force scrolling. Even more content to force scroling. |
In the scrolling parent (relative dropdown)
Content to force scrolling. More content to force scrolling. Even more content to force scroling. |
DDCL within a hidden parent
Initializing a ddcl within a Hidden parent causes the width/height calculation of
the dynamic controls to fail.
DDCL should be made smarter in a future version to handle this.
For now, you can try moving the ddcl initialization into the 'show' processing, but watch out for multiple initialization calls. |
||
| Standard Example
|
Hidden Example (early ddcl init) | Hidden Example (late ddcl init) |
DDCL interaction with other jQuery Widgets
DDCL has shown some interesting interactions with other jQuery widgets.
In particular, DDCL's internal calculation of an appropriate z-index does not always work well with other widgets on the page. It tries to determine an approprite z-index based on parent elements, but does take into account siblings with a high z-index value with which it may overlap. zIndex is now a configuration option that you can set to an explicit value as needed. |
||
Accordian Entry 1 - DDCL dropdown beneath the sliderSample Range Slider
Accordian Entry 2 - DDCL dropdown with explicit z-indexSample Range Slider 2
Accordian Entry 3
Just some contents on item 3
|
||
jQuery Dialog support |
||
|
|
||
Massive count of options
DDCL can reportly drive the browsers wonky if you have a large number of options.
|
||
|
Large number of options |
Large number of options (no max) |
Large number of options (with maxHeight/firstSelectsAll exclusive) |


Rounded Corners
Rounded corners for an element with a specified background color.
Rounded corners for an element with a border
Rounded corners for an element with a background image


This is HTML
It's not the greatest...
...but it is
functional
.
For good measure, here's some more of it!
And an image:
Isn't HTML great?!


I was born and raised here in Nashville.
I graduated from Belmont University in 2010 with a degree in English/Writing and French.
Shortly after I graduated I moved to Seoul, South Korea to put my degree to work by teaching English as a Second Language to middle schoolers.
After a year in Korea I realized teaching wasn't for me. Instead, I decided to pursue the entrepreneurial realm, fumbling through a couple different startups while working a day-job.
My interest in small business and technology lead me to apply to the Nashville Software School, where I am currently studying HTML, CSS, Javascript and C#/.Net.
I want to use my new skills to contribute measurable value back to the city that has shaped such a huge part of who I am, whether that is in the fields of education, health, music, culture or the sciences.
Get Started!I work well under pressure, but I don't like to. Planning and organization are often undervalued, but when they are prioritized, it makes writing code a breeze.
The feeling that there's always something more to be done makes it difficult to know when the app is in a 'finished state.' Knowing the difference between 'good enough' and 'needs work' is an important skill.
Things change all the time, and staying up to date can be daunting. Subscribing to the right resources helps. I try to stay up to date on the latest versions of the technologies I spend the most time using.
Care about the software you build, and care about the people with whom you build them. A healthy team builds better products than a poisoned team. Be kind to your team mates and to yourself and you'll notice a massive improvement in your code.
I am a SQL Developer for Visualize Health, LLC. We work with health practices and clinics to aggregate and display their date so that the doctors can take better care of their patients.


This document descibes the MySQL network protocol version 10, as of February 2005 (MySQL 4.1.9). It has been produced by reading mysql_com.h, libmysql.c, net.c, sql_parse.cc and sql_show.cc in the MySQL source.
Protocol version 9 was used by MySQL clients and servers before version 3.21. It is unlikely to still be in use, as modern clients cannot connect to version 9 servers. The primary difference between protocol 9 and 10 is in the password algorithm.
Protocol 10 is used by MySQL 3.22 and later. MySQL 4.0 brought in replication, and MySQL 4.1 brought in a new password algorithm, together with a number of protocol extensions, such as multi-statements. It is thus hard for older clients to interoperate properly with a new server, even if the server has been setup with pre-4.1 passwords.
This document describes the 4.1.x protocol only; the previous document can be used to determine the changes for older versions.
The protocol requires first that a client and server negotiate a connection, including agreeing about protocol features and authentication. This is followed by a series of requests from the client and reponses from the server, until either the client issues a QUIT request or the connection is broken.
MySQL uses either a Unix domain socket (usually /tmp/mysql.sock or /var/run/mysqld/mysql.sock), an MS Windows named pipe (usually \\hostname\pipe\mysql), shared memory or a TCP port (usually 3306). It treats all communications methods identically.
Each client message is sent as a single MySQL 'packet'; a server response may consist of many packets. These packets are not related to the underlying network layer packets, and indeed many response packets may be contained in a single IP datagram.
Each packet begins with a 4-byte header. The first three header bytes give the body length as a Little-Endian integer (all MySQL integers are Little-Endian unless described otherwise). The fourth gives a packet number for this transaction, starting from 0, and including both client and server messages. The body of the message then follows.
All example packets are taken from a real system.
Once the transport-level connection is established, the connection negotiation starts with the server identifying itself.
The host sends an initial greeting similar to:
| 37 00 00 00 | Body Length=55, packet=0 |
| 0a | Protocol=10 |
| 34 2e 31 2e 39 2d 6c 6f 67 00 | Version="4.1.9-log" |
| 07 00 00 00 | Thread ID=7 |
| 79 46 2f 57 48 43 57 6a 00 | Salt="yF/WHCWj" |
| 2c a2 | Caps=LONG_FLAG | CONNECT_WITH_DB | COMPRESS | TRANSACTIONS | PROTOCOL_41 | SECURE_CONNECTION |
| 08 | Charset=Latin-1 |
| 02 00 | Status=AUTOCOMMIT |
| 00 00 00 00 00 00 00 00 00 00 00 00 00 | 13 bytes unused |
| 47 5b 72 4e 6c 58 52 72 66 2b 3f 3a 00 | Rest of Salt="G[rNl XRrf+?:" |
The first byte of the message body is the protocol version, currently 10. The protocol version is followed by a version string for the server, null-terminated - the -log suffix means logging is enabled. Following this is a 4-byte integer giving the thread ID of the server thread handling the request. Next come the first 8 bytes of a 'scramble string' salt for encryption, again null-terminated.
This is followed by a 2-byte integer describing the server's capabilities - this server can do LONG_FLAG and CONNECT_WITH_DB, as well as the more recent COMPRESS, TRANSACTIONS and SSL, and, as it's a 4.1.x server, PROTOCOL_41 and SECURE_CONNECTION. There follow 16 bytes of server characteristics: first a single byte giving the server character set and two bytes describing the server status; the rest is currently padded with NUL.
Finally, the remaining 12 bytes of the 'scramble string' are written if long 20-bytes scrambles are being used (as will usually be the case with 4.1.x servers that are not upgrades of previous servers).
The client now sends a request to the server, similar to:
| 3e 00 00 01 | Body Length=62, packet=1 |
| 85 A6 03 00 | Caps=LONG_PASSWORD | LONG_FLAG | TRANSACTIONS | INTERACTIVE | LOCAL_FILES | PROTOCOL_41 | SECURE_CONNECTION | MULTI_STATEMENTS | MULTI_RESULTS |
| 00 00 00 01 | Max packet=224 bytes |
| 08 | Charset = Latin-1 |
| 00 x 23 | For future expansion |
| 72 65 64 66 65 72 6e 69 00 | User = "redferni" |
| 14 ?? x 20 | Password = 20 bytes |
This is the client's turn to send its capabilities in two bytes. These will always include LONG_PASSWORD, LONG_FLAG, TRANSACTIONS, PROTOCOL_41 and SECURE_CONNECTION for 4.1.x clients, and in this case include INTERACTIVE, LOCAL_FILES, MULTI_STATEMENTS and MULTI_RESULTS as well, as this is the standard MySQL command-line client.
This is followed by the maxiumum packet size (usually 16MB) and the client's character set, then 23 bytes of padding.
At this point the client will switch to SSL on the communications channel if it has set the SSL capability bit - which it will not do if the server has not also set that bit.
This is followed by the username, null-terminated, and the scrambled password (the example given here is not a real password) if a password is provided, preceded with a single byte giving its scrambled length (usually 20). If no password is provided, a single NUL is sent and no scramble is added.
If the client is trying to connect to a particular database and the server is capable of CONNECT_WITH_DB, it will add the database name as a null-terminated string (in UTF-8).
The client will now expect the server to send an OK simple response or an error. After an OK response, the flow of client commands can begin; after an error response the client closes the connection.
Under the very special circumstance that the server and client are use 4.1 extensions but the server still has an old password table, it will tell the client to resend the password using the old password protocol 10 algorithm by sending an end of data packet (the single byte 0xfe).
If the client and server are both capable of compression, and the client wants to use it (it usually has to be explicitly enabled), the client will now switch to using it. It follows the standard packet header with a three-byte compressed length. The compression mechanism used is standard zlib.
The client may (if it is the 'commercial', rather than free client) now check the server's licence by issuing a SELECT @@license statement and abort the connection if the server's licence does not match the client's.
When data is sent in tabular form, each field is preceded by its field length, encoded in the following manner:
| Byte | Meaning |
|---|---|
| 0-250 | Same as byte |
| 251 | NULL field |
| 252 | Value in following 2 bytes |
| 253 | Value in following 4 bytes |
| 254 | Value in following 8 bytes |
This mechanism is also used for encoding other integers efficiently.
Fields sent in this manner are marked (FLE).
Most commands produce a simple 'OK' response. This will usually be of the form:
| 07 00 00 01 | Body Length=7, packet=1 |
| 00 | Field count = 0 (FLE) |
| 00 | Affected rows = 0 (FLE) |
| 00 | Insert ID = 0 (FLE) |
| 02 00 | Server status = AUTOCOMMIT |
| 00 00 | Warning count = 0 |
In the case of an OK response to the initial authentication, of course, the packet number will be 2. It is possible that additional information may follow in FLE.
For an error, the response will be more like the following:
| 27 00 00 01 | Body Length=39, packet=1 |
| ff | Error |
| 7a 04 | Error code=NO_SUCH_TABLE (1146) |
| 54 61 62 6c 65 20 27 72 65 64 66 65 72 6e 69 2e 73 61 6d 70 6c 65 27 20 64 6f 65 73 6e 27 74 20 65 78 69 73 74 | Error message="Table 'redferni.sample' doesn't exist" |
The first byte of the error response body is set to 255.
If the body length is at least 4, then the packet contains a 2-byte error code, followed by the error message, of up to 200 characters.
There are 303 error codes, ranging from HASHCHK (1000) to CONFLICTING_DECLARATIONS (1302).
A simple command is sent in the form:
| 0f 00 00 00 | Body Length=15, packet=0 |
| 03 | Command=QUERY |
| 73 68 6f 77 20 64 61 74 61 62 61 73 65 73 | Arg="show databases" |
The first byte is the command code, followed by an optional argument. Any command not explicitly listed, including any SQL command, is sent as QUERY, as in the example.
When the client wishes to disconnect, it sends a QUIT simple
command and closes its end of the connection, as follows
| 01 00 00 00 | Body Length=1, packet=0 |
| 01 | Command=QUIT |
The server will close its end of the connection without further response.
When returning data as a table, as a response to a QUERY, FIELD_LIST or PROCESS_INFO command, MySQL first describes the fields in each row, then sends the rows.
The first packet contains the (non-zero) number of fields, and possibly the number of records.
| 01 00 00 01 | Body Length=1, packet=1 |
| 01 | Number of fields = 1 (FLE) |
This is followed by the field descriptions.
| 1e 00 00 02 | Body Length=20, packet=2 |
| 03 64 65 66 | Catalogue = "def" |
| 00 | DB = "" |
| 00 | Table = "" |
| 00 | Org table = "" |
| 08 44 61 74 61 62 61 73 65 | Name = "Database" |
| 00 | Org name = "" |
| 0c | Fixed length part = 12 (FLE) |
| 08 00 | Char set = Latin-1 |
| 40 00 00 00 | Length = 64 |
| fe | Type = STRING |
| 01 00 | Flags = NOT_NULL |
| 1f | Decimals = 31 |
| 00 00 | Padding |
There is one logical packet per field description. Each field description contains seven or eight parts, each preceded by their length in FLE: the catalogue, database, table, org table, field and org field names, a 12 byte fixed length set of field metadata, and an optional default value.
The metadata gives the field character set, type, flags and number of decimal places.
| 01 00 00 03 | Body Length=1, packet=3 |
| fe | End of field list |
After all the field description packets, a packet with just a single byte of value 254 indicates the start of the rows.
| 09 00 00 04 | Body Length=9, packet=4 |
| 06 41 73 68 6c 65 79 | Row 1 Col 1="Ashley" |
| 01 31 | Row 1 Col 2=1 |
Each row is in a separate packet, with the field values preceded by a field length. All non-binary fields values are sent as text - in particular, all numeric fields appear as ASCII, and timestamps as YYYY-MM-DD HH:MM:SS.µµµµµµ. Trailing spaces are removed from char and varchar fields.
| 05 00 00 06 | Body Length=5, packet=6 |
| fe | End of row list |
| 00 00 | Warning count = 0 |
| 02 00 | Server status = AUTOCOMMIT |
After the last row, another packet holding the byte 254, but with length less than 8 indicates the end of the data. It is followed by two fields for warning count and server status - for some reason, these are the opposite way round to a simple response.
If a file is to be sent to the server, the following response is generated:
| 01 00 00 01 | Body Length=1, packet=1 |
| fb | 251 = Upload file |
The file is sent by the client as a series of ordinary packets, with the final packet empty.
The server will respond, usually with a simple response.
There are four commands that can return complex responses.
The STATISTICS command response is simply a string describing the current server statistics.
The FIELD_LIST command response is the same as the first part of a tabular response (the field descriptions) - with the exception that a default value may be attached to each field description.
The PROCESS_INFO command response is first a packet containing a field count, in FLE, followed by a tabular response.
The QUERY command handles all SQL commands, as well as almost all client commands.
The first part of any response is a number of fields in FLE. A zero value indicates a simple response; a NULL value indicates a file upload and any other value indicates a tabular response.
Many MySQL clients and drivers expect certain behaviour from the server, and perform queries behind the scenes. The important responses are shown below.
The mysql command-line client issues the request
select DATABASE(),USER()
when the user asks for the current status. It will expect the
following response:
| DATABASE() | USER() |
| VARCHAR(34) NOT NULL | VARCHAR(77) NOT NULL |
The DATABASE() field may be empty. The USER() field is of the form user@host.
The current status response is similar to:
Uptime: 129 Threads: 1 Questions: 6 Slow queries: 0 Opens: 6 Flush tables: 1 Open tables: 0 Queries per second avg: 0.047
The mysql client assumes the number following the first space is a time and formats it appropriately.
| Variable_name | Value |
| CHAR(30) NOT NULL | CHAR(256) NOT NULL |
| Database |
| CHAR(64) NOT NULL |
| Tables_in_db |
| CHAR(64) NOT NULL |
| Field | Type | Null | Key | Default | Extra |
| CHAR(64) NOT NULL | CHAR(40) NOT NULL | CHAR(1) NOT NULL | CHAR(3) NOT NULL | CHAR(64) | CHAR(20) NOT NULL |
The Null field takes values '' or 'YES' - this is presumably a bug. The Key field is 'PRI', 'UNI', 'MUL'or ''.
The same output is produced by show columns, desc or describe.
| Id | User | Host | db | Command | Time | State | Info |
| Int | CHAR(16) NOT NULL | CHAR(64) NOT NULL | CHAR(64) | CHAR(16) NOT NULL | CHAR(7) NOT NULL | CHAR(30) | CHAR(100) |
Show processlist full removes the size limit on the Info column.
The new MySQL 4.1.x password algorithm is more complex and probably more secure than the older algorithms.
The client uses the salt sent by the server and its own knowledge of the password to produce a scrambled password that it sends to the server. The server does a similar calculation.
The hashing algorithm used is SHA1 - see RFC 2289, 3174
The client first calculates hash1 = SHA1(password), then hash2 = SHA1(hash1). The server already knows this, as that is what is held in its password table (preceded with a *).
It then appends hash2 to the salt sent by the server and hashes that, and finally exclusive ors the result with hash1.
So it sends to the server SHA1(password) XOR SHA1(salt.SHA1(SHA1(password)).
The server does effectively the same calculation and checks the result (though for some reason it prefers to undo the Exclusive-OR and compare with hash1).
MySQL uses the following codes:
| Capability name | Value | Meaning |
|---|---|---|
| LONG_PASSWORD | 1 | New more secure passwords |
| FOUND_ROWS | 2 | Found instead of affected rows |
| LONG_FLAG | 4 | Get all column flags |
| CONNECT_WITH_DB | 8 | One can specify db on connect |
| NO_SCHEMA | 16 | Don't allow database.table.column |
| COMPRESS | 32 | Can use compression protocol |
| ODBC | 64 | ODBC client |
| LOCAL_FILES | 128 | Can use LOAD DATA LOCAL |
| IGNORE_SPACE | 256 | Ignore spaces before '(' |
| PROTOCOL_41 | 512 | Support the 4.1 protocol |
| INTERACTIVE | 1024 | This is an interactive client |
| SSL | 2048 | Switch to SSL after handshake |
| IGNORE_SIGPIPE | 4096 | IGNORE sigpipes |
| TRANSACTIONS | 8192 | Client knows about transactions |
| SECURE_CONNECTION | 32768 | New 4.1 authentication |
| MULTI_STATEMENTS | 65536 | Multi-statement support |
| MULTI_RESULTS | 131072 | Multi-results |
| Command | Code | Arguments | Allowed from client |
|---|---|---|---|
| SLEEP | 0 | No | |
| QUIT | 1 | "" | |
| INIT_DB | 2 | db | |
| QUERY | 3 | query | |
| FIELD_LIST | 4 | table | |
| CREATE_DB | 5 | db | |
| DROP_DB | 6 | db | |
| REFRESH | 7 | option bits | |
| SHUTDOWN | 8 | level (optional) | |
| STATISTICS | 9 | ||
| PROCESS_INFO | 10 | ||
| CONNECT | 11 | No | |
| PROCESS_KILL | 12 | 4-byte pid | |
| DEBUG | 13 | ||
| PING | 14 | ||
| TIME | 15 | No | |
| DELAYED_INSERT | 16 | No | |
| CHANGE_USER | 17 | user | |
| BINLOG_DUMP | 18 | ||
| TABLE_DUMP | 19 | ||
| CONNECT_OUT | 20 | No | |
| REGISTER_SLAVE | 21 | No | |
| PREPARE | 22 | query | |
| EXECUTE | 23 | statement; params | |
| LONG_DATA | 24 | statement; parameter; data | |
| CLOSE_STMT | 25 | statement | |
| RESET_STMT | 26 | statement | |
| SET_OPTION | 27 | 2 byte flags |
| Type | Code | Type | Code |
|---|---|---|---|
| DECIMAL | 0 | ENUM | 247 |
| TINY | 1 | SET | 248 |
| SHORT | 2 | TINY_BLOB | 249 |
| LONG | 3 | MEDIUM_BLOB | 250 |
| FLOAT | 4 | LONG_BLOB | 251 |
| DOUBLE | 5 | BLOB | 252 |
| NULL | 6 | VAR_STRING | 253 |
| TIMESTAMP | 7 | STRING | 254 |
| LONGLONG | 8 | GEOMETRY | 255 |
| INT24 | 9 | ||
| DATE | 10 | ||
| TIME | 11 | ||
| DATETIME | 12 | ||
| YEAR | 13 | ||
| NEWDATE | 14 |
| Status | Code |
|---|---|
| IN_TRANS | 1 |
| AUTOCOMMIT | 2 |
| MORE_RESULTS | 4 |
| MORE_RESULTS_EXISTS | 8 |
| QUERY_NO_GOOD_INDEX_USED | 16 |
| QUERY_NO_INDEX_USED | 32 |
| Charset | Code | Charset | Code |
|---|---|---|---|
| big5_chinese_ci | 1 | latin1_general_cs | 49 |
| latin2_czech_cs | 2 | cp1251_bin | 50 |
| dec8_swedish_ci | 3 | cp1251_general_ci | 51 |
| cp850_general_ci | 4 | cp1251_general_cs | 52 |
| latin1_german1_ci | 5 | macroman_bin | 53 |
| hp8_english_ci | 6 | macroman_ci | 54 |
| koi8r_general_ci | 7 | macroman_ci_ai | 55 |
| latin1_swedish_ci | 8 | macroman_cs | 56 |
| latin2_general_ci | 9 | cp1256_general_ci | 57 |
| swe7_swedish_ci | 10 | cp1257_bin | 58 |
| ascii_general_ci | 11 | cp1257_general_ci | 59 |
| ujis_japanese_ci | 12 | cp1257_ci | 60 |
| sjis_japanese_ci | 13 | cp1257_cs | 61 |
| cp1251_bulgarian_ci | 14 | binary | 63 |
| latin1_danish_ci | 15 | armscii8_bin | 64 |
| hebrew_general_ci | 16 | ascii_bin | 65 |
| tis620_thai_ci | 18 | cp1250_bin | 66 |
| euckr_korean_ci | 19 | cp1256_bin | 67 |
| latin7_estonian_cs | 20 | cp866_bin | 68 |
| latin2_hungarian_ci | 21 | dec8_bin | 69 |
| koi8u_general_ci | 22 | greek_bin | 70 |
| cp1251_ukrainian_ci | 23 | hebrew_bin | 71 |
| gb2312_chinese_ci | 24 | hp8_bin | 72 |
| greek_general_ci | 25 | keybcs2_bin | 73 |
| cp1250_general_ci | 26 | koi8r_bin | 74 |
| latin2_croatian_ci | 27 | koi8u_bin | 75 |
| gbk_chinese_ci | 28 | latin2_bin | 77 |
| cp1257_lithuanian_ci | 29 | latin5_bin | 78 |
| latin5_turkish_ci | 30 | latin7_bin | 79 |
| latin1_german2_ci | 31 | cp850_bin | 80 |
| armscii8_general_ci | 32 | cp852_bin | 81 |
| utf8_general_ci | 33 | swe7_bin | 82 |
| cp1250_czech_cs | 34 | utf8_bin | 83 |
| ucs2_general_ci | 35 | big5_bin | 84 |
| cp866_general_ci | 36 | euckr_bin | 85 |
| keybcs2_general_ci | 37 | gb2312 | 86 |
| macce_general_ci | 38 | gbk_bin | 87 |
| macroman_general_ci | 39 | sjis_bin | 88 |
| cp852_general_ci | 40 | tis620_bin | 89 |
| latin7_general_ci | 41 | ucs2_bin | 90 |
| latin7_general_cs | 42 | ujis_bin | 91 |
| macce_bin | 43 | geostd8_general_ci | 92 |
| latin1_bin | 47 | geostd8_bin | 93 |
| latin1_general_ci | 48 | latin1_spanish_ci | 94 |
| Field Flag | Value | Meaning |
|---|---|---|
| NOT_NULL | 1 | Field can't be NULL |
| PRI_KEY | 2 | Field is part of a primary key |
| UNIQUE_KEY | 4 | Field is part of a unique key |
| MULTIPLE_KEY | 8 | Field is part of a key |
| BLOB | 16 | Field is a blob |
| UNSIGNED | 32 | Field is unsigned |
| ZEROFILL | 64 | Field is zerofill |
| BINARY | 128 | Field is binary |
| ENUM | 256 | Field is an enum |
| AUTO_INCREMENT | 512 | Field is an autoincrement field |
| TIMESTAMP | 1024 | Field is a timestamp |
| SET | 2048 | Field is a set |
| NUM | 32768 | Field is num (for clients) |
| Error | Value | Error | Value |
|---|---|---|---|
| HASHCHK | 1000 | ABORTING_CONNECTION | 1152 |
| NISAMCHK | 1001 | NET_PACKET_TOO_LARGE | 1153 |
| NO | 1002 | NET_READ_ERROR_FROM_PIPE | 1154 |
| YES | 1003 | NET_FCNTL_ERROR | 1155 |
| CANT_CREATE_FILE | 1004 | NET_PACKETS_OUT_OF_ORDER | 1156 |
| CANT_CREATE_TABLE | 1005 | NET_UNCOMPRESS_ERROR | 1157 |
| CANT_CREATE_DB | 1006 | NET_READ_ERROR | 1158 |
| DB_CREATE_EXISTS | 1007 | NET_READ_INTERRUPTED | 1159 |
| DB_DROP_EXISTS | 1008 | NET_ERROR_ON_WRITE | 1160 |
| DB_DROP_DELETE | 1009 | NET_WRITE_INTERRUPTED | 1161 |
| DB_DROP_RMDIR | 1010 | TOO_LONG_STRING | 1162 |
| CANT_DELETE_FILE | 1011 | TABLE_CANT_HANDLE_BLOB | 1163 |
| CANT_FIND_SYSTEM_REC | 1012 | TABLE_CANT_HANDLE_AUTO_INCREMENT | 1164 |
| CANT_GET_STAT | 1013 | DELAYED_INSERT_TABLE_LOCKED | 1165 |
| CANT_GET_WD | 1014 | WRONG_COLUMN_NAME | 1166 |
| CANT_LOCK | 1015 | WRONG_KEY_COLUMN | 1167 |
| CANT_OPEN_FILE | 1016 | WRONG_MRG_TABLE | 1168 |
| FILE_NOT_FOUND | 1017 | DUP_UNIQUE | 1169 |
| CANT_READ_DIR | 1018 | BLOB_KEY_WITHOUT_LENGTH | 1170 |
| CANT_SET_WD | 1019 | PRIMARY_CANT_HAVE_NULL | 1171 |
| CHECKREAD | 1020 | TOO_MANY_ROWS | 1172 |
| DISK_FULL | 1021 | REQUIRES_PRIMARY_KEY | 1173 |
| DUP_KEY | 1022 | NO_RAID_COMPILED | 1174 |
| ERROR_ON_CLOSE | 1023 | UPDATE_WITHOUT_KEY_IN_SAFE_MODE | 1175 |
| ERROR_ON_READ | 1024 | KEY_DOES_NOT_EXITS | 1176 |
| ERROR_ON_RENAME | 1025 | CHECK_NO_SUCH_TABLE | 1177 |
| ERROR_ON_WRITE | 1026 | CHECK_NOT_IMPLEMENTED | 1178 |
| FILE_USED | 1027 | CANT_DO_THIS_DURING_AN_TRANSACTION | 1179 |
| FILSORT_ABORT | 1028 | ERROR_DURING_COMMIT | 1180 |
| FORM_NOT_FOUND | 1029 | ERROR_DURING_ROLLBACK | 1181 |
| GET_ERRNO | 1030 | ERROR_DURING_FLUSH_LOGS | 1182 |
| ILLEGAL_HA | 1031 | ERROR_DURING_CHECKPOINT | 1183 |
| KEY_NOT_FOUND | 1032 | NEW_ABORTING_CONNECTION | 1184 |
| NOT_FORM_FILE | 1033 | DUMP_NOT_IMPLEMENTED | 1185 |
| NOT_KEYFILE | 1034 | FLUSH_MASTER_BINLOG_CLOSED | 1186 |
| OLD_KEYFILE | 1035 | INDEX_REBUILD | 1187 |
| OPEN_AS_READONLY | 1036 | MASTER | 1188 |
| OUTOFMEMORY | 1037 | MASTER_NET_READ | 1189 |
| OUT_OF_SORTMEMORY | 1038 | MASTER_NET_WRITE | 1190 |
| UNEXPECTED_EOF | 1039 | FT_MATCHING_KEY_NOT_FOUND | 1191 |
| CON_COUNT_ERROR | 1040 | LOCK_OR_ACTIVE_TRANSACTION | 1192 |
| OUT_OF_RESOURCES | 1041 | UNKNOWN_SYSTEM_VARIABLE | 1193 |
| BAD_HOST_ERROR | 1042 | CRASHED_ON_USAGE | 1194 |
| HANDSHAKE_ERROR | 1043 | CRASHED_ON_REPAIR | 1195 |
| DBACCESS_DENIED_ERROR | 1044 | WARNING_NOT_COMPLETE_ROLLBACK | 1196 |
| ACCESS_DENIED_ERROR | 1045 | TRANS_CACHE_FULL | 1197 |
| NO_DB_ERROR | 1046 | SLAVE_MUST_STOP | 1198 |
| UNKNOWN_COM_ERROR | 1047 | SLAVE_NOT_RUNNING | 1199 |
| BAD_NULL_ERROR | 1048 | BAD_SLAVE | 1200 |
| BAD_DB_ERROR | 1049 | MASTER_INFO | 1201 |
| TABLE_EXISTS_ERROR | 1050 | SLAVE_THREAD | 1202 |
| BAD_TABLE_ERROR | 1051 | TOO_MANY_USER_CONNECTIONS | 1203 |
| NON_UNIQ_ERROR | 1052 | SET_CONSTANTS_ONLY | 1204 |
| SERVER_SHUTDOWN | 1053 | LOCK_WAIT_TIMEOUT | 1205 |
| BAD_FIELD_ERROR | 1054 | LOCK_TABLE_FULL | 1206 |
| WRONG_FIELD_WITH_GROUP | 1055 | READ_ONLY_TRANSACTION | 1207 |
| WRONG_GROUP_FIELD | 1056 | DROP_DB_WITH_READ_LOCK | 1208 |
| WRONG_SUM_SELECT | 1057 | CREATE_DB_WITH_READ_LOCK | 1209 |
| WRONG_VALUE_COUNT | 1058 | WRONG_ARGUMENTS | 1210 |
| TOO_LONG_IDENT | 1059 | NO_PERMISSION_TO_CREATE_USER | 1211 |
| DUP_FIELDNAME | 1060 | UNION_TABLES_IN_DIFFERENT_DIR | 1212 |
| DUP_KEYNAME | 1061 | LOCK_DEADLOCK | 1213 |
| DUP_ENTRY | 1062 | TABLE_CANT_HANDLE_FT | 1214 |
| WRONG_FIELD_SPEC | 1063 | CANNOT_ADD_FOREIGN | 1215 |
| PARSE_ERROR | 1064 | NO_REFERENCED_ROW | 1216 |
| EMPTY_QUERY | 1065 | ROW_IS_REFERENCED | 1217 |
| NONUNIQ_TABLE | 1066 | CONNECT_TO_MASTER | 1218 |
| INVALID_DEFAULT | 1067 | QUERY_ON_MASTER | 1219 |
| MULTIPLE_PRI_KEY | 1068 | ERROR_WHEN_EXECUTING_COMMAND | 1220 |
| TOO_MANY_KEYS | 1069 | WRONG_USAGE | 1221 |
| TOO_MANY_KEY_PARTS | 1070 | WRONG_NUMBER_OF_COLUMNS_IN_SELECT | 1222 |
| TOO_LONG_KEY | 1071 | CANT_UPDATE_WITH_READLOCK | 1223 |
| KEY_COLUMN_DOES_NOT_EXITS | 1072 | MIXING_NOT_ALLOWED | 1224 |
| BLOB_USED_AS_KEY | 1073 | DUP_ARGUMENT | 1225 |
| TOO_BIG_FIELDLENGTH | 1074 | USER_LIMIT_REACHED | 1226 |
| WRONG_AUTO_KEY | 1075 | SPECIFIC_ACCESS_DENIED_ERROR | 1227 |
| READY | 1076 | LOCAL_VARIABLE | 1228 |
| NORMAL_SHUTDOWN | 1077 | GLOBAL_VARIABLE | 1229 |
| GOT_SIGNAL | 1078 | NO_DEFAULT | 1230 |
| SHUTDOWN_COMPLETE | 1079 | WRONG_VALUE_FOR_VAR | 1231 |
| FORCING_CLOSE | 1080 | WRONG_TYPE_FOR_VAR | 1232 |
| IPSOCK_ERROR | 1081 | VAR_CANT_BE_READ | 1233 |
| NO_SUCH_INDEX | 1082 | CANT_USE_OPTION_HERE | 1234 |
| WRONG_FIELD_TERMINATORS | 1083 | NOT_SUPPORTED_YET | 1235 |
| BLOBS_AND_NO_TERMINATED | 1084 | MASTER_FATAL_ERROR_READING_BINLOG | 1236 |
| TEXTFILE_NOT_READABLE | 1085 | SLAVE_IGNORED_TABLE | 1237 |
| FILE_EXISTS_ERROR | 1086 | INCORRECT_GLOBAL_LOCAL_VAR | 1238 |
| LOAD_INFO | 1087 | WRONG_FK_DEF | 1239 |
| ALTER_INFO | 1088 | KEY_REF_DO_NOT_MATCH_TABLE_REF | 1240 |
| WRONG_SUB_KEY | 1089 | OPERAND_COLUMNS | 1241 |
| CANT_REMOVE_ALL_FIELDS | 1090 | SUBQUERY_NO_1_ROW | 1242 |
| CANT_DROP_FIELD_OR_KEY | 1091 | UNKNOWN_STMT_HANDLER | 1243 |
| INSERT_INFO | 1092 | CORRUPT_HELP_DB | 1244 |
| UPDATE_TABLE_USED | 1093 | CYCLIC_REFERENCE | 1245 |
| NO_SUCH_THREAD | 1094 | AUTO_CONVERT | 1246 |
| KILL_DENIED_ERROR | 1095 | ILLEGAL_REFERENCE | 1247 |
| NO_TABLES_USED | 1096 | DERIVED_MUST_HAVE_ALIAS | 1248 |
| TOO_BIG_SET | 1097 | SELECT_REDUCED | 1249 |
| NO_UNIQUE_LOGFILE | 1098 | TABLENAME_NOT_ALLOWED_HERE | 1250 |
| TABLE_NOT_LOCKED_FOR_WRITE | 1099 | NOT_SUPPORTED_AUTH_MODE | 1251 |
| TABLE_NOT_LOCKED | 1100 | SPATIAL_CANT_HAVE_NULL | 1252 |
| BLOB_CANT_HAVE_DEFAULT | 1101 | COLLATION_CHARSET_MISMATCH | 1253 |
| WRONG_DB_NAME | 1102 | SLAVE_WAS_RUNNING | 1254 |
| WRONG_TABLE_NAME | 1103 | SLAVE_WAS_NOT_RUNNING | 1255 |
| TOO_BIG_SELECT | 1104 | TOO_BIG_FOR_UNCOMPRESS | 1256 |
| UNKNOWN_ERROR | 1105 | ZLIB_Z_MEM_ERROR | 1257 |
| UNKNOWN_PROCEDURE | 1106 | ZLIB_Z_BUF_ERROR | 1258 |
| WRONG_PARAMCOUNT_TO_PROCEDURE | 1107 | ZLIB_Z_DATA_ERROR | 1259 |
| WRONG_PARAMETERS_TO_PROCEDURE | 1108 | CUT_VALUE_GROUP_CONCAT | 1260 |
| UNKNOWN_TABLE | 1109 | WARN_TOO_FEW_RECORDS | 1261 |
| FIELD_SPECIFIED_TWICE | 1110 | WARN_TOO_MANY_RECORDS | 1262 |
| INVALID_GROUP_FUNC_USE | 1111 | WARN_NULL_TO_NOTNULL | 1263 |
| UNSUPPORTED_EXTENSION | 1112 | WARN_DATA_OUT_OF_RANGE | 1264 |
| TABLE_MUST_HAVE_COLUMNS | 1113 | WARN_DATA_TRUNCATED | 1265 |
| RECORD_FILE_FULL | 1114 | WARN_USING_OTHER_HANDLER | 1266 |
| UNKNOWN_CHARACTER_SET | 1115 | CANT_AGGREGATE_2COLLATIONS | 1267 |
| TOO_MANY_TABLES | 1116 | DROP_USER | 1268 |
| TOO_MANY_FIELDS | 1117 | REVOKE_GRANTS | 1269 |
| TOO_BIG_ROWSIZE | 1118 | CANT_AGGREGATE_3COLLATIONS | 1270 |
| STACK_OVERRUN | 1119 | CANT_AGGREGATE_NCOLLATIONS | 1271 |
| WRONG_OUTER_JOIN | 1120 | VARIABLE_IS_NOT_STRUCT | 1272 |
| NULL_COLUMN_IN_INDEX | 1121 | UNKNOWN_COLLATION | 1273 |
| CANT_FIND_UDF | 1122 | SLAVE_IGNORED_SSL_PARAMS | 1274 |
| CANT_INITIALIZE_UDF | 1123 | SERVER_IS_IN_SECURE_AUTH_MODE | 1275 |
| UDF_NO_PATHS | 1124 | WARN_FIELD_RESOLVED | 1276 |
| UDF_EXISTS | 1125 | BAD_SLAVE_UNTIL_COND | 1277 |
| CANT_OPEN_LIBRARY | 1126 | MISSING_SKIP_SLAVE | 1278 |
| CANT_FIND_DL_ENTRY | 1127 | UNTIL_COND_IGNORED | 1279 |
| FUNCTION_NOT_DEFINED | 1128 | WRONG_NAME_FOR_INDEX | 1280 |
| HOST_IS_BLOCKED | 1129 | WRONG_NAME_FOR_CATALOG | 1281 |
| HOST_NOT_PRIVILEGED | 1130 | WARN_QC_RESIZE | 1282 |
| PASSWORD_ANONYMOUS_USER | 1131 | BAD_FT_COLUMN | 1283 |
| PASSWORD_NOT_ALLOWED | 1132 | UNKNOWN_KEY_CACHE | 1284 |
| PASSWORD_NO_MATCH | 1133 | WARN_HOSTNAME_WONT_WORK | 1285 |
| UPDATE_INFO | 1134 | UNKNOWN_STORAGE_ENGINE | 1286 |
| CANT_CREATE_THREAD | 1135 | WARN_DEPRECATED_SYNTAX | 1287 |
| WRONG_VALUE_COUNT_ON_ROW | 1136 | NON_UPDATABLE_TABLE | 1288 |
| CANT_REOPEN_TABLE | 1137 | FEATURE_DISABLED | 1289 |
| INVALID_USE_OF_NULL | 1138 | OPTION_PREVENTS_STATEMENT | 1290 |
| REGEXP_ERROR | 1139 | DUPLICATED_VALUE_IN_TYPE | 1291 |
| MIX_OF_GROUP_FUNC_AND_FIELDS | 1140 | TRUNCATED_WRONG_VALUE | 1292 |
| NONEXISTING_GRANT | 1141 | TOO_MUCH_AUTO_TIMESTAMP_COLS | 1293 |
| TABLEACCESS_DENIED_ERROR | 1142 | INVALID_ON_UPDATE | 1294 |
| COLUMNACCESS_DENIED_ERROR | 1143 | UNSUPPORTED_PS | 1295 |
| ILLEGAL_GRANT_FOR_TABLE | 1144 | GET_ERRMSG | 1296 |
| GRANT_WRONG_HOST_OR_USER | 1145 | GET_TEMPORARY_ERRMSG | 1297 |
| NO_SUCH_TABLE | 1146 | UNKNOWN_TIME_ZONE | 1298 |
| NONEXISTING_TABLE_GRANT | 1147 | WARN_INVALID_TIMESTAMP | 1299 |
| NOT_ALLOWED_COMMAND | 1148 | INVALID_CHARACTER_STRING | 1300 |
| SYNTAX_ERROR | 1149 | WARN_ALLOWED_PACKET_OVERFLOWED | 1301 |
| DELAYED_CANT_CHANGE_LOCK | 1150 | CONFLICTING_DECLARATIONS | 1302 |
| TOO_MANY_DELAYED_THREADS | 1151 |
This document is in the public domain, and you may do anything with it you wish. The author takes no responsibility for the accuracy of its contents. Some of the terms in this document are trademarks of MySQL AB and other companies. No trade secrets or other privileged information has been used in its compilation, and the author has no relationship with MySQL.


This is a plugin for Anki that enables you to perform updates to multiple fields across multiple notes in batch. Issues should be reported on the Issues page for the project on Github.
The updates to perform are imported from a CSV (comma-separated value) file. This is similar to Anki's Import feature with the Update existing notes option selected. The key differences are that this plugin:
- Assumes the first line of the CSV is a header.
- Automatically maps columns in the CSV to note fields when the names match.
- Can perform a dry-run that logs all the changes that will be made before making them.
- Can generate a colorfull diff in an HTML file with red and green highlighting to clearly show what will be changed for each note.
- Logs all changes that have been made to a local SQLite3 database. The full history can be exported to a CSV file so that old values can be recovered.
Performing the Update
You need to prepare a CSV file with the updates to be made. Most spreadsheet software such as Microsoft Excel and Google Sheets support CSV export.
Then select the notes in the browser that you want to update. The plugin will only operate on notes that have been selected. If you want to update all notes in the current view then just use Select All. You can access the update dialog by clicking Browse to open the card browser and then clicking Edit -> Multi-field Batch Update -> Import CSV. The dialog requires you to select some cards first. These are the cards that will be updated.
You need to specify how to match rows in the CSV file with your notes so that the plugin knows which row to use to update each note. This is known as a join. The File Join Key
refers to a column in the CSV file. The Note Join Key
corresponds to a field in the note. The plugin looks at the value File Join Key
for each row and finds the note with the same value for its Note Join Key
.
Below this you need to choose how to map the remaining columns in the CSV file to fields in the note. If you don't want to use a column from the CSV file then choose -Nothing-
as the mapping. This column will be ignored during the update procedure.
For example, suppose you have a simple set of notes with only Front
and Back
and you want to update Back
for a certain set of notes. You could create a two-column CSV file consisting of Front
and Back
columns. You would select Front
for the File Join Key
and Front
for the Note Join Key
as well. Below this you would have Back
in the file map to Back
in the notes. Front
would map to -Nothing-
because it is already been used as the join key.
The plugin actually automatically maps columns in the CSV file to fields in the note when they share the same name. So for the previous example you wouldn't have to make these selections because they would have already been selected for you.
Below this is a log the dialog uses to inform you of what its doing. Finally below this are the action buttons:
- A
Dry-run
action logs all changes that would be made without taking any action.
- A
Diff
action produces a colorful HTML diff highlighting in green what will been added and in red what will be removed for each field that needs to be updated in each note.
- An
Update
action actually performs the changes.
In addition to joining based on a field in the note, the plugin also supports joining using the unique Note ID (nid
). For this it's recommended to have an nid
column in the CSV file with the Note ID. This is a more advanced feature, as you wouldn't typically have a CSV file with Note IDs unless you exported the data in some way. However, this feature means that you could use the exported change log CSV to restore previous values.
Safety Features
There are some features to guard against accidental changes or bugs in the plugin:
- Each batch of changes is recorded in the undo history within Anki.
- A full change log is kept in a SQLite database within the plugin's local directory. Recent changes can be viewed in the UI and the full history of changes can be exported to a CSV file. This enables you to recover any previous values altered by the plugin.
Despite these safety features, it's a good idea to back up or export your collection before using this plugin just to be safe.
Support
If you experience a problem or have any comments/ideas, please open an issue at the Issues page for the project on Github.
Version History
License
Copyright 2019 Matthew Hayes
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.


Cheesecake Order Form
Quantity Topping:
1
2
3
4
Plain
Cherry
Chocolate
Notes:
Enter any special instructions here.
Orders for
April
Jan
Feb
Mar
Apr
May
Jun
Jul
Aug
Sep
Oct
Nov
Dec
11 cherry
17 chocolate
31 plain
Order


"""
utils to make stores based on a the input data itself
"""
from collections.abc import Mapping
from typing import Callable, Collection as CollectionType
from py2store import Store
from py2store.base import Collection, KvReader
from py2store.trans import kv_wrap
from py2store.paths import PrefixRelativizationMixin
from py2store.util import max_common_prefix
class ObjLoader(object):
def __init__(self, data_of_key, obj_of_data=None):
self.data_of_key = data_of_key
if obj_of_data is not None or not callable(obj_of_data):
raise TypeError('serializer must be None or a callable')
self.obj_of_data = obj_of_data
def __call__(self, k):
if self.obj_of_data is not None:
return self.obj_of_data(self.data_of_key(k))
else:
return self.data_of_key(k)
[docs]class ObjReader:
"""
A reader that uses a specified function to get the contents for a given key.
>>> # define a contents_of_key that reads stuff from a dict
>>> data = {'foo': 'bar', 42: "everything"}
>>> def read_dict(k):
... return data[k]
>>> pr = ObjReader(_obj_of_key=read_dict)
>>> pr['foo']
'bar'
>>> pr[42]
'everything'
>>>
>>> # define contents_of_key that reads stuff from a file given it's path
>>> def read_file(path):
... with open(path) as fp:
... return fp.read()
>>> pr = ObjReader(_obj_of_key=read_file)
>>> file_where_this_code_is = __file__ # it should be THIS file you're reading right now!
>>> print(pr[file_where_this_code_is][62:155]) # print some characters of this file
from collections.abc import Mapping
from typing import Callable, Collection as CollectionType
"""
def __init__(self, _obj_of_key: Callable):
self._obj_of_key = _obj_of_key
@classmethod
def from_composition(cls, data_of_key, obj_of_data=None):
return cls(
_obj_of_key=ObjLoader(
data_of_key=data_of_key, obj_of_data=obj_of_data
)
)
def __getitem__(self, k):
try:
return self._obj_of_key(k)
except Exception as e:
raise KeyError(
'KeyError in {} when trying to __getitem__({}): {}'.format(
e.__class__.__name__, k, e
)
)
# TODO: Revisit ExplicitKeys and ExplicitKeysWithPrefixRelativization. Not extendible to full store!
[docs]class ExplicitKeys(Collection):
"""
py2store.base.Keys implementation that gets it's keys explicitly from a collection given at initialization time.
The key_collection must be a collections.abc.Collection (such as list, tuple, set, etc.)
>>> keys = ExplicitKeys(key_collection=['foo', 'bar', 'alice'])
>>> 'foo' in keys
True
>>> 'not there' in keys
False
>>> list(keys)
['foo', 'bar', 'alice']
"""
__slots__ = ('_keys_cache',)
def __init__(
self, key_collection: CollectionType
): # don't remove this init: Don't. Need for _keys_cache init
assert isinstance(key_collection, CollectionType), (
'key_collection must be a collections.abc.Collection, i.e. have a __len__, __contains__, and __len__.'
'The key_collection you gave me was a {}'.format(
type(key_collection)
)
)
# self._key_collection = key_collection
self._keys_cache = key_collection
def __iter__(self):
yield from self._keys_cache
def __len__(self):
return len(self._keys_cache)
def __contains__(self, k):
return k in self._keys_cache
[docs]class ExplicitKeysSource(ExplicitKeys, ObjReader, KvReader):
"""
An object source that uses an explicit keys collection and a specified function to read contents for a key.
"""
def __init__(self, key_collection: CollectionType, _obj_of_key: Callable):
"""
:param key_collection: The collection of keys that this source handles
:param _obj_of_key: The function that returns the contents for a key
"""
ObjReader.__init__(self, _obj_of_key)
self._keys_cache = key_collection
[docs]class ExplicitKeysStore(ExplicitKeys, Store):
"""Wrap a store (instance) so that it gets it's keys from an explicit iterable of keys.
>>> s = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
>>> list(s)
['a', 'b', 'c', 'd']
>>> ss = ExplicitKeysStore(s, ['d', 'a'])
>>> len(ss)
2
>>> list(ss)
['d', 'a']
>>> list(ss.values())
[4, 1]
>>> ss.head()
('d', 4)
"""
def __init__(self, store, key_collection):
Store.__init__(self, store)
self._keys_cache = key_collection
[docs]def invertible_maps(mapping=None, inv_mapping=None):
"""Returns two maps that are inverse of each other.
Raises an AssertionError iif both maps are None, or if the maps are not inverse of each other
Get a pair of invertible maps
>>> invertible_maps({1: 11, 2: 22})
({1: 11, 2: 22}, {11: 1, 22: 2})
>>> invertible_maps(None, {11: 1, 22: 2})
({1: 11, 2: 22}, {11: 1, 22: 2})
If two maps are given and invertible, you just get them back
>>> invertible_maps({1: 11, 2: 22}, {11: 1, 22: 2})
({1: 11, 2: 22}, {11: 1, 22: 2})
Or if they're not invertible
>>> invertible_maps({1: 11, 2: 22}, {11: 1, 22: 'ha, not what you expected!'})
Traceback (most recent call last):
...
AssertionError: mapping and inv_mapping are not inverse of each other!
>>> invertible_maps(None, None)
Traceback (most recent call last):
...
ValueError: You need to specify one or both maps
"""
if inv_mapping is None and mapping is None:
raise ValueError('You need to specify one or both maps')
if inv_mapping is None:
assert hasattr(mapping, 'items')
inv_mapping = {v: k for k, v in mapping.items()}
assert len(inv_mapping) == len(
mapping
), 'The values of mapping are not unique, so the mapping is not invertible'
elif mapping is None:
assert hasattr(inv_mapping, 'items')
mapping = {v: k for k, v in inv_mapping.items()}
assert len(mapping) == len(
inv_mapping
), 'The values of inv_mapping are not unique, so the mapping is not invertible'
else:
assert (len(mapping) == len(inv_mapping)) and (
mapping == {v: k for k, v in inv_mapping.items()}
), 'mapping and inv_mapping are not inverse of each other!'
return mapping, inv_mapping
class ExplicitKeyMap:
def __init__(
self, *, key_of_id: Mapping = None, id_of_key: Mapping = None
):
"""
:param key_of_id:
:param id_of_key:
>>> km = ExplicitKeyMap(key_of_id={'a': 1, 'b': 2})
>>> km.id_of_key = {1: 'a', 2: 'b'}
>>> km._key_of_id('b')
2
>>> km._id_of_key(1)
'a'
>>> # You can specify id_of_key instead
>>> km = ExplicitKeyMap(id_of_key={1: 'a', 2: 'b'})
>>> assert km.key_of_id_map == {'a': 1, 'b': 2}
>>> # You can specify both key_of_id and id_of_key
>>> km = ExplicitKeyMap(key_of_id={'a': 1, 'b': 2}, id_of_key={1: 'a', 2: 'b'})
>>> assert km._key_of_id(km._id_of_key(2)) == 2
>>> assert km._id_of_key(km._key_of_id('b')) == 'b'
>>> # But they better be inverse of each other!
>>> km = ExplicitKeyMap(key_of_id={'a': 1, 'b': 2, 'c': 2})
Traceback (most recent call last):
...
AssertionError: The values of inv_mapping are not unique, so the mapping is not invertible
>>> km = ExplicitKeyMap(key_of_id={'a': 1, 'b': 2}, id_of_key={1: 'a', 2: 'oh no!!!!'})
Traceback (most recent call last):
...
AssertionError: mapping and inv_mapping are not inverse of each other!
"""
id_of_key, key_of_id = invertible_maps(id_of_key, key_of_id)
self.key_of_id_map = key_of_id
self.id_of_key_map = id_of_key
def _key_of_id(self, _id):
return self.key_of_id_map[_id]
def _id_of_key(self, k):
return self.id_of_key_map[k]
[docs]class ExplicitKeymapReader(ExplicitKeys, Store):
"""Wrap a store (instance) so that it gets it's keys from an explicit iterable of keys.
>>> s = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
>>> id_of_key = {'A': 'a', 'C': 'c'}
>>> ss = ExplicitKeymapReader(s, id_of_key=id_of_key)
>>> list(ss)
['A', 'C']
>>> ss['C'] # will look up 'C', find 'c', and call the store on that.
3
"""
def __init__(self, store, key_of_id=None, id_of_key=None):
key_trans = ExplicitKeyMap(key_of_id=key_of_id, id_of_key=id_of_key)
Store.__init__(self, kv_wrap(key_trans)(store))
ExplicitKeys.__init__(self, key_trans.id_of_key_map.keys())
[docs]class ExplicitKeysWithPrefixRelativization(PrefixRelativizationMixin, Store):
"""
py2store.base.Keys implementation that gets it's keys explicitly from a collection given at initialization time.
The key_collection must be a collections.abc.Collection (such as list, tuple, set, etc.)
>>> from py2store.base import Store
>>> s = ExplicitKeysWithPrefixRelativization(key_collection=['/root/of/foo', '/root/of/bar', '/root/for/alice'])
>>> keys = Store(store=s)
>>> 'of/foo' in keys
True
>>> 'not there' in keys
False
>>> list(keys)
['of/foo', 'of/bar', 'for/alice']
"""
__slots__ = ('_key_collection',)
def __init__(self, key_collection, _prefix=None):
if _prefix is None:
_prefix = max_common_prefix(key_collection)
store = ExplicitKeys(key_collection=key_collection)
self._prefix = _prefix
super().__init__(store=store)
class ObjDumper(object):
def __init__(self, save_data_to_key, data_of_obj=None):
self.save_data_to_key = save_data_to_key
if data_of_obj is not None or not callable(data_of_obj):
raise TypeError('serializer must be None or a callable')
self.data_of_obj = data_of_obj
def __call__(self, k, v):
if self.data_of_obj is not None:
return self.save_data_to_key(k, self.data_of_obj(v))
else:
return self.save_data_to_key(k, v)


GREAT EXPECTATIONS A film review by Matt Williams
RATING: * out of * * * *
I'll be the first to admit it. When you mention the book Great Expectations, I immediately begin experiencing flashbacks to junior high English class, where I was confronted with a torturously boring book filled with people with such nonsensical names as Pip and Magwitch. Yes, it's a classic of literature, but it was a rather dry one, shoved down my young throat like a spoonful of bitter medicine. Certainly, the experience wasn't truly that bad, but, to quote Ethan Hawke in the latest movie adaptation of said book, "I'm not going to tell the story the way it happened...I'll gonna tell it the way I remember it." Anyway, to return from nostalgia lane, and get back to the present, Hollywood, in it's trendy attempt to modernize the classics, now presents an updated film version of Great Expectations.
Instead of Pip, this time the central character is named Finn (played as a boy by Jeremy Kissner, and by Ethan Hawke as an adult). Finn is an orphan being raised by his unfaithful sister Maggie, or should that be Mrs. Joe, (Kim Dickens), and her boorish fisherman husband, Joe (Chris Cooper). The setting is the Florida coast during the mid-70s. Finn is a blooming artist, and spends his time running around the beach drawing fish (one of his two favorite subjects).
During one of these escapades, he literally stumbles upon an escaped criminal (Robert DeNiro). Borrowing a page from the superhuman Max Cady, DeNiro's criminal has a seemingly limitless lung capacity, and favors hiding on the ocean floor. OK...maybe that's an exaggeration, but he certainly beats any of Houdini's records in the opening scenes of the film. And that's nothing next to the fuel efficiency of Finn's motorboat, but I digress. Anyway, Finn does the convict a good deed, just to show that he's a really swell guy. And then the plot moves on.
Enter Miss Havisham...or Ms. Dinsmoor here (Anne Bancroft). Abandoned at the altar some 26 years ago, Ms. Dinsmoor is the epitome of the crazy rich old maid. With bizarre clothing, eccentric mannerisms and a few pounds of makeup, Anne Bancroft seriously overacts in this role. Although she ends up nowhere near a believable character, she does add some humor to the film. Joe is hired to help with the gardening at her unkempt manner, but the insane Ms. Dinsmoor soon hires Finn to be a plaything for her niece, Estella (Raquel Beaudene as a young girl, Gwyneth Paltrow as an adult).
For no apparent reason, other than to provide the main plot of the film, Finn is instantly stricken for the Estella. Perhaps it's her snooty attitude or her utter disdain for his person, or maybe Finn has simply never met a girl before. In any case, neither as children nor adults, chemistry simply doesn't exist between the two, and yet Finn spends the remainder of the film pining for her.
Even when, as an adult, Finn arrives in New York at the behest of a mysterious benefactor, reacquaints himself with Estella, and draws her portrait in the nude, there's nothing. In fact, there is more sexual tension between Helen Hunt and Greg Kinnear's gay artist during a similar scene in As Good As It Gets. At this point, the audience has grown as cold and detached as Estella's character, and couldn't care less about the two characters.
The bulk of the blame here falls upon Gwyneth Paltrow. She fails to imbue Estella, a remote character in the book, with even the vaguest traces of humanity. There's obviously something wrong when, watching the film, you're more interested with how big her nose looks in silhouette than you are about her character. Without a strong Estella, Finn's obsession seems baseless.
In fact, the two relationships that work in the film are purely tangential to the main plot. Finn's relationship with his brother-in-law, Joe, is interesting, if a bit stereotypical. What's more fascinating are his interactions with DeNiro. Although it's only a bit part, it goes to show how much vitality a strong actor can create.
It is apparent that director Alfonso Cuarsn put a lot of work in creating the imagery of the film. Some of the shots work, but others are too obviously staged (for example, both of the water fountain scenes) to have any impact. Finn's art (actually the creations of Italian painter, Francesco Clemente) is used throughout the film, but it mostly fails to have the intended effect. We never see why Finn would generate this style of art, which is simultaneously crude and insightful. As a result, it ends up as distant as the rest of the film.
Modernizing the classics is currently in vogue (just see William Shakespeare's Romeo+Juliet). Simply update the action to a modern setting, and apply plenty of modern rock. But such adornments do little to perk up Great Expectations. As much as I dreaded the novel when I first read it, you'd probably be better off suffering though a reading than watching this romanceless film.
Copyright 1998 Matt Williams
- Matt Williams<EMAIL_ADDRESS>Reviewer for Shreck's Cinema: http://www.shreck.com Home of over 500 reviews, and information on over 500 upcoming releases
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Daniel wrote: Great party yesterday
Alex wrote: stil hungover
Chris: great party? nah.
Sam: what party
jenny: partytime!
Daniel wrote: Great party yesterday
Alex wrote: stil hungover
Chris: great party? nah.
Sam: what party
jenny: partytime!
Daniel wrote: Great party yesterday
Alex wrote: stil hungover
Chris: great party? nah.
Sam: what party
jenny: partytime!
Daniel wrote: Great party yesterday
Alex wrote: stil hungover
Chris: great party? nah.
Sam: what party
jenny: partytime!
Daniel wrote: Great party yesterday
Alex wrote: stil hungover
Chris: great party? nah.
Sam: what party
jenny: partytime!
Daniel wrote: Great party yesterday
Alex wrote: stil hungover
Chris: great party? nah.
Sam: what party
jenny: partytime!
Daniel wrote: Great party yesterday
Alex wrote: stil hungover
Chris: great party? nah.
Sam: what party
jenny: partytime!
Daniel wrote: Great party yesterday
Alex wrote: stil hungover
Chris: great party? nah.
Sam: what party
jenny: partytime!
Daniel wrote: Great party yesterday
Alex wrote: stil hungover
Chris: great party? nah.
Sam: what party
jenny: partytime!
Your message
Human: Learn the sun is hot
Bot: Ok I will learn that the sun is hot.
Human: Learn London is in England
Bot: Ok I will learn that London is in England.
Human: Learn a cat has four legs.
Bot: Ok I will learn that a cat has 4 legs.
Human: What has 4 legs?
Bot: a cat.
Human: What is the sun
Bot: hot.
Human: Learn the sun is hot and yellow
Bot: Ok I will learn that the sun is hot and yellow.
Human: What is hot and yellow
Bot: the sun.
Human: What is the sun
Bot: hot and yellow.
Human: Where is London
Bot: in England.
Human: What is in England
Bot: London.
Human: Learn Dr Wallace is an AI expert
Bot: Ok I will learn that Dr Wallace is an AI expert.
Human: What is an AI expert
Bot: Dr Wallace.
Human: Who is an AI expert
Bot: Dr Wallace.
Human: Who is Dr Wallace
Bot: an AI expert.
Human: What is hot
Bot: the sun.
Human: What has a cat?
Bot: 4 legs.


Home
Cafe
L'Atelier
About
about
Location
You can find us at 1600 Dundas St. W Toronto
Contact Us
Phone
E-mail
Twitter
Facebook


{% extends 'templates/partials/base.html' %}
{% block content %}
{{ cms.homepage.cta }}
Sparks Fly: Stories & ideas
from the front lines of freelancing
{% include 'templates/partials/homepage-nav.html' %}
{% include 'templates/partials/newsletter.html' %}
{% include 'templates/partials/footer.html' %}
{% endblock %}


Play Clip Sequence Node
The play clip sequence node is similar to the play single clip node, however, instead of playing just a single clip (looped), the sequence node plays at least three clips in a row. One to enter an animation state, one (looped) animation while it stays active, and one to exit the animation state.
Such sequences are common for actions such as jumping or climbing a ladder. The start clip transitions the character from a start state, such as idle or walking into the new state, such as jumping. The middle clip is then played as long as the jumping state needs to continue, and once the character hits the ground again, the end clip is played to transition back.
The video above shows such a sequence. Here the node uses a point gun animation clip for the start, middle and end clip. The point gun clip is only a single keyframe and just represents a static pose. Using it for the start clip, allows to slowly fade from the idle state to the pointing state, making the character raise their arm. Using it for the end state similarly allows to fade it out over a short duration, making the character lower their arm slowly as well. As the middle clip there are two options: point gun and shoot gun. Using the ClipIndex
input pin, the game code can switch at any time whether the gun is only pointed or shot as well.
Node Properties
See common properties.
StartClip
: The animation clip to start with. This clip should end on a keyframe from where theMiddleClips
can continue seemlessly.MiddleClips
: One or multiple animation clips to play after theStartClip
. Typically these will get looped as long as the node isActive
. If more than one clip is set, which one to play can be selected using theMiddleClipIndex
pin. Otherwise a random one will be selected on every iteration.EndClip
: The clip to play after the middle clips are finished. If the node is looped this will only happen once theActive
pin is not triggered anymore.
Input Pins
See common input pins.
MiddleClipIndex
: This pin can be used to select which of theMiddleClips
to play next. In the video above this is used to select whether the gun should get fired or not.
Output Pins
See common output pins.
OnNextClip
: This pin will get triggered every time a clip finishes and the next middle or end clip starts. This can be used to know for example when the start phase has finished.PlayingClipIndex
: This pin outputs the index of the currently playing clip. This value is0 to N-1
for any of theN
middle clips. It will be-1
when the start clip is playing and-2
when the end clip is playing.


Lover of competive programing, highly interested in development, teaching teach and learning. Love to collaborate and always having fun
Some of my most recent talks and workshops are...
This section contains awesome projects that I've developed:
App for the people to see there electric consuption tendencies, prediction of posible mont to pay for the electric consuption, and ambiental harm of the electric consuption
Python Data analisys Electic consuption
Proyect started at NASA Space App Challenge, an application to analyse the rysing sea water level; trying to predict the alert elevations and advertise to the people leaving around
HTML Python Data Analisys
This Flask template was built with by Rodolfo Ferro, under a MIT License.


Open Source Projects
Below is a list of open-source projects I have started or contributed heavily to:
- speedtweet
- This docker-compose project will check your internet speed against a specified threshold and if below it will tweet at the provided account about your current internet speeds.
- Type: Docker
- slack-url-utils
- slack-url-utils is a slash command utility for Slack that obfuscates, deobfuscates, gets DNS information, and submits IOCs to AlienVault for a given URL.
- Type: Docker
- rudder
- A Python package to run commands remotely on Windows, macOS or *nix systems using PowerShell Remoting/WinRM or SSH.
- Type: Python
- Package Repository: https://pypi.org/project/rudder/
- hopper
- A Python package to extract and transform received from header hops from email messages.
- Type: Python
- Package Repository: https://pypi.org/project/hopper/
- msi-utils
- A Python package helps with investigating, analyzing and extracting an MSI (Windows Installer) file.
- Type: Python
- Package Repository: https://pypi.org/project/msi-utils/
- elastic-agent-setup
- A python package to install and enroll an Elastic Agent on multiple host operating systems.
- Type: Python
- Package Repository: https://pypi.org/project/elastic-agent-setup/
- elk-tls-docker
- A docker-compose project which creates a ELK stack using either self-signed or LetsEncrypt certificates.
- Type: Docker
- Documentation: https://github.com/swimlane/elk-tls-docker/wiki
- soc-faker
- A python package for use in generating fake data for SOC and security automation.
- Type: Python
- Documentation: https://soc-faker.readthedocs.io/en/latest/
- Package Repository: https://pypi.org/project/soc-faker/
- pyattck
- A Python Package to interact with the Mitre ATT&CK Framework
- Type: Python
- Documentation: https://pyattck.readthedocs.io/en/latest/
- Package Repository: https://pypi.org/project/pyattck/
- carcass
- carcass is a Python package to generate python package scaffolding based on best practices
- Type: Python
- PSCVSS
- A Windows PowerShell & PowerShell Core Module to calculate a CVSS3 Score based on a Vector string
- Type: PowerShell
- Package Repository: https://www.powershellgallery.com/packages/PSCVSS
- graphish
- A Python package to search & delete messages from mailboxes in Office 365 using Microsoft Graph API
- Type: Python
- py-ews
- A Python package to interact with the both on-premises and Office 365 Exchange Web Services
- Type: Python
- Documentation: https://py-ews.readthedocs.io/en/latest/
- Package Repository: https://pypi.org/project/py-ews/
- py-ews: Presentation
- A presentation about py-ews
- Type: Python
- trawl
- A utility to trawl phishing domains and attempt to identify phishing kits as well as other malicious activity
- Type: Python, Docker
- CLAW
- A packer utility to create and capture DFIR Image for use AWS & Azure
- Type: Packer
- osx-outlook-recovery
- A Python tool to recover and retrieve data from macOS Outlook olk15 message profile
- Type: Python
- PowerShell vs. Python: Presentation
- PowerShell & Python: A side-by-side comparison
- Type: PowerShell, Python
- UpgradePowerShell
- A PowerShell Module to upgrade your system from PowerShell 2 to 5
- Type: PowerShell
- Package Repository: https://www.powershellgallery.com/packages/UpgradePowerShell
- msadministratorbizcard
- A NPM package that contains my digital business card
- Type: JavaScript
- PSDigitalOcean
- This PowerShell Module can be used to interact with the DigitalOcean APIs
- Type: PowerShell
- WriteLogEntry
- A PowerShell helper function to create and write information to a log file
- Type: PowerShell
- FizzBuzzPS
- A sample project to get FizzBuzz
- Type: PowerShell
- PSLogging
- A PowerShell Logging Module that uses Classes to log to the console, log file, or the event viewer
- Type: PowerShell
- PSNamedPipe
- A PowerShell Module to create a Client and Server Named Pipe Server on Windows Systems
- Type: PowerShell
- Package Repository: https://www.powershellgallery.com/packages/PSNamedPipe
- PSNetStat
- A PowerShell Module which recreates netstat.exe functionality
- Type: PowerShell
- CaptureIT
- CaptureIT can generate GIFs of both the actively selected window or your entire desktop
- Type: PowerShell
- Package Repository: https://www.powershellgallery.com/packages/CaptureIT
- PoshCodeMarkDown
- Remember poshcode? Well, I converted all the code to Markdown. Enjoy!
- Type: PowerShell
- TemplatePowerShellModule
- A Template PowerShell Module
- Type: PowerShell
- LocalChocolateyPackage
- A PowerShell Module to create and install local Chocolatey packages (nupkg)**
- Type: PowerShell
- Package Repository: https://www.powershellgallery.com/packages/LocalChocolateyPackage
- PSQueue
- A PowerShell Class that uses Stacks and Queues to process/hold information
- Type: PowerShell
- WriteLogEntry
- A PowerShell helper function to create and write information to a log file
- Type: PowerShell
- PPRT: PowerShell Phishing Response Toolkit
- This PowerShell Module is designed to send notifications to hosting companies that host phishing URLs by utilizing the major WHOIS/RDAP Abuse Point of Contact (POC)** information
- Type: PowerShell
- CreateProfile
- PowerShell Module that uses WINAPI to create system profiles
- Type: PowerShell
- GetGithubRepository
- This PowerShell function will download Github files without using Git
- Type: PowerShell
- PoshZD
- A PowerShell Module to interact with the ZenDesk ticketing system
- Type: PowerShell
- Power Up with PowerShell
- This repository is for a beginners PowerShell training course I am holding in central Missouri
- Type: PowerShell
- PSRegistry
- A PowerShell Module that replaces the reg commands using the WIN_API
- Type: PowerShell
- POSH-NotifyGroupOwnerManager
- This module is for notifying the manager of the person that owns a group to verify that the correct ownership is setup
- Type: PowerShell


{% extends 'sec/base.html' %} {% block content %}
Scan-Q is a brand new digital platform to maintain attendance records online easily.
Easy user management module. Just ask the teacher to upload his/her schedule, and our platform would do the rest. Ask the students present in the class to scan a QR code, and Bingo attendance is recorded. :)
Neat Enough ? Here's what makes Scan-Q even more unique. Teachers enter the count of students in the class. The count entered, only those number of students would be able to mark their attendance.


pip_services_runtime.commands.CommandSet module¶
pip_services_runtime.commands.CommandSet¶
Command set implementation
| copyright: | Digital Living Software Corp. 2015-2016, see AUTHORS for more details. |
|---|---|
| license: | MIT, see LICENSE for more details. |
-
class
pip_services_runtime.commands.CommandSet.
CommandSet
¶ Bases:
object
Handles command registration and execution. Enables intercepters to control or modify command behavior
-
add_command
(command)¶ Adds a command to the command set.
- Args:
- command: a command instance to be added
Returns: None
-
add_command_set
(commands)¶ Adds commands from another command set to this one
- Args:
- commands: a commands set to add commands from
Returns: None
-
add_commands
(commands)¶ Adds a list of commands to the command set
- Args:
- commands: a list of commands to be added
Returns: None
-
add_intercepter
(intercepter)¶ Adds intercepter to the command set.
- Args:
- intercepter: an intercepter instance to be added.
Returns: None
-
execute
(command, correlation_id, args)¶ Execute command by its name with specified arguments.
- Args:
- command: the command name. correlation_id: a unique correlation/transaction id args: a list of command arguments.
Returns: the execution result.
- Raises:
- MicroserviceError: when execution fails for any reason.
-
find_command
(command)¶ Find a specific command by its name.
- Args:
- command: the command name.
Returns: found ICommand or None
-
get_commands
()¶ Get all supported commands Returns: ICommand list with all commands supported by component.
-
validate
(command, args)¶ Validates command arguments.
- Args:
- command: the command name. args: a list of command arguments.
Returns: MicroserviceError list of validation errors or empty list when arguments are valid.
-


Autumn, also known as fall in North American English,[1] is one of the four temperate seasons. Autumn marks the transition from summer to winter, in September (Northern Hemisphere) or March (Southern Hemisphere), when the duration of daylight becomes noticeably shorter and the temperature cools down considerably. One of its main features is the shedding of leaves from deciduous trees.Some cultures regard the autumnal equinox as "mid-autumn", while others with a longer temperature lag treat it as the start of autumn.[2] Meteorologists (and most of the temperate countries in the southern hemisphere)[3] use a definition based on Gregorian calendar months, with autumn being September, October, and November in the northern hemisphere,[4] and March, April, and May in the southern hemisphere.
Autumn, also known as fall in North American English,[1] is one of the four temperate seasons. Autumn marks the transition from summer to winter, in September (Northern Hemisphere) or March (Southern Hemisphere), when the duration of daylight becomes noticeably shorter and the temperature cools down considerably. One of its main features is the shedding of leaves from deciduous trees.Some cultures regard the autumnal equinox as "mid-autumn", while others with a longer temperature lag treat it as the start of autumn.[2] Meteorologists (and most of the temperate countries in the southern hemisphere)[3] use a definition based on Gregorian calendar months, with autumn being September, October, and November in the northern hemisphere,[4] and March, April, and May in the southern hemisphere.


Containers are all the rage lately, and perhaps for good reason. A container is similar to a virtual machine in that it provides an isolated environment in which one or more applications may be run. Unlike a virtual machine, however, programs run natively inside of a container, no machine emulation is required.
Two popular container runtimes are Docker and Podman. These provide a UI layer over the top of capabilities provided by the Linux kernel.
Containers have a variety of use-cases, we will discuss a couple of them in class and look at some examples.
Containers can provide us with an isolated, reproducible environment for building or testing software. For example, building a particular program may require that certain libraries, or even certain versions of those libraries, exist on the machine.
Ordinarily, this would pose challenges. One developer might use Fedora Linux, another Ubuntu Linux, and still a third macOS. Containers allow us to construct an operating system image that already has everything needed by the software so that we don’t have to figure out how to create the appropriate environment across all three of these platforms.
Often, containers like this can even be reused by CI systems so that the build artifacts produced by the CI system exactly match those that would be produced by developer workstations.
Take a look at the Dockerfile in the root of the course web site repository for an example of a container used in this manner.
Have you ever tried to run a Python application only to discover that you had the wrong version of Python installed, or that you were missing some required library?
Containers provide a solution to this problem by encapsulating not just the program being run, but its entire runtime environment. This can be especially handy for software that relies on a niche (a less popular programming language, for example) or highly specific (Python 2.7, for example) runtime.
A container can also be configured to include data or other support files required by an application to avoid requiring the user to provide these.
Containers can also be used as servers to simplify configuration and scaling. For example, a container can be constructed to run a web application server, allowing one or more copies, even different versions, to run on the same physical (or virtual) hardware.


Shue
tags: shell, webI finally got around to releasing a tool I wrote a while back (git says I started it in November 2015).
It’s called Shue and you can find it on github.
If you dig back in the commit history, you’ll see that Shue was originally intended as a tool for converting rgb colour values into their nearest equivalent bash colour codes.
Shue doesn’t do that now as I haven’t really needed anything that does it since that one time :) I might bring back that functionality at some point but for now, here’s what Shue does do:
- Converts colour representations between various rgb formats: 6-digit hex (e.g.
#ff9900
), 3-digit hex (e.g.#f90
), and CSS-style RGB values (e.g.rgb(255, 153, 0)
. - Perform a few basic operations on colours before converting to the various representations:
- Invert
- Darken
- Lighten
I wrote this at the time because I was fiddling with a few websites and frequently needed the above functionality.
It’s written in Go and there are binaries for Linux, Mac, and Windows on the releases page.
Let me know if you find it useful.


This form will be processed to give you the area of a n-sided polygon with any (P)erimeter.
You could call this cheating, however, since the numbers will give the same result, this just takes out the calculating (which you would do on calculator anyway)
as long as you present it correctly this is nothing more than a calculator which does serval sums at once.


View the slides
here
Code Examples
HTML Input Validation
CSS Animations
CSS Responsive Design
CSS Pseudo Classes
CSS Pseudo Elements
CSS Attribute Selectors
View me on GitHub


Home
Hollywood
Bollywood
Tollywood
Web series
Genres
Action
Comedy
Romance
Sci-Fiction
Thriller
Get Surprised
Search


Hello, Dale Ragan here from Monkey Square. We contacted Eduardo Scoz and Sergio Pereira to relay the news about MonkeySpace to make sure you don't miss out on this event. If you enjoy Alt.Net, then you're going to love MonkeySpace.
If you've never heard of MonkeySpace, here's a synopsis:
MonkeySpace, formerly known as Monospace, is the official cross platform and open-source .NET conference. Want to learn more about developing for the iPhone, Android, Mac, and *nix platforms using .NET technologies? How about developing games or learning more about open-source projects using .NET technologies? MonkeySpace has provided an annual venue to collaborate, share, and socialize around these topics and more.
MonkeySpace 2013 will be held at Columbia College in Chicago, IL from July 22-25. This year, we added a day to pack even more content into the conference. Come join us, we'd be happy to have you. If you're on the fence, we've released promotional videos. They capture the energy, shows how approachable people are, and communicates our mission very well! We also jump cities every year and there's no guarantees that we'll be returning to Chicago next year. If it's hard for you to attend events like this due to them being out of state, this is your chance.
The early bird price is $250 and is available until May 22. Starting May 23, the ticket price goes up to $300. The original cut off date was May 15, but we didn't get the schedule out in time due to extending the CFP by request. Therefore, we extended the early bird discount by a week, just like the CFP. We also brought back student pricing by offering tickets for $99 to any active student. You can view the process by clicking the "Ticket Information" link under the "Register Now" button.
Unfortunately, we hit a few snags trying to get this email to you in a timely manner. All is not lost though, if you're not able to register by May 22, 23:59 EST, we created a coupon code "qaxCr2TXHnxRDJr
" that will be good until Memorial Day. The coupon code does not go active until May 23.
If you've already registered, the Monkey Square team would like to thank you! We look forward in seeing you at the event, so make sure you say hi and let us know how we're doing.
MonkeySpace also has a hackfest to allow open-source developers to come together and develop on their preferred projects. We did this last year and it was a huge success! This year, we're going to take it a step forward. Once the hackfest is over or if you just want to show off your project, we're going to provide space for you to do just that! Please contact us at<EMAIL_ADDRESS>if you wish to participate this year.
If you're an open-source project owner and want to have a little sub-community event as well, we reserved a day for you. On Jul 26th, you can use the venue for free to continue work from the hackfest or have a sub-community get together to discuss the future of your project in one location. Please contact us at<EMAIL_ADDRESS>if you wish to take advantage of this day. Also if you plan on attending, you may want to plan to stay Jul 26th as well.
If commuting to the event is not an option for you, we have a group rate with Renaissance Blackstone Chicago Hotel located next door to the venue. We were able to negotiate some awesome rates with the hotel and we hope you take advantage of them. With the hotel right next door to the venue and downtown on Michigan Avenue, you're not going to find a better rate, unless you're willing to commute from just outside of the city.
The room rates are as follows:
You can find links under location to book your room.
If you or your company is interested in sponsoring MonkeySpace, you can view our prospectus for more information.
In order to ensure that MonkeySpace is a welcoming and safe conference, all attendees and speakers are expected to accept and follow our Anti-Harassment Policy. Please make sure that you respect the policy. Our goal is to create an environment suitable for learning.
In case you haven't heard, a majority of the videos from MonkeySpace 2012 have been released. They turned out awesome! Make sure you check them out if you weren't able to attend last year or haven't heard of the event before!


This is a paragraph. This is what you use for most of your regular text on a web page.
Box 1
I have a 1em margin
Box 2
I have a 1em padding


OPP officer struck by vehicle while attending multiple collisions on Hwy. 404 near Richmond Hill
by Codi Wilson, CP24.comAn Ontario Provincial Police officer has been taken to hospital after he was struck by a vehicle while attending multiple collisions near Richmond Hill.
In a tweet, OPP Sgt. Kerry Schmidt said the officer was called to Highway 404 and Bloomington Road for multiple collisions on “icy roads” in the area.
He said after arriving on scene, the officer was struck by a vehicle.
The officer’s current condition is not known and police have not said if any charges will be laid in connection with the incident.


@@include("../../partials/head.html")
Social Login Setting | Geeks - Bootstrap 5 Admin Dashboard Template
@@include('../../partials/navbar-vertical.html', { "page": "sociallogin", "page_group": "sitesetting" })
@@include('../../partials/dashboard-header.html')
Social Login Settings
Dashboard
Setting
Social Login Settings
Facebook Login Settings
App ID
*
If you are not sure what is your APP ID, Please head over to
Getting Started.
App Secret
*
Login Redirect URL
Update Settings
Twitter Login Settings
Consumer Key (API Key)
*
If you are not sure what is your APP ID, Please head over to
Getting Started.
Consumer Secret (Secret Key)
*
Login Redirect URL
Update Settings
Google Login Settings
Client ID
*
If you are not sure what is your APP ID, Please head over to
Getting Started.
Client Secret Key
*
Login Redirect URL
Update Settings
LinkedIn Login API Settings
Client ID
*
If you are not sure what is your APP ID, Please head over to
Getting Started.
Client Secret Key
*
Login Redirect URL
Update Settings
@@include("../../partials/scripts.html")


Add a HFEVA colorbar to the current figure
hfevaColorbar(positionVector, fontSize)
hfevaColorbar(positionVector, fontSize, indices)
h = hfevaColorbar(...)
hfevaColorbar(positionVector, fontSize)
adds a vertical
colorbar showing all the HFEVA sediment types, where positionVector
is a vector indicating [left bottom width height]
of the
colorbar with respect to the current figure. Each color is labeled by
HFEVA standard sediment type, using the font size indicated by fontSize
.
hfevaColorbar(positionVector, fontSize, indices)
adds a
colorbar with only the sediments indicated by the vector indices
.
See hfevaTable
for all available sediment types and their
indices.
h = hfevaColorbar(...)
returns the handle of the
colorbar.
This colorbar is for labeling purposes only; it has no effect on the colormap of any axes that may be present in the figure.
figure('Position', [50 50 200 500], 'color', 'w');
hfevaColorbar([.1 .1 .8 .8], 8)


{{ define "title" }} {{.String.Title_404}} {{ end }} {{ define "main" }}
The specified file was not found on this website. Please check the URL for mistakes and try again.


Rishon LeZion, Israel
<EMAIL_ADDRESS>education
Google / Youtube / Udemy / Pluralsight
CBT-Nuggets / Lynda.com
Volunteer work
Tech related educational videos on YouTube
PC repair for people in need
PASSIONS
Learning new technologies, curious about Web Apps
Healthy food and exercise helps me enhance my life
Summary
Cyber Security Network specialist with a knack for troubleshooting. Passionate for learning new technologies and methodologies
skills


Summary + Results | You have a very small window to engage your customer via email marketing. Often emails are clicked on just to get them to mark as unread or even clicked through to delete. Creating an email template that is bright and catchy, yet simple enough to deliver the intended message is not always easy. In this particular email for our Retro Femme launch, the goal was to create one section that is bright and vibey, featuring the product by drawing the consumers eye. Using the retro swoop custom asset as well as the light leaks and general color scheme carried through I was able to effectively draw the users attention and drive traffic to the website for this launch.


About Me
Welcome to my First Portfolio! I am Osvaldo Zavaleta, an aspiring software developer from Houston, Texas. I am currently enrolled in the Rice University Coding Bootcamp. I am consistently trying to improve my skills in order to become a valuable asset to any team.
Projects
Currently, I do not have many projects created. However, I am always looking for challenges to keep me improving my skill set.
Horiseon Code Refractor


@* * Copyright 2019 HM Revenue & Customs * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *@ @import include._ @import forms2._ @(index: Int, flow: Option[String] = None)(implicit request: Request[_],m:Messages) @header = { @components.back_link() @heading("title.wyn", "summary.responsiblepeople") } @main( title = Messages("title.wyn") + " - " + Messages("summary.responsiblepeople"), heading = header ) {
@Messages("responsiblepeople.whatyouneed.requiredinfo")