CO
2
welding with flexible laser optic technology presents a viable alternative to resistance spot welding
Stefan Heinemann
Visotek Inc. (Plymouth, MI), Fraunhofer USA Center for Laser Technology (Plymouth, MI), and Bender Shipbuilding & Repair Co. (Mobile, AL) teamed up to develop the first autogenous laser welding application in a U.S. shipyard in a program sponsored by the Office of Naval Research through its Small Business Innovation Research program. The goal was to develop and qualify laser welding as a cost-effective method for producing tab-and-slot sandwich panels. It was also required to use Bender’s existing large laser cutting gantry, and the time for converting from cutting to welding should be less than 30 minutes.
Tab-and-slot sandwich panels use the laser to cut the stiffeners with twist tabs and to cut the mating slots in the face sheets. In a second operation the stiffeners are assembled with the faceplates and the twist tabs are turned to hold the assembly together. In another operation laser welding is performed through the faceplates into the stiffener. This concept allows fixtureless manufacturing of large sandwich panels, representing dramatic cost savings. It also enables sandwich panels where the thickness and location of the stiffener can be designed for optimum load bearing and load distribution. A well-known analogy in automotive industry is (non-linear) tailored blanks. Three-dimensional tailored blanks are also possible through cutting curved stiffeners and rolling the faceplate to the form of the stiffeners. The process, weld cross section, and product are shown in Figure 1.
FIGURE 1. Laser welding (upper left), a typical cross section (upper right), and the final sandwich panel (bottom).
The laser beam is scanned across the thickness of the stiffener to achieve full fusion at the interface between the stiffener and the faceplate. The resulting weld nugget shows no porosity and a convex shape in the edges, which indicates high strength and high fatigue life. Single path laser welding was also investigated, but much higher porosity and incomplete fusion at the interface were found. To achieve full fusion the individual single path weld lines had to overlap significantly resulting in increased weld time compared to the weave weld.
In the spring of this year, a Flexible Laser Optic (FLO) was installed on Bender’s Tanaka 6kW CO
2
laser cutter. Cutting accuracies of 0.001 in. are achieved over the entire 20-ft. width and 160-ft. length. Changing to this optic allowed Bender to become the first shipyard in the United States to successfully laser weld a structural steel sandwich panel on the shipyard’s production equipment. Sandwich panels were welded, using 6 kW of power, with a speed of 30 ipm for 1/8 in. and 15 ipm for 3/8 in. thickness (see Figure 2).
FIGURE 2. Flexible Laser Optic (FLO) mounted to the arm of a robot. The laser welding of sandwich panels is shown to the upper right and a typical cross section of the weld is shown to the lower right.
Through further development and higher laser power, the FLO system will be used for welding up to ½-in. thick sandwich panels. Future work includes additional process development for materials such as aluminum and high strength and stainless steel to enable the fabrication of panels for lightweight ship construction. Integration of seam tracking and weld monitoring will also be pursued to meet the 100 percent weld inspection that is now required for all new naval construction. The technology has opened the door for cost effectively manufacturing a wide variety of sandwich panels with complex geometries using the tab-and-slot design together with laser welding of the stiffeners through the face sheets.
Remote welding
In parallel, Visotek and Fraunhofer have been pursuing robotic remote welding with the FLO system. The first remote welding systems used fast scanning mirrors instead of gantries or robots to move the laser beam quickly from one weld line to the next, a benefit, if multiple short welds have to be performed on different locations of the work piece, such as welding reinforcements in place. The scanning mirrors can move the laser beam quickly, in a matter of tens of milliseconds, across the working envelope, while conventional motion systems require seconds for repositioning. Dramatic increases in productivity, up to ten times higher, and a laser on-time of more than 95 percent result. State-of-the-art systems use a high beam quality CO
2
laser with up to 6kW output power and a stationary scanning system, limiting the part geometry to two dimensions in one plane. The working envelope of a single scanner system with fixed optic is mainly determined by the beam quality of the laser, limiting the maximum laser power to currently 6 kW and thus the maximum welding speed and material thickness.
Three-dimensional remote welding was recently introduced by putting the scanner on the arm of a robot. This combines the capabilities and cost effectiveness of robotics with the fast beam steering capabilities of the scanner. The robotic path can be planned with minimum accelerations and large radii, while the scanner compensates for kinked or sharply curved weld lines. Multiple weld patterns are possible, such as a spot with about 10 mm diameter in analogy to the size of a resistance spot weld, staples, or straight stitches. The actual weld pattern is tailored to the strength and fatigue requirements of the part. Nd:YAG or fiber lasers with up to 4 kW power and good beam quality, typically delivered through a 0.2mm optical cable, are used in combination with special high-power scanning systems. About 50 robotic remote welding systems are now used in production at various automotive plants and their suppliers.
CO
2
lasers represent a much more cost effective laser system than Nd:YAG or fiber lasers, however, their long wavelength does not allow the use of dielectric, lightweight mirrors as they are deployed in conventional high-speed scanners. The FLO optic with water-cooled mirrors and proprietary drives is mounted at the end of a robot. The beam from a 6kW PRC laser is delivered through an articulated arm. The motion of the scanner is synchronized with the motion of the robot to produce a circular weld line with 8mm diameter. Test coupons with 1mm thickness of the upper sheet and 2mm thickness of the lower sheet were used for the initial welding trials. At a robot speed of about 6 m/min, 240 spots per minute could be welded (see Figure 3).
FIGURE 3. Experimental set-up for robotic remote welding with FLO optic. 240 spots per minute were welded in a 1mm/2mm set-up using 6 kW of power from a standard CO
2
laser (PRC). The spots have a diameter of 8 mm.
Clear heat marks were visible at the bottom side of the coupons, indicating the potential for even higher welding speeds. The coupons were arranged in a different level (see Figure 3) to prove the functionality and response time of the integrated autofocus. No difference in weld quality and penetration depth could be detected in the two spots next to the step. The system is currently benchmarked against a conventional remote welding system, an automotive application, welding reinforcements to a fender.
The use of cost-effective CO
2
lasers and the high power handling capabilities of FLO optics can increase productivity through higher welding speeds or welding of thicker materials. Because it can be easily retrofit to conventional laser systems and robots found in many manufacturing facilities, the system offers a viable alternative to resistance spot welding at minimum capital equipment costs.
Stefan Heinemann
is executive director of Fraunhofer USA Center for Laser Technology (Plymouth, MI). He can be contacted by e-mail at<EMAIL_ADDRESS>Industrial Laser Solutions
June, 2005
Author
(s) :
Stefan Heinemann


--- layout: post authors: ["Greg Wilson"] title: "Help Us Build an Admin Tool for Bootcamps" date: 2014-06-20 time: "08:00:00" tags: ["Administration", "Tooling"] ---
It takes a lot of work behind the scenes to match instructors to bootcamps, keep track of who taught (or learned) where, and manage our mailing lists. Our current cobbled-together tools are at their breaking point, so Atul Varma, a developer at Mozilla, put together a simple browser-on-the-desktop app to help administrators find instructors based on geography and skills. We'd like many other features—in particular, bulk upload of attendance lists from bootcamps—so if you would like to help us out, please clone this repository and send us fixes and additions.
Many thanks to Atul for getting us started—we're looking forward to not grepping for instructors any more :-).


Run an ADB command from here to be able to see the output. Use this to troubleshoot issues or perform advanced operations. Please note wireless ADB is not supported but we provide the following example commands for you to experiment with.
To enable wifi click "Enable Wifi ADB" then "Connect to Wifi ADB" and finally disconnect your usb cable.
Enable Wifi ADB
Connect to Wifi ADB
List Devices
Enable USB ADB
Disconnect Everything
Reset ADB
{{adbResponse}}
QuestSaberPatch - Support Removed
Due to the recent update of Beat Saber to version 1.2.0 this patcher version is no longer supported. You will now have to use the BeatOn method to patch custom songs onto Oculus Quest. Please click Open BeatOn below to get started.
Patch Completed - Now Install the Custom Song APK
Below is the results of the patch process. If it shows that some songs were skipped you may need to investigate why. In some cases we have seen `.ogg` files renamed to `.egg` files and these need to be fixed in the songs to get them to patch.
Patch Results:
Current Levels: {{(qspResponse.presentLevels||[]).join(', ')}}
New Levels: {{(qspResponse.installedLevels||[]).join(', ')}}
Skipped Levels: {{getInstallSkipped()}}
Patch Error - Let's get you fixed!
It looks like there was an error patching your Beat Saber APK file. This can be frustrating but there are some options to get you going again.
We have added a troubleshooting section to the tools screen with information and guided solutions to fix the most common issues.
These are quick solutions and only take a few minutes. Feel free to connect with us on to say hello and get support.


Write your essence specification below or import it from a file. Use the parameter tab to provide parameters lettings.
Note: Essence input is uploaded to a server for translation into a suitable format. This should only take a few seconds. After translation, the ATHANOR solver is run in your browser.
| Solution number | Wall time | Number iterations | Violations | Objective |
|---|---|---|---|---|
| -- | -- | 0 | -- | -- |
Solutions will be shown here...


Every object in the drawing has a "group number"; the default is 1.
Every group has a color; group 1 defaults to black.
Setting the "current" group to something other than one causes new objects to be put into that group.
Groups can be set to be drawn in any color.
Still, we are only able to draw points, lines, and circles.
The spiral is visible, but we are not yet able to draw it.
Please look at the source code of this page to see these ideas in action.


23feb dj khaled live in sydney wednesday 28 december 2014 08:55pm to 12:00 am nexen square for people australia, sydney tickets
23feb dj khaled corner obsest program wednesday 28 december 2014 08:55pm to 12:00 am nexen square for people australia, sydney tickets
23feb dj khaled music kaboom festivel wednesday 28 december 2014 08:55pm to 12:00 am nexen square for people australia, sydney booked
23feb dj khaled hello dubai festivel wednesday 28 december 2014 08:55pm to 12:00 am nexen square for people australia, sydney cancel


Use [[ ]]
or quote arguments to -v to avoid glob expansion.
[ -v foo[0] ]
[ -v 'foo[0]' ]
With [
, arguments will undergo glob expansion. If a file foo0
exists when the problematic code is run, it will check for the variable foo0
instead of the array entry foo[0]
. If there additionally exists a foo1
, it will simply fail with an error.
Use [[ ]]
or quote the argument.
None.


From the small screen to the big screen - 8 new things to watch this weekend
Cape Town – Congratulations, you've made it through another week. Sit back and relax with our handy viewing guide.
On the small screen there's music, weird homes, a conclusion to a riveting thriller, a drama where neighbours are family, and a Christmas movie that will make you believe in Santa Claus again.
On the big screen there is racing, a comedy in which an A.I assistant takes over, and a local film that everyone needs to see.
1) Massive Music
Friday, 22 November
21:30 - Mzansi Magic (DStv 161)
Get into weekend mode with this hot music show. Hosted by Lalla Hirayama, Smash Afrika and Anele 'Ney' Zondo this show offers artists interviews, captivating studio performances and a weekly music chart.
2) World's Weirdest Homes
Saturday, 23 November
21:00 - BBC Lifestyle (DStv 174)
Charlie Luxton explores jaw-dropping homes, from a giant sandcastle and a farm that floats on the ocean, to the world's tallest single-family home, and more.
3) Date My Family
Sunday, 24 November
18:00 - Mzansi Magic (DStv 161)
S7: We all have the ideal partner in mind when it comes to finding someone to date. And as shallow as it may seem, physical attributes are what attracts the bees to the honey. On this show, however, people only get to see their dates on the day they meet. In the meantime, they meet the family of the potential partner and the most impressive family wins a date for their single girl. This season kicks off with Edgar Ledwaba, a 34-year-old bachelor from Pretoria who wants a lady with a great charm but an even better body.
4) The Village
A nurse, a war vet, an immigrant and a law student are some of the people living in a unique apartment building in Boston. But this diverse mix of residents are more than neighbours - they're like family.
5) Klaus
When Jesper (Jason Schwartzman) distinguishes himself as the postal academy’s worst student, he is stationed on a frozen island above the Arctic Circle, where the feuding locals hardly exchange words let alone letters. Jesper is about to give up when he finds an ally in local teacher Alva (Rashida Jones), and discovers Klaus (J.K. Simmons), a mysterious carpenter who lives alone in a cabin full of handmade toys. (READ OUR REVIEW HERE)
Now showing in cinemas
Ford v Ferrari
France, 1966. American car designer Carrol Shelby and British driver Ken Miles battle corporate interference, the laws of physics, and their own personal demons to build a revolutionary racecar for Ford Motor Company and take on the dominating race cars of Enzo Ferrari at the 24 Hours of Le Mans. (READ OUR REVIEW HERE)
Jexi
Phil has a major dependency issue—he’s addicted to his phone. He has no friends, he has a job writing pop culture "Top 10" lists, and his love life is non-existent. But, his Facebook status is about to change. When he’s forced to upgrade his phone, the latest model comes with an unexpected feature: Jexi – an A.I. life coach, virtual assistant and cheerleader.  (READ OUR REVIEW HERE)
Cut-Out Girls
Cut-Out Girls is the story of how six young women's lives are altered by the actions of two aspiring sportsmen. Their worlds become intertwined and spiral out of control. A small series of seemingly insignificant moments weave together with devastating consequences. (READ OUR REVIEW HERE)
Compiled by Leandra Engelbrecht.


--- layout: post status: publish published: true title: NLDS Game 1 Review author: display_name: Corey Fineran login: Corey email<EMAIL_ADDRESS>url: '' author_login: Corey author_email<EMAIL_ADDRESS>excerpt: "My God. \n\nI don't even know where to begin. I became increasingly nervous about this game throughout the day. The last few days have been exciting. A successful regular season behind us and nothing but potential bliss ahead. I listened to WSCR 670AM out of Chicago and within hours had chiseled down my fingernails and had a heavy feeling in my stomach. Celebrating the regular season was over and the post season was about to begin. Suddenly to me, the Cubs pitching didn't look quite so great.  Wait, this isn't the team in the playoffs with the worst record. This is a team that has put something together and surged. They are hot and everyone knows those teams are the dangerous ones in the playoffs.\n\nSo we had an Ivy Envy and friends gathering at the Backyard Pub and Grill. I think we ended up with 30 or so people coming over. We were pleased to host Dispatch/Argus Cubs Blogger Matt Veto. Check out his blog, Veto Power. It was a good time but " wordpress_id: 250 wordpress_url: http://ivyenvy.wordpress.com/?p=250 date: '2008-10-01 22:43:04 +0000' date_gmt: '2008-10-02 03:43:04 +0000' categories: - The Cubs tags: - Aramis Ramirez - Backyard Pub and Grill - Carlos Zambrano - Derek Lowe - Dodgers - Manny Ramirez - NLDS - Playoffs - Ryan Dempster - WSCR comments: [] ---
My God.
I don't even know where to begin. I became increasingly nervous about this game throughout the day. The last few days have been exciting. A successful regular season behind us and nothing but potential bliss ahead. I listened to WSCR 670AM out of Chicago and within hours had chiseled down my fingernails and had a heavy feeling in my stomach. Celebrating the regular season was over and the post season was about to begin. Suddenly to me, the Cubs pitching didn't look quite so great.  Wait, this isn't the team in the playoffs with the worst record. This is a team that has put something together and surged. They are hot and everyone knows those teams are the dangerous ones in the playoffs.
So we had an Ivy Envy and friends gathering at the Backyard Pub and Grill. I think we ended up with 30 or so people coming over. We were pleased to host Dispatch/Argus Cubs Blogger Matt Veto. Check out his blog, Veto Power. It was a good time but we didn't have much to cheer for. It felt a lot like watching the Cubs in the playoffs last year...except Aramis Ramirez actually got a base hit.
So I don't know. This can't be it. We needed Game 1 though. For crying out loud, Dempster doesn't lose at home. The Cubs don't lose at home. I'm feeling confident about tomorrow night's game, though. I am the Eeyore Cubs fan. The pessimistic guy waiting for the other shoe to drop. But I have faith in Zambrano in big games. I know a lot of people are nervous about Zambrano on the hill after his last few starts. The crowd was never a factor tonight and if there is anyone that can bring the crowd into a game, it's Zambrano. I just can't see him allowing himself to lose in the playoffs. He will hold it together. It wouldn't surprise me if he doesn't play the role of the offensive spark, too.
If I'm wrong...it's over.


Together Stream
—
A collaborative and synchronized streaming experience. Stream the content you love, together with others.
A Social Streaming Experience
Together Stream allows you to stream content with others in real time. The stream host has full control to choose, pause, and skip any video in the queue — synchronizing playback immediately with participants’ devices.
Host A Stream
—Create a stream and control the mood by sharing all of your favorite content.
Join A Stream
—Chat about the current video or suggest something different to be played next!
Stream All Of Your Favorite Videos — Together
Discover popular videos or search for your favorites.
Together Stream
—
A collaborative and synchronized streaming experience. Stream the content you love, together with others.


More flooding expected as wild weather continues
The Environment Agency and the Met Office have issued several warnings for various parts of Britain.
Residents of South Yorkshire and Lincolnshire are being warned to remain vigilant as more rain is expected in flood-hit areas on Thursday.
As the Met Office issued several alerts for ice, rain and snow across the nation, the Environment Agency (EA) sounded another warning that Britain’s flooding was far from over.
“Heavy rain is expected on Thursday, Friday and over the weekend which could lead to further flooding for communities in South Yorkshire around the Lower River Don,” the EA’s flood duty manager Kate Marks said in a statement.
“Parts of Lincolnshire and the Midlands could also be affected by rain falling on already saturated ground over Thursday and Friday, as well as other parts of England as rain crosses the country from west to east.
“It’s really important that impacted communities remain vigilant and take steps to prepare for flooding by checking their flood risk regularly and making plans to stay safe.”
As the wild weather continues, the Met Office has six yellow weather warnings in effect for:
– snow in parts of south Wales and south-west England between Bath, Oxford and Worcester.
– rain further to the south-east in England, including London, and in the East Midlands.
– ice, in along eastern coastal regions of Scotland, from Kelso north to Elgin.
The EA said 300 staff were working around the clock in various parts of the country, deploying pumps to disperse water through five of the worst-hit locations.
A total of 34 flood warnings, meaning flooding is expected, remain in effect across Britain, along with 75 flood alerts, which means flooding is possible.
The EA said since flooding began last Thursday, around 14,400 properties had been protected by flood defences, including 5,000 in South Yorkshire.
A yellow weather warning for rain is in place for areas around Nottingham, Sheffield and Doncaster from 9am on Thursday, as the snow falling across the south-west moves north and turns to rain.
Met Office meteorologist Luke Miall said “the worst of the winter weather has now moved through” the south-west, but “it’s the same one that’s going to push its way north and will affect the flooded areas from last week”.
The heaviest of the rain is expected to hit the area between 9am and 10am and continue throughout the day.
Forecasters are predicting between 35mm and 45mm of rainfall, and 33 flood warnings are in place across the region after the Met Office warned there could be a risk to life “because these areas are very waterlogged already”.
The PM later paid a visit to the badly-hit village of Fishlake, where he told reporters: “We will get people back on their feet.”
On Tuesday, Mr Johnson announced that relief funding would be made available for those affected by the floods and said funding for local councils to help affected households would be made available to the tune of £500 per eligible household.


Here is a library filters preview.
CSS canvas shows how browser's
filter property works. Library generates this property and applies to
canvas.
JS canvas shows JS part of filters. They are transforming image and
as a result, you get modified image. So, in CSS case, canvas will not
really update image, it only applies filter to some area of browser
window (e.g element), but JS really does it.
As you can see, JS canvas updates only after input was changed (onchange
called), but CSS canvas is updating while you are sliding the thumb (oninput
called). The reason is there will be some stutters while updating
canvas with JS, due to some images have really a lot of pixels and
transformation will take some time, so you will see the stutters.
In production, it is recommended to apply CSS filters first if you want to
show what will happen, when you apply filter and then, when you want to
download image, you have to apply JS part.


--- layout: archive title: Zulip Chat Archive permalink: /stream/113488-general/topic/extract.20.60imp.60.20from.20.60iff.60.html ---
I'd like a function meta imp_of_iff : expr -> tactic expr
, that takes a lemma that says, \Pi (...), P \iff Q
, and gives me instead the lemma \Pi (...), P \to Q
. Has anyone seen this lying around somewhere in mathlib? It's probably not too hard, I'm just hoping it's already done!
Ugh, okay, I revise that, I'm finding it hard. :-)
Ah, maybw tactic/alias.lean
has mk_iff_mp_app
, which seems promising.
Hmm, not clear that helps, it seems tied to actual declarations.
Sorted it out. tactic/alias.lean
has everything I need.
Last updated: Apr 24 2020 at 19:02 UTC


{% extends "base.html" %} {% block title %}
Medieval catalogues > UNIVERSITY AND COLLEGE LIBRARIES OF OXFORD > University College > Indenture recording gift of books by William Asplyon, 11 Feb. 1474
{% endif %}18 identified entries found.
All data was derived from the List of Identifications by Professor Richard Sharpe.
{% if not printing %}
A key to codes used in the List is available (opens in new tab).{% endif %}


How many messages will you be sending & receiving (combined) each month?
Why pricing this way is better for you.Best for small businesses just getting started.
Best for busier small businesses just getting started.
Best for small to medium sized businesses focused on improving processes.
Best for high volume businesses with complex processes.


Type aliases
FeedModes
FeedModes: "chrono" | "annotated" | "stacks"
KeyValue
KeyValue: Record<string, string | number | boolean>
MillFunction
MillFunction: function
Type declaration
-
-
Parameters
-
mill: string
-
-
form: any
-
headers: object
MillOpts
MillOpts: Record<string, string>
ThreadSharing
ThreadSharing: "not_shared" | "invite_only" | "shared"
ThreadType
ThreadType: "private" | "read_only" | "public" | "open"
Create 'args' like a CLI command would take


Footprint
Enjoy your life on your way
Toggle navigation
Business Casual
Home
Blog
Explore
Title
Image
Article


---
layout: post
authors: ["Greg Wilson"]
title: UBC Went Well
date: 2013-02-11
time: "10:00:00"
tags: ["University of British Columba", "Workshop", "Feedback"]
---
Ted Hart and Ethan White just wrapped up a bootcamp at the University of British Columbia, and by all accounts it went very well:
| Good |
Bad |
- learn terminal
- explanations are clear
- SQLite is awesome
- learn some Python
- following along on screen
- enthusiasm
- content was relevant
- practical software
- SQLite is very helpful in data management
- Etherpad
- SQLite
- SQLite: could use it tomorrow
- like lots of problems with partners
- iPython & SQLite
- liked different levels as beginner so could get help
- Etherpad ++ for collaborative note taking
- current & up to date
- Git
- helpers and red light green light
- pace was good
- great intro to lots of methods (handled volume of info well)
- free and open source software
- good overview of things to improve workflow
- collaborative notetaking and chating and small problems
- Git from the command line (Linux guy)
- Git & SQL, can use and share now
- hands on problems well balanced with learning
- good job balancing info and level variation
|
- better examples of why Python is cool
- disecting existing code
- want to be inspired by an example of something cool
- but not far enough to implement (longer)
- cool projects
- cheat sheets
- brief one line explanation of everything before class & tailored workshops to specific disciplines
- too hard to keep up
- installation is much more difficult than R
- fewer things so that we can actually use it
- new to programming more exercises
- not as clear how to use shell so less useful
- shell: examples of why we should care, e.g., working across files
- need to know more about iPython
- lot of information, too much at times (fun stuff was at end)
- didn't get to interconnecting the pieces (collaborative Git project) [group repo to play with]
- group by OS or other similar interests
- would have like to use Git from terminal
- where are things coming from and going to
- iPython notebook disconnected from scripting workflow
- wanted SQL to R/Python (would have come back for another)
- more time to integrate everything
- why Python: spend a few minutes explaining why we chose it and what the alternatives are
- expected it to be more advanced and focused on integration (more info)
- "here's what you're going to learn" at beginning
- not far enough in Python to know where to go next
- some of the one and one help would have been good to share with the group
- more difficult problems more collaboratively
|


Since Adam Smith observed that the “invisible hand” of the free market would force self-interested manufacturers to offer low prices to consumers, governments and politics have never been the same. It took almost two more centuries, however, to achieve a proper mathematical analysis of the consequences of selfish behavior beginning with Morgenstern’s and Von Neumann’s game theory and the work of John Nash. (You may recall Nash as the mathematician who was the subject of the movie A Beautiful Mind.)
This puzzle explores game theory as it applies to social goods. Let’s start with the invisible hand.
Bob and Alice are competitive manufacturers. If they fix their prices at a high level, then they will share the market and each will receive a profit of 3. If Alice decides to lower prices while Bob doesn’t, then Alice will enjoy a profit of 4 while Bob gets a profit of 0, because nobody will buy from him. At that point, Bob will lower his price to receive at least a profit of 1. Similarly, Bob receives 4 and Alice 0 if the roles are reversed. Simply following their self-interest, both will lower their prices and their profits will drop to 1 each.
This arrangement can be expressed in the following table, where Bob’s profit is shown on the left in each pair and Alice’s profit is on the right. So, the upper right corner, for example, represents the state in which Bob charges a high price (and receives a profit of 0) and Alice charges a low price (and receives a profit of 4).
|
Alice High |
Alice Low |
|
|---|---|---|
|
Bob High |
3, 3 |
0, 4 |
|
Bob Low |
4, 0 |
1, 1 |
John Nash defined the concept of an equilibrium state, since known as a Nash equilibrium, in which no party has an interest in deviating from that state. The only Nash equilibrium in this case is the bottom right corner. Neither Bob nor Alice will unilaterally raise prices. If Bob raised prices (thus moving the state to the upper right corner), then his profit would decrease to 0. If Alice raised prices, she would move to the lower left corner, thus decreasing her profits to 0.
This is the invisible hand at work. For the consumers, Bob and Alice’s competition leads to lower prices, a social good. Virtually every modern economy gives evidence of this.
Unfortunately, selfishness does not always lead to socially beneficial consequences. Suppose that instead of representing price choices of competitive manufacturers, the table represented choices about honesty or social responsibility. That is, the “High” row represents states in which Bob acts honestly. By contrast, the “Low” row represents a situation in which Bob cheats (say, steals, pollutes, or bribes lawmakers). The upper right corner portrays a state in which Alice cheats but Bob doesn’t. As you can see, the cheater then benefits. If both cheat, then their benefits go down. Selfishness leads to social loss. Corrupt nations, high crime zones, and brawling families give much evidence of this.
Game theory is neutral. The same game matrix and the same Nash equilibrium can lead to a good or bad state. Selfishness can yield a social benefit or harm.
Now, let us say that it is your job to design public policy.  So you establish a police force and criminal justice system that makes it 10 percent likely that cheaters will be caught and given a value of -5 (e.g., jail time).
In that case, Alice’s benefit in the upper right corner has a 90 percent probability of being 4 and a 10 percent probability of being -5. Thus, her expected benefit is (4 × 0.9) + ((-5) × 0.1) or 3.1. In terms of expectations, the matrix becomes:
|
Alice Honest |
Alice Cheats |
|
|---|---|---|
|
Bob Honest |
3, 3 |
0, 3.1 |
|
Bob Cheats |
3.1, 0 |
0.4, 0.4 |
Now, the benefits of cheating when starting from the honest-honest state are much reduced. Further, if the punishment increases or the probability of being caught increases, then honest-honest may become a Nash equilibrium.
Suppose you can increase punishments (i.e., make them more negative). Can you do so in a way to make the upper left a Nash equilibrium while keeping the bottom right a Nash equilibrium as well? Assume you cannot change the probability of being caught.
Suppose the punishment becomes -8. Alice’s gain in the upper right corner state becomes (4 × 0.9) + ((-8) × 0.1) = 2.8. The gains at the bottom right become (1 × 0.9) + ((-8) × 0.1) = 0.1. This yields the matrix:
|
Alice Honest |
Alice Cheats |
|
|---|---|---|
|
Bob Honest |
3, 3 |
0, 2.8 |
|
Bob Cheats |
2.8, 0 |
0.1, 0.1 |
So, honest-honest is a Nash equilibrium, because neither Bob nor Alice has an incentive to cheat to leave this state. On the other hand, the lower right hand corner is also a Nash equilibrium. If both Bob and Alice cheat, then they each still receive a tiny expected gain. If one then becomes honest, that person’s gain is eliminated.
Here are some challenges for you.
How would punishment have to change to eliminate cheats-cheats as a Nash equilibrium?
As civilizations have advanced, societies have evolved the notion of punishments that fit the crime. This principle might limit the extent to which overly severe punishments are considered acceptable.
If you are a public policy maker and you want to limit the punishment for cheating to -5, how much must you increase the probability of catching criminals to maintain the upper left as the only Nash equilibrium?
In modern societies, inequalities exist so that the benefits of an honest society may benefit one party more than another. Say that Bob gets 5 whereas Alice gets only 2 if both are honest. Assuming for the moment that the probability of being caught is 0, this gives us the following game matrix:
|
Alice Honest |
Alice Cheats |
|
|---|---|---|
|
Bob Honest |
5, 2 |
0, 4 |
|
Bob Cheats |
4, 0 |
1, 1 |
The total social good of the upper left corner has increased at the cost of inequality. One side effect, however, is that incentives to dishonesty now change.
Assuming a 10 percent likelihood of being caught, is there a punishment value that would cause the only Nash equilibrium to be the upper right state (Alice commits crime but Bob does not)?
Still assuming a 10 percent likelihood of being caught, what must the punishment be to force Alice to stay honest?
Let’s close this puzzle on a non-punishment note. Let’s return, in fact, to the competing manufacturers Bob and Alice. Recall their game matrix.
|
Alice High |
Alice Low |
|
|---|---|---|
|
Bob High |
3, 3 |
0, 4 |
|
Bob Low |
4, 0 |
1, 1 |
The invisible hand guides them to lower prices, but neither likes this. They see that if they cooperated, their total profit would be 3 + 3 = 6 instead of 1 + 1 = 2 as in the competing scenario. For that reason, they might consider merging their two enterprises into BobAlice and thereby achieving a total profit of 6 instead of 2. That is, when Bob looks at Alice, he doesn’t value her company at the profit of 1 that she is currently achieving, but at a profit of 5, the additional profit she could bring to a potential BobAlice relative to Bob in a competing world. Of course, this increased profit to Bob and Alice comes at an approximately equal cost to the consumer.
 You may find more wisdom in them than in the blah-blah.


The world of industrial equipment is evolving exceptionally it raises the importance of patenting solutions which is vital for a successful manufacturer as Triol Corporation. Learn more about our patented solutions right down below.
- Patented Solutions
- Copyrighted Solutions
Submersible pumping apparatus, comprising linear electric motor and double action pumpDownhole Measuring System Triol TM01The reliability of the system is ensured by using an undivided protective panel design with dust and moisture barriers. The need for periodic cleaning is reduced and the need for periodic replacement of filter elements is eliminated. Creating a labyrinth path of air movement increases the effective area of the device, while ensuring a sufficient level of protection of operating electrical equipment from dust and moisture by design with plurality of dust and moisture barriers in the path of air in the labyrinth and arranging them so that all air passing through the path is filtered by these barriers. In addition, the cost of construction is reduced by minimizing assembly and mounting operations. This solution provides an increase in the safety of personnel and the reliability of variable speed drive, ease of transport and reduces the probability of damage if the device is improperly transported. Compact and ergonomic design provides quick replacement of components minimizing idleness. The design makes it possible to fully use the power of the generator, to reduce losses from higher harmonics and reactive currents. The use of embedded additional devices provides prevention of emergency shutdowns and turbine rotation. In addition, the staff is not forced to install a separate additional device and configure it for compliance with variable speed drive that may be accompanied by incorrect configuration. It also reduces the length of the power cables and provides placement of them inside the embodiment that protects against damage. A failure of an additional device, the variable speed drive can continue to operate. The system can be adjusted to different power equipment elements of different variable speed drives. |
Learn more arrow_forward |
Method of controlling synchronous electric motor with permanent magnetsVariable Speed Drive Triol AK06A method of controlling a synchronous electric motor with permanent magnets comprising
|
Learn more arrow_forward |
Linear permanent magnet motor dirven dowhhole plunger pumping unitLinear Electric Submersible Pump Triol EP01A method of controlling a synchronous electric motor with permanent magnets comprisingThe invention increases reliability and improves the power performance of the pumping unit. The subject of present invention is an oil-well pumping unit comprising a downhole part including a fully integrated plunger pump and gravity gas separator, downhole linear motor, downhole telemetry unit fitted with stratum fluid temperature and pressure sensors, vibration sensor, drift log or inclinometer and the ground-based part consisting of the control unit designed as a three-phase high-frequency inverting controller, output transformer connected with the downhole linear motor via insulated three-wire cable. |
Learn more arrow_forward |
Submersible pumping apparatus, comprising linear electric motor and double action pumpDownhole Measuring System Triol TM01The reliability of the system is ensured by using an undivided protective panel design with dust and moisture barriers. The need for periodic cleaning is reduced and the need for periodic replacement of filter elements is eliminated. Creating a labyrinth path of air movement increases the effective area of the device, while ensuring a sufficient level of protection of operating electrical equipment from dust and moisture by design with plurality of dust and moisture barriers in the path of air in the labyrinth and arranging them so that all air passing through the path is filtered by these barriers. In addition, the cost of construction is reduced by minimizing assembly and mounting operations. This solution provides an increase in the safety of personnel and the reliability of variable speed drive, ease of transport and reduces the probability of damage if the device is improperly transported. Compact and ergonomic design provides quick replacement of components minimizing idleness. The design makes it possible to fully use the power of the generator, to reduce losses from higher harmonics and reactive currents. The use of embedded additional devices provides prevention of emergency shutdowns and turbine rotation. In addition, the staff is not forced to install a separate additional device and configure it for compliance with variable speed drive that may be accompanied by incorrect configuration. It also reduces the length of the power cables and provides placement of them inside the embodiment that protects against damage. A failure of an additional device, the variable speed drive can continue to operate.


Driver dies after SUV hits utility pole in Duncan
by Jeff BellOne person died after a vehicle hit a utility pole Monday night near Lakes Road and Tzouhalem Road in Duncan.
North Cowichan/Duncan RCMP were called about 9 p.m. to assist fire crews and paramedics after the SUV hit the pole and caught fire. The driver, the lone occupant, was dead at the scene.
The cause of the crash remains under investigation, and police are asking anyone with dash-cam video of the area from 8:30 to 9 p.m. Monday to contact North Cowichan/Duncan RCMP.
Police are also asking for witnesses to the crash or to the driving behaviour of the SUV, described as a dark-coloured four-door model, to come forward.
Contact the North Cowichan/Duncan RCMP at<PHONE_NUMBER>.
— Times Colonist


{% extends 'tech/base.html' %} {% block main %}
Here are the items that you want to hire for your event.


Doom Bread
Is it a bread or is it a roll? Within this layery monstrosity is the essence of fatty deliciousness. Doom Bread combines bacon, cheese and vast quantities of butter into a single object, which amazingly fits in the palm of your hand.
The Recipe
- 1 bottle mead per baker
- 1 packet of active yeast
- 1 1/2 sticks salted butter
- 6 tsp sugar
- 1 1/2 cups lukewarm water
- 1 large egg
- 3 1/2 cups all purpose flour
- 3/4 tsp salt
- 1 1/2 tbsp dried oregano
- 1 tsp dried basil
- 1 lb bacon
- 1/2 cup oil packed sun dried tomatoes
- 1/2 lb mozzarella
- 1 1/2 cups grated parmesan cheese
- 1 tsp garlic salt
- 1/2 tsp chili powder
- Dump half of the butter into a microwave safe dish and microwave it until it's melted. Set it aside to let it cool.
- In a large bowl mix the flower, salt, oregano and basil. Set aside.
- In a different somewhat smaller but still largeish bowl, stir the yeast into the sugar. Add the egg and stir as you add the water. Mix thoroughly.
- Once that the butter is cool, stir that into the sugary mixture.
- Grab a glass of mead and wait for the mixture to foam up. This takes about five minutes.
- Stir the foamy sugary mixture into the original large bowl with the flower in it.
- Mix and then knead the dough for a few minutes. Set the dough aside to rise. This will take about an hour. Drink more mead.
- Dice the tomatoes.
- Dice the bacon and fry it up pretty crispy. Remove the bacon from the grease and mix it with the tomatoes.
- Pour the warm bacon grease over the remaining butter in a small bowl.
- Mix the garlic salt, parmesan cheese and chili powder in yet another bowl.
- Cut the mozzarella into 10 pieces. Roll each piece of mozzarella in bacon being sure to use less than half.
- Cut the risen dough into as many equal pieces as you have pieces of mozzarella.
 Squish each sphere tightly to seal it.
- Dunk each sphere into the buttery greasy mixture, roll it in the bacon, and then roll it in the cheese mixture.
- Put all of the rolls on to a cookie sheet. If you have any extra grease, bacon or cheese, put it on top of the rolls. Let them rise for another hour. Pour another glass of mead.
- At some point during this hour, preheat your oven to 350.
- Bake for 20-30 minutes until golden brown.
The Attempt
The vast list of ingredients for this recipe required too much shopping for any of the baking team to bother with. We divided up ingredients amongst ourselves before we met to meet our doom. This strategy was only partially successful as several bakers canceled at the last minute. We ended up making some careful substitutions to close this gap.
Where the recipe calls for parmesan we substituted shredded cheddar that was left over from the previous nights taco party. Where bacon was required, we substituted low fat spam. Having accepted our fate we mixed the ingredients, loaded them into the oven and prepared for the worst. As it turns out, we were able to fit the entire batch into the oven making this an all or nothing experiment.
Fearing that the baking doom bread would summon demons, we retired to the lounge for a final round of mead.
The Aftermath
With our mead consumed we returned to the kitchen. Carefully peeking into the oven we determined that that doom bread summoned no demons, but it did summon at least some fire. 1/3 of the batch appears to have exploded in such a way that it combusted for at least part of the baking process. The other 2/3 looked mysteriously pristine.
After allowing some time to cool we inspected the editable results. The morsels smelled slightly of smoke, likely the result of their burning brethren. Jenny decided to take the first bite. Her face quickly contorted into the most horrible of expressions. She survived the bite but refused to take another and refused to offer any details about her experience.


Data Fields | |
| unsigned int | ulVersion |
| Structure version. | |
| unsigned int | ulActiveSampleRate |
| Current driver sample rate. | |
| unsigned long long | ulLastUpdated |
| Timestamp of last update. | |
| unsigned int | ulValues [ADL_PMLOG_MAX_SUPPORTED_SENSORS][2] |
| 2D array of senesor and values | |
| unsigned int | ulReserved [256] |
| Reserved. |
| unsigned int _ADLPMLogData::ulVersion |
Structure version.
| unsigned int _ADLPMLogData::ulActiveSampleRate |
Current driver sample rate.
| unsigned long long _ADLPMLogData::ulLastUpdated |
Timestamp of last update.
| unsigned int _ADLPMLogData::ulValues[ADL_PMLOG_MAX_SUPPORTED_SENSORS][2] |
2D array of senesor and values
| unsigned int _ADLPMLogData::ulReserved[256] |
Reserved.


Non-typical engineer, I love to learn and improve myself day by day.
Skilled in Bash (Linux), backend technologies as MySQL, PHP (Drupal, CodeIgniter, Laravel) and currently learning Python and ReactJS. It would be great to make my Master in Machine Learning applied in medicine and sports. I'll be going for it next year. Strong information technology professional with a Bachelor in Engineering focused Electronics from Universidad del Valle (CO).
As Mother Theresa used to say "Who does not live to serve, does not serve to live", that's why I work with Rotaract to make some positive impact on my community.


Weather Connector
Please select an option from the drop down menu to begin!
Select One!!


The Modem Radio Control (MRC) APIs is used to control cellular network environments.
It's important for many M2M apps to know details about cellular network environments (like network registration and signal quality). It allows you to limit some M2M services based on the reliability of the network environment, and provides information to control power consumption (power on or shutdown the radio module).
IPC interfaces binding
All the functions of this API are provided by the modemService service.
Here's a code sample binding to modem services:
bindings: { clientExe.clientComponent.le_mrc -> modemService.le_mrc }
Radio Power Management
le_mrc_SetRadioPower() API allows the application to power up or shutdown the radio module.
le_mrc_GetRadioPower() API displays radio module power state.
Radio Configuration preferences
The following functions let you configure and retrieve the radio configuration preferences: le_mrc_SetAutomaticRegisterMode(), le_mrc_SetManualRegisterMode() and le_mrc_GetRegisterMode() let you set/get the selected Scan mode.
le_mrc_SetBandPreferences(), le_mrc_GetBandPreferences() let you set/get the 2G/3G band preferences by using a bit mask built with le_mrc_BandBitMask_t
The 2G/3G band preferences can be:
- Band-Class-0-A-System
- Band-Class-0-B-System
- Band-Class-1-All-Blocks
- Band-Class-2-Placeholder
- Band-Class-3-A-System
- Band-Class-4-All-Blocks
- Band-Class-5-All-Blocks
- Band-Class-6
- Band-Class-7
- Band-Class-8
- Band-Class-9
- Band-Class-10
- Band-Class-11
- Band-Class-12
- Band-Class-13
- Band-Class-14
- Band-Class-15
- Band-Class-16
- Band-Class-17
- Band-Class-18
- Band-Class-19
- GSM-DCS-1800
- E-GSM-900 (for Extended GSM 900 band)
- Primary-GSM-900
- GSM-450
- GSM-480
- GSM-750
- GSM-850
- GSMR-900 (for GSM Railways GSM 900 band)
- GSM-PCS-1900
- WCDMA-EU-J-CH-IMT-2100 (for WCDMA Europe, Japan, and China IMT 2100 band)
- WCDMA-US-PCS-1900 (for WCDMA U.S. PCS 1900 band)
- WCDMA-EU-CH-DCS-1800 (for WCDMA Europe and China DCS 1800 band)
- WCDMA-US-1700 (for WCDMA U.S. 1700 band)
- WCDMA-US-850 (for WCDMA U.S. 850 band)
- WCDMA-J-800 (for WCDMA Japan 800 band)
- WCDMA-EU-2600 (for WCDMA Europe 2600 band)
- WCDMA-EU-J-900 (for WCDMA Europe and Japan 900 band)
- WCDMA-J-1700 (for WCDMA Japan 1700 band)
le_mrc_SetLteBandPreferences(), le_mrc_GetLteBandPreferences() let you set/get the LTE band preferences by using a bit mask built with le_mrc_LteBandBitMask_t
.
The LTE band preferences can be 0 to 43 except 15, 16, 22, 23, and 26 to 32.
le_mrc_SetTdScdmaBandPreferences(), le_mrc_GetTdScdmaBandPreferences() let you set/get the TD-SCDMA band preferences by using a bit mask built with le_mrc_TdScdmaBandBitMask_t
The TD-SCDMA band preferences can be 'A' to 'F'
- Warning
- Ensure to check the supported preferences for your specific platform.
le_mrc_AddPreferredOperator() , le_mrc_RemovePreferredOperator() to add/remove a preferred operator by specifying the MCC/MNC and the Radio Access Technology.
le_mrc_GetPreferredOperatorsList(), le_mrc_GetFirstPreferredOperator(), le_mrc_GetNextPreferredOperator(), le_mrc_DeletePreferredOperatorsList(), le_mrc_GetPreferredOperatorDetails() let you retrieve a list of the selected preferred operators and get their details.
Radio Access Technology (RAT)
le_mrc_GetRadioAccessTechInUse() API retrieves the current active Radio Access Technology.
The application can register a handler function to retrieve the Radio Access Technology each time the RAT changes.
le_mrc_AddRatChangeHandler() API installs a RAT change handler.
le_mrc_RemoveRatChangeHandler() API uninstalls the handler function.
le_mrc_SetRatPreferences(), le_mrc_GetRatPreferences() let you set/get the Radio Access Technology preferences by using a bit mask built with le_mrc_RatBitMask_t
.
The Radio Access Technology preferences can be:
- CDMA (CDMA2000-1X + CDMA2000-HRPD)
- GSM
- UMTS (UMTS + TD-SCDMA)
- LTE
- Note
- LE_MRC_BITMASK_RAT_ALL value can be used to select the RAT in automatic mode.
Network Registration
le_mrc_GetNetRegState() API retrieves the radio module network registration status.
The application can register a handler function to retrieve the registration status each time the registration state changes.
le_mrc_AddNetRegStateEventHandler() API installs a registration state handler.
le_mrc_RemoveNetRegStateHandler() API uninstalls the handler function.
- Note
- If only one handler is registered, the le_mrc_RemoveNetRegStateHandler() API resets the registration mode to its original value before any handler functions were added.
le_mrc_RegisterCellularNetwork() API registers on a cellular network.
Signal Quality
le_mrc_GetSignalQual() retrieves the received signal strength details.
You must call le_mrc_MeasureSignalMetrics() to measure the signal metrics of the serving cell (aka the 'serving' cell). It returns a reference of le_mrc_MetricsRef_t type.
When the signal metrics are no longer needed, you must call le_mrc_DeleteSignalMetrics() to free all allocated ressources associated with the Metrics object.
le_mrc_GetRatOfSignalMetrics() returns the Radio Access Technology of the signal measures.
le_mrc_GetGsmSignalMetrics() the signal strength in dBm and the bit error rate measured on GSM network.
le_mrc_GetUmtsSignalMetrics() returns the signal metrics measured on UMTS network.
le_mrc_GetLteSignalMetrics() returns the signal metrics measured on LTE network.
le_mrc_GetCdmaSignalMetrics() returns the signal metrics measured on CDMA network.
The application can register a handler function to get notifications when the signal strength changes of a certain threshold value.
le_mrc_AddSignalStrengthChangeHandler() API installs a signal strength change handler. The RAT, the lower-range and the upper-range thresholds must be passed as input parameters. These parameters are updated each time the function is called, the previous thresholds are replaced by the new ones if the function is called with the same RAT.
The event is notified when we cross the range limits in both direction.
le_mrc_RemoveSignalStrengthChangeHandler() API uninstalls the handler function.
Serving cell's location information
le_mrc_GetServingCellId() retrieves the the serving Cell Identifier.
le_mrc_GetServingCellLocAreaCode() retrieves the Location Area Code of the serving cell.
Current Network Information
le_mrc_GetCurrentNetworkName() retrieves the Current Network Name. le_mrc_GetCurrentNetworkMccMnc() retrieves the Current Network PLMN information.
Network Scan
Call le_mrc_PerformCellularNetworkScan() to fill a list of all network in sight. You can go through all Scan Information by calling le_mrc_GetFirstCellularNetworkScan() and le_mrc_GetNextCellularNetworkScan().
For each Scan Information, you can call:
- le_mrc_GetCellularNetworkMccMnc() to have the operator code.
- le_mrc_GetCellularNetworkName() to get the operator name.
- le_mrc_GetCellularNetworkRat() to get the radio access technology.
- le_mrc_IsCellularNetworkInUse() to check if this is currently in use by the network.
- le_mrc_IsCellularNetworkAvailable() to check if this is available.
- le_mrc_IsCellularNetworkHome() to check if this is in home status.
- le_mrc_IsCellularNetworkForbidden() to check if this is forbidden by the network.
le_mrc_DeleteCellularNetworkScan() should be called when you do not need the list anymore.
Usage example:
Neighboring Cells Information
- Warning
- The following functions do not apply to CDMA network.
You must call le_mrc_GetNeighborCellsInfo() to retrieve the neighboring cells information. It returns a reference of le_mrc_NeighborCellsRef_t type.
When the neighboring cells information is no longer needed, you must call le_mrc_DeleteNeighborCellsInfo() to free all allocated resources associated with the object.
Then, you can use the following function to get the information:
- le_mrc_GetFirstNeighborCellInfo() and le_mrc_GetFirstNeighborCellInfo() allow to go among the single cell information retrieved with le_mrc_GetNeighborCellsInfo(). These two functions return a reference of le_mrc_CellInfoRef_t type.
- le_mrc_GetNeighborCellId() gets the identifier of the cell specified with the le_mrc_CellInfoRef_t parameter (can be called for any kind of RAT).
- le_mrc_GetNeighborCellLocAreaCode() gets the location area code of the cell specified with the le_mrc_CellInfoRef_t parameter (can be called for any kind of RAT). 0xFFFF value is returned if the value is not available.
- le_mrc_GetNeighborCellRxLevel() gets the signal strength (in dBm) of the cell specified with the le_mrc_CellInfoRef_t parameter (can be called for any kind of RAT).
- le_mrc_GetNeighborCellRat() gets the Radio Access Technology of the cell specified with the le_mrc_CellInfoRef_t parameter.
- le_mrc_GetNeighborCellUmtsEcIo() gets the Ec/Io (the received energy per chip divided by the power density in the band measured in dBm on the primary CPICH channel of serving cell) of the cell specified with the le_mrc_CellInfoRef_t parameter.
- le_mrc_GetNeighborCellLteIntraFreq() gets the RSRP and RSRQ of the Interfrequency of the cell specified with the le_mrc_CellInfoRef_t parameter.
- le_mrc_GetNeighborCellLteInterFreq() gets the RSRP and RSRQ of the Interfrequency of the cell specified with the le_mrc_CellInfoRef_t parameter.
Copyright (C) Sierra Wireless Inc. Use of this work is subject to license.


Home
(current)
Projects
About Me
Resume/CV
Amaya Mali
Research | Strategist | Designer
Connect
Coming Soon
Information about the project


Hi, I’m Caroline and welcome to my website. I work with fused glass to create unique and individual pieces including jewellery and decorative items. My designs are composed of glass elements each cut by hand then fused in a kiln at temperatures in excess of 1000 °F . The result is a unique piece of artwork with an extraordinary play of light that can only be fully appreciated first-hand.
I hope you enjoy browsing my website and please contact me if you would like further details or have any questions regarding my work.


These all are activities I love to do on a regular basis.
Soccer is a team sport played between two teams of eleven players with a spherical ball.
Dance is a performing art form consisting of purposefully selected sequences of human movement.
Salsa is a popular form of social dance that originated in the Caribbean.
Rock'n'Roll is a very athletic, competitive form of partner dance that originated from lindy hop.
Gardening is the practice of growing and cultivating plants as part of horticulture.
A film, also called a movie, motion picture, theatrical film, or photoplay, is a series of still images which, when shown on a screen, creates the illusion of moving images due to the phi phenomenon.
Meditation is a practice where an individual operates or trains the mind or induces a mode of consciousness, either to realize some benefit or for the mind to simply acknowledge its content without becoming identified with that content, or as an end in itself.


The Triangular system can be used in whatever environment is presently used to construct AngularJS pages.
To develop in the GAE Variant Mode the addition of Google App Engine Access and a Server GAE Variant is required. The latter is provided by the Development Package GAE Variant.
To develop in the Node.js Variant Mode the development system requires that Node.js Home Page be installed and accessible on the development machine. The Server Node.js Variant is required. The latter is provided by the Development Package Node.js Variant.
The Chrome Browser is the browser of choice because of its excellent debugging facilities.
The author uses MultiEdit mainly because of its excellent column edit support and its ability to save all files on a windows task switch.
The utilities provided in the /bats
folder in the Development Package are designed to run in a Windows XP/Vista/7/8 environment.
If these are adapted to another platfrom the entire system should be compabtible with the alternate platfrom.
The Triangular system has been designed to allow the testing of components using the
"file:// " URL to load the static page. This will trigger the internal systems to access a locally defined
server. This server sends the request header
Access-Control-Allow-Origin:*
to allow this to happen.
This capability greatly speeds the development process. Changes can be made, saved (See MultiEdit TaskSwitch save feature) the Browser refresh button pressed (Usually <F5>) and a test accomplished.
Since the token persists across Browser Refreshes a new login is not required for the test.
The message
Blocked a frame with origin "null" from accessing a frame with origin "null". Protocols, domains, and ports must match.
can be safely ignored. It is caused by the template loading scheme and no way to eliminate it after a refresh was discovered.
Note Using localhost:8882
(GAE Variant) or localhost:8888
(Node.js Variant) as the host rather than the file://
URL can also be used. It solves the error message problem but
occasionally the browser
Applies to GAE Variant.
Eventually a Google App Engine account is required.
This can be postponed by just using the locally hosted version until production mode is required. Since the need is only to run the provided JAR files a full blown environment is not required.
Applies to Node.js Variant.
Eventually a place to host the Node.js code is required. The Tutorial Examples use NodeJitsu Node.js Hosting as a target site. The instructions will vary if a different Node.JS hosting site is used.
This can be postponed by just using the locally hosted version until production mode is required. It requires that Node.js Home Page be installed and accessible on the development machine
Applies to GAE Variant.
The run-ws.bat
file in the /bats
folder in the Development Package can be used to start local Google App Engine web server.
It is configured to use port 8882. This can be changed.
The Development Package comes with a populated Datastore with the sample applications which are also installed. The Datastore Prime Overview gives details on how to remove the populated Datastore.
The applications can be removed by deleting all but the AppsConfig.js
file out of the /war/apps
folder.
Applies to Node.js Variant.
The run-tri.bat
file in the /bats
folder in the Development Package can be used to start local Google App Engine web server.
It is configured to use port 8888. This can be changed.
The Development Package comes with a populated Datastore with the sample applications which are also installed. The Datastore Prime Overview gives details on how to remove the populated Datastore.
The applications can be removed by deleting all but the AppsConfig.js
file out of the /apps
folder.


The tab_footnote()
function can make it a painless process to add a
footnote to a gt table. There are two components to a footnote: (1) a
footnote mark that is attached to the targeted cell text, and (2) the
footnote text (that starts with the corresponding footnote mark) that is
placed in the table's footer area. Each call of tab_footnote()
will add a
different note, and one or more cells can be targeted via the location helper
functions (e.g., cells_body()
, cells_column_labels()
, etc.).
tab_footnote(data, footnote, locations)
| data | A table object that is created using the |
|---|---|
| footnote | The text to be used in the footnote. We can optionally use
the |
| locations | The cell or set of cells to be associated with the footnote.
Supplying any of the |
An object of class gt_tbl
.
The formatting of the footnotes can be controlled through the use of various
parameters in the tab_options()
function:
footnotes.sep
: allows for a choice of the separator between
consecutive footnotes in the table footer. By default, this is set to a
linebreak.
footnotes.marks
: the set of sequential characters or numbers used
to identify the footnotes.
footnotes.font.size
: the size of the font used in the footnote
section.
footnotes.padding
: the amount of padding to apply between the
footnote and source note sections in the table footer.
2-6
Other Create or Modify Parts:
tab_header()
,
tab_options()
,
tab_row_group()
,
tab_source_note()
,
tab_spanner_delim()
,
tab_spanner()
,
tab_stubhead()
,
tab_style()
# Use `sza` to create a gt table; color # the `sza` column using the `data_color()` # function, then, add a footnote to the # `sza` column label explaining what the # color scale signifies tab_1 <- sza %>% dplyr::filter( latitude == 20 & month == "jan" & !is.na(sza) ) %>% dplyr::select(-latitude, -month) %>% gt() %>% data_color( columns = vars(sza), colors = scales::col_numeric( palette = c("white", "yellow", "navyblue"), domain = c(0, 90)) ) %>% tab_footnote( footnote = "Color indicates height of sun.", locations = cells_column_labels( columns = vars(sza)) )


A lollipop chart can be used to compare 2 categories, linking them with a segment to stress out their difference. This post explains how to do it with R
and ggplot2.
Lollipop plots can be very appropriate when it comes to compare 2 values for several entities.
For each entity, one point is drawn for each variable, with a different color. Their difference is then highlighted using a segment. This type of visualisation is also called Cleveland dot plots.
As usual, it is advised to order your individuals by mean, median, or group difference to give even more insight to the figure.
# Library
library(ggplot2)
library(dplyr)
library(hrbrthemes)
# Create data
value1 <- abs(rnorm(26))*2
data <- data.frame(
x=LETTERS[1:26],
value1=value1,
value2=value1+1+rnorm(26, sd=1)
)
# Reorder data using average? Learn more about reordering in chart #267
data <- data %>%
rowwise() %>%
mutate( mymean = mean(c(value1,value2) )) %>%
arrange(mymean) %>%
mutate(x=factor(x, x))
# Plot
ggplot(data) +
geom_segment( aes(x=x, xend=x, y=value1, yend=value2), color="grey") +
geom_point( aes(x=x, y=value1), color=rgb(0.2,0.7,0.1,0.5), size=3 ) +
geom_point( aes(x=x, y=value2), color=rgb(0.7,0.2,0.1,0.5), size=3 ) +
coord_flip()+
theme_ipsum() +
theme(
legend.position = "none",
) +
xlab("") +
ylab("Value of Y")
The lollipop chart is one of my favourite. There is so much to do with it and it is under-utilized in favor of barplot. Visit the dedicated section for more examples produced with R
, or data-to-viz to learn about the available variations and caveats to avoid.


Azure Maps Raster Tiles in ArcGIS JS 4.6 Sample
This sample shows how to render Azure Maps Raster Tiles in the ArcGIS version 4.6 JavaScript map control.


This module provides methods for generating HTML that links views to assets such as images, javascripts, stylesheets, and feeds. These methods do not verify the assets exist before linking to them:
image_tag("rails.png") # =>  stylesheet_link_tag("application") # => <link href="/stylesheets/application.css?1232285206" media="screen" rel="stylesheet" type="text/css" />
By default, Rails links to these assets on the current host in the public folder, but you can direct Rails to link to assets from a dedicated asset server by setting ActionController::Base.asset_host in the application configuration, typically in config/environments/production.rb. For example, you’d define assets.example.com to be your asset host this way:
ActionController::Base.asset_host = "assets.example.com"
Helpers take that into account:
image_tag("rails.png") # =>  stylesheet_link_tag("application") # => <link href="http://assets.example.com/stylesheets/application.css?1232285206" media="screen" rel="stylesheet" type="text/css" />
Browsers typically open at most two simultaneous connections to a single host, which means your assets often have to wait for other assets to finish downloading. You can alleviate this by using a %d wildcard in the asset_host. For example, “assets%d.example.com”. If that wildcard is present Rails distributes asset requests among the corresponding four hosts “assets0.example.com”, …, “assets3.example.com”. With this trick browsers will open eight simultaneous connections rather than two.
image_tag("rails.png") # =>  stylesheet_link_tag("application") # => <link href="http://assets2.example.com/stylesheets/application.css?1232285206" media="screen" rel="stylesheet" type="text/css" />
To do this, you can either setup four actual hosts, or you can use wildcard DNS to CNAME the wildcard to a single asset host. You can read more about setting up your DNS CNAME records from your ISP.
Note: This is purely a browser performance optimization and is not meant for server load balancing. See www.die.net/musings/page_load_time/ for background.
Alternatively, you can exert more control over the asset host by setting asset_host to a proc like this:
ActionController::Base.asset_host = Proc.new { |source| "http://assets#{Digest::MD5.hexdigest(source).to_i(16) % 2 + 1}.example.com" } image_tag("rails.png") # =>  stylesheet_link_tag("application") # => <link href="http://assets2.example.com/stylesheets/application.css?1232285206" media="screen" rel="stylesheet" type="text/css" />
The example above generates “assets1.example.com” and “assets2.example.com”. This option is useful for example if you need fewer/more than four hosts, custom host names, etc.
As you see the proc takes a source parameter. That’s a string with the absolute path of the asset with any extensions and timestamps in place, for example “/images/rails.png?1230601161”.
ActionController::Base.asset_host = Proc.new { |source| if source.starts_with?('/images') "http://images.example.com" else "http://assets.example.com" end } image_tag("rails.png") # =>  stylesheet_link_tag("application") # => <link href="http://assets.example.com/stylesheets/application.css?1232285206" media="screen" rel="stylesheet" type="text/css" />
Alternatively you may ask for a second parameter request. That one is particularly useful for serving assets from an SSL-protected page. The example proc below disables asset hosting for HTTPS connections, while still sending assets for plain HTTP requests from asset hosts. If you don’t have SSL certificates for each of the asset hosts this technique allows you to avoid warnings in the client about mixed media.
ActionController::Base.asset_host = Proc.new { |source, request| if request.ssl? "#{request.protocol}#{request.host_with_port}" else "#{request.protocol}assets.example.com" end }
You can also implement a custom asset host object that responds to call and takes either one or two parameters just like the proc.
config.action_controller.asset_host = AssetHostingWithMinimumSsl.new( "http://asset%d.example.com", "https://asset1.example.com" )
By default, Rails appends asset’s timestamps to all asset paths. This allows you to set a cache-expiration date for the asset far into the future, but still be able to instantly invalidate it by simply updating the file (and hence updating the timestamp, which then updates the URL as the timestamp is part of that, which in turn busts the cache).
It’s the responsibility of the web server you use to set the far-future expiration date on cache assets that you need to take advantage of this feature. Here’s an example for Apache:
# Asset Expiration ExpiresActive On <FilesMatch "\.(ico|gif|jpe?g|png|js|css)$"> ExpiresDefault "access plus 1 year" </FilesMatch>
Also note that in order for this to work, all your application servers must return the same timestamps. This means that they must have their clocks synchronized. If one of them drifts out of sync, you’ll see different timestamps at random and the cache won’t work. In that case the browser will request the same assets over and over again even thought they didn’t change. You can use something like Live HTTP Headers for Firefox to verify that the cache is indeed working.
This strategy works well enough for most server setups and requires the least configuration, but if you deploy several application servers at different times - say to handle a temporary spike in load - then the asset time stamps will be out of sync. In a setup like this you may want to set the way that asset paths are generated yourself.
Altering the asset paths that Rails generates can be done in two ways. The easiest is to define the RAILS_ASSET_ID environment variable. The contents of this variable will always be used in preference to calculated timestamps. A more complex but flexible way is to set ActionController::Base.config.asset_path to a proc that takes the unmodified asset path and returns the path needed for your asset caching to work. Typically you’d do something like this in config/environments/production.rb:
# Normally you'd calculate RELEASE_NUMBER at startup. RELEASE_NUMBER = 12345 config.action_controller.asset_path = proc { |asset_path| "/release-#{RELEASE_NUMBER}#{asset_path}" }
This example would cause the following behavior on all servers no matter when they were deployed:
image_tag("rails.png") # =>  stylesheet_link_tag("application") # => <link href="/release-12345/stylesheets/application.css?1232285206" media="screen" rel="stylesheet" type="text/css" />
Changing the asset_path does require that your web servers have knowledge of the asset template paths that you rewrite to so it’s not suitable for out-of-the-box use. To use the example given above you could use something like this in your Apache VirtualHost configuration:
<LocationMatch "^/release-\d+/(images|javascripts|stylesheets)/.*$"> # Some browsers still send conditional-GET requests if there's a # Last-Modified header or an ETag header even if they haven't # reached the expiry date sent in the Expires header. Header unset Last-Modified Header unset ETag FileETag None # Assets requested using a cache-busting filename should be served # only once and then cached for a really long time. The HTTP/1.1 # spec frowns on hugely-long expiration times though and suggests # that assets which never expire be served with an expiration date # 1 year from access. ExpiresActive On ExpiresDefault "access plus 1 year" </LocationMatch> # We use cached-busting location names with the far-future expires # headers to ensure that if a file does change it can force a new # request. The actual asset filenames are still the same though so we # need to rewrite the location from the cache-busting location to the # real asset location so that we can serve it. RewriteEngine On RewriteRule ^/release-\d+/(images|javascripts|stylesheets)/(.*)$ /$1/$2 [L]
Computes the path to an audio asset in the public audios directory. Full paths from the document root will be passed through. Used internally by audio_tag to build the audio path.
audio_path("horse") # => /audios/horse audio_path("horse.wav") # => /audios/horse.wav audio_path("sounds/horse.wav") # => /audios/sounds/horse.wav audio_path("/sounds/horse.wav") # => /sounds/horse.wav audio_path("http://www.example.com/sounds/horse.wav") # => http://www.example.com/sounds/horse.wav
# File lib/action_view/helpers/asset_tag_helper.rb, line 304 def audio_path(source) asset_paths.compute_public_path(source, 'audios') end
Returns an html audio tag for the source. The source can be full path or file that exists in your public audios directory.
audio_tag("sound") # => <audio src="/audios/sound" /> audio_tag("sound.wav") # => <audio src="/audios/sound.wav" /> audio_tag("sound.wav", :autoplay => true, :controls => true) # => <audio autoplay="autoplay" controls="controls" src="/audios/sound.wav" />
# File lib/action_view/helpers/asset_tag_helper.rb, line 444 def audio_tag(source, options = {}) options.symbolize_keys! options[:src] = path_to_audio(source) tag("audio", options) end
Returns a link tag that browsers and news readers can use to auto-detect an RSS or ATOM feed. The type can either be :rss (default) or :atom. Control the link options in url_for format using the url_options. You can modify the LINK tag itself in tag_options.
:rel - Specify the relation of this link, defaults to "alternate"
:type - Override the auto-generated mime type
:title - Specify the title of the link, defaults to the type
auto_discovery_link_tag # => <link rel="alternate" type="application/rss+xml" title="RSS" href="http://www.currenthost.com/controller/action" /> auto_discovery_link_tag(:atom) # => <link rel="alternate" type="application/atom+xml" title="ATOM" href="http://www.currenthost.com/controller/action" /> auto_discovery_link_tag(:rss, {:action => "feed"}) # => <link rel="alternate" type="application/rss+xml" title="RSS" href="http://www.currenthost.com/controller/feed" /> auto_discovery_link_tag(:rss, {:action => "feed"}, {:title => "My RSS"}) # => <link rel="alternate" type="application/rss+xml" title="My RSS" href="http://www.currenthost.com/controller/feed" /> auto_discovery_link_tag(:rss, {:controller => "news", :action => "feed"}) # => <link rel="alternate" type="application/rss+xml" title="RSS" href="http://www.currenthost.com/news/feed" /> auto_discovery_link_tag(:rss, "http://www.example.com/feed.rss", {:title => "Example RSS"}) # => <link rel="alternate" type="application/rss+xml" title="Example RSS" href="http://www.example.com/feed" />
# File lib/action_view/helpers/asset_tag_helper.rb, line 221 def auto_discovery_link_tag(type = :rss, url_options = {}, tag_options = {}) tag( "link", "rel" => tag_options[:rel] || "alternate", "type" => tag_options[:type] || Mime::Type.lookup_by_extension(type.to_s).to_s, "title" => tag_options[:title] || type.to_s.upcase, "href" => url_options.is_a?(Hash) ? url_for(url_options.merge(:only_path => false)) : url_options ) end
<%= favicon_link_tag %>
generates
<link href="/favicon.ico" rel="shortcut icon" type="image/vnd.microsoft.icon" />
You may specify a different file in the first argument:
<%= favicon_link_tag '/myicon.ico' %>
That’s passed to path_to_image as is, so it gives
<link href="/myicon.ico" rel="shortcut icon" type="image/vnd.microsoft.icon" />
The helper accepts an additional options hash where you can override “rel” and “type”.
For example, Mobile Safari looks for a different LINK tag, pointing to an image that will be used if you add the page to the home screen of an iPod Touch, iPhone, or iPad. The following call would generate such a tag:
<%= favicon_link_tag 'mb-icon.png', :rel => 'apple-touch-icon', :type => 'image/png' %>
# File lib/action_view/helpers/asset_tag_helper.rb, line 253 def favicon_link_tag(source='/favicon.ico', options={}) tag('link', { :rel => 'shortcut icon', :type => 'image/vnd.microsoft.icon', :href => path_to_image(source) }.merge(options.symbolize_keys)) end
Computes the path to a font asset in the public fonts directory. Full paths from the document root will be passed through.
font_path("font") # => /fonts/font font_path("font.ttf") # => /fonts/font.ttf font_path("dir/font.ttf") # => /fonts/dir/font.ttf font_path("/dir/font.ttf") # => /dir/font.ttf font_path("http://www.example.com/dir/font.ttf") # => http://www.example.com/dir/font.ttf
# File lib/action_view/helpers/asset_tag_helper.rb, line 318 def font_path(source) asset_paths.compute_public_path(source, 'fonts') end
# File lib/action_view/helpers/asset_tag_helper.rb, line 377 def image_alt(src) File.basename(src, '.*').sub(/-[[:xdigit:]]{32}\z/, '').capitalize end
Computes the path to an image asset in the public images directory. Full paths from the document root will be passed through. Used internally by image_tag to build the image path:
image_path("edit") # => "/images/edit" image_path("edit.png") # => "/images/edit.png" image_path("icons/edit.png") # => "/images/icons/edit.png" image_path("/icons/edit.png") # => "/icons/edit.png" image_path("http://www.example.com/img/edit.png") # => "http://www.example.com/img/edit.png"
If you have images as application resources this method may conflict with their named routes. The alias path_to_image is provided to avoid that. Rails uses the alias internally, and plugin authors are encouraged to do so.
# File lib/action_view/helpers/asset_tag_helper.rb, line 274 def image_path(source) source.present? ? asset_paths.compute_public_path(source, 'images') : "" end
Returns an html image tag for the source. The source can be a full path or a file that exists in your public images directory.
You can add HTML attributes using the options. The options supports three additional keys for convenience and conformance:
:alt - If no alt text is given, the file name part of the source is used (capitalized and without the extension)
:size - Supplied as "{Width}x{Height}", so "30x45" becomes width="30" and height="45". :size will be ignored if the value is not in the correct format.
:mouseover - Set an alternate image to be used when the onmouseover event is fired, and sets the original image to be replaced onmouseout. This can be used to implement an easy image toggle that fires on onmouseover.
image_tag("icon") # =>  image_tag("icon.png") # =>  image_tag("icon.png", :size => "16x10", :alt => "Edit Entry") # =>  image_tag("/icons/icon.gif", :size => "16x16") # =>  image_tag("/icons/icon.gif", :height => '32', :width => '32') # =>  image_tag("/icons/icon.gif", :class => "menu_icon") # =>  image_tag("mouse.png", :mouseover => "/images/mouse_over.png") # =>  image_tag("mouse.png", :mouseover => image_path("mouse_over.png")) # =>
# File lib/action_view/helpers/asset_tag_helper.rb, line 356 def image_tag(source, options = {}) options.symbolize_keys! src = options[:src] = path_to_image(source) unless src =~ /^(?:cid|data):/ || src.blank? options[:alt] = options.fetch(:alt){ image_alt(src) } end if size = options.delete(:size) options[:width], options[:height] = size.split("x") if size =~ %{^\d+x\d+$} end if mouseover = options.delete(:mouseover) options[:onmouseover] = "this.src='#{path_to_image(mouseover)}'" options[:onmouseout] = "this.src='#{src}'" end tag("img", options) end
Computes the path to a video asset in the public videos directory. Full paths from the document root will be passed through. Used internally by video_tag to build the video path.
video_path("hd") # => /videos/hd video_path("hd.avi") # => /videos/hd.avi video_path("trailers/hd.avi") # => /videos/trailers/hd.avi video_path("/trailers/hd.avi") # => /trailers/hd.avi video_path("http://www.example.com/vid/hd.avi") # => http://www.example.com/vid/hd.avi
# File lib/action_view/helpers/asset_tag_helper.rb, line 289 def video_path(source) asset_paths.compute_public_path(source, 'videos') end
Returns an html video tag for the sources. If sources is a string, a single video tag will be returned. If sources is an array, a video tag with nested source tags for each source will be returned. The sources can be full paths or files that exists in your public videos directory.
You can add HTML attributes using the options. The options supports two additional keys for convenience and conformance:
:poster - Set an image (like a screenshot) to be shown before the video loads. The path is calculated like the src of image_tag.
:size - Supplied as "{Width}x{Height}", so "30x45" becomes width="30" and height="45". :size will be ignored if the value is not in the correct format.
video_tag("trailer") # => <video src="/videos/trailer" /> video_tag("trailer.ogg") # => <video src="/videos/trailer.ogg" /> video_tag("trailer.ogg", :controls => true, :autobuffer => true) # => <video autobuffer="autobuffer" controls="controls" src="/videos/trailer.ogg" /> video_tag("trailer.m4v", :size => "16x10", :poster => "screenshot.png") # => <video src="/videos/trailer.m4v" width="16" height="10" poster="/images/screenshot.png" /> video_tag("/trailers/hd.avi", :size => "16x16") # => <video src="/trailers/hd.avi" width="16" height="16" /> video_tag("/trailers/hd.avi", :height => '32', :width => '32') # => <video height="32" src="/trailers/hd.avi" width="32" /> video_tag(["trailer.ogg", "trailer.flv"]) # => <video><source src="trailer.ogg" /><source src="trailer.ogg" /><source src="trailer.flv" /></video> video_tag(["trailer.ogg", "trailer.flv"] :size => "160x120") # => <video height="120" width="160"><source src="trailer.ogg" /><source src="trailer.flv" /></video>
# File lib/action_view/helpers/asset_tag_helper.rb, line 414 def video_tag(sources, options = {}) options.symbolize_keys! options[:poster] = path_to_image(options[:poster]) if options[:poster] if size = options.delete(:size) options[:width], options[:height] = size.split("x") if size =~ %{^\d+x\d+$} end if sources.is_a?(Array) content_tag("video", options) do sources.map { |source| tag("source", :src => source) }.join.html_safe end else options[:src] = path_to_video(sources) tag("video", options) end end
Generated with the Darkfish Rdoc Generator 2.


JPacman Map Generator
Open map
Generate and Download
View on GitHub
Note: not all items available for all JPacman games


| Interface | Description |
|---|---|
| BookDetailsFragment.OnFragmentInteractionListener |
This interface must be implemented by activities that contain this
fragment to allow an interaction in this fragment to be communicated
to the activity and potentially other fragments contained in that
activity.
|
| DatePickerFragment.OnDateSelectedListener |
Interface used so that a different activity or fragment can call this and get the date.
|
| Rating |
This interface will be used by BorrowerRating and LenderRating
|
| RequestsOnBookFragment.OnListFragmentInteractionListener |
This interface must be implemented by activities that contain this
fragment to allow an interaction in this fragment to be communicated
to the activity and potentially other fragments contained in that
activity.
|
| SearchFragment.OnListFragmentInteractionListener | |
| SearchKeyWordsFragment.OnListFragmentInteractionListener | |
| TimePickerFragment.OnTimeSelectedListener |
Interface used so that a different activity or fragment can call this and get the time.
|
| Class | Description |
|---|---|
| AddEditBookActivity |
This activity will allow the user to add books to the database or edit a book already in it.
|
| AddEditBookTest |
Instrumented test, which will execute on an Android device.
|
| Address |
Represents a User's physical Address
|
| AddressClassTest | |
| Book |
This class holds all of the necessary data that defines a Book in BooKeep.
|
| BookClassTest | |
| BookDetailsActivity |
Displays the books details when a book is clicked
|
| BookDetailsActivityTest | |
| BookDetailsFragment |
A simple
Fragment subclass. |
| BorrowerRating |
This class will store the ratings and will calculate overall rating
The uuid for a rating will be the same as the user it is for
|
| DatePickerFragment |
This Fragment class is used to get a date picker.
|
| DownloadImageTask |
Downloads an image from a url and displays it as the book image
taken from https://stackoverflow.com/questions/6407324/how-to-display-image-from-url-on-android
|
| EditUserActivity |
This activity will display the users information (username, first name, lastname,
email and phone number.
|
| ExampleInstrumentedTest |
Instrumented test, which will execute on an Android device.
|
| ExampleUnitTest |
Example local unit test, which will execute on the development machine (host).
|
| FireBaseController |
Controller that can handle some firebase functionality
|
| GetLocationActivity |
This activity is used to setup a google map fragment.
|
| ImageViewActivity |
Sets and displays images assigned to books and users
|
| LenderRating |
Stores ratings and calculates overall ratings.
|
| LoginActivity |
Log in page that allows users to log in or sign up
|
| LoginActivityTest | |
| MainActivity |
Main activity of the app, users can navigate to all use cases from here
|
| NavDrawerTest | |
| NotificationHandler |
Creates notification channels
|
| PhoneNumber |
Creates a phone number object
|
| PhoneNumberClassTest | |
| RatingPopupActivity |
A pop up that allows rating of a user, needs to be passed the uuid and lender through the intent
|
| RawDump | |
| Request |
creates a request object
|
| RequestsOnBookFragment |
A fragment representing a list of Items.
|
| RequestsOnBookRecyclerViewAdapter |
RecyclerView.Adapter that can display a makes a call to the
specified RequestsOnBookFragment.OnListFragmentInteractionListener . |
| SearchActivity |
Searches books available
|
| SearchActivityTest | |
| SearchFragment |
Searches books available
|
| SearchKeyWordsFragment |
Searches books available
|
| SearchRecyclerViewAdapter |
Searches books available
|
| SearchUserPopupActivity | |
| SetLocationActivity |
This activity is used to setup a google map fragment.
|
| SetLocationActivityTest |
Instrumented test, which will execute on an Android device.
|
| SignUpActivity |
Activity that allows the user to sign up
|
| SignUpActivityTest | |
| TestActivity | |
| TestActivity2 | |
| TimePickerFragment |
This Fragment class is used to get a time picker.
|
| User |
The users of the app will all be associated with a user object.
|
| UserClassTest | |
| UserProfileActivity |
Displays a users profile, will allow editing that profile if it is the current user's
Needs to be passed the user profile to be displayed in the intent through uuid
|
| Enum | Description |
|---|---|
| BookStatus |
an enum of the status of a book
|


{% extends "base.html" %} {% block styles %} {{ super() }} {% endblock %} {% block app_content %}
Please confirm the exact location by clicking on the right spot to move the marker


Radical Optimism is a presentation on reason-based optimism about all of life:
Radical Optimism 2018 Presentation
Radical Optimism 2014 Presentation
Linux Core Dumps is presentation given at San Diego Toorcon 2015: Linux Core Dumps Presentation
Compiling from source is a presentation on compiling software from source code given to a Bitcoin Meetup in San Diego in August 2014: Compiling From Source Presentation.


One of the Python data structures is List. In Python, a list:
is ordered is mutable (elements inside can change) contains elements that can be accessed by index allows for duplicate elements can contain any arbitrary objects (integers, strings, lists, …) can be nested (can contain lists with more lists inside) is dynamic (can grow as needed)
We often have to store elements in a list and apply some processing to the values. Consider if we have a list of positive float values that we would like to scale between 0 and 1. When you want to do such processing, it is always a good idea to check the time-complexity (aka “Big O”) of list operations. As getting and appending elements operations in lists are in O(1), we can expect to solve the problem in O(n) by iterating through all the elements, and create a new list with the processed elements. You could do something like this:
import random
random_floats = [random.uniform(0,100) for _ in range(100)]
- def scale(values):
max_value = max(values) scaled_values = [] for value in values:
scaled_values.append(value/max_value)return scaled_values
However, we can do better in terms of code readability. List comprehensions provide a concise way to create lists. We could even say that they are one of the most important tools in a*Pythonista*’s toolbox. Moreover, using them will often lead to better performances. This is how we can rewrite our function:
def scale(values):
max_value = max(values)
return [value/max_value for value in values]
Furthermore, for the ones that love functional style, Python offers some functions which facilitate a functional approach to programming. Here is how we solve our problem with the map() and lambda functions:
def scale(values):
max_value = max(values)
return map(lambda x: x/max_value, values)
Be aware that this last approach will be different in Python 2 and Python 3. In Python 2, map() returns a list, whereas in Python 3, it returns an iterator that applies the function given as first argument, to every items in values.
Let’s now consider another example to be sure things are understood. We have now a list of float numbers, and we would like to get only the values that are higher than a threshold value. With a list comprehension, here is a function that does the trick:
def filter_threshold(values, threshold):
return [value for value in values if value > threshold]
And the functional approach:
def filter_threshold(values, threshold):
return filter(lambda x: x > threshold, values)
List comprehensions can be very useful, but sometimes they can be hard to understand. If you practice, you will get better at it, and it will simplify your Pythonic life. Here is a more complicated example:
nested_list = [[1, 2, 3], [1, 2], [1], [5, 4]]
flat_list = [item for sublist in nested_list for item in sublist]
Pay attention to the order in which the iteration variables are declared in the list comprehension, it is not very intuitive at first!
Finally, another common thing is to have several lists that we would like to combine and then iterate through them. Instead of doing two for loops, we could use the zip() function to do something like this:
for (value1, value2) in zip(list1, list2):
print(value1, value2)
On the contrary, if you have a list of tuples, you can unzip them by doing:
zipped_list = [(1, 2), (3, 4), (5, 6)]
unzipped_lists = list(zip(*zipped_list)) # -> [(1, 3, 5), (2, 4, 6)]
Be careful again, the output of zip() in an iterator. You will need to cast it as a list or iterate trough it. No need to understand much about iterators, we will leave that for another tip ;)


JavaScript Tutorial for Arrays in Tables
Where to start:
Let's start with the basics. First off we need to know what code to use: variables, functions, arrays and loops. all the good stuff. Also when you make JavaScript code, you want to know how to control the flow of that code.
Variables: Containers that you want to store values in. They are started with using the var keyword then the name of the variable. You can declare the variable and set a value to the name at the same time.
You call the variable by name when you want to get the value, like so:
You can also change the value of the variable by giving it another value later on, like this:
Variables have different data types that include:
Strings (var myVar = "Kevin";)
Numbers (var myVar = 25;)
Boolean (var myVar = true;)
Array (var myVar = ["Kevin", 25, "male", "The Doctor", true];)
Objects (var myVar = document.querySelector('h2'); and all the above too.)
You call the variable by name when you want to get the value, like so:
You can also change the value of the variable by giving it another value later on, like this:
Variables have different data types that include:
Strings (var myVar = "Kevin";)
Numbers (var myVar = 25;)
Boolean (var myVar = true;)
Array (var myVar = ["Kevin", 25, "male", "The Doctor", true];)
Objects (var myVar = document.querySelector('h2'); and all the above too.)
Arrays: Variables that contain more than one value but only have a single reference. For example:
Functions: Packages of functionality you add to your page, and want to reuse. When you want to use a procedure in different places in your code you call the function with it's name, instead of writing it out every single time. Like this:
Meshing of the Code: Now we get to mesh is all together into some functional code that actually does something we want it to do. First I'm going to start out with the table in the html document that will hold my array of Doctors.
With that in place we can now start out by declaring our variables/arrays.
Next thing we need to do is add the functions to add each element to the table data cells.
This set of code populates the table when the page loads, with the other functions.
With that in place we can now start out by declaring our variables/arrays.
Next thing we need to do is add the functions to add each element to the table data cells.
This set of code populates the table when the page loads, with the other functions.
When it's all done, it looks like this.
And here is the final product all together.
© Doctor Who copyright holders. |


#include <ui_cattlemanagementscreen.h>
◆ retranslateUi() [1/2]
| void Ui_CattleManagementScreen::retranslateUi |
( |
QDialog * |
CattleManagementScreen | ) |
|
|
inline |
◆ retranslateUi() [2/2]
| void Ui_CattleManagementScreen::retranslateUi |
( |
QDialog * |
CattleManagementScreen | ) |
|
|
inline |
◆ setupUi() [1/2]
| void Ui_CattleManagementScreen::setupUi |
( |
QDialog * |
CattleManagementScreen | ) |
|
|
inline |
◆ setupUi() [2/2]
| void Ui_CattleManagementScreen::setupUi |
( |
QDialog * |
CattleManagementScreen | ) |
|
|
inline |
◆ backButton
| QPushButton * Ui_CattleManagementScreen::backButton |
◆ labelTitle
| QLabel * Ui_CattleManagementScreen::labelTitle |
◆ queryButton
| QPushButton * Ui_CattleManagementScreen::queryButton |
◆ registerButton
| QPushButton * Ui_CattleManagementScreen::registerButton |
◆ removeButton
| QPushButton * Ui_CattleManagementScreen::removeButton |
◆ updateButton
| QPushButton * Ui_CattleManagementScreen::updateButton |
The documentation for this class was generated from the following file:


@(user: models.users.User) @main("Help", user) {
Learn how to create an account with JAS Basketball and take the first step into becoming apart of the JAS community by logging in for the first time.
Learn how to view your account details, make changes to your information if neccessary and delete your account from JAS Basketball.
Navigate our wide range of products with ease following these methods to find the products for you.
Walkthrough the steps it takes to purchase one of our products. Go from spotting that T-Shirt you like, to having it be sent to you in no time.
Walkthrough the process orders go through, learn how to cancel your order if it has'nt been sent out for delivery yet.
Learn how to give us your feedback on our products. We would love to hear you thoughts on what we have to offer.
 Aswell as like or dislike other messages.


@import io.TableWrappers.WRow @import java.time.Instant @import java.time.Duration @import generic.Utils @import views.Collector @import helpers.{nav, main} @(workspaces: Map[Long, WRow], collector: Collector = new Collector())(implicit request: RequestHeader) @collector.nav(nav(active = "home")) @collector.script { } @card(id: Int, w : WRow) = {
This is an in-progress diagrammatic theorem prover, based loosely on DIAMOND, a diagrammatic proof assistant created by Mateja Jamnik in 1997. The present version is an attempt to unify some existing languages, and add more sophisticated proof search and automation capabilities. For more information, see the link in the navbar above.


TEENAGER
Your browser does not support the audio element.

Your browser does not support the audio element.

GO BACK TO HOMEPAGE


The model we built in the drag-and-drop sction is as follow
$${MPG = -15.8379 - 0.4715\cdot cylinders - 0.0229\cdot horsepower + 0.0190\cdot displacement - 0.0063 \cdot weight + 1.4229 \cdot origin + 0.7525 \cdot year}$$
After building a multiple linear regression model, we need to check the residual plot to validate the model.
In this section of the tutorial, we will cover the reason why we need to check the residual plot, the code to check, and some multiple-choice questions.
We can simply get the residuals for each data point with this equation. $${\text{RESIDUAL} = y_{observed} - y_{predicted}}$$
For example, if a data point has a predicted value 15.2688 and the true observed MPG of 18, we can get the residuals by
$${\text{RESIDUAL} = 18 - 15.2688 = 2.7312}$$
Then we can get all residuals for each data point and plot it out as below:
From the plot, we can see the residual distribution of the model.
First, we add a new column which stores the predicted value.
df['predicted'] = # predicted value from the formula
After that, we can do the residual plot by using seaborn package.
import seaborn as sn
x = df['mpg']
y = df['predicted']
sn.residplot(x, y, color='g')
So what does this plot mean? We will tell you the insights below!
Given the residual plot, we can see the residuals show a U-shape pattern. That means linear model may not be the best model to fit the data.
If the residuals scatter randomly and show no pattern, then linear model will be a good fit.
However, if the residuals show some pattern(like U-Shape, etc.), then linear model will NOT be a good fit.
Given a residual plot of a linear model as below, is a linear model a good fit for the data?
If you have completed all the exercises, and or would like to move on, click on the button! Next Page


{% extends "layout.html" %} {% set active_page = "auth.login" %} {% block title %}Login{% endblock %} {% block content %} Login Login Confirmation Successfully Confirmed! Great! your account is ready to use. Please use the link below to login. Login {% endblock %}
Great! your account is ready to use. Please use the link below to login.
Login


Alexander Garcia
Username: AlexPR704
Followers: 12
Following: 16
Repo URL: https://api.github.com/users/AlexPR704/repos
Bio: Hey there, I am currently a student enrolled in UNCC Bootcamp to become a full stack developer. Feel free to look around.
Location: Gastonia, NC
Public Repos: 15