Skilled technology leader excelling in the rapid development of solutions to manage complex technical environments
for growing companies, ranging from startups to billion dollar industry leaders.With over 20 years experience in the industry, I can build, develop and lead high - performance technical teams and effectively manage people and resources in -person and remotely across multiple geographic locations.My extensive experience allows me to leverage my business acumen and technical expertise to translate a technology needs into innovative solutions and actionable plans.Hands - on but I know how to delegate.I am just as comfortable managing people and engineering resources as I am hacking away at code.tl; dr: I build things that make companies go.
-
- Education
-
City College of San Francisco
2009 - 01 - 01 -
2010 - 01 - 01
-
Japanese, Business
California State University - Chico
1988 - 01 - 01 -
1991 - 01 - 01
-
Computer Science
Butte College
1988 - 01 - 01 -
1990 - 01 - 01
-
Computer Science, General Education
Paradise High School
1984 - 01 - 01 -
1988 - 01 - 01
-
General Studies
-
- Skills
-
Programming Languages
Javascript[node.js], Javascript[browser], C, C++, Java, Kotlin, Objective - C, Swift, PHP, Python, Perl, Go, C#, Bash
Leadership
Strategic Planning, Team Building, Team Leadership, Procedure Development, Process Improvement, Product Development, Entrepreneurship, Budgeting / Financial Planning
Software Engineering
Best Practices, Entrepreneurship, Software Development, Microservices Architecture, Scrum / Agile, Mobile Application Development, Cloud Services, Service Integration
-
- Experience
-
D.Harris Tours, Inc.
2020 - 02 -
2020 - 12
D Harris Tours is a shuttle bus transportation company which offers 22 - 44 passenger buses
for hire.The majority of their business is derived from schools(student event transportation) and local tours.10 years ago, I developed and implemented software that allowed D Harris to grow from 2 buses to 12. But the system I implemented 10 years ago was not made
for the increased number of drivers, buses, customers and trips the company had grown to serve.Hired as CTO where I updated and enhanced their systems with modern tools to better manage the growing company; real - time bus data, automated maintenance notifications, automated trip confirmations and notifications via email and SMS and more.After reviewing the first months trip data, I found that drivers would often sit idle
for 4 - 5 hours, waiting to pickup students they had dropped off at a football game or band practice.I developed an algorithm to identify these idle times and match them with jobs.I offered drivers an extra hours pay
if they did the extra trip.This nearly doubled the daily revenue until the COVID - 19 shutdown.
- Automated notifications
for trips, bus maintenance
- Automated billing and invoicing
- Migrated driver logs to digital format
- Increased daily revenue with better trip optimization
-
Conversant, Inc.(formerly Mediaplex)
2010 - 07 -
2020 - 02
Working at the same company
for 10 years presented many challenges.I wore many hats and performed many roles all
while the company changed names and was bought and sold twice.By the time my team was cut due to COVID - 19, we were responsible
for designing, developing and maintaining the infrastructure and code - base that serves many millions of mobile and rich media ads each day.
Mediaplex was an online advertising company that was started in 1999 and in 2001 acquired by ValueClick.The servers and software that ran the ad serving platform was over a decade old and the stack was beginning to show its age.The surge in popularity of & quot; Rich Media & quot; ads that began hitting the market in 2009 was beyond what their backend had been engineered to handle.Competing ad vendors who could serve these new rich media ads began stealing away valuable business, costing the company revenue and customers.I was hired to lead their Rich Media effort and help modernize their ad serving infrastructure and metric collection.
I was responsible
for designing and implementing a RESTful API
for serving rich media ads and building out scalable backend services to handle integration with existing servers and infrastructure.
A large part of Rich Media ad serving and reporting is performed in the client and this required creating a small, reliable, cross - browser client - side ad loading framework that worked in tandem with the new backend API.After stablizing the infrastructure, Managed engineering resources to work with product services team to ensure the successful deployment of all Rich Media ad campaigns.These enhancements were a great success by all counts; increasing revenue by $1 .2 million in the first year alone.
By the time Rich Media ad serving was running smoothly, demand
for mobile ads was steadily increasing.My team was tasked with implementing a mobile ad solution.Our company joined the IAB[https: //iab.com], a consortium of online advertising companies that develops industry standards on my recommendation. As a participating IAB member, we were instrumental in helping to define the updated MRAID 2.0 standard for serving mobile ads. The MRAID protocol is still currently in use and the defacto standard for mobile ad serving. I wrote the initial Conversant Mobile Ad MRAID SDK's for both iOS and Android as well test apps for both platforms to be used internally and by our customers to preview ads in a mobile environment before deployment. Infrastructure upgrades done for logging and reporting of rich media ads carried over nicely to mobile and no changes to the backend were needed.
- Contributed to IAB MRAID 2.0 standard
- Implemented MRAID SDK & #x27; s on iOS and Android platforms
- Developed and deployed mobile ad solutions
for multiple platforms.
- Designed and deployed & #x27; Rich Media & #x27; ad delivery and reporting infrastructure.
- Architected and deployed RESTful API
for ad serving, tracking metrics and reporting.
- Developed client - side Javascript & #x27; ad controller & #x27;
for mobile and web
- Developed flexible metrics tracking with non - blocking endpoints
- 10 years
-
Mindjet
2007 - 09 -
2010 - 07
Hired to migrate the Mindjet website from PHP to an ASP.Net solution, my role quickly grew into heading up Mindjet & #x27; s foray into the Software as a Service(SaaS) arena--Mindjet Catalyst.
Mindjet Catalyst was a web - based mindmapping software that allowed browser - based real - time multi - person sharing, collaborating and editing of mindmaps.The Catalyst client canvas was originally written in Flash and my team was responsible
for porting the Flash app to a more standards - based implementation utilizing HTML canvas and Javascript.The new application was designed to utilize open standards with HTML5, CSS3, Javascipt, canvas and SVG with few to zero dependancies on external 3 rd party libraries.
-
Simple Software, Inc.
2006 - 04 -
2007 - 09
Contracted software development and consulting.Provided contract support
for previous work positions(Interactivate), developed the Simple Software Application Platform that provided content management systems and business process management applications to small to mid - sized businesses.Customers included Peterson - Dean Roofing, Interactivate, Genetic Savings & amp; amp; Clone, Symantec and more.
- GC Homes - Contractor documents and blueprints online. [http: //gch-dev.netoasis.net/app/]
- Bay Docs - Document preparation services and tools
for generating documentation
for reverse mortgages
- Lender Tool: http: //bay-dev.netoasis.net/lenders.php
- Form Definition Tool: http: //bay-dev.netoasis.net/fields.php?id=50
- HUD Calculator - calculates potential reverse mortgage values: http: //bay-dev.netoasis.net/HUD/calc.html
- DB Tool: http: //bay-dev.netoasis.net/admin/dbedit/
- Tzero Technology - Customized content management system http: //www.tzerotech.com/site/
- TZero Technology CMS: http: //tzero-dev.netoasis.net/
- Metrika - Customized content management system http: //www.metrika.com/site/
- Metrika CMS: http: //met-dev.netoasis.net/
-
Genetic Savings & amp;Clone
2004 - 06 -
2006 - 04
Genetic Savings & amp;Clone was a genetic services company that offered commercial pet gene banking and cloning.Working here was a lot of fun as it gave me the opportunity to apply my technical and management skills to the genetic sciences industry.I was responsible
for architecting, developing and deploying Clonesoft, custom business process automation software that ran every aspect of the business from the website to cloned pet delivery.My team managed and integrated diverse genetic equipment such as PCR machines and genetic analysers into our network
while securely providing real - time data to internal and client facing applications.Developed a unique application
for viewing real - time business operations with high - level overview drilling down into details in an animated, interactive map.Automated business processes pushed customer orders through the pipeline from biobox to clone.During the course of researching, integrating and automating business processes, I had the unique experience of cloning a cat, Lil & #x27;Nicky, from start to finish.
- Cloned a cat and delivered it to customer
- Clonesoft - Architected and implemented web - based business process application that was used to manage the animal gene banking and feline cloning business.
- CatBank - http: //www.catbank.org/ Designed and developed database driven feline DNA identification website. Back-end requirements included integration with various genetic analysis hardware including the Applied Biosystem Genetic Analyser 3130
- Integration of genetic analysis hardware
- Retro vs.Metro - http: //www.retrovsmetro.org/ Implemented all backend code for this online companion website to the New York Time's bestseller: Retro vs. Metro - The Great Political Divide in America. Required access and aggregation of various data items scattered across the Internet (such as the Iraq war dead count and real-time government deficit counter)
-
Inter @ctivate, Inc.
2001 - 12 -
2004 - 06
As Technical Director
for Interactivate, Inc., my responsibilities were extensive and included, but were not limited to managing and maintaining IT resources including customer applications and websites.Help grow the company from 10 to 65 employees.
- Designed and architected network infrastructure using both Windows servers and various legacy Unix boxes.Built out server clusters and managed a farm of over 60 machines including a SAN.
- Designed and implemented web - based network management, monitoring & amp;systems analysis tools
- Developed web - based tools
for creation and maintenance of customer websites, DNS, and email services.
- Designed and developed email marketing application using 3 tier architecture and XML and XSLT
for transporting and rendering email messages and associated web pages.As of December, 2003, the Activatemail system sends and tracks over 1, 000, 000 requested messages per day between 89 clients including Sunkist Growers, The California Avocado Commission, San Diego Zoo and many more.
- Setup automated development environment which allows Interactivate developers to create their own dedicated web sandboxes via a web interface.Automated CVS checkouts and local network mounts to development sandboxes rounded out this implementation.
- Installation & amp;administration of Solaris, FreeBSD & amp;Windows NT in a heterogeneous environment
- Design, implementation, migration and maintenance
for Interactivate & #x27;s internal and external network infrastructure.
- Working with vendors, developers & amp;3 rd party integrators.
- Maintain and monitor over 50 hosted client web sites and dozens of web applications
- Identifying & amp;resolving network related problems
- Responsible
for backup implementation and recovery strategy & amp;procedures
- Required to support high volume access & amp;availability characteristics as well as identifying & amp;resolving system hardware & amp;software problems
- Responsible
for the full availability of DNS, SMTP, HTTP, POP & amp;IMAP servers
- Maintaining security
for all Interactivate networks
-
TheFinancialCafe.Com
2000 - 05 -
2001 - 11
TheFinancialCafe.Com was an Online Financial Broker / Dealer which provides free online market orders.Hired to build a custom CRM application
for their support staff, the application quickly grew to encompass every aspect of the company from CRM to billing to handling email, managing the company website and integration with 3 rd party financial services.
- Designed and implemented web - based network management & amp;systems analysis tools
- Required to support high volume access & amp;availability characteristics as well as identifying & amp;resolving system hardware & amp;software problems
- Working with vendors, developers & amp;3 rd party integrators.
- Installation & amp;administration of Solaris, FreeBSD & amp;Windows NT in a heterogeneous environment
- Installation & amp;maintaining network equipment
- Responsible
for the full availability of DNS, SMTP, HTTP, POP & amp;IMAP servers
- Design, implementation, and maintenance
for the companies internal and external network infrastructure.
- Extensive automation of administrative functions via shell scripting & amp;Perl
- Responsible
for backup implementation and recovery strategy & amp;procedures
- DBA to a number of Mysql databases(one master, multiple slaves)
- Responsible
for the seamless integration of multiple third - party application services into the company & #x27;s website.
-
Food.Com
1998 - 03 -
2000 - 05
Food.Com was an nationwide online food ordering and delivery service.Responsible
for architecting and development of the online ordering application and the processes and procedures
for delivering customer orders to restaurants via various notification mechanisms including IVR phone calls, faxes and custom terminals.
- Developed & #x27;FUDGE & #x27;, the & #x27;Food.Com Ubiquitous Dining Guide Engine & #x27;which was used by thousands of restaurant reviewers to enter and maintain Food.Com & #x27;s dining guide database.
- Setup of automated development environment using web - based tools
- Development of tools and utilities(both web based and command line) to automate development efforts
- Migration of code - base from Objective - C / WebObjects to Java
- Wrote and maintained various web - based backend tools
for maintaining accounts and order information
-
Slip.Net
1996 - 05 -
1998 - 03
Slip.Net was one of the earliest Internet Service Providers in the San Francisco Bay Area with a client base of over 50, 000 users.My roles and responsibilities were divided between system administration and web application development.As the & #x27;Web Administrator & #x27;, I was responsible
for shared administration of our server farm of 30 + servers.I was responsible
for all web - based software, E - commerce, network accessible databases, secure server certificates, web server maintenance, and more.In addition to these administration duties, I was also given a myriad of development projects, including the renovation of the existing system of disassociated and unwieldy collection of flat text db files and dbm & #x27;s that constituted their & #x27;client database & #x27;.I developed an easy to use and coherent system of procedures, tools, scripts, and interfaces using the new & #x27;MySQL & #x27;open source database engine and Perl.
- Built the Slip.Net Account Control Center which allowed customers to administrate their own accounts.Reduced support call volume by 50 % the first week.
- Developed Slip.Net Signup Wizard that walked a customer through setting up a new account as well as register domain names and setup website services all handled automatically
-
The NetOASIS Software Co.
1995 - 05 -
1996 - 05
As founder and President of the NetOASIS Software Co.I was responsible
for every aspect of running the business from graphic design to programming to market research and client solicitation.The primary focus of the company was development of web based applications and the integration of a clients systems into a computer based environment.We also offered freelance programming services, web hosting, web site design and maintenance, and setup and installation of intranet hardware and software components.Specialized in online commerce systems and I have installed, upgraded and maintained online payment servers by Cybercash, First Virtual, and Verisign.
- Clients included: Symantec, King Media, The Exploratorium and The Astronomical Society of the Pacific
-
True World Access, Inc.
1994 - 01 - 01 -
1995 - 05 - 01
System Administrator / Programmer
for a network of mixed SunOS / Solaris / NT servers.Also head of programming staff.Responsible
for maintenance of all network hosts, virtually hosted web, email, ftp, and gopher services.Maintained server statistics, CGI scripts and eventually developed online retail software that is used
for dozens of web catalogs.Other job functions included working directly with clients during development of their software and site, designing of graphics and layout of web sites, implementing new and emerging technologies on clients sites, and handling some customer technical support issues.
-
- Languages
-
English - Native or bilingual
-
- Hobbies
-
Hobbies
3 D Printing, Raspberry Pi, Arduino, Laser engraving, Electronics
Recreation
Golf, Recreational Programming, Karaoke
-
- References
- Chris has a broad understanding of Internet technologies and is generous with knowledge sharing.Equally at home working with Web Services, XMPP and server - side applications as he is working with CSS, JavaScript and the most recent HTML5
for devices.He brings a lot to a Web dev team and can pinch hit in a number of chairs.

Thomas Weaver(Network Provisioner at Twitch)
- His system is well oil;all my web services are working with no down time.He offers all the greatest gadgets, ideal environment
for a programmer like me.
Benoit Marsot(Senior Developer R & amp; D at Medsphere Systems Corporation)
- Extreme knowledge of Perl and UNIX environment, fast programmer, brilliant manager.
Benoit Marsot(Senior Developer R & amp; D at Medsphere Systems Corporation)
-


Here you can checkout the items you've selected
Chocolates
Qty:
$3.50
Jellies
$2.50
Cookies
$4.50
Cakes
$3.00
Ice Cream
$5.50
Boiled Sweets
Biscuits
$4.00
Lollipops
$1.50


Unavailable demos
2d/hdr/
: Not supported on HTML5 yet.
3d/global_illumination/
: Not supported on HTML5 yet (freezes the browser).
3d/voxel/
: Not supported on HTML5 yet.
audio/device_changer/
: Not supported on HTML5 due to browser limitations.
loading/background_load/
: Not supported on HTML5 yet.
loading/multiple_threads_loading/
: Not supported on HTML5 yet.
loading/threads/
: Not supported on HTML5 yet.
misc/matrix_transform/
: Results are only visible in the editor.
mobile/android_iap/
: Only relevant on native Android.
mobile/sensors/
: Not supported on HTML5 yet.
mono/*/
: Not available yet (requires Mono-enabled HTML5 build).
networking/*/
: Doesn't make sense to be hosted on a static host, as the server must be hosted on the same origin due to the browser's same-origin policy.
plugins/*/
: Only effective within the editor.


{% load static %}
Total Money {{money}}
Wallet {{balance}}
Total Money Added {{money}}
Money In Wallet {{balance}}
Category: {{transaction.category.name}}
Amount: {{transaction.amount}}
Date: {{transaction.date}}


Sometimes on the ICW I wished that there was an easy way to find out what statute mile I was at. This website aims to solve that simple need.
Prior to this site, there was a fast way to find out approximately: search in Aqua Maps Master for the nearest 5-mile AICW data point.
Now there is a way to quickly find that out more accurately.


Specify a java regex filter on the comment's text. If left blank, all comments will be examined for changes and built.
For more infos about regex in java, consult the official java documentation


#include <bDNA.h>
Definition at line 23 of file bDNA.h.
◆ m_dim0
| int bParse::bNameInfo::m_dim0 |
◆ m_dim1
| int bParse::bNameInfo::m_dim1 |
◆ m_isPointer
| bool bParse::bNameInfo::m_isPointer |
◆ m_name
| char* bParse::bNameInfo::m_name |
The documentation for this struct was generated from the following file:


| Image name | |||||||||
| Published by | Company name | Version | 7.0.0 | Base OS | Linux/Unix, CentOS 6 | Public | True | ||
| Updated | 24 Feb 2014 | Size | 64GB | Type | Ami | Status | Active |
Published by Company name
Updated 24 Feb 2014
Version 7.0.0
Size 64GB
Base OS Linux/Unix, CentOS 6
Type Ami
Public True
Status Active


--- layout: page permalink: /hello/ title: hello visible: false description: I'm glad you're here! ---
Thank you for scanning my QR Code!
I'm Gabi, and I'm a software developer for hire.
You can learn more about me in the about page, or looking at my linkedin profile.
I am currently in Sao Paulo (Brazil), and I'll be delighted to grab a cup of coffee. Send me an email, let's schedule it!


T I T A N I C ~~~~~~~~~~~ Reviewed by Rory B Mackay ~~~~~~~~~~~ (1997) USA Director: James Cameron, Starring: Kate Winslet, Leonardo DiCaprio, Gloria Stuart
Star Rating (out of 5): ****
_In Brief:_ This film needs no introduction. If you haven't heard of it, then you must have been up in space on a sabbatical, and if you haven't seen it -- well, I suspect you're in a small minority! First thing's first…is it all it's hyped up to be? Well, yes…and no. It's a good film, and there's a lot to like about it, but it's not without its problems.
When I saw the first trailer for "Titanic", it was when I went to see "Bean" last Summer, I think, my intial reaction was -- ain't that downright sick to make a disaster movie out of such a dreadful, real-life tragedy?! I mean, what's happened to Hollywood's script-writers, have they run entirely out of new ideas? Gads, whatever next, I asked myself, how about an action film based on Hiroshima starring Jean Claude Van Damme? I was not entirely filled with anticipation, but then I wasn't alone in that respect.
It's when it came out in the cinema, to rave reviews (well, mostly) and anyone who'd been to see it seemed disturbingly obsessed by it that I started to take notice! I didn't see the film until several months after its release (by which time my sister had seen it about four times!), so I went with a slightly more open mind, but I still didn't think I'd enjoy it much. Did I? Yes and no. Mainly yes, I'm happy to say. The first hour or so was beautifully done, not so much because of the scripting (I'll talk about that later…) but because the re-created ship and sets were stunning to look at, as was Cameron's directing, and the performances of the principal cast were so strong that the "human" aspect of the story, the romance between Rose (Kate Winslet) and Jack (Leonardo DiCaprio), was enchanting.
The film is told via flashback, with Gloria Stuart playing the elderly Rose in the modern day (you knew that, a' course! :-) ). Well, it's an often effective device to use in storytelling -- though sometimes it can fall flat. Does it work here? In script form it doesn't add all that much to the story. What does add a lot to the story is Gloria Stuart, whose stunning performance is the strongest, most moving of the film. Her presence brings a much deeper level of passion, and depth to the story, and though her appearances are relatively brief, the film would have suffered without her.
Also impressive are DiCaprio and Winslet, who wholly succeed in rising above the often poor dialogue, and the bond they form is both heartfelt and moving. It's an old story, you know -- forbidden love ala Romeo and Juliet -- but it works, and Jack's "rescuing" Rose (in both literal and figurative senses) and teaching her to live life for what counts was pointed and touching. In fact, I enjoyed the first half of the film a lot, largely because Winslet and DiCaprio bring such and charm, energy to the romance. It's engaging, touching and very enjoyable. There's more than a tinge of poignancy to it as well, simply because you know it's not going to be a happy ending.
Which leads us to the second half of the film. We all knew it was coming. I'm sure director Cameron was looking forward with eager anticipation to it, because as he's stated in interviews, the real thrust of the story (for him) was the sinking, and the Jack/Rose romance was a merely a manipulative plot device to get you emotionally into the film. I think that understates the importance of the romance, as I found it far more enjoyable than an hour of watching people die. The iceberg arrives, and the Captain announces that Titanic will have sunk in about an hour. And it is an hour. My goodness, we don't miss a second of that hour…
Gratuitous? Well, perhaps not by today's standards, I'm sure there's been far worse produced under the banner of "entertainment" in other films. But I certainly wasn't prepared for how shocking and graphic the last hour or so would be. Not that I'd expect the word "understatement" to be part of Cameron's vocabulary (he who brought us such, umm, vivid films as "Terminator 2" and "Aliens"). Is it overdone? I thought so. Understatement can sometimes work wonders in conveying tragedy. No, no one expected a happy ending, but I didn't quite expect the horrendously shocking and powerful scenes we were bombarded throughout the film's second half. Still, whether it was overdone and heavy-handed or not, if it was the shock-factor Cameron was after it worked, because I was shocked and moved, in fact I spent most of the last hour in tears!
You really couldn't help but get emotionally involved, whether it was wishing someone would knock that dreadfully psychotic fiance of Rose's overboard or desperately hoping that Rose would rescue Jack, or that Jack would rescue Rose, or that they would both survive. Perhaps the most harrowing scene was when the ship has sunk, and those that sunk along with the ship freeze to death on the water surface. The bit where Rose lets go of Jack's hand, while promising she'll never let go in her heart was particularly heart-wrenching, and the sight of rescue boats sailing amid the ocean of corpses was a pretty powerful image, to put no fine a point on it. I loved the ending, however, which was both moving and slightly uplifting following the horror of the past hour and a half.
So, we've established that the film is powerful and moving, if the last hour was rather excessive. Haven't mentioned the script. Plot-wise it's OK, though the Jack/Rose relationship was beautifully developed, but I've a feeling that's to the actors credit if anything. As for the dialogue…well, Titanic is set in 1912. It's a period drama. But I saw very little indication of period in so far as the dialogue is concerned. Did they really use phrases like "Goddamn it!" back in the turn of the century? I doubt it. Would someone talk like this: "Do ya love the guy or what?". I doubt it. Is such dialogue as "I saw the iceberg, and I see it in your eyes now" not just a bit…clumsy? Yes it is. A little more attention to dialogue would not have gone astray, and Cameron himself is to blame (he wrote the script). Stick with directing, dude.
But its more than redeemed by the acting, with DiCaprio and Winslet on fine form, ably supported by a strong cast. Star of the show was Gloria Stuart, though -- why didn't she win that Oscar?! After all, they were throwing Oscars at "Titanic" left, right and centre, but Gloria was perhaps the most deserving nominee. Directing-wise Cameron does a spectacular job. Like I said, his vision was a bit excessive, but at least he directed it well. I haven't even mentioned James Horner's beautiful score. Utterly heavenly, though when your Dad and sister play the soundtrack a lot you do start to get a bit bored with it! ;-)
I've finished my rant, which lasted a lot longer than I thought it would! Just leaves a couple of questions; was it worth all those Oscars? Hell, don't talk to me about Oscars. Bloomin' farce. It was deserving in a number of departments, though. Last question; is it, as some suggest, one of the best films of all-time? Nope, I don't think so. It's certainly one of the most powerful and memorable films I've ever seen, but I don't think it quite ranks as one of my all-time favourites. And as for the fact they're reportedly making a "Titanic 2"…well I guess that's typical Hollywood for you!
~~~~~~~~~~~~~~~~~~~~~~~
Written by and (c) Rory B Mackay, 1998
For the regularly updated TV and Film Reviews, check out my new website "The Cool Critique" -- http://www.geocities.com/Hollywood/Bungalow/4960 (best viewed with Internet Explorer).
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


mcc: Moment Corrected Correlation
A number of biomedical problems involve performing many hypothesis tests, with an attendant need to apply stringent thresholds. Often the data take the form of a series of predictor vectors, each of which must be compared with a single response vector, perhaps with nuisance covariates. Parametric tests of association are often used, but can result in inaccurate type I error at the extreme thresholds, even for large sample sizes. Furthermore, standard two-sided testing can reduce power compared to the doubled p-value, due to asymmetry in the null distribution. Exact (permutation) testing approaches are attractive, but can be computationally intensive and cumbersome. MCC is an approximation to exact association testing of two vectors that is accurate and fast enough for standard use in high-throughput settings, and can easily provide standard two-sided or doubled p-values.
| Version: |
1.0 |
| Published: |
2014-07-03 |
| Author: |
Yi-Hui Zhou |
| Maintainer: |
Yi-Hui Zhou <yihui_zhou at ncsu.edu> |
| License: |
GPL-2 | GPL-3 [expanded from: GPL (≥ 2)] |
| NeedsCompilation: |
no |
| CRAN checks: |
mcc results |
Downloads:
Reverse dependencies:
Linking:
Please use the canonical form
https://CRAN.R-project.org/package=mcc
to link to this page.


Sena, BJP pay tributes to Thackeray; Fadnavis heckled
Former Maharashtra chief minister Devendra Fadnavis was on Sunday heckled by some slogan-shouting workers of the Shiv Sena as he left Shivaji Park in Mumbai after paying tribute to Bal Thackeray on his seventh death anniversary.
IMAGE: Former Maharashtra CM Devendra Fadnavis pays tribute to Shiv Sena founder Bal Thackeray on his death anniversary, at Shivaji Park in Mumbai on Sunday. Photographs: Sahil Salvi
Some workers of the Shiv Sena, which recently snapped ties with the Bharatiya Janata Party, standing close to the former CM's convoy shouted in Marathi Fadnavis' assembly poll campaign slogan: 'I will be back (as CM)' along with the Sena's traditional 'Chhatrapati Shivaji Maharaj ki jai' war cry.
Fadnavis and his entourage, which included several senior BJP leaders, moved on without reacting to the jeers.
There were no Sena leaders, except Uddhav Thackeray's PA Milind Narvekar, when Fadnavis arrived at Shivaji Park to pay tribute to the founder of the Maharashtrian party.
IMAGE: Sena chief Uddhav Thackeray, with his wife Rashmi and party leader Manohar Joshi, pays tribute to his late father.
Earlier in the day, Fadnavis had tweeted a video containing some of the late Sena patriarch's rousing speeches, and had added his voice-over as a tribute.
Leaders of the two parties paid tributes to the late Shiv Sena founder at Shivaji Park in Mumbai on Sunday, but evidently took care to avoid each other.
Sena chief Uddhav Thackeray and his family members including son and newly-elected MLA Aaditya visited Bal Thackeray's memorial at Shivaji Park alongwith several party leaders.
While the Sena leaders visited between 10 am to 12 noon, BJP leaders Fadnavis, Vinod Tawde and Pankaja Munde visited the place post 1 pm, after the Thackerays and Sena leaders, except Uddhav's aide Narvekar, had left.
The alliance between the Sena and the BJP fell apart despite winning a majority in the last month's Maharashtra elections as the BJP did not cede the Sena's demand of sharing the chief minister's post.
IMAGE: Sena MLA Aditya Thackeray with brother Tejas pays tribute to his grandfather.
The Sena is now in talks with the Congress and Nationalist Congress Party for possible government formation while the state has been placed under President's rule.
Asked about this apparent swipe at the current Sena leadership, Sena MP Sanjay Raut said, "We don't wish to be taught about pride. The next chief minister will be from the Shiv Sena."
Tawde, who was a minister in the Fadnavis cabinet, said, "Late Balasaheb was like the head of the family for the Sena and BJP alliance."
Pankaja Munde, another former BJP minister, said, "We do miss Balasaheb Thackeray."
NCP chief Sharad Pawar offered tributes to the late leader through Twitter, saying, "Late Balasaheb created a Marathi 'manoos' who was proud of his regional identity."
"He received unconditional and ever-lasting love from his followers for his politics of putting society first, for his oratory and his straightforward stand," Pawar added.
IMAGE: Former MLA Pankaja Munde pays floral tributes to the Shiv Sena founder.
Pawar, who enjoyed a warm relationship with Bal Thackeray in personal life but was his rival in politics, is being seen as the architect of the alliance between the Sena, his party and the Congress.
State NCP chief Jayant Patil and senior party leader Chhagan Bhujbal -- who was once with the Sena -- also visited Shivaji Park.
No senior Congress leader was seen visiting the memorial, but some state unit leaders tweeted tributes to Bal Thackeray.


Trshant's Site
Back
Refresh
Please enable JavaScript to view the
comments powered by Disqus.
comments powered by
Disqus


Road Warrior
Recurring Trip Planner
Flight Search
Select your first flight dates below
Hotel Search
Select your first hotel for your trip
Pick your preferred Hotel
Recurrence
How many recurring trips do you need?
Looks good!
Please confirm yor bookings
Booking done!
Expect a confirmation email soon
Spread the love
Share with your colleagues, so they can book the same itinerary
All set!!
Now get back to work


| Directive | Examples | Description |
|---|---|---|
| -gray | messier051.fits 1% 99% log | Input FITS file for grayscale image |
| -red | jband.fits -2s max gaussian-log | Input FITS file for red band of color image |
| -green | hband.fits -2s max gaussian-log | Input FITS file for green band of color image |
| -blue | kband.fits -2s max gaussian-log | Input FITS file for blue band of color image |
| -out/png | messier051.png | Output PNG image |
| -jpeg | messier051.jpg | Output JPEG image |
| -ct | 4 | Color table ID for grayscale image (see documentation) |
| -t | 1 | Color "enhancement" parameter for color images (see documentation) |
| -nowcs | Do not check input FITS files for matching WCS information | |
| -s | status.txt | Output completion message to status file (used by workflow managers) |
| -d | Turn on debugging output (large and really only for developer use) | |
| -csys | Galactic | Coordinate system to be used for marker/label placement |
| -color | green ffa080 | Set current color (used for grid/marks/labels) |
| -symbol | 30p box 2.5s 5 starred 36. | Set current symbol size and shape (use "none" to turn of symbols for multi-labelling) |
| -grid | Equ J2000 | Draw an coordinate grid overlay in the current color |
| -mark | 80.89386 -69.7561 | Place the current symbol at this location |
| -label | 202.4 47.2 "M 51" | Place the label text given at this location |
| -catalog | sdss.tbl | Process a table and draw symbols and/or place labels (uses columns ra,dec or lat,lon) |
| -imginfo | irac.tbl | Process a table and draw image outlines (uses columns ra1, dec1, ... ra4, dec4) |
| -colorcol | color | Column to use for symbol/image outline color |
| -scalecol | vmag 14. mag | Column to use for relative symbol scaling and scaling rules |
| -sizecol | galsize | Column with symbol sizes (not usually used with the scale column) |
| -shapecol | objtype | Column with symbol shapes |
| -labelcol | name | Column with text for location labels |
Note: Some of the examples use file names (e.g., jband.fits) and some
use table column name (e.g., galsize).
These will be different for your data.


This XPath implementation attempts to be a fully-compliant implementation of the W3C XPath specification.


Hello wonderful people, this is my first web application. It contains a manifest file, an index file, a javascript file and a folder that containns the icons that can be viewed on different screen sizes and devices.
According to Wikipedia, In computing, a web application or web app is a client–server computer program which the client (including the user interface and client-side logic) runs in a web browser. Common web applications include webmail, online retail sales, online auctions, wikis, instant messaging services and many other functions.


Hello World
remaining letters in this.phrase([sp][ep]) ep => print to screen on page load. sp => hudden to screen startButton => print to screen ==> button.onClick( startScramble ;


Sesame Street vintage videos + computer in living room = tons o' fun. http://www.sesamestreet.org/onair/history/videos
10/28/2009, 7:50:59 PM
Favs: 0
Retweets: 0
link--- layout: tweet ---
Sesame Street vintage videos + computer in living room = tons o' fun. http://www.sesamestreet.org/onair/history/videos
10/28/2009, 7:50:59 PM
Favs: 0
Retweets: 0
link


Sharing weekly 15% of forged amount to voters; vote for delegate dakk to receive a reward in the next week.
Last payout: {{lastpayout|date}}
Next payout will be at: {{nextpayout|date}}
Productivity: {{delegate.productivity}}
Approval: {{delegate.approval}}
Total paid: {{total.paid|number:8}} LSK
Total pending: {{total.pending|number:8}} LSK
| Address |
Paid (LSK) |
Pending (LSK) |
| {{acc.address}} |
{{acc.received|number:4}} |
{{acc.pending|number:4}} |


NOBODY LOVES ME A film review by James Berardinelli Copyright 1996 James Berardinelli
RATING (0 TO 10): 8.5 Alternative Scale: ***1/2 out of ****
Germany, 1995 Running Length: 1:44 MPAA Classification: R (Sex, nudity, profanity) Theatrical Aspect Ratio: 1.66:1
Cast: Maria Schrader, Pierre Sanoussi-Bliss, Michael Von Au, Elisabeth Trissenaar Director: Doris Dorrie Producers: Gerd Huber and Renate Seefeldt Screenplay: Doris Dorrie Cinematography: Helge Weindler Music: Niki Reiser U.S. Distributor: CFP Distribution Inc. In German with subtitles
NOBODY LOVES ME is a charming, emotionally perceptive, German romantic comedy about the life of a woman who believes herself to be unloved and unlovable. About to enter her fourth decade of life, Fanny Fink (the delightful Maria Schrader, who resembles Mary Louise Parker) is convinced that "a woman over 30 is more likely to get hit by an A- bomb than find a man." Her daily mantra is: "I'm strong, I'm pretty, I'm intelligent. I love and I am loved," but she speaks the words without conviction. To potential suitors, she gives the advice, "I wouldn't fall in love with me if I were you." Talk about a self-esteem problem!
Although writer/director Doris Dorrie (STRAIGHT THROUGH THE HEART, MEN) has used a modern-day German woman to personify the angst and uncertainty associated with being single in the '90s, the fears and emotional upheaval suffered by Fanny are things that many people will be able to identify with, whether they're male or female, European or not, and young or old. Dorrie's perceptiveness when it comes to this mindset is what makes Fanny such an endearing character and causes the film to be so compelling.
NOBODY LOVES ME is not a romantic comedy in a traditional sense. It's more about learning to appreciate what you have rather than what you don't. Through the friendship of Orleo (the versatile Pierre Sanoussi-Bliss), a gay, black psychic, Fanny comes to understand the difference between seeing the glass half full and half empty. She may not have a lover, but, in Orleo's words, she has "a job, a family, a place, and the right skin color", none of which apply to him.
According to Orleo's prediction, Fanny will find her "last chance at love" in a blond, thirty-ish man who is somehow associated with the number 23. The likeliest candidate is the new manager of Fanny's run- down highrise apartment building, Lothar Sticker (a suitably vacuous Michael Von Au). Warned by Orleo that she must be aggressive, Fanny pursues him, but his interest in her is sporadic. By falling for a man who clearly doesn't reciprocate her feelings, Fanny learns the pain of unrequited love. In a moment of despair, she cries that she wishes she had remained emotionally sheltered.
However, through this misery, Fanny comes to love Orleo.  Orleo is dying, however, and the nearness of his death adds an immediacy to their relationship that might not otherwise be present. Through this, Fanny learns a lesson about what real "love" is.
Despite the seriousness of some of the material, NOBODY LOVES ME is an uplifting motion picture, largely because of Dorrie's often self- deprecating style. Not only does she use humor to keep the film's tone light, but there's more than a sprinkling of magic realism. The death symbolism is overdone to the point of being comical. For a "conscious dying" class that she's taking, Fanny is making her own coffin. When her mother is aghast to see her sleeping in it, Fanny remarks that it's actually quite comfortable.
Dorrie has stated that the film reflects the prevalent aspects of the modern German character: isolation and an almost-obsessive tendency to wonder about death. I see these as more universal characteristics, however, and it's for that reason that NOBODY LOVES ME will likely connect with all audiences. Whether you see yourself in Fanny or Orleo, or just prefer to watch these two as characters in a well-told story, Dorrie's film is worth a trip to the theater.
- James Berardinelli e-mail<EMAIL_ADDRESS><EMAIL_ADDRESS>web: http://www2.cybernex.net/~berardin
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


The PlotDevice Colors library offers a set of tools to work with color more conveniently. You
can use the library to create colors by name (like red or ivory), from pixels in
an image, group them into lists of which you can then collectively manipulate hue, brightness
and saturation, create lists of harmonious colors based on color theory rules (like
complementary or analogous), create lists of gradient colors, work with drop shadows and
gradient fills for paths, define powerful indefinite color ranges (like bright
red or purplishgreenish), aggregate color information from Yahoo!, and more!
There’s a lot of stuff to explain but luckily most principles in the Colors library are
easy.
Some central themes are:
| colors.zip (1.95MB) Last updated for PlotDevice 0.9 Licensed under GPL Authors: Tom De Smedt, Frederik De Bleser, Christian Swinehart |
The Colors library has a number of commands that create a new color you can use with fill() or stroke().
rgb(r, g, b, a=None, range=1.0, name="")
hsb(h, s, b, a=None, range=1.0, name="")
cmyk(c, m, y, k, range=1.0, name="")
lab(l, a, b, range=1.0, name="")
hex(str, name="")
With the range parameter you can define how you want to supply the channel values. For example, if you want to define r, g and b between 0 and 255 instead of between 0.0 and 1.0, set range to 255.
The optional name parameter lets you define a name for the color. Otherwise, a name will be guessed using the clr.nearest_hue() method (see below).
The hex() command creates a color from a hexadecimal string (e.g. ‘#30343D’).
named_color(str)
The named_color() command creates a color from a name like ‘olive’ or ‘maroon’ or ‘antiquewhite’. A list of all the named colors the command will recognize is here. The really great thing is that each of these named colors is also a command in the Colors library. So the two colors in the example below are exactly the same:
clr1 = colors.named_color("olive") clr2 = colors.olive()
Color properties
Each of the above commands returns a Color object. It has all the standard properties a color created with the PlotDevice color() command also has. You can use these to find out the color’s R, B and B values, or its C, M, Y and K values, or its H, S and B values:
The Color object in the Colors Library has some additional properties:
Color methods
Each color has a range of methods to manipulate it. Each of these returns a copy of the color.
clr.copy()
clr.darken(step=0.1)
clr.lighten(step=0.1)
clr.desaturate(step=0.1)
clr.saturate(step=0.1)
clr.adjust_contrast(step=0.1)
clr.adjust_rgb(r=0.0, g=0.0, b=0.0, a=0.0)
clr.adjust_hsb(h=0.0, s=0.0, b=0.0, a=0.0)
What is interesting about these methods is that you can also apply them to color lists. This way you can quickly manipulate sets of colors without having to change each color individually.
The clr.blend() command returns a mixture from this color and another color:
clr.blend(clr, factor=0.5)
The clr.rotate() command returns a color that is angle degrees across the color wheel. So when angle is 180, this returns the complementary color.
clr.rotate(angle=180)
The clr.analog() command returns hues that are next to this one on the color wheel,
separated by angle. The additional d parameter will slightly vary the color’s
brightness and saturation for more variation.
clr.analog(angle=20, d=0.5)
Another interesting method is clr.nearest_hue(). This returns the name of the name of a well-known hue this color resembles most (red, orange, yellow, lime, green, teal, cyan, azure, blue, violet, purple or pink). When the primary parameter is True, the name returned is limited to primary hues: red, orange, yellow, green, blue, purple, pink.
clr.nearest_hue(primary=False)
To get the distance between two colors as a number there’s the clr.distance() method. It returns a number between 0.0 and 1.0 representing the distance as if colors were arranged on a sphere (e.g. a disc of hues with the less saturated colors in the centre, darker discs in the sphere are at the bottom).
clr.distance(clr)
The clr.swatch() command draws a rectangle to the canvas filled with the color. The rectangle is located at x and y and has width w and height h.
clr.swatch(x, y, w=35, h=35, roundness=0)
The functionality of the Colors library becomes more interesting when we get down to working with lists of colors. You can store different colors in a list and then manipulate the entire collection. For example, make all of the colors darker, retrieve the lightest color, or even create a list from pixels in an image for example.
list(clr1, clr2, clr3, ..., name="", tags=[])
list([clr1, clr2, clr3, ...], name="", tags=[])
list(imagepath, n=10)
list(word)
list(Web.KulerTheme)
Lists can be created from a number of indivdual colors, another list of colors, the pathname of an image from which to grab pixel values (you need to have the Core Image library installed), a word, or a kuler theme from the web.kuler.search() command in the PlotDevice Web library.
Optionally you can supply a name and a list of tags for the list.
Accessing each individual color in the list works the same as with any other list:
sea = colors.list("sea.jpg", n=20) x = 0 for clr in sea: rect(x, 0, 20, 20, fill=clr) x += 20
You can also use the choice() command to get a random colors from the list.
Color list properties
Each of the above commands returns a ColorList object with a number of properties:
Color list methods
Some methods to manipulate the list. All of these will return a copy of the list.
list.reverse()
list.sort(reversed=True)
list.repeat(self, n=2, oscillate=False, callback=None)
The list.reverse() method returns a copy with all the colors in reversed order.
The list.sort() method returns a copy with the colors sorted from dark to light.
The list.repeat() method returns a repetition of the list: if the list contains a red, green and a yellow color, list.repeat() will contain red, green, yellow, red, green, yellow. When oscillate is True it will contain red, green, yellow, yellow, green, red. This is useful for lists of gradient colors.
list.swarm(x, y, r=100)
The list.swarm() method draws a small visualization of all the colors in the list.
sea = colors.list("sea.jpg", n=20) background(sea.darkest) sea.swarm(50, 50) |
All of the methods that work on a single color also work on a list of colors. They will transform all the individual colors in the list:
list.copy()
list.darken(step=0.1)
list.lighten(step=0.1)
list.desaturate(step=0.1)
list.saturate(step=0.1)
list.adjust_contrast(step=0.1)
list.adjust_rgb(r=0.0, g=0.0, b=0.0, a=0.0)
list.adjust_hsb(h=0.0, s=0.0, b=0.0, a=0.0)
list.analog(self, angle=20, d=0.5)
list.rotate(self, angle=180)
list.swatch(x, y, w=35, h=35, padding=0, roundness=0)
Color list sorting
The colors in a list can be sorted in various ways:
list.sort(comparison="hue", reversed=False)
list.sort_by_distance(reversed=False)
list.cluster(cmp1="hue", cmp2="brightness", reversed=False, n=12)
The basic list.sort() method allows you to sort by any color property (hue, brightness, red, magenta, ...)
The list.cluster() method sorts the list by the first given property, then cuts it into n pieces and sorts each of the pieces by the second given property.
Color list math
Individual colors (or lists of colors) can be added to a list with the + operator:
clrs = colors.list( colors.purple().darken(), colors.deeppink() ) clrs += colors.violet() clrs.swarm(50, 50) |
Also, the * operator is equivalent to the list.repeat() method.
Color context
There’s one additional list.context property which is a list of words associated with the colors in the list. For example, red is commonly associated with things like anger and passion, while black is associated with death, grief, modernism.
If you put them together in a color list, its context will contain words like anger, drama and power.
clrs = colors.list( colors.red(), colors.black() ) clrs.swarm(50, 50) print clrs.context >>> ['anger', 'devil', 'drama', 'power', 'sex', 'strength'] |
The data is drawn from the files in the /context subfolder in the library. You can adjust them to your own needs. There’s also a dictionary with all the information:
print colors.context["red"]
Color theory provides a visual guidance to color mixing and the visual impact of specific color combinations. With the Colors library you can create schemes from the following rules:
complement(clr)
complementary(clr)
split_complementary(clr)
left_complement(clr)
right_complement(clr)
analogous(clr, angle=10, contrast=0.25)
monochrome(clr)
triad(clr, angle=120)
tetrad(clr, angle=90)
compound(clr, flip=False)
All of the commands take a base clr from which a scheme is then derived. A color list is returned, usually containing three to six matching colors (except complement(), which just returns the original color and its complement). Notice that some commands have an angle parameter. This controls how far colors are apart on the color wheel. Making it bigger for the analogous() scheme introduces more variation.
There’s also a rule() command where you can supply the rule name as a string. All of
the rule names are stored in the rules list.
rule(name, clr, angle=None, contrast=0.3, flip=False)
print colors.rules >>> ['complement', 'complementary', 'split complementary', 'left complement', >>> 'right complement', 'analogous', 'monochrome', 'triad', 'tetrad', >>> 'compound', 'flipped compound']
With the rule() command we can quickly display all the possibilities for a color:
clr = colors.rgb(0.0, 0.4, 0.6) x = 10 for name in colors.rules: scheme = colors.rule(name, clr) scheme.swatch(x, 10) x += 40
Here are some individual schemes:
|
Complementary scheme: clr = colors.rgb(0, 0.4, 0.6) scheme = colors.complementary(clr) scheme.swarm(75, 75) scheme.swatch(0, 0, w=25, h=25) | |
|
Left complementary: clr = colors.rgb(0, 0.4, 0.6) scheme = colors.left_complement(clr) scheme.swarm(75, 75) scheme.swatch(0, 0, w=25, h=25) | |
|
Analogous: clr = colors.rgb(0, 0.4, 0.6) scheme = colors.analogous(clr) scheme.swarm(75, 75) scheme.swatch(0, 0, w=25, h=25) | |
|
Flipped compound: clr = colors.rgb(0, 0.4, 0.6) scheme = colors.compound(clr, flip=True) scheme.swarm(75, 75) scheme.swatch(0, 0, w=25, h=25) |
Techies may want to note that calculations for the rules are performed on an artistic color wheel based on RYB instead of RGB. This system predates scientific color theory and is mathematically incorrect - but it does produce better color schemes.
Analog color scheme
When you want a realistic, organic feel to your composition you can work with analogous schemes. Remember how a color object in the Colors library has an analog() method? It’s very easy to use in a loop so that each element is subtly different:
size(600, 600) nofill() stroke(0.4, 0.5, 0) strokewidth(0.1) autoclosepath(False) clr = colors.rgb(0.6, 0.4, 0, 0.5) background(colors.dark(clr).darken(0.1)) colors.shadow(alpha=0.05, blur=0.2) for i in range(50): # Each strand of curves has an analogous color # (i.e. hues that are next to each other on the color wheel). # This yields a very natural effect. stroke(clr.analog(angle=10, d=0.3)) x0 = WIDTH/2 y0 = HEIGHT/2 vx0 = random(-200, 200) vy0 = random(-200, 200) vx1 = random(-200, 200) vy1 = random(-200, 200) x1 = choice((-10, WIDTH)) y1 = random(HEIGHT) for j in range(100): beginpath(x0, y0) curveto( x0+vx0+random(80), y0+vy0+random(80), x1+vx1, y1+vy1, x1, y1 ) endpath()
You can find this script fully documented in the library download.
The Colors library has a handy gradient() command that takes a couple of colors and calculates all the intermediary steps between them.
gradient([clr1, clr2, clr3, ...], steps=100, spread=0.5)
gradient(clr1, clr2, clr3, ..., steps=100, spread=0.5)
You can supply base colors either as a list or simply as an enumeration of parameters. A color list is returned with additional colors that form a smooth transistion between the given base colors. The command has two optional parameters: steps which defines the number of colors in the returned list, and spread, which defines the midpoint of the gradient.
For example, here we create a gradient list from light blue to dark blue. For each color in
the list an oval is drawn that zooms inward. So we draw 60 ovals that go from light blue to
dark blue:
clr1 = colors.rgb(0.6, 0.8, 1.0) clr2 = colors.rgb(0.0, 0.2, 0.4) g = colors.gradient(clr1, clr2, steps=60) for i in range(len(g)): fill(g[i]) r = 700-i*10 oval(-75+i*5, -180+i*5, r, r)
Let’s add a nice spiral to the composition. As you can see in the example below, I can reset the number of steps in the gradient list (the number of colors is updated accordingly) - I don’t need to create a new gradient. The same goes for the gradient spread. Additionaly, remember that g is a color list so I can use the reverse() method:
# append this to the previous code: g.steps = 200 g = g.reverse() colors.shadow(blur=12, alpha=0.3) transform(CORNER) translate(WIDTH/2, HEIGHT/2) for i in range(len(g)): fill(g[i]) rotate(3) oval(i*0.5, i*0.5, 200-i, 200-i)
My personal favorite is the one with all the different hues of blue mixed up. It reminds me of Alice in Wonderland. Replace the above fill() command with:
fill(choice(g))
Gradient outlines
Finally, the Colors library has an outline() command which works extremely well with gradient(). The command colorizes the stroke of a path with the colors in a given list:
outline(path, colors, precision=0.4, continuous=True)
Outlines a path with the colors in the list. When continuous is False, each contour in the path starts with the first color in the list, and ends with the last color in the list. Because each line segment is drawn separately, the command works only with a corner-mode transform().
font("Georgia", 58) p = textpath("gradient text is back!", 10, 50) g = colors.gradient(color(1,0,0.5), color(0,0.5,1)) colors.outline(p, g)
A color range is a set of indefinite colors that have their hue, saturation and brightness constrained between a minimum and maximum value. You can use color ranges to quickly describe fuzzy concepts like dark and bright.
range(h=(0.0,1.0), s=(0.0,1.0), b=(0.0,1.0), a=(1.0,1.0), grayscale=False, name="", length=100)
The h, s, b and a parameters are (min, max) tuples with min and max ranging between 0.0 and 1.0. A color range behaves like a list of length individual colors - although the colors will be different each time you draw them from the range.
For example, the following range contains colors with all sorts of saturation and brightness, but their hues are limited between red and limegreen:
r = colors.range(h=(0,0.2)) r.swarm(50, 50) print r[0:2] >>> [Color(0.287, 0.276, 0.252, 1.000), Color(0.089, 0.064, 0.026, 1.000)] |
Color ranges often yield surprising results with a minimum amount of code:
r = colors.range(h=(0,0.2)) transform(CORNER) rotate(45) for i in range(HEIGHT/10): fill(choice(r)) rect(-WIDTH, i*15, WIDTH*2, 20)
Color range methods, properties and calls
A color range has the following methods:
range.constrain_hue(min, max=None)
range.constrain_saturation(min, max=None)
range.constrain_brightness(min, max=None)
range.constrain_alpha(min, max=None)
More complex ranges including gaps can be created by assigning a list of (min, max) tuples to a property directly:
high_contrast_reds = colors.range() high_contrast_reds.h = 0 high_contrast_reds.s = (0.5, 1.0) high_contrast_reds.b = [(0.1,0.2), (0.9,1.0)]
Since a color range behaves like a color list it also has copy(), adjust_rgb(), repeat(), swatch() ... methods.
If you need a single color from the range you can use the range.color() method:
range.color(clr=None, d=0.035)
range.colors(clr=None, n=10, d=0.035)
However, you can also directly call a range like a command:
yellowgreenish = colors.range(h=(0.1,0.2)) background( yellowgreenish() )
When you call a color range like this you can supply three optional parameters:
Last but not least, you can use the + operator to combine two ranges.
We’ve already included some predefined color range variables in the library for you. We call them shades. These includes useful concepts such as light and dark, defined by a combination of saturation and brightness.
All of the shades are in the shades list:
print colors.shades >>> [light, dark, bright, weak, neutral, fresh, soft, hard, warm, >>> cool, intense]
Here’s a visual overview of all the shades. The shades list is traversed. Each individual shade is then called as a command (remember we can call color ranges like commands) and limited to a yellow hue. Since we also call the range with the n parameter, a list of range-constrained yellow colors is returned.
x = 20 y = 20 for shade in colors.shades: text(shade.name, x, y-5, fill=0.2, fontsize=12) clr = shade(colors.yellow(), n=10) clr.swatch(x, y) x += 45
The shade() command returns a shade by name:
clrs = colors.shade("intense") clrs = clrs(colors.yellow(), n=20) clrs.swarm(50,50) |
You can also use shade variables directly. Here’s a dark indigo color:
background(colors.dark(colors.indigo())) |
Intense colors of any hue by simply calling the intense range without any parameter:
transform(CORNER) rotate(45) for i in range(HEIGHT/10): fill(colors.intense()) rect(-WIDTH, i*10, WIDTH*2, 20) |
Color shade inference
Now that we have learned about shades it is easy to deduce some information from individual colors. First of all, we can check if a colors falls within a certain shade range (check if a color is dark or bright for example):
clr = colors.red() print clr in colors.bright >>> True # red is a bright color.
And since we can find out if a color is dark, bright, neutral, cool, etc. we can guess a name for it:
print colors.guess_name( color(1, 0, 0.5) ) >>> bright pink
We can group different color ranges into a color theme. Each of the color ranges in a theme has a hue associated with it and a weight which determines its frequency in the theme. Simply put, a sand theme would be made up of combinations like 50% soft ivory, 25% dark goldenrod and 25% warm brown.
theme(name="", guess=False, length=100)
The theme command returns a ColorTheme object with the following properties:
To add a color range to the theme you use the theme.add_range() method:
theme.add_range(range, clr=None, weight=1.0)
You can supply shades, your own color ranges, or a shade + named color string to the range parameter. The following two themes are the same (by ‘the same’ we mean that they contain the same ranges - however, their output may vary as ranges do not contain fixed colors).
sand = colors.theme() sand.add_range(colors.soft, colors.ivory(), weight=0.5) sand.add_range(colors.dark, colors.goldenrod(), weight=0.25) sand.add_range(colors.warm, colors.brown(), weight=0.25) sand.swatch(2, 2, w=7, h=7, padding=1) | |
sand = colors.theme() sand.add_range("soft ivory", weight=0.5) sand.add_range("dark goldenrod", weight=0.25) sand.add_range("warm brown", weight=0.25) sand.swatch(2, 2, w=7, h=7, padding=1) |
You can retrieve an individual (random) color from the theme with the theme.color() method, or a color list with the theme.colors() method. The weight of each range is taken into account - heavier ranges will output more colors.
theme.color(d=0.035)
theme.colors(n=10, d=0.035)
The optional d parameter provides a slight variation in brightness and saturation.
To retrieve a single color you can also simply call the theme as a command. Or to retrieve
multiple colors you can treat it as a list containing length colors (the length
parameter in the theme() command).
size(550, 275) background( sand() ) colors.shadow(alpha=0.4, dx=-40, blur=10) for clr in sand: fill(clr) translate(10) scale(0.96) skew(10) rect(0, -40, 400, 400)
A color theme also has the standard copy(), swatch() and swarm() methods. The swatch() method has an additional grouped parameter. When set to True, provides a more compact layout.
You can use the + operator to add two themes together or test if a color is part of a theme with the in operator.
Another interesting method is theme.recombine(). You can use it to create a new generation from two parent themes using a cut-and-splice techniques. Check the examples included in the library.
theme1.recombine(theme2, d=0.7)
Aggregated themes
The Colors library comes bundled with more than four thousand color themes, grouped into four categories: emotion, nature, adjectives, and basic english words. These themes have been harvested from the web using the technique explained in the Prism example. Some of them look great, others decent, others bad. But it’s a good source to get inspiration nonetheless.
To load an aggregated theme, create a theme with a name:
t = colors.theme("sky", guess=True) background( colors.list(t).darkest) t.swarm(50, 50) | |
t = colors.theme("love", guess=True) background( colors.list(t).darkest) t.swarm(50, 50) |
Adjectives and emotions work best. If a word is not found an exception will be raised. When the optional guess parameter is True, a theme will be returned for a word that closely matches the given name.
If you also have the Web library installed, you can expand the database of aggregated themes with your own queries. The google() and yahoo() commands will query the web and return a color theme based on the top colors and shades that appear in the content of web pages (see Prism).
google(query)
yahoo(query, license=None)
The command returns a color theme. With the yahoo() command, you can specify your own Yahoo! license key with the optional license parameter. It will take some time to retrieve all the information from the web the first time. After that, the search query is stored locally and can be retrieved instantly.
Another way to get color information (with good results) is by measuring pixels in online images. The morguefile() command will scan thumbnails in the morgueFile archive for colors:
morguefile(query, n)
The command will return a color list with n colors.
The Colors library has a useful shader() command that simulates a source of light. You can control the source of the light, its direction and strength across the canvas to determine the colors of onscreen elements.
shader(x, y, dx, dy, radius=300, angle=0, spread=90)
The x and y is the position of an element on the canvas. The dx and dy is the position of the lightsource. Based on the distance between the two a number from 0.0 (no light) to 1.0 (full light) is returned, representing how much light the element receives. The radius determines the strength of the light (how far it reaches), angle determines the direction in which light is shining (None if it shines equally in all directions) and spread determines the extent of the beam (wide or narrow).
In this example a light source is positioned in the lower right corner. The value returned
from the shader() command is used to modify each oval’s brightness.
size(550, 300) background(0.1,0,0.05) colormode(HSB) colors.shadow() for i in range(3000): x = random(WIDTH) y = random(HEIGHT) r = random(10,30) d = colors.shader(x, y, 550, 300, angle=150) # HSB is brighter and opaque in the centre of the light. fill(0.84+d*0.1, 1, 0.2+0.8*d, d) oval(x, y, r, r)
We can get different effects by modifying the position, radius and spread of the light:
d = colors.shader(x, y, 275, 300, radius=200, angle=90, spread=180)
When used together with shadow() and gradientpath(), we can now create compositions with a realistic sense of depth:
# Deep green gradient background. size(400, 400) bg = rect(0, 0, WIDTH, HEIGHT, plot=False) colors.gradientpath(bg, color(0.15,0.2,0), color(0,0,0)) colors.shadow() for i in range(800): x = random(400) y = random(400) # A lightsource positioned at the centre of the canvas. d = colors.shader(x, y, 200, 200, angle=None, radius=150) # Oval become smaller when further away from the light. # If they become too small, don't draw them. r = d*40 if r < 4: continue p = oval(x, y, r*2, r*2, plot=False) # Two colors for an oval gradient fill. # The green becomes lighter and more opaque # when elements are nearer to the light. nostroke() clr1 = color(0.4+d*0.5, 0.6+d*0.3, 0, 0.75) clr2 = color(0, 0, 0, d) colors.gradientpath(p, clr1, clr2, alpha=0.5+d, dx=r, dy=r)
Let’s just add a few more bells to the script! For each oval at the edge of the nucleus, we’ll draw some curves bending inward.
# add to the script above: nofill() stroke(clr1) strokewidth(0.25) autoclosepath(False) if d < 0.3: for j in range(random(10)): v = (1-d) * 150 beginpath(x, y) curveto(x, y, x+random(-v,v), y+random(-v,v), 200, 200) endpath()
With the Supershape library we can draw all sorts of organic forms. Let’s use it to add a pattern to each oval.
# add to the script above: supershape = ximport("supershape") strokewidth(d*0.75) if d > 0.25: p = supershape.path(x+r, y+r, r, r, 10, 1.5, -0.5, 1.5) drawpath(p)
The Colors library has a shadow() command and a gradientfill() to add depth to your compositions. Shadows influence all the elements on the canvas while gradients are applied to a given path.
shadow(dx=10, dy=10, alpha=0.25, blur=4.0)
noshadow()
gradientfill(path, clr1, clr2, type="radial", dx=0, dy=0, spread=1.0, angle=0, alpha=1.0)
The shadow() and noshadow() commands work like fill() and nofill(). Once you set a shadow all the subsequent elements you draw to the canvas will have a dropshadow (or until nofill() is called). The dx and dy define the shadow’s offset, alpha the shadow’s opacity and blur its sharpness.
The gradientfill() command takes a given path just like drawpath() and draws it to the screen filled with a gradient ranging between colors clr1 and clr2. The type of gradient can be ‘radial’ or ‘linear’.
The spread parameter is the distance between the two colors. It can be a relative float number between 0.0 and 1.0 or an absolute int. In the case of a float, 1.0 represents the highest of either width and height for radial gradients, and the lowest of width and height for linear gradients.
It’s also useful to note the alpha parameter. When a gradient fill is drawn, the path
is first filled with an opaque color, and the gradient mask is then drawn on top of that. While
clr1 and clr2 can have their individual alpha value, alpha controls the
opacity of the opaque underground. When you hide the opaque underground, no shadows will be
rendered for this layer - so it’s bit of tweaking to combine shadows and gradients.
An example with shadows and gradient supershapes:
# Enable dropshadows colors.shadow(alpha=0.75) rotate(90) for i in range(100): # Combination of rotate, scale and translate yields a spiral. rotate(14) scale(0.95) translate(50, 0) # A pointy supershape path. supershape = ximport("supershape") path = supershape.path(650, 500, 350, 350, 6, 0.74, 0.3, -4.64-i) # The gradient fill. # Notice how the second color alters in each iteration. colors.gradientfill( path, color(0.0, 0.6, 0.9, 0.25), color(0.18+i*0.03, 0.0, 0.1+i*0.01, 0.9-i*0.02), dx=88-i*10, dy=-25+i, spread=0.83, alpha=0.25 )


src/managers/three-manager/xr/vr-manager.ts
VR manager for VR related operations.
Properties |
|
Methods |
|
constructor()
|
|
Create the VR manager. |
| Private controller1 |
Type : any
|
|
The VR controller for movement. |
| Private controller2 |
Type : any
|
|
The VR controller for movement. |
| Private controllerGrip1 |
Type : any
|
|
The VR controller representation |
| Private controllerGrip2 |
Type : any
|
|
The VR controller representation |
| Private onControllerSelectEnd |
Type : function
|
|
Listener for when the "Select Start" button is released. |
| Private onControllerSelectStart |
Type : function
|
|
Listener for when the "Select Start" button is pushed. |
| Static Readonly SESSION_TYPE |
Type : string
|
Default value : 'immersive-vr'
|
|
Session type to use for VR. |
| Public cameraGroup |
Type : Group
|
|
Inherited from
XRManager
|
|
Defined in
XRManager:36
|
|
Group containing the the camera for XR. |
| Protected currentXRSession |
Type : any
|
Default value : null
|
|
Inherited from
XRManager
|
|
Defined in
XRManager:32
|
|
Currently active XR session. |
| Protected onSessionEnded |
Type : function
|
|
Inherited from
XRManager
|
|
Defined in
XRManager:34
|
|
Callback to call when the XR session ends. |
| Protected renderer |
Type : WebGLRenderer
|
|
Inherited from
XRManager
|
|
Defined in
XRManager:30
|
|
Renderer to set the XR session for. |
| Protected sessionInit |
Type : function
|
|
Inherited from
XRManager
|
|
Defined in
XRManager:28
|
|
Returns required and optional features when requesting an XR session. |
| Protected xrActive |
Type : boolean
|
Default value : false
|
|
Inherited from
XRManager
|
|
Defined in
XRManager:26
|
|
Whether the XR is currently active or not. |
| Public xrCamera |
Type : Camera
|
|
Inherited from
XRManager
|
|
Defined in
XRManager:38
|
|
The camera used by XR. |
| Private moveInDirection | ||||||||||||
moveInDirection(direction: Vector3, stepDistance: number)
|
||||||||||||
|
Move the camera in the given direction.
Parameters :
Returns :
void
|
| Protected onXRSessionEnded |
onXRSessionEnded()
|
|
Inherited from
XRManager
|
|
Defined in
XRManager:61
|
|
Callback when the VR session ends.
Returns :
void
|
| Private setupVRControls |
setupVRControls()
|
|
Set up VR controls for moving around the event display.
Returns :
void
|
| Public setXRSession | ||||||||||||||||
setXRSession(renderer: WebGLRenderer, onSessionStarted?: () => void, onSessionEnded?: () => void)
|
||||||||||||||||
|
Inherited from
XRManager
|
||||||||||||||||
|
Defined in
XRManager:48
|
||||||||||||||||
|
Set and configure the VR session.
Parameters :
Returns :
void
|
| Public endXRSession |
endXRSession()
|
|
Inherited from
XRManager
|
|
Defined in
XRManager:99
|
|
End the current XR session.
Returns :
void
|
| Public getCameraGroup | ||||||||
getCameraGroup(camera?: Camera)
|
||||||||
|
Inherited from
XRManager
|
||||||||
|
Defined in
XRManager:109
|
||||||||
|
Get the group containing the camera for XR. XR camera works by adding a Group with Camera to the scene.
Parameters :
Returns :
Group
The camera group used in XR mode. |
| Public getXRCamera |
getXRCamera()
|
|
Inherited from
XRManager
|
|
Defined in
XRManager:135
|
|
Get the camera used by XR.
Returns :
Camera
The camera used by XR. |
| Protected Async onXRSessionStarted | ||||||||
onXRSessionStarted(session: any)
|
||||||||
|
Inherited from
XRManager
|
||||||||
|
Defined in
XRManager:78
|
||||||||
|
Callback for when the XR session is started.
Parameters :
Returns :
any
|
import { WebGLRenderer, Vector3, BufferGeometry, Line } from 'three';
import { XRControllerModelFactory } from 'three/examples/jsm/webxr/XRControllerModelFactory';
import { XRManager, XRSessionType } from './xr-manager';
// NOTE: This was created on 29/08/2020
// It might become outdated given how WebXR is still a work in progress
// LAST UPDATED ON 20/06/2021
/**
* VR manager for VR related operations.
*/
export class VRManager extends XRManager {
/** Session type to use for VR. */
static readonly SESSION_TYPE: string = 'immersive-vr';
/** The VR controller for movement. */
private controller1: any;
/** The VR controller for movement. */
private controller2: any;
/** The VR controller representation */
private controllerGrip1: any;
/** The VR controller representation */
private controllerGrip2: any;
/** Listener for when the "Select Start" button is pushed. */
private onControllerSelectStart: () => void;
/** Listener for when the "Select Start" button is released. */
private onControllerSelectEnd: () => void;
/**
* Create the VR manager.
* @override
*/
constructor() {
super(XRSessionType.VR);
this.sessionInit = () => ({
optionalFeatures: ['local-floor', 'bounded-floor', 'hand-tracking'],
});
}
/**
* Set and configure the VR session.
* @param renderer Renderer to set the VR session for.
* @param onSessionStarted Callback to call when the VR session starts.
* @param onSessionEnded Callback to call when the VR session ends.
* @override
*/
public setXRSession(
renderer: WebGLRenderer,
onSessionStarted?: () => void,
onSessionEnded?: () => void
) {
super.setXRSession(renderer, onSessionStarted, onSessionEnded);
this.setupVRControls();
}
/**
* Callback when the VR session ends.
* @override
*/
protected onXRSessionEnded() {
super.onXRSessionEnded();
this.controller1?.removeEventListener(
'selectstart',
this.onControllerSelectStart
);
this.controller1?.removeEventListener(
'selectend',
this.onControllerSelectEnd
);
}
/**
* Set up VR controls for moving around the event display.
*/
private setupVRControls() {
// Get the controllers
this.controller1 = this.renderer.xr.getController(0);
this.getCameraGroup().add(this.controller1);
this.controller2 = this.renderer.xr.getController(1);
this.getCameraGroup().add(this.controller2);
const controllerModelFactory = new XRControllerModelFactory();
this.controllerGrip1 = this.renderer.xr.getControllerGrip(0);
this.controllerGrip1.add(
controllerModelFactory.createControllerModel(this.controllerGrip1)
);
this.getCameraGroup().add(this.controllerGrip1);
this.controllerGrip2 = this.renderer.xr.getControllerGrip(1);
this.controllerGrip2.add(
controllerModelFactory.createControllerModel(this.controllerGrip2)
);
this.getCameraGroup().add(this.controllerGrip2);
const geometry = new BufferGeometry().setFromPoints([
new Vector3(0, 0, 0),
new Vector3(0, 0, -1),
]);
const line = new Line(geometry);
line.name = 'line';
line.scale.z = 50;
this.controller1.add(line.clone());
this.controller2.add(line.clone());
// Set up movement
// Distance for a single step
const stepDistance = 30;
// Unit vector in camera direction
const direction = new Vector3();
// Interval ID for the movement interval
let intervalId: NodeJS.Timeout;
this.onControllerSelectStart = () => {
console.log(
'Select: c1 position ' + this.controller1.position.toArray().join(', ')
);
console.log(
'Select: CG position ' + this.cameraGroup.position.toArray().join(', ')
);
// Start movement in camera direction
intervalId = setInterval(() => {
this.moveInDirection(direction, stepDistance);
}, 20);
};
this.onControllerSelectEnd = () => {
// Stop the movement
clearInterval(intervalId);
};
this.controller1.addEventListener(
'selectstart',
this.onControllerSelectStart
);
this.controller1.addEventListener('selectend', this.onControllerSelectEnd);
}
/**
* Move the camera in the given direction.
* @param direction Direction to move towards.
* @param stepDistance Distance to move by.
*/
private moveInDirection(direction: Vector3, stepDistance: number) {
// Get the direction the controller is facing
//! this.controller.getWorldDirection(direction);
// Get direction the camera is facing
this.xrCamera?.getWorldDirection(direction);
// Move the camera in the given direction
this.cameraGroup.position.addScaledVector(direction, stepDistance);
this.xrCamera.position.addScaledVector(direction, stepDistance);
}
}


We sent an email to<EMAIL_ADDRESS>with a link to confirm your email address. Follow the link to continue creating your account.
Didn’t receive an email?
Or, use a different email address
You can close this window if you're done.


WITNESS LIST Government Organization Committee April 30, 2003 - 1:00P HB 1331 FOR: Aaronson, Maxine Atty of Law (Texas Neighborhoods Together), Dallas, TX SB 1403 FOR: Sisnett, Ana Executive Director (Austin Free-Net), Austin, TX ON: Francis, Denise Dir, State Grants Team (Governor's Office of Budget, Planning and Policy) Registering, but not testifying: On: Schriever, Joe F. Electronic Government Project Manager (Texas Department of Health) Walch, Susan Grants Analyst (Governor's Office, Budget Planning and Policy) SB 1879 FOR: Smith, Russel E. Executive Director (Texas Renewable Energy Industries Association), Austin, TX Registering, but not testifying: For: Hutson, Lee Mortgage broker (Self) McCutchen, Paul A. Mortgage Broker (Self) On: Taylor, Dub Director (State Energy Conservation Office)


Check Nearest Location:
LOCATE ME
Join
Contact Us
Careers
Francais
MENU
(current)
Breakfast
Beef
Chicken
Sandwiches & Wraps
Salad
View Full Menu
Snakes & Sides
Desserts & Shakes
Beverages
McCafè Menu
Value Picks
McCafè
Happy Meal
Value Picks
OUR FOOD QUALITY STORY
Making Informed Choices
Our Food Your Questions
Food For Good
Nutrition Calculator
Allergy Notice
THE LATEST
Current Promotions
My McD's App
McDonald's Card
COMMUNITY
RMHC
Sports and Sponsorships
Local Community
ATOMC
LOCATE
Please enter location
5 kilometres
10 kilometres
20 kilometres
50 kilometres
SUBMIT
OR
LOCATE ME
24 HOURS
DRIVE-THRU
ALL DAY BREAKFAST
MOBILE OFFERS
INDOOR PLAYPLACE
SEARCH
SUBMIT
Promotions
Explore our latests offers, and new additions to our menu.
New McCafè Bagels
Baked fresh daily in our restaurants.
Try them today.
It's back!
Summer Drink Days
Try it Today
Don't share it
New Butterscotch Blondie McFlurry
ENJOY ONE ALL TO YOURSELF
Mc Delivery Has Arrived
Check Availability
My McD's app
Get offers delivered to your phone all year long
Load, swipe, and go
McDonald's Card
Treat yourself and those you love - simply load, swipe and go.
More Delicious Details


Step 2
Move your 3 middle fingers on your left hand in a circular motion to feel for lumps in the right breast.
Step 3
Move around the breast in an up and down pattern across the breast to the middle of the sternum.
Step 4
Press your hands firmly down on your hips; look at your breasts for any changes of size, shape, contour, or dimpling, or redness or scaliness of the nipple or breast skin.
Step 5
Examine each underarm with your arm only slightly raised so you can easily feel in this area.


See other example with only 1 clone needed
The table is cloned twice and absolutely placed on top of the table. The first clone has the body and footer hidden and the second clone has the header and body hidden. The tables are placed at top:0 and bottom:0 respectively.
To avoid the issue with scrollbars eating up space the absolutely placed tables are positioned within a holding div that already has scrollbars and thus will account for the different scrollbar widths of browsers, or indeed if scrollbars are only overlaid when needed as in Mac systems.
| Header 1 | Header 2 | Header 3 with longer content that wraps as required | Header 4 | Header 5 | Header 6 | Header 7 | Header 8 |
|---|---|---|---|---|---|---|---|
| Left Column | Cell content test |
Cell content longer | Cell content with more content and more content | Cell content | Cell content | Cell content | Cell content |
| Left Column | Cell content | Cell content longer | Cell content | Cell content | Cell content | Cell content | Cell content |
| Left Column | Cell content | Cell content longer | Cell content | Cell content | Cell content | Cell content | Cell content |
| Left Column | Cell content | Cell content longer | Cell content | Cell content | Cell content | Cell content | Cell content |
| Left Column | Cell content | Cell content longer | Cell content | Cell content | Cell content | Cell content | Cell content |
| Left Column | Cell content | Cell content longer | Cell content | Cell content | Cell content | Cell content | Cell content |
| Left Column | Cell content | Cell content longer | Cell content | Cell content | Cell content | Cell content | Cell content |
| Left Column | Cell content | Cell content longer | Cell content | Cell content | Cell content | Cell content | Cell content |
| Left Column | Cell content | Cell content longer | Cell content | Cell content | Cell content | Cell content | Cell content |
| Left Column | Cell content | Cell content longer | Cell content | Cell content | Cell content | Cell content | Cell content |
| Left Column | Cell content | Cell content longer | Cell content | Cell content | Cell content | Cell content | Cell content |
| Left Column | Cell content | Cell content longer | Cell content | Cell content | Cell content | Cell content | Cell content |
| Footer 1 | Footer 2 | Footer 3 | Footer 4 | Footer 5 | Footer 6 | Footer 7 | Footer 8 |
Works in modern browsers (IE11+, Edge, Chrome, Safari and Firefox). Probably not a good idea for massive or complicated tables.


Last time I wrote about some basic AngularJS functionality for interacting with a RESTful API. We’re going to continue where with left off with our food inventory app to add some filtering/sorting . Check out the first post if you missed it, as we will be depending heavily on what is covered there.
Filtering
Lets say we want to search through our food inventory for something specific like oranges. We first need to open the index.ejs (that we created in Part 1) and add the following right before our table definition.
1 2 3 4 |
|
The div isn’t entirely necessary, however, it could be useful for applying styling (it’s pretty ugly as it sits). Now that the filter definition is complete, we need to go back to our repeater definition and pipe the results through the filter as so:
1
|
|
In a console in your project directory – fire off a sails lift
command, navigate to http://localhost:1337 in your browser of choice and start typing in the filter input box. You’ll notice that all of the model bound columns are available to be filtered (e.g. entering fruit displays only food items that were classified as fruit – typing in orange shows only any records with orange in the name etc. etc.). Also, you may notice that this is not case sensitive.
Ordering
Now lets add the ability to sort the data in our table. If we followed the basic example on the AngularJS docs site, we could simply create a sort variable that we would modify in the table headers and reference in the orderBy of our repeater. The value of the sort property should be the names of one of our columns.
1 2 3 |
|
To handle ascending / descending we could do something like this (however, as we’ll see in a minute this may not be an ideal solution):
1 2 3 |
|
Unfortunately, the reverse value would be shared across all columns. That means that if I click the ‘Name’ column and sort it descending and then click the ‘Type’ column – we will notice that it is sorting in ascending order. The problem is that the shared reverse variable is never getting reset when sorting by a different column.
To get around this, lets move our sorting functionality to the controller so we’re not duplicating a lot of code:
1 2 3 4 5 6 7 8 9 10 11 12 |
|
We’re creating the sort and reverse properties that are referenced in the orderBy of the repeater (orderBy:sort:reverse
) as well as a function to manage whether to change the sort column or simply change the value of reverse. If you click the ‘Name’ column several times, the sort will not change, however, the reverse value will (which wil trigger ascending / descending order).
Next we need to change our table headers so they call this function when clicked. As before, the column’s property name will be passed as a parameter to this function:
1 2 3 |
|
At this point fire up the page and see how everything is looking. The sorting / filtering is all working as intended. I have created a gist of the newly created index.ejs file that you can view here. In the next part of this series we will look at routes and editing our data.


26 January 2009 - The Ministry of Health and Population of Egypt has announced a new human case of avian influenza A(H5N1) virus infection. The case is a 2-year-old female from Manofia Governorate, Shebin Elkom District. Her symptoms began on 23 January and she was immediately hospitalized. She remains in a stable condition. Infection with the H5N1 avian influenza virus was confirmed by the Egyptian Central Public Health Laboratory.
Investigations into the source of her infection indicate a recent history of contact with sick and dead poultry.
Of the 53 cases confirmed to date in Egypt, 23 have been fatal.


{{+bindTo:partials.standard_nacl_article}}
NOTE:
Deprecation of the technologies described here has been announced
for platforms other than ChromeOS.
Please visit our
migration guide
for details.
This section contains a multi-part tutorial that explains how to get started developing applications with Native Client.


I've developed a new work flow for building static sites with PHP. It's a little rough around the edges but I like how flexible and simple it is. At least for my understanding of PHP.
The key to success on this platform is using PHP with wget to grab the rendered site. Check out the documentation for more information.
Copyright © 1999-2018 PHP Studies


Microsoft
SDE Intern
Shanghai, China
Unity
Backend Engineer Intern
San Francisco, US
Back-end | Front-end
C# | C++ | PYTHON | JAVA
Design | Development | Art
2D
3D
VR
Travel | Muggle king | Sesame


\
Model Viewer
Model Uploader
Forge Developer Docs
Upload File
to be prepared for viewer
Just drag and drop a model here


You can review all the GAA Hotels in Vancouver, including the hotel's address, price, room details, and ...
As a hotel manager, you can post your hotel information on our website for free!


How did IcanRead come to be?
Adam Gustavsson, the founder of IcanRead, wanted a tool for his dyslexic son. There were not any good tools on the market so he decided to create one himself. After year of development, testing and user feedback IcanRead was launched to the public in June of 2021.
What is Adams background?
Adam has studied at Swedens top technichal university, Chalmers where he has a masters degree in Computer Science and Automation. He has worked as a developer for over 10 years and has transitioned into the field of Artificial Intelligence. That gave him the skill set to develop IcanRead.
What company is behind the IcanRead App?
The company that created Icanread is based in Gothenburg Sweden. The name is Adam Gustavsson enskild firma. It is registered for VAT with the number SE740702243801. The legal adress is:
Adam Gustavsson
Mossgårdsvägen 39
433 76 Jonsered
Sweden


Then to actually connect and start receiving messages you do the following:
MyOddsFeedListener listener = new MyOddsFeedListener(); MySDKGlobalEventsListener globalEventsListener = new MySDKGlobalEventsListener(); OddsFeedConfiguration config = OddsFeed.getOddsFeedConfigurationBuilder() .setAccessToken("your-integration-token-here") .selectIntegration() .build(); OddsFeed oddsFeed = new OddsFeed(globalEventsListener, config); OddsFeedSessionBuilder sessionBuilder = oddsFeed.getSessionBuilder(); sessionBuilder.setListener(listener).setMessageInterest(MessageInterest.AllMessages).build(); oddsFeed.open();
See OddsFeed, OddsFeedSessionBuilder, SDKGlobalEventsListener and OddsFeedListener for details.
That should be about it!
If you want to get available sport events, active tournaments, or all sports you can get the SportsInfoManager from the main OddsFeed instance:
SportsInfoManager sportsInfoManager = oddsFeed.getSportsInfoManager(); // Get all sports, translated in the desired locales for (Sport sport : sportsInfoManager.getSports()) { } // Get all soccer active tournaments, the returned data will be translated in the desired locales for (SportEvent tournament : sportsInfoManager.getActiveTournaments("soccer")) { } // Get all competitions scheduled for today for (SportEvent sportEvent : sportsInfoManager.getCompetitionsFor(new Date())) { } // Get all live competitions for (SportEvent sportEvent : sportsInfoManager.getLiveCompetitions()) { }
Another more scalable way of listening to events is to have two different sessions one for high-priority messages and another for low-priority-messages. This means that the low priority messages will not prevent high-priority messages from getting processed (ex., BetSettlement is considered low-priority, OddsChange is considered high-priority). To create two different sessions for the high and low-priority messages you do the following:
MyOddsFeedListener listener = new MyOddsFeedListener(); MySDKGlobalEventsListener globalEventsListener = new MySDKGlobalEventsListener(); OddsFeedConfiguration config = OddsFeed.getOddsFeedConfigurationBuilder() .setAccessToken("your-integration-token-here") .selectIntegration() .build(); OddsFeed oddsFeed = new OddsFeed(globalEventsListener, config); OddsFeedSessionBuilder sessionBuilder = oddsFeed.getSessionBuilder(); sessionBuilder.setListener(listener).setMessageInterest(MessageInterest.HiPrioMessagesOnly).build(); sessionBuilder.setListener(listener).setMessageInterest(MessageInterest.LoPrioMessagesOnly).build(); oddsFeed.open();Note that the same listener is used for both channels, but when creating the two different sessions, different MessageInterest levels are provided. In this case, you will get two different threads doing the processing of the different types of messages.
sessionBuilder.setListener(listener).setMessageInterest(MessageInterest.LiveMessagesOnly).build();This kind of session will receive all messages except OddsChange happening before the game starts (you will start receiving OddsChange some minutes before the game starts) and BetSettlement resulting from confirmed results (you will still receive BetSettlments when the game ends, but only after 15minutes or even later after the game confirms the match results).
If some malfunction of the system is detected(Sportradar subsystem stops working, alive interval violations,...), the SDK will dispatch a ProducerDown event, when this happens it is advised that you disable all the markets related to this producer.
When the SDK detects that the malfunction is corrected it will automatically reconnect and request the most recent odds information and any other missed messages(a recovery request will be executed), after the recovery is completed the ProducerUp event is dispatched, after the producer is up again you can safely re-enable all the markets.
If your system crashes or if you take down/restart your system you need to provide the timestamp of the last processed message per producer, so the SDK performs the recovery for the missed messages(the max time from the last processed message can not be more than 3 days). You can do this trough the ProducerManager available on the OddsFeed instance. If the last processed message timestamp is not provided, the SDK will perform a full recovery, beware: with a full recovery you do not recover any lost BetSettlement messages!
// as an example, we set the last message received timestamp to 2 days ago for the producer with the id 1(LiveOdds) Calendar cal = Calendar.getInstance(); cal.add(Calendar.DATE, -2); ProducerManager producerManager = oddsFeed.getProducerManager(); producerManager.setProducerLastMessageTimestamp(1, cal.getTime().getTime()); // session creation,... oddsFeed.open(); // finally we open the feed


Material
Checkbox
States
Checked
Unchecked
Indeterminate
Disabled
Checked
Unchecked
Indeterminate
Multi-line label
Label
Description
Label
Description
Dark theme
Checked
Unchecked
Indeterminate


I checked the October stats for this subdomain, in particular the incoming hits from search engine result listings. I’m equally amused by the weird queries (many owing to my random authentic porno flick title tool; others to my Batmanized Swedish parliament transcriptions) and pleased that people have found their way here researching problems I’ve actually solved, implying I might have saved someone some time and pains.
The top three search phrases are porr (Swedish for “porn”) with 150 searches amounting to 14.8% of all incoming searches; sniglar (Swedish for “snails”, due to my 1000 snails) at 46 searches or 4.5%; and vokaler (“vowels”, due to something I wrote for a phonology exam) at 39 searches or 3.8%.
Further down the list, there are examples of queries that hopefully found their answers on this site, e.g. applescript timestamp, get to post converter, split bbcode and writing hfs with windows.
Some funny/weird ones are rudelbumsen, pug layouts (truly, this is probably the premier one, thanks to Johanna), babysitter, cute node, rävmössa, hallonvind, grismössa, vad göras skall är redan gjort / i herredagsmän resen icke så fort – and dream butt.
Checking the stats for my girlfriend’s art site, I’m delighted to find fat animals in fourth place with 70 hits. I probably don’t have enough of a readership to start memes, but – what are some of your funny/weird incoming searches?


Toggle navigation
myMFTS
Migration
Transfer
Dropdown
Action
Another action
Something else here
Separated link
One more separated link
Go!
Logout
Dashboard
dashboard & statistics


Add Metadata
The IMS Metadata specification (and the IEEE LOM, the standard influenced by IMS Metadata) provide a starting point for adding metadata, but ultimately, guidelines for implementing metadata at a local level are needed - to ensure that vocabularies are compatible, and that a common core of metadata is stored for all content in your locale.
Within the UK Education community, a draft Metadata Framework (UK Learning Object Metadata Framework: http://www.cetis.ac.uk/profiles/uklomcore) has been produced and is in the process of being finalised (previously referred to as the UKCMF: UK Common Metadata Framework). It would be useful to look at the UK LOM Framework document if you wish to add metadata to your content as it provides helful guidance.
If you recall, when we initially set up the Content Package, we decided that we should conform to IMS Metadata v1.2.2. but didn't actually add any metadata. Now we can add Metadata.
The Form View is really just a simpler representation of the full metadata record, and it is possible to add information in the Tree View which is not shown in the Form View, even though the data is retained. For our purposes, Form View will be ideal.
Multiple Entries
If you wish to add more than one entry for a given element (for instance if you want to refer to content containing multiple mime types (e.g. a web page with a flash animation), you need to use the Tree View rather than the Form View.
If you go back to the Form View only the first element will be shown, but the information is stored and will be retained on save. This procedure is the same for any element which allows multiple entries.
Once you finish editing, your completed Metadata form (Tree View) may look like the one shown below.
Metadata for Individual Resources
So far we have only discussed adding metadata to the content package as a whole. Metadata can in fact be added to individual items in the package in exactly the same way - just right click on the item you want to annotate.


2 overrides of UnsubscribeEvent
System.Management.Automation (2)
engine\EventManager.cs (2)
804
public override void
UnsubscribeEvent
(PSEventSubscriber subscriber)
1803
public override void
UnsubscribeEvent
(PSEventSubscriber subscriber)
2 references to UnsubscribeEvent
System.Management.Automation (2)
engine\EventManager.cs (1)
2523
_eventManager.
UnsubscribeEvent
(_subscriber);
engine\remoting\client\Job2.cs (1)
2087
EventManager.
UnsubscribeEvent
(subscriber);


$template
dotjem.routing
The $template services is used to load templates, templates are cached using the '$templateCache'.
Note: all templates are returned as promises.
Retrieves a template and returns that as a promise. A Template is a piece of html.
| Param | Type | Details |
|---|---|---|
| template | stringObjectfunction | Either a string reprecenting the actual template, an url to it, a function returning it or an object specifying a location of the template. If a template object i used, one of the following properties must be used:
|
| Promise | a promise that resolves to the template. |


Number Guesser
Rules of the game
Player must guess a number between a min and a max
Player gets a certain amount of guesses
Player will be notified of number of geses remaining
If the player loses, the player will be notified of the correct answer
Player can choose to play again
Guess a number between
1
and
10