WITNESS LIST Public Safety Committee March 16, 1999-10:30A HB 317 For: Borchardt, Paul (Self and Wonderland Amusement Park) Thomson, Patrick (Self) Against: Elliott, Chris (Self and Texas Trial Lawyers Assc.) James, Reggie (Consumer Union SW Regional Office) HB 356 Against: Lee, Donald (Texas Conference of Urban Counties) On: Urbanousky, Ron (Texas Department of Public Safety) HB 525 For: Hufford, Ron (Texas Forestry Assc.) Kirk, Chris (Sheriff's Assc. Of Texas) Norsworthy, David (U.S. Forest Service) Phillips, Brent (Self) HB 821 For: Buchanon, Bree (Texas Council of Family Violence) Ybarbo, Ray (Texas Police Chiefs Assc.) Against: Lee, Robert (Self) Velte, Paul (Self and Peacable Texans for Firearm Rights) On: Fulmer, Valerie (Texas Department of Public Safety) Pitman, Robert (U.S. Department of Justice) HB 1059 For: Baker, Carol (Self) Borchardt, Paul (Self and Wonderland Amusement Park) Elliott, Chris (Self and The Lane Family) Lane, George (Self) On: Hanschen, John (Self and Outdoor Amusement Business Assc.) Reeser, Rose Ann (Texas Department of Insurance) HB 1188 For: Ybarbo, Ray (Texas Police Chiefs Association)


About Me
My name is Ami Negandhi. I am an artist and a teacher. This website is a sampling of the work that I have done over the past several years. You can contact me by email at<EMAIL_ADDRESS>Education & Career
I have a diploma in commercial art from Mumbai’s reputed Nirmala Niketan. After a short stint with an advertising agency, I moved on to teaching at Girton High School, which is also my alma mater. I was approached by Shishuvan School a few months later and offered a role as an art teacher. In the four years that I spent with them since then, I helped lay out the art and craft curriculum for new grades being introduced each year.
At present, I teach at the Daffodil International School in Pune.
Exhibitions
In July 2007, I moved on from Shishuvan and returned back to my art, spending time working on my paintings and photographs and exploring artistic styles and techniques.
During this period, I held an exhibition on the theme of Ganesha with fellow-artist Khimand Joshi at Pune’s Sanskriti Lifestyle art gallery. I also participated with the team at Texity Systems for Spandan – An Art Beat, an exhibition of photographs and paintings. Spandan was held in support of Eklavya, a school for underpriviledged children.


Chat with Assistant
Assistant
10:12 AM, Today
This is the home assistant. Describe how you are doing today.
Send


Welcome to the Umbraco installer. You see this screen because your Umbraco installation needs a quick upgrade of its database and files, which will ensure your website is kept as fast, secure and up to date as possible.
Simply click continue below to be guided through the rest of the upgrade


Consider a spatially uniform distribution function given by
|
| (80) |
where F0(vx) is a known velocity distribution function with number density being equal to those of ions, i.e., ∫ −∞+∞F0(vx)dvx = nion. Consider a case with zero electric ﬁeld, i.e.,
|
| (81) |
Then it is ready to verify that expression speciﬁed by Eqs. (80) and (81) is a equilibrium solution to Vlasov-Poisson system (Eqs. (75) and (79)).
In this note, two kind of equilibrium distribution functions will be considered. The ﬁrst one is the Maxwellian distribution given by
|
| (82) |
In this system, small perturbation will be damped by a mechanism known as Landau damping. The second kind of distribution considered is the two-stream Maxwellian distribution given by
|
| (83) |
In this system, small perturbation will give rise to an instability known as the two-stream instability.


He was a Swedish DJ, remixer, record producer, musician, and songwriter who specialized in audio programming, remixing, and record producing.
Here's a time line of Tim Bergling's life:
1989 - Tim Bergling was born in Stockholm on 8 September 1989, the son of
Klas Bergling and actress Anki Lidén. He started mixing in his bedroom at the age of eight.
He had three siblings: David Bergling, Linda Sterner, and Anton Körberg. Inspired by his brother,
who was also a DJ.
2007 - He began making music at the age of 16. In May 2007, Bergling signed on with the Dejfitts Plays label.
He was a member of the Laidback Luke Forums, where he refined his craft and, at times, demonstrated his distinct
deep house style.
2009 - Bergling was a prolific producer and was releasing music incredibly quickly.
His remixes during this period were "Sound of Now", "Muja", "Ryu" and "Even". Bergling explained that the name
Avicii means "the lowest level of Buddhist hell" and he chose the moniker because his real name was already
used upon creating his Myspace page.
2010 - Bergling released the hit song "Seek Bromance", which reached the top 20 in several countries,
including Belgium, France, the Netherlands, United Kingdom, and Sweden. He also remixed Nadia Ali's
classic single "Rapture" for her album Queen of Clubs Trilogy: Onyx Edition. In October 2010, Bergling signed with
the European A&R team with EMI Music Publishing.
2011 - Bergling's track "Fade into Darkness" was sampled by Leona Lewis on her single "Collide".
The sampling was not accredited and led to controversy as Bergling attempted to block the single's release.
The matter was resolved out of court, with "Collide" being made a joint release between Lewis and Bergling.
In October 2011, Bergling released "Levels", which launched him into the mainstream. "Levels" reached
the top ten in Austria, Belgium, Bosnia, Croatia, Denmark, Finland, Germany, Greece,
Ireland, Italy, the Netherlands, Slovenia and the United Kingdom, whilst topping the charts
in Hungary, Norway and Sweden.
2012 - His collaboration track "Sunshine" with David Guetta was nominated for a Grammy award under the
category for Best Dance Recording. On 23 March 2012, Bergling's unsigned single "Last Dance" was previewed
on Pete Tong's show on BBC Radio 1. The song was later released on 27 August 2012. At Ultra Music Festival
2012 in Miami, he premiered two tracks, "Girl Gone Wild" (Avicii's UMF Remix) with Madonna and "Superlove"
with Lenny Kravitz. Bergling's UMF Remix of "Girl Gone Wild" was released on 20 April 2012, and "Superlove"
with Kravitz was released on 29 May 2012. After reaching two million followers on Facebook, Bergling released
a new song titled "Two Million". It was put out as a free download on his official SoundCloud page. On 27 April
2012, Bergling released "Silhouettes". The song featured vocals from Salem Al Fakir and peaked at number 5
on the UK Dance charts and number 4 on the Billboard Hot Dance Club Songs.
2013 - On June, the world premiere of Bergling's new single, "Wake Me Up", was previewed by Pete Tong
on BBC Radio 1, featuring vocals from Aloe Blacc. The song was later released on iTunes and radio on 25
June 2013. It is the first single from Bergling's album True, which was released on 16 September 2013. "Wake Me Up"
was number 1 on the Spotify Global Chart and Bergling was at 2 in most streamed artist worldwide. "Wake Me Up"
later went on to set a then record of 14 weeks as the number one hit on Billboard's Dance/Electronic Songs list.
The Official Charts Company announced on 21 July that "Wake Me Up" had become the UK's fastest selling single of
2013
2014 - In July 2014, Bergling released his single "Lay Me Down". He also produced and collaborated with
Chris Martin from Coldplay, co-writing and co-producing the track "A Sky Full of Stars" from the band's sixth
studio album Ghost Stories, released on 19 May 2014. He also played and recorded the piano parts on the track.
"A Sky Full of Stars" was released on 3 May as the second single from Ghost Stories. "Lovers on the Sun",
a track Bergling co-produced with David Guetta, was released on 30 June 2014. Bergling also worked with
Wyclef Jean on a single titled "Divine Sorrow" for the Haitian singer's upcoming album Clefication.
2015 - On 3 July 2015, Bergling previewed two tracks from his album Stories on episode 37 of his LE7ELS
podcast: "Broken Arrows" featuring Zac Brown Band and "Can’t Catch Me" featuring Wyclef Jean and Matisyahu.
He also played a full version of his track "Heaven" and said that he was doing another track with
Chris Martin on vocals called "True Believer". Later, Bergling said that he is also singing on that track.
On 18 July 2015, it was announced by Bergling that he had finally finished production on Stories after
2 years of work.
2016 - On 29 March, Bergling announced on Facebook that he would be retiring from performing live
and touring in 2016.
2017 - In June 2017, British singer Rita Ora debuted a semi-acoustic version of "Lonely Together" at a
private event at Annabel's in London. "Lonely Together" was later the second single from Avīci (01).
From 13 July to 2 August, Bergling shared one-minute snippets on Instagram, captioned "New music coming
very very (very) soon!", with track titles as hashtags. Bergling uploaded teasers of each track
from the EP online upon release.
2018 - Bergling died on 20 April near Muscat at the age of 28. No cause of death was immediately given.
On 21 April, the Omani police stated that there was "no criminal suspicion" or evidence of foul play in
Bergling's death.


An Introduction to GitHub
Version Control
http://geek-and-poke.com/
Version Control
http://www.phdcomics.com
Git Basics
Repository
History
http://xkcd.com/
Git is a
Time Machine
https://upload.wikimedia.org
Branches
Git is a Creator of Parallel Worlds
https://c1.staticflickr.com/4/3098/2624785951_d90f2d7c62_b.jpg
Sharing
Github
What is it good for?
Makes open source collaboration easy and fun
The single best thing you can have in your resumé
Industry standard
Packed with useful features
Integrates with everything
www.github.com
http://blogs.law.harvard.edu/acts/files/2014/11/versioncontrol-allthethings.jpg
Useful Links
git-scm.com
try.github.io
github.com/werwty/github-overview
@werwty on pearlhacks2017.slack.com
Git Commands
https://pbs.twimg.com/media/CGGu9XYVEAENSHK.png
Git Blame
http://geek-and-poke.com/
Debugging Git
http://xkcd.com/
Pull Request


Welcome to my personal site. I wrote the site using Hugo, a static site generator written in Go. It’s been a great introduction to the Go template language. Hosting is done via static files published to Github pages.
I tried to make the site depend on as little JavaScript as possible. The only necessary JS is used to trigger the mobile menu view. Everything else was written using pure CSS and media queries. I used Sass to compile the CSS. The sass flex mixin was particularly helpful for generating the flexbox styling used in the photo albums.
I used gulp-image-resize in a gulp task to automatically generate thumbnails for images. This greatly improved page performance and kept the process relatively pain free. In the future, I will likely add automatic watermarking as well.


|
SourceLab
Version 0.9.0-363
Source It Out!
|
The sl_CList class provides lists. More...
Public Member Functions | |
| function | sl_CList (in varargin) |
| sl_CList class constructor | |
| function get | size (in obj) |
| Represents length of the list. | |
| function get | data (in obj) |
| Data base of the list. | |
| function | isEmpty (in obj) |
| Checks whether list is empty. | |
| function | at (in obj, in i) |
| Returns (an) item(s) at a specific position(s). | |
| function | subsref (in obj, in S) |
| Overloads get method for operator () | |
| function | subsasgn (in obj, in S, in value) |
| Overloads set method for operator () | |
| function | first (in obj) |
| Returns the item of the first position. | |
| function | last (in obj) |
| Returns the item of the last position. | |
| function | contains (in obj, in value) |
| Whether list contains an occurrence of value in the list. | |
| function | indexOf (in obj, in value) |
| Returns all index positions of the value in the list. | |
| function | append (in obj, in varargin) |
| Appends item(s);. | |
| function | prepend (in obj, in varargin) |
| Prepends item(s);. | |
| function | insert (in obj, in i, in varargin) |
| Inserts item(s);. | |
| function | mid (in obj, in pos, in length) |
| Copie parts of the list;. | |
| function | removeAll (in obj, in value) |
| Removes specified value from the list. | |
| function | removeAt (in obj, in i) |
| Removes specified value from the list. | |
| function | removeOne (in obj, in value) |
| Removes first occurence of specified value from the list. | |
| function | removeFirst (in obj) |
| Removes first item. | |
| function | removeLast (in obj) |
| Removes last item. | |
| function | replace (in obj, in i, in varargin) |
| Replaces item(s);. | |
| function | swap (in obj, in i, in j) |
| Removes specified value from the list. | |
| function | clear (in obj) |
| Clears the list. | |
| function | save (in obj, in filename) |
| ToDo. | |
Static Public Member Functions | |
| static function | Type () |
| Returns the type of the class. | |
| static function | Name () |
| Returns the name of the class. | |
| static function | load (in filename) |
| ToDo. | |
Public Attributes | |
| Property | data |
| Data base of the list. | |
| Property | size |
| Number of items in the list. | |
Private Attributes | |
| Property | m_datList |
| Holds the list array. |
The sl_CList class provides lists.
sl_CList is one of the generic container classes. It stores a list of values and provides access as well as insertions and removals.
| function sl_CList | ( | in | varargin | ) |
| function append | ( | in | obj, |
| in | varargin | ||
| ) |
Appends item(s);.
Append takes different input arguments. Option 1: append( value ); Inserts value at the end of the list. Option 2: append ( sl_CList other ); Appends the items of the value list to this list.
| varargin | different options (see descritpion) |
| function at | ( | in | obj, |
| in | i | ||
| ) |
Returns (an) item(s) at a specific position(s).
Returns the item(s) at index position(s) i in the list. i must be (a) valid index position(s) in the list (i.e., 0 < i <= size()).
| i | the index/indeces of item(s) which should be returned. |
| function clear | ( | in | obj | ) |
Clears the list.
Removes all items from the list.
| function contains | ( | in | obj, |
| in | value | ||
| ) |
Whether list contains an occurrence of value in the list.
Returns true if the list contains an occurrence of value; otherwise returns false. This function requires the value type to have an implementation of operator==().
| bool | true if the list contains an occurrence of value; otherwise false. |
| idx | indices where the value occurs. |
| function get data | ( | in | obj | ) |
Data base of the list.
Returns the data base of the list.
| function first | ( | in | obj | ) |
Returns the item of the first position.
Returns a the first item in the list. The list must not be empty. If the list can be empty, call isEmpty() before calling this function.
| function indexOf | ( | in | obj, |
| in | value | ||
| ) |
Returns all index positions of the value in the list.
Returns -1 if no item matched.
Returns all index positions of the value in the list. Returns -1 if no item matched.
| idx | indices where the value occurs. |
| function insert | ( | in | obj, |
| in | i, | ||
| in | varargin | ||
| ) |
Inserts item(s);.
Inserts value at index position i in the list. If i is 1, the value is prepended to the list. If i is size+1, the value is appended to the list.
Insert takes different input arguments. Option 1: insert( i, value ); Inserts value at position i. Option 2: insert( i, sl_CList other ); Insert the items of the value list to this list at position i.
| i | the index where value should be inserted. |
| varargin | different options (see descritpion) |
| function isEmpty | ( | in | obj | ) |
Checks whether list is empty.
Returns true if the list contains no items; otherwise returns false.
| function last | ( | in | obj | ) |
Returns the item of the last position.
Returns a the last item in the list. The list must not be empty. If the list can be empty, call isEmpty() before calling this function.
| static function load | ( | in | filename | ) | [static, inherited] |
| function mid | ( | in | obj, |
| in | pos, | ||
| in | length | ||
| ) |
Copie parts of the list;.
Returns a list whose elements are copied from this list, starting at position pos. If length is < 0, all elements from pos are copied; otherwise length elements (or all remaining elements if there are less than length elements) are copied.
| pos | starting copy position. |
| length | number of elements which should be coppied. |
| static function Name | ( | ) | [static, virtual] |
| function prepend | ( | in | obj, |
| in | varargin | ||
| ) |
Prepends item(s);.
Prepend takes different input arguments. Option 1: prepend( value ); Inserts value at the end of the list. Option 2: prepend ( sl_CList other ); Prepends the items of the value list to this list.
| varargin | different options (see descritpion) |
| function removeAll | ( | in | obj, |
| in | value | ||
| ) |
Removes specified value from the list.
Removes all occurrences of value in the list and returns the number of entries removed.
| value | The value which should be removed. |
| function removeAt | ( | in | obj, |
| in | i | ||
| ) |
Removes specified value from the list.
Removes the item at index position i. i must be a valid index position in the list (i.e., 0 < i <= size()).
| i | the index of the item which should be deleted. |
| function removeFirst | ( | in | obj | ) |
Removes first item.
Removes the first item in the list. Calling this function is equivalent to calling removeAt(1). The list must not be empty. If the list can be empty, call isEmpty() before calling this function.
| function removeLast | ( | in | obj | ) |
| function removeOne | ( | in | obj, |
| in | value | ||
| ) |
Removes first occurence of specified value from the list.
Removes the first occurrence of value in the list and returns true on success; otherwise returns false.
| value | The value which should be removed. |
| function replace | ( | in | obj, |
| in | i, | ||
| in | varargin | ||
| ) |
Replaces item(s);.
Replaces the item at index position i with value. i must be a valid index position in the list (i.e., 0 < i <= size()).
Insert takes different input arguments. Option 1: replace( i, value ); Replace value at position i. Option 2: replace( i, sl_CList other ); Replaces the items of the value list of this list at position i.
| i | the index where value should be inserted. |
| varargin | different options (see descritpion) |
| function save | ( | in | obj, |
| in | filename | ||
| ) | [inherited] |
ToDo.
ToDo ToDo
| obj | Instance of the class object |
| filename | ToDo |
Reimplemented from sl_IModel.
| function get size | ( | in | obj | ) |
Represents length of the list.
Returns the number of items in the list.
| function subsasgn | ( | in | obj, |
| in | S, | ||
| in | value | ||
| ) |
| function subsref | ( | in | obj, |
| in | S | ||
| ) |
Overloads get method for operator ()
Returns the item(s) at index position(s) (i) in the list. i must be (a) valid index position(s) in the list (i.e., 0 < i <= size()). It is equivalent to at(),
| S | the index/indeces of item(s) which should be returned. |
varargout the result of the indexed expression.
| function swap | ( | in | obj, |
| in | i, | ||
| in | j | ||
| ) |
Removes specified value from the list.
Exchange the item at index position i with the item at index position j. This function assumes that both i and j are at least 0 but less than size(). To avoid failure, test that both i and j are at least 0 and less than size().
| i | the index of the item which should be deleted. |
| static function Type | ( | ) | [static, virtual] |
| Property data |
Data base of the list.
Property m_datList [private] |
Holds the list array.
| Property size |
Number of items in the list.


To guide you in your integration with our services, we have prepared a checklist that you may follow while integrating.


Structures
The following structures are available globally.
-
An ASCII String of exactly 4 characters. A list of available titles can be found in Skarhoj’s protocol description under the column
See moreCMD
.Declaration
Swift
public struct MessageTitle: CustomStringConvertible
-
The resources of an atem
See moreDeclaration
Swift
public struct Topology: Serializable
-
Informs a controller that the preview bus has changed
See moreDeclaration
Swift
public struct PreviewBusChanged: Serializable
-
Informs a controller that the program bus has changed
See moreDeclaration
Swift
public struct ProgramBusChanged: Serializable
-
Informs the switcher that it should update its transition position
See moreDeclaration
Swift
public struct ChangeTransitionPosition: Serializable
-
Informs the controller that the transition position has changed
See moreDeclaration
Swift
public struct TransitionPositionChanged: Serializable
-
Undocumented
See moreDeclaration
Swift
public struct LockRequest: Serializable
-
Undocumented
See moreDeclaration
Swift
public struct LockChange: Serializable
-
Undocumented
See moreDeclaration
Swift
public struct LockObtained: Serializable
-
Informs a controller that the some tally lights might have changed.
See moreDeclaration
Swift
public struct SourceTallies: Serializable
-
Describes the state of a tally light. Possible values are
.off
.program
.preview
- both
.program
&.preview
Declaration
Swift
public struct TallyLight: OptionSet, CustomDebugStringConvertible


{%extends 'registration/base.html'%} {%block title%}Log Out{%endblock%} {%block head%} {%endblock%} {%block content%}


--- tags: [articles] layout: post uuid: d1a25dd8-9c59-11e0-9d88-525400e84d96 title: Journey to the Middle of the World teaser: This is me straddling the (alleged) equator. The northern hemisphere is on the right, and the southern hemisphere on the left. teaser-img: equator ---
I took a day trip from Quito to the equator (from which Ecuador takes its name) with a very friendly British couple (Lewis and Sara).
Apparently the equator makes it possible (or easier) to balance an egg, because of the opposing forces. In fact, the guide claimed all sorts of things are different at the equator: our weight, our strength, the direction water spirals, etc. I’m quite skeptical of all these claims, though I did manage to balance an egg on a nail.


We are a group of enthusiastic engineers striving to facilitate aspiring and fellow engineers to reach the zenith! A desire to acquire and share drives our cause....hitch a ride on BlinkingBrain and you'll definitely end up closer,if not more, to fulfilling your ambition as an engineer!.
I am an enthusiastic software engineer and a philosopher. I like to build new technology and play around. Currently working in Medibox R&D, Bangalore as Software Engineer


VTOE
VTOE
Tracker
Visualize
Historic Data
Fault count at different stack levels
Fault count at different rotater levels
Number of faults detected per batch
Number of parts processed per batch
Number of faults detected per hour
Number of parts processed per hour


Antonio Brown Drops New YouTube Video Passionately Speaking Out On NFL Investigation (VIDEO)
by Darrelle LincolnAntonio Brown met with the NFL last week and seriously hopes the next step from here is getting back to playing football. The NFL and Brown had a meeting that lasted eight hours concerning the sexual assault allegations filed against him back in September.
Even if the interview/meeting went well, that doesn’t mean Brown will see the field again this season as his legal issues will seemingly keep him off a team for the remainder of the 2019 season.
In the meantime, the former Pittsburgh Steelers and New England Patriots wide receiver took to Twitter over the weekend to say “It’s Sad they make us guilty til proven innocent system not for us it’s against us ! Lie on my name provide all this shame then I suppose to just return to your game.”
He also dropped a video of himself training and answering whether or not he’ll play in the league again.


Demo Contest
The demo contest will be available for our competitors to test the system. You can login to the system by using the username and password that has been sent to your e-mail addresses. Scores that you will earn in the demo contest will not effect your status in the competition. You can use "Clarification" tab if you have a problem about the usage of the system. We will gladly answer all of your questions. The demo contest will start at {{test.time}}.


--- layout: post title: Rough storyboard date: '2018-01-12T11:30:33+01:00' categories: - Storyboards picture_url: https://film-Storyboards.tumblr.com/post/169622707094/rough-Storyboards ---


Work off some steam after class and meet new friends by joining an intramural sports league or sports club.
How to find Intramural Leagues—The UI Division of Recreation Services helps coordinate about 30 intramural leagues for students interested in individual and team sports such as flag football, billiards, and sand volleyball.
How to find Sports Clubs—There are more than two dozen sports clubs recognized by the UI Division of Recreational Services, including clubs for Aikido, chess, lacrosse, rugby, soccer, and water polo.
Student Organizations
Several student organizations focus on extracurricular athletic activity, too. Examples include the Ski & Snowboarding Club and the Iowa Hapkido Club.
Student Organizations
Register your PICK ONE! choice by October 1
Log in with your Hawk ID and password to register your PICK ONE! activity by October 1.
Register Your PICK ONE!


{% extends "header.html" %} {% block body %}
import random import time import matplotlib import matplotlib.pyplot as plt from matplotlib import style style.use("ggplot") broke_count = 0 totalFunded = 0 totalEnding = 0 wins = 0 losses = 0 def Labouchere(): global broke_count global totalFunded global totalEnding global wins global losses starting_funds = 100 totalFunded += starting_funds goal = 10 system = [1,1,1,1,1,1,1,1,1,1] #system = [1,2,2,3,2] profit = 0 current_funds = starting_funds wagerSizes = [] plot_funds = [] not_broke = True wins = 0 losses = 0 while profit < goal and not_broke: if len(system) > 1: size = system[0]+system[-1] wagerSizes.append(size) plot_funds.append(current_funds) else: size = system[0] wagerSizes.append(size) plot_funds.append(current_funds) if current_funds <= 0: not_broke = False broke_count += 1 losses += 1 elif current_funds - size <= 0: size = current_funds not_broke = False broke_count += 1 dice = random.randrange(1,101) if dice < 51: losses += 1 system.append(size) current_funds -= size profit = current_funds - starting_funds else: wins += 1 current_funds += size profit = current_funds - starting_funds if profit != goal: try: del system[0] del system[-1] except: pass wagerSizes.append(size) plot_funds.append(current_funds) totalEnding += current_funds s1.plot(wagerSizes) s2.plot(plot_funds) f = plt.figure() s1 = f.add_subplot(211) s2 = f.add_subplot(212) sample_size = 10000 for x in range(sample_size): Labouchere() #print("Winners:",wins,"losers:",losses) print(totalFunded, totalEnding) print("Broke Percentage:", ((float(broke_count)/sample_size))*100.0) plt.show()
Outcome:
1000000 1000456 Broke Percentage: 10.41
That's all for this tutorial series. For more Python tutorials, head to the


View driven accordeon
The Extension Library features a Dojo Accordion control. In the sample application the panels and their content are created static using
Working my way backwards I first designed the format for the SSJS I need for the menu and then how to generate this format from an categorized view. The format that suited this need looks like this:
In a live application, the
This child then contains one
In theory that all looks brilliant, except the inner repeatTreeNode would not get access to the repeat variable from the parent basicContainerNode.
This has been accnowledged as a bug and is tracked as SPR # MKEE9SKENK
(I'm, inside IBM, outside the development team, the undisputed XPages SPR champion).
So a little hack was necessary to make that menu work.The result is this:
The panel above the accordeon is to manage the cache of my menu code.
Depending on most use cases the menu is quite static and it doesn't make sense to read and read and read it from the database.
The clear button belongs to an admin panel, so after a menu edit, the cache can be cleared there.
Also using the
In my SSJS I read the whole view based on the view name. In your application you might hardcode the view and use the name to lookup a category of entries and render only the subentries. Whatever suits you.
As you can see, I use a naming convention that would allow me to swap the SSJS out for a managed bean. I strongly encourage you to follow this.
Enjoy - and as usual YMMV
xe:basicContainerNode
and xe:basicLeafNode
. A customer asked: " Can I populate the accordion using view entries?"
Working my way backwards I first designed the format for the SSJS I need for the menu and then how to generate this format from an categorized view. The format that suited this need looks like this:
[
{ name : "Level 1"; items : ["red 1":"blue 1":"green 1"]},
{ name : "Level 2"; items : ["red 2":"blue 2"]},
{ name : "Level 3"; items : ["red 3":"green 3"]}
]
In a live application, the
items
rather would be objects with a label and an action ( items : [{"label": "red 2", "action" : "paintred"}:{"label" : "blue 2", "action" : "playBlues" }]
) or URL, but for the demo a string is sufficient. I created a accordeon with a xe:repeatTreeNode
containing a xe:basicContainerNode
as sole child element (which would repeat).
This child then contains one
xe:repeatTreeNode
that would again contain one xe:basicContainerNode
as sole child (which again would repeat).
In theory that all looks brilliant, except the inner repeatTreeNode would not get access to the repeat variable from the parent basicContainerNode.
This has been accnowledged as a bug and is tracked as SPR # MKEE9SKENK
(I'm, inside IBM, outside the development team, the undisputed XPages SPR champion).
So a little hack was necessary to make that menu work.The result is this:
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core"
xmlns:xe="http://www.ibm.com/xsp/coreex">
<xp:this.resources>
<xp:script src="/MenuTools.jss" clientSide="false"></xp:script>
</xp:this.resources>
<xp:panel>
<xp:text escape="true" id="computedField1"
value="#{javascript:sessionScope.menuList}">
</xp:text>
<xp:button value="Clear cache" id="button1">
<xp:eventHandler event="onclick" submit="true"
refreshMode="complete">
<xp:this.action><![CDATA[#{javascript:sessionScope.remove('menuList');}]]></xp:this.action>
</xp:eventHandler></xp:button>
</xp:panel>
<xe:accordion id="accordion1" style="width: 400px; height:600px">
<xe:this.treeNodes>
<xe:repeatTreeNode var="tree" indexVar="index"
value="#{javascript:menuTools.getMenu(database,'Menu');}">
<xe:this.children>
<xe:basicContainerNode>
<xe:this.label><![CDATA[#{javascript:requestScope.currNode = tree; tree.name}]]></xe:this.label>
<xe:this.children>
<xe:repeatTreeNode var="subtree"
indexVar="subindex"
value="#{javascript:requestScope.currNode.items}">
<xe:this.children>
<xe:basicLeafNode
label="Leaf #{subtree}">
</xe:basicLeafNode>
</xe:this.children>
</xe:repeatTreeNode>
</xe:this.children>
</xe:basicContainerNode>
</xe:this.children>
</xe:repeatTreeNode>
</xe:this.treeNodes>
</xe:accordion>
</xp:view>
The panel above the accordeon is to manage the cache of my menu code.
Depending on most use cases the menu is quite static and it doesn't make sense to read and read and read it from the database.
The clear button belongs to an admin panel, so after a menu edit, the cache can be cleared there.
Also using the
applicationScope
will improve performance, since only the very first user of the application will actually read the database.
In my SSJS I read the whole view based on the view name. In your application you might hardcode the view and use the name to lookup a category of entries and render only the subentries. Whatever suits you.
var menuTools = {
"getMenu" : function(nsf:NotesDatabase, menuName:string) {
/*Checks cache first could be session or applicationScope*/
if (!sessionScope.menuList) {
sessionScope.put("menuList", new java.util.HashMap());
}
if (sessionScope.menuList.containsKey(menuName)) {
return sessionScope.menuList.get(menuName);
}
/*Retrieves menu entries based on a view name*/
var v:NotesView = nsf.getView(menuName);
var vn:NotesViewNavigator = v.createViewNav();
var ve = vn.getFirst();
var result = [];
while (ve != null) {
var nextVe = vn.getNextSibling(ve);
var lineResult = {};
lineResult.name = ve.getColumnValues()[0];
lineResult.items = [];
var child = vn.getChild(ve);
while (child != null) {
var nextChild = vn.getNextSibling(child);
lineResult.items.push[child.getColumnValues(](1));
child.recycle();
child = nextChild;
}
result.push(lineResult);
ve.recycle();
ve = nextVe;
}
try {
vn.recycle();
v.recycle();
} catch (e) {
print(e);
}
// Save it to the cache
sessionScope.menuList.put(menuName, result);
return result;
}
}
As you can see, I use a naming convention that would allow me to swap the SSJS out for a managed bean. I strongly encourage you to follow this.
Enjoy - and as usual YMMV
Posted by Stephan H Wissel on 08 January 2015 | Comments (0) | categories: XPages