text:
Writings/ Photographs/ Poetry/ Archives
A Holly Lee and Lee Ka-sing online magazine. Published on Fridays.
李家昇黃楚喬網上雜誌,逢星期五出版
++++++++++++++++++++++++++
written by Holly Lee
with photographs by Lee Ka-sing
(58) In the wood of bookstands
Weighing almost nine pounds this XL Genesis book, Mrs. Bento thought to herself, could be feasible to sit on the wooden bookstand Bento made. Ha, how Hilly used the tripod to support hers! She went on and clicked to see Genesis' $4000US SUMO version, which weighed over a hundred pounds, consisted of two volumes and came with a customer bookstand designed by Tadao Ando. Obviously the champion! So she thought. However we can only afford, at the most, the much friendlier edition, and we already have the Bento stand.
After surfing Taschen's website of books for a while, Mrs. Bento realized that it was not exaggerated that Hilly used a tripod to hold her Genesis, even though it was only a XL version. Taschen has also published SUMO editions for other celebrated photographers and artists, and some of them have bookstands designed by renown designers. Here's one, the David Bailey's SUMO, which measured 19.6 x 27.5 inch, 103 pounds, sat on a white tripod style bookstand designed by Marc Newson and made by Manfrotto, the famous Italian tripod manufacturer. Marc Newson, the industrial designer from Australia, went on to use the same design for Annie Leibovitz's SUMO, this time as a black stand - fit for a photographer, he thought. He would use the same design, with some alteration for David Hockney's SUMO, and sit the giant on a tricolour stand - blue, yellow and red, which he claimed to be Hockney's trademark colours. Wonderful. Yet, the most impressive bookstand Mrs. Bento found was in Helmut Newton's SUMO edition published twenty years ago, in 1999. It is possibly the first SUMO Taschen made, all 10,000 editions are sold out. Her favourite - the sleek, collapsible stainless steel bookstand was designed by Philippe Starck. Then there is another book, published just last April, of the photographs of Thomas Laird. This SUMO edition features life-size images of Tibetan wall murals, printed in five colours including gold. Mrs. Bento quickly turned her attention to the bookstand. It was a wooden modular bookstand designed by the Pritzker Prize winner Shigeru Ban.
"Mom we've made some masks. Try this on and see if it fits." Without warning, Ginger and Chai came in together holding a pile of masks.
"Oh…" Mrs. Bento quickly retreated from the maze of bookstands and stretched out her hand to receive the mask. "This smokey grey is nice," she put it on, went to the mirror and paused for a moment. "It'll be nicer if it has some whiskers, like Cigar's. It's more cheerful. People need this."
"Are you sure Aunty?" Chai bursted into fits of laughter, "I can help stitch some white threads on both sides of your cheeks."
"There," echoed Ginger, giving a slight tap on the nose behind her mom's mask, "should add a nose too."
"Where did you find the fabric, and the elastics?" Asked Mrs. Bento.
"Oh, the fabric is from a pair of pants I've never worn. Luckily I found the elastic cords from some old name batch holders that I didn't throw away." Ginger said as she put on her mask and checked herself in the mirror. "Mom, you stole my cat mask idea."
"That's not a problem. I can always be a squirrel, you know, the white one that we saw at the small park at CAMH. Wonder where it has gone since the park was demolished for redevelopment."
"Sushi Grass in Paradise" is an on-going story. To read the full length version with previous chapters, please visit- https://oceanpounds.com/blogs/sushi-grass-in-paradise
Photographs from domestic-life-colour-book series (2020)
Remember me: Four Portraits
Aunt, taken by King's Studio around late fifties.
Some of the photographs my mother left me are over seventy years old. A visual relic I would go over repeatedly to visit bygone eras, especially the early nineteen-fifties. Running through piles of images, some postcard size, others varying but smaller sizes, I was able to walk into fragments of my mother's life, to connect it with the times. I came across four studio portraits that raised a new train of thoughts. One is a portrait of her sister, my aunt Manah, two black and white photos were gifts from her friends, and in the last picture my mother posed in Cantonese opera costumes.
It was a time before I was born. It was a time when photography was not at all practiced commonly, and too few could afford a camera, a time when photography was regarded as highly professional, a time when studio portraits flourished and many classical Hollywood style portraits were produced.
With instructions from the photographer to cling a little bit to the right, my aunt's smile was fresh as early Spring. She wore a cheungsam lined with bold embroidery cotton trims . The portrait was not dated. It was taken probably around late fifties. Nicely presented in a fold card, the studio's name King's, adorned with a crown, was embossed on the lower right corner of the photograph.
梁素琴 Leung So Kum, Yuet Kong Studio, signed at the back dated 1951.
The beautiful head shot was a gift from Leung So Kum, who rose to become a famous actress active in the 50s and 60s. My mother pursued Cantonese opera as an amateur in her youth. She probably met Leung in the circle of opera singers. Leung gave her this photograph as a gift. An embossed seal on the bottom right hand corner indicated that it was printed by Yuet Kong, the Moon Palace Studio. Leung signed and dated at the back of the photograph November 22, 1951.
The black and white photograph of another famous actress/opera singer Tam Sin Hung, who dressed in Chinese opera costume and held a big ostrich feather fan behind her, was a gift also to my mother. She signed on the front and dated it September 15, 1956. The word Agfabrovira is still visible on the back of the photo paper, a black and white fibre-base paper popular in the 1950s. She remained in touch until my mother died in 2005. Tam was born in 1931 and is still living graciously up to this day.
My mother learned Cantonese opera in her early years. She was passionately in this one-time popular art form and I can still remember her sing. I also remember we owned a book of lyrics from an opera sung by Fong Yim Fun - the Queen of Cantonese opera. It must have been fascinating for her to be staged as a "fa dan" - a female principal role in the Cantonese opera, an image etched on paper in a glamorous look, along side her friends in the acting circle. She went to a photo studio for this shot, fully made up and costumed, a moon fan in her left hand. This photograph was hand-coloured and might be around the late forties. At the back was a chop of Kwong Kwong Studio, which was located on Nathan Road, Kowloon.
In my imagination, she must have lamented that she had never gone professional. A path that she dreamed was cut short by an early arrange marriage. My lament is that I have never asked her too much about her history. My learning of our family's history was cut short by her death.
Equally sad is stories of the photo studios around that period in Hong Kong were mostly lost. I seem to hear them crying behind the photographs - remember me!
譚倩紅 Tam Sin Hung, studio unknown, signed 1956.
Mother in opera costume, Kwong Kwong Studio, around late 1940s.
Issue 0417-2020
Published by Ocean and Pounds and archived at oceanpounds.com
Selective items in this publication are available at the OCEAN POUNDS online shop. For items featured in CURRENT WORK, VINTAGE, ARTIFACT, PUBLICATION, OBJECT, BOOKSCAPE and COLLECTION, please send a request to: mail@oceanpounds.com.
If you are a researcher or writer and want to use the material, please write us in advance. Some of the materials might have different level of copyrights involved.
Not to miss a single issue, please subscribe to DOUBLE DOUBLE Release Notification. Visit - http://doubledouble.org
DOUBLE DOUBLE previous issues were archived at -
https://oceanpounds.com/blogs/doubledouble
leekasing.com is a portal website for current and earlier works. Apart from exhibitions, Holly and Ka-sing use extensively web platforms to display photography and writing projects. Contact us for a detail list of links.
Holly and Ka-sing currently live in Toronto with their daughter Iris, and their cat Sukimoto.
Back to Double Double


There's something truly mesmerizing about braided hairstyles. From french braid upgrades to dutch braid remixes, from boxer braids to box braids, there's something for everyone in the braided hairstyle department. Braids never go out of style, and instead are a constant fixture at fashion weeks and festivals.
Luckily, in today's digital age we don't have to look much further than the internet for every braid style and tutorial we could ever want. Pinterest and Instagram are a treasure trove of inspiration when it comes to braided hair, and we could spend hours scrolling through those searches. Our favorite braid bloggers are always coming up with new ways to weave their tresses, constantly capturing our attention with new, captivating 'dos.
Consider this your visual guide to braids. For your viewing pleasure (not to mention to serve as a hefty dose of inspiration) we've rounded up the dreamiest braids on the internet.
See the very best braided hairstyles below.
Head to the comments to let us know which style was your favorite, and then shop everything you need to get the prettiest braids ever!


Once you've found the perfect wedding gown, the next step is to move onto finding the right wedding accessories to go with your gown. At the top of the list are your bridal shoes.
After you've ordered your wedding dress, it's important to decide on your wedding shoes before you attend your first gown fitting. To fit your dress just right, you'll need to know how high the heel is on your bridal shoes and in order to know that, you'll need to pick your shoes before your fitting.
Read on for the top tips in selecting and buying cheap bridal shoes and cheap wedding shoes.
1. Choose wedding shoes that go with your wedding theme. If you're having a Vegas-style wedding, go for glam with some flashy stilettos.
2. For the most comfortable pair of shoes, pick a pair with a heel that's 2 inches or lower.
4. For wedding shoes that are gorgeous but uncomfortable, consider giving your tootsies a rest while you're waiting to walk down the aisle. Wear comfy shoes or slippers and then put your high heels on right before your wedding ceremony begins.
5. Cover any blisters or corns with foot pads on your special day. Dr. Scholl's carries a variety of items to make you more comfortable.
6. Get used to walking in your wedding bridal shoes by breaking them in a few weeks before your wedding. Wear your wedding shoes around your house for a couple of days.
7. Select shoes that will match your wedding dress perfectly. You shouldn't have trouble finding shoes that will go with the fabric and color of your dress. If your dress has special embellishments like lace or flowers, you can also find shoes that will compliment those aspects of your gown.
8. Try on lots of different styles of shoes to find the pair that feels and looks the best.
9. Because feet have a tendency to swell in the evening hours, try shopping for shoes in the late afternoon or evening. Your shoes will fit better when you try them on at this time.
10. If you'll be wearing stockings with your wedding gown, be sure to wear them when you're trying on wedding shoes.
11. Select a pair of shoes that you can walk in comfortably. No need to buy wedding shoes with a 3 inch heel when you can barely stand in a pair of 2 inch heels.
12. If you're looking for something special or you have an unusual shoe size, consider shopping for your bridal shoes online. Just allow plenty of time for online goods to be shipped.
13. Add some comfort to your shoes by placing cushioned insoles into your wedding shoes.
14. If you're planning on dancing at your reception, practice your moves in your bridal shoes before your wedding day. You don't want to slip during your first dance because you're not used to waltzing in your shoes.
15. To get the perfect color for you wedding shoes, compare colors and swatches in natural daylight.
16. Because bridal shoes are typically light in color, they can easily be dirtied while in store. Before you purchase your shoes, do a once-over to make sure both of them are spotless.
17. Once you have tried a pair that you like at the store, don't buy them just yet. Go online and comparison shop the same exact pair - you'll likely find them at a much better price.


text:
Job: Tier II Canada Research Chair in Indigenous Digital Humanities, Ryerson
From the ad: We are seeking an outstanding emerging scholar to join our dynamic, community-focused research environment in the Faculty of Arts and across campus. Working with the Centre for Digital Humanities (CDH), the CRC in Indigenous Digital Humanities will be situated at the university's intersectional hub of cross-faculty research and innovation, both within the…
Job: Open Rank TT Faculty Position, Digital Youth, University of Oklahoma
From the ad: The School of Library and Information Studies (SLIS) at the University of Oklahoma (OU) seeks an innovative scholar in the area of digital youth for an open rank, tenured/tenure track faculty position. SLIS is expanding its strengths in digital youth scholarship through innovative teaching, research, and service. Digital youth scholarship is an…
Job: Asst. Prof. in Philosophy (Cyber-Philosophy), UT San Antonio
From the ad: The department seeks candidates whose research and teaching show promise of distinction in two or more of the following areas: philosophy of mind, cognitive science, artificial intelligence, philosophy of data science, cyber-ethics, cyber-security. Successful applicant must be able to articulate a research agenda, have an emerging record of publications, excellent teaching skills…
Job: Asst. Prof., Literature and Digital Humanities, University of Maine at Farmington
From the ad: We invite applications for a tenure-track Assistant Professor position in Literature and Digital Humanities, beginning fall 2020. We seek candidates with a specialization in literature whose expertise lies squarely in the intersection between the literary world and the digital world and who are prepared to teach innovative and exciting literature courses in…
Job: Open Rank Professorship in Digital Humanities and Pre-Modern Studies, Notre Dame
From the ad: The College of Arts & Letters at the University of Notre Dame invites applications for a professor of digital humanities and pre-modern studies at any rank. The successful candidate will be a distinguished scholar in her or his field with a strong record of innovative research and teaching or, in the case…

redpajama_set_name: RedPajamaCommonCrawl


I got this race pack from Lantau Base Camp during one of the weekend getaway to hike sunset and lantau peak. There are a few major brands of race vest in the market like Ultimate Direction and Salomon being the most popular. However, the prices are steep for their 12L pack and the I do not fancy the designs.
This pack from a small french company called raidlight caught my attention while doing my search for a race pack with water bottles in front. The Ultra Olmo series is designed with a french legend ultra runner called Marco Olmo. There is a 5l, 12l and 20l options. The 12L fit my needs so I decided to get it after trying the fit. The pack comes with 4 major conponents: The main pack, 2 water bottles, Trailquiver for trekking poles and a race belt.
The pack has lots of storage and pockets and a generous 12L is more than enough for an ultra event. The water bottle holder are designed such that it will keep the bottle upright all the time and the special water bottle with a bite value allows hydration without taking the bottles out. The weight is balanced in front and back which allow good running posture and less stress on the back.
Overall is light weight and very efficient pack. It rides high on the back and can pack lots of stuff for ultra running or even hiking.


Level 4 at Pier 17 is a true hidden gem in the Seaport District. Boasting an expansive open floorplan and unparalleled views of the Brooklyn Bridge, DUMBO and the Statue of Liberty, Level 4 provides the ultimate blank canvas for creating extraordinary and unique productions. From hosting fashion shows to product launches, industry summits and after parties, Level 4 offers the perfect foundation for building out your next unforgettable event.
*Capacities listed are estimates. Final capacity will be established per event, based on individual event layouts.
Copyright © 2019 The Howard Hughes Corporation. All rights reserved.


text:
Architecture Talk: Taman Sari Yogyakarta
Taman Sari, Yogyakarta
It is one of the earliest royal mixed use that consists of resting area, workshop, meditation area, defense area, hiding place. Here are some facts about this place which you might not know:
It is also called "water castle" (Dutch: waterkasteel); as by shutting the watergates, the complex would be completely immersed in water, leaving tall structures standing out. Talking about a real life version of Kevin Costner's fictional Water World, in the past.
Built by Foreign Architect
The manuscript of Serat Rerenggan mentions the story of Demang Tegis, a Portuguese man said to be one of the architect of Taman Sari. According to the manuscript, a strange man suddenly appeared in Mancingan Village (a locality name on the south coast of Java near Parangtritis). With long nose, white complexion, and a foreign language, the villagers suspected that the person was some kind of spirit or forest fairy. They presented him to the current sultan, Hamengkubuwono II. Apparently the sultan found interest in the person and took the strange man as his servant.
After some times, the man had finally learned to talk in Javanese. According to him, he was a Portuguese (or in Javanese, Portegis) who was stranded from a shipwreck. He also claimed to have been a housebuilder, so the sultan ordered him to erect a fortress. Satisfied by the man's work, the sultan gave him the title "demang." From then on that person was known as Demang Portegis or Demang Tegis
Historical Dispute
Another version obout the construction of this structure can be found in the book of Mamana in Yogyakarta Kraton. It is said that the project leader for the construction of Taman Sari was Tumenggung Mangundipura. He had travelled twice to Batavia to learn about European architecture, which is the reason why the architecture of Taman Sari resembles a hybrid of Javanese and Dutch styles, instead of Portuguese.
Underground Mosque
There is a one-storeyed circular structure that forms another artificial island in the past called Gumuling Well (Sumur Gumuling), which can only be entered via the underwater tunnel. A niche in the wall of this building was used as a mihrab. The central area of this building is an elevated platform where four staircases meet, and then from the platform, one staircase reach the first floor. On the ground level of this platform is a small pool that was used for Muslim ritual ablution.
(Spiritual) Tunnel of Love
A legend says that there is a secret tunnel that connects the palace with the south sea (Indian Ocean) where Nyai Roro Kidul or the Queen of the South has her palace. The supernatural Queen becomes the spiritual wife of Yogyakarta Sultan for many generations. Even The Sultan has to pay a visit to all of his wives & concubines, and that does not exclude The Queen of The South
Chicks watching tower
Perhaps this would be the favourite feature any straight man can dream of. Taman Sari has it! For Sultan's eyes only though. In the past, his majesty would go up to this tower and watch his concubines while they are bathing in the part of the structure which is best preserved. Just like a royal market, except the groceries are the girls. Like it or not, that's the life of the Sultan. Check our Jakarta-Based Architecture services with various design for your projects.


If you have been linked in any way considering the field of web creating and webdevelopment, you will have realized that quite a number of adjustments have occurred in how that goods and services are supplied. Indeed, it may be safe to express that the web has started a revolution in how we speak and do organization. It has opened up frontiers in order that even the most remote consumer has infinite and constant access to what is going on online. Everything depends on the quickness and reliability of his Internet connection.
Net designing and web development have got emerged for the reason that two unique disciplines requiring different abilities in their own right, in fact it is not necessary that they can be embodied in the same person. In fact this can be an exception, rather than the rule. It often happens today that the webdevelopment and world wide web designing facets of the same internet site are achieved in different corners of the world, with via the internet communication and planning currently being shared around these locations. This makes it conceivable to take advantage of the best talents at affordable rates, so that it leads to low costs and higher profits.
The sphere of online demonstration methods and services has also widened considerably. Now we have energetic pages compared to the static web pages of the previous. We apply Flash, banners, buttons and also other methods like animation to enliven and entertain the viewer. Having someone to access your web pages and remain on them very long to use your services or products is getting far more technical and ever more challenging. The game contains moved from getting traffic to achieving métamorphose.
Those doing work in web creating or webdevelopment will be more knowledgeable about the changing trends. These kinds of fields still evolve while using the times, looking to incorporate each of the available fashion that are helpful to their office. Some of these components have extended and advanced the available technology, while others have made the best use of this. It is better to pick those elements that are here to stay and can contribute to the success and development of your business.
1 . One example is the move from Internet Manager to Firefox as the default Web browser for your system. This is because Mozilla Firefox has the ability to keep in mind the last WEBSITE ADDRESS that you were on, saving time in cases where rebooted due to system inability or overburden. Another reason emaanwali.com is the fact Mozilla Firefox has the capacity to open every website in a separate windows. In this way you are able to go back to the prior page or website merely by closing undesired tabs. The two of these advantages above Internet Explorer generate Mozilla Firefox a preferred decision as web browser.
2 . The emergence of framework libraries will allow web developers and programmers to write their code in a more beautiful and elegant fashion, enforcing a good of benchmarks that all may use.
3. The possibility of data sharing across websites or sites so that in case you log into the primary frame on the website you automatically gain access to all the other websites within that or attached to it. Google's website is actually a shining example of this, so that you could log into your Google bank account, and be automatically logged into your Google Adwords bill, your blog and any social websites widgets that you could have attached to your website.
4. Just like most web development trends it will always be advisable to stick to Google's criteria. If you want your websites for being recognized relating to the world's most powerful and popular search engine, it is a good idea to adhere to their suggestions. By making correct use of meta tags, alt tags, keywords and everything the other little factors that contribute to SEO in Dubai, you can expect to no doubt get some high grades with Google in their search engine ranking positions.
Traffic Online Media Products is one of the top-quality SEO firms in Dubai, also skilled in the areas of web site design in Dubai and web development Dubai. The expertise includes end to finish production and marketing of all online media content. You are welcome to email us with your has to see how we are able to help you.


Worth mentioning this week is a pull request that improves documentation for Swift compiler on Windows Subsystem for Linux. Also, Swift Package Manager Version Pinning proposal was returned for revision, and first meetings of Swift Server APIs Work Group happened this week with meeting minutes publicly available on both networking and security.
An interesting perspective on how Swift on servers compares to Go, Node.js, Rust, C and Java in terms of ecosystems and overall language feel.
Slides from Swift Alps talk about server-side Swift and related libraries. If you've participated in the competition mentioned in the talk, please let me know if you want to share what you've done, I'd love to feature that in the next issue!
Two more videos on Vapor, both related to database and model side of things. Here are links to previous three videos in this cycle.
Yet another look on the current landscape of server-side frameworks with sample code for each major library.
The delegation design pattern is a familiar pattern to Cocoa programmers but there are times when it seems cumbersome to create and use. In this post I look at completion handlers as an alternative to delegation. At first glance they are simpler but come with some caveats.
Ever seen "Try in Sandbox" button near package description in IBM's Package Catalog? It allows you to run Swift sample code in the cloud from your browser and turns out you can enable that pretty easily for your own package.
These three posts are a good reminder that every new technology comes with its own edge cases that may take years to implement properly. If you deploy your Swift code with Docker, I highly recommend reading all three posts as they uncover a lot of small caveats with Docker that you may stumble upon.
SourceKitten links and communicates with sourcekitd.framework to parse the Swift AST, extract comment docs for Swift or Objective-C projects, get syntax data for a Swift file and lots more!
An example of usage of SourceKitten on Linux is available in this GitHub gist.
This module is a Yeoman generator for creating REST webservices based on the Kitura web framework with the Swift language.
What sets this JSON-to-Swift converter apart from the others is its type inference capabilities. The net result is Swift code that uses the most appropriate data types possible. This functionality really shines when analyzing an array of elements.
RandomKit is a Swift framework that makes random data generation simple and easy.
It provides a protocol-oriented API and is able to generate random URLs, Core Graphics type instances and instances of other Foundation types out of the box.
To promote clear usage, the Swift API Design Guidelines advice that we omit needless words in function names. Words that merely repeat type information are specifically identified as needless.
This is a tool that helps you spot those words in your code base.
Apodimark is a markdown parser written in pure Swift 3. It is fast, flexible, easy to use, and works with indices instead of String, which is ideal for syntax highlighting.
Swish is a simple script for remote building your Swift projects on a Linux machine. Why is that so cool? You can develop in Xcode on macOS and can use an External Build System to deploy your code on Linux.


text:
Workout Templates
Muscle Directory
Joint Articulations
Beginning Exercise
Exercise Information
Expert Talks
ExRx.net > Nutrition > Supplements > Article
Vitamin D is an essential, fat-soluble vitamin that serves as a precursor steroid to several metabolic and biological processes (Dahlquist 2015). Vitamin D is usually produced by exposure to sunlight, but it can be present in high concentrations in certain foods such as fatty fish and cod liver, egg yolks, and milk (Georgieva 2018). Vitamin D plays a vital role in immune, cardiovascular, and musculoskeletal function and has the potential to increase physical and athletic performance (Kafkalias 2017).
There is increased interest in supplementing vitamin D since there are reports of deficiencies among athletes, especially those in indoor sports. There is also growing interest in supplementing vitamin D beyond sufficient levels to gain performance enhancing effects. (Powers 2011)
Vitamin D receptors and response elements are found in nearly all tissues in the body, especially skeletal muscle where these receptors are shown to be involved in protein synthesis and muscle growth (Georgieva 2018). Dahlquist (2015) suggested "it is plausible that vitamin D levels above the normal reference range (up to 100 nmol/L) might increase skeletal muscle function, decrease recovery time from training, increase both force and power production, and increase testosterone production, each of which could potentiate athletic performance".
The potential performance enhancing effects of vitamin D supplementation are primarily demonstrated in populations lacking sufficient levels. Vitamin D supplementation in people who are deficient is effective at improving strength, reducing injury risk, and improving athletic performance. (Abrams 2018)
There is a lack of evidence supporting the idea that vitamin D supplementation beyond normal levels will have an ergogenic effect. Within sport and athletic populations, adequate vitamin D levels increase muscle strength and physical performance (Georgieva 2018). This suggests that supplementing to reach adequate levels in the case of deficiency may optimize performance. However, in athletes with sufficient vitamin D levels, supplementation is not associated with improvements in athletic performance (Kafkalias 2017).
For athletes and those highly physically active, vitamin D should be part of daily diet supplementation. The recommended dose to maintain optimum vitamin D levels is 1500-2000 IU/day for adults. (Dahlquist 2015)
Optimal doses for maximizing athletic performance in populations with already sufficient vitamin D levels have yet to be established. Possible adverse effects with vitamin D include vitamin D toxicity, but there have been no reported cases resulting from exposure to sunlight or regular dietary intake. (Abrams 2018)
In general, vitamin D is associated with performance level, and supplementation to ensure at least adequate levels provides physical improvements. Further research is necessary to evaluate athletic performance improvements with higher doses of vitamin D in athletes who are not deficient. (Abrams 2018)
Abrams GD, Feldman D, Safran MR (2018). Effects of Vitamin D on Skeletal Muscle and Athletic Performance. Journal of the American Academy of Orthopaedic Surgeons, 26(8), 278–285.
Dahlquist DT, Dieter BP, Koehle, MS (2015). Plausible ergogenic effects of vitamin D on athletic performance and recovery. Journal of the International Society of Sports Nutrition, 12(1), 33.
Georgieva L, Żołądkiewicz K, Żukow W (2018). Vitamin D concentration effect in health care and sport performance. Journal of Education, Health and Sport, 8(2), 53-70.
Kafkalias A, Stavrou M (2017). Importance of vitamin D in athletes and exercise; A mini review. Arab Journal of Nutrition and Exercise (AJNE), 2(3), 170-9.
Powers S, Nelson WB, Larson-Meyer E (2011). Antioxidant and vitamin D supplements for athletes: Sense or nonsense? Journal of Sports Sciences, 29(sup1), S47-S55.
Main Menu | Vitamin D | ExRx Diet & Nutrition
Since 1999, ExRx.net has been a resource for exercise professionals, coaches, and fitness enthusiasts; featuring comprehensive exercise libraries (nearly 1800 exercises), reference articles, fitness assessment calculators, and other useful tools.
ExRx.net has been endorsed by many certifying organizations, government agencies, medical groups, and universities. See About Us and Featured Testimonies to learn more.
Support ExRx.net
ExRx.net provides free content and relies on advertisement income to maintain this site. If you are using an adblocker, we kindly ask you to support us by adding this site to your adblocker's whitelist. Other ways to support the continued development of ExRx.net is by providing us periodic donations or placing an order in our Store.
Iron (Fe++)
Food Exchanges Diet Prescription
Chromium (Cr)
Meat Exchanges
©1999-2020 ExRx.net LLC
About Us | Privacy | Terms | Facebook | Testimonies | Feedback | Store


text:
Patent Risks in Open Source – Lesson's from Google's Story
BananaIP Counsels > Open Source > Patent Risks in Open Source – Lesson's from Google's Story
in Open Source, Patents
This post was first published on April 25, 2011.
Risks inherent in use of open source software from patents have finally seen the light of the day. Patent risks in use of open source software came to be a reality with filing of patent suits by companies like Firestar, Microsoft and so on against open source businesses and users. However, none of the cases went the full distance earlier as they were settled out of court. The story is however different in the case filed by Bedrock Technologies against Google.Bedrock sued Google for patent infringement with respect to use of Linux by Google. The company filed the case in a Texas Court in June, 2009, alleging that Google's use of Linux violates its patent relating to an apparatus for information storage and retrieval (US 5,893,120). After hearing the parties, the Jury held Google liable for patent infringement and granted damages to the tune of five (5) million US dollars to Bedrock. In addition to Google, Bedrock also sued companies like Yahoo, Amazon, PayPal and so on.
This is a landmark decision with respect to open source just because it was the first to grant damages to the patent holder against an open source user. The decision elucidates the risks to open source based businesses from patents. More often than not, companies discount the patent risks inherent in use of open source software based on wide adoption by various companies and do not generally carry out patent due diligence. By hitting at the most widely adopted open source software in the world, Linux, the case has shown that no software, either managed by Free Software Foundation or any other entity, is free from patent risks.
Combating and mitigating patent risks is a very important step for every company using open source software, especially if the software is playing a critical role in the company's products. While, on one hand patent holders are going against open source users, open source users are building strategic positions to combat patent risks. The recent development from this perspective is Facebook and HP's membership of the Open Invention Network (OIN), whose membership has now gone to 334. It seems that joining OIN is a logical solution to all open source based businesses.
It is time for companies in India to wake up and take note of open source risks and adopt appropriate measures to mitigate them.
Authored by Dr. Kalyan Kankanala C.
To know more about the Intellectual Property services offered by BananaIP Counsels please Click here
A Presentation on Patent Licensing Basics – ...
Patent Practice in India: Presentation by Vikram P...
Cover Your Wickets – Leg Pad Patents
Top TED talks on Patents
Open SourcePatents
Tuesday, April 26th, 2011 at 5:51 AM
I wish all the SiNApSE blog readers a happy world IP day 2011
@PatenTM
yaavarumkelir
Wednesday, May 11th, 2011 at 10:20 AM
Risk Management, even for open source software, has become a reality and truly an eye opener. Thanks to Dr. Kankanala for bringing this. May I request you to give me the link for referring the complete text of the judgement for the above patent suit? Thanks and regards.
Vikram Pratap Singh Thakur
Monday, May 16th, 2011 at 7:10 AM
Bedrock Computer Technologies docketsvisit Justia All the dockets are mentioned in the aforementioned link.
Bedrock Vs Google verdict form click here


← Things Are Really Happening!
Today Dr Nathan Ryder and I are launching our co-authored e-book Self-Publishing For Academics. Self-publishing offers a huge opportunity for many academics, and they're beginning to take it up. Nathan and I have self-published several e-books between us, and have self-published in other forms too such as blogs and zines. We wrote the book we wished we'd had when we set out on our self-publishing journeys.
Working together turned out to be a dream collaboration and we've written about that this week on the Research Whisperer blog. For this blog, we thought we'd interview each other; this gave us a chance to ask some questions we hadn't got around to before. Here are the results.
Helen: What surprised you about our work together?
Nathan: How easy it felt. Writing a book is hard, and I've always thought that collaboration is quite tricky too, despite how necessary it is. We started from a concept, expanded out, divided the areas up and got to work. I know we're both busy, but we made this a priority, and I think because of that it's got done in a far more timely manner than I thought.
Given your own experiences in publishing and self-publishing, why did you want to co-author this one?
Helen: There are so many different options for self-publishing and marketing that I suspected you and I had taken different routes, even though we have both self-published for the same audience, i.e. doctoral students (up to now, anyway!). When we began talking I found we did indeed have different, but complementary, experience and knowledge. I think the combination of our approaches has made for a much better, richer book than I could write by myself.
Where do you think self-publishing will be most useful for academics?
Nathan: A big problem for many people is that they wait a long time to be "picked". Someone waits for someone to pick them for a job, or a project or to write a book, say. The need to be chosen is a really tough need to overcome, but it's barrier that can be hurdled. Academics don't have to wait for a publisher to say yes to their monograph: it's perfectly possible to do it yourself. A consequence of this could be that they could do the work that they think matters and will connect rather than what someone else thinks they can sell. There can often be shortened turnaround times for publication too.
What have you learned about self-publishing by doing this project?
Helen: I learned a lot about covers. I guess I vaguely knew it was possible to design your own but, not being a very visual person, I didn't think it was something I would be able to do. Now, though, I might just have a go! It's also useful to know where good bespoke covers can be obtained more cheaply than by commissioning a professional designer. Also, I learned a lot about self-publishing for free. I haven't spent a huge amount on my e-books, but I certainly haven't done them for free, and it's really useful to know about the options there.
Which makes me wonder, what have you learned about self-publishing from our project?
Nathan: The value of beta-readers and an editor. For both of my previous books I had relied on myself and asked my wife to look through the drafts, but we don't have the experience to know everything to look for when it comes to editing. And for this book, the beta-readers really helped us to spot gaps in our writing or logic – and even corrected us on some of the terms we used!
Do you have a routine or process when it comes to writing?
Helen: For the first draft of a book, I calculate how many words I need to write per day or (more often) week to get the draft done by the deadline. Then I add that to my weekly to-do list, and ensure I get those words written – even if that does, on occasion, mean spending Sunday at my computer. Also, I am quite focused about using my writing time for writing, so I'll produce several hundred words in an hour rather than spending my 'writing time' fossicking about on social media or surfing the internet. I don't need a particular place to write, I just need my laptop – I write on trains, in airports, on friends' sofas, and in bed. However, unlike many writers, I'm not keen on writing in cafes because I find the people-watching and eavesdropping opportunities too distracting!
What do you plan to self-publish next?
Nathan: I'm going to finish a project I started some time ago, and get my first book available for print-on-demand. Fail Your Viva came out in January 2013, and within weeks I was exploring how to get it in print. At the time and for a long time since I've convinced myself that I can't manage a print run, but as we were working on our book – and through doing a little hobby self-publishing – I've gained the confidence to finally make it happen. That, and digging some older writing out and seeing if I like it again.
I know you've got your series that you're past the halfway mark on. Have you got any plans beyond them?
Helen: Lots and lots of plans! I want to narrate the audio-books for all the e-books I've self-published for doctoral students. I also want to start making videos for YouTube. That's something I've tried several ways but haven't yet got the hang of, but I feel as if I've learned quite a bit in the process and if I keep trying I'll get there eventually. Also, I'm doing preparatory reading, thinking, and interviewing for my next full-length trad-published book, on research ethics, and I expect to start writing that in earnest in the autumn.
So if you could sum up in a sentence the main piece of advice you'd give someone who was thinking of self-publishing… well obviously that would be 'read our book'! But apart from that, what would you say?
Last question from me: what are you going to do to celebrate Self-Publishing for Academics being finished and out there?
Helen: Have a cuppa with you on Skype! After that: take your advice, and start writing the next e-book. That'll be the last in my series for doctoral students, and the last one I write for a while, so when I get that one finished I'm really going to celebrate.


text:
Q: Hard-coded Audio Player Continuing work today on my free theme and I'm trying to make it kick some butt.  I would like to embed an audio player into the theme.  Not a plugin, an embedded player.
The functionality of http://wpaudioplayer.com/standalone/ kicks some serious boo-tay.
However, that player is a bit ugly.  I do like the Woo Tumblog audio player (anybody know if I can implement this... people may make commercial themes off this theme so it needs to be legal?).  If there's a great looking player option out there that's distributable in commercial themes, simple, and well-designed let me know.
I assume I can just replace the .swf file in WP Audio Player... right?
May the force be with you.

A: I would recommend that you have your theme require the wordpress.org version of the wpaudioplayer plugin. There is a great article about having themes check for and require plugins.
As is well-argued on this WPSE answer, it's not a great idea to take code from a plugin and include it in your theme because you miss future updates and it might be legally/morally iffy. Best of all, if a person who purchases your theme chooses to switch themes some day, all their audio players will still work and they'll be very happy and thank you forever.

redpajama_set_name: RedPajamaStackExchange


text:
Power of AngularDart and Trustwave's Customer Portal (Dart Conference 2018)
So. That picture of me that was up there before this, started, was back in 2015, when I was lucky enough to present at the first art summit as you. Can see there's not the gray hair up in that picture that is not a direct reflection, from, working on angulardart, it's exactly. The opposite actually so so, I'm Eric Warner I work at Trustwave on the portal infrastructure, and today we're going to talk about the power of angular dart and how we built out our customer portal taking advantage of it so. Let's, go over a little bit at the beginning of what we're going to cover so at first we'll talk about building out a large-scale, portal, and what, that means for trust way portal development, kind of set the landscape, in the view that we're looking at and then, we'll look into what, we were looking for when we went into a new UI initiative. To, get off of our leg legacy. Technology, where we're using then. We'll look at what did we consider, at that time when we were going down this endeavor what was out there what was in the landscape, before we made the wise choice a, picking. Dart and angular dart and then we'll jump into what, we've taken advantage with in dart as far, as building out a base component, for our teams to use to develop with taking. A valley to shelf routing and deferred loading, to lazy, load our portal as it goes through as the customer goes through our portal take. Advantage of UI components, and building those out for our teams to use and then, also the tools that we have taken advantage of and why we chose dart to begin with. So. Trustwave portal development, we have a large-scale, portal that we build that, has about 15 distributed, teams that. Is about 50, plus developers, that are divided, across these teams and they, build about 35, different applications. That, take advantage of a thousand, plus Java services that we built on the backend using spring some. Of those are part of our portal infrastructure, that we build out but, a lot of them are from our product service teams for the the services, that need to support the views that are built out for those products, we.
Have 40,000. Unique. Global users that log into our portal, one, portal, on a daily basis so all this is brought together from, our team development, that takes place and we, got to make sure that we bring it into one build and leverage. Whatever technology, we're using to build out some sort of framework that the teams can take advantage of. So. We'll, go back a little bit it was 2013. We. Had a legacy, portal that was built off of using, flex with flash and we all know what's happened with flash it's died it's dead the browser's, have caught up with what we, could take advantage of at that time it was a good choice back then but. The browser's have caught up so we were looking for what's next what are we gonna go to so what, were we looking at at that time there was you know the team development II had to take advantage of but we also had to look at new requirements, coming in so. We wanted to make sure that we could build out a portal framework and that for our customer experience when they came to our portal I had a quick initial startup time we didn't want them sitting there and waiting for the, download to take place we wanted it to pop up quickly for them that, means also we wanted to lazy load our portal the, teams as they work on these views that they're putting together for their products, we, don't want it to download all at once and have this big memory footprint, within the browser we, want to incrementally, grow, the portal as a user goes through it we. Want it to be fast rendering within, our UI components, so there's not a lot of waiting for the user as they click through and we want to take advantage of something that we call in the past deep linking where we could send, URLs. To our customers, that they could click on and go right to the area within the portal so they don't have to log in and dive in from there and also that they could bookmark, these URLs to get back quickly to the area they wanted to go to within our portal. Then. There's a team development, that we've discussed previously we. Have a unique, look and feel that Trustwave that we go off of for, our portal, so we want to make sure we have a set of shared UI components, that the teams can use that. Are built in a consistent manner with, the proper styles so they don't have to worry about that when they build out their products this, goes along with also a base component, that they can leverage and use as well that, they can rely on that's going to build in and bring, in services, for their for, the base things like security and locale information, that they don't have to worry about on their side so they can concentrate on their product we.
Want To have quick, dev cycles, we want to have our developers, be able to make. Changes, see, it in the browser right away and not have to wait for some compile step to take place before they can see what their change was so we can deliver quicker a short. Learning curve was something that was on our list as well we. A lot of our developers are both you. Know back-end, developers, and then we have purely UI developers, but most of them work full, stack development, so we wanted to make sure whatever technology we picked was. Intuitive, to them and there was a short learning curve so they could come up to speed quickly and start building this out and then of course testing, involved in it the components, we build on our team in the portal infrastructure, we want to make sure we can test them so we supply out good components, for our teams to use and. Then you look into the tools that need to come with this as well if we have this team development, we need to make sure that we can have core sets of libraries, and we, can bring this all into one build that goes out so we need the dependency, management on top of it a good, IDE. Integration. And then be able to do continuous integration builds, out to our test areas, with our DevOps team and then product teams to production. So. Back. In 2013. When we looked into this you can see there's just a plethora of choices out, there that we can pick from so. You most of these are JavaScript. Frameworks, and that, right, off the bat kind of made me sick to my stomach a, little bit when you look at the team development, we were doing and trying to bring this together and then, also you know there was GWT, at the time and we could have gone backwards, and went that way but we wanted to pick a technology, that was gonna stay in the front and keep, up with the times and always increase and get better and better and something, that we can stay out of the spaghetti code land of JavaScript, we're, building, that bringing that into one building going forward just made me kind of just quiver a little bit. So. Say hello the dart and angular dart so, it's back in 2013. Again I keep going back in the time machine and we're sitting there and we say hey look, at the dart SDKs out here let's check it out so, what we started doing is some prototyping, and then, we started doing some brown bags internal, with our engineering, teams and we are building just some command line talking to WebSockets and bringing it in this was even before the the, packaged, HTML, was out there for building any type of UI so, what did we discover, at that point well, we discovered that this is a complete. SDK, with a core set of libraries and tools that, we can leverage for, building out our portal. Going forward, it was very its, supports. High quality tools large scale like I said and then extensive, libraries, that were out there that we could pick up from other people that are contributing, third-party. Libraries, so. This was something that, I mean from a background that we have some Java developers, or no matter what software language you were coming from it was, we were getting feedback through, the brow it's like this is very intuitive for me it's I can pick this up very quickly and it has everything that I've leveraged in the past in other languages, and I can take advantage of it and I don't have to play around in the JavaScript, land on these things as. A great cross-compile, over to JavaScript it's like oh that's great because we got to make sure that we can support all the major browsers that are out there and then, the the one that really sold us at the end is when the switch came in dart to go to strong mode we, were already building out dart to be very strongly, typed for building, with the other developers, that were use to this from the languages they've built in the past so, when dart made the decision, to go full strong mode it just hooked us even more as we started going down a pipe and those announcements kept, going and it was evolving, over so, now that we picked the dart SDK we're, like okay this is what we're going to use we, still needed a web framework to go on top of it so, we started looking into angular all the way back at angular 1.0, and that's the initial prototype and actually the initial portal that we were launching internal, that we built off of so why did we like angular so much well, this, is just piggybacking, off of what tom was talking about earlier is that based, off the templates, and the event bindings, events.
And Binding is the routing dependency. Injection, from everybody. In our company that's worked on services on the back end it was all within job and spring so they understand, this - a dependency, injection, and the power of it and then, pipes and then angular components, was announced. Last year and came out and it's like great, now we have a core set of libraries we can share so, we've watched angular, evolved, from 102, to getting. Broke off to being internal, to Dart and getting off the JavaScript, builds and we've seen over time how, it's increased, Co, sizes, shrunk speed. Of download has gotten better and better and we've, seen the improvements, that we've built at our portal so, we are very happy at this point the decision we've made because it's made us very, quick, and up to speed on where the browser is going and also being. Able to leverage using. Dart angular dart to meeting our requirements. So. Andrew, is a developer, that's on my team on the portal infrastructure, side and he, came to us from a JavaScript, background in a dotnet background. And he. Was able to pick it up and come up to speed very quick, he discovered, that he's not battling, things that were in JavaScript, before but dart just coding it worked, the way it was supposed to work out of the box so. This, is just proof, that he. Came in he got up to speed he was delivering, components, that were production ready in about two to three weeks and our, teams were starting to use them so, it's a very nice language they can come up to speed very quickly, and. Then Keith is on the other side and he's been at Trustwave for years, all the way back to our legacy portal and he comes from a Java background and, on, the Java side is the same type of experience, it didn't matter what type the software language background, you were coming from picking. Up dart was intuitive and quick to pick up and you can deliver quickly. So. Now that we've, decided on dart. And angular dart we. Also during this UI initiative, that we were going off we wanted, to rethink, our portal, design our. Legacy, portal was built off with the concept, of each. Application, was, its own module that would load in but, we wanted to break this down, to our customer, not by what products they were provisioned, to but, more intuitive. Looking, areas, within our portal in that top blue area that, they are accustomed, to across their products so. This is just a small subset at the top of the blue area of like home assets, buying support, that. You can find at the top of our navigation, below. There depending on what section you pick, you, would get a set of menus this, is where a user is provision to certain, based, off the products they have what menus they will get so, our portal kind of grows for them as they log in so they could just maybe have home in assets or assets and findings and the menus that are underneath there from. There of the user clicks on one of those menus, this. Is where the team development, comes in that the product team is built one of these elements and it loads within the stage from that point so, this is the vision, that, we had going, forward when we wanted to build out this new UI and the approach that we wanted to take so. How did we use dart. And angular dart to achieve, this vision that we had. Well. First thing it came down to was building, a base component. We, needed a contract, with our development teams that we knew when this component, loaded in we, knew how to interact, with it, also. This base component, needed to make sure that it took care, of some of the base, lifecycle. Events and we can hook into them for, loading things for the user such as locale, information. Because we're a global company or, security, information or, security, or properties.
Information. We, didn't want to have each one of these development, teams doing this on their own they, should just concentrate on the product that they they, build out and this has always been our vision of how we build a portal infrastructure, so. Within this class that we built out this base portal, component, you, have it, implements, base, angular, lifecycle, events, with. True inheritance that comes with since the angular 4 came out with components now. Teams don't have to worry about implementing, these lifecycle, events they. Can still get hooks in them but we, wanted to be able to have this in the base component so we can tie into them so, you look on the ng on an it override, that we have this, is where we load in locale. Information, that's been specified by the implementing, component, security. Information and properties, information, and then, based off this component, I'll show on the next slide they have hooks into when this information, is loaded so they can react to it within their implemented, view also. Within here we have a component. Service, taking advantage of dependency, injection, this. Allows us on this component service it binds multiple. Services into it so then its dependency, injected into our base component, for things such as routing, and other, services, we need to call an our base component, so. Now we have this base component, ready to go the teams can implement and go from there and they can rely on knowing, that they have this base functionality, they can take advantage of so how does a team implement. This so. Now the developers, teams basically. Extend. Off of the. Base portal component, this is an example from the asset search component that, we have within our portal so this is a menu of a component that would line up under the area of assets. And. Within here we still do the dependency, injection of the component service so it can get to the base component. So it has a handle on it but, then you look at three overrides, that were within, this class of the implementation, you, have on locale loaded on security. Loaded and on properties, loaded so, the one we're going to look out specifically, is the implementation, under security, loaded. So this function, is going to be called from, the base component once, the security information is loaded for this component so, this team that's developing, this view can, rely on at that point hey I need, to check a permission, on a resource, and whether they have the execute, permission for the search button it, is permitted method comes off the base component as well so they don't have to be looking through that cache to find that out so, now the team can rely, on hey let me do that check for that resource. Tie. It to a boolean that I can tie it to my backing HTML template, with binding, and that buttons, gonna be enabled or not now. We have this base component, we know how to communicate with and we know how to it's, got a contract, within our portal framework so, now our teams can build independently, and know, when we go to the main deployment, and goes out that components, gonna work correctly. But. They built it out now how how do we go about loading, it into our portal and also, initially, I was talking about well we want to make sure that we keep the initial download, time. For our portal very quick and we want to lazy load things in well. This is where we take advantage of routing and deferred loading within our portal so. At the top URL, there you see this, goes into our production environment and you have the bolded assets, first that ties to the top menu area so that means when that route comes in whether, they clicked on it or whether there was a bookmark, it's gonna highlight, the, blue assets, area at the top that has been selected from.
There We need to know well what's the menu underneath, that area that we want to go to well. It's the search area for the asset search that's where the bolded area on the on the the, end of the URL is so, no, matter how they got to this destination it routed to this area within the portal now. This search is, tied. To a specific element name, that's been developed, by one of our teams and that's, how we determine at that point Wow ok we have this element we, need to put this on the stage but we want to make sure when we load that in that. It's just not already in the in the JavaScript. File that's initially downloaded. We want to make sure we load that in at the point that the customer. Or user wants, to access it so that's the point we want to defer load it into the element stage. So. How do we do that so. This comes with deferred loading so. The first thing you're going to see it is you're going to import, in your. File that the asset search component is within, but. I'm not importing. The asset search file I'm, importing. The template, file, that's. Not there until it goes through the compiled time step so this isn't here during development time but is there at run time so. We want to make sure that the first comment, at the top of this file this, is just basically telling the IDE and the dart analyzer hey, ignore. This I know it's not here at this point so don't give me a nice red squiggly, underneath it ignoring. It's gonna be there at runtime. But. Underneath there you don't just import this as a regular library we, wanted to furloughed, this in so we want to make sure that we're telling the compiler that hey don't, include this in the main JavaScript, file create. A part file that can be loaded in during runtime when it needs to be accessed so, that's where the deferred as and, we name it off as asset search view. So. Now we have it deferred, but. Now we need to make sure how do we load this in using angular and make sure it shows up in the UI when we go through well. The next point that we have in here is we have an app view child annotation. That's basically saying I'm looking for a marker in the back HTML, to a named. Element called stage and I want to bring in that in as a view container. Reference, and I'll call that stage so, now I just have a hook on an element in my back in HTML, and this is where I'm gonna load my component, next to at this point, next. I got to make sure that I have the component, loader from angular dependency. Injected, with into my stage component, here so. I make sure that there's dependency, injection bring it into loader so now I have a handle on the loader so. Now just real quick I should have said this in the beginning this is really shrunk down just to show the relevant pieces there's other things that go on but I just shrunk this down to what we need to show to to, to. Have an example the deferred loading so, the next step is there's this load view component with the element, so when the menus clicked on I know what the element name is and usually there's a bigger you know case, here switch case to determine which deferred library and I'll load in but, I already know here so I shrunk this down to, loading.
Into Asset search view so I need to do an async await at this point and a wait for loading in that library after, I have a handle on that library I need, to emit the reflector, which is going to tell angular. To. Make sure that the component submitted so that I can get a handle, on the component, factory at the. End of this statement I get a reference on NASA's search view with asset search component, with the bolded NG factory at the end I wanted to highlight that because that's another area, that's not there during development. Time but will be there during runtime so. Now you have the handle and a component factory it's been deferred loaded I have to handle it on it within my backing to our class but. Now I need to call the loader and make sure it's instantiated, within the UI so, now I load next to the stage component, this component factory. Boom, there you got it it's loaded, into UI for the customer, so as they've gone through our portal, it wasn't. Loaded until they went to that area so, that means the customer can bid and provision, for many many different views within our portal but, we're not going to download that into the browser and during, the time I've have that memory consumption until the user wants, to go to that area. So. What does this look like after it's gone through the dart2js compiler. Well. On the left side you see without deferred, loading you, have one monolithic huge. Javascript, file that, means that every component they've been developed, by our teams is in, one file and. So at the beginning of the portal loading for a customer to be one down load time there's a little little. Spinner that shows and they're waiting and they're like hey can this portal load no we want to keep it small so on the right side you see it's broken up into many many, many different part files those, are different part files from the deferred loading as we import these in so. This means those aren't going to be loaded into the browser until, the user navigates to them. So. Tom Smith has been with us since our legacy, time and is he's just stating here he's how, great it's been to leverage the portal components, that we developed within our portal taking advantage of angular and it's it's made it easier for our teams to work. Independently and come up to speed quickly and, know that things are gonna work within our portal framework. So. Now that the teams have this base component, what, about the. UI components. That they need to use I mean they have the base component but they still need to build out the HTML that's gonna render to our users, well. We. Have taken advantage of angular components, and built. Out our own core, package, of it's called UI annular, that houses all of our components we've, extended, off of angular components, because it's very easy. Take advantage of different utilities, they have and also extending, off adjust based components, to adding more functionality, that we needed proprietary. To Trustwave, also. We have our own unique style, at Trustwave, and angular components, is built off the wonderful, material design but we have our own unique style at Trustwave so, it's been really easy for us to put our own styles, on these components as well so. If you look on the right side this is just our demo. Project, that we have internal, at our company that's, just running through all the, components, that we've leveraged. And take advantage of and this, is adding our own styles, on top of angular components, in some of our own custom building components, as well. But. What a what if in your company there's already a JavaScript, library you have because you're converting over from, JavaScript. To Dart or there's a library out there that you want to take advantage of that's. Not already been ported over to dart or angular Dart, well don't worry you, can still take advantage of, JavaScript, Interop so, you can use JavaScript Interop. Build your own angular, dart wrapper around it using that facade that you built out and take, advantage of that javascript, library so, we've done this for two of our components, for charting and for our rich text editor and this. Is our portal, live in production, on the right, side they're an animated gif that we built and that's showing our main dashboard use. Taking advantage of high charts, through. JavaScript, interrupt. But.
Also We're looking for that again we're saying we want the tools IDE integration. Well, you. Get now with the dart plugin with an IntelliJ, and we, take advantage of intelligence, we're also a java company. As well for our back-end services, so now our developers, can work within one ie within, IntelliJ. On both, dart and on. Our Java side we get the code analysis, the code completion the refactoring I wasn't. Able to build a real complicated, gif on this side because recording, myself coding, just didn't work very well but, this is the dart reformatting. That takes place the dart formatter, and I. Have, to say I love the dart formatter coming from the Java side and all the battles and arguments, over formatting. And going, back and forth it's really nice that dart comes out with just one formatter, and you can tell the teams there's. Formatting, already, within stick. With it we're not going to come up with. Now. The teams have built out all these different packages, and we talked about earlier it's like well we need some sort of dependency management, to bring this all together well. This really sold us using dart as well we, have our own internal pub server that, we publish, all the core packages, up to that the teams can take advantage, of and they also publish, their views. Up so we can bring it into the main build that want to talk about later on so, we've fallen in love with the semantic versioning and that takes place that Kevin. Was talking about earlier we. Use the current syntax, on it and we avoid a lot of breaking changes and conflicts, that come in so, on this slide here is that it's just an example pub spec yeah Mel that shows the URLs of our internal pub server that would take an advantage of to bring in some, of our core packages, to one of our component, libraries that we build up. Now. We need to bring it all together okay, the teams have worked on their views and we need to bring it into one, main build so, on the right side is, our. Main, pub. Spec gamal that's in our main build I think. It's about 35, plus packages, that we pull in from our main internal, pub server into one build so, our teams can work independently, they, can publish off their packages, and no one we build this off we pulled in with the semantic versity and make sure we pull in the, proper version from our teams this, avoids breaking changes so because we make sure we handle the versioning correctly, and if there is a breaking, change that comes from one of our core components, we make sure we notify our teams at that point. But. We also need to make sure we have automated, builds, we, had this in the past and we wanted to make sure we could do this with dart as well so, we use Jenkins, as our, continuous, integration build, server and. We have built off a process, within there that, runs two, to three times a day on the, main portal framework build so our teams can make sure they deploy their packages, it'll be brought in and go off to our test networks so.
On The right shows our main build and this, is going through at first a pub upgrade to bring in the new packages, does, a pub build after that, point it goes ahead and tours up the entire build sends, it off to our internal nexus server and then, our devops teams pick, it off from there and, deploy it off into our test networks so, really our hands, off at this point so, our teams can work independent, of the portal framework and they can rely on knowing, that this is going to go out into the test networks on top, of that we, have we added some traceability, into this automated build in the, backing HTML, we put in when the deploy date was what the version went out so. That our teams our development teams can say hey did I make it into that deploy we, also put, out and only our test network deploys the pub spec lock file so they can look at that out there and say oh man I didn't. Make it I missed it this window but I know it's gonna be in the next window my newest version. So. A trust wave we are extremely. Happy with our implementation, of angular Dart in Dart we've been internal, at the company for about, a year and a half internally. Using, our portal we, went beta at the end of last year and I'm happy to announce this quarter one we have gone GA in front of our customers, it's. Worked wonderful, for us. And we're looking forward to coming up soon with. Dart, too and also. Angular 5 the, dart dev compiler we want to start using to get out of using dartium, and going straight into chrome and with the dart dev compiler and this. Quarter we're starting to develop our mobile solution, within flutter so we're going to take advantage of our middle layer our, business layer and we have a core packages, to take advantage of those core services on the backend and just, focus on the UI for our mobile solution. Thank. You.
911Blackhorn2018-01-29 03:51
I'd also like to see James Damore.
Ayush Gupta2018-01-30 19:59
What is the difference between Angular and AngularDart, excluding the TypeScript/Dart difference?
Julio Vieira2018-01-30 23:06
Congratulations Eric! Very nice presentation and work!
Kevin Moore2018-01-31 11:35
They started from the same source base, but the code has diverged quite a bit in the last 2 years. We've had a big focus on move towards features that improve size and speed (and deprecating/removing features that hurt size/speed).
Yup. They look a lot alike now. They will remain so for a while, I'm pretty sure. But the feature sets are diverging.
I see, so going by what you just said, this means that the feature sets of both versions(forks?) of angular are different too, to an extent?
The Great Debate - Episode 6: Should Phishing Protection be the #1 Security Priority? 2021-01-16 03:19
Inside Oracle's Corporate Strategy: A Conversation with Doug Kehring 2021-01-12 06:10
Helping People Who Have Diabetes Improve Health and Reduce Complications 2021-01-11 05:38


text:
Matrix Diagram
===
[![NPM version][npm-image]][npm-url] [![Bower version][bower-image]][bower-url] [![Build Status][travis-image]][travis-url] [![Coverage Status][coveralls-image]][coveralls-url] [![Dependencies][dependencies-image]][dependencies-url]

> A [Polymer](https://www.polymer-project.org/) web component for displaying matrix diagrams.

[![Matrix Diagram][screenshot-image]][screenshot-url]

---
1. 	[Installation](#install)
1. 	[Usage](#usage)
	-	[Attributes](#attributes)
		* 	[data](#attr-data)
		*	[rowOrder](#attr-roworder)
		*	[colOrder](#attr-colorder)
		*	[config](#attr-config)
		*	[width](#attr-width)
		*	[height](#attr-height)
		*	[paddingLeft](#attr-paddingleft)
		*	[paddingRight](#attr-paddingright)
		*	[paddingTop](#attr-paddingtop)
		*	[paddingBottom](#attr-paddingbottom)
		*	[xLabel](#attr-xlabel)
		*	[yLabel](#attr-ylabel)
		*	[zValue](#attr-zvalue)
		*	[zMin](#attr-zmin)
		*	[zMax](#attr-zmax)
		*	[colors](#attr-colors)
		*	[cValue](#attr-cvalue)
		*	[colorOrder](#attr-colororder)
		*	[duration](#attr-duration)
		*	[autoUpdate](#attr-autoupdate)
		*	[autoResize](#attr-autoresize)
		*	[isBrushable](#attr-isbrushable)
		*	[isSortableRows](#attr-issortablerows)
		*	[isSortableCols](#attr-issortablecols)
		*	[events](#attr-events)
	-	[Methods](#methods)
		*	[clear()](#method-clear)
		*	[toJSON()](#method-tojson)
	-	[Events](#events)
		*	[err](#evt-err)
		*	[change](#evt-change)
		*	[data](#evt-data)
		*	[roworder](#evt-roworder)
		*	[colorder](#evt-colorder)
		*	[width](#evt-width)
		*	[height](#evt-height)
		*	[zmin](#evt-zmin)
		* 	[zmax](#evt-zmax)
		*	[colors](#evt-colors)
		*	[colororder](#evt-colororder)
		*	[resized](#evt-resized)
		*	[clicked](#evt-clicked)
		*	[clicked.row](#evt-clicked-row)
		*	[clicked.col](#evt-clicked-col)
		*	[clicked.cell](#evt-clicked-cell)
		*	[hover](#evt-hover)
		*	[hover.row](#evt-hover-row)
		*	[hover.col](#evt-hover-col)
		*	[hover.cell](#evt-hover-cell)
		*	[hoverend](#evt-hoverend)
		*	[hoverend.row](#evt-hoverend-row)
		*	[hoverend.col](#evt-hoverend-col)
		*	[hoverend.cell](#evt-hoverend-cell)
		*	[sortend](#evt-sortend)
		*	[sortend.row](#evt-sortend-row)
		*	[sortend.col](#evt-sortend-col)
		*	[transitionended](#evt-transition-ended)
		*	[brushend](#evt-brushend)
1. 	[Examples](#examples)
1. 	[Development](#development)
1. 	[Build](#build)
1. 	[Tests](#tests)
	-	[Unit](#unit)
	-	[Coverage](#test-coverage)
1. 	[License](#license)

---

## Install

``` bash
$ bower install figure-io/polymer-matrix-diagram
```

## Usage

To use the component,

``` html
<!DOCTYPE html>
<html>
	<head>
		<script src="path/to/webcomponentsjs/webcomponents.min.js"></script>
		<link rel="import" href="path/to/polymer-matrix-diagram.html">
	</head>
	<body>
		<polymer-matrix-diagram id="chart"></polymer-matrix-diagram>
	</body>
</html>
```

and

``` javascript
var el = document.querySelector( '#chart' );
```

The component has the following public attributes and methods...

### Attributes

#### el.data

Chart data.

TODO: data frame.

The expected format is an `array` of `arrays`.

``` javascript
el.data = [
	[{'a':1},{'a':0},...],
	[{'a':0},{'a':0},...],
	[{'a':1},{'a':0},...],
	[{'a':1},{'a':1},...]
];
```

Each nested `array` is visually encoded as a row, and each nested `array` element is visually encoded as a row cell. The nested `array` elements may be of any type.

#### el.rowOrder

Defines the row order. The row order `array` should be a permutation of the row name __indices__.

``` javascript
el.rowOrder = [ 3, 1, 0, 2 ];
```

Once the rows are reordered, the element emits a `transitionEnd` event.

#### el.colOrder

Defines the column order. The column order `array` should be a permutation of the column name __indices__.

``` javascript
el.colOrder = [ 0, 1, 4, 3, 2,...];
```

Once the columns are reordered, the element emits a `transitionEnd` event.

#### el.config

Configuration `object` containing parameters corresponding to known attributes, as defined below.

``` javascript
el.config = {};
```

TODO: implement and define. Vega reference. Specification.

#### el.width

Chart canvas width. If not explicitly set, defaults to the width of the parent node.

``` javascript
el.width = 600; // px
```

#### el.height

Chart canvas height. If not explicitly set, defaults to the height of the parent node.

``` javascript
el.height = 600; // px
```

#### el.paddingLeft

Chart canvas left padding; i.e., space between the left canvas edge and the left graph edge. Typically needed to create room for a left oriented y-axis. If set to `null`, the padding is automatically calculated based on the computed text length of row names. Default is `null`.

``` javascript
el.paddingLeft = 120; // px
```

#### el.paddingRight

Chart canvas right padding; i.e., space between the right canvas edge and the right graph edge. Typically needed to create room for a right oriented y-axis. If set to `null`, the padding is internally calculated. Default is `null`.

``` javascript
el.paddingRight = 90; // px
```

#### el.paddingTop

Chart canvas top padding; i.e., space between the top canvas edge and the top graph edge. Typically needed to create room for a chart title or top positioned legend. If set to `null`, the padding is automatically calculated based on the computed text length of column names and the chart title height. Default is `null`.

``` javascript
el.paddingTop = 200; // px
```

#### el.paddingBottom

Chart canvas bottom padding; i.e., space between the bottom canvas edge and the bottom graph edge. Typically needed to create room for a bottom oriented x-axis or bottom positioned legend. If set to `null`, the padding is internally calculated. Default is `null`.

``` javascript
el.paddingBottom = 100; // px
```

#### el.xLabel

Column label. Default is an empty `string`.

``` javascript
el.xLabel = 'beep';
```

#### el.yLabel

Row label. Default is an empty `string`.

``` javascript
el.yLabel = 'boop';
```

#### el.zValue

Defines the z-value accessor. z-values determine the `fill-opacity` for a cell. If set to a constant on the interval `[0,1]`, the `fill-opacity` is the same for all cells. If set to a `function`, each z-value is mapped to a value on the interval `[0,1]`. The default `fill-opacity` for all cells is `1`.

``` javascript
// Default:
el.zValue = 1;

// Example of an object based accessor:
el.zValue = function zValue( d, i ) {
	return d.z;
};
```

#### el.zMin

Defines the minimum value of the z-domain. Default is `null`.

``` javascript
el.zMin = -10;
```

If set to `null`, the `zMin` is dynamically calculated from the data. This attribute is only relevant when the z-value accessor is a `function`.

#### el.zMax

Defines the maximum value of the z-domain. Default is `null`.

``` javascript
el.zMax = 10;
```

If set to `null`, the `zMax` is dynamically calculated from the data. This attribute is only relevant when the z-value accessor is a `function`.

#### el.colors

Defines the [range](https://github.com/mbostock/d3/wiki/Ordinal-Scales#ordinal_range) of possible color values. If set to an `array`, the range should be an `array` of color `strings`. The default range is `[ '#474747' ]`.

``` javascript
el.colors = [ '#474747', '#ccc', '#fff' ];
```

For convenience, the range can also be set to one of the following strings: `category10`, `category20`, `category20b`, and `category20c`. [`category10`](https://github.com/mbostock/d3/wiki/Ordinal-Scales#category10) corresponds to a predefined set of 10 colors, and [`category20`](https://github.com/mbostock/d3/wiki/Ordinal-Scales#category20), [`category20b`](https://github.com/mbostock/d3/wiki/Ordinal-Scales#category20b), and [`category20c`](https://github.com/mbostock/d3/wiki/Ordinal-Scales#category20c) correspond to three different predefined sets of 20 colors.

``` javascript
el.colors = 'category20b';
```

#### el.cValue

Defines the color-value accessor. color-values are mapped to cell `fill` colors.

``` javascript
// Default:
el.cValue = function( d, i ) {
	return 0;
};

// Example of an object based accessor:
el.cValue = function cValue( d, i ) {
	return d.group;
};
```

#### el.colorOrder

Defines the [domain](https://github.com/mbostock/d3/wiki/Ordinal-Scales#ordinal_domain) for color values. If set to `null`, the domain is computed from the data values and sorted in ([non-stable](http://en.wikipedia.org/wiki/Sorting_algorithm#Stability)) ascending order.

``` javascript
el.colorOrder = [ 'beep', 'boop', 'bup' ];
```

Rearranging the order `array` reorders how data values are mapped to colors, thus effectively rearranging the color order. Updating the color order could also be accomplished by rearranging the [colors](#attr-colors) `array`, but using the `colorOrder` attribute provides deterministic color assignment.

Note: the `colorOrder` differs from `rowOrder` and `colOrder` in that the ordered `array` should contain the raw data which is mapped to color values, rather than indices.

#### el.duration

Transition duration when reordering rows or columns. Default is `2500` milliseconds.

``` javascript
el.duration = 1000; // ms
```

__NOTE__: only set this attribute should your situation absolutely warrant it. Setting the transition duration to a value less than or equal to `0` inhibits the user from understanding how a reordering has affected the diagram. And too long a duration will test a user's patience. `2500` milliseconds should be a decent setting for __most__ use cases. The only reason the attribute is exposed is for purposes of fine tuning, but only should the need arise. Otherwise, leave the value as is.

#### el.autoUpdate

Specifies whether the element should automatically update whenever an attribute changes. Default is `true`.

``` javascript
el.autoUpdate = false;
```

#### el.autoResize

Specifies whether the element should automatically resize when the window resizes. Default is `true`.

``` javascript
el.autoResize = false;
```

#### el.isBrushable

Specifies whether the element should be brushable. When enabled, a user may select matrix elements via a brush overlay. After selection, a `brushend` event is emitted, which contains the row and column indices of the selected elements. Default is `false`.

``` javascript
el.isBrushable = true;
```

__NOTE:__ when brushing is enabled, cell `click` events are __not__ triggered and cell `hover` events are unreliable.

#### el.isSortableRows

Specifies whether rows can be manually sorted. When enabled, a user may manually drag rows to change row order. Default is `false`.

``` javascript
el.isSortableRows = true;
```

#### el.isSortableCols

Specifies whether columns can be manually sorted. When enabled, a user may manually drag columns to change column order. Default is `false`.

``` javascript
el.isSortableCols = true;
```

#### el.events

List of [event](#events) names. The `events` attribute is intended to be __read-only__. One possible use case for the `events` attribute is for programmatically determining possible events to which you can subscribe; e.g., when logging.

``` javascript
var evts = el.events;
```

### Methods

#### el.clear()

Clears the chart.

``` javascript
el.clear();
```

#### el.toJSON()

Returns a matrix diagram configuration object in accordance with the [matrix diagram specification](https://github.com/figure-io/matrix-diagram-spec).

``` javascript
var config = el.toJSON();
// returns {...}
```

If the matrix diagram does not have data, the method returns a template configuration object in which __no__ attributes have been set.

### Events

The component emits events during both chart configuration and interaction. The following events are emitted...

#### 'err'

The element emits an `err` event whenever an error occurs; e.g., improper setting of attributes.

``` javascript
el.addEventListener( 'err', function onError( err ) {
	console.log( err );
});
```

__NOTE__: the event name will change to `error` once issue [#138](https://github.com/webcomponents/webcomponentsjs/issues/138) is resolved. The preferred name is `error`.

#### 'change'

The element emits a `change` event whenever an attribute changes.

``` javascript
el.addEventListener( 'change', function onChange( evt ) {
	console.log( evt.attr, evt.prev, evt.curr, evt.data );
});
```

#### 'data'

The element emits a `data` event when the `data` attribute changes.

``` javascript
el.addEventListener( 'data', function onEvent( evt ) {
	console.log( this.data );
});
```

#### 'roworder'

The element emits a `roworder` event when the `rowOrder` attribute changes.

``` javascript
el.addEventListener( 'roworder', function onEvent( evt ) {
	console.log( this.rowOrder );
});
```

#### 'colorder'

The element emits a `colorder` event when the `colOrder` attribute changes.

``` javascript
el.addEventListener( 'colorder', function onEvent( evt ) {
	console.log( this.colOrder );
});
```

#### 'width'

The element emits a `width` event when the `width` attribute changes.

``` javascript
el.addEventListener( 'width', function onEvent( evt ) {
	console.log( this.width );
});
```

#### 'height'

The element emits a `height` event when the `height` attribute changes.

``` javascript
el.addEventListener( 'height', function onEvent( evt ) {
	console.log( this.height );
});
```

#### 'zmin'

The element emits a `zmin` event when the `zMin` attribute changes.

``` javascript
el.addEventListener( 'zmin', function onEvent( evt ) {
	console.log( this.zMin );
});
```

#### 'zmax'

The element emits a `zmax` event when the `zMax` attribute changes.

``` javascript
el.addEventListener( 'zmax', function onEvent( evt ) {
	console.log( this.zMax );
});
```

#### 'colors'

The element emits a `colors` event when the `colors` attribute changes.

``` javascript
el.addEventListener( 'colors', function onEvent( evt ) {
	console.log( this.colors );
});
```

#### 'colororder'

The element emits a `colororder` event when the `colorOrder` attribute changes.

``` javascript
el.addEventListener( 'colororder', function onEvent( evt ) {
	console.log( this.colorOrder );
});
```

#### 'resized'

The element emits a `resized` event when the element's resize listener is triggered.

``` javascript
el.addEventListener( 'resized', function onResize( evt ) {
	console.log( evt.detail );
});
```

#### 'clicked'

The element emits a `clicked` event when a chart element having a click handler is clicked.

``` javascript
el.addEventListener( 'clicked', function onClick( evt ) {
	console.log( evt );
});
```

#### 'clicked.row'

The element emits a `clicked.row` event when a row is clicked.

``` javascript
el.addEventListener( 'clicked.row', function onClick( evt ) {
	console.log( evt.detail.datum, evt.detail.index );
});
```

#### 'clicked.col'

The element emits a `clicked.col` event when a column is clicked.

``` javascript
el.addEventListener( 'clicked.col', function onClick( evt ) {
	console.log( evt.detail.datum, evt.detail.index );
});
```

#### 'clicked.cell'

The element emits a `clicked.cell` event when a cell is clicked.

``` javascript
el.addEventListener( 'clicked.cell', function onClick( evt ) {
	console.log( evt.detail.datum, evt.detail.row, evt.detail.col );
});
```

#### 'hover'

The element emits a `hover` event when an element having a `mouseover` handler has a `mouseover` event.

``` javascript
el.addEventListener( 'hover', function onClick( evt ) {
	console.log( evt.detail.datum, evt.detail.index );
});
```

#### 'hover.row'

The element emits a `hover.row` event when a row has a `mouseover` event.

``` javascript
el.addEventListener( 'hover.row', function onClick( evt ) {
	console.log( evt.detail.datum, evt.detail.index );
});
```

#### 'hover.col'

The element emits a `hover.col` event when a column has a `mouseover` event.

``` javascript
el.addEventListener( 'hover.col', function onClick( evt ) {
	console.log( evt.detail.datum, evt.detail.index );
});
```

#### 'hover.cell'

The element emits a `hover.cell` event when a cell has a `mouseover` event.

``` javascript
el.addEventListener( 'hover.cell', function onClick( evt ) {
	console.log( evt.detail.datum, evt.detail.row, evt.detail.col );
});
```

#### 'hoverend'

The element emits a `hoverend` event when an element having a `mouseout` handler has a `mouseout` event.

``` javascript
el.addEventListener( 'hoverend', function onClick( evt ) {
	console.log( evt.detail.datum, evt.detail.index );
});
```

#### 'hoverend.row'

The element emits a `hoverend.row` event when a row has a `mouseout` event.

``` javascript
el.addEventListener( 'hoverend.row', function onClick( evt ) {
	console.log( evt.detail.datum, evt.detail.index );
});
```

#### 'hoverend.col'

The element emits a `hoverend.col` event when a column has a `mouseout` event.

``` javascript
el.addEventListener( 'hoverend.col', function onClick( evt ) {
	console.log( evt.detail.datum, evt.detail.index );
});
```

#### 'hoverend.cell'

The element emits a `hoverend.cell` event when a cell has a `mouseout` event.

``` javascript
el.addEventListener( 'hoverend.cell', function onClick( evt ) {
	console.log( evt.detail.datum, evt.detail.row, evt.detail.col );
});
```

#### 'sortend'

The element emits a `sortend` event when a user finishes sorting a sortable element; e.g., a row or column.

``` javascript
el.addEventListener( 'sortend', function onEnd( evt ) {
	console.log( evt.detail.datum, evt.detail.row, evt.detail.col );
});
```

#### 'sortend.row'

The element emits a `sortend.row` event when a user finishes sorting a row element.

``` javascript
el.addEventListener( 'sortend.row', function onEnd( evt ) {
	console.log( evt.detail.datum, evt.detail.row );
});
```

#### 'sortend.col'

The element emits a `sortend.col` event when a user finishes sorting a column element.

``` javascript
el.addEventListener( 'sortend.col', function onEnd( evt ) {
	console.log( evt.detail.datum, evt.detail.col );
});
```

#### 'transitionended'

The element emits a `transitionended` event when a transition ends; e.g., as occurs after setting the row or column order.

``` javascript
el.addEventListener( 'transitionended', function onEnd() {
	console.log( '...transition ended...' );
});
```

#### 'brushend'

The element emits a `brushend` event when a brush interaction ends.

``` javascript
el.addEventListener( 'brushend', function onEnd( evt ) {
	var detail = evt.detail;
	console.log( detail.row1, detail.row2, detail.col1, detail.col2 );
});
```

The event `detail` contains the cell indices defining the brush extent; i.e., those cells which are selected.

## Examples

To run the example code, navigate to the parent directory and start a [simple python server](https://docs.python.org/2/library/simplehttpserver.html),

``` bash
$ cd ..
$ python -m SimpleHTTPServer 9090
```

Once the server is running, open the following URL in your browser

```
http://127.0.0.1:9090/polymer-matrix-diagram/examples
```

## Development

To install development dependencies,

``` bash
$ make install
```

which installs [node modules](https://www.npmjs.org/) and [bower components](http://bower.io/).

> WARNING: bower components are installed in the parent directory, __not__ the component directory.

By installing components in the parent directory, we mimic a production environment, in which bower components are siblings (needed for correct relative paths). Beware, however, that this may result in conflicts with existing components. Or worse, where existing sibling components are being developed (git repositories), completely overwriting siblings.

To avoid such issues, you may want to clone the repository into its own isolated directory. The downside of this approach is increased disk usage due to (possibly) duplicated dependencies.

## Build

The `src` directory contains the component source files. Source files must be [browserified](https://github.com/substack/node-browserify) and then [vulcanized](https://github.com/polymer/vulcanize) before creating a distributable component. To run the build,

``` bash
$ make build
```

which generates a `build` directory containing [browserified](https://github.com/substack/node-browserify) scripts and a [vulcanized](https://github.com/polymer/vulcanize) distributable in the top-level directory.

## Tests

### Unit

Unit tests are run via [web component tester](https://github.com/Polymer/web-component-tester), which in turn uses the [Mocha](http://mochajs.org/) test framework with [Chai](http://chaijs.com) assertions. To run the tests, execute the following command in the top-level application directory:

``` bash
$ make test
```

All new feature development should have corresponding unit tests to validate correct functionality.

### Test Coverage

This repository uses [Istanbul](https://github.com/gotwarlost/istanbul) to instrument code coverage. To generate a test coverage report, execute the following command in the top-level application directory:

``` bash
$ make test-cov
```

Istanbul creates a `./reports/coverage` directory. To access an HTML version of the report,

``` bash
$ make view-cov
```

---
## License

[MIT license](http://opensource.org/licenses/MIT).

## Copyright

Copyright © 2015. Athan Reines.

[screenshot-image]: https://github.com/figure-io/polymer-matrix-diagram/blob/master/examples/img/matrix-diagram.png
[screenshot-url]: https://github.com/figure-io/polymer-matrix-diagram

[npm-image]: http://img.shields.io/npm/v/.svg
[npm-url]: https://npmjs.org/package/

[bower-image]: https://img.shields.io/bower/v/polymer-matrix-diagram.svg
[bower-url]: https://github.com/figure-io/polymer-matrix-diagram

[travis-image]: http://img.shields.io/travis/figure-io/polymer-matrix-diagram/master.svg
[travis-url]: https://travis-ci.org/figure-io/polymer-matrix-diagram

[coveralls-image]: https://img.shields.io/coveralls/figure-io/polymer-matrix-diagram/master.svg
[coveralls-url]: https://coveralls.io/r/figure-io/polymer-matrix-diagram?branch=master

[dependencies-image]: http://img.shields.io/david/figure-io/polymer-matrix-diagram.svg
[dependencies-url]: https://david-dm.org/figure-io/polymer-matrix-diagram

[dev-dependencies-image]: http://img.shields.io/david/dev/figure-io/polymer-matrix-diagram.svg
[dev-dependencies-url]: https://david-dm.org/dev/figure-io/polymer-matrix-diagram

[github-issues-image]: http://img.shields.io/github/issues/figure-io/polymer-matrix-diagram.svg
[github-issues-url]: https://github.com/figure-io/polymer-matrix-diagram/issues

redpajama_set_name: RedPajamaGithub


CONNELLY At Quinte Health Care Prince Edward Memorial Hospital, on Tuesday, July 17th, 2007, ROLAND E. CONNELLY of Washburn Street Picton at the age of 87. Beloved husband of Ruth. Loved father of Mary Lou and her husband Gar Collins of Gambo, Newfoundland and Judy and her husband Tim Brown of Toronto. Loved grandfather of Cathy, Anne, Shane and Samantha. Loved great grandfather of Victoria, Berend, Brandon, Daniel, Julia, Devon and Alexander. Dear brother-in-law of Donald Camp, David Camp, Kay Camp and the late Victor Camp. Special friend of Lynda Taylor. MR. CONNELLY IS RESTING AT, THE WHATTAM FUNERAL HOME, 33 MAIN STREET, WEST, PICTON, The Funeral Service will be held in the Chapel, on Wednesday, July 18th at 2:00 P.M. Reverend Hal Wilson Officiating. Interment Cherry Valley Cemetery. If desired, donations to the Kidney Foundation would be appreciated by the family. (CHEQUES ONLY PLEASE) FRIENDS MAY CALL ON WEDNESDAY FROM 1:00 P.M. UNTIL THE TIME OF SERVICE.