[gecode-users] Compilation problem on MacOs with Gecode 4.3
Christian Schulte
cschulte at kth.se
Mon Oct 13 17:11:37 CEST 2014
Apparently you did compile with Gist, that explains the first thing.
The second I do not know and I will have to leave to an Apple user...
Cheers
Christian
--
Christian Schulte, Professor of Computer Science, KTH,
www.gecode.org/~schulte/
-----Original Message-----
From: users-bounces at gecode.org [mailto:users-bounces at gecode.org] On Behalf
Of Vijay Saraswat
Sent: Monday, October 13, 2014 5:11 PM
To: cschulte at kth.se; users at gecode.org
Subject: Re: [gecode-users] Compilation problem on MacOs with Gecode 4.3
OK that definitely helps -- I get fewer missing symbols from before.
However, -lcodegist did not work:
g++ -v -o money money.o -stdlib=libstdc++ -L/usr/local/lib
-lgecodedriver -lgecodegist -lgecodesearch -lgecodeminimodel -lgecodeint
-lgecodekernel -lgecodesupport Apple LLVM version 5.1 (clang-503.0.40)
(based on LLVM 3.4svn)
Target: x86_64-apple-darwin13.1.0
Thread model: posix
"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolch
ain/usr/bin/ld" -demangle -dynamic -arch x86_64 -macosx_version_min 10.9.0
-syslibroot
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Develop
er/SDKs/MacOSX10.9.sdk -o money -L/usr/local/lib money.o -lgecodedriver
-lgecodegist -lgecodesearch -lgecodeminimodel -lgecodeint -lgecodekernel
-lgecodesupport -lstdc++ -lSystem
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolcha
in/usr/bin/../lib/clang/5.1/lib/darwin/libclang_rt.osx.a
ld: library not found for -lgecodegist
clang: error: linker command failed with exit code 1 (use -v to see
invocation)
This is odd -- there was no error when i did a make to make the system.
Without lcodegist I do get a fewer set of missing symbols:
g++ -v -o money money.o -stdlib=libstdc++ -L/usr/local/lib
-lgecodedriver -lgecodesearch -lgecodeminimodel -lgecodeint -lgecodekernel
-lgecodesupport Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM
3.4svn)
Target: x86_64-apple-darwin13.1.0
Thread model: posix
"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolch
ain/usr/bin/ld" -demangle -dynamic -arch x86_64 -macosx_version_min 10.9.0
-syslibroot
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Develop
er/SDKs/MacOSX10.9.sdk -o money -L/usr/local/lib money.o -lgecodedriver
-lgecodesearch -lgecodeminimodel -lgecodeint -lgecodekernel -lgecodesupport
-lstdc++ -lSystem
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolcha
in/usr/bin/../lib/clang/5.1/lib/darwin/libclang_rt.osx.a
Undefined symbols for architecture x86_64:
"Gecode::Driver::stop(Gecode::Support::Timer&, std::ostream&)",
referenced from:
void Gecode::Driver::ScriptBase<Gecode::Space>::runMeta<Money,
Gecode::DFS, Gecode::Options,
Gecode::Driver::EngineToMeta>(Gecode::Options const&, Money*) in money.o
void Gecode::Driver::ScriptBase<Gecode::Space>::runMeta<Money,
Gecode::DFS, Gecode::Options, Gecode::RBS>(Gecode::Options const&,
Money*) in money.o
"Gecode::branch(Gecode::Home, Gecode::IntVarArgs const&,
Gecode::IntVarBranch, Gecode::IntValBranch, bool (*)(Gecode::Space const&,
Gecode::IntVar, int), void (*)(Gecode::Space const&, Gecode::BrancherHandle
const&, unsigned int, Gecode::IntVar, int, int const&, std::ostream&))",
referenced from:
Money::Money(Gecode::Options const&) in money.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see
invocation)
Best,
Vijay
On 10/13/14, 10:52 AM, Christian Schulte wrote:
> Hi Vijay,
>
> Not being an Apple user, let me still try a guess: you need to add
> additional libraries:
> -lgecodeminimodel -lgecodedriver -lgecodegist
>
> Please use the order as described in MPG.
>
> Good luck
> Christian
>
> --
> Christian Schulte, Professor of Computer Science, KTH,
> www.gecode.org/~schulte/
>
>
> -----Original Message-----
> From: users-bounces at gecode.org [mailto:users-bounces at gecode.org] On
> Behalf Of Vijay Saraswat
> Sent: Monday, October 13, 2014 4:51 PM
> To: users at gecode.org
> Subject: [gecode-users] Compilation problem on MacOs with Gecode 4.3
>
> Continuing with
> http://www.gecode.org/pipermail/users/2014-April/004368.html
>
> I am unable to get the basic example running from the tutorial.
>
> On a MacBook, OS X 10.9.2, XCode 5.1.1, trying to install GECode 4.3
> from the webpage http://www.gecode.org/download.html
>
> Downloaded source package, did a ./configure, make, make-install --
> all seemed to succeed.
>
> The following command succeeds:
>
> $g++ -O3 -I/usr/local/include -stdlib=libstdc++ -c money.cpp
>
> However, the next command fails -- what am I doing wrong?
>
> $g++ -v -o money money.o -L/usr/local/lib -stdlib=libstdc++
> -lgecodesearch -lgecodeint -lgecodekernel -lgecodesupport Apple LLVM
> version 5.1
> (clang-503.0.40) (based on LLVM 3.4svn)
> Target: x86_64-apple-darwin13.1.0
> Thread model: posix
>
> "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xc
> toolch ain/usr/bin/ld" -demangle -dynamic -arch x86_64
> -macosx_version_min 10.9.0 -syslibroot
> /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/D
> evelop er/SDKs/MacOSX10.9.sdk -o money -L/usr/local/lib money.o
> -lgecodesearch -lgecodeint -lgecodekernel -lgecodesupport -lstdc++
> -lSystem
> /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xct
> oolcha in/usr/bin/../lib/clang/5.1/lib/darwin/libclang_rt.osx.a
> Undefined symbols for architecture x86_64:
> "Gecode::LinIntExpr::~LinIntExpr()", referenced from:
> Money::Money(Gecode::Options const&) in money.o
> "Gecode::BaseOptions::help()", referenced from:
> vtable for Gecode::Options in money.o
> "Gecode::BaseOptions::parse(int&, char**)", referenced from:
> _main in money.o
> "Gecode::BaseOptions::~BaseOptions()", referenced from:
> Gecode::Options::~Options() in money.o
> "Gecode::rel(Gecode::Home, Gecode::BoolExpr const&,
> Gecode::IntConLevel)", referenced from:
> Money::Money(Gecode::Options const&) in money.o
> "Gecode::Driver::BaseOption::~BaseOption()", referenced from:
> Gecode::Options::~Options() in money.o
> "Gecode::Driver::CombinedStop::sigint", referenced from:
> void Gecode::Driver::ScriptBase<Gecode::Space>::runMeta<Money,
> Gecode::DFS, Gecode::Options,
> Gecode::Driver::EngineToMeta>(Gecode::Options const&, Money*) in money.o
> void Gecode::Driver::ScriptBase<Gecode::Space>::runMeta<Money,
> Gecode::DFS, Gecode::Options, Gecode::RBS>(Gecode::Options const&,
> Money*) in money.o
> Gecode::Driver::CombinedStop::interrupt(int) in money.o
> Gecode::Driver::CombinedStop::CombinedStop(unsigned int,
> unsigned int, unsigned int) in money.o
> Gecode::Driver::CombinedStop::stop(Gecode::Search::Statistics
> const&, Gecode::Search::Options const&) in money.o
> "Gecode::Driver::StringOption::add(int, char const*, char
> const*)", referenced from:
> _main in money.o
> "Gecode::Driver::StringOption::~StringOption()", referenced from:
> Gecode::Options::~Options() in money.o
> "Gecode::Driver::StringValueOption::~StringValueOption()",
> referenced
> from:
> Gecode::Options::~Options() in money.o
> "Gecode::Driver::am(double*, int)", referenced from:
> void Gecode::Driver::ScriptBase<Gecode::Space>::runMeta<Money,
> Gecode::DFS, Gecode::Options,
> Gecode::Driver::EngineToMeta>(Gecode::Options const&, Money*) in money.o
> void Gecode::Driver::ScriptBase<Gecode::Space>::runMeta<Money,
> Gecode::DFS, Gecode::Options, Gecode::RBS>(Gecode::Options const&,
> Money*) in money.o
> "Gecode::Driver::dev(double*, int)", referenced from:
> void Gecode::Driver::ScriptBase<Gecode::Space>::runMeta<Money,
> Gecode::DFS, Gecode::Options,
> Gecode::Driver::EngineToMeta>(Gecode::Options const&, Money*) in money.o
> void Gecode::Driver::ScriptBase<Gecode::Space>::runMeta<Money,
> Gecode::DFS, Gecode::Options, Gecode::RBS>(Gecode::Options const&,
> Money*) in money.o
> "Gecode::Driver::stop(Gecode::Support::Timer&, std::ostream&)",
> referenced from:
> void Gecode::Driver::ScriptBase<Gecode::Space>::runMeta<Money,
> Gecode::DFS, Gecode::Options,
> Gecode::Driver::EngineToMeta>(Gecode::Options const&, Money*) in money.o
> void Gecode::Driver::ScriptBase<Gecode::Space>::runMeta<Money,
> Gecode::DFS, Gecode::Options, Gecode::RBS>(Gecode::Options const&,
> Money*) in money.o
> "Gecode::branch(Gecode::Home, Gecode::IntVarArgs const&,
> Gecode::IntVarBranch, Gecode::IntValBranch, bool (*)(Gecode::Space
> const&, Gecode::IntVar, int), void (*)(Gecode::Space const&,
> Gecode::BrancherHandle const&, unsigned int, Gecode::IntVar, int, int
> const&, std::ostream&))", referenced from:
> Money::Money(Gecode::Options const&) in money.o
> "Gecode::Options::Options(char const*)", referenced from:
> _main in money.o
> "Gecode::BoolExpr::BoolExpr(Gecode::LinIntRel const&)", referenced
from:
> Money::Money(Gecode::Options const&) in money.o
> "Gecode::BoolExpr::~BoolExpr()", referenced from:
> Money::Money(Gecode::Options const&) in money.o
> "Gecode::operator==(Gecode::LinIntExpr const&, Gecode::LinIntExpr
> const&)", referenced from:
> Money::Money(Gecode::Options const&) in money.o
> "Gecode::operator==(Gecode::IntVar const&, Gecode::IntVar
> const&)", referenced from:
> Money::Money(Gecode::Options const&) in money.o
> "Gecode::operator*(int, Gecode::IntVar const&)", referenced from:
> Money::Money(Gecode::Options const&) in money.o
> "Gecode::operator+(Gecode::LinIntExpr const&, Gecode::IntVar
> const&)", referenced from:
> Money::Money(Gecode::Options const&) in money.o
> "Gecode::operator+(Gecode::LinIntExpr const&, Gecode::LinIntExpr
> const&)", referenced from:
> Money::Money(Gecode::Options const&) in money.o
> "Gecode::operator+(Gecode::IntVar const&, Gecode::LinIntExpr
> const&)", referenced from:
> Money::Money(Gecode::Options const&) in money.o
> "Gecode::operator+(Gecode::IntVar const&, Gecode::IntVar const&)",
> referenced from:
> Money::Money(Gecode::Options const&) in money.o
> "typeinfo for Gecode::BaseOptions", referenced from:
> typeinfo for Gecode::Options in money.o
> ld: symbol(s) not found for architecture x86_64
> clang: error: linker command failed with exit code 1 (use -v to see
> invocation)
> bash-3.2$
>
> _______________________________________________
> Gecode users mailing list
> users at gecode.org
> https://www.gecode.org/mailman/listinfo/gecode-users
>
>
_______________________________________________
Gecode users mailing list
users at gecode.org
https://www.gecode.org/mailman/listinfo/gecode-users
More information about the users
mailing list


Defending champions St Martin's set for Leinster replay as St Rynagh’s seal intermediate crown
It finished 0-10 apiece in the senior provincial final.
by Sinead FarrellDEFENDING CHAMPIONS ST Martin’s are heading for a replay after their Leinster final clash with Dublin’s St Vincent’s ended in a draw.
The Wexford side, who contested the All-Ireland final earlier this year, played out a gripping contest against the Dublin side with the holders leading by just two points at half-time.
Midfielder Amy Cardiff pushed their advantage out to three points shortly after the restart but Vincent’s soon found themselves back on level terms with Alison Maguire finding her range.
The Dublin challengers went into a 0-10 to 0-9 lead inside the closing 10 minutes but Sarah O’Connor produced the equaliser to ensure the sides will have to meet again.
The replay has been scheduled for next Sunday with a time and venue to be decided at a later date.
Meanwhile, Kate Kenny starred as Offaly’s St Rynagh’s emerged as comfortable winners in the intermediate final.
St Rynagh’s dominated the final throughout, and were leading their Laois opponents Camross 2-15 to 0-2 at the break.
Kenny finished with an impressive haul of 3-5 as her side emerged as 4-23 to 0-4 winners.
Leinster Camogie final results
Senior
St Vincent’s (Dublin) 0-10 St Martin’s (Wexford) 0-10
Intermediate
Camross (Laois) 0-4 St Rynagh’s (Offaly) 4-23


Please create a username and password
×
Register
Username taken!
If you've already signed up with this username, please login. Otherwise, choose a new one!
×
Please enter your username and password
×
Login
Incorrect Password!
Please try again. If you've forgotten your password: tough titty. Register again!
×
Unrecognised Username!
Please try again. If you've forgotten your username: tough titty.


Create Account
Select Gender
Male
Female
Cancel
Create Account
Already have account
Copyright © 2019 TeamWork


WITNESS LIST
State Affairs
February 21, 2018 10:00 AM
Attorney General Jurisdiction
ON:
Hacker, David Special Counsel for Civil Litigation (Office of the Attorney General),
Austin, TX
Hays, Susan Attorney (Self), Austin, TX
McFarland, Adrienne Deputy Attorney General for Criminal Justice (Office of the Attorney
General), Austin, TX
Pojman, Ph. D., Joe Executive Director (also providing written testimony) (Texas Alliance
for Life), Austin, TX
Rocap, Blake Legislative Counsel (NARAL Pro-Choice Texas), Austin, TX
Seago, John Legislative Director (Texas Right to Life), Austin, TX
Sparks, Andrea Director, Governor's Child Sex Trafficking Team (Governor's Office),
Austin, TX
Starr, Brantley Deputy First Assistant Attorney General (Office of Attorney General),
Austin, TX
White, Carmen P. Assistant District Attorney - Admin. (Dallas County District Attorney's
Office), Dallas, TX
Wright, Kyleen President (also providing written testimony) (Texans for Life), Arlington,
TX
Providing written testimony:
ON:
Pinon, Adriana Policy Counsel & Senior Staff Attorney (ACLU of Texas), Austin, TX
Religious Liberty
ON:
Allmon, Jennifer Executive Director (Texas Catholic Conference of Bishops), Austin, TX
Castano, Hernan Pastor (Self), Katy, TX
DeLorme, Edie Business owner (also providing written testimony) (Self), Hallsville, TX
Flowers, Charles Senior Pastor (The Community at Large, Faith Outreach Center, & San
Antonio in Black, White and Brown), San Antonio, TX
Green, Samuel Legal Counsel (Alliance Defending Freedom), Scottsdale, AZ
Horwitz, Rabbi Daniel (also providing written testimony) (Pastors for Texas Children),
Houston, TX
Houston, Joshua General Counsel (also providing written testimony) (Texas Impact),
Austin, TX
Kiel, Teresa Guadalupe County Clerk (Self and County & District Clerks Association of
Texas), Seguin, TX
Reyes, Dr. Gus Director (Texas Baptist Christian Life Commission), Austin, TX
Saenz, Jonathan Attorney & President (also providing written testimony) (Texas Values),
Austin, TX
Sharma, Saurabia Director of Events, Young Conservatives of Texas (Self), Austin, TX
Smith, Angela (Self), Fredericksburg, TX
Starr, Brantley Deputy First Assistant Attorney General (Office of Attorney General),
Austin, TX
WITNESS LIST
State Affairs
February 21, 2018 10:00 AM
Tabor, Corey Chaplain (also providing written testimony) (Republican Party of Texas),
Manor, TX
Tyler, Dr. John Assoc. Professor of Law & Jurisprudence; Director of Legal Studies (also
providing written testimony) (Houston Baptist University), Houston, TX
Vassar, Ryan Deputy General Counsel (Office of the Attorney General), Austin, TX
Walters, Laura Pastor of Presbyterian Church of Lake Travis (Self), Austin, TX
Youman, Chelsey Legal Counsel (First Liberty Institute), Plano, TX
Providing written testimony:
ON:
Pinon, Adriana Policy Counsel & Senior Staff Attorney (ACLU of Texas), Austin, TX


AWS::WAFRegional::XssMatchSet
This is AWS WAF Classic documentation. For more information, see AWS WAF Classic in the developer guide.
For the latest version of AWS WAF , use the AWS WAFV2 API and see the AWS WAF Developer Guide. With the latest version, AWS WAF has a single set of endpoints for regional and global use.
A complex type that contains XssMatchTuple
objects, which specify the parts of web requests that you
want AWS WAF to inspect for cross-site scripting attacks and, if you want AWS WAF to inspect a header, the name of the header. If a
XssMatchSet
contains more than one XssMatchTuple
object, a request needs to
include cross-site scripting attacks in only one of the specified parts of the request to be considered a match.
Syntax
To declare this entity in your AWS CloudFormation template, use the following syntax:
JSON
{ "Type" : "AWS::WAFRegional::XssMatchSet", "Properties" : { "Name" :
String
, "XssMatchTuples" :[ XssMatchTuple, ... ]
} }
YAML
Type: AWS::WAFRegional::XssMatchSet Properties: Name:
String
XssMatchTuples:- XssMatchTuple
Properties
Name
-
The name, if any, of the
XssMatchSet
.Required: Yes
Type: String
Minimum:
1
Maximum:
128
Pattern:
.*\S.*
Update requires: Replacement
XssMatchTuples
-
Specifies the parts of web requests that you want to inspect for cross-site scripting attacks.
Required: No
Type: List of XssMatchTuple
Update requires: No interruption
Return values
Ref
When you pass the logical ID of this resource to the intrinsic Ref
function, Ref
returns the resource physical ID, such as 1234a1a-a1b1-12a1-abcd-a123b123456.
For more information about using the Ref
function, see Ref.
Examples
Define Which Part of a Request to Check for Cross-site Scripting
The following example looks for cross-site scripting in the URI or query string of an HTTP request.
JSON
"DetectXSS": { "Type": "AWS::WAFRegional::XssMatchSet", "Properties": { "Name": "XssMatchSet", "XssMatchTuples": [ { "FieldToMatch": { "Type": "URI" }, "TextTransformation": "NONE" }, { "FieldToMatch": { "Type": "QUERY_STRING" }, "TextTransformation": "NONE" } ] } }
YAML
DetectXSS: Type: "AWS::WAFRegional::XssMatchSet" Properties: Name: "XssMatchSet" XssMatchTuples: - FieldToMatch: Type: "URI" TextTransformation: "NONE" - FieldToMatch: Type: "QUERY_STRING" TextTransformation: "NONE"
Associate an XssMatchSet with a Web ACL Rule
The following example associates the DetectXSS
match set with a web access control list (ACL) rule.
JSON
"XSSRule" : { "Type": "AWS::WAFRegional::Rule", "Properties": { "Name": "XSSRule", "MetricName" : "XSSRule", "Predicates": [ { "DataId" : { "Ref" : "DetectXSS" }, "Negated" : false, "Type" : "XssMatch" } ] } }
YAML
XSSRule: Type: "AWS::WAFRegional::Rule" Properties: Name: "XSSRule" MetricName: "XSSRule" Predicates: - DataId: Ref: "DetectXSS" Negated: false Type: "XssMatch"
Create a Web ACL
The following example associates the XSSRule
rule with a web ACL. The web ACL allows all requests except for ones that contain cross-site scripting in the URI or query string of an HTTP request.
JSON
"MyWebACL": { "Type": "AWS::WAFRegional::WebACL", "Properties": { "Name": "Web ACL to block cross-site scripting", "DefaultAction": { "Type": "ALLOW" }, "MetricName" : "DetectXSSWebACL", "Rules": [ { "Action" : { "Type" : "BLOCK" }, "Priority" : 1, "RuleId" : { "Ref" : "XSSRule" } } ] } }
YAML
MyWebACL: Type: "AWS::WAFRegional::WebACL" Properties: Name: "Web ACL to block cross-site scripting" DefaultAction: Type: "ALLOW" MetricName: "DetectXSSWebACL" Rules: - Action: Type: "BLOCK" Priority: 1 RuleId: Ref: "XSSRule"


Spinner is very commonly needed for dynamic website where some buffer time is needed to query data.
Run "npm i ng-busy" to install the npm package.
Import this module in your app.module, and use the forRoot() function to standardize the configuration of the ngBusy.
// IN app.module.ts
import { BusyConfig, NgBusyModule } from 'ng-busy';
@NgModule({
imports: [
NgBusyModule.forRoot(new BusyConfig({
template: AppBusyComponent,
wrapperClass: 'app-busy',
disableAnimation: true,
}))
],
})
Side Note: For full list of configuration options, please refer to this
Then, you need to create AppBusyComponent that defines the styling of the spinner
// IN app-busy.component.ts
import { Component } from '@angular/core';
@Component({
selector: 'app-busy',
template: `

<svg class="spinner"></svg>

`,
})
export class AppBusyComponent {}
Side Note: The spinner style is modified from this example.
Then, you also need to define your 'app-busy' style. For this, I defined it in my global style.
// IN style.scss
.app-busy {
position: absolute;
background: #fff;
opacity: 0.8;
top: 0;
bottom: 0;
left: 0;
right: 0;
z-index: 999;
}
Code example for the Experiment Lab above:
// IN ng-busy-documentation.component.html

A div with 200px height

<button mat-raised-button (click)="startSpinner()">Start Spinner</button>
<button mat-raised-button (click)="stopSpinner()">Stop Spinner</button>

Side Note: Take note that you need to add [ngBusy] property binding to the div that you want to have busy spinner, and then you need to add a parent div with style="position: relative;"
// IN ng-busy-documentation.component.ts
public busy: Promise<boolean>;
private globalResolve;
constructor(
private shareFacadeService: ShareFacadeService
) { }
ngOnInit(): void {
this.shareFacadeService.spinnerBS.subscribe(
(spin: boolean) => {
if (spin === true){
this.getBusy();
} else {
this.globalResolve();
}
}
);
}
getBusy(): void {
this.busy = new Promise((resolve, reject) => {
this.globalResolve = resolve;
});
}
startSpinner(): void {
this.shareFacadeService.startSpinner();
}
stopSpinner(): void {
this.shareFacadeService.stopSpinner();
}
For a simpler and direct use case, you can directly reference your busy to a promise or subscription of observable. Refer to this link for a full example.
// IN yourcomponent.component.html

// other html content here

// IN yourcomponent.component.ts (referencing ngBusy control to a promise)
ngOnInit() {
this.busy = this.http.get('...').toPromise();
}
// IN yourcomponent.component.ts (referencing ngBusy control to a subscription of Observable)
ngOnInit() {
this.busy = this.http.get('...').subscribe();
}
The examples above are for adding spinner on a specific div only, you can further extend this use case to a global spinner, where [ngBusy] is used in app.component.html to do an entire backdrop and your child components can control that global spinner using the shareFacadeService.
If you look at the shareFacade service, you will notice there are 2 busy spinner controls: spinner and initSpinner.
To understand why we need 2 types of spinner control, let's look at the example below. In this example, let's say we are subscribing to 2 behaviour subjects to get 2 items, and then we need to wait for them before we render the html:
// IN item-configuration.component.ts
ngOnInit(): void {
this.itemListSub = this.facadeService.itemListBehaviourSubject.subscribe(
(itemList) => {
this.itemList = itemList ? itemList : null;
}
);
this.promotionListSub = this.facadeService.promotionListBehaviourSubject.subscribe(
(promotionList) => {
this.promotionList = promotionList ? promotionList : null;
}
);
}
addItem(itemObject) {
this.facadeService.addItem(itemObject);
}
// IN item-configuration.component.html

// html content here

If we want a spinner on this component when we load to this page and the spinner resolves when all data retrived, we can simply do this:
// IN item-configuration.component.html

// html content here

However, things get complicated if we want to have a global spinner and we want to have spinner for every process such as adding item, deleting item, etc. This is why we have 'initBusy' for initial spinner when data getting loaded and we have 'busy' for every process. And we can have additional function to stop the initial busy only when all data are loaded.
Example of controlling the initSpinner:
// IN item-configuration.component.ts
private dataInitCounter = 0;
ngOnInit(): void {
this.shareFacadeService.startInitSpinner();
this.itemListSub = this.facadeService.itemListBehaviourSubject.subscribe(
(itemList) => {
this.itemList = itemList ? itemList : null;
this.ngBusyResolveWithTarget(2);
}
);
this.promotionListSub = this.facadeService.promotionListBehaviourSubject.subscribe(
(promotionList) => {
this.promotionList = promotionList ? promotionList : null;
this.ngBusyResolveWithTarget(2);
}
);
}
private ngBusyResolveWithTarget(dataInitTarget: number): void() {
if (this.dataInitCounter<(dataInitTarget-1)){
this.dataInitCounter += 1;
return;
}
this.shareFacadeService.stopInitSpinner();
}
Then, we can control the spinner in the facadeService.
// IN facade.service.ts
addItem(itemObject: IItemObject): void {
this.energyShareFacadeService.startSpinner();
this.itemConfigurationService.addItem(itemObject).subscribe({
next: statusText => {
this.getItemList$().subscribe(
() => {
this.energyShareFacadeService.stopSpinner();
}
);
},
error: error => {
this.energyShareFacadeService.stopSpinner();
}
});
}


My work
about me
projects
Home
my blog
Founded in NYC, Codetribute provides free services to help any business expand its online presence and brand by connecting generous web developers with determined proprietors.
more coming soon...


Please Login
Please enter your user credentials to login or to register a new account.
Login
Register
Send


Zapier is an easy way to automate simple tasks in Clio
This video shows you how to connect Google Forms to Clio using Zapier, the Rube-Goldberg machine for the web. You'll learn how to automatically create new contacts in Clio when someone completes a Google Form.


Qlik Core - Presentation October 2018
Getting started with Qlik Core
Core Getting started
Short Docker explanation
Qix associative engine explained
Core experimenter repo
Core experimenter temp deployment
Core Scaling in Google Cloud
Core scaling repo
Urbanization using our scaling backend
Qlik Core - Example Connectors
JDBC connector
Mongodb connector
Postgres connector
Prometheus connector
.net core
Konrads enigma.net
Data Model insights
Prototype 1
Prototype 2
Core commandline tool
Corectl
My terminal setup
Setup step by step
Contact us:
Slack
Github


Retrieves a file
oFTP.GetFile(RemoteFile, [NewFile, Flags])
| RemoteFile | Existing file name (fully qualified path or relative path to current dir) |
| NewFile | Local path to the file to be created |
| Flags | See remarks |
Flags:
FTP_TRANSFER_TYPE_UNKNOWN = 0 (Defaults to FTP_TRANSFER_TYPE_BINARY)
FTP_TRANSFER_TYPE_ASCII = 1
FTP_TRANSFER_TYPE_BINARY = 2
oFTP.GetFile("MyTestScript.ahk", "LocalFile.ahk", 0)


tell - Return current access position for an open channel
tell channelId
Returns an integer string giving the current access position in
channelId. This value returned is a byte offset that can be passed to
seek in order to set the channel to a particular position. Note
that this value is in terms of bytes, not characters like read.
The value returned is -1 for channels that do not support
seeking.
ChannelId must be an identifier for an open channel such as a
Tcl standard channel (stdin, stdout, or stderr),
the return value from an invocation of open or socket, or
the result of a channel creation command provided by a Tcl extension.
Read a line from a file channel only if it starts with foobar:
# Save the offset in case we need to undo the read...
set offset [tell $chan]
if {[read $chan 6] eq "foobar"} {
gets $chan line
} else {
set line {}
# Undo the read...
seek $chan $offset
}
file, open, close, gets, seek, Tcl_StandardChannels
access position, channel, seeking
Copyright © 1995-1997 Roger E. Critchlow Jr.
Copyright © 1993 The Regents of the University of California.
Copyright © 1994-1996 Sun Microsystems, Inc.


How many beers to display data for. Should match the amount of beer taps/flow sensors you have
Use the following input to modify the flow value or litres per minute.
To calibrate: pour a known quantity of beer, then
if the web data reads lower than expected:
do some math: 1/({displayed volume}/{measured volume})
for example, the web page displayed 500ml (.5L) of beer was pured and you measured 600ml (.6L)
then the math would be: 1/(.5/.6) = 1.2
enter 1.2 into the form below and hit submit
if the web data reads higher than expected:
do some math: 1/({measured volume}/{displayed volume})
for example, the web page displayed 600ml (.6L) of beer was pured and you measured 500ml (.5L)
then the math would be: 1/(.6/.5) = 0.833
enter 0.833 into the form below and hit submit
Set the name for the Overview Chart's title, eg Murray's Brewery...
Set the display name for Beer1...
Set the volume of beer in the keg for Beer1...
Set the name of the WiFi network you want to connect KegTastic to...
Set the password for the WiFi network you want to connect Kegtastic to...
To connect to the new WiFi network you'll need to click the Reboot button


Have a media server at home? Create a zzzz.io subdomain and point it to your home IP address and enjoy constant access to your data on the go. You can even host a website under the subdomain.
Some ISPs re-assign IP addresses upon each connection. With a zzzz.io subdomain, you can easily set up your modem or computer to update its associated IP upon each change.


Email<EMAIL_ADDRESS>Phone: 07860 567535
BAFTA award winning sound mixer / sound recordist. Based in London working throughout the UK and worldwide. Documentaries, commercials, corporates, news and news features.
I enjoy working on all types of projects from run and gun programmes to projects with a multi channel desk and multiple contributors.
Recent projects include:


Company Contact Details
Office management contact :<PHONE_NUMBER>
Find Us at : Block-2 , 2-AZ Solan : 173234
Sol. Providers


My Name is :
My Password is :
My Gender is :
Male
Female
My Education is :
--- Select ---
B.E (Electronics & Communication)
B.E (Electrical & Electronics)
B.E (Mechanical)
B.E (Computer Science)
B.E (Information Science)
I know :
Core Java
JDBC
Servlets
JSP
I have :
Bicycle
Motor Cycle
Car
Tractor
Truck
About Me :


Firefox Marketplace Privacy Notice
January 14, 2015
We care about your privacy. When Mozilla (that's us) collects information about you from the Firefox Marketplace, our Mozilla Privacy Policy describes how we handle that information.
Things you should know
- Most of the apps on the Firefox Marketplace are not made by us and you should check their privacy policies before using them.
- Payments are processed by others (not Mozilla) and you should check the privacy policy of the applicable payment provider to understand their practices.
- No financial information (such as credit card info that you have used to make purchases in the Firefox Marketplace) is collected, retained or used by Mozilla.
- The Firefox Marketplace uses cookies and other web technologies to provide its functionality (such as remembering you between sessions) and to help us understand how users use the service through aggregate analytics.
- The Marketplace may use your carrier and location data to customize your experience.
- On Firefox OS devices, we use network information from your device to understand your country location and carrier network to customize your experience and offer special carrier content.
- On all platforms, we may use your IP address to determine your country location to customize your experience.
- You don't have to log in to install a free app, but paid apps require login. We also help you maintain a history of your transactional activity (like which Apps you have purchased).
- For logged-in users, Firefox Marketplace uses your language, country, and installed apps to recommend additional apps that may be of interest. This can be disabled in Account Settings. Learn More.
- You may elect to receive email from us and can unsubscribe from any email marketing communications you elected to receive.


HTML5
Drag and Drop
File Upload
Showcase for HTML5 drag and drop file upload through canvas, or use the upload button.
Save
Load
Clear


Your favorite things!
Go nuts entering your favorite things in the entry box below and see your list of entries below!
A favorite thing of yours:
Submit
Your Favorite Things:


Application Checklist
Submitted a completed Essay of intent?
Turned in a copy of your previous years NYSSMA Scores?
Given evaluation forms to four teachers from last year? Make sure you give them enough time to fill them out thoughtfully, dont spring it on them at the last minute.
Given an evaluation form to your current ensemble teacher?
All forms and other application materials for new members are due by 3:00 PM on Friday, Septemnber 28th, 2016
The induction ceremony for selected students and their families will be held on Tuesday, October 25th, 2016 at 7:30 PM in the MS Theatre. This is a mandatory event for all current and future members.


| Category: containers | Component type: type |
Multimap has the important property that inserting a new element into a multimap does not invalidate iterators that point to existing elements. Erasing an element from a set also does not invalidate any iterators, except, of course, for iterators that actually point to the element that is being erased.
struct ltstr { bool operator()(const char* s1, const char* s2) const { return strcmp(s1, s2) < 0; } }; int main() { multimap<const char*, int, ltstr> m; m.insert(pair<const char* const, int>("a", 1)); m.insert(pair<const char* const, int>("c", 2)); m.insert(pair<const char* const, int>("b", 3)); m.insert(pair<const char* const, int>("b", 4)); m.insert(pair<const char* const, int>("a", 5)); m.insert(pair<const char* const, int>("b", 6)); cout << "Number of elements with key a: " << m.count("a") << endl; cout << "Number of elements with key b: " << m.count("b") << endl; cout << "Number of elements with key c: " << m.count("c") << endl; cout << "Elements in m: " << endl; for (multimap<const char*, int, ltstr>::iterator it = m.begin(); it != m.end(); ++it) cout << " [" << (*it).first << ", " << (*it).second << "]" << endl; }
| Parameter | Description | Default |
|---|---|---|
| Key | The multimap's key type. This is also defined as multimap::key_type. | |
| Data | The multimap's data type. This is also defined as multimap::data_type. | |
| Compare | The key comparison function, a Strict Weak Ordering whose argument type is key_type; it returns true if its first argument is less than its second argument, and false otherwise. This is also defined as multimap::key_compare. | less<Key> |
| Alloc | The multimap's allocator, used for all internal memory management. | alloc |
| Member | Where defined | Description |
|---|---|---|
| key_type | Associative Container | The multimap's key type, Key. |
| data_type | Pair Associative Container | The type of object associated with the keys. |
| value_type | Pair Associative Container | The type of object, pair<const key_type, data_type>, stored in the multimap. |
| key_compare | Sorted Associative Container | Function object that compares two keys for ordering. |
| value_compare | Sorted Associative Container | Function object that compares two values for ordering. |
| pointer | Container | Pointer to T. |
| reference | Container | Reference to T |
| const_reference | Container | Const reference to T |
| size_type | Container | An unsigned integral type. |
| difference_type | Container | A signed integral type. |
| iterator | Container | Iterator used to iterate through a multimap. [1] |
| const_iterator | Container | Const iterator used to iterate through a multimap. |
| reverse_iterator | Reversible Container | Iterator used to iterate backwards through a multimap. [1] |
| const_reverse_iterator | Reversible Container | Const iterator used to iterate backwards through a multimap. |
| iterator begin() | Container | Returns an iterator pointing to the beginning of the multimap. |
| iterator end() | Container | Returns an iterator pointing to the end of the multimap. |
| const_iterator begin() const | Container | Returns a const_iterator pointing to the beginning of the multimap. |
| const_iterator end() const | Container | Returns a const_iterator pointing to the end of the multimap. |
| reverse_iterator rbegin() | Reversible Container | Returns a reverse_iterator pointing to the beginning of the reversed multimap. |
| reverse_iterator rend() | Reversible Container | Returns a reverse_iterator pointing to the end of the reversed multimap. |
| const_reverse_iterator rbegin() const | Reversible Container | Returns a const_reverse_iterator pointing to the beginning of the reversed multimap. |
| const_reverse_iterator rend() const | Reversible Container | Returns a const_reverse_iterator pointing to the end of the reversed multimap. |
| size_type size() const | Container | Returns the size of the multimap. |
| size_type max_size() const | Container | Returns the largest possible size of the multimap. |
| bool empty() const | Container | true if the multimap's size is 0. |
| key_compare key_comp() const | Sorted Associative Container | Returns the key_compare object used by the multimap. |
| value_compare value_comp() const | Sorted Associative Container | Returns the value_compare object used by the multimap. |
| multimap() | Container | Creates an empty multimap. |
| multimap(const key_compare& comp) | Sorted Associative Container | Creates an empty multimap, using comp as the key_compare object. |
template <class InputIterator> multimap(InputIterator f, InputIterator l) [2] |
Multiple Sorted Associative Container | Creates a multimap with a copy of a range. |
template <class InputIterator> multimap(InputIterator f, InputIterator l, const key_compare& comp) [2] |
Multiple Sorted Associative Container | Creates a multimap with a copy of a range, using comp as the key_compare object. |
| multimap(const multimap&) | Container | The copy constructor. |
| multimap& operator=(const multimap&) | Container | The assignment operator |
| void swap(multimap&) | Container | Swaps the contents of two multimaps. |
| iterator insert(const value_type& x) | Multiple Associative Container | Inserts x into the multimap. |
iterator insert(iterator pos, const value_type& x) |
Multiple Sorted Associative Container | Inserts x into the multimap, using pos as a hint to where it will be inserted. |
template <class InputIterator> void insert(InputIterator, InputIterator) [2] |
Multiple Sorted Associative Container | Inserts a range into the multimap. |
| void erase(iterator pos) | Associative Container | Erases the element pointed to by pos. |
| size_type erase(const key_type& k) | Associative Container | Erases the element whose key is k. |
| void erase(iterator first, iterator last) | Associative Container | Erases all elements in a range. |
| void clear() | Associative Container | Erases all of the elements. |
| iterator find(const key_type& k) | Associative Container | Finds an element whose key is k. |
| const_iterator find(const key_type& k) const | Associative Container | Finds an element whose key is k. |
| size_type count(const key_type& k) | Associative Container | Counts the number of elements whose key is k. |
| iterator lower_bound(const key_type& k) | Sorted Associative Container | Finds the first element whose key is not less than k. |
| const_iterator lower_bound(const key_type& k) const | Sorted Associative Container | Finds the first element whose key is not less than k. |
| iterator upper_bound(const key_type& k) | Sorted Associative Container | Finds the first element whose key greater than k. |
| const_iterator upper_bound(const key_type& k) const | Sorted Associative Container | Finds the first element whose key greater than k. |
pair<iterator, iterator> equal_range(const key_type& k) |
Sorted Associative Container | Finds a range containing all elements whose key is k. |
pair<const_iterator, const_iterator> equal_range(const key_type& k) const |
Sorted Associative Container | Finds a range containing all elements whose key is k. |
bool operator==(const multimap&, const multimap&) |
Forward Container | Tests two multimaps for equality. This is a global function, not a member function. |
bool operator<(const multimap&, const multimap&) |
Forward Container | Lexicographical comparison. This is a global function, not a member function. |
[1] Multimap::iterator is not a mutable iterator, because multimap::value_type is not Assignable. That is, if i is of type multimap::iterator and p is of type multimap::value_type, then *i = p is not a valid expression. However, multimap::iterator isn't a constant iterator either, because it can be used to modify the object that it points to. Using the same notation as above, (*i).second = p is a valid expression. The same point applies to multimap::reverse_iterator.
[2] This member function relies on member template functions, which at present (early 1998) are not supported by all compilers. If your compiler supports member templates, you can call this function with any type of input iterator. If your compiler does not yet support member templates, though, then the arguments must either be of type const value_type* or of type multimap::const_iterator.


Crate rexif [−] [src]
RExif is a native Rust create, written to extract EXIF data from JPEG and TIFF images.
Note that it is in very early stages of development. Any sort of feedback is welcome!
The crate contains a sample binary called 'rexiftool' that accepts files as arguments and prints the EXIF data. It gives a rough idea on how to use the crate.
To learn to use this crate, start by the documentation of function parse_file()
,
and the struct ExifData
that is returned by the parser. The rest falls more or less into place.
Code sample lightly edited from src/bin.rs:
match rexif::parse_file(&file_name) { Ok(exif) => { println!("{} {} exif entries: {}", file_name, exif.mime, exif.entries.len()); for entry in &exif.entries { println!(" {}: {}", entry.tag_readable, entry.value_more_readable); } }, Err(e) => { print!("Error in {}: {} {}", &file_name, Error::description(&e), e.extra).unwrap(); } }
Structs
| ExifData |
Top-level structure that contains all parsed metadata inside an image |
| ExifEntry |
Structure that represents a parsed EXIF tag. |
| ExifError |
EXIF parsing error type |
| IRational |
Encapsulation of the TIFF type that represents a signed rational number |
| IfdEntry |
Structure that represents a parsed IFD entry of a TIFF image |
| URational |
Encapsulation of the TIFF type that represents an unsigned rational number |
Enums
| ExifErrorKind |
Possible fatal errors that may happen when an image is parsed. |
| ExifTag |
Enumeration that represents recognized EXIF tags found in TIFF IFDs. |
| IfdFormat |
Enumeration that represents the possible data formats of an IFD entry. |
| Namespace |
Enumeration that represent EXIF tag namespaces. Namespaces exist to accomodate future parsing of the manufacturer-specific tags embedded within the MarkerNote tag. |
| TagValue |
Tag value enumeration. It works as a variant type. Each value is actually a vector because many EXIF tags are collections of values. Exif tags with single values are represented as single-item vectors. |
Functions
| ifdformat_new |
Convert an IFD format code to the IfdFormat enumeration |
| parse_buffer |
Parse a byte buffer that should contain a TIFF or JPEG image. Tries to detect format and parse EXIF data. |
| parse_file |
Opens an image (passed as a file name), tries to read and parse it. |
| read_file |
Try to read and parse an open file that is expected to contain an image |
Type Definitions
| ExifEntryResult |
Type resturned by lower-level parsing functions |
| ExifResult |
Type returned by image file parsing |


Replaces chained conversions of a sequence to Set and back with
.distinct
call.
Before:
seq.toSet.toSeq list.toSet.to[List]
After:
seq.distinct list.distinct


ls
- list directorycd
- change directorytouch
- create empty file or update modification timegit add
- tells the tracker to care about the filegit commit
- tells git to save the files that are being tracked locallygit pull
- pulls changes from remote repository to the local onesgit push
- pushes your local changes to the remote repositorygit status
- tells you about the current state of the tracked filespwd
- print the working directoryls
- list the current directorycat
- print what is said in a filecowsay
- make a cat that says thingscd
- change directory


Rayleigh has only been tested with Python 2.7, on OS X 10.8 and Ubuntu 12.04.
First, install FLANN from source, making sure to compile with Python support. Test that you can import pyflann from a python console.

The best way to get started is to download a .zip file containing all you need for a demo here. Unzip it in the repo dir, so that it populates a subfolder called data/.
Let’s get the mongodb server running:
cd rayleigh_repo_dir
mongod --config mongo.conf
Now to load the data from the zipfile you downloaded
mongorestore --port 27666 data/flickr_100k
We should now be all ready to run the server. In another shell tab:
python rayleigh/client/app.py
The website should now be up at http://<IP_ADDRESS>:5000/
You can download more pickled SearchableImageCollections from https://s3.amazonaws.com/rayleigh/.
To construct your own dataset from scratch, run
nosetests test/collection.py:TestFlickrCollection -s
This uses the file data/flickr_1M.json.gz, which lists a million images from Flickr fetched by the “interestingness” API query over the last few years.
Running this will download and process 100K images (or less, or more, if you modify the code). Data is stored into the mongodb database. It will help to have multiple cores working, so in a separate tab, do
ipcluster start 8
This relies on the IPython parallel framework.
If you want, you can reoutput the Flickr URLs
python rayleigh/assemble_flickr_dataset.py
Have fun!
Rayleigh is an open-source system for quickly searching medium-sized image collections by multiple colors given as a palette or derived from a query image.
Assemble a list of URLs to Flickr images fetched by repeated calls to the API method flickr.interestingness.getList.
To use, you must place your [API key](http://www.flickr.com/services/apps/72157632345167838/key/) into a file named ‘flickr_api.key’ located in the same directory as this file.
There is a limit of 500 images per day, so to obtain more images than that, we iterate backwards from the current date until the desired number of images is obtained.
Assemble dataset containing the specified number of images using Flickr ‘interestingness’ API calls. Returns nothing; writes data to file.
| Parameters : | api_filename : string
data_filename : string
num_images_to_load : int |
|---|
Load the data in given filename and return the first num_images urls (or all of them if num_images exceeds the total number).
| Parameters : | data_filename : string
num_images : int |
|---|---|
| Returns : | ids : list
urls : list
|
ImageCollection stores color information about images and exposes a method to add images to it, with support for parallel processing. The datastore is MongoDB, so a server must be running (launch with the settings in mongo.conf).
Bases: object
Initalize an empty ImageCollection with a color palette that will be used to extract color information from images.
| Parameters : | palette : Palette
|
|---|
Methods
Add all images in a list of URLs. If ipcluster is running, load images in parallel.
| Parameters : | image_urls : list image_ids : list, optional
|
|---|
Return histograms of all images as a single numpy array.
| Returns : | hists : (N,K) ndarray
|
|---|
Return information about the image at id, or None if it doesn’t exist.
| Parameters : | image_id : string no_hist : boolean
|
|---|---|
| Returns : | image : dict, or None
|
Bases: object
Read the image at the URL in RGB format, downsample if needed, and convert to Lab colorspace. Store original dimensions, resize_factor, and the filename of the image.
Image dimensions will be resized independently such that neither width nor height exceed the maximum allowed dimension MAX_DIMENSION.
| Parameters : | url : string
id : string, optional
|
|---|
Methods
Bases: object
Extract a L*a*b color array from a dict representation of a palette query. The array can then be used to histogram colors, output a palette image, etc.
| Parameters : | palette_query : dict
|
|---|
Encapsulate the list of hex colors and array of Lab values representations of a palette (codebook) of colors.
Provide methods to work with color conversion and the Palette class.
Provide a parametrized method to generate a palette that covers the range of colors.
Bases: object
Create a color palette (codebook) in the form of a 2D grid of colors, as described in the parameters list below. Further, the rightmost column has num_hues gradations from black to white.
| Parameters : | num_hues : int
sat_range : int
light_range : int
|
|---|---|
| Returns : | palette: rayleigh.Palette : |
Methods
Methods to search an ImageCollection with brute force, exhaustive search.
Bases: object
Initialize with a rayleigh.ImageCollection, a distance_metric, and the number of dimensions to reduce the histograms to.
| Parameters : | image_collection : rayleigh.ImageCollection dist_metric : string
sigma : nonnegative float
num_dimensions : int
|
|---|
Methods
Return the smoothed image histogram of the image with the given id.
| Parameters : | img_id : string |
|---|---|
| Returns : | color_hist : ndarray |
Return num closest nearest neighbors (potentially approximate) to the query color_hist, and the distances to them.
Override this search method in extending classes.
| Parameters : | color_hist : (K,) ndarray
num : int
|
|---|---|
| Returns : | nn_ind : (num,) ndarray
nn_dists (num,) ndarray :
|
Search images in database by color similarity to the given histogram.
| Parameters : | color_hist : (K,) ndarray
num : int, optional
reduced : boolean, optional
|
|---|---|
| Returns : | query_img : dict
results : list
|
Search images in database by color similarity to image.
See search_by_color_hist().
Search images in database for similarity to the image with img_id in the database.
See search_by_color_hist() for implementation.
| Parameters : | img_id : string num : int, optional |
|---|---|
| Returns : | query_img_data : dict results : list
|
Bases: rayleigh.searchable_collection.SearchableImageCollection
Use the cKDTree data structure from scipy.spatial for the index.
over to brute-force.
k-th returned value is guaranteed to be no further than (1 + eps) times the distance to the real k-th nearest neighbor.
NOTE: These parameters have not been tuned.
Methods
Bases: rayleigh.searchable_collection.SearchableImageCollection
Search the image collection exhaustively (mainly through np.dot).
Methods
Bases: rayleigh.searchable_collection.SearchableImageCollection
Search the image collection using the FLANN library for aNN indexing.
The FLANN index is built with automatic tuning of the search algorithm, which can take a while (~90s on 25K images).
Methods
MATLAB-like tic/toc.
Methods
Print <msg> every <interval> seconds, running the timer for <label>.
label (string): [optional] label for the timer
msg (string): [optional] message to print
interval (int): [optional] print every <interval> seconds
Output the main colors in the histogram to a “palette image.”
| Parameters : | color_hist : (K,) ndarray palette : rayleigh.Palette percentile : int, optional:
filename : string, optional:
|
|---|---|
| Returns : | rgb_image : ndarray |
Returns a palette histogram of colors in the image, smoothed with a Gaussian. Can smooth directly per-pixel, or after computing a strict histogram.
| Parameters : | lab_array : (N,3) ndarray
palette : rayleigh.Palette
sigma : float
direct : bool, optional
|
|---|---|
| Returns : | color_hist : (K,) ndarray |
Return a palette histogram of colors in the image.
| Parameters : | lab_array : (N,3) ndarray
palette : rayleigh.Palette
plot_filename : string, optional
|
|---|---|
| Returns : | color_hist : (K,) ndarray |
Assign colors in the image to nearby colors in the palette, weighted by distance in Lab color space.
| Parameters : | lab_array (N,3) ndarray: :
palette : rayleigh.Palette
sigma : float
>>> from pylab import * : >>> ds = linspace(0,5000) # squared distance : >>> sigma=10; plot(ds, exp(-ds/(2*sigma**2)), label=’$sigma=%.1f$’%sigma) : >>> sigma=20; plot(ds, exp(-ds/(2*sigma**2)), label=’$sigma=%.1f$’%sigma) : >>> sigma=40; plot(ds, exp(-ds/(2*sigma**2)), label=’$sigma=%.1f$’%sigma) : >>> ylim([0,1]); legend(); : >>> xlabel(‘Squared distance’); ylabel(‘Weight’); : >>> title(‘Exponential smoothing’) : >>> #plt.savefig(‘exponential_smoothing.png’, dpi=300) :
Returns: : color_hist : (K,) ndarray
|
|---|
Return base64-encoded image containing the color palette histogram.
Return an object suitable to be sent as an image by Flask, containing the color palette histogram.
Convert a list of hex colors and their values to an RGB image of given width and height.
a dictionary of hex colors to unnormalized values, e.g. {‘#ffffff’: 20, ‘#33cc00’: 0.4}.
Return Figure containing the color palette histogram.
color_hist (K, ndarray)
palette (Palette)
Save histogram to this file, if given.


honzi.cz
/
Writings
/English
Original
Updated
ammunition
ammo
conversation
convo
documentation
docs
dormitory
dorm
information
info
medication,
medicine
meds
preparation
prep
statistics
stats
synchronize
sync
though
tho
through
thru


/** * Copyright (C) 2009 Scalable Solutions. */ /** * Implements the Reactor pattern as defined in: [http://www.cs.wustl.edu/~schmidt/PDF/reactor-siemens.pdf]. * See also this article: [http://today.java.net/cs/user/print/a/350]. * * Based on code from the actorom actor framework by Sergio Bossa [http://code.google.com/p/actorom/]. */ package se.scalablesolutions.akka.dispatch import java.util.{LinkedList, List} class EventBasedSingleThreadDispatcher(name: String) extends MessageDispatcherBase(name) { def start = if (!active) { active = true val messageDemultiplexer = new EventBasedSingleThreadDemultiplexer(queue) selectorThread = new Thread { override def run = { while (active) { try { messageDemultiplexer.select } catch { case e: InterruptedException => active = false } val selectedInvocations = messageDemultiplexer.acquireSelectedInvocations val iter = selectedInvocations.iterator while (iter.hasNext) { val invocation = iter.next val invoker = messageHandlers.get(invocation.receiver) if (invoker != null) invoker.invoke(invocation) iter.remove } } } } selectorThread.start } } class EventBasedSingleThreadDemultiplexer(private val messageQueue: ReactiveMessageQueue) extends MessageDemultiplexer { private val selectedQueue: List[MessageInvocation] = new LinkedList[MessageInvocation] def select = messageQueue.read(selectedQueue) def acquireSelectedInvocations: List[MessageInvocation] = selectedQueue def releaseSelectedInvocations = throw new UnsupportedOperationException("EventBasedSingleThreadDemultiplexer can't release its queue") def wakeUp = throw new UnsupportedOperationException("EventBasedSingleThreadDemultiplexer can't be woken up") }


Development of online interactive capabilities
An overview of top level considerations in developing web applications for USGS science
IWAAS Trends and Drivers Project Virtual Team Meeting | January 12th, 2021
Presented by
Blake Draper, Software
Developer
USGS Web Informatics and Mapping (WIM),
Upper Midwest Water Science Center
Overview
Two parts
-
Web Application Design Concerns
-
Examples from around the USGS
Web Application Design Concerns
Some high-level themes to think
about...
-
Data
Sourcing and Storage
-
API and
Service Layers
-
User
Interface and Visualization
Data Sourcing and Storage
- Dynamic (real-time) will be a guiding principle for IWAAs.
- Real-time (or near real-time) requires some combination of automated processes, data
harmonization and a database storing the output of both.
Data Sourcing and Storage
Process development and data harmonization should be designed with the
goal in mind: a performant
database and API.
Standardizing the language, processes, and outputs will be key.
API and Service Layers
An API has two major roles:
- Serve the application.
- Serve the power users and 3rd-party applications.
Uniting these roles as much as possible will bring efficiencies.
Data Sourcing and Storage
Bad performance in a web application will undermine the message.
API users have more patience. Typically where the tougher requests are satisfied.
API and Service Layers
Map services
Map services are more specialized to map visualizations
You don't need a map service to have a map. May or may not be the right approach for the
visualization.
User
Interface and Visualization
User interface should be intuitive and
friendly
Client-side rendering vs. Server-side rendering
- Map services, image services, tile services allow for a server-side implementation
- Much can be rendered on the client with simple-format data served from the API
Web Applications in the USGS
Purposes
- Data Collection
- Data Dissemination
- Decision Support
- Information/Messaging
Usually in some combination!
Now on to some examples...
Surface Water Flow Trends
Static data on a map
server
Supporting map
layers
Simple selection
interface
Click to identify
features and see more detail
Dynamic charts that
respond to user inputs
Combination of map
services and a custom database + API
Public API available
and documented for use
Complex data flow
that calculates basin delineation on the fly
Complex data flow
that calculates basin delineation on the fly
Large ecosystem of services, servers, databases, and
related applications
SPARROW
(SPAtially Referenced Regressions On Watershed attributes)
Dynamic charts that
respond to user inputs
Dynamic charts that
respond to user inputs
Interactive data table
Tabular data download
Multi-sourced data: real-time, historical HAZUS, related
reports and services
Interactive map layers
Printing
Sophisticated visualization
Real-time data from a daily automated process
Development of online interactive capabilities
What we didn't cover
- Architecture
- Hosting and server admin
- Domains
- Database admin
Takeaway
All of these elements (and more!) can be combined to achieve the desired result.


Quickly assembling forms with advanced functionality
Description
Creating a form often implies adding a lot of code to make input fields more user-friendly, like showing validation messages, adding help and sort buttons, implement value suggestions, etc. The Yada Framework offers some reusable code in the form of Thymeleaf includes and custom dialect tags.
Thymeleaf Includes
General Syntax
The net.yadaframework.views.yada.form
package inside /YadaWeb/src/main/resources
contains some
HTML files that can be included in the Thymeleaf templates with the standard syntax:

Parameters can be specified, as usual, either on the replace directive itself or by creating variables on some parent element using th:with
.
|
Some of these components are being replaced by custom dialect tags to offer an easier syntax. |
Available Fragments
- boolean
-
A checkbox for boolean elements
- checklist
-
A checkbox list for objects, maps or static (Spring-EL) elements
- enum
-
A select list for enums
- fileUpload
-
A file-upload input element
- list
-
A select list for objects, maps or static (Spring-EL) elements
- radio-values
-
A radio list for static (Spring-EL) elements
- range
-
A range numeric input with label and value display
- text
-
A text input element
A detailed syntax of the usage can be found in the source of each fragment.
Entity Sorter: allows to add, edit and sort a set of database @Entity objects link to file upload page explain all
Thymeleaf Yada Dialect
Introduction
The Yada Dialect is a custom Thymeleaf Dialect that adds Yada functionality generally already available with some other syntax (e.g. template fragments or data- attributes) but makes the source code more readable. Some tags implement form components.
link to generic introduction to the yada dialect
<yada:input>
The <yada:input>
purpose is to eventually replace the text
fragment, but it currently implements some
different functionality:
-
numeric fields show increment/decrement buttons
-
a bootstrap "addon" can be set right and left of the field
-
password fields have a "show" button
-
a help button can be added
-
can control the value of the character counter
<yada:inputCounter>
-
show a dropdown with input suggestions
|
|
All attributes that are normally available on a HTML <input>
tag can also be used,
including all Yada ajax directives.
Example of a numeric input field with increment/decrement buttons that submits its value via ajax when it changes:
<yada:input type="number" min="0" max="99"
yada:ajax="@{/setRooms(annuncioId=${annuncio.id})}"
class="yadaNoLoader"> (1)
</yada:input>
| 1 | The yadaNoLoader class is added to hide the loader on the ajax call |
Note: ajax submission also works on plain <input>
tags using the yada:ajax
attribute.
Example of a numeric input field that shows trailing zeroes without increment/decrement buttons:
<yada:input name="price" type="number" min="0"
class="noButtons"> (1)
<yada:addonRight>.00</yada:addonRight> (2)
</yada:input>
| 1 | The noButtons class is added in order to hide the unneeded buttons with some custom CSS: |
| 2 | bootstrap addon |
.yadaInput.noButtons {
.yadaInputNumericDecrement, .yadaInputNumericIncrement, .yadaShowPasswordAddon {
display: none;
}
}
A boostrap addon can be set either right or left of the input
field with the addonLeft
and addonRight
tags, that accept valid HTML:
<yada:input name="price">
<yada:addonLeft>$</yada:addonLeft>
<yada:addonRight>.00</yada:addonRight>
</yada:input>
When the input tag is of type="file"
, the standard behavior is extended so that the chosen file can also
be removed via a specific trash icon that appears after file selection.
<yada:input type="file" id="someFileUpload">
<yada:addonRight>
 (1)
</yada:addonRight>
</yada:input>
| 1 | This optional addon is for the upload icon shown in the above image |
The tag works perfectly with type="radio"
inputs, but when the possible radio values come from an Enum a single
tag can show all choices:
<yada:input type="radio" name="color" th:value="${product.color}"
yada:enumclassname="com.example.ColorEnum" (1)
yada:labelKeyPrefix="enum.campaignType." (2)
yada:ajax="@{/setColor(productId=${product.id})}">
</yada:input>
| 1 | The yada:enumclassname attribute specifies the Enum where values have to be taken |
| 2 | The yada:labelKeyPrefix attribute specifies the key in message.properties for the label:
the enum value is appended to the prefix in order to derive the key |
|
The tag is implemented in |
Suggestion list
The <yada:input>
tag can be used to implement a dropdown that shows a list of suggestions as the user
types some characters. It needs a backend @RequestMapping that receives the field value and returns
the HTML of the dropdown.
The usage scenario is that the user types some characters in the input field and sees some suggestions; he can either choose one of the suggestions or keep typing until an "end-of-input" character is typed. The text (or text and id) is then sent to the backend that will add a new element and return an HTML showing all elements so far added. This HTML will be inserted in page.
Input tag example:
<yada:input name="dogname"
yada:ajax="@{/addDog(ownerId=${owner.id})}" (1)
yada:updateOnSuccess="'yadaParents:.jsDogsSection'"> (2)
<yada:suggestion
yada:listUrl="@{/dognameSuggestion}" (3)
yada:suggestionRequestIdNameOverride="dogId"> (4)
</yada:suggestion>
</yada:input>
| 1 | ajax URL called when the user chooses a value from the suggestion list or types an "end-of-input" character
like Enter, Space, Comma etc. (see yada.suggestionList in yada.dialect.js for details) |
| 2 | selector that identifies the portion of the page that has to be replaced with the result of the ajax call |
| 3 | ajax URL called to retrieve the HTML of the suggestions |
| 4 | when the optional yada:suggestionRequestIdNameOverride is specified, this is the name of the request parameter
that contains the id of the element chosen from the suggestion list (see below) when sending the chosen value via ajax |
The backend code for the listURL
can return any HTML with a

element that contains '' elements. The anchors text is used as the value for the field. The anchors
data-id
attribute is sent to the backend when present.
A ready-made HTML for this is implemented in /YadaWeb/src/main/resources/net/yadaframework/views/yada/formfields/inputSuggestionFragment.html
and can be used by adding a model attribute named yadaSuggestions
with a value of either a "value List" or a
"value-id Map", and returning YadaViews.AJAX_SUGGESTION_FRAGMENT
:
@RequestMapping("/dognameSuggestion")
public String dognameSuggestion(String prefix, Model model, Locale locale) {
List<String> suggestions = getDognameSuggestions(prefix, locale); // Some DB query
model.addAttribute("yadaSuggestions", suggestions);
return YadaViews.AJAX_SUGGESTION_FRAGMENT;
}
The above example is the simplest case where just the text of the chosen suggestion is sent to the
backend when calling the addURL
. The name of the request parameter will be the same as the name
of the input field, or "value" if no name has been specified.
When a Map is used, choosing a suggestion will send the map key as the "id" request parameter and the map value
as the value of the input field.
The name of the "id" parameter can be overridden with the addIdRequestNameOverride
attribute as
seen above: this has precedence over anything else (see YadaInputTagSuggestion
interface below).
@RequestMapping("/dognameSuggestion")
public String dognameSuggestion(String prefix, Model model, Locale locale) {
List<Dog> suggestions = getDogs(prefix, locale); // Some DB query that returns Dog objects
// Convert the list to a map
Map<Long, String> idToValue = suggestions.stream().collect(Collectors.toMap(Dog::getId, Dog::getName));
model.addAttribute("yadaSuggestions", idToValue);
return YadaViews.AJAX_SUGGESTION_FRAGMENT;
}
|
For more advanced use cases or when you don’t want to convert a list of objects to a Map,
those objects can implement the You can then return computed values for the text and the id, and rename the
request parameter for the id by implementing the |
Backend code for the addURL
that receives the dogname
field and any other
parameters set on the URL (ownerId
in this example:
@RequestMapping("/addDog")
public String addDog(String dogname, Long ownerId, Model model, Locale locale) {
List<String> allDogs = addDog(ownerID, dogname);; // Some code to add the name of the dog to its owner
model.addAttribute("allDogs", allDogs);
return "/fragments/dogList :: fragment";
}
|
The tag is implemented in |
Ajax and Validation Messages
When using ajax to handle input field submissions, the standard th:errors
tags and BindingResult
techniques won’t work unless returning the whole form (but th:field
on yada:input
currently
doesn’t work).
Other than implementing your custom solution, you can use either the yada:validationError
attribute
or the <yada:validationError>
tag:
<yada:input name="dogname" yada:validationError="${dogNameError}"
When the value of yada:validationError
is not blank, its value is shown as an error below the input tag
using Bootstrap 5 classes for styling. This is the quickest solution.
When you need more control on the error appearance, you can use the <yada:validationError>
tag instead:
<yada:input name="dogname"
...
<yada:validationError yada:invalidFlag="${dognameHasError}" th:text="#{error.dogname}">
(Dummy) error text here
</yada:validationError>
Using the tag syntax, an error is shown when the value of yada:invalidFlag
is neither null
nor false. In the above example the error is shown with
model.addAttribute("dognameHasError", true);
// Also:
model.addAttribute("dognameHasError", "yes");
The error message can either be the static text inside the tag, or any th:text
value. In the
above example, a localized text is being fetched from message.properties
.
The tag syntax also accepts a MessageSource
key:
<yada:input name="dogname"
...
<yada:validationError yada:messageKey="${dognameErrorKey}">
Localized error text example
</yada:validationError>
model.addAttribute("dognameErrorKey", "error.dogname.short");
// or
model.addAttribute("dognameErrorKey", "error.dogname.long");
The error is visible only if ${dognameErrorKey}
is not null.
The yada:invalidFlag
attribute is optional when yada:messageKey
is used.
<yada:inputCounter>
The <yada:inputCounter>
purpose is to show a character counter when the user types in
a <yada:input>
text field.
It can be placed anywhere in the HTML but must have a unique id that must be referenced from
the yada:inputCounterId
attribute of the <yada:input>
tag.
<yada:inputCounter id="titleCounter"></yada:inputCounter>
<yada:input yada:inputCounterId="titleCounter" name="title" maxlength="70"></yada:input>
The label to the left of the counter isn’t added automatically: it can be set with a container div with appropriate CSS:

Title
<yada:inputCounter id="titleCounter"></yada:inputCounter>

<yada:input yada:inputCounterId="titleCounter" name="title" maxlength="70"></yada:input>
.labelAndCounter {
display: flex;
justify-content: space-between;
}
|
The tag is implemented in |
<yada:textarea>
The <yada:textarea>
tag produces a standard <textarea>
HTML tag but can also use some of
the features available to the <yada:input>
tag.
Currently only the `<yada:inputCounter>` tag has been implemented and tested with `<yada:textarea>`, while other features like addons and validation have been copied over from the input tag but never tested.
The value of a <textarea>
can normally be implemented with a th:text
attribute but this currently doesn’t
work, so the yada:text
attribute should be used instead for this specific purpose.
<yada:inputCounter id="descriptionCounter"></yada:inputCounter>
<yada:textarea id="description" name="description"
yada:text="*{description}" (1)
yada:inputCounterId="descriptionCounter" (2)
maxlength="8192"> (3)
</yada:textarea>
| 1 | The value of the textarea is set with yada:text |
| 2 | A counter can be used |
| 3 | The length must be set in order to use the counter |
The label to the left of the counter isn’t added automatically: it can be set
with a container div as shown above for the <yada:input>
tag.
|
The tag is implemented in |


Live Free and Piehard!
Yippee Ki-Yay Pizza Lover
Select your pizza size here:
Small 8" (6 slices) $6.00
Medium 12" (8 slices) $10.00
Large 14" (10 slices) $16.00
Select your pizza sauce here:
Homemade Slow Simmered Red Sauce!
Creamy White Garlic Sauce!
Please select your toppings here:
Pepperoni
Sausage
Onion
Bell Pepper
Salami
Mushroom
Garlic
Beef
Chicken
Tomato
Submit Order
Your Order:
Size:
Sauce:
Toppings:
Price:


please enter emailid
email id must be less than 50.
enter valid email id
please enter password
password length is short.(minlenght=6)
Forget Password??


--- layout: page title: About permalink: /about/ extra_css: about ---
I am a fourth year Computer Science and Engineering student at The Ohio State University. At OSU I was introduced to Linux, and have been transfixed ever since. I currently run Arch Linux on my two machines, and I am the President of the Open Source club at OSU. I enjoy the learning experience offerred not just in the classroom, but in clubs, hackathons, and from my peers as well. I am most happy with a terminal open, typing away on a project in Vim.
Languages are fascinating to me. I currently consider myself fairly fluent in Spanish after over 6 years of learning, and am currently working on learning Irish Gaelic (differentiating it from Scottish Gaelic), Russian, and Esperanto via Duolingo.
I practice Kenpo karate under the rank of ichikyu. Kenpo acts as a nice source of exercise, and a necessary distraction from constantly staring at a screen.
Although extremely out of practice, I enjoy the chance to take a break and try to play a song or two on piano, guitar, or drums. Playing either from memory, poor sheet music reading, or some basic patterns like I-V-vi-IV.
I currently preside as the benevolent dictator of OpenSource Club. We focus on technology talks and opensource news while helping others with Linux and other opensource technologies. As benevolent dictator, I have organized meetings, documented operations for future leaders, fostered relations vital to the club, and even taken over the sysadmin role at time working with tech such as LDAP
Collegiate Web Developers Group, which I will refer to as CWDG, has provided me with experience in the world of web development. From simple HTML to static web generators to web frameworks like Rails, Through talks and projects I have learned about different platforms and technologies used in the web today. What's even better than the tech? The late night doughnuts with friends after these meetings.
A small list of SOME of the technologies I use from operating systems to version control systems to programming languages.


One dead after motorcycle accident in downtown Vancouver
by Tarnjit ParmarSummary
The driver was in the area of Nelson Street near Granville Street when he suddenly lost control of his motorcycle
The driver was rushed to hospital where he was pronounced dead
This is Vancouver's 12th motor fatality this year
VANCOUVER (NEWS 1130) — Vancouver Police are investigating after a 44-year-old man was killed in a motorcycle accident in downtown Vancouver this afternoon.
Just after 12 p.m. the driver was in the area of Nelson Street near Granville Street when he suddenly lost control of his motorcycle and hit a tree.
The driver was rushed to hospital where he was pronounced dead.
VPD says speed is likely a factor in the fatal crash.
This is Vancouver’s 12th motor fatality this year.
Witnesses are being asked to contact VPD’s Collision Investigation Unit at<PHONE_NUMBER> while they continue to investigate.


Course/Exam Mark If I get % in the course, what do I need on the exam? on the exam, what's my final mark?


Home
About
Events
Team
Alumni
Meet the team
Raghav Puri
President
Tapish Golcha
Vice President
Shaurya Nathan
Creative Head
Khush Malik
Gaming Head
Vedansh Arun
Multimedia Head
Arpit Bhateja
Photography Director
Yash Kapoor
Quizzing Head
Abhigya Anand
Programming Head
Navneet Aroa
GD Head
Sidhya Tikku
Event Head
Tarush Sonakya
Member
Inesh Tickoo
Member
Hitarth Khurana
Member
Shobhit Rathi
Member
Gunbir Baveja
Member
Alankrita Ghosh
Member


PSALMS 16
A psalm written by David
1 God, protect me
because I go to you to keep me safe!
2 I said to Yahweh, "You are my Lord;
all the good things that I have come from you."
3 People who try to be holy who live in this land are wonderful;
I delight to be with them.
4 Those who choose to worship other gods will have many things that cause them to be sad.
I will not join them when they make sacrifices to their gods;
I will not even join them in speaking the names of their gods.
5 Yahweh, you are the one whom I have chosen,
and you give me great blessings.
You protect me and control what happens to me.
6 Yahweh has given me a wonderful place in which to live;
I am delighted with all the things that he has given me.
7 I will praise Yahweh, the one who teaches me;
even at night he tells my heart what is right for me to do.
8 I know that Yahweh is always with me.
Nothing will take me from his side.
9 Therefore I am glad; I am honored to praise him,
and I can rest securely
10 because you, Yahweh, will not allow me to remain in the place where the dead people are,
and you will not allow me, someone who has been faithful to the covenant, to stay there.
11 You will show me the road that leads to where I receive eternal life,
and you will make me joyful when I am with you.
I will have pleasure forever when I am at your right hand.


This year, for the first time ever, we asked members of the Ionic community to tell us about the tools and technologies they use to develop Ionic apps, and what types of apps they’re building.
More than 13,000 developers shared their story.
The results reveal some very interesting trends that, we hope, will serve Ionic community members and vendors alike. While we encourage you to check out the data yourself, here are the top insights and observations from our team at Ionic.
App Trends
Hybrid dev is taking over.
Two years ago, 20% of developers surveyed were building exclusively with native tools instead of hybrid. In the next two years, that number is only 2.9% - a nearly 7x decrease. Similarly, the number of hybrid-built apps is growing as a share of overall app development. In the next two years, 32.7% of developers surveyed expect to completely abandon native development in favor of hybrid.
The broader trend is that hybrid development is gaining traction, while the native approach is waning. We think that makes sense. The benefits of hybrid are obvious. And as the web evolves, there are fewer and fewer reasons not to adopt.
More than just consumer apps.
Many enterprises focused on B2E.
The types of apps being built for commercial purposes aren't just consumer apps, althought that remains a dominant use case. A large percentage of apps being built with Ionic (41.7%) are actually for internal-use apps. This is consistent with a broader trend in the enterprise, where the value of mobile extends beyond the essential flagship consumer app. More and more, older legacy systems are steadily being replaced - or modernized - with mobile experiences that make employees happier, and more productive.
PWAs? Yes.
Wearables and smart devices? No.
There’s been a lot of talk about wearables and other smart devices, but the data shows that app development on these platforms is still very nascent. Only 3% of developers are building for smartwatches, and even fewer (2.7%) for TVs.
And for all the talk about tablets taking over the world, they still accounted for less than half (45%) of responses - while Android was targeted by 94.3% of developers, and 83.2% for iOS.
Finally, 31.5% of developers are targeting progressive web apps. That’s a big jump for something the dev community just started talking about two years ago. Meanwhile, responsive web apps were targeted by 34.7% of respondents. What’s driving this trend? Part of it could be app fatigue among consumers who care more about mobile experiences and less about installing yet another app, and developers who want their apps to run on mobile and desktop web environments, not just in the app stores.
Overall, we see this as validation for two things that Ionic has been saying for awhile: mobile remains the killer platform, and web is the future.
Tools of the Trade
Firebase tops hosted backend services.
Google’s Firebase is the clear winner in backend services. For push notifications, Firebase was used by 41.3% of Ionic devs, while AWS was used by just 8.2%. There was a similar disparity between Firebase Auth and Amazon Cognito (30% vs. 2.5%). And Firebase topped the list of hosted backend databases, with 32.4% of developers using it compared to a combined 11.5% for Amazon DynamoDB and RDS.
Our take: The Firebase strategy of focusing on ease of use, and adding services on top of their free DB, appears to be working.
Node dominates and Google owns analytics.
The survey results confirmed some previously held beliefs. Node.js is the dominant choice (56.6% of devs) when it comes to backend technology. And Google owns the analytics space, with Google Analytics and Firebase Analytics emerging as clear winners (used by 68.3% and 24.9% of devs, respectively).
Microsoft winning over devs with VS Code.
VS Code was launched two years ago at the 2015 Microsoft Build conference. Aimed at cross-platform developers, Code was touted for its speed (fast), size (small), and advanced debugging features.
Fast-forward two years, and adoption of Code has grown to nearly half of the developers we surveyed (46.7%) - by far the most widely adopted among Editors and IDEs on the list. Sublime, Atom, and Webstorm trail as the next most popular code editors.
Add to that the 12.7% of devs using Visual Studio IDE, and it looks like Microsoft has really won over developers with its code editing and development toolsets. Of course, it doesn’t hurt that Microsoft is the reference editor for common tools like TypeScript, which may have helped them become the defacto text editor.
Dev Habits
Device testing in the cloud is still nascent.
Device testing is one of the most challenging aspects of mobile app development. Even in larger teams, no one has enough devices to cover every scenario.
With access to large device farms, AWS, Firebase, and others like Browserstack and Sauce Labs, have emerged as a way to move device testing to the cloud and gain much better test coverage in the process.
And yet, an overwhelming majority of devs we surveyed (65.1%) are not using any cloud device testing services. Time will tell if these services take off, or remain a niche offering.
Real-time remote updates gaining traction.
The survey results show that most developers (53.2%) are still pushing app updates the traditional way - through the App Stores.
Meanwhile, some are embracing rapid real-time updates that are made possible with hybrid apps. Using tools like Ionic Deploy and PhoneGap ContentSync, apps can be updated - at the web layer - remotely, outside of the App Store, though still in compliance with Apple and Android standards.
We expect to see adoption of real-time remote updates increasing over the next year.
Ionic Developers care about design.
We were a bit surprised to see how many devs are using prototyping tools as part of their development flow. This is a good sign that developers care about design, and have embraced rapid prototyping tools that help them get their ideas out on paper, before engaging in costly development work.
Ionic Creator was cited as a popular prototyping tool of choice (used by 22.8% of respondents), followed by popular design solutions Sketch (17.6%), Balsamiq (12%), and Invision (10.1%).
Almost half of participants not tracking errors and crashes.
A surprising percentage of developers surveyed (44%) reported that that they aren’t tracking errors or crashes in the apps they’re building. This sizable gap in adoption suggest there is some disillusionment in the tools that exist today. One possible explanation is that native crash tools are less effective when it comes to understanding the web layer. If true, the market for crash reporting in hybrid apps is still up for grabs.
Who’s building apps with Ionic
Web developers are moving to mobile.
We asked respondents to tell us about their development background. Nearly 80% of 13,000+ Ionic developers who took the survey identify themselves as web developers. An additional 10.8% identified as newbies learning to develop mobile apps for the first time, while a sizable percentage (8.4%) described themselves as “born-and-bred" mobile developers.
Overall, the data suggests that Ionic serves a broad cross-section of the developer community - from newbies to hardcore devs. It’s also clear that Ionic is fulfilling its mission to help web developers participate in the thriving mobile app economy. By embracing the power of open web technologies, Ionic is helping the vast web developer community build mobile experiences using tools they already know and love. We’re excited to see that the approach seems to be working.
Mostly building for commercial use.
The vast majority of Ionic devs (75.2%) are building apps for commercial use. By far the biggest segment of developers we surveyed (41.9%) were contract developers and dev shops building on behalf of their clients, while many others (33.3%) were building apps for their company. The companies they represent range from solo shops to large enterprises.
Big Picture
The web is winning. 🎉
Looking at the big picture from this year’s results, the broader trend is the web is winning. Hybrid apps are beginning to dominate. Progressive web apps are catching on faster than we anticipated. And more and more web developers are moving into the mobile space. Most importantly, “cross-platform” doesn’t just mean iOS and Android. It means a consistent experience across mobile and desktop, web and app store, phone and tablet.
Of course, we’re not too surprised. Developers building hybrid apps and PWAs are taking advantage of the single most adopted, tested, and dominant technology stack in the world: The Web. Ionic has always bet on the web, and it looks like we’re not alone.
—
Survey Results
Data from the survey is available below. Feel free to interact, play, and form your own conclusions!
Section #1
What types of apps are you building?
Which of the following best describes the type of environment you work in?
Which of the following best describes your current job role?
About how many employees work at your company?
Which of the following JavaScript frameworks and libraries have you done extensive development work in over the past year?
Which of the following *mobile development* tools, libraries, and frameworks have you done extensive development work in over the past year? [NativeScript]
Over the past year, what percentage of the apps you developed were built using a cross-platform approach (e.g. Ionic, Xamarin, React Native, etc.)?
Section #2
What is the *most* important factor when deciding on a mobile development approach?
Native Only Devs: What is the *most* important factor when deciding on a mobile development approach?
Cross-platform Only Devs: What is the *most* important factor when deciding on a mobile development approach?
Which of the following app lifecycle management tools are you currently using?
Which of the following deployment targets have you developed apps for over the last year?
How are you currently distributing apps to your users (check all that apply)?
Have you published a Progressive Web App (PWA) in the last year?
Section #3
Who are you building PWAs for?
Are you updating an existing app or is this a new application?
Will the app also be available as a native binary in the app stores?
What is the *primary* motivation for building a PWA?
If you have published a PWA already, what is the biggest impact you have observed so far?
Which tools, libraries, or frameworks are you using to build PWAs?
How are you hosting the PWA(s)?
Which of the following services do you use to send Push Notifications?
Which of the following database technologies have you used extensively over the past year?
Which of the following technologies do you use to host the backend of your apps?
Which of the following user authentication services have you used extensively over the past year?
Methodology
The Ionic Developer Survey was fielded from February 2017 to June 2017. A total of 13,248 respondents completed the survey during that period. Responses were collected directly by Ionic using Google Forms. Analysis of the results was performed by Ionic following completion of the survey in June 2017.


='panelHeading'>PANEL 1
This is a panel description.
| 2) CHAR ONE | And this is how you can link multiple balloons from the same speaker. |
PANEL 2
This is another panel description.
And this is the second paragraph of a panel description. Note how no special formatting is needed for paragraph breaks.
This is another panel description.
This is a note to the letterer.
[[And this is a third comment, which will not appear when exported in script mode]]
| 4) CHAR TWO (OP) | Don't start without me! I have a lot to say and I need to know that my speech will wrap properly! |
PAGE 2 (1 panels)
This is a special note. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam in suscipit purus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vivamus nec hendrerit felis. Morbi aliquam facilisis risus eu lacinia. Sed eu leo in turpis fringilla hendrerit. Ut nec accumsan nisl.
PANEL 1
Explosion that is a booming voice
| 1) CHAR THREE (VO) | That's all you need to know to write a comic script in markdown. |


Quasi-random (Halton Sequence)
π:
0
Divergence:
0
Pseudo-random
π:
0
Divergence:
0
#samples:
0
Start
Stop
Reset


[§304A-2603] Revenue bonds. The board of regents is authorized to issue sufficient amounts of revenue bonds pursuant to [subpart D] for the purpose of providing adequate parking structures or other facilities. [L 2006, c 75, pt of §2]


The inspection analyses classes supporting
the property feature
and suggests adding missing annotations.
The inspection has settings and a Quick-Fix adding properties automatically.


Runtime Semantics: EvaluateClassStaticBlockBody
With parameter _functionObject_.
ClassStaticBlockBody : ClassStaticBlockStatementList
1. Perform ? FunctionDeclarationInstantiation(_functionObject_, « »).
1. Return the result of evaluating |ClassStaticBlockStatementList|.
Runtime Semantics: ClassDefinitionEvaluation
With parameters _classBinding_ and _className_.
For ease of specification, private methods and accessors are included alongside private fields in the [[PrivateElements]] slot of class instances. However, any given object has either all or none of the private methods and accessors defined by a given class. This feature has been designed so that implementations may choose to implement private methods and accessors using a strategy which does not require tracking each method or accessor individually.
For example, an implementation could directly associate instance private methods with their corresponding Private Name and track, for each object, which class constructors have run with that object as their `this` value. Looking up an instance private method on an object then consists of checking that the class constructor which defines the method has been used to initialize the object, then returning the method associated with the Private Name.
This differs from private fields: because field initializers can throw during class instantiation, an individual object may have some proper subset of the private fields of a given class, and so private fields must in general be tracked individually.
ClassTail : ClassHeritage? `{` ClassBody? `}`
1. Let _env_ be the LexicalEnvironment of the running execution context.
1. Let _classScope_ be NewDeclarativeEnvironment(_env_).
1. If _classBinding_ is not *undefined*, then
1. Perform _classScope_.CreateImmutableBinding(_classBinding_, *true*).
1. Let _outerPrivateEnvironment_ be the running execution context's PrivateEnvironment.
1. Let _classPrivateEnvironment_ be NewPrivateEnvironment(_outerPrivateEnvironment_).
1. If |ClassBody_opt| is present, then
1. For each String _dn_ of the PrivateBoundIdentifiers of |ClassBody_opt|, do
1. If _classPrivateEnvironment_.[[Names]] contains a Private Name whose [[Description]] is _dn_, then
1. Assert: This is only possible for getter/setter pairs.
1. Else,
1. Let _name_ be a new Private Name whose [[Description]] value is _dn_.
1. Append _name_ to _classPrivateEnvironment_.[[Names]].
1. If |ClassHeritage_opt| is not present, then
1. Let _protoParent_ be %Object.prototype%.
1. Let _constructorParent_ be %Function.prototype%.
1. Else,
1. Set the running execution context's LexicalEnvironment to _classScope_.
1. NOTE: The running execution context's PrivateEnvironment is _outerPrivateEnvironment_ when evaluating |ClassHeritage|.
1. Let _superclassRef_ be the result of evaluating |ClassHeritage|.
1. Set the running execution context's LexicalEnvironment to _env_.
1. Let _superclass_ be ? GetValue(_superclassRef_).
1. If _superclass_ is *null*, then
1. Let _protoParent_ be *null*.
1. Let _constructorParent_ be %Function.prototype%.
1. Else if IsConstructor(_superclass_) is *false*, throw a *TypeError* exception.
1. Else,
1. Let _protoParent_ be ? Get(_superclass_, *"prototype"*).
1. If Type(_protoParent_) is neither Object nor Null, throw a *TypeError* exception.
1. Let _constructorParent_ be _superclass_.
1. Let _proto_ be ! OrdinaryObjectCreate(_protoParent_).
1. If |ClassBody_opt| is not present, let _constructor_ be ~empty~.
1. Else, let _constructor_ be ConstructorMethod of |ClassBody|.
1. Set the running execution context's LexicalEnvironment to _classScope_.
1. Set the running execution context's PrivateEnvironment to _classPrivateEnvironment_.
1. If _constructor_ is ~empty~, then
1. Let _steps_ be the algorithm steps defined in .
1. Let _F_ be ! CreateBuiltinFunction(_steps_, 0, _className_, « [[ConstructorKind]], [[SourceText]] », ~empty~, _constructorParent_).
1. Else,
1. Let _constructorInfo_ be ! DefineMethod of _constructor_ with arguments _proto_ and _constructorParent_.
1. Let _F_ be _constructorInfo_.[[Closure]].
1. Perform ! MakeClassConstructor(_F_).
1. Perform ! SetFunctionName(_F_, _className_).
1. Perform ! MakeConstructor(_F_, *false*, _proto_).
1. If |ClassHeritage_opt| is present, set _F_.[[ConstructorKind]] to ~derived~.
1. Perform ! CreateMethodProperty(_proto_, *"constructor"*, _F_).
1. If |ClassBody_opt| is not present, let _elements_ be a new empty List.
1. Else, let _elements_ be NonConstructorElements of |ClassBody|.
1. Let _instancePrivateMethods_ be a new empty List.
1. Let _staticPrivateMethods_ be a new empty List.
1. Let _instanceFields_ be a new empty List.
1. Let _staticFields__staticElements_ be a new empty List.
1. For each |ClassElement| _e_ of _elements_, do
1. If IsStatic of _e_ is *false*, then
1. Let _field__element_ be ClassElementEvaluation of _e_ with arguments _proto_ and *false*.
1. Else,
1. Let _field__element_ be ClassElementEvaluation of _e_ with arguments _F_ and *false*.
1. If _field__element_ is an abrupt completion, then
1. Set the running execution context's LexicalEnvironment to _lex_.
1. Set the running execution context's PrivateEnvironment to _outerPrivateEnvironment_.
1. Return Completion(_field__element_).
1. Set _field__element_ to _field__element_.[[Value]].
1. If _field__element_ is a PrivateElement, then
1. Assert: _field__element_.[[Kind]] is either ~method~ or ~accessor~.
1. If IsStatic of _e_ is *false*, let _container_ be _instancePrivateMethods_.
1. Else, let _container_ be _staticPrivateMethods_.
1. If _container_ contains a PrivateElement whose [[Key]] is _field__element_.[[Key]], then
1. Let _existing_ be that PrivateElement.
1. Assert: _field__element_.[[Kind]] and _existing_.[[Kind]] are both ~accessor~.
1. If _field__element_.[[Get]] is *undefined*, then
1. Let _combined_ be PrivateElement { [[Key]]: _field__element_.[[Key]], [[Kind]]: ~accessor~, [[Get]]: _existing_.[[Get]], [[Set]]: _field__element_.[[Set]] }.
1. Else,
1. Let _combined_ be PrivateElement { [[Key]]: _field__element_.[[Key]], [[Kind]]: ~accessor~, [[Get]]: _field__element_.[[Get]], [[Set]]: _existing_.[[Set]] }.
1. Replace _existing_ in _container_ with _combined_.
1. Else,
1. Append _field__element_ to _container_.
1. Else if _field__element_ is a ClassFieldDefinition Record, then
1. If IsStatic of _e_ is *false*, append _field__element_ to _instanceFields_.
1. Else, append _field__element_ to _staticFields__staticElements_.
1. If _element_ is a ClassStaticBlockDefinition Record, then
1. Append _element_ to _staticElements_.
1. Set the running execution context's LexicalEnvironment to _lex_.
1. If _classBinding_ is not *undefined*, then
1. Perform _classScopeEnvRec_.InitializeBinding(_classBinding_, _F_).
1. Set _F_.[[Fields]] to _instanceFields_.
1. For each PrivateElement _method_ of _staticPrivateMethods_, do
1. Perform ! PrivateMethodOrAccessorAdd(_method_, _F_).
1. For each element _fieldRecord__elementRecord_ of _staticFields__staticElements_, do
1. Let _result_ be DefineField(_F_, _fieldRecord_).
1. If _elementRecord_ is a ClassFieldDefinition Record, then
1. Let _result_ be DefineField(_F_, _elementRecord_).
1. Else,
1. Assert: _elementRecord_ is a ClassStaticBlockDefinition Record.
1. Let _result_ be EvaluateStaticBlock(_F_, _elementRecord_).
1. If _result_ is an abrupt completion, then
1. Set the running execution context's PrivateEnvironment to _outerPrivateEnvironment_.
1. Return _result_.
1. Set the running execution context's PrivateEnvironment to _outerPrivateEnvironment_.
1. Return _F_.