|
|
Batch Files- Emulate Server Console
|
The UniController command console opens a command window with environment variables preconfigured. This command window allows you to run PHP scripts without specifying the full path to php.exe If you find this command window too restrictive an alternative is to create your own. The following page covers emulating UniController to open a command console using a batch file. Although specific to Uniform Server some of the code snippets are applicable to other applications.
Background
Opening a standard command prompt (for details see How to run a standard command window) has one major disadvantage, its environment is inherited. If the inherited environment is missing environment variables a application requires, that application will fail. This is true for Uniform Server which is portable and does not change the host environment.
A standard command prompt inherits all top-level variables. These can be created or changed by a user performing specific operating system tasks. This process is made difficult on purpose to prevent inadvertent changes and to avoid variable clutter. The inherited environment is a copy and easily changeable. At the command prompt you can add new environment variables and change inherited ones to create a new environment. This new environment is passed to applications started from the command prompt. Similarly an application can create a new environment and pass it to other applications it runs.
Important note: A child process (application) cannot change a parents environment variables. A child process can change only the copy (snapshot of the current environment) it inherits from a parent.
Overview
To emulate UniControllers command console we can use the above to our advantage. The following lists basic requirements:
- Run a batch file – Inherits environment.
- Locate batch file in folder UniServerZ. - Suitable location for portability and reference.
- Allow batch file execution from another application for example another batch file.
- Manipulate the inherited environment.
- Path environment variable. Add full path to folder containing php.exe file.
- Path environment variable. Add other full paths as required.
- Set new environment variables.
- HOME environment variable. Full path to folder UniServerZ - Folder separator back slash
- US_ROOTF environment variable. Full path to folder UniServerZ - Folder separator forward slash
- Set any other new environment variables as required.
- Open a new command window – Inherits our new environment.
- Runs batch file command cmd.
- Close batch file.
Note: Highlighted elements allow running of PHP CLI scripts.
Basic batch file
In folder UniServerZ create a new file named run_cmd.bat with the following content:
|
Comments
A) The batch file command "@echo off" prevents displaying of command lines.
B) The batch file command pair "pushd %~dp0" and "popd" apart from saving and resorting a callers location forces current working directory to the location of the file containing the command pair.
C) The HOME environment variable is set to the current working directory.
D) The US_ROOTF environment variable is set to the current working directory (%HOME%).
E) The line “set US_ROOTF=%US_ROOTF:\=/%” converts backslashes to forward slashes.
F) The FOR IN DO loop reads the user configuration file us_user.ini and obtains the selected PHP version and sets environment variable PHP_SELECT.
G) The "Path" environment variable is modified to include path to php.exe
H) Command prompt is opened by "cmd". The parameter "/k" keeps the command prompt window open. Commands "cls" clears the window content, "title" sets the window title name and "color" sets the background colour.
|
|
run_cmd.bat
@echo off
rem ### working directory current folder
pushd %~dp0
rem ### set variables
set HOME=%cd%
set US_ROOTF=%HOME%
set US_ROOTF=%US_ROOTF:\=/%
set CFGF=%HOME%\home\us_config\us_user.ini
rem ### Get PHP version selected
FOR /F "TOKENS=1,2 delims==" %%A IN (%CFGF%) DO If %%A==PHP_SELECT Set PHP_SELECT=%%B
rem ### Set path to php.exe
set Path=%HOME%\core\%PHP_SELECT%;%Path%
rem ### open command prompt
cmd.exe /k "cls & title Uniserver emulated console & COLOR B0"
:END
rem ### restore original working directory
popd
|
Test
Run the batch file by double clicking on file run_cmd.bat, a command window opens. Type "set" without the quotes into this window.
- Inherited environment variables are displayed.
- Confirm new variables HOME and US_ROOTF show full path to folder UniServerZ and file separators are back slashes and forward slashes respectively.
- Chack path displays full path to php.exe and original path is appended.
Note: Variables HOME and US_ROOTF are used in Uniform Server PHP configuration files (for example php-cli.ini).
--oOo--
|


| {{head}} | |||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| {{ i + 1 }} | {{workpermit.date | date: 'shortDate'}} | {{workpermit.date | date: 'shortTime'}} | {{workpermit.ticket?.ticket_code}} | {{workpermit.safety_or_concerns}} | {{workpermit.safety_access}} | {{workpermit.scope?.name}} | {{workpermit.department?.name}} | {{workpermit.supervisor?.username}} | {{workpermit.project_manager?.username}} | {{workpermit.hod?.username}} | {{workpermit.communication_plan?.name}} | {{workpermit.safety_officer?.username}} |
| Appendix to: Communications Procedure | Reference: {{Permit?.ref_number}} |
| Revision Number:02 | {{Permit?.date | date}} |
| Requester to fill this section | |||
| Requester(name & tel .) {{Permit?.approval?.requester?.name}} | Department / role assigned:{{Permit?.department?.name}} | Permit Start Date - hrs:{{Permit?.start_datetime | date:'short'}} Permit End Date - hrs:{{Permit?.end_datetime | date:'short'}} |
|
| Certifications for work (attach copies where applicable) | |||
| Amenities | |||
| Nearest Hospital: (Name):{{Permit?.communication_plan?.nearest_hospital}} (Tel):{{Permit?.communication_plan?.nearest_hospital_phone}} |
Nearest Police station: (Name):{{Permit?.communication_plan?.nearest_police}} (Tel):{{Permit?.communication_plan?.nearest_police_phone}} |
Security & Access: W.O/T.T:{{Permit?.safety_access}} |
|
| Permits required(permits must be valid when job is scheduled) | |||
| Protective equipment ( share clear photos of workers on site wearing them) | |||
| Safety/Environmental concerns | |||
| {{Permit?.safety_or_concerns}} |
*PPE should be specific to the task
I declare that the workers are in good health condition and free from alcohol/drug abuse and good working conditions provided
(Review Application,Working,Withdrawal,Closing Out & Audit)
| PREPARED BY: Phanuel Dianga (EHS Manager) |
APPROVED BY: Benard Njoroge (CEO) |


Campus Food Map
University of Wisconsin-Madison
About
|
More info
Search
See all
Types of eateries
Restaurants
Market & cafes
Dining halls
Other
Coffee
Ice cream
Sustainable options
Local food
Fairtrade
Vegetarian
Composting
Recycling
Reusable kitchenware
Reusable mug discount
What do these symbols mean?
Map by
Masrudy Omri
.


Choose who you want to attend your session
9 suppliers are interested in your project. You said you can invite {{data["session-quantity"]}} suppliers to your session.
9 suppliers are interested in your project. You said you can invite {{data["session-quantity"]}} suppliers to your session.


Ice Storm, The (1997) http://us.imdb.com/Title?Ice+Storm,+The+(1997)
Rating: 9 out of 10 (alternate scale: ****1/2)
_The Ice Storm_ is perhaps the first movie ever to have taken a long, probing look at the Sexual Revolution of the 1970s, and then decided to unwaveringly condemn it for what it was: an infantile exercise in sexual adventure that ultimately destroyed families. It might strike some as ironic (or distasteful) that it took a foreign director, the masterful Ang Lee, to expose America's Nixon-era social shortcomings, but he does it with the evenhanded objectivity that only a spectator of the game could hope to enjoy, creating in the process a truly remarkable piece of filmmaking.
In the opening scene, as the sun comes up over an ice-beaten Connecticut railway line, we are led to believe that this will be a story about the blows that family members deal one another without even knowing, or meaning it. Instead, the focus here is on pain: profound, all-encompassing pain. In this bleak Connecticut autumn, everyone is a victim, and the victimisation is as deliberate and inescapable as it is pervasive. There are no pointed fingers, no convenient scapegoats. There is no one without sin here, and no one whose sins go unpunished. Far from engaging in the naive outrage of the day at a corrupt system spinning out of control, the film takes a detached historical perspective of events, resigned to a tacit approval of those horrors of modern society which constitute its characters' greatest fears. This film reminds all of us that we have stopped wincing at our convictionless environment. It has become normal.
The inept, halfhearted extramarital misadventures of the affluent Silent Generation parents of New Canaan, Connecticut eerily mirror the hesitant sexual explorations of their children.  The traditional familial roles of parent and child have been reversed; not in order to conform to some clever poetic device, but because that is what actually went on in the American households of the early seventies. The inference is clear: something is rotten in the state Connecticut.
The entire cast functions perfectly together, a large and incomprehensibly complex machine that brings to fruition the film's desolate theme. Kevin Kline drives his character, the disconsolate adulterer Benjamin Hood, with boundless, naked talent. He stares, dead-eyed, out the window of his concrete tower high above New York; he carries his daughter in his arms through the forest, determined, intense; drunk, at a party, he sits, sullen and withdrawn, but never, ever idle. Benjamin Hood is a selfish man, but he takes no pleasure from life; indeed, nor do any of the characters: they all smile, at one point or another, but these are but temporary glimpses of what a happy life could be like, and in the face of all that is going wrong, these moments do not last long. The chill, wet air, `the molecules,' as Mikey Carver (played with touching innocence by Elijah Wood) says, seem to cast a palpable pall over everyone and everything in New Canaan. Joan Allen's finely-wrought, intelligent portrayal of Benjamin's wife, Elena, fuming impotently at the wrongs done her, provides the perfect compliment to Kline's character. Christina Ricci turns in what is certainly the most flawless and fully-realised performance of her young career, as the Hoods' inquisitive and opinionated daughter, Wendy. This girl is a complete, believable person whose anguish spills out onto the screen in great torrents.
_The Ice Storm_ is a film that had to be made. It provides no easy answers to its characters' problems; it solves nothing. But perhaps it stands as a warning against allowing the social and psychological mismanagement of an entire generation of North American children to ever again occur.
<EMAIL_ADDRESS>The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Mathew Mozaffari
500697826
First name:
How happy are you with my work?
1
2
3
4
5
What is your favourite superhero?
Spiderman
Batman
Hulk
Captain America
Superman
Wonder woman
Aquaman (are you sure??)
None, I'm Lame


This is an example of a static tooltip. It will appear when the page is loaded until dismissed. It is useful for giving the user information about a specific control.
Static tooltips can be added to elements to give the user detailed instructions on the purpose of the control when they first
navigate to the page. They are created using a popover and manually
controlling the open state by using the isOpen
attribute and removing the default showTriggers
and hideTriggers
.
The following code can be used to create the example above:


Fort William is situated well inland at the head of Loch Linnhe, at the western end of the Caledonian Canal.
The anchorage off the pier is exposed from SW, through N to NE winds. Inside the canal is more sheltered and off Corpach Basin might be more sheltered. There is a waiting pontoon here. See Caledonian Canal for more details on the sea locks and the canal.


Personal Informations
- Name: Sunus Lee
- Sex: Male
- Age: 23
- Current Location: Tianjin, China
Contact Information
- Phone: +086 [Hidden]
- E-mail: [Hidden]
Education Background
- School: Tianjin Polytechnic University, Software Engineering
- English: CET-6
Experiences
- 2012.6 ~ 2013.1(Intern)
- In Beijing Cloud Valley, working as developer.
- 2013.2 ~ Now
- Leading a small cloud computing team (formed by students) in Tianjin Polytechnic University.
Skills
Linux
- Got the first experience with Linux in 2009, till now working on full linux environment for some years. Have some knowledges for main distributions (RedHat/Debian/Arch), also got the ability to write the proper scripts(shell/python) to do the necessary small automatic tasks. Besides, I also have the experiences in Server, Networking Configuration/Troubleshooting. Right now, I am using ArchLinux & OS X.
Programming Languages
- C, Start using C since 2009, Most of my C codes are written under Linux environment and got quite deep understanding in C.
- Python, The second language i’ve learned and used since 2011, still use Python frequently till now. Familiar with basic and most-used modules(built-in and third-part). Also have the basic knowledge and experiences in Python Web Frameworks.(Django/Flask)
- Ruby, The third language i learned in 2012, now write ruby on rails codes for my own App Project.
- Javascript, I learned it along with Ruby for my App Project and also use it quite often for some other projects. Have experience in Javascript itself and some frameworks like JQuery as well.
- Shell, Got the ability to write the proper scripts(shell/python) to do the necessary small automatic tasks.(Maintain, Sync, Small tools)
- SQL, Basic SQL and database design skills.
Some other stuffs
- Strong ability and desire to learn new skills.
- Good coding style in every language i’ve used.
- Strong ability to read and write English comments/manuals/docs/.
- Ability to acquire necessary informations from sites like http://stackoverflow.com , http://github.com
- Love Open Source & Linux
Recent Projects
Ovirtnode-Config-Setup
- URL https://github.com/sunuslee/ocsetup
- My work at Cloud Valley, re-write Redhat’s Ovirtnode-config-setup with PyGtk. It’s a configuration tool for Ovirt node.
Find-the-one
- URL http://sunus.me/fto
- Source Code https://gitcafe.com/sunuslee/find-the-one
- Description(Chinese) http://www.guokr.com/post/458445/
- Small Web App wrote in 2012, for guokr.com. Use it to search infos in Guokr.com’s group. written in Python with Django and some front-end stuffs.
Vim-Plugins(Write those for fun and based on my needs)
ColorSchemePicker
- URL http://www.vim.org/scripts/script.php?script_id=4319
- Source Code https://github.com/sunuslee/vim-plugin-random-colorscheme-picker
- Wrote in later 2012, the plugin can apply a random Colorscheme everytime you open a file.
show-git-log
- URL http://www.vim.org/scripts/script.php?script_id=4307
- Source Code https://github.com/sunuslee/vim-plugin-show-git-log
- Show a file’s git log in a split windows.
MIT6.828 JOS COURSE
- URL http://pdos.csail.mit.edu/6.828/2010
- Source Code https://github.com/sunuslee/sunus_jos
- It’s a online course i took in 2010, writing a some unix-like operating system with the basic functions. It involves with boot-up, Memory Managment, Interrupt and Exception handling, Process scheduling and Inter Process Communication and File System. Most codes arc written in C.
Tianjin Polytechnic University Cloud Computing Team (OpenStack)
- URL http://<IP_ADDRESS>/
- 2013.3~Now As Leader
- Setting up the environments and team wikis.
- Got the basic knowledge in OpenStack
- Recruiting new guys.
- Some other stuffs.(docs, papers, etc)
SNS infos
- Github: https://github.com/sunuslee
- Gitcafe: https://gitcafe.com/sunuslee
- Zhihu.com http://www.zhihu.com/people/sunus
- Blog: http://sunus.me


Please login to your Google account to get access to the game. Check to see if popups are blocked.


disaster response earth observation geospatial natural resource satellite imagery sustainability
An ongoing collection of satellite imagery of all land on Earth produced by the Landsat 8 satellite.
New Landsat 8 scenes are added regularly as soon as they are available.
There are no restrictions on the use of data received from the U.S. Geological Survey's Earth Resources Observation and Science (EROS) Center or NASA's Land Processes Distributed Active Archive Center (LP DAAC), unless expressly identified prior to or at the time of receipt. More information on licensing and Landsat data citation is available from USGS.
https://docs.opendata.aws/landsat-pds/readme.html
See all datasets managed by Planet.
https://lists.osgeo.org/mailman/listinfo/landsat-pds
arn:aws:s3:::landsat-pds
us-west-2
aws s3 ls s3://landsat-pds/ --no-sign-request
arn:aws:s3:::landsat-pds/part1
us-west-2
aws s3 ls s3://landsat-pds/part1/ --no-sign-request
arn:aws:s3:::landsat-pds/part2/
us-west-2
aws s3 ls s3://landsat-pds/part2/ --no-sign-request
arn:aws:sns:us-west-2:274514004127:NewSceneHTML
us-west-2
arn:aws:s3:::landsat-pds-inventory
us-west-2
aws s3 ls s3://landsat-pds-inventory/ --no-sign-request


This class implements the session, which is a collection of different actions executed sequentially The user is able to create interactivly the session then save it load it and execute it.
More...
|
|
def | __init__ |
| | This is the constructor.
|
| |
|
def | available_actions |
| | This is the getter function for the attribute available_actions, this attribute holds all the possible actions that the user can instanciate.
|
| |
| def | add_action |
| | This method add an action to the current session. More...
|
| |
| def | add_action_from_str |
| | This method gets an input action name and finds the correspoding modules, makes an istance and adds it to the session. More...
|
| |
| def | remove_action |
| | This function removes the given function from the session. More...
|
| |
|
def | execute |
| | This function executes the whole session.
|
| |
| def | save |
| | This function saves the current session. More...
|
| |
| def | load |
| | This method initialize a fresh session from a given json session. More...
|
| |
| def | get_file_path_from_name |
| | This function retunrs the file path for the given action name. More...
|
| |
|
def | swap_action |
| | This function swap an action up and down.
|
| |
|
|
| actions |
| | Attribute holding all the actions created in the session.
|
| |
This class implements the session, which is a collection of different actions executed sequentially The user is able to create interactivly the session then save it load it and execute it.
| def masterreload.session.ActionSession.add_action |
( |
|
self, |
|
|
|
my_action |
|
) |
| |
This method add an action to the current session.
- Parameters
-
| my_action | Action, the action you wish to add to the session |
| def masterreload.session.ActionSession.add_action_from_str |
( |
|
self, |
|
|
|
action_name |
|
) |
| |
This method gets an input action name and finds the correspoding modules, makes an istance and adds it to the session.
- Parameters
-
| action_name | str , the name of the action to add |
| def masterreload.session.ActionSession.get_file_path_from_name |
( |
|
self, |
|
|
|
name |
|
) |
| |
This function retunrs the file path for the given action name.
- Parameters
-
| name | str, the action you want the path of |
- Returns
- str
| def masterreload.session.ActionSession.load |
( |
|
self, |
|
|
|
path = None |
|
) |
| |
This method initialize a fresh session from a given json session.
- Parameters
-
| path | str, the path to the json file in which the session is stored |
| def masterreload.session.ActionSession.remove_action |
( |
|
self, |
|
|
|
my_action |
|
) |
| |
This function removes the given function from the session.
- Parameters
-
| my_action | : the action istance you wish to remove |
| def masterreload.session.ActionSession.save |
( |
|
self, |
|
|
|
path = None |
|
) |
| |
This function saves the current session.
- Parameters
-
| path | str, where to save the session, if arg not given a pop up will show up |
The documentation for this class was generated from the following file:


If you require any more information or have any questions about our site's disclaimer, please feel free to contact us by email at<EMAIL_ADDRESS>All the information on this website - http://www.roorkee.org - is published in good faith and for general information purpose only. roorkee.org does not make any warranties about the completeness, reliability and accuracy of this information. Any action you take upon the information you find on this website (roorkee.org), is strictly at your own risk. roorkee.org will not be liable for any losses and/or damages in connection with the use of our website.
From our website, you can visit other websites by following hyperlinks to such external sites. While we strive to provide only quality links to useful and ethical websites, we have no control over the content and nature of these sites. These links to other websites do not imply a recommendation for all the content found on these sites. Site owners and content may change without notice and may occur before we have the opportunity to remove a link which may have gone 'bad'.
Please be also aware that when you leave our website, other sites may have different privacy policies and terms which are beyond our control. Please be sure to check the Privacy Policies of these sites as well as their "Terms of Service" before engaging in any business or uploading any information.
By using our website, you hereby consent to our disclaimer and agree to its terms. Our Disclaimer was generated from the Disclaimer Generator.
Should we update, amend or make any changes to this document, those changes will be prominently posted here.


Greenhouse gas is any gas that is capable of
absorbing infrared radiation (net heat energy) emitted from the Earth's surface and
reradiating it back to the Earth's surface.
Ozone Depletion
Ozone depletion is the gradual thinning of the
Earth's ozone layer in the upper atmosphere caused by the release of chemical compounds
containing gaseous chlorine or bromine from industry and other human activities.
Global Warming
Global warming is the increase of the average
air temperature near the surface of the Earth over the past one to two centuries due to the
influence of human activities. This increase is affecting temperatures, precipitation and
storms. It is also influencing ocean currents and atmospheric chemical composition to
significantly alter weather events.
Carbon Footprint
Carbon footprint is the amount of carbon
dioxide (CO2) emissions associated with all the activities of a person, building,
corporation, country, etc. It includes direct emissions from those entities along with
emissions produced by other entities who provide/produce services/goods that are consumed.
Fossil fuels and greenhouse gases such as methane, nitrous oxide and chlorofluorocarbons are
examples of problematic emissions.
Deforestation
Deforestation is the clearing or thinning of
forests by humans. Forests are important factor in absorbing carbon dioxide from the
atmosphere. As such, the reduction in forests contributes to greenhouse gas emission issues
and global warming.


Dinosaur 1/2 Star (Out of 4) Reviewed by Mac VerStandig<EMAIL_ADDRESS>http://www.moviereviews.org May 18, 2000 USA Release Date - May 19, 2000
---A copy of this review can be found at http://moviereviews.org/dinosaur.htm ---
Look kids! It's a really bad movie!
If there were some way to weigh a film's quality against its budget, movies like `The Blair Witch Project,' `Clerks' and even `The Godfather' would score excellent ratings. On the other hand, movies like `Titanic,' `Waterworld' and `The Postman' would receive shamefully low grades. But those infamous three works no longer need to worry about being at the very bottom of such a list because, in one of the more surprising revelations of the year, Disney has dumped $200 million on `Dinosaur' – a truly wretched plague upon the silver screen.
Plot? What plot? Yep folks, Disney seems to have forgotten that they are what they are today because they used to be in the story-telling business. `Dinosaur' starts off with a semi-amusing storyline, even though it is stolen from another Disney film, `Tarzan,' (a creature born to and raised by the wrong species, in this case a dinosaur and some furry little monkeys respectively) but then the movie becomes more or less a tremendously oversized David Mamet play where the protagonists just wander back and forth contemplating life's issues. Now, this works quite well with two or three characters, a simple set and a highbrow audience. But here we have a whole stampede of prehistoric creatures, no defined setting (is the film in Africa? Montana? Earth?) and a target audience of tots to early teens. Imagine sending in the 82nd Airborne to work as meter maids in a small Rhode Island town - now you get the picture.
But hey, even when Disney fails elsewhere there are always those embarrassingly catchy tunes to keep you entertained, right? Not here. Nope, folks – the Mouse House seems to think it has outgrown Elton John. Big mistake! This leaves the audience with officially no pop-music salvation and only a mawkish score to distract themselves.
So at least there is $200 million worth of eye candy to stare at for 80-someodd minutes, right? Not exactly (do I feel like a Hertz commercial or what!). Actually, the 3.2 million hours of work, 45 terabytes of disc space (approximately equal to 70,000 CD-ROMs) and enough money to pay the President of the United States' salary for the next millennium accomplish very little. Steven Spielberg's `Jurassic Park' has better dinosaurs, Jerry Bruckheimer knows how to make a better chase scene and Joel Schumacher is superior in terms of manufacturing a scarcely-lit film. The prehistoric creatures, although obviously carefully crafted, look too childish and stereotypical - the good ones are smooth, the bad guys have sharp teeth and horns while the little ones possess hearts of gold. One early scene with an explosion looks like a combination of the bomb being dropped over Hiroshima and Nicholas Cage narrowly escaping being engulfed in a gigantic fireball. As for the seemingly never-ending thunder and lightning that conveniently roles around every time something bad happens, it creates more of an `8MM' type feeling than that of a kids movie.
Further confusing the target audience are a couple of very muddled morals. On one hand, the film earns major points for encouraging teamwork. On the other hand, (SPOILER AHEAD) the picture's hero will ultimately act alone, as his peers look on, to win the final battle of the film.
There is little doubt that Disney will recover from `Dinosaur' and once again find itself at the top of the animation kingdom. Actually, they already have a $75 million visual effects studio that was built for this movie but will be reusable for future projects. For the mean time, though, trust your science teacher – dinosaurs are extinct for a reason.
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


{% extends 'layout.html' %} {% block body %} Please enable JavaScript to view the comments powered by Disqus. {% endblock %}


{% extends 'base.html' %} {% import 'macros.html' as macro %} {%block styles%} {{ super() }} {%endblock%} {%block content%}
Want to perform a gain ininterview, step up and show your ability.
Want to show us about your product,step up and show your ability .
Want to promote any product, step up and show your ability.


When I lived on the East coast, I used to wheel with Rick Boiros and the "Old Colony Four Wheel Drive Club" out of Massachusetts. A couple guys in the club had spare parts tire carriers where they would have entire front axle outers to hold on their spare tire. All of these were done on fabricated tire carriers, but I figured I could build one off the stock spare tire carrier. I thought about it a while and what I came up with was so simple, I wished I'd done it sooner. This modification could also be done easily to many after market spare tire carriers.
I've seen some spare parts tire carriers that even have a knuckle on them, but I figured spindle out would be enough for me. The tricky part is providing a mounting surface for the spindle that is out far enough that you can bolt a tire to the brake hub and not so far out that the tire becomes a giant lever waiting for the correct pressure to rip off your tire carrier.
The first thing I did was remove the stock tire carrier and grind, cut, and pound out the three bolts that hold on the spare. After removing the mounting bolts, I cut off the end right off just outside of where the two cross braces come from the top bar to the box (see top picture). I then removed the internal brace inside the box. I took the original end of the box and bent it a bit so it fit inside the now shortened box. I welded this in place, then I took a piece of sheet metal and welded it over the end of the box so I had a clean surface on the outside with no holes. Next I broke out a 3 1/2" hole saw I purchased for the project and cut a hole in the sheet metal. I took a spindle for a spare Dana 30 and placed it in the hole and marked out the bolt holes. Drilled out the holes and blasted the whole thing with flat black spray paint.
After it was dry, I took a spindle with short axle shaft and bolted it on with five 7/16"X3/4" bolts. I slid on a brake hub with bearing and secured it with two spindle nuts and locking washer. A spare hub went on next which holds the short shaft in place. I didn't put on a spare rotor, I figured it would just add weight. I put a bunch of washers behind the studs to make up for the room of the missing rotor.
I took my creation and bolted to the Jeep and put on my spare tire a 33"x12.5" BFG MT. It could have been about 3/4" closer, but it looked great. It is "full floating" too, which will surprise someone when the lean against it and it begins to spin.
When I was wheeling out in Moab a couple months later, I was coming down a real steep rock and managed to bend the entire carrier up. Probably if I used a 33"x9.5" tire for a spare, this wouldn't be a problem, but I was using a full size spare.
A couple weeks later the carrier came in handy when I was wheeling in Farmington. A friend managed to break a lock-out and sheer all the studs of in the brake hub except for one. Rather than drill out all the studs, we just used the lock-out and brake hub from my spare parts carrier. Currently it is bent up and has a ruined brake hub on it, but it still holds my spare!
Spare parts tire carrier II coming soon...


class BBOBBiObjDataFormat(DataFormat):
Undocumented
| Method | __init__ |
Undocumented |
| Instance Variable | evaluation_idx |
Undocumented |
| Instance Variable | function_value_idx |
Undocumented |
Inherited from DataFormat
:
| Method | align_data |
aligner is a function taking as input data and two column indices, namely where to find evaluations and function values. |
| Method | align_data_into_evals |
transfer a "raw data array" into the evals attribute of dataset . |


UNISOM SLEEPMELTS NIGHTTIME SLEEP-AID- diphenhydramine hydrochloride tablet, chewable
Chattem, Inc.
Disclaimer: Most OTC drugs are not reviewed and approved by FDA, however they may be marketed if they comply with applicable regulations and policies. FDA has not evaluated whether this product complies.
Active ingredient
(in each caplet)
Diphenhydramine HCI 25 mg
Purpose
Nighttime sleep-aid
Uses
- for relief of occasional sleeplessness
Warnings
Do not use
- for children under 12 years of age
- with any other product containing diphenhydramine, even one used on skin
Ask a doctor before use if you have
- a breathing problem such as emphysema or chronic bronchitis
- glaucoma
- trouble urinating due to an enlarged prostate gland
Ask a doctor or pharmacist before use if you are
taking sedatives or tranquilizers
When using this product
avoid alcoholic drinks
Stop use and ask a doctor if
sleeplessness persists continuously for more than 2 weeks. Insomnia may be a symptom of serious underlying medical illness.
If pregnant or breast-feeding,
ask a health professional before use.
Keep out of reach of children.
In case of overdose, get medical help or contact a Poison Control Center right away.
Directions
- adults and children 12 years of age and over: 2 tablets (25 mg each) at bedtime if needed, or as directed by a doctor
- place 2 tablets on tongue; tablets dissolve with or without water
- allow tablets to dissolve in mouth or chew before swallowing
Inactive ingredients
citric acid, ethylcellulose, flavor, hydroxypropyl cellulose, mannitol, microcrystalline cellulose, PVP, red 7, starch, sucralose, sucrose (245-236)
Dist. by: CHATTEM, Inc.
P.O. Box 2219, Chattanooga, TN 37409 USA
© 2011 Chattem Inc. www.chattem.com
PRINCIPAL DISPLAY PANEL
Unisom®
SleepMeltsTM
Diphenhydramine HCI tablets, 25 mg
NIGHTTIME SLEEP-AID
24 QuickMelt Tablets
Chattem, Inc.


--- layout: post title: Run Linux on... JavaScript?! date: 2011-05-19 14:08:58 -05:00 comments: true categories: posterous_id: 53667743 --- Javascript has finally arrived. Ruby watch out!
Fabrice Bellard built an x86 PC emulator using JavaScript. He's even gone so far as to install Linux kernel 2.6.20 on top of it. "The code is written in pure Javascript using Typed Arrays which are available in recent browsers," Bellard wrote. It works in Firefox and Chrome 11, but not not Chrome 12.
As for the Linux instance, Bellard wrote: "The disk image is just a ram disk image loaded at boot time. It contains a filesystem generated with Buildroot containing BusyBox. I added my toy C compiler TinyCC and my unfinished but usable emacs clone QEmacs." You can see Linux running JavaScript here.
Bellard did it just for fun, but he speculates that it could be useful for the following purposes:
Oddly enough, he found that Linux ran twice as fast on Jaeger Monkey as it did on V8. He's not sure why.
Discuss


print *(om[1,5])This selects the five most recently modified files (or all files, if there are five or fewer). Negative indices are understood, too:
print *(om[1,-2])selects all files but the oldest, assuming there are at least two.
Finally, a reminder that you can stick modifiers after qualifiers, or indeed in parentheses without any qualifiers:
print **/*(On:t)sorts files in subdirectories into reverse order of name, but then strips off the directory part of that name. Modifiers are applied right at the end, after all file selection tasks.
Evaluating code as a test
The most complicated effect is produced by the (e)
qualifer. which
is followed by a string delimited in the now-familiar way by either
matching brackets of any of the four sorts or a pair of any other
characters. The string is evaluated as shell code; another layer of
quotes is stripped off, to make it easier to quote the code from
immediate expansion. The expression is evaulated separately for each
match found by the other parts of the pattern, with the parameter
$REPLY
set to the filename found.
There are two ways to use (e)
. First, you can simply rely on the
return code. So:
print *(e:'[[ -d $REPLY ]]':) print *(/)are equivalent. Note that quotes around the expression, which are necessary in addition to the delimiters (here `
:
') for expressions
with special characters or whitespace. In particular, $REPLY
would
have been evaluated too early --- before file generation took place ---
if it hadn't been quoted.
Secondly, the function can alter the value of $REPLY
to alter the
name of the file. What's more, the expression can set $reply
(which
overrides the use of $REPLY
) to an array of files to be inserted into
the command line; it may be any size from zero items upward.
Here's the example in the manual:
print *(e:'reply=(${REPLY}{1,2})':)Note the string is delimited by colons and quoted. This takes each file in the current directory, and for each returns a match which has two entires, the filename with `
1
' appended and the filename with
`2
' appended.
For anything more complicated than this, you should write a shell
function to use $REPLY
and set that or $reply
. Then you can
replace the whole expression in quotes with that name.
Another EXTENDED_GLOB
features is `globbing flags'. These are a bit
like the flags that can appear in perl regular expressions; instead of
making an assertion about the type of the resulting match, like glob
qualifiers do, they affect the way the match is performed. Thus they
are available for all uses of pattern matching --- though some flags are
not particularly useful with filename generation.
The syntax is borrowed from perl, although it's not the same: it looks
like `(#X)
', where X
is a letter, possibily followed by an
argument (currently only a number and only if the letter is `a
').
Perl actually uses `?
' instead of `#
'; what these have in common
is that they can't appear as a valid pattern characters just after an
open parenthesis, since they apply to the pattern before. Zsh doesn't
have the rather technical flags that perl does (lookahead assertions and
so on); not surprisingly, its features are based around the shortcuts
often required by shell users.
Mixed-case matches
The simplest sort of globbing flag will serve as an example.
You can make a pattern, or a portion of a pattern, match
case-insensitively with the flag (#i)
:
[[ FOO = foo ]] [[ FOO = (#i)foo ]]Assuming you have
EXTENDED_GLOB
set so that the `#
' is an active
pattern character, the first match fails while the second succeeds.
I mentioned portions of a pattern. You can put the flags at any point
in the pattern, and they last to the end either of the pattern or any
enclosing set of parentheses, so in
[[ FOO = f(#i)oo ]] [[ FOO = F(#i)oo ]]once more the first match fails and the second succeeds. Alternatively, you can put them in parentheses to limit their scope:
[[ FOO = ((#i)fo)o ]] [[ FOO = ((#i)fo)O ]]gives a failure then a success again. Note that you need extra parentheses; the ones around the flag just delimit that, and have no grouping effect. This is different from Perl.
There are two flags which work in exactly the same way: (#l)
says
that only lowercase letters in the pattern match case-insensitively;
uppercase letters in the pattern only match uppercase letters in the
test string. This is a little like Emacs' behaviour when searching case
insensitvely with the case-fold-search
option variable set; if you
type an uppercase character, it will look only for an uppercase
character. However, Emacs has the additional feature that from that
point on the whole string becomes case-sensitive; zsh doesn't do that,
the flag applies strictly character by character.
The third flag is (#I)
, which turns case-insensitive matching off
from that point on. You won't often need this, and you can get the same
effect with grouping --- unless you are applying the case-insensitive
flag to multiple directories, since groups can't span more than one
directory. So
print (#i)/a*/b*/(#I)c*is equivalent to
print /[aA]*/[bB]*/c*
Note that case-insensitive searching only applies to characters not in a
special pattern of some sort. In particular, ranges are not
automatically made case-insensitive; instead of `(#i)[ab]*
', you
must use `[abAB]*
'. This may be unexpected, but it's consistent
with how other flags, notably approximation, work.
You should be careful with matching multiple directories case-insensitively. First,
print (#i)~/.Z*doesn't work. This is due to the order of expansions: filename expansion of the tilde happens before pattern matching is ever attempted, and the `
~
' isn't at the start where filename expansion
needs to find it. It's interpreted as an empty string which doesn't
match `/.Z*
', case-insensitively --- in other words, it will match
any empty string.
Hence you should put `(#i)
' and any other globbing flags after the
first slash --- unless, for some reason, you really want the
expression to match `/Home/PWS/
' etc. as well as `/home/pws
'.
Second,
print (#i)$HOME/.Z*does work --- prints all files beginning `
.Z
' or `.z
' in your
home directory --- but is inefficient. Assume $HOME
expands to my
home directory, /home/pws
. Then you are telling the shell it can
match in the directories `/Home/PWS/
', `/HOME/pWs
' and so on.
There's no quick way of doing this --- the shell has to look at every
single entry first in `/
' and then in `/home
' (assuming that's
the only match at that level) to check for matches. In summary, it's a
good idea to use the fact that the flag doesn't have to be at the
beginning, and write this as:
print ~/(#i).Z*Of course,
print ~/.[zZ]*would be easier and more standard in this oversimplified example.
On Cygwin
, a UNIX-like layer running on top of, uh, a well known
graphical user interface claiming to be an operating system, filenames
are usually case insensitive anyway. Unfortunately, while Cygwin itself
is wise to this fact, zsh isn't, so it will do all that extra searching
when you give it the (#i)
flag with an otherwise explicit string.
A piece of good news, however, is that matching of uppercase and
lowercase characters will handle non-ASCII character sets, provided your
system handles locales, (or to use the standard hieroglyphics, `i18n'
--- count the letters between `i' and `n' in `internationalization',
which may not even be a word anyway, and wince). In that case you or
your system administrator or the shell environment supplied by your
operating system vendor needs to set $LC_ALL
or $LC_CTYPE
to the
appropriate locale -- C for the default, en
for English, uk
for
Ukrainian (which I remember because it's confusing in the United
Kingdom), and so on.
`Backreferences'
The feature labelled as `backreferences' in the manual isn't really that
at all, which is my fault. Many regular expression matchers allow you
to refer back to bits already matched. For example, in Perl the regular
expression `([A-Z]{3})$1
' says `match three uppercase characters
followed by the same three characters again. The `$1
' is a
backreference.
Zsh has a similar feature, but in fact you can't use it while matching a
single pattern; it just makes the characters matched by parentheses
available after a successful complete match. In this, it's a bit more
like Emacs's match-beginning
and match-end
functions.
You have to turn it on for each pattern with the globbing flag
`(#b)
'. The reason for this is that it makes matches involving
parentheses a bit slower, and most of the time you use parentheses just
for ordinary filename generation where this feature isn't useful. Like
most of the other globbing flags, it can have a local effect: only
parentheses after the flag produce backreferences, and the effect is
local to enclosing parentheses (which don't feel the effect themselves).
You can also turn it off with `(#B)
'.
What happens when a pattern with active parentheses matches is that the
elements of the array $match
, $mbegin
and $mend
are set to
reflect each active parenthesis in turn --- names inspired by the
corresponding Emacs feature. The string matching the first pair of
parentheses is stored in the first element of $match
, its start
position in the string is stored in the first element of $mbegin
,
and its end position in the string $mend
. The same happens for
later matched parentheses. The parentheses around any globbing flags do
not count.
$mbegin
and $mend
use the indexing convention
currently in effect, i.e. zero offset if KSH_ARRAYS
is set, unit
offset otherwise. This means that if the string matched against is
stored in the parameter $teststring
, then it will always be true
that ${match[1]}
is the same string as
${teststring[${mbegin[1]},${mend[1]}]}
. and so on. (I'm assuming,
as usual, that KSH_ARRAYS
isn't set.) Unfortunately, this is
different from the way the E
parameter flag works --- that
substitutes the character after the end of the matched substring.
Sorry! It's my fault for not following that older convention; I thought
the string subscripting convention was more relevant.
An obvious use for this is to match directory and non-directory parts of a filename:
local match mbegin mend if [[ /a/file/name = (#b)(*)/([^/]##) ]]; then print -l ${match[1]} ${match[2]} fiprints `
/a/file
' and `name
'. The second parenthesis matches a
slash followed by any number of characters, but at least one, which are
not slashes, while the first matches anything --- remember slashes
aren't special in a pattern match of this form. Note that if this
appears in a function, it is a good idea to make the three parameters
local. You don't have to clear them, or even make them arrays. If the
match fails, they won't be touched.
There's a slightly simpler way of getting information about the match:
the flag (#m)
puts the matched string, the start index, and the
index for the whole match into the scalars $MATCH
, $MBEGIN
and $MEND
. It may not be all that obvious why this is useful.
Surely the whole pattern always matches the whole string? Actually,
you've already seen cases where this isn't true for parameter
substitutions:
local MATCH MBEGIN MEND string string=aLOha : ${(S)string##(#m)([A-Z]##)}You'll find this sets
$MATCH
to LO
, $MBEGIN
to 2 and
$MEND
to 3. In the parameter expansion, the (S)
is for matching
substrings, so that the `##
' match isn't anchored to the start of
$string
. The pattern is (#m)([A-Z]##)
, which means: turn on
full-match backreferencing and match any number of capital letters, but
at least one. This matches LO
. Then the match parameters let you
see where in the test parameter the match occurred.
There's nothing to stop you using both these types of backreferences at
once, and you can specify multiple globbing flags in the short form
`(#bm)
'. This will work with any combination of flags, except that
some such as `(#bB)
' are obviously silly.
Because ordinary globbing produces a list of files, rather than just one, this feature isn't very useful and is turned off. However, it is possible to use backreferences in global substitutions and substitutions on arrays; here are both at once:
% array=(mananan then in gone June) % print ${array//(#m)?n/${(C)MATCH[1]}n} mAnAnAn thEn In gOne JUneThe substitution occurs separately on each element of the array, and at each match in each element
$MATCH
gets set to what was matched. We
use this to capitalize every character that is followed by a lowercase
`n
'. This will work with the (#b)
form, too. The perl
equivalent of this is:
% perl -pe 's/.n/\u$&/g' <<<$array mAnAnAn thEn In gOne JUne(People sometimes say Perl has a difficult syntax to understand; I hope I'm convincing you how naive that view is when you have zsh.)
Now I can convince you of one point I made about excluded matches above:
% [[ foo = (#b)(^foo)* ]] && print $match foAs claimed, the process of making the longest possible match, then backtracking from the end until the whole thing is successful, leads to the `
(^foo)
' matching `fo
'.
Approximate matching
To my knowledge, zsh is the first command line interpreter to make use of approximate matching. This is very useful because it provides the shell with an easy way of correcting what you've typed. First, some basics about what I mean by `approximate matching'.
There are four ways you can make a mistake in typing. You can leave out
a letter which should be there; you can insert a letter which shouldn't;
you can type one letter instead of another; and you can transpose two
letters. The last one involves two different characters, so some
systems for making approximate matches count it as two different errors;
but it's a particularly common one when typing, and quite useful to be
able to handle as a single error. I know people who even have
`mkae
' aliased to `make
'.
You can tell zsh how many errors you are willing to allow in a pattern
match by using, for example (#a1)
, which says only a single error
allowed. The rules for the flag are almost identical to those for
case-insensitive matching, in particular for scoping and the way
approximate matching is handled for a filename expansion with more than
one directory. The number of errors is global; if the shell manages to
match a directory in a path with an error, one fewer error is allowed
for the rest of the path. You can specify as many errors as you like;
the practical limit is that with too many allowed errors the pattern
will match far too many strings. The shell doesn't have a particularly
nifty way of handling approximate matching (unlike, for example, the
program agrep
), but you are unlikely to encounter problems if the
number of matches stays in a useful range.
The fact that the error count applies to the whole of a filename path is a bit of a headache, actually, because we have to make sure the shell matches each directory with the minimum number of errors. With a single pattern, the shell doesn't care as long as it doesn't use up all the errors it has, while with multiple directories if it uses up the errors early on, it may fail to match something it should match. But you don't have to worry about that; this explanation is just to elicit sympathy.
So the pattern (#a1)README
will match README
, READ.ME
,
READ_ME
, LEADME
, REDME
, READEM
, and so on. It will not
match _README_
, ReadMe
, READ
or AAREADME
. However, you
can combine it with case-insensitivity, for which the short form
(#ia1)README
is allowed, and then it will match ReadMe
,
Read.Me
, read_me
, and so on. You can consider filenames with
multiple directories as single strings for this purpose --- with one
exception, that `foo/bar
' and `fo/obar
' are two errors apart,
not one. Because the errors are counted separately in each directory,
you can't transpose the `/
' with another character. This
restriction doesn't apply in other forms of pattern matching where /
is not a special character.
Another common feature with case-insensitive matching is that only the
literal parts of the string are handled. So if you have `[0-9]
' in
a pattern, that character must match a decimal digit even if
approximation is active. This is often useful to impose a particular
form at key points. The main difficulty, as with the `/
' in a
directory, is that transposing with another character is not allowed,
either. In other words, `(#a1)ab[0-9]
' will fail to match
`a1b
'; it will match with two errors, by removing the `b
' before
the digit and inserting it after.
As an example of what you can do with this feature, here is a simple function to correct misspelled filenames.
emulate -LR zsh setopt extendedglob local file trylist integer approx max_approx=6 file=$1 if [[ -e $file ]]; then # no correction necessary print $file return fi for (( approx = 1; approx <= max_approx; approx++ )); do trylist=( (#a$approx)"$file"(N) ) (( $#trylist )) && break done (( $#trylist )) || return 1 print $trylistThe function tries to match a file with the minimum possible number of errors, but in any case no more than 6. As soon as it finds a match, it will print it out and exit. It's still possible there is more than one match with that many errors, however, and in this case the complete list is printed. The function doesn't handle `
~
' in the filename.
It does illustrate the fact that you can specify the number of
approximations as a parameter. This is purely a consequence of the fact
that filename generation happens right at the end of the expansion
sequence, after the parameters have already been substituted away. The
numbers and the letter in the globbing flag aren't special characters,
unlike the parentheses and the `#
'; if you wanted those to be
special when substituted from a parameter, you would need to set the
KSH_GLOB
flag, possibly by using the `~
' parameter flag.
A more complicated version of that function is included with the shell
distribution in the file Completion/Base/Widget/_correct_filename
.
This is designed to be used either on its own, or as part of the completion
system.
Indeed, the completion system described in the next chapter is where you
are most likely to come across approximate matching, buried inside
approximate completion and correction --- in the first case, you tell
the shell to complete what you have typed, trying to correct mistakes,
and in the second case, you tell the shell that you have finished typing
but possibly made some mistakes which it should correct. If you already
have the new completion system loaded, you can use ^Xc
to correct a
word on the command line; this is context-sensitive, so more
sophisticated than the function I showed.
Anchors
The last two globbing flags are probably the least used. They are there
really for completeness. They are (#s)
, to match only at the start
of a string, and (#e)
, to match only at the end.
They correspond to the much more commonly used `^
' and `$
' in
regular expressions. The difference is that shell patterns nearly
always match a complete string, so telling the pattern that a certain
point is the start or end isn't usually very useful. There are two
occasions when it is. The first is when the start or end is to be
matched as an alternative to something else. For example,
[[ $file = *((#s)|/)dirpart((#e)|/)* ]]succeeds if
dirpart
is a complete path segment of $file
---
with a slash or nothing at all before and after it. Remember, once
again, that slashes aren't special in pattern matches unless they're
performing filename generation. The effect of these two flags isn't
altered at all by their being inside another set of parentheses.
The second time these are useful is in parameter matches where the
pattern is not guaranteed to match a complete string. If you use
(#s)
or (#e)
, it will force that point to be the start or end
despite the operator in use. So
${
param##
pattern(#e)}
will remove pattern
from $
param only if it matches the entire string: the ##
must match at the head, while the (#e)
must match at the end.
You can get the effect with ${
param:#
pattern}
, and
further more this is rather faster. The :#
operator has some global
knowledge about how to match; it knows that since pattern will
match as far as it can along the test string, it only needs to try the
match once. However, since `##
' just needs to match at the head of
the string, it will backtrack along the pattern, trying to match
pattern(#e)
, entirely heedless of the fact that the pattern
itself specifically won't match if it doesn't extend to the end. So
it's more efficient to use the special parameter operators whenever
they're available.
zmv
The shell is supplied with a function zmv
, which may have been
installed into the default $fpath
, or can be found in the source
tree in the directory Functions/Misc
. This provides a way of
renaming, copying and linking files based on patterns. The idea is that
you give two arguments, a pattern to match, and a string which uses that
pattern. The pattern to match has backreferences turned on; these are
stored in the positional parameters to make them easy to refer to.
The function tries to be safe: any file whose name is not changed is
simply ignored, and usually overwriting an existing file is an error,
too. However, it doesn't make sure that there is a one to one mapping
from source to target files; it doesn't know if the target file is
supposed to be a directory (though it could be smarter about that).
In the examples, I will use the option -n
, which forces zmv
to
print out what it will do without actually doing it. This is a good
thing to try first if you are unsure.
Here's a simple example.
% ls foo % zmv -n '(*)' '${(U)1}' mv -- foo FOOThe pattern matches anything in the current directory, excluding files beginning with a `
.
' (the function starts with an `emulate
', so
GLOB_DOTS
is forced to be off). The complete string is stored as
the first backreference, which is in turn put into $1
. Then the
second argument is used and $1
in uppercase is substituted.
Essentials of the function
The basic code in zmv
is very simple. It boils down to more or less
the following.
setopt nobareglobqual extendedglob local files pattern result f1 f2 match mbegin mend pattern=$1 result=$2 for f1 in ${~pattern}; do [[ $f1 = (#b)${~pattern} ]] || continue set -- $match f2=${(e)result} mv -- $f1 $f2 doneHere's what's going on. We store the arguments as
$pattern
and
$result
. We then expand the pattern to a list of files --- remember
that ${~pattern}
makes the characters in $pattern
active for the
purposes of globbing. For each file we find, we match against the
pattern again, but this time with backreferences turned on, so that
parentheses are expanded into the array $match
. If, for some
reason, the pattern match failed this time, we just skip the file. Then
we store $match
in the positional parameters; the `-
-
' for
set
and for mv
is in case $match[1]
begins with a `-
'.
Then we evaluate the result, assuming that it will refer to the
positional parameters. In our example, $result
contains argument
`${(U)1}
' and if we matched `foo
', then $1
contains foo.
The effect of `${(e)result}
' is to perform an extra substitution on
the ${(U)1}
, so $f2
will be set to FOO
. Finally, we use the
mv
command to do the actual renaming. The effect of the -n
option isn't shown, but it's essentially to put a `print
' in front
of the mv
command line.
Notice I set nobareglobqual
, turning off the use of glob qualifiers.
That's necessary because of all those parentheses; otherwise, `(*)
'
would have been interpreted as a qualifier. There is an option, -Q
,
which will turn qualifiers back on, if you need them. That's still not
quite ideal, since the second pattern match, the one where we actually
use the backreferences, isn't filename generation, just a test against a
string, so doesn't handle glob qualifers. So in that case the code
needs to strip qualifiers off. It does this by a fairly simple pattern
match which will work in simple cases, though you can confuse it if you
try hard enough, particularly if you have extra parentheses in the glob
qualifier.
Note also the use of `${(e)result}
' to force substitution of
parameters when $result
is evaluated. This way of doing it safely
ignores other metacharacters which may be around: all $
-expansions,
plus backquote expansion, are performed, but otherwise $result
is
left alone.
More complicated examples
zmv
has some special handling for recursive globbing, but only with
the patterns **/
and ***/
. If you put either of these in
parentheses in the pattern, they will be spotted and used in the normal
way. Hence,
% ls test lonely % zmv -n '(**/)lonely' '$1solitary' mv -- test/lonely test/solitaryNote that, as with other uses of `
**/
', the slash is part of the
recursive match, so you don't need another one. You don't need to
separate $1
from solitary
either, since positional parameters
are a special case, but you could use `${1}solitary
' for the look of
it. Like glob qualifiers, recursive matches are handled by some magic
in the function; in ordinary globbing you can't put these two forms
inside parentheses.
For the lazy, the option -w
(which means `with wildcards') will tell
zmv
to decide for itself where all the patterns are and
automatically add parentheses. The two examples so far become
zmv -nw '*' '${(U)1}' zmv -nw '***/lonely' '$1solitary'with exactly the same effects.
Another way of getting useful effects is to use the `${1//foo/bar}
'
substitution in the second argument. This gives you a general way of
substitution bits in filenames. Often, you can then get away with
having `(*)
' as the first argument:
zmv '(*)' '${1//(#m)[aeiou]/${(U)MATCH}}'capitalises all the vowels in all filenames in the current directory. You may be familiar with a perl script called
rename
which does
tricks like this (though there's another, less powerful, programme of
the same name which simply replaces strings).
The effect of zmv
In addition to renaming, zmv
can be made to copy or link files. If
you call it zcp
or zln
instead of zmv
, it will have those
effects, and in the case of zln
you can use the option -s
to
create symbolic links, just as with ln
. Beware the slightly
confusing behaviour of symbolic links containing relative directories,
however.
Alternatively, you can force the behavour of zmv
, zcp
and
zln
just by giving the options -M
, -C
or -L
to the
function, whatever it is called. Or you can use `-p
prog' to
execute prog
instead of mv
, cp
or ln
; prog should
be able to be run as `prog -
-
oldname newname',
whatever it does.
The option -i
works a bit like the same option to the basic
programmes which zmv
usually calls, prompting you before any action
--- in this case, not just overwriting, but any action at all.
Likewise, -f
tells zmv
to force overwriting of files, which it
will usually refuse to do because of the potential dangers. Although
many versions of mv
etc. take this option, some don't, so it's not
passed down; instead there's a generic way of passing down options to
the programmes executed, using -o
followed by a string. For
example,
% ls foo % zmv -np frud -o'-a -b' '(*)' '${(U)1}' frud -a -b -- foo FOO


property StippleCounter: Single;
Use StippleCounter property to access current value of the stipple counter.
[See also] Line Patterns, GetStippleColor, StippleStep, SetStipple


The following questions are of little importance, yet I find them entertaining. I stumbled upon these while developing QueryScript.
Can you guess the results of the following statements?
Pop quiz 1
SET @x := 7; SELECT ++@x;
What is the computation result? What will be the value of @x?
Pop quiz 2
SET @ := 4; SELECT @ + @'' + @``
What is the computation result?
Pop quiz 3
SET @a := 2; SELECT @a = @'a' = @`a`
Do we get TRUE or FALSE? When?
Hints
Consider the following queries as hints to the above questions:
SELECT +++++-@x; SELECT @ = @'', @ = @`` SELECT (@a = @'a') = @`a`
Answers
- Pop quiz 1
++@x is interpreted as +(+(@x)), which is in turn evaluated as 0+(0+(@x)). No relation to C's ++ operator. @x is unchanged.
- Pop quiz 2
@x is the same as @'x' and as @`x`. What's funny is that one is allowed to create the empty-named user defined variable @''. Makes for a weird looking syntax, but nothing special about it. Computation result is 12.
- Pop quiz 3
We've already established that @a, @'a' and @`a` are the same, I just used this notation for adding pepper to the quiz. The real question is whether 2 = 2 = 2 holds true. It does not. There is no 3-way comparison. All comparisons are in pairs, which is why the expression evaluates as (2 = 2) = 2, leading to 1 = 2, "1" being the TRUE value of (2 = 2). The only value of @a for which the expression holds true is 1.
comments powered by Disqus


Researching and designing the interaction that happens between user and technology has been my passion for many years. My Bachelor's studies gave me a solid basis in cognitive sciences and user-interface design, which combined with my previous education in computer science allows me to both design and implement my ideas.
I furthered my skills by completing my Master's degree in Human-Computer Interaction Design (specialization in Intelligent Systems), which allowed me to enrich my knowledge and practice in user research, UI design and frontend development.On top of this, the minor in Entrepreneurship and Innovation of my Master's has given me the mindset and tools to validate and execute a business idea, which makes me really comfortable in working in a hectic and unpredictable environment of a startup.
I am currently looking for new challenging and interesting opportunities. If have interesting projects in which I can put my skills into play, please check my CV and do not hesitate to contact me!
With Beathoven, we researched new ways to allow deaf people to experience music. To achieve this goal, we tried to combine different sensory modalities such as haptics and sight. We therefore implemented a vibrating forearm glove, augmenting the experience with VR.
I contributed by implementing the connection to Spotify APIs, and coding some parts using Processing and Unity.
The idea behind the project was to create a platform that allows musicians to find others to play with, based on their musical taste and commitment.
I have implemented the prototype using ReactJS + Firebase as back-end.
Check project websiteFor the Startup Experience course at Aalto University, we have been working on Roomiego - an online platform that allows one to find a perfect match to share his future flat with.
The whole team went through the several stages of creating the company, such as defining our values, the shareholders' agreement, user research, marketing plan and others.
Check project websiteFor the Design project course in Aalto University, we were asked to design new services regarding mobility-as-a-services (MAAS). After our team went through the divergent phase of design and explored several opportunities, we eventually focused on Justacar.
Justacar is a distributed car rental service that offers only low-end vehicles (the insight of focusing on these vehicles came from the user research). We then created and tested a prototype, making sure that the business would also be profitable.
During my internship in Telecom Italia JOL SKIL innovation centre, I have worked on the design of a mobile app for one of the largest retailers in Italy.
Initially, I did some literature research to have a better understanding of the domain. Subsequently, thanks to the living lab organized by COOP, we could gather insightful qualitative research from a pool of more than 100 customers. This gave us a better understanding of their motivations and frustrations, and we could use this data to propose a solution that followed a human-centred design approach.
My contribution consisted in creating personas, scenarios and customer journey map from the insights we gathered qualitative and quantitative research.
After conducting some research, our team discovered a design opportunity: the food management system of the hospital in Trento was still carried out on paper, therefore giving us room for improvement to such service. We conducted interviews with the hospital staff to get acquainted with the problem domain, subsequently designing a service that takes into account all the actors in the network, from kitchen staff to patients.
For my graduation thesis I worked on meSch, a EU funded project to enhance the museum/heritage site experience of the visitors by allowing professional heritage curators to use a common platform to create new experiences.
My contribution to the project consisted in designing the interfaces that the curators are going to use to create sophisticated "recipes" of interactive experiences, giving also the chance to other professionals to re-use their ideas and thus creating a community of experts. To pursue this goal I created both the paper and the digital prototypes, subsequently testing them in different evaluation sessions and iteratively redesigning with the feedback received.
Check project website


"""
Modifiers and operators
===============================================================================
"""
from __future__ import annotations
import numpy as np
import numpy.typing as npt
from typing import List
# #############################################################################
#
#
# Unary operators
#
#
# #############################################################################
[docs]def apply_modifiers(membership: npt.ArrayLike, modifiers: List[str]) -> npt.ArrayLike:
"""
Apply a list of modifiers or hedges to a numpy array.
:param membership: Membership values to be modified.
:param modifiers: List of modifiers or hedges.
>>> from fuzzy_expert.operators import apply_modifiers
>>> x = [0.0, 0.25, 0.5, 0.75, 1]
>>> apply_modifiers(x, ('not', 'very'))
array([1. , 0.9375, 0.75 , 0.4375, 0. ])
"""
if modifiers is None:
return membership
fn = {
"EXTREMELY": extremely,
"INTENSIFY": intensify,
"MORE_OR_LESS": more_or_less,
"NORM": norm,
"NOT": not_,
"PLUS": plus,
"SLIGHTLY": slightly,
"SOMEWHAT": somewhat,
"VERY": very,
}
membership = membership.copy()
modifiers = list(modifiers)
modifiers.reverse()
for modifier in modifiers:
membership = fn[modifier.upper()](membership)
return membership
[docs]def extremely(membership: npt.ArrayLike) -> npt.ArrayLike:
"""
Applies the element-wise function fn(u) = u^3.
:param membership: Membership function to be modified.
>>> from fuzzy_expert.operators import extremely
>>> extremely([0, 0.25, 0.5, 0.75, 1])
array([0. , 0.015625, 0.125 , 0.421875, 1. ])
"""
return np.power(membership, 3)
[docs]def intensify(membership: npt.ArrayLike) -> npt.ArrayLike:
"""
Applies the element-wise function fn(u) = u^2 if u <= 0.5 else 1 - 2 * (1 - u)^2.
:param membership: Membership function to be modified.
>>> from fuzzy_expert.operators import intensify
>>> intensify([0, 0.25, 0.5, 0.75, 1])
array([0. , 0.0625, 0.25 , 0.875 , 1. ])
"""
membership = np.array(membership)
return np.where(
membership <= 0.5,
np.power(membership, 2),
1 - 2 * np.power(1 - membership, 2),
)
[docs]def more_or_less(membership: npt.ArrayLike) -> npt.ArrayLike:
"""
Applies the element-wise function fn(u) = u^(1/2).
:param membership: Membership function to be modified.
>>> from fuzzy_expert.operators import more_or_less
>>> more_or_less([0, 0.25, 0.5, 0.75, 1])
array([0. , 0.5 , 0.70710678, 0.8660254 , 1. ])
"""
return np.power(membership, 0.5)
[docs]def norm(membership: npt.ArrayLike) -> npt.ArrayLike:
"""
Applies the element-wise function fn(u) = u / max(u).
:param membership: Membership function to be modified.
>>> from fuzzy_expert.operators import norm
>>> norm([0, 0.25, 0.5])
array([0. , 0.5, 1. ])
"""
return membership / np.max(membership)
[docs]def not_(membership: npt.ArrayLike) -> npt.ArrayLike:
"""
Applies the element-wise function fn(u) = 1 - u.
:param membership: Membership function to be modified.
>>> from fuzzy_expert.operators import not_
>>> not_([0, 0.25, 0.5, 0.75, 1])
array([1. , 0.75, 0.5 , 0.25, 0. ])
"""
return 1 - np.array(membership)
[docs]def plus(membership: npt.ArrayLike) -> npt.ArrayLike:
"""
Applies the element-wise function fn(u) = u^1.25.
:param membership: Membership function to be modified.
>>> from fuzzy_expert.operators import plus
>>> plus([0, 0.25, 0.5, 0.75, 1])
array([0. , 0.1767767 , 0.42044821, 0.69795364, 1. ])
"""
return np.power(membership, 1.25)
[docs]def somewhat(membership: npt.ArrayLike) -> npt.ArrayLike:
"""
Applies the element-wise function fn(u) = u^(1/3).
:param membership: Membership function to be modified.
>>> from fuzzy_expert.operators import somewhat
>>> somewhat([0, 0.25, 0.5, 0.75, 1])
array([0. , 0.62996052, 0.79370053, 0.9085603 , 1. ])
"""
return np.power(membership, 1.0 / 3.0)
[docs]def very(membership: npt.ArrayLike) -> npt.ArrayLike:
"""
Applies the element-wise function fn(u) = u^2.
:param membership: Membership function to be modified.
>>> from fuzzy_expert.operators import very
>>> very([0, 0.25, 0.5, 0.75, 1])
array([0. , 0.0625, 0.25 , 0.5625, 1. ])
"""
return np.power(membership, 2)
[docs]def slightly(membership: npt.ArrayLike) -> npt.ArrayLike:
"""
Applies the element-wise function fn(u) = u^(1/2).
:param membership: Membership function to be modified.
>>> from fuzzy_expert.operators import slightly
>>> slightly([0, 0.25, 0.5, 0.75, 1])
array([0. , 0.16326531, 0.99696182, 1. , 0. ])
"""
plus_membership: npt.ArrayLike = np.power(membership, 1.25)
not_very_membership: npt.ArrayLike = 1 - np.power(membership, 2)
membership: npt.ArrayLike = np.where(
membership < not_very_membership, plus_membership, not_very_membership
)
membership: npt.ArrayLike = membership / np.max(membership)
return np.where(membership <= 0.5, membership ** 2, 1 - 2 * (1 - membership) ** 2)
# #############################################################################
#
#
# Advanced operators
#
#
# #############################################################################
[docs]def prob_or(memberships: List[npt.ArrayLike]) -> npt.ArrayLike:
"""
Applies the element-wise function fn(u, v) = u + v - u * v. Also known as algebraic-sum.
:param memberships: List of arrays of membership values.
>>> from fuzzy_expert.operators import prob_or
>>> x = [0.1, 0.25, 0.5, 0.75, 0.3]
>>> y = [0, 0.75, 0.5, 0.25, 0]
>>> prob_or([x, y])
array([0.1 , 0.8125, 0.75 , 0.8125, 0.3 ])
"""
result: npt.ArrayLike = np.array(memberships[0])
for membership in memberships[1:]:
membership = np.array(membership)
result: npt.ArrayLike = result + membership - result * membership
return np.maximum(0, np.minimum(1, result))
[docs]def bounded_prod(memberships: List[npt.ArrayLike]) -> npt.ArrayLike:
"""
Applies the element-wise function max(0, u + v - 1).
:param memberships: List of arrays of membership values.
>>> from fuzzy_expert.operators import bounded_prod
>>> x = [0.1, 0.25, 0.5, 0.75, 1]
>>> bounded_prod([x, x])
array([0. , 0. , 0. , 0.5, 1. ])
"""
result: npt.ArrayLike = np.array(memberships[0])
for membership in memberships[1:]:
membership: npt.ArrayLike = np.array(membership)
result: npt.ArrayLike = np.maximum(0, result + membership - 1)
return result
[docs]def bounded_sum(memberships: List[npt.ArrayLike]) -> npt.ArrayLike:
"""
Applies the element-wise function min(1, u + v).
:param memberships: List of arrays of membership values.
>>> from fuzzy_expert.operators import bounded_sum
>>> x = [0, 0.25, 0.5, 0.75, 1]
>>> bounded_sum([x, x, x])
array([0. , 0.75, 1. , 1. , 1. ])
"""
result: npt.ArrayLike = np.array(memberships[0])
for membership in memberships[1:]:
membership: npt.ArrayLike = np.array(membership)
result: npt.ArrayLike = np.minimum(1, result + membership)
return result
[docs]def bounded_diff(memberships: List[npt.ArrayLike]) -> npt.ArrayLike:
"""
Applies the element-wise function max(0, u - v).
:param memberships: List of arrays of membership values.
>>> from fuzzy_expert.operators import bounded_diff
>>> x = [0, 0.25, 0.5, 0.75, 1]
>>> y = [0, 0.25, 0.5, 0.6, 0.7]
>>> bounded_diff([x, y])
array([0. , 0. , 0. , 0.15, 0.3 ])
"""
result: npt.ArrayLike = np.array(memberships[0])
for membership in memberships[1:]:
membership = np.array(membership)
result: npt.ArrayLike = np.maximum(0, result - membership)
return result
[docs]def drastic_prod(memberships: List[npt.ArrayLike]) -> npt.ArrayLike:
"""
Applies the element-wise function f(u, v) = u if v == 0 else v if u == 1 else 0.
:param memberships: List of arrays of membership values.
>>> from fuzzy_expert.operators import drastic_prod
>>> x = [0, 0.25, 0.5, 0.75, 1]
>>> y = [1, 0.75, 0.5, 0.25, 0]
>>> drastic_prod([x, y])
array([0., 0., 0., 0., 1.])
"""
result: npt.ArrayLike = np.array(memberships[0])
for membership in memberships[1:]:
membership = np.array(membership)
result: npt.ArrayLike = np.where(
membership == np.float64(0),
result,
np.where(result == np.float64(1), membership, 0),
)
return result
[docs]def drastic_sum(memberships: List[npt.ArrayLike]) -> npt.ArrayLike:
"""
Applies the element-wise function f(u, v) = u if v == 0 else v if u == 0 else 1.
:param memberships: List of arrays of membership values.
>>> from fuzzy_expert.operators import drastic_sum
>>> x = [0.1, 0.25, 0.5, 0.75, 0.3]
>>> y = [0, 0.75, 0.5, 0.25, 0]
>>> drastic_sum([x, y])
array([0.1, 1. , 1. , 1. , 0.3])
"""
result: npt.ArrayLike = memberships[0]
for membership in memberships[1:]:
result: npt.ArrayLike = np.where(
membership == np.float64(0),
result,
np.where(result == np.float64(0), membership, 1),
)
return result
[docs]def product(memberships: List[npt.ArrayLike]) -> npt.ArrayLike:
"""
Applies the element-wise function f(u, v) = u * v.
:param memberships: List of arrays of membership values.
>>> from fuzzy_expert.operators import product
>>> x = [0, 0.25, 0.5, 0.75, 1]
>>> product([x, x, x])
array([0. , 0.015625, 0.125 , 0.421875, 1. ])
"""
result: npt.ArrayLike = np.array(memberships[0])
for membership in memberships[1:]:
membership = np.array(membership)
result: npt.ArrayLike = result * membership
return result
[docs]def maximum(memberships: List[npt.ArrayLike]) -> npt.ArrayLike:
"""
Applies the element-wise function f(u, v) = max(u, v).
:param memberships: List of arrays of membership values.
>>> from fuzzy_expert.operators import maximum
>>> x = [0.1, 0.25, 0.5, 0.75, 0.3]
>>> y = [0, 0.75, 0.5, 0.25, 0]
>>> maximum([x, y])
array([0.1 , 0.75, 0.5 , 0.75, 0.3 ])
"""
result: npt.ArrayLike = np.array(memberships[0])
for membership in memberships[1:]:
membership = np.array(membership)
result: npt.ArrayLike = np.maximum(result, membership)
return result
[docs]def minimum(memberships: List[npt.ArrayLike]) -> npt.ArrayLike:
"""
Applies the element-wise function f(u, v) = min(u, v).
:param memberships: List of arrays of membership values.
>>> from fuzzy_expert.operators import minimum
>>> x = [0.1, 0.25, 0.5, 0.75, 0.3]
>>> y = [0, 0.75, 0.5, 0.25, 0]
>>> minimum([x, y])
array([0. , 0.25, 0.5 , 0.25, 0. ])
"""
result: npt.ArrayLike = np.array(memberships[0])
for membership in memberships[1:]:
membership = np.array(membership)
result: npt.ArrayLike = np.minimum(result, membership)
return result
[docs]def defuzzificate(universe, membership, operator="cog") -> dict:
"""Computes a representative crisp value for the fuzzy set.
:param universe: Array of values representing the universe of discourse.
:param membership: Array of values representing the membership function.
:param operator: Method used for computing the crisp representative value of the fuzzy set.
* `"cog"`: Center of gravity.
* `"boa"`: Bisector of area.
* `"mom"`: Mean of the values for which the membership function is maximum.
* `"lom"`: Largest value for which the membership function is maximum.
* `"som"`: Smallest value for which the membership function is minimum.
>>> from fuzzy_expert.operators import defuzzificate
>>> u = [0, 1, 2, 3, 4]
>>> m = [0, 0, 0.5, 1, 1]
>>> defuzzificate(u, m, "cog")
2.9166666666666665
>>> defuzzificate(u, m, "boa")
3.0
>>> defuzzificate(u, m, "mom")
3.5
>>> defuzzificate(u, m, "lom")
4
>>> defuzzificate(u, m, "som")
3
"""
def cog():
n_areas = len(universe) - 1
areas = []
centroids = []
for i in range(n_areas):
base = universe[i + 1] - universe[i]
area_rect = np.minimum(membership[i], membership[i + 1]) * base
centr_rect = universe[i] + base / 2.0
if membership[i + 1] == membership[i]:
area_tria = 0
centr_tri = 0
elif membership[i + 1] > membership[i]:
area_tria = base * np.abs(membership[i + 1] - membership[i]) / 2.0
centr_tri = universe[i] + 2.0 / 3.0 * base
else:
area_tria = base * np.abs(membership[i + 1] - membership[i]) / 2.0
centr_tri = universe[i] + 1.0 / 3.0 * base
area = area_rect + area_tria
if area == np.float64(0):
centr = np.float64(0)
else:
centr = (area_rect * centr_rect + area_tria * centr_tri) / (
area_rect + area_tria
)
areas.append(area)
centroids.append(centr)
num = sum([area * centroid for area, centroid in zip(areas, centroids)])
den = sum(areas)
return num / den
def boa():
n_areas = len(universe) - 1
areas = []
for i_area in range(n_areas):
base = universe[i_area + 1] - universe[i_area]
area = (membership[i_area] + membership[i_area + 1]) * base / 2.0
areas.append(area)
total_area = sum(areas)
target = total_area / 2.0
cum_area = 0
for i_area in range(n_areas):
cum_area += areas[i_area]
if cum_area >= target:
break
xp = [universe[i_area], universe[i_area + 1]]
fp = [cum_area - areas[i_area], cum_area]
return np.interp(target, xp=fp, fp=xp)
def mom():
maximum = np.max(membership)
maximum = np.array([u for u, m in zip(universe, membership) if m == maximum])
return np.mean(maximum)
def lom():
maximum = np.max(membership)
maximum = np.array([u for u, m in zip(universe, membership) if m == maximum])
return np.max(maximum)
def som():
maximum = np.max(membership)
maximum = np.array([u for u, m in zip(universe, membership) if m == maximum])
return np.min(maximum)
universe = np.array(universe)
membership = np.array(membership)
if np.sum(membership) == 0.0:
return np.mean(universe)
return {
"cog": cog,
"boa": boa,
"mom": mom,
"lom": lom,
"som": som,
}[operator]()


doc_title = "Concurrency" doc_next = [] {% extends doc.html %} {% block doc %}
It is a primary design goal for Aspen to elegantly support both threaded and cooperatively scheduled concurrency models. Right now everything is done except the “elegantly” part. You have:
diesel.thread(func, *a, **kw)
call for one-off
threadsSee this design doc for details on where things are headed in terms of wrapping these in Aspen.
{% end %}


Cache Trail
Home
Login
Register
Challenge
Geo hunt in Helsinki! Do you know where is this place?
Here are some hints for you:
It is one of the oldest park in Finland
On 1st May, this place is full of young people wearing student hats having picnic


Customer Satisfaction Survey
{{dataLoadStatus}}
Metrics
Avg. Sat. Index: {{mean}}
Standard Deviation: {{stdDev}}
Variance: {{variance}}
Upper Bound: {{upperBound}}
Lower Bound: {{lowerBound}}
Calculate
Outlying Data
Survey ID
Sat. Index
{{outlier.surveyId}}
{{outlier.satIndex}}
{{activeComment}}
{{question.questionName}}
{{question.percentages[4]}}% Very Satisfied
{{question.percentages[3]}}% Somewhat Satisfied
{{question.percentages[2]}}% Indifferent
{{question.percentages[1]}}% Somewhat Disappointed
{{question.percentages[0]}}% Very Disappointed


Below are all of your data stores in our storage system. You can edit, delete or create them using our API, or delete and view them here.


--- layout: post permalink: musicwizard.html Tags: Array NameOfCoupon: Music Wizard Cash Back Summary: See our Music Wizard Coupon Code, Music Wizard Rebate, Music Wizard Promo Code, Music Wizard Discount, Music Wizard Coupon Cash Back Rebate here. MetaKeywords: Music Wizard Coupon Code, Music Wizard Rebate, Music Wizard Promo Code, Music Wizard Cash Back Rebate, Music Wizard Discount, Music Wizard Coupon Image: images/10957.gif LinkURL: http://www.shareasale.com/r.cfm?b=65390&u=412002&m=10957 affiliate_url_link: http://www.icouponblog.com/jane.php?id=837 thesis_readmore: See the Music Wizard Coupon thesis_thumb: http://www.icouponblog.com/tn.php?merchantURL=musicwizard.com/includes/services/_shareasale.cfm Title: Save 12.5% - Music Wizard Coupon Code for musicwizard.com/includes/services/_shareasale.cfm. Music Wizard Rebate & Discount thesis_description: Our Music Wizard Discount Coupon Code for musicwizard.com/includes/services/_shareasale.cfm. We have the best Music Wizard Rebate anywhere. thesis_keywords: Music Wizard, Music Wizard Coupon Code, Music Wizard Discount, Music Wizard Rebate product_name: Music Wizard hop_url: http://www.icouponblog.com/hop.php?id=837 ---
Learn to play the piano in fifteen minutes. Piano lessons no longer have to be expensive, toiling exercise.  Professor Don Beetle and his music partner Delany created the Piano Wizard method. This method received rave reviews and multiple awards. Piano lessons are expensive and time consuming.
Music Wizard utilizes a simple video game where the children are taught the basic moves that later help them play the piano later on. Playing the piano was never such an easy task as Music Wizard makes it. The transition from game to an actual piano takes no time. Impress your friends and neighbors. By inviting them over to hear you play the piano. Music Wizard is designed for people of all ages. Your children will learn piano without any effort . Most learn to play the piano without even realizing that they are playing a musical instrument. Get this amazing product online today,
Traditional piano lessons teach musical notations first. Whereas Music Wizard’s Piano Wizard teaches the piano via video games which enables the children to play the piano within fifteen minutes. Check out Music Wizard and you will be pleasantly amazed. If you always wanted to play the piano but never got around to it or couldn’t afford it then Music Wizard is the best products for you. It is easy to learn.


interface Doctrine\Common\EventSubscriber
An EventSubscriber knows himself what events he is interested in.
If an EventSubscriber is added to an EventManager, the manager invokes
returned events.
Construction
Hierarchy
Constants
Properties
Methods
-
getSubscribedEvents () : string[]
Returns an array of events this subscriber wants to listen to.
Parameters Return string[]


This is Page 2
Go back to Page 1
Name:
Kelvin
Address:
Singapore
Name:
Password:
Address:
Gender:
Male
Female
Hobby:
Playing games
Watching videos
Dancing
Cooking
Reading


Murang’a High School was started in 1964 through the Catholic Diocese of Nyeri, at that time under the late Bishop Gatimu. The mission built classrooms and administration block, to enable the school to admit its first students in 1964. The school started with a total number of 35 students (boys), drawn from the then Murang’a Administrative Divisions of Kangema (5 Students), Kigumo (5), Kandara (5) and the host Kiharu division (20) boys. Two teachers were posted to teach at the school.
The late Bishop Gatimu, in 1996 appealed to the Government to take over the running of the school, and the Government took over and started building permanent structures for the school, through USAID funding. It constructed office block, dormitories, dining hall, laboratories and three streams. The school has now 6 streams in form 1 & 2, and 5 streams in form 3 & 4 with a total of 1201 students, 40 teaching staff and 30 non-teaching staff. Murang’a High School remains a Catholic sponsored School to date.
It has a total acreage of 31 (acres), which include St. Mary’s Primary School.


A atom-style
library of CSS
atomic
elements. To build app
faster and
more flexible!
FLEXIBLEBuilt your web app like built a building
blocks,change everything you want change in HTML.
SIMPLEWrite atom-style CSS in HTML/React
components/Angular templates,no more others,just CSS.
FASTERTo code like a machine,write more
pages in a few times,spend more time in JS or API.
The way of builting web App that
based
on future. Build in this way. Build your web App in the minimalist
wind & atom.css.
Contact
us to get your own web App built by atom.css and Fic Design.
DemonstrationSee how to use atom.css building you web
Appfaster,and
flexible,
all usage in Doc.


FreeNAS + RancherOS, my NAS Docker Stack
I’ve been a FreeNAS user since the 8.x days, having decided to ditch a self-hosted file server based off Fedora with a pretty basic MDADM + ext3fs storage setup. Running on commodity hardware, the prior setup was fine, but little other than an extensible NAS that was somewhat of a hassle to manage and keep updated. FreeNAS and it’s plugins jails promised to do most of what I was doing beforehand, in an appliance format that is much easier to maintain.
FreeNAS Corral, aka FreeNAS 10, was supposed to bring native Docker support to the product with the help of a built-in Bhyve + boot2docker setup built right into the new UI. While jails are technically as flexible as FreeBSD and the ports library are, plugins-jails are a bit more complicated and you are generally dependant on a maintainer for updates. Case in point: as of my writing of this, the PBI jail for Owncloud is stuck at 9.1.2, dating back to November of 2016. To compare, my docker instance of Owncloud is currently on 10.0.7.
Plugin jails have been helpful for me and countless others, but it’s time to admit that Docker is just better at doing what the original system set out to do. Here’s what I’ve done to transition to Docker on FreeNAS.
Setup
Setup is pretty straight-forward and well-documented in the FreeNAS docs, however it is described in a very procedural fashion which doesn’t really give you any insight of what is being done behind the scene. This makes it very confusing when things break; I was pulling my hair out for hours because of a corrupt download not completing. For thoroughness’ sake, here is an overview of what following the steps in the guide accomplishes:
- Creates a Bhyve VM
- Creates a RAW drive image that will be used for storage
- Downloads the RancherOS image and flashes it (dd?) to your drive image to make it bootable
- Creates a basic RancherOS configuration file from the options entered in the additional options entered in the storage device menu.
If you can’t get a serial console or can’t get the machine to boot properly, remember this order and use it to diagnose. This should be obvious, but the recommendations regard the provisioning of CPU and RAM resources are just that; depending on what you intend on running within your Docker VM, assign system ressources as necessary. In my case, assigning just one VCPU held back my bitcoin node from properly syncing. Adding another one fixed the problem and made all the services running in containers visibly more snappy.
A word of warning on giving the VM more system ressources: I had problems giving the machine more than 2 virtual CPUs; the machine seems to want to boot up, with Bhyve init stuff showing up on the serial console, but the OS stalled shortly before all the services could go up.
Storage
The modularity of Docker is what makes its strength, but in order to be truly useful, if must be built on a stack that is itself just as modular. For example, in continuity with the spirit of containerizing, I aught to be able to be able to snapshot and replicate individual containers to back them up locally or offsite. Storing everything on the raw disk image just isn’t compatible with that vision of things.
You could store everything on ZFS vdevs through additional VM volume assignments, but then you lose the ability to snapshot under certain conditions.
Rancher has convoy that can make docker volumes persistent, and store them on a variety of backends, but the additional layer of docker-style volumes doesn’t really need to be there.
I opted instead to use nfs-client and bind-mounts in my containers to my install of FreeNAS, with the method detailed here. I modified the steps to fit my application slightly. First of all, I elected to created a child dataset for every container, in order to be able to snapshot and replicate as mentionned above. Secondly, I had to make seperate NFS shares for each container, since NFS will not traverse nested datasets as one would expect. With this larger amount of shares, listing the NFS mounts was done directly in my cloud-config.yml file, as so.
You might be tempted to use SMB, which is also supported by RancherOS; this isn’t a good idea if you plan on running any container that includes Apache because it is heavily reliant on UNIX-style permissions to function properly, and that just won’t translate over SMB.
Networking and security
Using NFS as a link between your Docker VM and your ZFS storage introduces security problems caused by the ways that RancherOS and NFS works. First of all, RancherOS runs all it’s Docker processes as root along with the NFS client; secondly, NFSv3 uses client-side info on the user accessing the share to determine if it has the permission to access the share or not. All this means that you will have to disable root squashing for things to work; I went about this by adding root/wheel to the maproot user/group fields in the advanced settings of my NFS shares.
 The way around this is making sure that the network access to the address that the NFS service is bound to is impossible for everything but your Docker VM. The advanced settings of the individual NFS shares provide a client allow list, which you should use to whitelist ONLY your VM with its IP.
The ideally you’d also want to use a dedicated network bridge to pass the traffic off between your storage and the VM. The problem is that the web UI does not show you bridge interfaces when offering you the options for VM NIC mapping; my workaround was to plug in a dead-end VLAN in an unused interface on my server, and have all the Docker-related traffic come in through this interface.
A note on pre-11.1-U2
Going from one reboot to the next in the 11.1 series of releases (not U2 though), I’ve gotten weird networking issues where the networking interface(s) used by the RancherOS instance would not bind to the correct NIC, making connection to the NAS-provided storage or to the rest of the network impossible. Digging around in the bug tracker, it seems that the way VM NICs are bridge may be sub-optimal. If you are experiencing weird issues after configuring your networking in the RancherOS VM, check your network configuration with ifconfig
. You should get something like this:
The TAP interface is the host-side NIC that gives your VM network access. In my setup, the VLAN interface is the parent interface that can be found in the ==Devices/NIC== menu of the VM. If the binding is properly made, the bridge should group those two interfaces together. If you have many TAP interfaces and bridges that you can’t make sense of, upgrade to 11.1-U2 and reboot, things should clean up.
Managing Docker
RancherOS kind of suggests that using Rancher to manage your containers might be a good idea, but it seemed a bit clumsy and overkill for a single host setup. I instead opted for Portainer, which I was somewhat already familiar with and is much less intimidating to use and deploy, seeing that it’s really just a nice front end for the docker commands you you know and love.
At the RancherOS command line, run the installation one-liner on the Portainer website, subsituting bind mounts for the volume if necessary, and adding the restart policy if you so desire. Provided the restart-policy is ok, Portainer will start up with RancherOS bootup.
Monitoring
I’ve been building a monitoring system on the TICK stack for my home setup, and as it turns out Docker monitoring is quite simple. Telegraf has a plugin specifically for docker monitoring, just spin up a Telegraf instance with the docker.sock endpoint mapped through, configure the config file, and you’re good to go.
With the intergrated Graphite listener enabled and the ports open, you can also configure FreeNAS to output its metrics to Influx aswell… your Influx instance can of course be within docker if you so desire.
If you want better insights into your NAS’ performance and don’t have a monitoring setup built up, this “FreeNAS monitoring on itself” is not a bad choice, particularly if your FreeNAS server is your only machine.
Conclusion
If you run anything critical, you might want to run a dedicated docker host. However, if you have spare CPU cycles and memory (although with ZFS, it could be argued that there is no such thing as “spare memory”), why not? Docker absolutely seems like a viable replacement for plugin-jails, and if your FreeNAS box is a backup repo for databases hosted elsewhere, you can now run replication services in containers instead pushing dumps.
I just wish that Docker was native to the base OS, and that the Bhyve + RancherOS + NFS stack could be avoided. Limits on provisionning hardware are also a bit problematic, but it is what it is. There’s a Docker container for everything… have at it!


Mrs Catherine Crowe, who wrote the best-selling Night Side Of Nature [1848], an enormous compilation of ghost stories, was found ‘in the street, clothed only in her chastity, a pocket-handkerchief, and a visiting-card. She had been informed, it appeared, by the spirits, that if she went in that trim she would be invisible’,


"LIBERTINE "found only Acts 6:9, one who once had been a slave, but who had been set at liberty, or the child of such a person. In this case the name probably denotes those descendants of Jews who had been carried captives to Rome as prisoners of war by Pompey and other Roman generals in the Syrian wars, and had afterwards been liberated. In A.D. 19 these manumitted Jews were banished from Rome. Many of them found their way to Jerusalem, and there established a synagogue.
"LIBERTINE "found only Acts 6:9, one who once had been a slave, but who had been set at liberty, or the child of such a person. In this case the name probably denotes those descendants of Jews who had been carried captives to Rome as prisoners of war by Pompey and other Roman generals in the Syrian wars, and had afterwards been liberated. In A.D. 19 these manumitted Jews were banished from Rome. Many of them found their way to Jerusalem, and there established a synagogue.