|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
This is to define a query for performing complex Attribute Query Operations.
This allows you to define the following:
| Field Summary | |
static short |
MBR_TYPE_ATTRIBUTE_DIMENSION
|
static short |
MBR_TYPE_ATTRIBUTE_MEMBER
|
static short |
MBR_TYPE_ATTRIBUTED_MEMBER
|
static short |
MBR_TYPE_BASE_DIMENSION
|
static short |
MBR_TYPE_BASE_MEMBER
|
static short |
MBR_TYPE_INVALID_MEMBER
Attribute related member (query input/output ) type |
static short |
MBR_TYPE_STANDARD_DIMENSION
|
static short |
MBR_TYPE_STANDARD_MEMBER
|
static short |
OP_ALL
"Any" attribute querying operator. |
static short |
OP_EQ
Equal-to attribute querying operator |
static short |
OP_GT
Greater-Than attribute querying operator |
static short |
OP_GTE
Greater-Than-or-Equal-to attribute querying operator |
static short |
OP_LT
Less-Than attribute querying operator |
static short |
OP_LTE
Less-Than-or-Equal-to attribute querying operator |
static short |
OP_NEQ
Not-equal-to attribute querying operator |
static short |
OP_TYPEOF
Type-of attribute querying operator |
| Method Summary | |
java.lang.Object |
getAttributeValue()
If the attribute value type is String, then a String value object is returned. |
java.lang.Object |
getInputMember()
Returns the input member depending on one of the possible types, such as either IEssMember |
short |
getInputMemberType()
Returns the type of input member defined for attribute querying. |
int |
getMaxMemberCount()
Returns the maximum count of members this query can return. |
short |
getOperationType()
Returns the operator type used. |
short |
getOutputMemberType()
Returns the type of expected member. |
int |
getStartMemberIndex()
Gets the Start Member Index. |
void |
set(short inputMbrType,
short outputMbrType)
Specify the type of input member you are specifying in the query and what type of member you are expecting in the results. |
void |
setAttributeValue(short opernType,
boolean booleanTypeAttrValue)
Use this to query Boolean type of attributes by specifying the attribute value in boolean |
void |
setAttributeValue(short opernType,
double doubleTypeAttrValue)
Use this to query Floating Point type of attributes by specifying the attribute value as a double value and using the Attribute Querying operator of your choice. |
void |
setAttributeValue(short opernType,
long dateTimeTypeAttrValue)
Use this to query Date type of attributes by specifying the attribute value as a timestamp value and using the Attribute Querying operator of your choice. |
void |
setAttributeValue(short opernType,
java.lang.String stringTypeAttrValue)
Use this to query Text based attributes by specifying the attribute value in String |
void |
setInputMember(IEssMember member)
This is to specify the input member/dimension name to query on. |
void |
setInputMember(java.lang.String memberName)
This is to specify the input member/dimension name to query on. |
void |
setMemberRange(int startMemberIndex,
int maxMemberCount)
This is to limit the result of members that will be returned based on your specified counts, to achieve capabilities equivalent to cursoring. |
| Field Detail |
public static final short MBR_TYPE_INVALID_MEMBER
public static final short MBR_TYPE_STANDARD_MEMBER
public static final short MBR_TYPE_STANDARD_DIMENSION
public static final short MBR_TYPE_BASE_MEMBER
public static final short MBR_TYPE_BASE_DIMENSION
public static final short MBR_TYPE_ATTRIBUTE_MEMBER
public static final short MBR_TYPE_ATTRIBUTE_DIMENSION
public static final short MBR_TYPE_ATTRIBUTED_MEMBER
public static final short OP_EQ
public static final short OP_NEQ
public static final short OP_GT
public static final short OP_LT
public static final short OP_GTE
public static final short OP_LTE
public static final short OP_TYPEOF
public static final short OP_ALL
| Method Detail |
public void set(short inputMbrType, short outputMbrType)
Both inputMbrType
and outputMbrType
has be
IEssAttributeQuery.MBR_TYPE_*.
The input member type corresponds to the member you will set
using setInputMember(String)
or setInputMember(IEssMember)
.
inputMbrType
- Input member type (one of the IEssAttributeQuery.MBR_TYPE_*
)outputMbrType
- Expected member type (one of the IEssAttributeQuery.MBR_TYPE_*
)setInputMember(String)
,
setInputMember(IEssMember)
public void setInputMember(java.lang.String memberName)
It is mandatory to specify input member for attribute querying as it wont
make sense without this specification. So, you need to do that either using this
method or setInputMember(IEssMember)
.
Please note you need to specify the type of input member using set(short, short)
.
memberName
- Member or Dimension Name.set(short, short)
public void setInputMember(IEssMember member)
It is mandatory to specify input member for attribute querying as it wont
make sense without this specification. So, you need to do that either using this
method or setInputMember(String)
.
Please note you also need to specify the type of input member using set(short, short)
.
member
- Member or Dimension Name.set(short, short)
public void setAttributeValue(short opernType, java.lang.String stringTypeAttrValue)
String and using the Attribute Querying operator of your choice.
For example,
myIEssAttributeQuery.setAttributeValue(IEssAttributeQuery.OP_NEQ, "Can");
- Parameters:
opernType
- Operator Type as in "IEssAttributeQuery.OP_*
"stringTypeAttrValue
- attribute value
public void setAttributeValue(short opernType, boolean booleanTypeAttrValue)
boolean value and using the Attribute Querying operator of your choice.
For example,
myIEssAttributeQuery.setAttributeValue(IEssAttributeQuery.OP_EQ, true);
- Parameters:
opernType
- Operator Type as in "IEssAttributeQuery.OP_*
"booleanTypeAttrValue
- attribute value.
public void setAttributeValue(short opernType, long dateTimeTypeAttrValue)
For example,
myIEssAttributeQuery.setAttributeValue(IEssAttributeQuery.OP_EQ, 101010102);
opernType
- Operator Type as in "IEssAttributeQuery.OP_*
"dateTimeTypeAttrValue
- attribute value.public void setAttributeValue(short opernType, double doubleTypeAttrValue)
double
value and using the Attribute Querying operator of your choice.
For example,
myIEssAttributeQuery.setAttributeValue(IEssAttributeQuery.OP_EQ, 100.20);
opernType
- Operator Type as in "IEssAttributeQuery.OP_*
"doubleTypeAttrValue
- attribute value.public void setMemberRange(int startMemberIndex, int maxMemberCount)
startMemberIndex
- Starting Member IndexmaxMemberCount
- Maximum number of members expected from the Query.public short getInputMemberType()
public short getOutputMemberType()
public java.lang.Object getInputMember()
IEssMember type or String
.
If there is no input member defined in this query, returns null.
- Returns:
- The input member either as member name or as member object.
public java.lang.Object getAttributeValue()
String
value object is returned.
If the attribute value type is boolean, then a Boolean
value object is returned.
If the attribute value type is DateTime, then a Long
value object is returned.
If the attribute value type is double, then a Double
value object is returned.
If there is no attribute value defined in this query, returns null
.
public short getOperationType()
public int getStartMemberIndex()
public int getMaxMemberCount()
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |


ProcessErrorMode( process )
Returns the process error handling mode.
ERROR_MODES
* ON_ERROR_CONTINUE - Ignores an error during an operation and continues * ON_ERROR_STOP - Stops the process on an error until ProcessContinue() is called
Example:


TED is a nonprofit devoted to spreading ideas, usually in the form of short, powerful talks (18 minutes or less). TED began in 1984 as a conference where Technology, Entertainment and Design converged, and today covers almost all topics — from science to business to global issues — in more than 100 languages. Meanwhile, independently run TEDx events help share ideas in communities around the world.
TEDx is a program which is run under the TED brand to bring a TED-like experience to as many people as possible.
TEDx NSIT is an event filled with brilliant speakers, thought-provoking personalities and mind-blowing conversations. TEDXNSIT is where we unleash new ideas, inspire and inform the community. It takes place in NSIT every year and it gets better each time.
We look forward to motivate and inspire the audience with some unconventional speakers from different walks of life coming together under one roof for the betterment of the community.


Leading to the B.S. in Fraud Examination and Financial Forensics (John Jay College of Criminal Justice)
If youre interested in principles of accounting, finance, law, investigation techniques, ethics, theories of criminology and the forensic accounting field, this program is for you! The program consists of courses which enable you to pursue further education and careers in forensic accounting, accounting, and auditing, as well as financial operations and management fields. After successfully completing the program youll have access to the upper division baccalaureate program in Fraud Examination and Financial Forensics at John Jay College of Criminal Justice.
If youre looking to become a future business professional, this program will give you a broad overview of the business field and the academic foundation for career success. When you graduate, youll be ready to transfer to a bachelors degree program to specialize in a subject specific area. These could include accounting, business, finance or marketing.
Do you like working with numbers? Accounting involves recording, classifying, analyzing and summarizing financial data. As a graduate, you’ll be prepared to enter the job market as junior accountant, accounting clerk, tax examiner or office manager. If you choose to pursue a bachelor’s degree, you’ll be ready for other career paths including auditor, controller and certified public accountant..
The management of information drives many aspects of the modern business world. Learn the principles of information systems, systems analysis, and computer programming, accompanied by “hands-on” projects and applications. After graduation, you will be ready to either enter for the job market or transfer to a bachelor’s degree program for more academic and career opportunities.
Gain the education and skills to enter diverse professional areas including: sales, advertising, product management, market research, retailing, international business, small business management, real estate or insurance.
A career in Music? Put yourself in a creative and supportive environment that nurtures talents and prepares you for transfer to a bachelor's degree program.
The office environment has been revolutionized by rapidly expanding and changing technologies. Queensborough’s Associate in Applied Science (A. A. S.) curriculum in Office Administration and Technology (OAT) prepares students for entry-level positions and career advancement in office administration, office supervision, and office management. Office software skills, communication skills, and writing skills are an integral part of OAT coursework.
If youre currently employed in computer programming or a related business area and want to improve your skills, this program is for you! Youll take a basic core of 18 credits then choose a 12-credit option in Computer Programming or Microcomputer Applications Software.
If youre seeking employment as an office administrative assistant, this one-year college program, which is offered in both the day and evening sessions, provides the essential combination of education and training to give you the edge in a highly competitive job market. To complete the certificate, students can follow one of the concentrations shown below OR select any 16 credits from the courses listed in either of the concentrations to design an Office Administration Assistant Certificate that meets their future career objectives.
If youre already employed in the field or youve just graduated from high school this program can offer you expanded educational opportunities to advance or start your career. The curriculum develops your communication, interpersonal and business management skills. It also provides a broad understanding of the ways in which society deals with health and disease and offers selected exercises in physiology and anatomy. In addition, youll receive instruction in medical office procedures, computer use, coding and billing. Cooperative education experiences will enhance your understanding of the material.
The modern medical office requires individuals trained in medical facility procedures, as well as administrative, technical, and secretarial skills. The Medical Office Assistant Certificate program combines medical secretarial skills with study of basic biological principles, public health sciences, and medical office clinical procedures.


Creating a Complete PythonCard Application from Scratch
by Dan Shafer<EMAIL_ADDRESS>Background
This is the second in a series of PythonCard walk-through documents. It assumes you have either read and worked your way through PythonCard Walk-Through No. 1 which teaches you the basics of working in the PythonCard environment or that you already understand those basics.
Purpose and Scope
The purpose of this walk-through is to walk you, step by step, through the process of creating a PythonCard application. By the time you have finished this walk-through, you will:
- understand how PythonCard's GUI building facilities work
- know how to create a starting point for a new PythonCard application
- have a grasp of the basic event-handling architecture that gives PythonCard applications life
- know how to create menus and menu items in PythonCard and to hook those items up to actions
Over the years as I've played with various GUI tools and development environments, I have traditionally created a simple counter application as a way of getting familiar with the tool's basic operation and gaining some nodding acquaintance with its language and architecture/API. When PythonCard appeared in my life courtesy of my old colleague Kevin Altis, I decided that I should do the same. Kevin encouraged me to document my efforts and this is the result.
This document walks you step by step through the process of creating an intentionally simplistic PythonCard application. I don't claim that this is the best way to accomplish this objective, let alone the only one. It just happens to be the way I approached it. At the end of this tutorial, I will make a few observations about other things that I could have done that would make the example more instructive or interesting. Note that this tutorial describes how this process is handled in PythonCard 0.8.2. Continuing enhancements to the UI, especially in the resourceEditor, will make the process more and more streamlined over time.
The Application
This simple application, the finished result of which is shown in Figure 1, consists of three buttons and a text field. The text field holds a numeric value (represented as a string) which is manipulated by the three buttons. The buttons add 1 to the current value displayed in the field, subtract 1 from that field's value, and reset the field's value to 0.
Figure 1. Finished Counter Walk-Through Application
The Application Creation Process
Creating an application in PythonCard begins with the creation of a basic structure. There are two ways to do this. One is to use the PythonCard Resource Editor (called resourceEditor.py), start with the basic empty window, and code from scratch. The other is to copy an existing application's folder, rename a few basic things, and begin with a somewhat more complete starting point. I'm taking the latter course here.
The process in summary
- Run resourceEditor to create or modify an existing application.
- Lay out the application's window in Resource Editor.
- Script the components that will trigger actions (buttons and/or menus)
- Cleaning up artifacts of the copied program.
Let's go through those steps with my simple Counter tutorial.
A. Run resourceEditor to modify an existing application.
- Make a copy of the "minimal" project folder in the samples folder of the PythonCard distribution. Put into its own folder called "counter." (The folder name isn't important to PythonCard.)
- Rename "minimal.py" to "counter.py" and " minimal.rsrc.py" to "counter.rsrc.py."
- Launch resourceEditor, which is found in the PythonCard distribution's tools folder
- Open the file counter.rsrc.py in the folder you just created. The window looks identical to the minimal application when it is running, except for the menu bar which remains the resourceEditor's menu bar since we are running resourceEditor at the moment) rather than the Counter application's menu bar. Figure 2 depicts this start-up situation. resourceEditor is a "live" editor; the GUI components of the application are running while you edit the window layout.
Figure 2. Startup Screen for Walk-Through Counter Application
B. Laying out the window for the counter tutorial application.
- Select the text field containing the words "Hello PythonCard" by clicking anywhere in it.
- In the Property Editor window, select the "text" property in the right-hand list of properties for the field1 Text Field object. Select the words in the field and delete them with the Backspace key.
- Type the number "42" (or some other number; I just happen to be a Douglas Adams fan) into the box.
- Click Update.
- In the Property Editor window, select the "font" property in the right-hand list of properties for the field1 Text Field object. Click on the "Font" button and set the font size to 24. [Note that there is a bug in the GTK version of wxPython <IP_ADDRESS> that prevents the font from being changed. This will be fixed in the next release of wxPython.]
- Click Update.
- Use the resize handles to shape the field so that the entire value "42" shows. Then position the field near the right edge of the window and approximately centered vertically. (You will probably need to resize the window itself; use the same technique for doing so on your system as you'd use for any window.)
- Select the "editable" property of the Text Field object called field1 and uncheck the checkbox. (By making the field read-only, we avoid the necessity of error-checking that would be required if we let the user enter a value directly into the field.)
- Click Update.
- Select Save from the File menu to save the counter.rsrc.py resource file.
- From the "Components" menu, select "Button"
- In the Property Editor window, select the "name" property in the right-hand list of properties for the Button1 Button object. Change the default name to incrBtn (for "increment button")
- Click Update.
- In the Property Editor window, select the "label" property in the right-hand list of properties for the incrBtn Button object. Change the label from Button1 to Increment.
- Click Update.
- Position this button in the upper left portion of the window.
- Repeat steps 11-15, but this time change the default name to decrBtn (for "decrement button" and the label from Button1 to Decrement. Remember to click the "Update" button in the Property Editor after setting each property.
- Position the Decrement button below the Increment button, approximately in the middle of the window.
- Repeat steps 11-15 one more time. Change the default 'name' to 'resetBtn' and the 'label' to 'Reset'.
- Position the Reset button to the bottom of the vertical row of three buttons.
- Save your work.
Your project should now look like Figure 3.
Figure 3. Project With Buttons Added
C. Scripting the Buttons
Application scripts are stored in the Python (.py) file that represents the application. In this case, that means they are in the file counter.py.
- Using PythonCard's built-in codeEditor or your favorite Python code editor, open the file counter.py. It is a small file with a self-explanatory comment and only one event-handling script right now (which responds to the user selecting Exit from the File menu). codeEditor is found in the tools directory of your PythonCard distribution.
- Delete the last line of the class definition, which currently says pass.
- Enter the following script, remembering that Python is white-space aware so that indentations of lines are significant. Since this is a definition of a method of the class, the first line will be indented, and subsequent lines will be indented twice.
def on_incrBtn_mouseClick(self, event): startValue = int(self.components.field1.text) endValue = startValue + 1 self.components.field1.text = str(endValue)
Let's examine this script because the others we will write are all but identical.
The opening line of a PythonCard event handler always starts with the keyword "def" which is standard Python for function and method definition. The next expression in the line starts with the PythonCard keyword "on_" and is followed by the name of the component we are scripting. In this case, it's the Increment Button, whose name is " incrBtn". After another connecting underscore, the last portion of the handler definition line defines the event for which this handler is to be called. All events take the same basic set of parameters as shown above.
The next lines are simple Python for the most part. The first line defines a variable called "startValue" to which we assign the current contents of the field, coerced to an integer so we can perform arithmetic on it. The second line adds one to the value we just retrieved. The third line assigns this new result to the field's text property after coercing it to a string.
- As long as we're in the application's main code file, let's also make our program a little more internally consistent. Change the name of the class we're creating from Minimal to Counter. At the end of the file, replace "Minimal" with "Counter" in the line that begins "app = ". The result should look like Figure 4.
Figure 4. Code Changes in counter.py
- Save your work.
- From the resourceEditor's File menu, select "Run."
- When the Counter application appears, click on the Increment button and watch the displayed value in the text field to confirm that it is incrementing as expected.
- Exit the application.
- Back in your Python Editor, copy the function we just created for the Increment button and paste it under that function, being sure indentation remains correct.
- Edit the new handler to change the name of the button from incrBtn to decrBtn and the '+' sign to a minus (' - ') sign.
- Create a final handler for the Reset button that looks like this:
def on_resetBtn_mouseClick(self, event): self.components.field1.text = "0"
Figure 5 shows you what your editor window should look like now.
Figure 5. Editor Showing Final Code Changes
- Save your work and test the application again to be sure it still works.
What if the application doesn't run? In that case, you can use the " Run with interpreter" command under the "File" menu to get a look at what errors, if any, are occurring. To see this in action, let's introduce a typographical error into counter.py. (You can skip this discussion if you either already know how to do this or are confident that you'll never create a PythonCard bug that will cause the programs to fail.)
- Open counter.py in your Python editor if it isn't already open.
- Change the word "class" to "classy" and save the program.
- Run the application as you have been doing. You will probably see a brief console window appear and then disappear. Nothing else happens.
- From the File menu in resourceEditor, choose "Run With Interpreter. " This launches your PythonCard application with the Python interpreter in a command console for your system so that you can see what error is being generated.
- You should see a syntax error indicated in the new window. It should be displaying the line where we created the intentional typo. (See Figure 6)
Figure 6. Error Shown in Console Window
- Press Ctrl-Z and Enter to terminate the Python interpreter and close the console window.
- Go back to the counter.py file and fix the line. Save the file and then re-run the application either from the resourceEditor's File menu or from the command line.
D. Cleaning up artifacts of the original program
We already took care of changing the class name and the runtime invocation name of the application from Minimal to Counter. Now let's change the resource file to reflect the program's new name.
In resourceEditor, go to the Edit menu and select "Background Info... " Change the name of the application to "PythonCard Counter" and click OK.
That ends the basic aspect of this second PythonCard walk-through. You now have a finished and working PythonCard application.
Optional Step: Adding a Menu
We'll add one optional step for a program like Counter, one which you may well need to take in any application of even a little greater complexity than this one. We'll add a menu to the application.
- In the resourceEditor, go to the Edit menu and choose "Menu Editor ..."
- A dialog box appears (see Figure 7) with the current menu structure displayed on the left. As you can see, the Counter application, which was started from the sample application called minimal., has a single menu with a single menu choice.
Figure 7. Opening Screen of Menu Editor
- Click on the "New Menu" button. You should see a dialog box like the one in Figure 8.
Figure 8. New Menu Item Dialog Box
- In the editing area to the right of the display showing the menu, change the name of the menu to menuCounterMenu and its label to Counter.
- Now click on "New Menu Item" and add a new menu item named "counterMenuIncrement". Make its label "Increment".
- Click on "New Menu Item" again and do the same for new menu items "Decrement" and "Reset". When you're done your work should look something like Figure 9.
Figure 9. Menu Editor With All Menu Items Defined
- Save your application in resourceEditor.
- Open the counter.py Python code file in your Python editor. Add the handler name shown here:
def on_counterMenuIncrement_select(self, event):
- Copy the three lines of the function in on_incrBtn_mouseClick and paste them into the definition of this menu function. (Be sure levels of indentation are consistent.)
- Follow the same procedure for hooking up the Decrement and Reset menu options. When you're finished, your code window should look something like Figure 10.
Figure 10. All Menu Items Programmed and Ready to Go
- Save your work.
(You'll notice that the new menu doesn't appear in your application in resourceEditor. Rest assured it will be there when you run the application outside resourceEditor.)
- Run the application (see Figure 11) and confirm everything works as expected.
Figure 11. Finished Counter Application With Counter Menu
(NOTE that it would obviously be better design to factor out the duplicated code into methods that handle the increment, decrement and reset buttons and menus as processes and then to call those methods from within the event handlers. We leave that you as an exercise for the reader. Don't you hate when we do that to you?)
$Revision: 1.15 $ : $Author: alextweedly $ : Last update $Date: 2006/04/06 11:00:25 $


{% extends "base.html" %}
{% block title %} Error 400 {% endblock %}
{% block description %}
Browser sends something to the application the
application or server cannot handle.
{% endblock %}
{% block content %}
Browser sends something to the application the
application or server cannot handle.
{% endblock %}


{% extends "templates/base.html" %} {% block body %}
To make this sample run you will need to populate the client_secrets.json file found at:
{{client_secrets}}.
{{client_secrets}}
with information found on the APIs Console.


AngularJS Grails Plugin - Reference Documentation
Authors: Sandro Martini, originally developed by Vladimír Oraný
Version: 1.4.2
1 Introduction
Grails-AngularJS-Resources
Introduction
This plugin makes it possible to use AngularJS in a Grails webapp.All using Grails Resources plugin.License
Licensed under the terms of the Apache License, Version 2.01.1 History
History
- July 2015
- 1.4.2 release
- Updated to AngularJS 1.4.2
- AngularJsAjaxFilters, set default prefix to check all controllers and all action names that starts with 'ajax', but both can be overridden by a configuration variable (resp. angularjs_resources.filter.controllers , angularjs_resources.filter.actions)
- AngularJsAjaxFilters, now returns HTTP error 403 for filtered out queries
- update test webapp 2.4 to show AngularJsAjaxFilters usage, and in one page do an ajax call to ajaxData action of Rest sample Controller (from an xhr right request, and from another non-xhr that is filtered out); update even sample js code to force add the usual (non standard but common) request header used by default in Grails check for xhr requests ('X-Requested-With' set to 'XMLHttpRequest')
- June 2015
- 1.4.1 release
- Updated to AngularJS 1.4.1
- add AngularJsService, and show its usage in the test webapp 2.4
- add AngularJsAjaxFilters, where any method name that starts with ajax must be an Ajax call, and show its usage in the test webapp 2.4
- June 2015
- 1.4.0 release
- Updated to AngularJS 1.4.0
- June 2015
- 1.3.16 release, in maintenance branch 1.3.x
- Updated to AngularJS 1.3.16
- April 2015
- 1.3.15 release
- Updated to AngularJS 1.3.15
- January 2015
- 1.3.10 release
- Updated to AngularJS 1.3.10
- Updated to Resources Plugin 1.2.14
- December 2014
- 1.3.8 release
- Updated to AngularJS 1.3.8
- December 2014
- 1.3.7 release
- Updated to AngularJS 1.3.7
- November 2014
- 1.3.4 release
- Updated to AngularJS 1.3.4
- November 2014
- 1.2.27 release
- Updated to AngularJS 1.2.27
- Revert to an older (but fully working) version of Resources Plugin (1.2.8)
- Note that plugin release <IP_ADDRESS> (updating Resources plugin to 1.2.13) has never been published
- Commit all work in maintenance branch 1.2.x (so all stuff related to 1.3.x is missing from here)
- November 2014
- 1.3.2 release
- Updated to AngularJS 1.3.2
- November 2014
- 1.3.1 release
- Updated to AngularJS 1.3.1
- October 2014
- 1.3.0 release
- Updated to AngularJS 1.3.0
- October 2014
- 1.2.26 release
- Updated to AngularJS 1.2.26
- September 2014
- 1.2.25 release
- Updated to AngularJS 1.2.25
- September 2014
- 1.2.23 release
- Updated to AngularJS 1.2.23
- August 2014
- 1.2.22 release
- Updated to AngularJS 1.2.22
- July 2014
- 1.2.21 release
- Updated to AngularJS 1.2.21
- July 2014
- 1.2.20 release
- Updated to AngularJS 1.2.20
- Fix compatibility with Grails-2.4
- June 2014
- 1.2.17 release
- Updated to AngularJS 1.2.17
- May 2014
- 1.2.16 release
- Updated to AngularJS 1.2.16
- March 2014
- 1.2.15 release
- Updated to AngularJS 1.2.15
- March 2014
- <IP_ADDRESS> release
- Maintenance over 1.2.14 plugin release
- Closed all existing issues
- Fixed no-minification of AngularJS js files in DEV environment (but only there)
- Updated modules, clarified docs, samples, and the test webapp
- March 2014
- 1.2.14 release
- Updated to AngularJS 1.2.14
- Updated to latest Grails Resources Plugin
- February 2014
- 1.2.11 release
- Updated to AngularJS 1.2.11
- December 2013
- 1.2.5 release
- Updated to AngularJS 1.2.5
- Updated to Grails-2.2.x and the Grails Resources plugin 1.2.x
- Improved the test webapp (with samples inside) and related docs
- Small updates/cleanup
- December 2013
- 1.0.9 release
- Last release for AngularJS 1.0.x (it uses AngularJS 1.0.8)
- Last release for Grails-2.0.x and the Grails Resources plugin 1.1.x
- Removed angular-manual/angular-autobind module (published via the resources plugin)
- Updated the test webapp (under test/webapp) for simple examples on how to use the plugin, see sources
- Small updates/cleanup
- September 2013
- 1.0.8 release
- Updated to AngularJS 1.0.8
- Small updates
- August 2013
- 1.0.7 release
- Updated to AngularJS 1.0.7
- July 2013
- 1.0.6 release
- Updated to AngularJS 1.0.6
- My first version (took ownership of the plugin, thanks to the original author), with some cleanup of plugin (removed unnecessary files, and other small adjustments)
- September 2012
- 1.0.2 release
- Updated to AngularJS 1.0.1 or 1.0.2
- Done by plugin original author
2 Usage
Installing the plugin
First you need to install the plugin into a Grails application: using the recommended way, configure it as a dependency inBuildConfig.groovy
:
plugins { runtime ':angularjs-resources:<plugin version>' }
Requirements
- a Servlet container to run the Web application
Description
This plugin adds AngularJS resources to the Grails Application.It uses new Resources Plugin to handle resources gracefully. Just let your AngularJS resources (services, controllers etc.) depend on 'angular' module and it's done. Following AngularJS modules are also provided out of box: angular-animate, angular-aria, angular-cookies, angular-loader, angular-message-format, angular-messages, angular-resource, angular-route, angular-sanitize, angular-touch.There is also controller for AngularJS scenario testing. Just navigate to <app>/nge2e/<scenario-module-name> to see the results. The scenario module must depend on 'angular-scenario'.The plugin serves minified version for environments other than development. If jQuery plugin is installed it automatically depends on it.To simplify usage from applications, additional modules are defined: 'angular-top' with most-common AngularJS scripts, 'angular-all' with all scripts but not test-related scripts, etc.Quick Start
Add AngularJS tags in gsp/html pages (for example for ng-app app), define routes and then create related fragment pages to be included by AngularJS (at client side).Optional, write AngularJS application-specific files (usually app.js, controllers, services, filters, directives, etc.) or put all inline in some page.Optional, in ApplicationResources.groovy, group application-specific files (seen before) in a specific module (for example 'app-js'). In ApplicationResources.groovy, define an application specific module (for example app) and make it dependent on desired AngularJS modules published by the plugin, and maybe even from 'app-js' module just defined. If needed, define even an 'index' module.In gsp pages(or directly in layout pages, for simpler inclusion in all pages) use resource modules defined in the plugin or in the webapp, and then use AngularJS tags as needed (pages could be even static html pages to speedup prototyping, but in this case it's not-so-simple to get js files published by resources plugin in a generic, non-hardcoded way).Note that to call AngularJS from application-specific scripts (inline in page), you must put them after the inclusion of AngularJS scripts (for example at the beginning of the body section), or include it in a r:script tag and optionally force it at the end of head specifying disposition="head".Sample usage
There are some sample/minimal test webapps (under test/webapp) with examples inside on how to use the plugin, see sources.3 Tutorials
Samples
In Plugin sources under the test folder there there are some initial unit and integration tests, and even an inline test webapp (much more useful).AngularJS documentation
Look at AngularJS Tutorial AngularJS TutorialNote that there is even a Reference minimal Template project, to better see how to structure a pure AngularJS application, called Angular-Seed, look at it for more info but note that it's a pure HTML5/JavaScript web application.4 Troubleshooting
Tricks
- angular not defined, in application-specific JavaScript files
- Resources plugin put AngularJS scripts at the end of head section in HTML pages, so to call AngularJS from application-specific scripts (written directly in page, without using Resources Plugin) you must put them after the inclusion of AngularJS scripts (for example at the beginning of the body section), or include it in a r:script
- Module "index" missing in webapp, when trying to use angularjs.Nge2eController
- Remember to define an "index" module in
ApplicationResources.groovy
, needed by Resources plugin
Workarounds
- Running test-app gives: ERROR resource.ResourceMeta - Resource not found: … on some angularjs js files
- All it's good the same, those files are not required in test phase (at least now)
- Resources Plugin with problems when jQuery is enabled
- An older version of the Resources Plugin working (with jQuery) was 1.2.8, otherwise use a new one starting from 1.2.14


Constantly Shipping Refactorings
Recently, two of my favorite hackers, Martin and Tim, have been working on a pretty big refactoring in cloud. In the past our team probably would’ve worked in a topic branch for a few weeks, followed by a painful rebase/merge, followed by a deployment we really hoped we got right. Since this refactor requires db schema changes, we’d prolly have to take the site down for at least a few minutes to do it. They didn’t want to do it this, so they approached the problem in a new way (to us). Here’s what they’re doing.
Unicorn and Zero Downtime Migrations with DataMapper
We moved to unicorn the other month and have found the 0 downtime deploys really liberating. If something is ready to go out to customers, we ship it. We have no planned day of the week or time of day that we ship. On weekdays we normally ship 5-6 times a day and no one ever notices. DB schema changes currently make things a little more difficult. When you add a new model, you create a migration for it, and you ship the model with the migration. This is where Martin and Tim tried something new. Instead of coupling the migration and the model addition, they’re doing the migrations before the model is introduced to the system.
Adding a New Model
So the other day they added a new model, let’s call it User. When they wanted to introduce the User model, they did it in two releases. In the first release they shipped a zero downtime deploy to add the users table. The first release didn’t take advantage of the user model, it was just a normal deploy with the migrations running AFTER the unicorn processes had restarted. In the second release they shipped the User model in another zero downtime deploy that actually started USING the users tabel. Adding a table is pretty trivial if you think about it, but what about removing a column?
Data Transformation/Migration
Have you ever had to rollback a deployment that had data migrations? You need to go find your latest database backup, restore that, extend the outage you took because you hadn’t planned on things going south.
Removing a Column from a Model
Let’s say that during the refactoring they discovered some insanity in our system: tokens in two places, one on the User model and one on the associated class Customer. First deployment they tracked down all the places where the attribute, in this case ‘token’, was accessed directly and removed it.
Here’s an example of the User class before the changes:
class User
include DataMapper::Resource
property :id, Serial
property :token, String, :required => true,
belongs_to :customer, Integer
def valid_token?
token == some_token_verification_method
end
end
Here’s an example of the User class after the changes:
class User
include DataMapper::Resource
property :id, Serial
belongs_to :customer, Integer
def valid_token?
customer.token == some_token_verification_method
end
end
When this code deploys, the User table still has the token field. Shortly after that, they shipped another release with a migration that only removed the newly unused column. Again, 0 downtime. Guess how we do tables? The same way.
Renaming a column
Renaming a column is kinda weird because it takes 4 deploys. On the first deploy, create the new, unused column. On the second deploy, introduce code that starts using the new column and denormalizes the attributes as they’re accessed. This deploy also carries a zero downtime migration that copies the attribute over to the new column. All access to the attribute is now directed to the correct column. On the third deploy, remove all reference to the old column. Finally on the fourth deploy, nuke the old column after the deploy completes. For an example of how the new column usage works, check this snippet out.
class User
include DataMapper::Resource
property :id, Serial
property :token, String, :required => true,
property :tos_accepted, Boolean, :default => false
property :admin, Boolean, :default => false
property :administrator, Boolean, :default => false
timestamps :at
def admin
value = attribute_get(:admin)
value.nil? ? copy_admin : value
end
def admin?
admin
end
def copy_admin
unless update(:admin => adminstrator)
raise "Could not save user: #{errors.full_messages.join(", ")}"
end
admin
end
end
It’s so simple, who cares?
One thing I really love about this is the guys are constantly shipping incremental improvements. There won’t be an evening where they’re forced to work late to ship out their schema changes. You’ll never hear them cursing other developers for introducing changes that mess with their refactoring. Even though they’re focused on a very large refactoring, they’re never a few days off from having something to show. You can watch their progress as the commits flow by. They never entered the mindset that it’s ok to get lost in refactoring wonderland. Solving a problem elegantly doesn’t mean you have to go sit and think up the most beautiful solution ever. Break it down into little pieces and ship ‘em.
Tim, Martin, and I are in the process of automating these kinds of rollouts. We’re testing it right now.
Hiring
We’re also hiring right now. Send me a message on github if you’re interested in working with a top notch group of hackers.


New Research: Vaping Is Incredibly Bad for Your Heart
by Dan RobitzskiThe consensus that vaping is a healthier alternative to smoking cigarettes is crumbling away.
That’s because new research shows that vaping can raise LDL cholesterol — that’s the bad kind — and decrease blood flow just like cigarettes do, according to NBC News. In some ways, in fact, vapes appear to be even worse.
“There is a lot we still don’t know about electronic cigarettes,” Boston University School of Medicine biologist Sana Majid told NBC. “It’s going to take time for us to understand how e-cigarettes affect your heart health.”
Majid worked on one of the two new studies, both of which will be presented at an upcoming American Heart Association meeting.
In one study, which examined 476 healthy participants, the smokers had higher LDL cholesterol and lower HLD cholesterol — that’s the good kind — than non-smokers, and it didn’t matter whether they had used cigarettes or vapes.
The other study demonstrated that vapes dampened the heart’s ability to pump blood during exercise, a long-known health impact of smoking cigarettes. But even after the participants stopped exercising, vape smokers’ blood flow remained lessened whereas cigarette smokers’ returned to normal.
“It’s evidence that there’s something wrong with the blood flow regulation in smokers and maybe even more so in e-cigarette smokers,” Florian Rader, a study author and the director of human physiology at LA’s Smidt Heart Institute at Cedars-Sinai Medical Center, told NBC.
“These products are marketed as healthy alternatives, and yet we see more and more evidence that they’re definitely not healthy,” he said.
READ MORE: E-cigarettes hurt heart health, possibly more than regular cigarettes [NBC News]
More on vaping: The CDC Says It Really Knows What’s Causing “Vape Lung” This Time


Interoperability Standards
A common problem faced by biomedical and health informatics researchers is that data needed to answer a particular research question are not always available in a single database. It is therefore often necessary to integrate data from multiple data sources. To further complicate matters, these data may be stored using various different database schemas and may be encoded using one of a large number of vocabularies. Interoperability standards address these problems by defining a shared format that can be used to transmit data from one health information system to another. These formats often allow for the use of multiple vocabularies and leave it up to the producer and consumer of the data to convert between them.
Why
Interoperability standards exist to enable health information systems to share information with each other in an unambigious way to enable research and the practice of health care.
How
Standards are usually developed over a long period of time by many interested parties. Various special interest groups convene many meetings and organizations such as IHE help define and facilitate testing of higher level data workflows.
Who
Private companies, not-for-profits, and consortia consisting of a large number of diverse stakeholders are all involved in the standards development process. In many cases, anyone can get involved if they have the interest and time.


PLAY ROULETTE
0
3
6
9
12
2
5
8
11
1
4
7
10
1 to 12
1 to 18
EVEN
15
18
21
24
14
17
20
23
13
16
19
22
13 to 24
RED
BLACK
27
30
33
36
26
29
32
35
25
28
31
34
25 to 36
ODD
19 to 36
3RD ROW
2ND ROW
1ST ROW
SPIN WHEEL
GAME INFORMATION
CURRENT SCORE IS: 100
CURRENT NUMBER OF SELECTIONS: 0
WIN/LOSS IN CURRENT GAME: 0
CLEAR BOARD
NEW GAME
INSTRUCTIONS
CREATED BY SHENIL & ADIT
THE NUMBER IS...


Clem Auyeung designs brands, content, and digital products.
Hiya, I'm a content strategist, UX writer, and designer working at the intersection of editorial and product experience. I collaborate with teams to design the content that goes into websites, mobile apps, software, and conversational interfaces.


JS HomeWork-11 (Promisification)
Please, open the Console, .then press button of task that you want to check.
task-1
task-2
task-3


WITNESS LIST
International Trade & Intergovernmental Affairs Committee
March 6, 2017 - 10:00 AM
NAFTA and Texas
On:
Drake, Celeste (AFL-CIO)
Green, Russell (Self; Rice University Baker Institute)
Joseph, Peter (Invest In The USA (IIUSA))
Lincicome, Scott (Self)
Pablos, Rolando (Self; Texas Secretary of State)
Sposi, Michael (Federal Reserve Bank of Dallas)
Staley, Gil (Self; The Woodlands Area Economic Development Partnership)
Wilson, Christopher (Self)
Organizational Testimony
On:
Daniel, Bryan (Office of the Governor)
Strickland, Jerry (Texas Office of State-Federal Relations)
1


Login | Travels
WELCOME TO
TRAVELS
Login |
Sign up
E-mail address
Password
Remember me
Forgot password?
Login


Troubleshooting
Estimated reading time: 6 minutesLegacy desktop solution. Docker Toolbox is for older Mac and Windows systems that do not meet the requirements of Docker Desktop for Mac and Docker Desktop for Windows. We recommend updating to the newer applications, if possible.
Typically, the QuickStart works out-of-the-box, but some scenarios can cause problems.
Example errors
You might get errors when attempting to connect to a machine (such as with docker-machine env default
) or pull an image from Docker Hub (as with docker run hello-world
).
The errors you get might be specific to certificates, like this:
Error checking TLS connection: Error checking and/or regenerating the certs: There was an error validating certificates for host "<IP_ADDRESS>:2376": dial tcp <IP_ADDRESS>:2376: i/o timeout
Others explicitly suggest regenerating certificates:
Error checking TLS connection: Error checking and/or regenerating the certs: There was an error validating certificates for host "<IP_ADDRESS>:2376": x509: certificate is valid for <IP_ADDRESS>, not <IP_ADDRESS>
You can attempt to regenerate them using 'docker-machine regenerate-certs [name]'.
Be advised that this will trigger a Docker daemon restart which will stop running containers.
Or, indicate a network timeout, like this:
bash-3.2$ docker run hello-world
Unable to find image 'hello-world:latest' locally
Pulling repository docker.io/library/hello-world
Network timed out while trying to connect to https://index.docker.io/v1/repositories/library/hello-world/images. You may want to check your internet connection or if you are behind a proxy.
bash-3.2$
Solutions
Here are some quick solutions to help get back on track. These examples assume the Docker host is a machine called default
.
Regenerate certificates
Some errors explicitly tell you to regenerate certificates. You might also try this for other errors that are certificate and/or connectivity related.
$ docker-machine regenerate-certs default
Regenerate TLS machine certs? Warning: this is irreversible. (y/n): y
Regenerating TLS certificates
Restart the Docker host
$ docker-machine restart default
After the machine starts, set the environment variables for the command window.
$ eval $(docker-machine env default)
Run docker-machine ls
to verify that the machine is running and that this command window is configured to talk to it, as indicated by an asterisk for the active machine (*).
$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
default * virtualbox Running tcp://<IP_ADDRESS>:2376 v1.10.1
Stop the machine, remove it, and create a new one.
$ docker-machine stop default
Stopping "default"...
Machine "default" was stopped.
$ docker-machine rm default
About to remove default
Are you sure? (y/n): y
Successfully removed default
You can use the docker-machine create
command with the virtualbox
driver to create a new machine called default
(or any name you want for the machine).
$ docker-machine create --driver virtualbox default
Running pre-create checks...
(default) Default Boot2Docker ISO is out-of-date, downloading the latest release...
(default) Latest release for github.com/boot2docker/boot2docker is v1.10.1
(default) Downloading
...
Docker is up and running!
To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: docker-machine env default
Set the environment variables for the command window.
$ eval $(docker-machine env default)
Run docker-machine ls
to verify that the new machine is running and that this command window is configured to talk to it, as indicated by an asterisk for the active machine (*).
HTTP proxies and connectivity errors
A special brand of connectivity errors can be caused by HTTP proxy. If you install Docker Toolbox on a system using a virtual private network (VPN) that uses an HTTP proxy (such as a corporate network), you might encounter errors when the client attempts to connect to the server.
Here are examples of this type of error:
$ docker run hello-world
An error occurred trying to connect: Post https://<IP_ADDRESS>:2376/v1.20/containers/create: Forbidden
$ docker run ubuntu echo "hi"
An error occurred trying to connect: Post https://<IP_ADDRESS>:2376/v1.20/containers/create: Forbidden
Configure HTTP proxy settings on Docker machines
When Toolbox creates virtual machines (VMs) it runs start.sh
, where it gets values for HTTP_PROXY
, HTTPS_PROXY
, and NO_PROXY
, and passes them as create
options to create the default machine
.
You can reconfigure HTTP proxy settings for private networks on already-created Docker machines, such as the default
machine, then change the configuration when you are using the same system on a different network.
Alternatively, you can modify proxy settings on your machine(s) manually through the configuration file at /var/lib/boot2docker/profile
inside the VM, or configure proxy settings as a part of a docker-machine create
command.
Both solutions are described below.
Update /var/lib/boot2docker/profile on the Docker machine
One way to solve this problem is to update the file /var/lib/boot2docker/profile
on an existing machine to specify the proxy settings you want.
This file lives on the VM itself, so you need to ssh
into the machine, then edit and save the file there.
You can add your machine addresses as values for a NO_PROXY
setting, and also specify proxy servers that you know about and you want to use. Typically setting your Docker machine URLs to NO_PROXY
solves this type of connectivity problem, so that example is shown here.
-
Use
ssh
to log in to the virtual machine. This example logs in to thedefault
machine.$ docker-machine ssh default docker@default:~$ sudo vi /var/lib/boot2docker/profile
-
Add a
NO_PROXY
setting to the end of the file similar to the example below.# replace with your office's proxy environment export "HTTP_PROXY=http://PROXY:PORT" export "HTTPS_PROXY=http://PROXY:PORT" # you can add more no_proxy with your environment. export "NO_PROXY=192.168.99.*,*.local,169.254/16,*.example.com,192.168.59.*"
-
Restart Docker.
After you modify the
profile
on your VM, restart Docker and log out of the machine.docker@default:~$ sudo /etc/init.d/docker restart docker@default:~$ exit
Re-try Docker commands. Both Docker and Kitematic should run properly now.
When you move to a different network (for example, leave the office’s corporate network and return home), remove or comment out these proxy settings in /var/lib/boot2docker/profile
and restart Docker.
Create machines manually using --engine env to specify proxy settings
Rather than reconfigure automatically-created machines, you can delete them and create your default
machine and others manually with the docker-machine create
command, using the --engine env
flag to specify the proxy settings you want.
Here is an example of creating a default
machine with proxies set to http://example.com:8080
and https://example.com:8080
, and a N0_PROXY
setting for the server example2.com
.
docker-machine create -d virtualbox \
--engine-env HTTP_PROXY=http://example.com:8080 \
--engine-env HTTPS_PROXY=https://example.com:8080 \
--engine-env NO_PROXY=example2.com \
default
To learn more about using docker-machine create
, see the create command in the Docker Machine reference.
beginner, getting started, FAQs, troubleshooting, Docker


| Opcode/Instruction | Op /En | 64/32 bit Mode Support | CPUID Feature Flag | Description |
|---|---|---|---|---|
| F2 0F 2C /r CVTTSD2SI r32, xmm1/m64 | RM | V/V | SSE2 | Convert one double-precision floating-point value from xmm1/m64 to one signed doubleword integer in r32 using truncation. |
| F2 REX.W 0F 2C /r CVTTSD2SI r64, xmm1/m64 | RM | V/N.E. | SSE2 | Convert one double-precision floating-point value from xmm1/m64 to one signed quadword integer in r64 using truncation. |
| VEX.128.F2.0F.W0 2C /r VCVTTSD2SI r32, xmm1/m64 | RM | V/V | AVX | Convert one double-precision floating-point value from xmm1/m64 to one signed doubleword integer in r32 using truncation. |
| VEX.128.F2.0F.W1 2C /r VCVTTSD2SI r64, xmm1/m64 | T1F | V/N.E.1 | AVX | Convert one double-precision floating-point value from xmm1/m64 to one signed quadword integer in r64 using truncation. |
| EVEX.LIG.F2.0F.W0 2C /r VCVTTSD2SI r32, xmm1/m64{sae} | T1F | V/V | AVX512F | Convert one double-precision floating-point value from xmm1/m64 to one signed doubleword integer in r32 using truncation. |
| EVEX.LIG.F2.0F.W1 2C /r VCVTTSD2SI r64, xmm1/m64{sae} | T1F | V/N.E.1 | AVX512F | Convert one double-precision floating-point value from xmm1/m64 to one signed quadword integer in r64 using truncation. |
NOTES: 1. For this specific instruction, VEX.W/EVEX.W in non-64 bit is ignored; the instructions behaves as if the W0 ver-
sion is used.
| Op/En | Operand 1 | Operand 2 | Operand 3 | Operand 4 |
| RM | ModRM:reg (w) | ModRM:r/m (r) | NA | NA |
| T1F | ModRM:reg (w) | ModRM:r/m (r) | NA | NA |
Converts a double-precision floating-point value in the source operand (the second operand) to a signed double-word integer (or signed quadword integer if operand size is 64 bits) in the destination operand (the first operand). The source operand can be an XMM register or a 64-bit memory location. The destination operand is a general purpose register. When the source operand is an XMM register, the double-precision floating-point value is contained in the low quadword of the register.
When a conversion is inexact, the value returned is rounded according to the rounding control bits in the MXCSR register.
If a converted result exceeds the range limits of signed doubleword integer (in non-64-bit modes or 64-bit mode with REX.W/VEX.W/EVEX.W=0), the floating-point invalid exception is raised, and if this exception is masked, the indefinite integer value (80000000H) is returned.
If a converted result exceeds the range limits of signed quadword integer (in 64-bit mode and REX.W/VEX.W/EVEX.W = 1), the floating-point invalid exception is raised, and if this exception is masked, the indefinite integer value (80000000_00000000H) is returned.
Legacy SSE instructions: In 64-bit mode, Use of the REX.W prefix promotes the instruction to 64-bit operation. See the summary chart at the beginning of this section for encoding data and limits.
VEX.W1 and EVEX.W1 versions: promotes the instruction to produce 64-bit data in 64-bit mode.
Note: VEX.vvvv and EVEX.vvvv are reserved and must be 1111b, otherwise instructions will #UD.
Software should ensure VCVTTSD2SI is encoded with VEX.L=0. Encoding VCVTTSD2SI with VEX.L=1 may encounter unpredictable behavior across different processor generations.
(V)CVTTSD2SI (All versions)
IF 64-Bit Mode and OperandSize = 64 THEN DEST[63:0] (cid:197) Convert_Double_Precision_Floating_Point_To_Integer_Truncate(SRC[63:0]); ELSE DEST[31:0] (cid:197) Convert_Double_Precision_Floating_Point_To_Integer_Truncate(SRC[63:0]); FI;
VCVTTSD2SI int _mm_cvttsd_i32( __m128d a);
VCVTTSD2SI int _mm_cvtt_roundsd_i32( __m128d a, int sae);
VCVTTSD2SI __int64 _mm_cvttsd_i64( __m128d a);
VCVTTSD2SI __int64 _mm_cvtt_roundsd_i64( __m128d a, int sae);
CVTTSD2SI int _mm_cvttsd_si32( __m128d a);
CVTTSD2SI __int64 _mm_cvttsd_si64( __m128d a);
Invalid, Precision
| VEX-encoded instructions, see Exceptions Type 3; additionally |
| If VEX.vvvv != 1111B. |
| EVEX-encoded instructions, see Exceptions Type E3NF. |


|
SNP java part
0.0.1
|
Classes | |
| class | DeleteSelection |
| class | ExitAction |
| class | FitContent |
| class | LoadAction |
| class | OptionSupport |
| class | PrintAction |
| class | ResetZoom |
| class | SaveAction |
| class | SnappingConfiguration |
| class | Zoom |
Public Member Functions | |
| void | dispose () |
| final void | start () |
| final void | start (String title) |
| void | addContentTo (final JRootPane rootPane) |
| JPanel | getContentPane () |
Static Public Member Functions | |
| static void | initLnF () |
| static SnappingConfiguration | createDefaultSnappingConfiguration () |
| static JComponent | createActionControl (final Action action) |
| static JComponent | createActionControl (final Action action, final boolean showActionText) |
| static Icon | getIconResource (final String resource) |
Static Public Attributes | |
| static final Dimension | TOOLBAR_SMALL_SEPARATOR = new Dimension(3, 3) |
| static final Icon | SHARED_LAYOUT_ICON = getIconResource("resource/layout.png") |
Protected Member Functions | |
| Base () | |
| Graph2DView | createGraphView () |
| void | configureDefaultRealizers () |
| void | initialize () |
| void | loadGraph (URL resource) |
| GraphMLIOHandler | createGraphMLIOHandler () |
| void | loadGraph (Class aClass, String resourceString) |
| void | loadGraph (String resourceString) |
| void | addHelpPane (final String helpFilePath) |
| JComponent | createHelpPane (final URL helpURL) |
| void | registerViewActions () |
| void | registerViewModes () |
| EditMode | createEditMode () |
| TooltipMode | createTooltipMode () |
| void | registerViewListeners () |
| boolean | isDeletionEnabled () |
| JToolBar | createToolBar () |
| JMenuBar | createMenuBar () |
| Action | createLoadAction () |
| Action | createSaveAction () |
| Action | createDeleteSelectionAction () |
| void | createExamplesMenu (JMenuBar menuBar) |
| String[] | getExampleResources () |
Protected Attributes | |
| Graph2DView | view |
| final JPanel | contentPane |
Abstract base class for GUI- and Graph2DView
-based demos. Provides useful callback methods.
To avoid problems with "calls to overwritten method in constructor", do not initialize the demo within the constructor of the subclass, use the method initialize() instead.
|
protected |
This constructor creates the view and calls, createToolBar() registerViewModes(), registerViewActions(), and registerViewListeners()
|
protected |
Configures the default node realizer and default edge realizer used by subclasses of this demo. The default implementation delegates to Defaults#configureDefaultRealizers(Graph2DView).
|
static |
Creates a control for triggering the specified action from the demo toolbars and displays the action's text and icon, if present.
| action | the Action that is triggered by the created control. |
|
static |
Creates a control for triggering the specified action from the demo toolbars.
| action | the Action that is triggered by the created control. |
| showActionText | true if the control should display the action name; false otherwise. |
|
static |
|
protected |
Callback used by registerViewModes() to create the default EditMode.
|
protected |
Creates a menu to load the example graphs returned by getExampleResources and adds it to the given menu bar.
| menuBar | the menu bar to which the created menu is added. |
|
protected |
Callback used by the default constructor DemoBase() ()} to create the default graph view
|
protected |
Creates the application help pane.
| helpURL | the URL of the HTML help page to display. |
|
protected |
Create a menu bar for this demo.
|
protected |
Creates a toolbar for this demo.
|
protected |
Callback used by registerViewModes() to create a default TooltipMode
.
|
protected |
Returns the list of example graph resources of this demo.
|
static |
Finds an Icon
resource with the specified name. This methods uses
DemoBase.class.getResource(resource)
to resolve resources.
| resource | the name/path of the desired resource. |
Icon
of null
if no icon with the specified name could be found.
|
protected |
This method is called before the view modes and actions are registered and the menu and toolbar is build.
|
static |
Initializes to a "nice" look and feel.
|
protected |
Determines whether default actions for deletions will be added to the view and toolbar.
|
protected |
Instantiates and registers the listeners for the view (e.g. y.view.Graph2DViewMouseWheelZoomListener).
|
protected |
Adds the view modes to the view. This implementation adds a new EditMode created by createEditMode(), a new TooltipMode created by createTooltipMode() and a new AutoDragViewMode.
| final void me.yuechuan.snp.java.Base.start | ( | ) |
Creates an application frame for this demo and displays it. The simple class name is the title of the displayed frame.
| final void me.yuechuan.snp.java.Base.start | ( | String | title | ) |
Creates an application frame for this demo and displays it. The given string is the title of the displayed frame.
|
static |
The dimension of a small separator of the toolbar without divider line. This can be used to separate non-icon components of toolbars.
|
protected |
The view component of this demo.


No.
You have reached the bottom of this chapter. Click on a subject that interests you if you wish to loop back to where it is discussed.
do


Checklist
Warning: this page is out of date.
This page list the steps needed to create a ComplexItem subclass. (Of course, the best way is to make a copy of an existing class that is close to what you need, but this page should help you make sure that you don't miss anything.)
Um, OK, other than that, you can do whatever you want... The best way to do this, really, is just to go and use the existing classes as examples. It's simpler than it sounds.
- Inheritance
- The class must inherit from ::tycho::ComplexItem or one of its subclasses.
- Methods
- Every "method" is implemented as a public procedure. The first three arguments must always be the item ID, the canvas name, and the slate name.
- Constructor and destructor
- The class must contain a procedure called construct with the above three arguments, followed by a list of tags to be attached to components, followed by two or more coordinates, followed by option-value pairs. Unless the class has no options, it must start with this code:
foreach {opt value} [concat [array get optiondefault] $args] { set option([string trimleft $opt -]$id) $value }The construction procedure does not automatically call its superclass "constructors": if your class needs that, you have to do it yourself. The destructor is optional, and is needed only if the class needs to do something other than destroy its components.- Virtual method table
- Complex item classes simulate inheritance explicitly using an array as a "virtual method table." Every class must contain the declaration
common methodtable(Do not change the name!) The class must (in the class body) initialize the table with the contents of the table in its superclass; assuming that the superclass is ComplexItem, the class body then contains:array set methodtable [array get ::tycho::ComplexItem::methodtable]The class must then "override" superclass "methods" with its own. The construct method is compulsory; others are optional. Suppose your class overrides coords (which many classes do), your class body contains:set methodtable(construct) ::tycho::Bar::construct set methodtable(coords) ::tycho::Bar::coordswhere "Bar" is the name of your class. If your class adds options, you must also add the option update procedures (see below).- Instance variables
- "Instance variables" are stored in the common array variable, declared in the ComplexItem class. Index the elements of this array by variable and followed by item id. For example, to set a variable foo, use
set variable(foo$id) "bar"- Option declarations
- For each option, say -foo, the class must contain a public procedure named _foo. Option variable values are stored in the common array option, declared in the ComplexItem superclass. Each element of the array is indexed by the option name (without leading dash) followed by the item id. For example, to read the option foo, use
$option(foo$id)The procedure _foo is called by the IncrCanvas when an option is changed (with its itemconfigure method). The procedure must take, in addition to the usual three arguments, one argument that it assigns to option(foo$id); it can then perform any actions that would normally (in a regular [incr Tcl] object) be done by the configuration body of a public variable or itk_option.
- Option defaults
- The class body must contain the declaration:
common optiondefaultThe class body must contain the declaration:array set optiondefault [array get ::tycho::ComplexItem::optiondefault]Each option defined in this class must have its default value added to this array:
set optiondefault(-foo) bool- Option update
Each option must have its update procedure added to the "virtual method table":
set methodtable(_foo) ::tycho::Bar::_foo- Item shape
- The class body may need to set a different value of the -shape option:
set optiondefault(-shape) rectanglewhere instead of rectangle you could have oval, point, line, or polygon.


My First Heading
My first paragraph.
This is
subscript
and
superscript
this is link
click
Coffee
Tea
Milk
Coffee
Tea
Milk


--- layout: newsstory title: GOAL MACHINE match: Bromsgrove 2 Yeltz 5 ---
The facts are as follows: In the last 9 games we now scored 6 wins and 3 draws, scored 27 goals, of which 16 were scored by the remarkable Steve Piearce . Hurrah!
The latest win at Bromsgrove has sent them down to the Midland Division, and us up to 9th place , only 3 points off 4th. Hurrah!
The supporters are sponsoring the game on Saturday in honour of it being Sean's last game before he moves to Barcelona , so here's hoping we send him off in style.


My Todos
Add TODO
Remove TODO
Jog around the park
Read for 1 hour
Pick up groceries
10 min meditation


Neuromancer
by William Gibson, 1984.
The sky above the port was the color of television, tuned to a dead channel.
So opens William Gibson's debut novel, and it is to his eternal credit that we all still remember the line now, nearly forty years later. I don't usually do audiobooks, but I made an exception for this.
The bartender’s smile widened. His ugliness was the stuff of legend. In an age of affordable beauty, there was something heraldic about his lack of it.
Unlike the majority of the beloved science fiction of my youth, Gibson's poetic, literary style has only increased in my estimation over the subsequent decades.
Cyberspace. A consensual hallucination experienced daily by billions of legitimate operators, in every nation. By children, being taught mathematical concepts. A graphic representation of data abstracted from the banks of every computer in the human system. Unthinkable complexity. Lines of light ranged in the nonspace of the mind, clusters and constellations of data. Like city lights, receding.
The consensual hallucination might seem prosaic now, but one has to remember this was written back when the internet connected less than 1,000 hosts, accessed via green screen text terminals on university campuses.
He'd made the classic mistake, the one he'd sworn he'd never make. He stole from his employers. [...] Of course he was welcome, they told him, welcome to the money. And he was going to need it. Because — still smiling — they were going to make sure he never worked again. They damaged his nervous system with a wartime Russian mycotoxin. Strapped to a bed in a Memphis hotel, his talent burning out micron by micron, he hallucinated for thirty hours. The damage was minute, subtle, and utterly effective. For Case, who lived for the bodiless exultation of cyberspace, it was the Fall. In the bars he'd frequented as a cowboy hotshot, the elite stance involved a certain relaxed contempt for the flesh. The body was meat. Case fell into the prison of his own flesh.
He introduced the world to cyberpunk, combining the fatalistic noire of Blade Runner with the relentless dehumanizing advances of a libertarian tech dystopia, to create a startlingly original warning of our possible future that looks, as the decades tumble by, increasingly on-the-nose.
A year here and he still dreamed of cyberspace, hope fading nightly. All the speed he took, all the turns he'd taken and the corners he cut in Night City, and he'd still see the matrix in his dreams, bright lattices of logic unfolding across that colourless void... The Sprawl was a long, strange way home now over the Pacific, and he was no console man, no cyberspace cowboy. Just another hustler, trying to make it through. But the dreams came on in the Japanese night like livewire voodoo, and he'd cry for it, cry in his sleep, and wake alone in the dark, curled in his capsule in some coffin hotel, hands clawed into the bedslab, temper foam bunched between his fingers, trying to reach the console that wasn't there.
There are several versions of Neuromancer as an audiobook. The slightly abridged six-hour version available for free at the Internet Archive is notable for two things: it is read by William Gibson himself, and it is an extremely low quality rip from an audiocassette.
Night City wasn’t there for its inhabitants, but as a deliberately unsupervised playground for technology itself. Like a deranged experiment in social Darwinism, designed by a bored researcher who kept one thumb permanently on the fast-forward button. Biz here was a constant subliminal hum, and death the accepted punishment for laziness, carelessness, lack of grace, failure to heed the demands of an intricate protocol.
The audio quality might make anyone immediately pass this version by. It isn't just noisy, but features discernible wow and flutter - artifacts characteristic of the stretching or uneven speed of its original tape based media.
He closed his eyes. Found the ridged face of the power stud. And in the bloodlit dark behind his eyes, silver phosphenes boiled in from the edge of space, hypnagogic images jerking past like a film compiled of random frames. Symbols, figures, faces, a blurred, fragmented mandala of visual information. Please, he prayed, now- A gray disk, the color of Chiba sky. Now- Disk beginning to rotate, faster, becoming a sphere of paler gray. Expanding- And flowed, flowered for him, fluid neon origami trick, the unfolding of distanceless home, his country, transparent 3D chessboard extending to infinity. Inner eye opening to the stepped scarlet pyramid of the Eastern Seaboard Fission Authority burning beyond the green cubes of Mitsubishi Bank of America, and high and very far away he saw the spiral arms of the military systems, forever beyond his reach. And somewhere he was laughing, in a white-painted loft, distant fingers caressing the deck, tears of release streaking his face.
But I'd urge you to stick with it. For the author's reedy, Virginia-inflected voice has a cadence that holds the attention. A rhythm of tone and emphasis that, for me, works considerably better than the practiced glossiness of more recent, more professional recordings.
"The moment, I mean the nanosecond, that one of those things starts figuring out ways to make itself smarter, Turing’ll wipe it. Nobody trusts those fuckers, you know that. Every AI ever built has an electromagnetic shotgun wired to its forehead."
By the end of the second chapter, I'd stopped being bothered by the audio quality, and by chapter three, it had become an intrinsic part of the experience.
It was disturbing to think of the Flatline as a construct, a hardwired ROM cassette replicating a dead man's skills, obsessions, kneejerk responses.
[...]
He slotted some ice, connected the construct, and jacked in. It was exactly the sensation of someone reading over his shoulder. He coughed.
"Dix? McCoy? That you man?' His throat was tight.
"Hey, bro," said a directionless voice.
"It's Case, man. Remember?"
"Miami, joeboy, quick study."
"What's the last thing you remember before I spoke to you, Dix?"
"Nothin'."
"Hang on." He disconnected the construct. The presence was gone. He reconnected it. "Dix? Who am I?"
"You got me hung, Jack.
"Remember being here, a second ago?"
"No."
"Know how a ROM personality matrix works?"
"Sure, bro, it's a firmware construct."
"So I jack it into the bank I'm using, I can give it sequential, real time memory?"
"Guess so," said the construct.
"Okay, Dix.  Got me?"
"If you say so," said the construct. "Who are you?"
"Case."
"Miami," said the voice, "joeboy, quick study."
"Right. And for starts, Dix, you and me, we're gonna sleaze over to London grid and access a little data. You game for that?"
"You gonna tell me I got a choice, boy?"
A distortion so thoroughly appropriate to the underlying material it was as though Gibson had planned it this way all along, speaking directly to me via a weak signal, projected through time by the noisy filters of this obsolete electro-mechanical recording mechanism. The words at once clear and irrevocably decayed, fuzzy sounding but still stark and unmistakable in their meaning.
"Dixie?"
"Yeah."
"You ever try to crack an AI?"
"Sure. I flatlined. First time. I was larkin', jacked up real high, out by Rio heavy commerce sector. Big biz, multinationals, Government of Brazil lit up like a Christmas tree. Just larkin' around, you know? And then I started picking up on this one cube, maybe three levels higher up. Jacked up there and made a pass."
"What did it look like, the visual?"
"White cube."
"How'd you know it was an AI?"
"How'd I know? Jesus. It was the densest ice I'd ever seen. So what else was it? The military down there don't have any thing like that. Anyway, I jacked out and told my computer to look it up."
"Yeah?"
"It was on the Turing Registry. AI. Frog company owned its Rio mainframe."
Case chewed his lower lip and gazed out across the plateaus of the Eastern Seaboard Fission Authority, into the infinite neuroelectronic void of the matrix. "Tessier-Ashpool, Dixie?"
"Tessier, yeah."
"And you went back?"
"Sure. I was crazy. Figured I'd try to cut it. Hit the first strata and that's all she wrote. My joeboy smelled the skin frying and pulled the trodes off me.
"And your EEG was flat."
"Well, that's the stuff of legend, ain't it?'
Five out of five stars. A riveting performance.


About Sriram
Latest Works
Screenshots samples from my most recent projects. Please scroll through for detailed case studies.
Want to see more works?
Project Case Studies
A walkthrough of how I take projects from 0 to 1. In other words, A deep dive into my approach to tackling complex problems and crafting design solutions that are intuition-driven and research backed.


| java.lang.Object | |
| ↳ | org.apache.archiva.redback.components.registry.commons.CommonsConfigurationRegistry |
Implementation of the registry component using Commons Configuration. The use of Commons Configuration enables a variety of sources to be used, including XML files, properties, JNDI, JDBC, etc.
The component can be configured using the #properties configuration item, the content of which should take the format of an input to the Commons Configuration configuration builder.| Public Constructors | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Public Methods | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
Add a change listener.
| |||||||||||
Load configuration from the given file.
| |||||||||||
Load configuration from the given file.
| |||||||||||
Load configuration from the given classloader resource.
| |||||||||||
Load configuration from the given classloader resource.
| |||||||||||
Dump the entire registry to a string, for debugging purposes.
| |||||||||||
Get a boolean value from the registry.
| |||||||||||
Get a boolean value from the registry.
| |||||||||||
Get all the keys in this registry.
| |||||||||||
Get an integer value from the registry.
| |||||||||||
Get an integer value from the registry.
| |||||||||||
Get all the keys in this registry.
| |||||||||||
Get a list of strings at the given key in the registry.
| |||||||||||
TODO move to Map which is more generic ?
Get the properties at the given key in the registry.
| |||||||||||
Get a subsection of the registry, identified by the given name.
| |||||||||||
Get a string value from the registry.
| |||||||||||
Get a string value from the registry.
| |||||||||||
Get a subset of the registry, for all keys descended from the given key.
| |||||||||||
Get a list of subsets of the registry, for all keys descended from the given key.
| |||||||||||
Determine if the registry contains any elements.
| |||||||||||
Remove a keyed element from the registry.
| |||||||||||
Remove a keyed subset of the registry.
| |||||||||||
Save any changes to the registry since it was loaded.
| |||||||||||
Set a boolean value in the registry.
| |||||||||||
Set an integer value in the registry.
| |||||||||||
Set a string value in the registry.
|
|
[Expand]
Inherited Methods | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
|
From class
java.lang.Object
| |||||||||||
|
From interface
org.apache.archiva.redback.components.registry.Registry
|
Add a change listener. Note that settings this on the base registry will only detect 'invalidation' events, not individual changes. You should retrieve the named sub-registry to listen for changes.
| listener | the listener |
|---|
Load configuration from the given file.
| file | the location to load the configuration from |
|---|
| RegistryException |
|---|
Load configuration from the given file.
| file | the location to load the configuration from |
|---|---|
| prefix | the location to add the configuration at in the registry |
| RegistryException |
|---|
Load configuration from the given classloader resource.
| resource | the location to load the configuration from |
|---|
| RegistryException |
|---|
Load configuration from the given classloader resource.
| resource | the location to load the configuration from |
|---|---|
| prefix | the location to add the configuration at in the registry |
| RegistryException |
|---|
Dump the entire registry to a string, for debugging purposes.
Get a boolean value from the registry. If not found, the default value is used.
| key | the key in the registry |
|---|---|
| defaultValue | the default value |
Get a boolean value from the registry. If not found, an exception is thrown.
| key | the key in the registry |
|---|
Get all the keys in this registry.
Get an integer value from the registry. If not found, an exception is thrown.
| key | the key in the registry |
|---|
Get an integer value from the registry. If not found, the default value is used.
| key | the key in the registry |
|---|---|
| defaultValue | the default value |
Get all the keys in this registry. Keys are only retrieved at a depth of 1.
Get a list of strings at the given key in the registry.
| key | the key to lookup |
|---|
TODO move to Map which is more generic ? Get the properties at the given key in the registry.
| key | the key to lookup |
|---|
Get a subsection of the registry, identified by the given name. If it doesn't exist, null
will be
returned.
| name | registry section name |
|---|
Get a string value from the registry. If not found, the default value is used.
| key | the key in the registry |
|---|---|
| defaultValue | the default value |
Get a string value from the registry. If not found, null
is returned.
| key | the key in the registry |
|---|
Get a subset of the registry, for all keys descended from the given key.
| key | the key to take the subset from |
|---|
Get a list of subsets of the registry, for all keys descended from the given key.
| key | the key to take the subsets from |
|---|
Determine if the registry contains any elements.
Remove a keyed element from the registry.
| key | the key to remove |
|---|
Remove a keyed subset of the registry.
| key | the subset to remove |
|---|
Set a boolean value in the registry.
| key | the key in the registry |
|---|---|
| value | the value to set |
Set an integer value in the registry.
| key | the key in the registry |
|---|---|
| value | the value to set |
Set a string value in the registry.
| key | the key in the registry |
|---|---|
| value | the value to set |


The project has been started around 2016. Initially, it didn't get very far, because of being overambitious. In particular, the code styles have been difficult. Nevertheless, it has been restarted two, or three times, before being put to actual use in one of my employers projects. (Thanks to Holger Döppert for tasking me with that.)
As of this writing, the project is usable, and most of the intended features are present: We've got an API for working with annotations, we can deal with generics, the two important code styles are available, and the problems in building a class hierarchy of builders, have been resolved.
On the other hand, I am not satisfied with the class structure. (For example, the classes Block, and CodeBlock are definitely somewhat redundant, and I am still not completely happy with the builders. (For example, within a block, I'd like to see the ability to return to the outer block.)
That said, the general ideas have been borrowed from a mature predecessor (JaxMeJS), and the well known, and proven concepts have been adopted, and even refined. There is no reason to assume that these will need to be changed greatly.
In general, the framework should be ready for inspection, for proof of concept work, smaller projects, and the like. It might be a risk to use it for large-scale applications.
However, if you are ready to adjust to a few required changes over time upon adopting a new version should be adopted, then Jsgen should be able to satisfy your expectations quite decently.
Thus, as of 2019, I'd say: Give it a try. It should be worth it.


This is a summary of what I learned–circa 15 months ago–about big picture event storming during a two day workshop with Alberto Brandolini creator of Event Storming. I’ll skip the domain modelling usecase.
I am not sure how useful this is for anyone else, I wrote a blog post about my experience using this tecnique.
The objective of big picture event storming is finding.
Alberto describes three context:
- organization reboot
- startup kickoff
- project kickoff
Find out where the business is today. If the project kickoff is about something in the wrong spot that’s valuable information.
Event storming can be used to get a picture of what a company does. Specifically it outlines what people want to do vs. what the process mandates them to do.
The result is a map. A snapshot of the current situation. Expect all the dysfunction to be visible. Then as a group you can decide to focus on what’s the top priority.
Scenarios
“Maybe your process is doing a great job. Then you don’t need investigation. You’d end up telling a story that is just working.”
For a start-up that doesn’t have any existing infrastructure you can use event storming to scope where they want to be.
For an enterprise with legacy systems you can use event storming to outline their current understanding, the way they think their company works, and according to Alberto more often then not there is a feeling of awe when he runs those sessions. People realized what other division do. This session helps collecting understanding.
“As a facilitator you want to hear/see different voices”
Rule number one
“The number one rule is to get the right people in the room.”
Coming from an Agile Retrospective background where I try to gage the team feelings and interactions before the meeting the first question I had was “do you chat with the individuals before the event storming session?”. The answer was no, because chatting one by one wouldn’t be as effective as hearing those conversations for the first time when the whole group is in the room.
Another question I asked was how do you make sure it’s the right people? You will find out at the end of the session. If the meeting constantly mention James and he’s not in the room perhaps we need him after all. Based on how much influence you have in the company you might not start with the right people in the room but as you show how effective the methodology is you will gain more sponsors.
Anti-patterns
- ask questions first
- agree upfront
- the committee
- start from the beginning
Patterns
- the ice-breaker (someone will eventually put the first domain event… just wait for it… or do it yourself)
- make a mess
- start from the center
- one person one marker
- the inifinite buffet (aka make sure space doesn’t limit the process)
- just do it (I never asked to do it right)
“The goal for an event storming facilitator is to remove impediments. Not enforcing rules or agendas.”
Chaos first then timeline. You start asking individuals to add domain events on orange sticky notes. Don’t worry too much about the order just do it.
You need chaos to challenge the perception people have of reality.
After you made a mess it’s time to start sorting. This is a good time to take care of duplicates. There are different strategies to sort:
- pivotal events
- phases (roles & responsabilities)
- temporal milestones
When you look at pivotal events identify domain event that are critical to your business. One easy way is to identify which events are listening for the pivotal event to happen.
Hotspots + opportunities
After you create this map you can start asking where are the problems?  That’s your superpower! Look at the audience to check if the conversation is relevant to the group.
It’s good to balance out bad with good. Ask the group to add green stickys for opportunities.
Let hotspots be a voice for concerns. Should you focus on a corner case? Look at the rest of the audience, is it a problem for the group? If not move on. Alberto describes how looking at the audience reaction to discovery can lead to interesting next steps. He describes how sometimes individuals are disengaged bored of hearing the same thing again and again… and other times they lean forward and discovered something new about their organization!
People / systems
At this point you add external systems your business relies on. This could be software we own or a SAS. Let system definition be fuzzy. Just make things visible. No wordsmithing.
“A system is “whatever you can put the blame on”.”
Pretty spot-on.
Visualize everything. Start being agressive not on the problem but on the message. Make everything visible so we can see the enemy.
Alberto mentions how making hypothesis in a startup environment is ok. But in a corporate environment a domain expert looking up and scratching beard/head is a sign that this guy is not the real domain expert. Just a proxy.
Alberto mentions the “karaoke singer” where an individual overtake the stage. He suggests to talk with someone that didn’t go live during the workshop. Probably later after the workday ends.
Alberto mentions how event storming can’t solve people problems. He was in a sessions where two individuals wouldn’t establish eye contact… or even talk to each other!
Alberto says he’s got a default plan but it can be hijacked if the group wants to. What to dig on is up to the group.
A suggestion Alberto gave was do not ask permission to run event storming. Say you will run a modelling process. Events grooming / gathering to get a big picture of the business. In some environments this might be easier then getting buy-in for a “new technique”.
Business people will talk about requirements not edge cases.
Telling the story - Enterpise wise defrag
Now it’s time for the facilitator to slowly revisit the flow. Accelerate or jump to section. Set the the tone and have people contradicting you. Ask the audience “please tell your version of the story”. As the facilitator you want to invite someone in the group to be the narrator.
The facilitator is a glue between words and the visible model.
Telling the story backwards - Reverse narrative
This helps making the story more consistent. The facilitator usually leads this. Sometimes it allows to discover new areas.
During this session we’re not looking for completeness. If everybody is forgetting about something maybe it’s not important.
After an event storming session there should be no invisible stuff.
Arrow voting
The group must vote and decide what has higher priority. Explore with no scope limitation but then narrow down to one item.
Don’t use arrow voting with the wrong people in the room.
Your perception of the problem is completely flawed if everybody says the problem is what you don’t expect.
What happens next?
Sometime people just acknowledge problems and opportunities but decide to skip the rollercoaster ride. You want to go on the rollercoaster and have some fun working on this issues! Skipping the ride, or pretending that’s not a problem would be the company’s loss.
What should you do if someone says “oh we know that’s bad” and doesn’t wanna act. What I learned is it depends. Who’s the sponsor? What’s the goal?
End of day 1 you should have priorities and hotspots / opportunities. In the morning of day 2 look for something actionable.
After the workshop you might get impromptu conversations. Go in early the following day. They might adjust the timeline the morning after.
Selection bias
If there is an imbalance–selection bias–on the group and developers vs business arrow situation then the facilitator should mediate between business and developers.
“Can the problem be solved with software? Maybe you’re missing knowledge, expertise, dysfunctional communication patterns.”
During an event storming session you can determing that the symptom is here but the root causes might be somewhere else.
After an event storming session the team got a little bit wiser then at the beginning.
Outcome & formats
Event storming as a regular investment
Alberto runs regular–every 2/3 months–event storming sessions at his company as a way to on-board new team members and to review current process / pain-points. When running it this was you want to ask what’s the best outcome given the time? The point is not to explore everything but rather explore everything enough so that pain points surface. You should design different workshops for different purposes to achieve maximum gain.
During this session you can assess if we can do better then this. If you can we can just go ahead and change it!
I hope this write up give more context to folks interested in event storming. For more info Alberto is working on a book. If you’d like a quicker read I wrote another post about my experience with this technique.


Finally ...
YouTube now respects Android 10's dark theme setting
A server-side update might also be needed to enable the setting.
by Babu MohanWhat you need to know
- The YouTube app has finally received Android 10 dark theme support.
- You can now choose the "Use device theme" under Settings > General > Appearance to get the app to respect Android 10's system-level setting.
- Most first-party apps had gained support for Android 10's dark theme weeks back.
Google began adding support for Android 10's dark mode toggle to most of its own apps soon after the latest version of its mobile operating system was released in September, except for YouTube. Last month, however, some users started receiving an update that replaced the "Dark Theme" menu under Settings > General with a new "Appearance" menu, allowing the app to respect the Android 10 dark mode toggle.
As per the folks at 9to5Google, the latest 14.46.52 version of the YouTube app now follows the device theme set by the user on Android 10. The update was released on the Play Store earlier this week, although the report suggests a server-side switch might also be involved. That said, it shouldn't take too long for the new setting to show up on all devices running Android 10.
To have the YouTube app obey Android 10's system-wde dark mode toggle, you will have to make your way to the new Appearance menu. You can find the menu option by tapping on your profile icon in the YouTube app in the top right corner and then tapping on Settings > General. Once you tap on Appearance, you will be able to choose from three options: "Use device theme", "light theme", and "dark theme." When the "Use device theme" option is selected, the app will follow the system toggle.
YouTube now requires marking whether your content is kid-safe or not


Born and raised in Utah, I learned my love for computers and computer-generated visual effects at an early age. My family's love
for art and filmmaking inspired me to delve deep into computer software, 3D animation, and video editing.
In 2015, I married my beautiful wife Alexis, and we had our son Zealand. Together we worked on several short films and won prestigious awards at
various film festivals. In 2017, we succeeded in winning Best Film for our short film "Goldfish" in the 48 Hour Film Project.
This award allowed us to compete internationally in Paris, France in 2018. Additionally, in 2019, we took home the Best Film and Best Director awards for
our short film "Secret's Out" in the Filmulate Film Festival Demonchaser Horror Fest.
Early in 2020, I started dabbling with web coding and found an aptitude for it. It was then I decided to switch gears and focus on web development
as a career. I enrolled in a coding bootcamp to develop my skills, which allowed me to be more marketable. My experience with film and animation has helped me gain an insight for
design and aesthetics that go hand-in-hand with web coding and layout.


xzdiff
Invokes the diff command on files compressed with xz, lzma, gzip, bzip2, lzop, or zstd.
All options specified are passed directly to diff.
More information: home page
- Compare files:
xzdiff path/to/file1 path/to/file2
- Compare files, showing the differences side by side:
xzdiff --side-by-side path/to/file1 path/to/file2
- Compare files and report only that they differ (no details on what is different):
xzdiff --brief path/to/file1 path/to/file2
- Compare files and report when the files are the same:
xzdiff --report-identical-files path/to/file1 path/to/file2
- Compare files using paginated results:
xzdiff --paginate path/to/file1 path/to/file2
- Compare directories recursively (shows names for differing files/directories as well as changes made to files):
diff --recursive path/to/file1 path/to/file2


For our latest workshop, we will provide an introduction to how drones are used in geospatial aerial surveys. Apply for a slot below.
According to the Civil Aviation Authority of the Philippines, only 8% of licensed drone pilots are women. With this, please note that women applicants will be prioritized to generate interest from an under-represented sector, in which our group would like to focus on.


Able to use codeigniter framework properly
To make a responsive website, I use bootstrap
I use javascript to make web pages more interactive
PHP is the programming language that I chose
I use CSS to beautify web pages, even though there is a bootstrap, I still need my own CSS file
Can use the features of html 5
Thrid place in Bogor Young Scientic Fair event Jungle Land Bogor 2018 category informatika
Graduated from Islamiyah Ciputat Vocational High School