Awesome Video
Contents
- Learning
- Intro to streaming video
- HLS
- DASH
- Encoding
- Reading
- Specs & Standards
- Players
- FFMPEG
- Audio
- Subtitles & Closed Captions
- HEVC
- Ads
- Roku
- Dolby
- QoE & Analytics
- Tools
- DRM
- Testing
- Talks & Presentations
- Books
- CDN
Learning
An awesome list of learning video streaming resources.
- A short history of video coding - From H.261 to H.265
- Adding Alternate Media to a Playlist | Apple Developer Documentation -
- Back to Basics: Encoding Definition and Adaptive Bitrate -
- Create your own video streaming server with Linux | Opensource.com -
- Creating A Production Ready Multi Bitrate HLS VOD stream -
- Creating a Master Playlist | Apple Developer Documentation -
- Eyevinn/streaming-onboarding: New to streaming and don't know where to start? This is the place for you! -
- FFmpeg and how to use it wrong | VideoBlerg -
- Generate MPEG-TS from file with ffmpeg -
- Guide to Mobile Video Streaming with HLS -
- HLS Authoring Specification for Apple Devices | Apple Developer Documentation -
- HLS adaptive streaming tutorial with CloudFront & JW Player -
- HOW TO: View an HLS Stream in QuickTime or VLC -
- HTTP Live Streaming: HLS Player for Android | Toptal -
- How To Setup Nginx For HLS Video Streaming On Centos 7 -
- How video streaming works on the web: An introduction -
- Internet Video Streaming part 1 -
- Internet Video Streaming? ABR part 2 -
- Live Playlist (Sliding Window) Construction | Apple Developer Documentation -
- Live Video Transmuxing/Transcoding: FFmpeg vs TwitchTranscoder, Part I -
- Live Video Transmuxing/Transcoding: FFmpeg vs TwitchTranscoder, Part II -
- OTT Content Delivery -
- OTT Content Delivery Multi CDN -
- The structure of an MPEG-DASH MPD - Brendan Long -
- Understanding the HTTP Live Streaming Architecture | Apple Developer Documentation -
- Video Encoding Compression and Resolutions -
- Video on Demand Playlist Construction | Apple Developer Documentation -
- bash scripts to create VOD HLS stream with ffmpeg almighty (tested on Linux and OS X) -
- create-DASH-HLS - A tutorial to generate fMp4 files compatible with dash and HLS
- ffmpeg audio/video manipulation - How to tame the Swiss army knife of audio and video manipulation
- ffmpeg audio/video manipulation -
- matmoi/create-DASH-HLS: A tutorial to generate fMp4 files compatible with dash and HLS -
Intro to streaming video
What's video? back to top
- digital_video_introduction: A hands-on introduction to video technology: image, video, codec (av1, vp9, h265) and more (ffmpeg encoding). - A gentle introduction to video technology, although it's aimed at software developers / engineers, we want to make it easy for anyone to learn.
- eyevinn/streaming-onboarding -
HLS
HLS tools, libraries, and resources.
- Advances in HTTP Live Streaming - WWDC 2017 - Videos - Apple Developer -
- Advances in HTTP Live Streaming WWDC -
- AirPlay2 Example Code -
- AirPlay2 WWDC 19 Slides -
- Eyevinn/Hls-download -
- Eyevinn/hls-download -
- Eyevinn/hls-origin-scripts -
- Eyevinn/hls-playlist-parser -
- Eyevinn/hls-relay -
- Eyevinn/hls-to-dash -
- Eyevinn/hls-ts-analyzer -
- Eyevinn/hls-ts-js -
- Eyevinn/manifestparser -
- GitHub - Eyevinn/vod-to-live: A python library to generate Live HLS from VOD -
- HLS and Fragmented MP4 | HTTP Live Streaming - At WWDC 2016, Apple announced support for fragmented MP4 (fMP4) as an alternative to MPEG-TS, which prior to their announcement was the only supported format.
- HLS and Fragmented MP4 | HTTP Live Streaming -
- HLS | Bento4 -
- HLSCore Swift HLS lib -
- HLSDownloader - Downloads m3u8 playlist and TS chunks for a given playlist URL.

- A Large-Scale Comparison of x264 x265 and libvpx - Netflix Technology Blog.
- A Large-Scale Comparison of x264 x265 and libvpx -
- Bento4 | Fast, Modern Tools and C++ Class Library for all your MP4 and DASH media format needs -
- Introducing SVT-AV1: a scalable open-source AV1 framework -
- Video Transcoding API -
- bloc97/Anime4K -
- cannonbeach/ott-packager -
- demo-encoder - A nodejs encoding system based on ffmpeg and configured to write HLS streaming files to S3
- docker-bento4 -
- node-video-lib -
- nytimes/video-presets -
- olaris / olaris-server -
- realeyes-media/alpine-node-video-multitool -
- realeyes-media/demo-encoder: A nodejs encoding system based on ffmpeg and configured to write HLS streaming files to S3 -
Reading
A list of reading articles, blogs, and newsletters for video streaming.
- 9 Best Home Server Apps to Automate Media Management -
- Battle of the Video Format: Comparing MKV vs MP4 -
- Extracting contextual information from video assets -
- IMF: A Prescription for Versionitis -
- Inside MPEG's Ambitious Plan to Launch 3 Video Codecs in 2020 -
- Server-less Just-in-Time Packaging with AWS Fargate and Unified Origin by Unified Streaming -
- Server-less Just-in-Time Packaging with AWS Fargate and Unified Origin by Unified Streaming -
- Streaming Live From the Battlefield: Military Video in 2019 -
- The Netflix Content Processing Pipeline -
- Video in the War Zone: The Current State of Military Streaming -
Specs & Standards
Latest offical specs and standards related to video streaming.
- DASH-IF Interoperability: Guidelines for Implementations -
- HLS Authoring Specification for Apple Devices - Describes the requirements for live and VOD audio-video content delivery using HTTP Live Streaming (HLS) to Apple devices.
- HLS Authoring Specification for Apple Devices | Apple Developer Documentation -
- HTTP Live Streaming 2nd Edition -
- ISO - ISO/IEC 23009-1:2019 - Information technology -- Dynamic adaptive streaming over HTTP (DASH) -- Part 1: Media presentation description and segment formats -
- SCTE Dash SPEC -
- Standard audio A85-2013 -
Players
Client players, libraries, tools, and examples.
 Build with theos -
- googlecast/CastReceiver -
- imoreapps/ffmpeg-avplayer-for-ios-tvos: A tiny but powerful iOS and Apple TV OS av player framework that's based on the FFmpeg library. -
- masterjk/ios-avplayer-http-capture: iOS based application that embeds the AVPlayer and capture HTTP headers and send it back to the iOS application. It internally embeds a proxy server. -
- peak3d/inputstream.adaptive -
- tanersener/mobile-ffmpeg: FFmpeg for Android, iOS and tvOS -
- tjenkinson/media-element-syncer -
- ustwo/videoplayback-ios -
FFMPEG
FFMPEG libraries, configs, tools, and examples.
- CRF Guide (Constant Rate Factor in x264, x265 and libvpx) - The Constant Rate Factor (CRF) is the default quality (and rate control) setting for the x264 and x265 encoders
- CRF Guide (Constant Rate Factor in x264, x265 and libvpx) -
- FFmpeg4Java 3.1.1-1.1 -
- Generate MPEG-TS from file with ffmpeg -
- How to generate a fmp4 hls live stream with FFMPEG - ffmpeg example command.
- How to generate a fmp4 hls live stream with FFMPEG -
- Loop file and generate multiple video bitrates muxed in MPEG-TS with ffmpeg -
- awesome-ffmpeg - A curated list of awesome FFmpeg resources.
- compile and install latest ffmpeg source as pkg -
- cuda/ubuntu16.04/ffmpeg-gpu/Dockerfile master nvidia / container-images / samples GitLab -
- ffmpeg and hardware acceleration of HEVC transcoding - ffmpeg -hide_banner -h encoder=hevc_videotoolbox
- ffmpeg audio/video manipulation -
- jrottenberg/ffmpeg: Docker build for FFmpeg on Ubuntu / Alpine / Centos 7 / Scratch -
- kokorin/Jaffree -
- x264 FFmpeg Options Guide - Linux Encoding -
Audio
Audio libraries, tools, and examples.
- EBU R128 Introduction - Florian Camerer -
- Adjust and Normalize Your Music Files with FFMPEG - Make Tech Easier -
- Audio Loudness Conversational Actions - Google Developers -
- Audio normalization with ffmpeg using loudnorm (ebur128) filter? bytes and bones -
- How To Normalize Audio - Why Do It? Everything You Need To Know -
- How to Set Audio Levels for Video -
- Loudness Explained Page | Music Tribe - TC Electronic -
- Multi Channel Audio codec evaluations -
- Quick Tutorial: How to Increase Volume in Audacity [2019 Update] -
- ReplayGain - Audacity Forum -
- Standard audio A85-2013 -
- hybrik-samples/ebu_r128_audio_normalization.json hybrik/hybrik-samples -
- slhck/ffmpeg-normalize: Audio Normalization for Python/ffmpeg -
- superpoweredSDK/Low-Latency-Android-iOS-Linux-Windows-tvOS-macOS-Interactive-Audio-Platform: Superpowered Audio, Networking and Cryptographics SDKs. High performance and cross platform on Android, iOS, macOS, tvOS, Linux, Windows and modern web browsers. -
Subtitles & Closed Captions
Subtitling & Closed Caption libraries, tools, and examples.

- Apple Got It Wrong: Encoding Specs for HEVC in HLS - Though I didn't recognize it at first, when Apple released its encoding specifications for HEVC and HLS, they got it wrong, though it took a comment from a true encoding expert to help me realize it.
- Encoding Live and VOD for HEVC & HLS -
- Eyevinn/docker-hevc -
- Guide to HEVC/H.265 Encoding and Playback - TechSpot -
- HEVC DRM Market Update -
- HEVC Scientific overview -
- HEVC in HLS: 10 Key Questions for Streaming Video Developers -
- HEVC. Efficienty -
- HLS Authoring Update for HEVC -
- Jan Olzer on HLS HEVC -
- Suggestion for x265's --tune film - Doom9's Forum -
- hevc video -
- hevc video part 1 -
- hevc video part 2 -
- multicoreware / x265 / wiki / Home -
- x265 Documentation -
Ads
Ads in streaming video related libraries, tools, examples, and resources.
- Eyevinn/adxchange-engine -
- Eyevinn/vast-info -
- SCTE-104/35 and Beyond: A Look at Ad Insertion in an OTT World | TvTechnology -
- Understanding Server-Side Dynamic Ad Insertion - Eyevinn Technology - Medium -
Roku
Roku app tools, libraries,and examples.
- Roku Developer | Documentation | Streaming specifications -
- XML + Code + Good times = RSG Application - Plex Labs - Medium -
Dolby
Dolby specs, libraries, examples, and tools.
- Dolby Vision for Content Creators | Dolby Laboratories -
- Dolby Vision streams within the HTTP Live Streaming format -
- DolbyProfessional Loudness -
QoE & Analytics
QoE & Analytics tools, libraries, and resources.
- JNoDuq/videobench: VMAF PSNR Bitrate Analyzer -
- Netflix/vmaf -
- Quality of Experience in Streaming -
- Toward A Practical Perceptual Video Quality Metric - Netflix TechBlog - Medium -
- VMAF: The Journey Continues - Netflix TechBlog - Medium -
- Video Bench - How to measure your video quality easily -
- Video Quality Assessment -
- cta-wave/R4WG20-QoE-Metrics -
Tools
Streaming video tools and resources to make life easier.
- A Docker container with the video streaming tools you need -
- Aws video media convert docs -
- Batch-Py-Remux -
- Bento4 | Fast, Modern Tools and C++ Class Library for all your MP4 and DASH media format needs -
- Deep Video Analytics -
- EEL - A simple Proxy Service for JSON Event Transformation and Forwarding -
- Eyevinn/docker-jit-capture -
- Eyevinn/docker-serve: A simple Python based HTTP server that sets CORS allow headers.
- Content Protection for HLS with AES-128 Encryption -
- CrackerCat/video_decrypter -
- Digital Rights Management (DRM) - Everything you need to know -
- Encryption & DRM with Multiple Keys? Unified Streaming -
- HEVC DRM Market Update - Since time eternal, the streaming industry has toiled with and extolled the virtues of CODECs and their key enablement of the entire digital video experience.
- HEVC DRM Market Update -
- HLS Key Specs - HLS Key Files
- HLS Key Specs -
- Secure Apple HLS streaming using DRM encryption -
- Securing OTT Content - DRM -
- aes-decrypter -
- shengbinmeng/dash-drm -
Testing
Video streaming testing tools and helpers.
- 17 Free MPEG-DASH example and HLS m3u8 sample test streams - Collection of publicly available and free MPEG-DASH and HLS examples, test streams and datasets to help you through your development process
- 4K Media | Free Ultra-HD / HDR / HLG / Dolby Vision 4K Video Demos & Samples - Sample 4K HDR HLG AND Dolby Vision content
- Automated testing on devices - Netflix TechBlog - Medium -
- HLS Test Suite From Eurofins Digital Testing - Free HLS Test Streams and Test Cases -
- HTTP Live Streaming (HLS) - Artillery.io Docs -
- Xiph.org Test Media -
- artilleryio/artillery-plugin-hls -
- bengarney/list-of-streams -
Talks & Presentations
Conference talks and presentations on streaming video .
- Advances in HTTP Live Streaming - WWDC 2017 - Videos - Apple Developer
- Advances in HTTP Live Streaming - WWDC 2017 - Videos - Apple Developer -
- Video Insiders Podcast -
- mhv/2019 Talks -
Books
Books on video streaming.
CDN
Last mile tools, documentations, and resources.
- Amazon S3 as Origin Fastly tutorial -
- Delivering Live Streaming Video with CloudFront and AWS Media Services - Amazon CloudFront -
- Delivering Live Streaming Video with CloudFront and AWS Media Services - Amazon CloudFront -
- Edge Computing with Fastly CDN and Varnish VCL for Authenticated Requests -
- Fastly compared to Amazon CloudFront -
- How to use DASH and HLS Adaptive Streaming with AWS S3 and Cloudfront -
- Lambda@Edge Design Best Practices | Networking & Content Delivery -
- OTT Content Delivery CDN Alternatives -
- On-Demand and Live Streaming Video with CloudFront - Amazon CloudFront -
- Optimizing High Availability with CloudFront Origin Failover - Amazon CloudFront -
- Tutorial: Creating a Simple Lambda@Edge Function - Amazon CloudFront -
Contributing
Please take a quick look at the contribution guidelines first. If you see a package or project here that is no longer maintained or is not a good fit, please submit a pull request to improve this file. Thank you to all contributors; you rock!!


--- layout: post title: 'LIFT07: Panel: The user/citizen centered society' date: 2007-02-09 00:00:00 categories: digital-media social ---
LIFT07: Panel: The user/citizen centered society
Moderator: Bruno Giussani
Robert Scoble, Podtech
Beth Krasna, Independent Board Member
Thierry Crouzet, writer, BonWeb.com
Derek Powazek, founder, JPG magazine
RS: talking about John Edwards. On his plane, he had me, him, a video guy, a photographer posting to Flickr, a blogger writing (and also reading TechMeme, etc. to track the conversations), a strategist, and an advance guy. UGC has been brought into campaigns. Everyone in this room has the ability to spread an idea worldwide in a few hours.
TC: Politicians don't understand the net and they fear it.
BG: Thierry, you're involved with the long tail of politics.
TC: (Talking about The French Paradox) More TV = more abstention in elections. Shows a graph linking rise in TV viewing to rise in abstention rates. Shows another chart: number of party members has been rising slightly as number of weblogs grows. The hypothesis is that blogging has led to a rise in political participation: "the long tail of politics". Compares 1995 elections to 2002 - very different distribution of votes amongst candidates.
(Is this driven by a desire to become politically engaged in more ways, or by dissatisfaction with the major parties - i.e. is it a push to the right of the curve, or a pull from the left?)
BG: So politics is getting broken up just as music has been?
RS: The Internet can present choices better than old media. Old media can only present 3 candidates.
TC: Politicians want to be alone on-stage.
RS: Big media doesn't like it because they see their audience erode into long tail. Generally politicians are good at dealing with the crowd, so the good ones will handle it.
D: "When the going gets weird, the weird go pro" is the subtext for this talk. Design matters - when you look as good as the mainstream media you get taken as seriously. We're combining the magazine and art businesses, which are both elitist. The internet lets us run around the walls these businesses set up around themselves. We let anyone submit an article under a theme and users vote on them. We had 7000 submissions from the last issue and printed 100 - competition is furious. Media is increasingly participatory - soon media you can't participate in will be boring. We make money via ads and subscriptions. We pay photographers $100 per photo and a free subscription. We "tolerate" professionals.
BG: Much of UGC is about constraining people into a theme.
D: If anyone ever says to you "it's like Wikipedia for X", they're doomed. People don't want to make things for you, you give them an opportunity to create and thank them: "internally design for selfishness".

RS: No, we'll still need professionals, people skilled at telling stories through photography will still rise to the top. Maybe not by selling cover images to Time Magazine for $50k, but still...
Q: As a journalist, I'm concerned. The conversation just went from "do we need professional photographers", to a business model. I like bloggers - they're a crucial part of the community. Pros do a separate job. Interns, say, have a writing background but don't know about copyright issues.
(comment from backchannel: "we need spam filters in the mics")
Q: I don't buy this is a big shift.
BK: It's faster and there's more out there.
RS: Look at the way we can reference YouTube videos here.
BK: It's because of the internet, things move faster.


0x6A75616E/PwnedPasswords A client for HaveIBeenPwned.com's compromised passwords API. Written in Swift, with no dependencies. - 0x6A75616E/PwnedPasswords
Comparing Native Blazor Components Should we rewrite native UI components or reuse existing JavaScript UI components? We compare native Blazor components to wrapped JavaScript components.
.NET Core is the Future of .NET | .NET Blog We introduced .NET Core 1.0 on November 2014. The goal with .NET Core was to take the learning from our experience building, shipping and servicing .NET Framework over the previous 12 years and build a better product. Some examples of these improvements a...
dotnet/diagnostics This repository contains the source code for various .NET Core runtime diagnostic tools and documents. - dotnet/diagnostics
microsoft/react-native-windows A framework for building native Windows apps with React. - microsoft/react-native-windows
Announcing WSL 2 | Windows Command Line WSL 2 is a new architecture that allows for dramatic file system performance and full system call compatibility in WSL using a Linux kernel.
Thank you Waitrose, now fix your insecure site I had a follower send me a curious question the other day which if I paraphrase, went like this: Hi, I was worried about the security of the Waitrose login form so I contacted them about it. They sent me a response but I’m not sure if it&
Build 2019: Microsoft Announces .NET 5 - Thurrott.com The next .NET release after .NET Core 3 will be branded as .NET 5, with Microsoft finally combining classic .NET with the open source .NET Core into a single platform.
See Microsoft Build 2019 Highlights | Microsoft Azure Discover the latest announcements from Microsoft Build 2019, the premier developer conference from Microsoft.
Microsoft Build 2019 Developer Conference May 6-8 Seattle, WA Join developers and industry experts at Microsoft Build to explore the latest developer tools and technologies. #MSBuild
Office 365 for Mac is available on the Mac App Store - Microsoft 365 Blog Today, Office 365—with modern, cloud-connected versions of Word, Excel, PowerPoint, Outlook, OneNote, and OneDrive—is now available to download as a bundle on the Mac App Store.
The “Cobra Effect” that is disabling paste on password fields Back in the day when the British had a penchant for conquering the world, they ran into a little problem on the subcontinent; cobras. Turns out there were a hell of a lot of the buggers wandering around India and it also turned out that they were rather v...
Testing the BitchinFast 3D 2000!!! This card made by VideoLoca, a subsidiary of Apple Computers. The card featured all the most popular 3D chipsets in some kind of scanline-interleave bouillabaisse, having combined 256Mb of VRAM.
.NET Internals Cookbook Part 12 — Memory structure, attributes, handles – Random IT Utensils This is the twelfth part of the .NET Internals Cookbook series. For your convenience you can find other parts in the table of contents in Part 0 – Table of contents
.NET Core Summer Event - A 1 day conference focused on software development with .NET Core A 1 day conference focused on software development with .NET Core
Intelligent Productivity and Collaboration, from Anywhere | Visual Studio Blog Developers today are encountering an overwhelming amount of complexity due to the growing emphasis on time-to-market, and a broader variety of technologies being used than ever before (e.g. polyglot apps, microservices). Additionally, teams are becoming m...
ASP.NET Blog | ASP.NET Core updates in .NET Core 3.0 Preview 5 ASP.NET Core updates in .NET Core 3.0 Preview 5 .NET Core 3.0 Preview 5 is now available. This iteration was brief for the team and primarily includes bug fixes and improvements to the more significant updates in Preview 4. This post summarizes the import...
Microsoft Build 2019 Developer Conference May 6-8 Seattle, WA Join developers and industry experts at Microsoft Build to explore the latest developer tools and technologies. #MSBuild
Announcing .NET Core 3.0 Preview 5 | .NET Blog Today, we are announcing .NET Core 3.0 Preview 5. It includes a new Json serializer, support for publishing single file executables, an update to runtime roll-forward, and changes in the BCL. If you missed it, check out the improvements we released in .NE...
Introducing .NET 5 | .NET Blog Today, we’re announcing that the next release after .NET Core 3.0 will be .NET 5. This will be the next big release in the .NET family. There will be just one .NET going forward, and you will be able to use it to target Windows,


This list acknowledges free and open-source Android apps that are adopting good testing practices (as of September 2017).
Download the whole dataset of apps that were evaluated (1000 FOSS apps).
For more details, check our EMSE article.


The Best Fast Food at Sea
You won't find McDonalds or Arby's or Wendy's at sea, but that doesn't mean you can't feed your junk food habit.  Here are some that make blowing the calories worth it.
Hot dogs – At Royal Caribbean's Boardwalk Dog House you can belly up to the open-air counter for choices including all-beef, Kosher-style Coney Island hot dogs, brats and sausages – with all kinds of toppings (available on Allure of the Seas, Radiance and Splendour).
On Norwegian Cruise Line's New York-based Norwegian Breakaway, grab a Sabrett's all-beef dog with onions in sauce and other classic toppings, served on The Waterfront promenade from an authentic New York street cart.
Burgers – Food Network star Guy Fieri delivers fat, greasy, yummy burgers at Guy's Burger Joint, poolside on six Carnival ships (each producing 1,200 of the popular burgers per day). Fieri uses 80/20 ground-chuck and encourages topping of lots of cheese and his Donkey Sauce (a secret mayo). Those who really want to pig out have the option of the Pig Patty, made of bacon (on the Carnival Breeze, Conquest, Glory, Liberty, Sunshine and Triumph).
Head to the Waves Grill near the pool on Oceania Cruises ships for the most delicious gourmet burgers at sea, made of Black Angus beef and served with toppings including Swiss cheese and/or bacon and Bourbon BBQ sauce. If that's not extravagant enough try the Kobe Burger, made with Wagyu Beef and topped with truffle sauce (on all five Oceania Cruises ships).
Pizza – Princess Cruises takes the pie here serving delicious Neapolitan-style hand-tossed pizza that earns its claim of best at sea – whether you go with plain cheese or a variety of toppings. Grab a slice or whole pie poolside on all Princess ships or head to complimentary, sit-down pizzerias on the Grand Princess, Sapphire Princess and the new Royal Princess (also available delivered to your cabin for a fee of $3).
Taco bar – On all Holland America Line ships, adjacent to the poolside Terrace Grill you'll find a do-it-yourself taco bar featuring flour tortillas, crispy taco shells and a broad choice of fillings – including chicken fajitas, chili and amazing mango salsa. Some days there are even hot tamales.
Indian food -- Lovers of Indian food will salivate at the Tandoori ovens on select Carnival ships, outdoor venues where you can load up on Indian-style chicken, meat and fish, curries and fresh-baked nan bread (on the Carnival Breeze, Conquest, Glory, Liberty, Sunshine and Triumph).
Chili fries -- Johnny Rockets hamburger joints on Royal Caribbean ships include on their menus crispy fires smothered in chili, gooey cheese and onions. They are hard to resist, despite a $4.95 cover charge to get into the restaurant (on 11 Royal Caribbean ships).


{{ partial "header.html" . }} {{ partial "nav.html" . }}
TinkerSoc is Kent's Maker society, where you can learn coding, electronics, 3D-printing, amateur radio, metalwork and more!
It's a Wednesday night, and you have decided that you want to MAKE something. But, where on campus do you go if you want to do some sewing? Perhaps you have an itch to turn something on a lathe or want just want to send a radio wave around the world?
TinkerSoc, Kent's Maker society, is the place to go. Whether it's 3D printing something, or cutting through materials with lasers, we have the tools and experience to help you with your project. We even run workshops, so that you can pick up new skills (no experience is required!)
So, if this has piqued your interest, and you want to hang out with like-minded people who enjoy making things, then pop along to The Shed (the School of Computing's Makerspace located in the Cornwallis Quad) from 6PM on a Wednesday night! TinkerSoc is free for all Kent students.


{% extends 'home_base.html' %} {% load static %} {% block storage_content %}
You could also go to this section of project:
{{ signal.adnotations | safe | linebreaks }}
Mean: {{ signal_mean }} {{ signal.amplitude_unit }}
Energy: {{ signal_energy }}
Power: {{ signal_power }}


| build_sql {dbplyr} | R Documentation |
This is a convenience function that should prevent sql injection attacks (which in the context of dplyr are most likely to be accidental not deliberate) by automatically escaping all expressions in the input, while treating bare strings as sql. This is unlikely to prevent any serious attack, but should make it unlikely that you produce invalid sql.
build_sql(..., .env = parent.frame(), con = sql_current_con())
... |
input to convert to SQL. Use |
.env |
the environment in which to evaluate the arguments. Should not be needed in typical use. |
con |
database connection; used to select correct quoting characters. |
This function should be used only when generating SELECT
clauses,
other high level queries, or for other syntax that has no R equivalent.
For individual function translations, prefer sql_expr()
.
con <- simulate_dbi() build_sql("SELECT * FROM TABLE", con = con) x <- "TABLE" build_sql("SELECT * FROM ", x, con = con) build_sql("SELECT * FROM ", ident(x), con = con) build_sql("SELECT * FROM ", sql(x), con = con) # http://xkcd.com/327/ name <- "Robert'); DROP TABLE Students;--" build_sql("INSERT INTO Students (Name) VALUES (", name, ")", con = con)


Free |
Team |
Business |
Enterprise |
|
|---|---|---|---|---|
| Save 50% On Annual Subscription |
$0
Lorem ipsum dolor sit amet confsectur justo massa. |
$39
\Month
\Year
Lorem ipsum dolor sit amet confsectur justo massa. |
Recomended
$59
\Month
\Year
Lorem ipsum dolor sit amet confsectur justo massa. |
$89
\Month
\Year
Lorem ipsum dolor sit amet confsectur justo massa. |
|
Pages
|
||||
|
Monthly visits
|
10000 | 30000 | 50000 | 100000+ |
|
Collection items
|
50000 | 70000 | 100000 | 250000+ |
|
Form submissions
|
||||
|
Monthly visits
|
100 | 5000 | 20000 | 150000+ |
|
Annually visits
|
||||
| Start Free Trial | Start Now | Start Now | Start Now |
Service Provided As:
The Service is provided for free during this pilot project, and is provided "as is" with no warranty. Conclude will provide User support for the Service, however; Conclude is not committed to any level of service or availability of the Service. A further description of the Service and our user support is available at the Site.
Company Liability:
If you enter into this agreement on behalf of a company, you hereby agree that the company is responsible under this Agreement for all actions and omissions conducted by its designated users of the Service.
Service Provided As:
The Service is provided for free during this pilot project, and is provided "as is" with no warranty. Conclude will provide User support for the Service, however; Conclude is not committed to any level of service or availability of the Service. A further description of the Service and our user support is available at the Site.
Company Liability:
If you enter into this agreement on behalf of a company, you hereby agree that the company is responsible under this Agreement for all actions and omissions conducted by its designated users of the Service.
Service Provided As:
The Service is provided for free during this pilot project, and is provided "as is" with no warranty. Conclude will provide User support for the Service, however; Conclude is not committed to any level of service or availability of the Service. A further description of the Service and our user support is available at the Site.
Company Liability:
If you enter into this agreement on behalf of a company, you hereby agree that the company is responsible under this Agreement for all actions and omissions conducted by its designated users of the Service.
Service Provided As:
The Service is provided for free during this pilot project, and is provided "as is" with no warranty. Conclude will provide User support for the Service, however; Conclude is not committed to any level of service or availability of the Service. A further description of the Service and our user support is available at the Site.
Company Liability:
If you enter into this agreement on behalf of a company, you hereby agree that the company is responsible under this Agreement for all actions and omissions conducted by its designated users of the Service.


The AWS Command Line Interface is a unified tool to manage your AWS services.
aws [options] <command> <subcommand> [parameters]
Use aws command help for information on a specific command. Use aws help topics to view a list of available help topics. The synopsis for each command shows its parameters and their usage. Optional parameters are shown in square brackets.
Turn on debug logging.
Override command's default URL with the given URL.
By default, the AWS CLI uses SSL when communicating with AWS services. For each SSL connection, the AWS CLI will verify SSL certificates. This option overrides the default behavior of verifying SSL certificates.
Disable automatic pagination.
The formatting style for command output.
A JMESPath query to use in filtering the response data.
Use a specific profile from your credential file.
The region to use. Overrides config/env settings.
Display the version of this tool.
Turn on/off color output.
Do not sign requests. Credentials will not be loaded if this argument is provided.
The CA certificate bundle to use when verifying SSL certificates. Overrides config/env settings.
The maximum socket read time in seconds. If the value is set to 0, the socket read will be blocking and not timeout.
The maximum socket connect time in seconds. If the value is set to 0, the socket connect will be blocking and not timeout.


A Provider is an implementation of the actions that manage resources (of some type) on a system. This class is the base class for all implementation of a Puppet Provider.
Concepts:
Returns the absolute path to the executable for the command referenced by the given name. @raise [Puppet::DevError] if the name does not reference an existing command. @return [String] the absolute path to the found executable for the command @see which
# File lib/puppet/provider.rb, line 154 def self.command(name) name = name.intern if defined?(@commands) and command = @commands[name] # nothing elsif superclass.respond_to? :command and command = superclass.command(name) # nothing else raise Puppet::DevError, "No command #{name} defined for provider #{self.name}" end which(command) end
Confines this provider to be suitable only on hosts where the given commands are present. Also see {Puppet::Provider::Confiner#confine} for other types of confinement of a provider by use of other types of predicates.
@note It is preferred if the commands are not entered with absolute paths as this allows puppet
to search for them using the PATH variable.
@param command_specs [Hash{String => String}] Map of name to command that the provider will
be executing on the system. Each command is specified with a name and the path of the executable.
@return [void] @see optional_commands
# File lib/puppet/provider.rb, line 180 def self.commands(command_specs) command_specs.each do |name, path| has_command(name, path) end end
@return [Boolean] Return whether the given feature has been declared or not.
# File lib/puppet/provider.rb, line 277 def self.declared_feature?(name) defined?(@declared_features) and @declared_features.include?(name) end
@return [Boolean] Returns whether this implementation satisfies all of the default requirements or not.
Returns false If defaults are empty.
@see Provider.defaultfor
# File lib/puppet/provider.rb, line 285 def self.default? return false if @defaults.empty? if @defaults.find do |fact, values| values = [values] unless values.is_a? Array if fval = Facter.value(fact).to_s and fval != "" fval = fval.to_s.downcase.intern else return false end # If any of the values match, we're a default. if values.find do |value| fval == value.to_s.downcase.intern end false else true end end return false else return true end end
Sets a facts filter that determine which of several suitable providers should be picked by default. This selection only kicks in if there is more than one suitable provider. To filter on multiple facts the given hash may contain more than one fact name/value entry. The filter picks the provider if all the fact/value entries match the current set of facts. (In case there are still more than one provider after this filtering, the first found is picked). @param hash [Hash<{String => Object}>] hash of fact name to fact value. @return [void]
# File lib/puppet/provider.rb, line 316 def self.defaultfor(hash) hash.each do |d,v| @defaults[d] = v end end
(see Puppet::Util::Execution.execfail)
# File lib/puppet/provider.rb, line 146 def self.execfail(*args) Puppet::Util::Execution.execfail(*args) end
(see Puppet::Util::Execution.execpipe)
# File lib/puppet/provider.rb, line 134 def self.execpipe(*args, &block) Puppet::Util::Execution.execpipe(*args, &block) end
(see Puppet::Util::Execution.execute)
# File lib/puppet/provider.rb, line 122 def self.execute(*args) Puppet::Util::Execution.execute(*args) end
Creates a convenience method for invocation of a command.
This generates a Provider method that allows easy execution of the command. The generated method may take arguments that will be passed through to the executable as the command line arguments when it is invoked.
@example Use it like this:
has_command(:echo, "/bin/echo") def some_method echo("arg 1", "arg 2") end
@comment the . . . below is intentional to avoid the three dots to become an illegible ellipsis char. @example . . . or like this
has_command(:echo, "/bin/echo") do is_optional environment :HOME => "/var/tmp", :PWD => "/tmp" end
@param name [Symbol] The name of the command (will become the name of the generated method that executes the command) @param path [String] The path to the executable for the command @yield [ ] A block that configures the command (see {Puppet::Provider::Command}) @comment a yield [ ] produces {|| …} in the signature, do not remove the space. @note the name ´has_command´ looks odd in an API context, but makes more sense when seen in the internal
DSL context where a Provider is declaratively defined.
# File lib/puppet/provider.rb, line 228 def self.has_command(name, path, &block) name = name.intern command = CommandDefiner.define(name, path, self, &block) @commands[name] = command.executable # Now define the class and instance methods. create_class_and_instance_method(name) do |*args| return command.execute(*args) end end
Initializes defaults and commands (i.e. clears them). @return [void]
# File lib/puppet/provider.rb, line 342 def self.initvars @defaults = {} @commands = {} end
Returns a list of system resources (entities) this provider may/can manage. This is a query mechanism that lists entities that the provider may manage on a given system. It is is directly used in query services, but is also the foundation for other services; prefetching, and purging.
As an example, a package provider lists all installed packages. (In contrast, the File provider does not list all files on the file-system as that would make execution incredibly slow). An implementation of this method should be made if it is possible to quickly (with a single system call) provide all instances.
An implementation of this method should only cache the values of properties if they are discovered as part of the process for finding existing resources. Resource properties that require additional commands (than those used to determine existence/identity) should be implemented in their respective getter method. (This is important from a performance perspective; it may be expensive to compute, as well as wasteful as all discovered resources may perhaps not be managed).
An implementation may return an empty list (naturally with the effect that it is not possible to query for manageable entities).
By implementing this method, it is possible to use the `resources´ resource type to specify purging of all non managed entities.
@note The returned instances are instance of some subclass of Provider, not resources. @return [Array<Puppet::Provider>] a list of providers referencing the system entities @abstract this method must be implemented by a subclass and this super method should never be called as it raises an exception. @raise [Puppet::DevError] Error indicating that the method should have been implemented by subclass. @see prefetch
# File lib/puppet/provider.rb, line 374 def self.instances raise Puppet::DevError, "Provider #{self.name} has not defined the 'instances' class method" end
Creates the methods for a given command. @api private @deprecated Use {commands}, {optional_commands}, or {has_command} instead. This was not meant to be part of a public API
# File lib/puppet/provider.rb, line 381 def self.make_command_methods(name) Puppet.deprecation_warning "Provider.make_command_methods is deprecated; use Provider.commands or Provider.optional_commands instead for creating command methods" # Now define a method for that command unless singleton_class.method_defined?(name) meta_def(name) do |*args| # This might throw an ExecutionFailure, but the system above # will catch it, if so. command = Puppet::Provider::Command.new(name, command(name), Puppet::Util, Puppet::Util::Execution) return command.execute(*args) end # And then define an instance method that just calls the class method. # We need both, so both instances and classes can easily run the commands. unless method_defined?(name) define_method(name) do |*args| self.class.send(name, *args) end end end end
Creates getter- and setter- methods for each property supported by the resource type. Call this method to generate simple accessors for all properties supported by the resource type. These simple accessors lookup and sets values in the property hash. The generated methods may be overridden by more advanced implementations if something else than a straight forward getter/setter pair of methods is required. (i.e. define such overriding methods after this method has been called)
An implementor of a provider that makes use of `prefetch` and `flush` can use this method since it uses the internal `@property_hash` variable to store values. An implementation would then update the system state on a call to `flush` based on the current values in the `@property_hash`.
@return [void]
# File lib/puppet/provider.rb, line 416 def self.mk_resource_methods [resource_type.validproperties, resource_type.parameters].flatten.each do |attr| attr = attr.intern next if attr == :name define_method(attr) do @property_hash[attr] || :absent end define_method(attr.to_s + "=") do |val| @property_hash[attr] = val end end end
Creates a new provider that is optionally initialized from a resource or a hash of properties. If no argument is specified, a new non specific provider is initialized. If a resource is given it is remembered for further operations. If a hash is used it becomes the internal `@property_hash` structure of the provider - this hash holds the current state property values of system entities as they are being discovered by querying or other operations (typically getters).
@todo The use of a hash as a parameter needs a better exaplanation; why is this done? What is the intent? @param resource [Puppet::Resource, Hash] optional resource or hash
# File lib/puppet/provider.rb, line 539 def initialize(resource = nil) if resource.is_a?(Hash) # We don't use a duplicate here, because some providers (ParsedFile, at least) # use the hash here for later events. @property_hash = resource elsif resource @resource = resource # LAK 2007-05-09: Keep the model stuff around for backward compatibility @model = resource @property_hash = {} else @property_hash = {} end end
Defines optional commands. Since Puppet 2.7.8 this is typically not needed as evaluation of provider suitability is lazy (when a resource is evaluated) and the absence of commands that will be present after other resources have been applied no longer needs to be specified as optional. @param [Hash{String => String}] command_specs Named commands that the provider will
be executing on the system. Each command is specified with a name and the path of the executable.
(@see has_command) @see commands
# File lib/puppet/provider.rb, line 195 def self.optional_commands(hash) hash.each do |name, target| has_command(name, target) do is_optional end end end
@return [String] Returns the data source, which is the provider name if no other source has been set. @todo Unclear what “the source” is used for?
# File lib/puppet/provider.rb, line 451 def self.source @source ||= self.name end
@return [Integer] Returns a numeric specificity for this provider based on how many requirements it has
and number of _ancestors_. The higher the number the more specific the provider.
The number of requirements is based on the number of defaults set up with {Provider.defaultfor}.
The ancestors is the Ruby Module::ancestors method and the number of classes returned is used to boost the score. The intent is that if two providers are equal, but one is more “derived” than the other (i.e. includes more classes), it should win because it is more specific). @note Because of how this value is
calculated there could be surprising side effects if a provider included an excessive amount of classes.
# File lib/puppet/provider.rb, line 332 def self.specificity # This strange piece of logic attempts to figure out how many parent providers there # are to increase the score. What is will actually do is count all classes that Ruby Module::ancestors # returns (which can be other classes than those the parent chain) - in a way, an odd measure of the # complexity of a provider). (@defaults.length * 100) + ancestors.select { |a| a.is_a? Class }.length end
Returns true if the given attribute/parameter is supported by the provider. The check is made that the parameter is a valid parameter for the resource type, and then if all its required features (if any) are supported by the provider.
@param param [Class, Puppet::Parameter] the parameter class, or a parameter instance @return [Boolean] Returns whether this provider supports the given parameter or not. @raise [Puppet::DevError] if the given parameter is not valid for the resource type
# File lib/puppet/provider.rb, line 463 def self.supports_parameter?(param) if param.is_a?(Class) klass = param else unless klass = resource_type.attrclass(param) raise Puppet::DevError, "'#{param}' is not a valid parameter for #{resource_type.name}" end end return true unless features = klass.required_features !!satisfies?(*features) end
Compares this provider against another provider. Comparison is only possible with another provider (no other class). The ordering is based on the class name of the two providers.
@return [-1,0,+1, nil] A comparison result -1, 0, +1 if this is before other, equal or after other. Returns
nil oif not comparable to other.
@see Comparable
# File lib/puppet/provider.rb, line 593 def <=>(other) # We can only have ordering against other providers. return nil unless other.is_a? Puppet::Provider # Otherwise, order by the providers class name. return self.class.name <=> other.class.name end
Clears this provider instance to allow GC to clean up.
# File lib/puppet/provider.rb, line 512 def clear @resource = nil @model = nil end
(see command)
# File lib/puppet/provider.rb, line 518 def command(name) self.class.command(name) end
Convenience methods - see class method with the same name. @see execfail @return (see execfail)
# File lib/puppet/provider.rb, line 141 def execfail(*args) Puppet::Util::Execution.execfail(*args) end
Convenience methods - see class method with the same name. @see execpipe @return (see execpipe)
# File lib/puppet/provider.rb, line 129 def execpipe(*args, &block) Puppet::Util::Execution.execpipe(*args, &block) end
Convenience methods - see class method with the same name. @see execute @return (see execute)
# File lib/puppet/provider.rb, line 117 def execute(*args) Puppet::Util::Execution.execute(*args) end
Returns the value of a parameter value, or `:absent` if it is not defined. @param param [Puppet::Parameter] the parameter to obtain the value of @return [Object] the value of the parameter or `:absent` if not defined.
# File lib/puppet/provider.rb, line 526 def get(param) @property_hash[param.intern] || :absent end
Returns the name of the resource this provider is operating on. @return [String] the name of the resource instance (e.g. the file path of a File). @raise [Puppet::DevError] if no resource is set, or no name defined.
# File lib/puppet/provider.rb, line 558 def name if n = @property_hash[:name] return n elsif self.resource resource.name else raise Puppet::DevError, "No resource and no name in property hash in #{self.class.name} instance" end end
Sets the given parameters values as the current values for those parameters. Other parameters are unchanged. @param [Array<Puppet::Parameter] the parameters with values that should be set @return [void]
# File lib/puppet/provider.rb, line 573 def set(params) params.each do |param, value| @property_hash[param.intern] = value end end
Generated with the Darkfish Rdoc Generator 2.


React can be used in any web application. It can be embedded in other applications and, with a little care, other applications can be embedded in React. This guide will examine some of the more common use cases, focusing on integration with jQuery and Backbone, but the same ideas can be applied to integrating components with any existing code.
React is unaware of changes made to the DOM outside of React. It determines updates based on its own internal representation, and if the same DOM nodes are manipulated by another library, React gets confused and has no way to recover.
This does not mean it is impossible or even necessarily difficult to combine React with other ways of affecting the DOM, you just have to be mindful of what each is doing.
The easiest way to avoid conflicts is to prevent the React component from updating. You can do this by rendering elements that React has no reason to update, like an empty

.
To demonstrate this, let's sketch out a wrapper for a generic jQuery plugin.
We will attach a ref to the root DOM element. Inside componentDidMount
, we will get a reference to it so we can pass it to the jQuery plugin.
To prevent React from touching the DOM after mounting, we will return an empty

from the render()
method. The

element has no properties or children, so React has no reason to update it, leaving the jQuery plugin free to manage that part of the DOM:
class SomePlugin extends React.Component {
componentDidMount() {
this.$el = $(this.el);
this.$el.somePlugin();
}
componentWillUnmount() {
this.$el.somePlugin('destroy');
}
render() {
return
 this.el = el} />;
}
}
Note that we defined both componentDidMount
and componentWillUnmount
lifecycle methods. Many jQuery plugins attach
event listeners to the DOM so it's important to detach them in componentWillUnmount
. If the plugin does
not provide a method for cleanup, you will probably have to provide your own, remembering to remove any event
listeners the plugin registered to prevent memory leaks.
For a more concrete example of these concepts, let's write a minimal wrapper for the plugin Chosen, which augments <select>
inputs.
Note:
Just because it's possible, doesn't mean that it's the best approach for React apps. We encourage you to use React components when you can. React components are easier to reuse in React applications, and often provide more control over their behavior and appearance.
First, let's look at what Chosen does to the DOM.
If you call it on a <select>
DOM node, it reads the attributes off of the original DOM node, hides it with an inline style, and then appends a separate DOM node with its own visual representation right after the <select>
. Then it fires jQuery events to notify us about the changes.
Let's say that this is the API we're striving for with our <Chosen>
wrapper React component:
function Example() {
return (
<Chosen onChange={value => console.log(value)}>
<option>vanilla</option>
<option>chocolate</option>
<option>strawberry</option>
</Chosen>
);
}
We will implement it as an uncontrolled component for simplicity.
First, we will create an empty component with a render()
method where we return <select>
wrapped in a

:
class Chosen extends React.Component {
render() {
return (

<select className="Chosen-select" ref={el => this.el = el}>
{this.props.children}
</select>

);
}
}
Notice how we wrapped <select>
in an extra

. This is necessary because
Chosen will append another DOM element right after the <select>
node we passed to it. However, as
far as React is concerned,

always only has a single child. This is how we ensure that React
updates won't conflict with the extra DOM node appended by Chosen. It is important that if you modify the DOM
outside of React flow, you must ensure React doesn't have a reason to touch those DOM nodes.
Next, we will implement the lifecycle methods. We need to initialize Chosen with the ref to the <select>
node in componentDidMount
, and tear it down in componentWillUnmount
:
componentDidMount() {
this.$el = $(this.el);
this.$el.chosen();
}
componentWillUnmount() {
this.$el.chosen('destroy');
}
Note that React assigns no special meaning to the this.el
field. It only works because we have previously assigned this field from a ref
in the render()
method:
This is enough to get our component to render, but we also want to be notified about the value changes. To do this, we will subscribe to the jQuery change
event on the <select>
managed by Chosen.
We won't pass this.props.onChange
directly to Chosen because component's props might change over time,
and that includes event handlers. Instead, we will declare a handleChange()
method that calls
this.props.onChange
, and subscribe it to the jQuery change
event:
componentDidMount() {
this.$el = $(this.el);
this.$el.chosen();
this.handleChange = this.handleChange.bind(this);
this.$el.on('change', this.handleChange);
}
componentWillUnmount() {
this.$el.off('change', this.handleChange);
this.$el.chosen('destroy');
}
handleChange(e) {
this.props.onChange(e.target.value);
}
Finally, there is one more thing left to do. In React, props can change over time. For example, the
<Chosen>
component can get different children if parent component's state changes. This means
that at integration points it is important that we manually update the DOM in response to prop updates, since we no
longer let React manage the DOM for us.
Chosen's documentation suggests that we can use jQuery trigger()
API to notify it about changes to the
original DOM element. We will let React take care of updating this.props.children
inside
<select>
, but we will also add a componentDidUpdate()
lifecycle method that notifies
Chosen about changes in the children list:
componentDidUpdate(prevProps) {
if (prevProps.children !== this.props.children) {
this.$el.trigger("chosen:updated");
}
}
This way, Chosen will know to update its DOM element when the <select>
children managed by React change.
The complete implementation of the Chosen
component looks like this:
class Chosen extends React.Component {
componentDidMount() {
this.$el = $(this.el);
this.$el.chosen();
this.handleChange = this.handleChange.bind(this);
this.$el.on('change', this.handleChange);
}
componentDidUpdate(prevProps) {
if (prevProps.children !== this.props.children) {
this.$el.trigger("chosen:updated");
}
}
componentWillUnmount() {
this.$el.off('change', this.handleChange);
this.$el.chosen('destroy');
}
handleChange(e) {
this.props.onChange(e.target.value);
}
render() {
return (

<select className="Chosen-select" ref={el => this.el = el}>
{this.props.children}
</select>

);
}
}
React can be embedded into other applications thanks to the flexibility of ReactDOM.render()
.
Although React is commonly used at startup to load a single root React component into the DOM, ReactDOM.render()
can also be called multiple times for independent parts of the UI which can be as small as a button, or as large as an app.
In fact, this is exactly how React is used at Facebook. This lets us write applications in React piece by piece, and combine them with our existing server-generated templates and other client-side code.
A common pattern in older web applications is to describe chunks of the DOM as a string and insert it into the DOM like so: $el.html(htmlString)
. These points in a codebase are perfect for introducing React. Just rewrite the string based rendering as a React component.
So the following jQuery implementation…
$('#container').html('<button id="btn">Say Hello</button>');
$('#btn').click(function() {
alert('Hello!');
});
…could be rewritten using a React component:
function Button() {
return <button id="btn">Say Hello</button>;
}
ReactDOM.render(
<Button />,
document.getElementById('container'),
function() {
$('#btn').click(function() {
alert('Hello!');
});
}
);
From here you could start moving more logic into the component and begin adopting more common React practices. For example, in components it is best not to rely on IDs because the same component can be rendered multiple times. Instead, we will use the React event system and register the click handler directly on the React <button>
element:
function Button(props) {
return <button onClick={props.onClick}>Say Hello</button>;
}
function HelloButton() {
function handleClick() {
alert('Hello!');
}
return <Button onClick={handleClick} />;
}
ReactDOM.render(
<HelloButton />,
document.getElementById('container')
);
You can have as many such isolated components as you like, and use ReactDOM.render()
to render them to different DOM containers. Gradually, as you convert more of your app to React, you will be able to combine them into larger components, and move some of the ReactDOM.render()
calls up the hierarchy.
Backbone views typically use HTML strings, or string-producing template functions, to create the content for their DOM elements. This process, too, can be replaced with rendering a React component.
Below, we will create a Backbone view called ParagraphView
. It will override Backbone's
render()
function to render a React <Paragraph>
component into the DOM element
provided by Backbone (this.el
). Here, too, we are using ReactDOM.render()
:
function Paragraph(props) {
return
{props.text}
;
}
const ParagraphView = Backbone.View.extend({
render() {
const text = this.model.get('text');
ReactDOM.render(<Paragraph text={text} />, this.el);
return this;
},
remove() {
ReactDOM.unmountComponentAtNode(this.el);
Backbone.View.prototype.remove.call(this);
}
});
It is important that we also call ReactDOM.unmountComponentAtNode()
in the remove
method so that React unregisters event handlers and other resources associated with the component tree when it is detached.
When a component is removed from within a React tree, the cleanup is performed automatically, but because we are removing the entire tree by hand, we must call this method.
While it is generally recommended to use unidirectional data flow such as React state, Flux, or Redux, React components can use a model layer from other frameworks and libraries.
The simplest way to consume Backbone models and collections from a React component is to listen to the various change events and manually force an update.
Components responsible for rendering models would listen to 'change'
events, while components responsible for rendering collections would listen for 'add'
and 'remove'
events. In both cases, call this.forceUpdate()
to rerender the component with the new data.
In the example below, the List
component renders a Backbone collection, using the Item
component to render individual items.
class Item extends React.Component {
constructor(props) {
super(props);
this.handleChange = this.handleChange.bind(this);
}
handleChange() {
this.forceUpdate();
}
componentDidMount() {
this.props.model.on('change', this.handleChange);
}
componentWillUnmount() {
this.props.model.off('change', this.handleChange);
}
render() {
return
{this.props.model.get('text')}
;
}
}
class List extends React.Component {
constructor(props) {
super(props);
this.handleChange = this.handleChange.bind(this);
}
handleChange() {
this.forceUpdate();
}
componentDidMount() {
this.props.collection.on('add', 'remove', this.handleChange);
}
componentWillUnmount() {
this.props.collection.off('add', 'remove', this.handleChange);
}
render() {
return (

{this.props.collection.map(model => (
<Item key={model.cid} model={model} />
))}

);
}
}
The approach above requires your React components to be aware of the Backbone models and collections. If you later plan to migrate to another data management solution, you might want to concentrate the knowledge about Backbone in as few parts of the code as possible.
One solution to this is to extract the model's attributes as plain data whenever it changes, and keep this logic in a single place. The following is a higher-order component that extracts all attributes of a Backbone model into state, passing the data to the wrapped component.
This way, only the higher-order component needs to know about Backbone model internals, and most components in the app can stay agnostic of Backbone.
In the example below, we will make a copy of the model's attributes to form the initial state. We subscribe to the
change
event (and unsubscribe on unmounting), and when it happens, we update the state with the model's
current attributes. Finally, we make sure that if the model
prop itself changes, we don't forget to
unsubscribe from the old model, and subscribe to the new one.
Note that this example is not meant to be exhaustive with regards to working with Backbone, but it should give you an idea for how to approach this in a generic way:
function connectToBackboneModel(WrappedComponent) {
return class BackboneComponent extends React.Component {
constructor(props) {
super(props);
this.state = Object.assign({}, props.model.attributes);
this.handleChange = this.handleChange.bind(this);
}
componentDidMount() {
this.props.model.on('change', this.handleChange);
}
componentWillReceiveProps(nextProps) {
this.setState(Object.assign({}, nextProps.model.attributes));
if (nextProps.model !== this.props.model) {
this.props.model.off('change', this.handleChange);
nextProps.model.on('change', this.handleChange);
}
}
componentWillUnmount() {
this.props.model.off('change', this.handleChange);
}
handleChange(model) {
this.setState(model.changedAttributes());
}
render() {
const propsExceptModel = Object.assign({}, this.props);
delete propsExceptModel.model;
return <WrappedComponent {...propsExceptModel} {...this.state} />;
}
}
}
To demonstrate how to use it, we will connect a NameInput
React component to a Backbone model, and update its firstName
attribute every time the input changes:
function NameInput(props) {
return (

<input value={props.firstName} onChange={props.handleChange} />

My name is {props.firstName}.

);
}
const BackboneNameInput = connectToBackboneModel(NameInput);
function Example(props) {
function handleChange(e) {
props.model.set('firstName', e.target.value);
}
return (
<BackboneNameInput
model={props.model}
handleChange={handleChange}
/>
);
}
const model = new Backbone.Model({ firstName: 'Frodo' });
ReactDOM.render(
<Example model={model} />,
document.getElementById('root')
);
This technique is not limited to Backbone. You can use React with any model library by subscribing to its changes in the lifecycle methods and, optionally, copying the data into the local React state.


Funky-Store Example: 2D-Breakout Game
based on
MDN's 2D-Breakout Game Tutorial by Andrzej Mazur and Mozilla Contributors
Click or press any key to start or pause


java.lang.NullPointerException
Thrown in java.awt.Graphics.drawString()
When running an applet in a browser using the Sun Java Runtime Environment (JRE), a java.lang.NullPointerException
is thrown by the java.awt.Graphics.drawString()
method. The same applet runs under the Microsoft Virtual Machine (VM).
This exception is caused by passing a null string to the Graphics.drawString()
method in the Sun JRE.
The Java class libraries in the Sun JRE have changed over time. Some APIs have been clarified, some have been deprecated, and some have had their implementation altered.
The result of passing a null string to the Graphics.drawString()
method was not well defined, and the Microsoft VM treats null as an empty string. However, the implementation in the Sun JRE does not accept null as a valid string, thus resulting in a java.lang.NullPointerException
.
Code defensively to ensure only a non-null string is passed to the drawString()
method. For example, the following code
Graphics g = getGraphics();
g.drawString(s, 100, 100);
Graphics g = getGraphics();
if (s !== null) {
g.drawString(s, 100, 100);
}
None.


WITNESS LIST Urban Affairs Committee May 20, 2004-10:00A Interim Charge #3 On: Baloutine, Jeff (Self) Cameron, Drew (City of San Antonio) Carrington, Edwina (TDHCA) Hatton, Bruce (Federal Home Loan Bank of Dallas) Markson, Dan (Self and NRP Group) Maxwell, Susan (Texas Council for Developmental Disabilities) Mueller, Elizabeth (Self) Ocanas, Reymundo (TACDC) Way, Heather (Self) Williams, Sandra (TACDC and Alamo Arca Mutual Housing Association) Registering, but not testifying: On: Brown, William King (Self) Browning, Robyn (Community Resource Group Inc.) Campbel, Leah (TXCDC) Castaneda, David (Texas Low Income Housing Interfaith) Chatham, Donna (ARCIT) Crowell, Norman Lee (Self) Curran, Brenda L. (Self) Doggett, Robert (Self) Henneberger, John (Texas Low Income Housing Information Service) Hood, Wannda (Texas Low Income Housing Information Services) Johnson, D'Ann (Self) Mock, Nelson (Self) Morns, John (Self) Park, Jodi (Coalition of Texas with Disabilities) Paup, Karen (Texas Low Income Housing Information Service) Pina, Alice (Texas Low Income Housing Austin Interfaith) Roh, Ruby (Texas Low Income Inter Faith) Romo, Angela (Texas Low Income Housing Information Service) Shaw, Margaret (Texas Partners Affordable Housing Development and Casualty) Smith, Clint (Gray Panthers of Texas) Torres, Ida (Texas Low Income Inter Faith) Troxell, Richard (House the Homeless Inc. & National Coalition for the Homeless) Tyler, Kathleen (Self) Walker, Kwame (City of Dallas) Widrow, Robert (Self) Zamarron, Lourdes (Austin Interfaith)


 It upholds secular and democratic values and firmly believes in universal brotherhood of mankind and the fatherhood of one God.
     The school is named after a great saint of the Catholic Church known as ST. THERESA OF THE CHILD JESUS. Theresa Martin is a young and beautiful French girl born in a small town of Alenco, in France, in the year 1873. From her childhood she was a perfect model of innocence, purity and Love of God. At the age of 15, she became a Carmelite Sister sacrificing all worldly pleasures devoting herself to the service of the Lord. She carried the same exquisite qualities of her childhood into her religious life. She often used to say, “I can do nothing by myself but my Father can do all; I am only a Little Flower and He is the great gardener” showing her great love and trust in God.
     In order that the children of this institution may imbibe the true and everlasting values of innocence, purity and simplicity of St. Theresa of the Child Jesus, the institution has chosen her as the Patroness. The Little Flower will inspire and guide the children to greater heights of innocence, purity and simplicity of Heaven.
Faculity
The school has a team of a well educated, experienced and dedicated staff to impart quality education.However, the school takes special care to expose the teachers periodically to various seminars.
Extra Curricular
Little Flower not only focuses on academics, but gives equal importance to sports, hobbies and cultural activities. The school has sufficient space for outdoor games, besides providing space for indoor sports activities.
Facilities
The school has an excellent library with over 7,000 volumes of books, periodicals and magazines.Students are encouraged to cultivate good reading habits and use the Library as an important centre for learning.
Digital Classrooms
All the class rooms are well equipped with most modern technology.LFS has access to more than 50,000 teaching and learning materials – High quality 2D & 3D Animations, Real life application videos and assessment material.
Language Labs
LFS has dedicated full furnished Language lab for the students. The Lab is equipped with English Mentor software, which has Spoken English, Listening comprehension, Fluency tutor & Read Write tools for the students to practice.
Latest news
M.L.A Sri Modugula Venu Gopala Reddy Garu visited the school and interacted with students and motiviated them to serve the society.
Visit of Mother General of Sisters of Cross of Chavanod Sr. Eugene Dsouza. Assistant Mother General Sr. Evelyn Monterio and Deligation Superior of A.P Sr. Priyanthi Samala.
Inaguartion of St. Therese of Child Jesus by our Correspondent Fr.Repudi Rayappa
Inviting new Bishop to the school Most.Rev.Chinnabathini Bhagyaiah.
Independence Day Celebrations by Rev.Sr.Zelei, First Principal of our School.
Blessing new block by our correspondent Rev.Fr.Repudi Rayappa
Orientation programme by Mrs.Rubina Masjid about elements of creativity.
Trip of IX class students to World Science Express.
Holy Cross Feast
Christmas day celebrations by X Class Students.
Educational Trip to Sriharikota for class X. School Alumini Mr.Gouse Senior Scientist in SHAR accompained Sister & Teachers.
investiture ceremony for newly elected school parliment members.
21st International Yoga Day Celebrations.


Any fool can write code that a computer can understand. Good programmers write code that humans can understand. Martin Fowler, 2008.
 Alexander Borodin, 2k17.


U mad? Weili Zhang ready to calm ‘angry’ Joanna Jedrzejczyk
by Jesse HollandReigning Ultimate Fighting Championship (UFC) strawweight champion, Weili Zhang, doesn’t understand why former division titleholder, Joanna Jedrzejczyk, is so angry these days. Probably because “Magnum” doesn’t know what it feels like to lay an egg in her last three title fights.
“Anywhere, anytime,” Jedrzejczyk told South China Morning Post. “Bangkok, Sri Lanka, Warsaw, Toronto, it doesn’t matter where. For me, it doesn’t matter. I will make my way.
Taking a canoe from Poland to China could be challenging, even for an athlete as conditioned as Jedrzejczyk, because it’s roughly 4200 miles across dry land. Fortunately for all parties involved, the Wright brothers did their thing back in 1903.
“She seems very angry? Don’t worry she will calm down,” Zhang wrote on Instagram. “I am ready now. Call my manager or call Dana White. I’m ready.”
Jedrzejczyk got back into the 115-pound title hunt by turning away Michelle Waterson at UFC Fight Night 161 back in October. As for Zhang, she improved to 20-1 by smashing and trashing Jessica Andrade for the strawweight strap last August.
All we need now are a couple of UFC contracts.


An npm command that lets you create a task in the scripts section of the package.json.
npm set-script [<script>] [<command>]
Example:
npm set-script start "http-server ."
{ "name": "my-project", "scripts": { "start": "http-server .", "test": "some existing value" } }


Alpha Class Reference
[Scripts for problems]
Inherits Example.
Detailed Description
Example: Alpha puzzleWell-known cryptoarithmetic puzzle of unknown origin.
Definition at line 49 of file alpha.cc.
Public Types | |
| enum | { BRANCH_NONE, BRANCH_SIZE } |
| Branching to use for model. More... | |
Public Member Functions | |
| Alpha (const Options &opt) | |
| Actual model. | |
| Alpha (bool share, Alpha &s) | |
| Constructor for cloning s. | |
| virtual Space * | copy (bool share) |
| Copy during cloning. | |
| virtual void | print (std::ostream &os) |
| Print solution. | |
Protected Attributes | |
| IntVarArray | le |
| Array for letters. | |
Static Protected Attributes | |
| static const int | n = 26 |
| Alphabet has 26 letters. |
Member Enumeration Documentation
| anonymous enum |
Constructor & Destructor Documentation
| Alpha::Alpha | ( | bool | share, | |
| Alpha & | s | |||
| ) | [inline] |
Member Function Documentation
| virtual Space* Alpha::copy | ( | bool | share | ) | [inline, virtual] |
| virtual void Alpha::print | ( | std::ostream & | os | ) | [inline, virtual] |
Member Data Documentation
const int Alpha::n = 26 [static, protected] |
IntVarArray Alpha::le [protected] |
The documentation for this class was generated from the following file:
- examples/alpha.cc (Revision: 6259)


It's Confirmed: Bill Murray Will Show Up as Peter Venkman in the Upcoming Ghostbusters Sequel
by Julie MuncyGhosts? Bustin’? Yeah, I think Bill Murray can handle that.
After months of rumours and assumptions, it’s finally official: Bill Murray is returning to the franchise with Ghostbusters, next year’s sequel/reboot thing of the franchise directed by Jason Reitman. The news comes via fellow classic ‘Buster Dan Akroyd, who will be showing up in the film as well.
“We’ve shot our part – myself, Murray, Sigourney and Annie Potts,” Akroyd told The Greg Hill Show. “And it was really exciting working on this new idea and new take on the story which Jason, who’s a really incredible, fine filmmaker came up with.”
While Akroyd didn’t divulge much in the way of details about his or Murray’s roles in the film, he expressed enthusiasm for what Reitman, son of original Ghostbusters director Ivan Reitman, is doing with the film.
“Jason Reitman wrote a beautiful, heartfelt script that takes the real DNA from the first two movies and transfers that directly to the third, the next generation. It hands the legacy off to a new generation of stars, and players, and actors and characters,” Akroyd said.
Alongside the returning players, the film is going to star Finn Wolfhard, Mckenna Grace, Carrie Coon and Paul Rudd. Ernie Hudson will also be returning, making for three out of the original four Ghostbusters team.
The new Ghostbusters, which will hand the torch over to a new generation, is slated to arrive in cinemas on July 10, 2020.
Featured image: Columbia Pictures


Join US college fairs from anywhere in the world
- Connect with college representatives to learn more about your dream schools
- With our special Fastrack feature, you'll get exclusive one-on-one time with college representatives
- Let us help you: we recommend college and fairs based on your preferences
What we do
We're building a digital university fair platform that revolutionizes the way students interested in higher education can learn more about their dream universities or colleges. We provide students with a convenient, simple, and secure way of joining online fairs and connecting with school representatives.
Making college applications easier
We believe in helping you take control of your application process, so we’ve reduced the barriers to learning more about your dream colleges and universities. Our innovative platform and resources are dedicated to helping you discover, schedule, and prepare for university fairs.
We're building a company to last
We’re passionate about providing great products and services, and we’re focused on building for the long term. At our core, we are a group of innovators that believe we can usher in a new era of digital fair services.
Simple and Easy
We are constantly innovating better ways to serve you. Working with a large network of universities and recruiters, we aim to offer you the best resources and smoothest fair experiences possible, so that you can maximise your experiences with college fairs.
Our Partners
At Zapply we believe in values and so our partners are not only among the leading universities in the world but also share these basic values with us. This creates a healthy ecosystem at Zapply and drives a user to achieve beyond par.
FEATURED FAIRS
- All
- Major
- Minor
- Ivy
October 9,2020
UCLA, MIT, Darthmouth, Harvard, Cornell, Boston University, LeHigh University, UCB, UCSD, Columbia University, Caltech, Stanford, Princeton and
more
October 26,2020
UC Berkeley, UC Davis, UC Irvine, UCLA, UC Merced, UC Riverside, UC San Diego, UC San Francisco, UC Santa Barbara, UC Santa Cruz and
more
October 1,2020
UCLA, USC, NYU, Harvard, Cornell, Parsons, MIT, UCB, UCSD, Princeton, Michigan State, Stanford, Colby college, Union College and
more
October 25,2020
Brown University, Columbia University, Cornell University, Dartmouth College, Harvard University, the University of Pennsylvania, Princeton University, and Yale University.
more
October 15,2020
Williams College, Amherst College, Swarthmore College, Harvey Mudd College, Wellesley College, Pomona College, Claremont McKenna College
more
August 21,2020
Stanford University, University of California, Berkeley, University of California, San Francisco, San Francisco State University, San Jose State University,
more
October 5,2020
UCLA, MIT, NYU, Harvard, Cornell, Princeton, Georgia Tech, CMU, Harvey Mudd, Caltech, Stanford, UCB, John Hopkins, Brown University and
more
December 1,2020
UCLA, Colby College, UWash, CMU, MIT ,Caltech, Colgate University, University of Rochester, Radcliff University, UCSF, Williams College and
more
November 11,2020
UCLA, University of Miami, Parsons, Santa Monica College, Cal State University, University of Wisconsin-Madison, UPenn, Indiana University, Ithaca College
more
Testimonials
We managed to connect with so many students. This platform has truly revolutionized the way we reach our audience. Couldn't recommend this more.
Saul Goodman
University of Michigan, College Counsellor
What a masterpiece. You can tell they put a lot of thought into this experience. Loved using this to find my dream school, and I've shared it with all my friends.
Sara Wilsson
Incoming Freshman at Yale University, Class of 2024
I used this platform to get into my dream school-UCLA. Now I'm a successful store owner, and I've told all my children to sign up!
Jena Karlis
UCLA, Class of 2023
Amazing. No other words needed.
Matt Brandon
High School Student
With this platform, I connected with numerous university representatives. This gave me an edge in the college app process. Also, I loved the support service. 10/10.
John Larson
Aspiring MBA Student
Our Team
Bonnie Lee
Project ManagerShannan Liu
Business Strategy LeadSanchit Agarwal
Lead ProgrammerKshitij Jhunjhunwala
Engineering DirectorContact Us
If you have any questions or concerns, feel free to contact us using various methods outlined below. We will respond to your query as soon as possible.
Address
123 Fake StreetLos Angeles, CA 90024
United States


put mouse on me.
This is p element.
This is p element.
This is p element.
This is p element.
This is p element.


| checkmate-package {checkmate} | R Documentation |
Tests and assertions to perform frequent argument checks. A substantial part of the package was written in C to minimize any worries about execution time overhead.
checkNamed
(deprecated)
checkOS
(check operating system)
assert
(combine multiple checks into an assertion)
wf
(which.first and which.last)
Maintainer: Michel Lang<EMAIL_ADDRESS>(ORCID)
Other contributors:
Bernd Bischl<EMAIL_ADDRESS>[contributor]
Useful links:


Today's Reflection
How do you feel today?
What made you smile today?
Anything you want to vent about?
check


|
libpointmatcher
1.2.1
|
A vector of file info, to be used in batch processing. More...
#include <IO.h>
Public Member Functions | |
| FileInfoVector (const std::string &fileName, std::string dataPath="", std::string configPath="") | |
| Load a vector of FileInfo from a CSV file. More... | |
Protected Member Functions | |
| std::string | localToGlobalFileName (const std::string &path, const std::string &fileName) |
| Join parentPath and fileName and return the result as a global path. | |
| bool | findTransform (const PointMatcherSupport::CsvElements &data, const std::string &prefix, unsigned dim) |
| Return whether there is a valid transformation named prefix in data. | |
| TransformationParameters | getTransform (const PointMatcherSupport::CsvElements &data, const std::string &prefix, unsigned dim, unsigned line) |
| Return the transformation named prefix from data. | |
A vector of file info, to be used in batch processing.
| PointMatcherIO< T >::FileInfoVector::FileInfoVector | ( | const std::string & | fileName, |
| std::string | dataPath = "" , |
||
| std::string | configPath = "" |
||
| ) |
Load a vector of FileInfo from a CSV file.
| fileName | name of the CSV file |
| dataPath | path relative to which the point cloud CSV or VTK will be resolved |
| configPath | path relative to which the yaml configuration files will be resolved |
The first line of the CSV file must contain a header. The supported tags are:


Overview
The rdbService example is a complete functional server for accessing SQL databases
such Oracle via an EPICS V4 server, and returning the resulting table ResultSet
data back to an EPICS V4 client. rdbService illustrates a number of facets of EPICS V4's,
use for writing high performance synchronous servers, plus some other stuff:
- channelRPC functionality of EPICSV4
- use of JDBC for accessing Oracle to execute a SQL query within a pattern that retries
the query and can rebuild the connection if any query fails - for high reliability and
to make sure if the database back end ever cycles, the EPICS v4 server need not be restarted.
- Passing string messages back to the client asynchronously - while the server is still
processing the query - in the event of the server detecting an
error or other detecting some other diagnostic.
- Putting complex data into an EPICS V4 pvStructure (the basic complex data object
of pvData), ready for returning results back to the EPICS V4 client.
PvStructures are the basic mechanism for returning "structured" data between
EPICS V4 clients and servers.
- Client side calling the server, and getting the results.
- Unpacking complex data out of a pvStructure
- Illustration of the idea of using the NTTable EPICS V4 "normative type" (though the
definition of an NTTable is likely to change soon)
- Helpers for transformation of array pvData to Java Vectors
- Formatting pvStructure encoded data for printing.
- Use of the NTURI normative type, the EPICS V4 standard for passing requests for
data and arguments.
The "serviceapi" package in src/org/epics/serviceAPI is composed of a single class server and a single class
client, and is intended to illustrate the principles of RPC comms in EPICS V4. It shows
how one defines and populates the pvStructure conforming to the NTURI Normative Type, for making
an RPC query to a pvAccess server, and it shows how the server defines and populates a table of data
conforming to the NTTable Normative Type for encoding the reply.


.NET - Xamarin - Python - Web
IT EngineerVMware - Monitoring - Scripting
I am a Computer Engineering graduate from University of Patras. Visit my blog for tutorials and how to's. Contact me for projects and partnerships.
Check out also my uploaded projects: • Android • Windows • App Store


#1 Aluminum Store
Best Aluminum Store in JordanFollow Us On Facebook
Participate in our public communityIndustry Experience
Over 35 Year on the Aluminium fieldProducts line & Services
Store
Best sellers
Other accessories
Who are we?
Aluminum Souq represents over 60% of bauxite, alumina and aluminium production in Middle East. Since its foundation in 1986, the members of the AlS have been companies engaged in the production of bauxite, alumina, aluminium, the recycling of aluminium, or fabrication of aluminium or as joint venture partners in such. We have many customers in other countries. Like: Saudi Arabia, UAE, Bahrin, and more. We have the high quality goods and the best price. Choosing us is the best decision.


Please select a pickup and destination location
If you are ready to go, click Get Trip Estimate
Your {{ estimatedTime | async }} minute trip will cost {{ (estimatedPrice | async) }}. When you're ready to go, click Find Your Ride
{{ title }} encountered a server error. Please retry your operation
Ah snap!  Err: {{ interactionState | async }}


count_lowercase_vowels
def count_lowercase_vowels(s): """ (str) -> int Return the number of vowels (a, e, i, o, and u) in s. >>> count_lowercase_vowels('Happy Anniversary!') 4 >>> count_lowercase_vowels('xyz') 0 """ num_vowels = 0 for char in s: if char in 'aeiou': num_vowels = num_vowels + 1 return num_vowels |
To test count_lowercase_vowels
, we need to:
There are many possible string lengths. For this example, we'll consider strings that have these lengths:
Which characters should we use? For this example, we'll choose characters based on whether they are vowels or non-vowels. The actual character doesn't matter.
If we want a non-vowel, we could use 'b'
, 'n'
, '?'
, or any other character that is not a vowel.
|
is_palindrome
def is_palindrome(s): """ (str) -> bool Return True if and only if s is a palindrome. >>> is_palindrome('noon') True >>> is_palindrome('racecar') True >>> is_palindrome('dented') False """ |
Because the function returns a Boolean value, we need at least 2 test cases: one that returns True
and one that returns False
. In this case, we actually need quite a few more than 2 test cases.
As for the previous example, we need to choose different values for the string argument that represent different categories of strings.
When we developed the code for is_palindrome()
, we found that whether a string was even or odd affected the code. Therefore, the tests should consider strings that have even and odd lengths. For this example, we'll consider strings that have these lengths:
The test cases are summarized in this table:
|
When choosing test cases, consider the following factors:
strings, lists, tuples, dictionaries
) test with:
if
statement checking when a value is 3; 3 is a threshold), test at that threshold.
There is often overlap between the categories, so one test case may fall into more than 1 category.


As a Data Consultant, your role will be to develop, write packages and libraries, deploy models, troubleshoot, and provide technical support for developing predictive models. You will be working with various machine learning and data analysis techniques such as clustering (DBSCANS, TDA etc), forecasting (ARIMA, LSTM) and Auto-ml.
Other Qualifications
Strong problem solving skills with an emphasis on product development.
Experience using statistical computer languages (R, Python, SQL, etc.) to manipulate data and draw insights from large data sets.
Experience working with and creating data architectures.
Knowledge of a variety of machine learning techniques (clustering, decision tree learning, artificial neural networks, etc.) and their real-world advantages/drawbacks.
Knowledge of advanced statistical techniques and concepts (regression, properties of distributions, statistical tests and proper usage, etc.) and experience with applications.
Excellent written and verbal communication skills for coordinating across teams.
National Provider Data Management (NPDM) is a shared service established to support regional and national provider data management, reporting, analytics, system strategy, and compliance. NPDM's focus is on improving provider data quality and developing a common business process and technological approach for addressing critical data needs.
The NPDM Data Consultant provides support in making strategic data-related decisions by analyzing, manipulating, tracking, internally managing and reporting data. This position functions both as consultant and as a high-level SAS programmer. The position works with a diverse set of clients, data owners and stakeholders to ensure business requirements for provider data, whether they pertain to meeting an external requirement or fulfilling an internal business need, are accounted for and translated into technical output in the form of provider network reports, network adequacy analyses, directory extracts or other purposes as needed.
Essential Responsibilities:
Designs and enhances databases.
Develops complex code, queries and scripts to generate reports in various formats from diverse data sources.
-
Develops reports with accurate, easy to read, useful information.
-
Participates in the development of outcomes and process measures, including technical specifications, to enable guideline implementation, and evaluation.
Builds and maintains complex SQL and SAS routines using macros, vendor software, and software written by self and others.
Tests and maintains data integrity across multiple databases (e.g. internal SAS, DB2, VSAM; external: Adobe, Excel, SAS parsing routines, COBOL and other types of databases).
-
Defines and frames complex multi-dimensional issues and develops time tables/processes for decision making.
Translates business needs, issues, and ideas into effective strategies and action plans and technical output.
-
Formulates specific implementation plans and evaluates the effectiveness of actions/programs implemented.
Develops creative alternative solutions.
Project manages resource allocation and on time delivery of output.
-
Works closely with IT and internal and external partners.
May coordinate team/project activities and schedules.
May assist in the determination of goals and priorities with team, clients, or project management sponsors.
May provide leadership to multi-disciplinary project teams.
Communicates results/recommendations to project sponsors, clients, and various senior level audiences.


{% extends "organizations/onboard/base.html" %} {% load i18n %} {% block title %}{% trans "Create an Organization" %}{% endblock %} {% block content %}
{% blocktrans %} Finally, if you'd like to invite your company to join you, invite some members to share documentation with below. More members can be invited to your team later, in the organization admin dashboard. {% endblocktrans %}
{% endif %} {{ block.super }} {% endblock %}


Instant image optimization on all platforms
Intelligent real time image optimization, resizing, cropping and super fast delivery
Original Image
Resized 300x200 image
Smart cropped thumbnail image
Resized and blur image
Dynamic image resizing and transformation
Generate different sizes and variations of an image directly from the image URL
No need to create and store multiple image variations
Decouple your UI with images and easily change the layout
Create perfect responsive visual experiences across devices
Original image
120kb
Optimized with ImageKit.cb
56kb(>50% smaller)
Reduce image size not visual quality
Intelligent compression based on structural similarity
Get high quality images in smaller file size
Automatic format selection based on user device, image content and quality settings
5-minute integration with leading platforms
No need to upload existing images on ImageKit
Works with your existing Amazon S3 bucket or webserver
Your existing image workflow remains same
Start delivering optimized and resized images on your own domain
3-steps away from a faster website
Sign up for a zero risk 30 days trial
200+ websites and apps trust ImageKit with their images


JC
JoCasta
A tutorial series to get you up and running with JoCasta
Tutorial 1 : Getting Started
Tutorial 2 : Using Trends
Tutorial 3 : Mods & Gens
Tutorial 4 : Large Data
Tutorial 5 : Custom Properties
Tutorial 6 : Using JC with FC
Tutorial 7 : Save & Load Stack
Tutorial


This page lists the main concepts of Storm and links to resources where you can find more information. The concepts discussed are:
- Topologies
- Streams
- Spouts
- Bolts
- Stream groupings
- Reliability
- Tasks
- Workers
Topologies
The logic for a realtime application is packaged into a Storm topology. A Storm topology is analogous to a MapReduce job. One key difference is that a MapReduce job eventually finishes, whereas a topology runs forever (or until you kill it, of course). A topology is a graph of spouts and bolts that are connected with stream groupings. These concepts are described below.
Resources:
- TopologyBuilder: use this class to construct topologies in Java
- Running topologies on a production cluster
- Local mode: Read this to learn how to develop and test topologies in local mode.
Streams
The stream is the core abstraction in Storm. A stream is an unbounded sequence of tuples that is processed and created in parallel in a distributed fashion. Streams are defined with a schema that names the fields in the stream’s tuples. By default, tuples can contain integers, longs, shorts, bytes, strings, doubles, floats, booleans, and byte arrays. You can also define your own serializers so that custom types can be used natively within tuples.
Every stream is given an id when declared. Since single-stream spouts and bolts are so common, OutputFieldsDeclarer has convenience methods for declaring a single stream without specifying an id. In this case, the stream is given the default id of “default”.
Resources:
- Tuple: streams are composed of tuples
- OutputFieldsDeclarer: used to declare streams and their schemas
- Serialization: Information about Storm’s dynamic typing of tuples and declaring custom serializations
- ISerialization: custom serializers must implement this interface
- CONFIG.TOPOLOGY_SERIALIZATIONS: custom serializers can be registered using this configuration
Spouts
A spout is a source of streams in a topology. Generally spouts will read tuples from an external source and emit them into the topology (e.g. a Kestrel queue or the Twitter API). Spouts can either be reliable or unreliable. A reliable spout is capable of replaying a tuple if it failed to be processed by Storm, whereas an unreliable spout forgets about the tuple as soon as it is emitted.
Spouts can emit more than one stream. To do so, declare multiple streams using the declareStream
method of OutputFieldsDeclarer and specify the stream to emit to when using the emit
method on SpoutOutputCollector.
The main method on spouts is nextTuple
. nextTuple
either emits a new tuple into the topology or simply returns if there are no new tuples to emit. It is imperative that nextTuple
does not block for any spout implementation, because Storm calls all the spout methods on the same thread.
The other main methods on spouts are ack
and fail
. These are called when Storm detects that a tuple emitted from the spout either successfully completed through the topology or failed to be completed. ack
and fail
are only called for reliable spouts. See the Javadoc for more information.
Resources:
- IRichSpout: this is the interface that spouts must implement.
- Guaranteeing message processing
Bolts
All processing in topologies is done in bolts. Bolts can do anything from filtering, functions, aggregations, joins, talking to databases, and more.
Bolts can do simple stream transformations. Doing complex stream transformations often requires multiple steps and thus multiple bolts. For example, transforming a stream of tweets into a stream of trending images requires at least two steps: a bolt to do a rolling count of retweets for each image, and one or more bolts to stream out the top X images (you can do this particular stream transformation in a more scalable way with three bolts than with two).
Bolts can emit more than one stream. To do so, declare multiple streams using the declareStream
method of OutputFieldsDeclarer and specify the stream to emit to when using the emit
method on OutputCollector.
When you declare a bolt’s input streams, you always subscribe to specific streams of another component. If you want to subscribe to all the streams of another component, you have to subscribe to each one individually. InputDeclarer has syntactic sugar for subscribing to streams declared on the default stream id. Saying declarer.shuffleGrouping("1")
subscribes to the default stream on component “1” and is equivalent to declarer.shuffleGrouping("1", DEFAULT_STREAM_ID)
.
The main method in bolts is the execute
method which takes in as input a new tuple. Bolts emit new tuples using the OutputCollector object. Bolts must call the ack
method on the OutputCollector
for every tuple they process so that Storm knows when tuples are completed (and can eventually determine that its safe to ack the original spout tuples). For the common case of processing an input tuple, emitting 0 or more tuples based on that tuple, and then acking the input tuple, Storm provides an IBasicBolt interface which does the acking automatically.
Its perfectly fine to launch new threads in bolts that do processing asynchronously. OutputCollector is thread-safe and can be called at any time.
Resources:
- IRichBolt: this is general interface for bolts.
- IBasicBolt: this is a convenience interface for defining bolts that do filtering or simple functions.
- OutputCollector: bolts emit tuples to their output streams using an instance of this class
- Guaranteeing message processing
Stream groupings
Part of defining a topology is specifying for each bolt which streams it should receive as input. A stream grouping defines how that stream should be partitioned among the bolt’s tasks.
There are seven built-in stream groupings in Storm, and you can implement a custom stream grouping by implementing the CustomStreamGrouping interface:
- Shuffle grouping: Tuples are randomly distributed across the bolt’s tasks in a way such that each bolt is guaranteed to get an equal number of tuples.
- Fields grouping: The stream is partitioned by the fields specified in the grouping. For example, if the stream is grouped by the “user-id” field, tuples with the same “user-id” will always go to the same task, but tuples with different “user-id”’s may go to different tasks.
- All grouping: The stream is replicated across all the bolt’s tasks. Use this grouping with care.
- Global grouping: The entire stream goes to a single one of the bolt’s tasks. Specifically, it goes to the task with the lowest id.
- None grouping: This grouping specifies that you don’t care how the stream is grouped. Currently, none groupings are equivalent to shuffle groupings. Eventually though, Storm will push down bolts with none groupings to execute in the same thread as the bolt or spout they subscribe from (when possible).
- Direct grouping: This is a special kind of grouping. A stream grouped this way means that the producer of the tuple decides which task of the consumer will receive this tuple. Direct groupings can only be declared on streams that have been declared as direct streams. Tuples emitted to a direct stream must be emitted using one of the [emitDirect](/apidocs/backtype/storm/task/OutputCollector.html#emitDirect(int, int, java.util.List) methods. A bolt can get the task ids of its consumers by either using the provided TopologyContext or by keeping track of the output of the
emit
method in OutputCollector (which returns the task ids that the tuple was sent to). - Local or shuffle grouping: If the target bolt has one or more tasks in the same worker process, tuples will be shuffled to just those in-process tasks. Otherwise, this acts like a normal shuffle grouping.
Resources:
- TopologyBuilder: use this class to define topologies
- InputDeclarer: this object is returned whenever
setBolt
is called onTopologyBuilder
and is used for declaring a bolt’s input streams and how those streams should be grouped - CoordinatedBolt: this bolt is useful for distributed RPC topologies and makes heavy use of direct streams and direct groupings
Reliability
Storm guarantees that every spout tuple will be fully processed by the topology. It does this by tracking the tree of tuples triggered by every spout tuple and determining when that tree of tuples has been successfully completed. Every topology has a “message timeout” associated with it. If Storm fails to detect that a spout tuple has been completed within that timeout, then it fails the tuple and replays it later.
To take advantage of Storm’s reliability capabilities, you must tell Storm when new edges in a tuple tree are being created and tell Storm whenever you’ve finished processing an individual tuple. These are done using the OutputCollector object that bolts use to emit tuples. Anchoring is done in the emit
method, and you declare that you’re finished with a tuple using the ack
method.
This is all explained in much more detail in Guaranteeing message processing.
Tasks
Each spout or bolt executes as many tasks across the cluster. Each task corresponds to one thread of execution, and stream groupings define how to send tuples from one set of tasks to another set of tasks. You set the parallelism for each spout or bolt in the setSpout
and setBolt
methods of TopologyBuilder.
Workers
Topologies execute across one or more worker processes. Each worker process is a physical JVM and executes a subset of all the tasks for the topology. For example, if the combined parallelism of the topology is 300 and 50 workers are allocated, then each worker will execute 6 tasks (as threads within the worker). Storm tries to spread the tasks evenly across all the workers.
Resources:
- Config.TOPOLOGY_WORKERS: this config sets the number of workers to allocate for executing the topology