Ok i'm lazy to look for info! :)
Seriously, what is the mindset behind lowwrite version, why you need a specific version and how it's accomplished?
Archived Forum |
|
V8.6 - 9.x (extended) DevelopmentSubmitted by chaveiro on Fri, 03/07/2015 - 19:43Ok i'm lazy to look for info! :) Seriously, what is the mindset behind lowwrite version, why you need a specific version and how it's accomplished? » |
Re: V8.6 - 9.x (extended) Development
I think Trystan is by far the best guy to answer this in full, but IMO to answer your Q's
To reduce wear and possibility of failure when running on an SDcard.
I like to think we don't, we just need a "low-write" mode of operation, which can be enabled/disabled in the settings.
The OS is mounted read-only and the data files etc are moved to another partition which is mounted RW without Journaling.
The data being processed by emonCMS is held in RAM and only written to disc every minute in efficient block sizes.
Data can only be appended to the data feeds and not overwritten
All editing of historical data is disabled.
All write intensive processes are removed.
Use of SQL is reduced to settings only
SQL based feeds are not used
Last updated at and last value are not recorded in SQL tables
This is from memory so forgive any omissions/errors but I think I got most of the main items. The "buffered-writing" is managed by a "feedwriter" service and you can get more info on the low-write research here.
This is all relates directly to "low-write" functionality but doesn't reflect all of the differences found in the "low-write" version as there is also a lot of new functionality and changes to the input/node modules etc that is specific to the current low-write "version" of emoncms but isn't "low-write" specific, if that makes sense.
Paul
Re: V8.6 - 9.x (extended) Development
Also The log files and temp files are moved to a ramdisk further limiting writes to the SD Card. Memory swapfile is disabled too IIRC. as is the last accessed time for read files. The read only file system means there is less likely to be corruption of the OS if there is a power failure.
Re: V8.6 - 9.x (extended) Development
Write only filesystem is a config of the os.
So lowrite version is a full linux image or just emoncms?
Re: V8.6 - 9.x (extended) Development
I think it's a separate branch of the main project on GITHUB.
Does anyone know if it's possible to add in bits of the extended branch to it without breaking the low write part?
Re: V8.6 - 9.x (extended) Development
Yes, read-only is the OS, the original "rock-solid gateway" was a forwarding only SDcard image consisting of the OEM gateway (emonhub's predecessor) installed to IPE-R1, a custom read-only OS based heavily on raspbian, buffering and forwarding data to a remote emoncms, usually emoncms.org.
The "rock-solid gateway" was very stable and reliable because of the resilience of a read-only file system, but IPE-R1 got out of date and started causing problems when updating and had little or no support.
So emonHub running on a stock Raspbian lightly modded to mount read-only replaced the "rock-solid gateway" and emoncms low-write was included but dormant, on the new SDcard image for those who wished to enable it.
The read-only is more about safeguarding the filesystem against accidental writes and corrupt settings etc but every little helps, it works for low-write too, if it is read only the log and temp file writing is reduced. aside from incidental write reductions I don't think there is a major need for read only to provide low-write.
The low-write emoncms is indeed a separate branch which is why this thread and other recent discussions are exploring the possibility of "merging" them. And hopefully that will encourage development of both strains of emoncms on a common path where possible, but currently most of the stuff that isn't in the low-write isn't there for a reason eg heavy dependence on SQL is probably the most common reason for exclusion.
"Low-write" has to be a total mindset to develop emoncms to run reliably on an SDcard so must work efficiently with the OS and other softwares, so while technically it is specifically the emoncms version, It demands a low-write environment too,
Another side product of the read-only image is it forces us to put ALL the files that must be written to and persisted on a RW partition which could suit easy back-up and restore routines by separating file system and user files.
Paul
Re: V8.6 - 9.x (extended) Development
So i downloaded last github 8.5 and last low-write branches and did a file by file compare.
Last 8.5.2 XT is compatible with 8.5 standard, so the comparison applies to it also.
Here is the comparison and what need to be done, really just 3 file in red must be careful analyzed, orange just a merge and green just copied :
https://docs.google.com/spreadsheets/d/1Pt4W4z3BQM5ipIqvVTtlAEEV13P41ucY...
My conclusions:
My propose is to ditch all version of emoncms to date, add the suggested requirements to 8.5.2 xt and make a universal version for all with buffered writing being a configuration flag.
I can help doing the changes but cant test as i dont have redis on my shared server.
Let me hear from who wants to help.
Re: V8.6 - 9.x (extended) Development
Although I have very limited programming skills, I do have a Raspberry Pi with Redis running, and could help with testing.
It would be reassuring however at this stage to get some feedback from Trystan & Glyn, to establish if this fits into their development plan, and gets their support.
Paul
Re: V8.6 - 9.x (extended) Development
That's interesting ! and I think everyone would benefit from a single emoncms so I'm happy to help it I can, If I could code PHP I would of probably tried this myself by now but we don't need another version that's for sure.
It would seem that aside from a few user settings to set minor preferences, we could really boil this down to 2 main settings "disable_redis" and "disable_sql" to give us 3 options.
"Full" which uses both redis and sql,
"Redis only" AKA "low-write" for which redis is mandatory and SQL (logging) is not an option
"SQL only" for "shared hosting or windows" for which SQL is mandatory and redis is not an option
These 2 flags could allow/prohibit the running of the feedwriter and installation redis as well as control the availability of sql as a data logging engine.
I'm happy to set up a RPi to initially test the XT branch on a Pi, although some write activity tests & comparisons will be needed too as it's not just about if it works but about minimizing the writes too.
I know Paul Reed is using your XT version currently, installed to a RPi running a HDD (so redis will be active I believe) and he is very active at testing and reporting errors, so all 3 scenarios could be covered (assuming your hosted version ports to windows ok)
It maybe a little premature to say "ditch all emoncms versions" especially as T & G have emoncms.org to manage, but it would be great if we could reach a single unified emoncms, hopefully they will be on board
Paul
Re: V8.6 - 9.x (extended) Development
Thanks pb66 and Paul you are very helpful.
Paul i agree with you:
Trystan & Glyn can you kindly share your thoughts?
pb66: I think a single flag $low-write= true/false is really what's needed, the rest is assured with some code verification routines.
Low-write besides the buffered writing when a input value is received works just like 8.5+ with redis active.
So just need to ensure if low-write is true, redis is mandatory with some code check routine.
On 8.5.2 xt we have the option to disable engines individually via config, A code change to force low-write flag to disable unsupported engines (without erasing files) is just what's needed.
No change was made in 8.5-to latest xt that could break windows compatibility so it must be working fine.
The low-write daemon that does the buffered writing can be a scheduled task in windows polling at fixed intervals. But there are no windows platforms like raspberry pi with sd cards targeted to emon, right?
Re: V8.6 - 9.x (extended) Development
I didn't suspect the windows port was broken or anything, I was just categorizing windows servers with the shared hosting linux servers as they cannot depend on redis. I'm a little confused as to what you mean by only needing one setting when there are clearly 3 different senario's, Are you saying redis support in emoncms is determined automatically or that it will be permanently enabled or that it will only come into play with the low-write option?
Re: V8.6 - 9.x (extended) Development
Yes, just do some checks in code for the correct configuration settings like this:
If low-write mode is set and redis is not set in config, a config error is given back asking to review the config and set redis because it's required for this mode.
If low-write mode is not set, redis config can be any value.
Re: V8.6 - 9.x (extended) Development
Shameless bump!!
I would of thought a single version of emoncms with selectable modes and features would of been in the interest of all concerned, users, devs and support, no ???
With one variant & 3 modes of operation, it would facilitate running a stable (master) and cutting edge (development) versions without complication while providing a consistent and tested route to upgrading.
Paul
Re: V8.6 - 9.x (extended) Development
Hello, sorry to miss this thread, thanks Paul for the heads up!
As far as the low-write functionality is concerned, ideally there should not be two separate implementations as lowering the disk write load would be very useful across all platforms for longevity of SD cards, SSD's and spinning harddrives, certainly it would be great for emoncms.org too.
However the implementation needs more work and there are other differences that are also design decisions in a particular direction for other reasons that mean its not as simple as finding a way to merge them as a large part of it is a question of the direction of travel of emoncms and what we try and support - at least in the core install.
Here's a list of the main differences between the low-write branch and v8.5 branch:
Low-write
Input processors
Log to feed
Wh accumulator
Publish to MQTT
x
+
Power to kWh
kWh to power
x input
+ input
/ input
- input
Accumulator
Rate of change
Signed to unsigned
Reset to zero
Total pulse count to pulse increment
Allow positive
Allow negative
+ feed
- feed
* feed
/ feed
Input processors
Log to feed
Wh accumulator
Publish to MQTT
x
+
Power to kWh
kWh to Power
x input
+ input
/ input
- input
Accumulator
Rate of change
Signed to unsigned
Reset to zero
Total pulse count to pulse increment
Allow positive
Allow negative
+ feed
- feed
* feed
/ feed
Daily processors:
Input on-time
Wh incremements to kWh/d
kWh to kWh/d (deleted)
Daily average
Power gained to Kwh/d (deleted)
kWh to kWh/d
Max value
Min value
Power to kWh/d
Other
Phaseshift (deleted)
Histogram
Heat flux
update feed @time
Feed engines
PHPFina
PHPTimeseries
Implements buffered writing using redis (append only)
Feed engines
PHPFina
PHPTimeSeries
PHPFiwa
Histogram (uses mysql)
Writes directly – no buffered writing.
Visualisations
Realtime
rawdata
bargraph
graph
multigraph
Visualisations
Realtime
rawdata
bargraph
graph
multigraph
smoothie
compare
Visualisations that require ability to update
edit realtime
edit daily
Visualisation's not yet adapted to use accumulating watt-hours for daily data:
zoom
stacked
stackedsolar
simplezoom
orderbars
Visualisations that require histogram engine
threshold
orderthreshold
histgraph
As Paul Burnell mentioned the low write version with the way the buffering is implemented (at present) means that data can only be appended not updated. You also have to wait until the data is written before it becomes available to view on the graphs.
Ideally the implementation would be extended to include the ability to update datapoints and have data request method that can access data across the ram buffer and physical disk seamlessly. That would then allow for longer buffer times maybe up to 5-15mins which would further reduce the write load.
Daily datatypes
Daily datatypes are not necessarily needed as the same result can be achieved with accumulating watt-hour feeds with additional benefits such as timezone flexibility, ability to query at any interval: hourly, monthly etc. Supporting all the different input processors and visualisations for both approaches adds quite a bit of additional work,
Histogram and phpfiwa
It would be great to get histogram functionality back in the low-write branch but the current implementation is not write efficient. A significant improvement could be gained by moving histogram creation to a post-processing implementation, rather than compute the update to the histogram on each new datapoint as its received it could be possible to instead manually run the histogram process when you need to view the histogram data at which point it would build the histogram up from the last point in a batch process writing in larger blocks.
Calculating the average layers for PHPFiwa could also be a post-processing stage rather than repeatedly updating datapoints in each layer as data is received.
If anyone is keen to look at any of these things that would be great! and Id be happy to give input. Im working on a retrofit modeling tool for Carbon Coop at the moment so im pausing on core emoncms development for a bit and will be focusing more of my development on the mysolar/myelectric app side of things in the short term.
Re: V8.6 - 9.x (extended) Development
@Trystan, did you see the Node to Feed mapping - idea to save space thread also, here chaveiro suggests a virtual feed concept for v8.5xt which could work very well with the "buffered write" concept. Aside from working towards aligning the variants it could also reduce the need for persisting every feed at input time and eliminate any needless feeds currently persisted purely to provide stepping stones in calculations or a realtime value that has no historical value.
Perhaps we should look at redis alternatives rather than ploughing too much into something that isn't widely available on shared hosting or windows compatible, (especially with windows 10 for raspberry pi on the horizon ?)
A home brew or better fitting solution might make it easier to implement across all platforms (including RO OS's) and overcome the delayed graphing (and potentially datapoint editing) in low-write too.
Paul
Re: V8.6 - 9.x (extended) Development
Thanks Paul, I think it may be easier now to install redis on windows but then that doesnt solve the shared hosting issue.
Redis on windows:
http://stackoverflow.com/questions/6476945/how-do-i-run-redis-on-windows
Re: V8.6 - 9.x (extended) Development
Nor unfortunately, with the bigger issue of bridging the gap between the most recent datapoints (held in RAM by redis) and the last "buffered-write" (saved as feeds on disc) for seamless graphing, datapoint editing and calculations etc.
Re: V8.6 - 9.x (extended) Development
Led by the table above I just updated my emonPi and still only have 13 of the 22 listed input processors
So I assume they are work in progress and can be implemented quite easily maybe? We seem to be missing
Publish to MQTT (requested in the Publish to MQTT with vlow write image? thread)
kWh to power
Rate of change
Signed to unsigned
Total pulse count to pulse increment
+ feed
- feed
* feed
/ feed
Replacing PHPfiwa average layers with post-processing averaging would be good, removing the need for separate PHPfiwa/na feed engines and providing data to replace all daily totals/min/max/average processes and the resulting feeds with hourly, daily, weekly, monthly and annual calculations on the fly would be a great improvement, more versatile, less writes and accurately based on the latest data (including any subsequent edits to the underlying data). And say goodbye to the timezone issues too (hopefully).
Paul
Re: V8.6 - 9.x (extended) Development
Just a note: post-processing averaging is not an option because it would take too long to calculate in real time.
Post processing can only be done on sampled data for the same reason.
Re: V8.6 - 9.x (extended) Development
as lowering the disk write load would be very useful across all platforms for longevity of SD cards, SSD's and spinning harddrives,
I can see where a low write-load would extend the life of SD cards, SSDs and other flash memory based storage, but how does it help extend rotating media drive lifetime? I've got hard drives that were manufactured over 10 years ago, see regular use, and still work fine.
Re: V8.6 - 9.x (extended) Development
I take you're point Bill, but the overall aim of the thread is to move to a single version, which would be easier to install/maintain & develop.
Paul
Re: V8.6 - 9.x (extended) Development
Hi Paul,
I'm not advocating a separate version for HDDs, just curious as to how a low-write version is supposed to extend HDD life.
A single version would indeed be preferable!
Re: V8.6 - 9.x (extended) Development
Been working on 8.6 that will merge low-write option.
Just realized that there are 2 different buffering strategies available :
1 - Buffer the input raw data. Available on 8.5 at que_input_controller.php and /scripts/input_queue_processor.php
2 - Buffer the feed write data. Available on low_write at feed_model.php and /run/feedwriter.php.
Both use redis for cache.
There is also code in /scripts/phpmqtt_input.php for a mqtt option to input data, but not write buffer oriented.
I think 2 is best because only buffers already processlist processed data, just before writing to the engine.
So we can get lastvalue in cache to show in the UI in realtime.
But why was implementation 1 made? What was the idea at the time?
Re: V8.6 - 9.x (extended) Development
Shame about the "post-processing averaging" but it make sense.
The "que_input_controller.phpand and /scripts/input_queue_processor.php" pre-dates the "low-write" versions I think, combined they are an alternative "input_controller.php" that significantly improves the request handling rate on busy server.
The phpmqtt stuff is relatively recent and may not be write buffered as mqtt is not implemented on emoncms.org yet or maybe the input buffering is no longer used since the servers were updated ?
Method 2 is the low-write stuff.
Paul
Re: V8.6 - 9.x (extended) Development
Don't know if you've seen the git readme file for the low write version here, but it gives a little information about que_input_controller.php.
Paul
(Note - thread title changed to reflect subject)
que_input_controller.php
You may want to use this controller instead of the default controller in very high post rate, throughput applications.
With this redis based input que post rate from a sequential free running post benchmark went from around 97 req/s up to 138 req/s on 4 core 2.0Ghz 8GB machine.
To use it just switch the controller's around. Rename que_input_controller.php to input_controller.php
You will also need to use the worker process which works through the queue. Which can be found in the scripts directory in the root emoncms folder.
Re: V8.6 - 9.x (extended) Development
Hi all,
Very interesting discussion. I also agree that a unique version wit flags seems to be the better option.
I'm using emoncms on a linux shared hosting. As it's not possible to enable redis on that server, I modified process_modell.php to make Wh_accumulator and kWh_to_power work without redis.
Let me know if you're interested in it.
Eric
Re: V8.6 - 9.x (extended) Development
Yes que input controller does not do any write buffering its just there to seperate the http request stage from the processing and data writing which reduces the http request time freeing up apache instances for the next request as fast as possible. It's needed on higher post rate systems like emoncms.org.
I think its ok to develop different versions of emoncms for different platforms, the requirements for one might be quite different from another and making one version with code and flags for all options I find makes the code harder to read, Im more likely to make more mistakes etc. There's interesting information on developing scalable web architecture here http://aosabook.org/en/distsys.html
This is a particularly interesting chapter from our perspective with timeseries data storage being the core component http://aosabook.org/en/graphite.html
But developing for emoncms.org is quite different to the raspberrypi, maintaining for with/without redis, with/without mqtt, windows, shared etc is a lot of options.
Re: V8.6 - 9.x (extended) Development
One approach could be to further separate the emoncms modules from the core repository. If we take out the dashboards module and have it installed via git as is done for apps module etc then this would make it easier to use the new developments like your great improvements to the dashboards module in extended chaveiro. Ideally there needs to be a way to modularise the visualisations too and input processing...
ie: If you have a system without the histogram engine it makes sense to not have the historgram visualisations present
Re: V8.6 - 9.x (extended) Development
It would also be convenient if it was possible to replace redis on systems without redis support with a native perhaps php shared memory redis api compatible in memory database. If at this point in index.php where redis is not available it could fall back to an alternative that could be interesting https://github.com/emoncms/emoncms/blob/v8.5/index.php#L34
That would then only require one set of code in the main modules not one for mysql mode and another for redis mode.
Re: V8.6 - 9.x (extended) Development
Thanks for all answers.
Here i must disagree, its proved already that a non maintained branch will freeze in time and as it is a pain to merge two branches, imagine having to merging more later. I take the opposite aproach, differences are not really that big. If code is correctly organized and good programming patterns are used, it's easy to read the code. Succinct commenting helps too.
Histogram is a data type, that is tricky, maybe we can take other route with Virtual feeds and post-processing. Needs thinking. Regarding process model later we should think on making it plug in modular, the process is already a module for 6.0. Its really spaghetti code that process_model.php.
Do you have anything in mind? I added new Mysql Memory engine for 8.6, data is kept in RAM and lost on power off, but first need to make redis buffer work.
Other thing, about PHPTime series, was removed from 8.5, why? And is it really useful for future emonPI ?
Also clarify indentation of lines 147-149 please:
https://github.com/emoncms/emoncms/blame/low-write/Modules/feed/engine/P...
Re: V8.6 - 9.x (extended) Development
Hi all
Sorry to come back again on that topic but I read the whole thread and I still don't know if I need to have the Redis server installed on shared hosting linux servers.
Is this option included in "EmonCMS 8.6.0 Alpha 2015-07-20"?
Thanks for your help.
Walter
Re: V8.6 - 9.x (extended) Development
Hi, redis is required if using low-write mode on 8.6 Alpha.
On a shared server you dont need low-write mode.
Re: V8.6 - 9.x (extended) Development
Chaveiro, I've merged your dashboards module and visualisations changes (touch support etc) from the Extended branch to the v8.5 branch. Unfortunately the github diff tool is still showing many more changes than meld diff viewer is showing locally and the selective merge does not preserve the commit history, I'd like to preserve your authorship record. Do you know of a better way to do it? and do you have any ideas how we might sort the github diff issue?
Re: V8.6 - 9.x (extended) Development
There's a php shared memory database here https://github.com/adammbalogh/key-value-store-shared-memory but I imagine it might be quite a bit of work to replicate the redis api with it, and I dont know enough about php shared memory to know if there would be issues around security of the data on shared servers.
Re: V8.6 - 9.x (extended) Development
"Other thing, about PHPTime series, was removed from 8.5, why? And is it really useful for future emonPI ?" Not sure what your referring to there? PHPTImeSeries is in 8.5.
Looks like the lines should be:
if (file_exists($this->dir.$filename)) {
clearstatcache($this->dir.$filename);
$bytesize += filesize($this->dir.$filename);
}
Re: V8.6 - 9.x (extended) Development
Hi trystan,
On 8.5.2 i included all changes from 8.5 latest, no need to merge line by line. You can merge by replacing with 8.5.2 files blindly.
Resolving dificult conflits is time consuming, see http://www.gitguys.com/topics/merging-with-a-conflict-conflicts-and-reso...
Redis is giving excelent perfomance and i'm using zset to search datapoints in buffer, a feature not available on other options, also this kind of php modules are not usualy available on most shared hosting.
Why are other cache solutions being an option ?
Re: V8.6 - 9.x (extended) Development
I am just wondering if the low write version could be working with the data in the same way, but instead of operating directly on the SD card it stores the current active data in a RAM disk and then dumps the changes every 1 hour or 4 hours to the SD card.
Clearly this would mean a good shut down process is required and on restart would mean loading the existing data into the RAM drive.
In addition to reducing the differences between the versions greatly, it would also allow much easier correction of corrupt data, bulk adding of existing data to a data set and making backups much easier.
Re: V8.6 - 9.x (extended) Development
craigfryer: its under development.
trystan: about other buffers, see pipes demo : http://squirrelshaterobots.com/programming/php/building-a-queue-server-i...
Re: V8.6 - 9.x (extended) Development
ok, thanks.
Re: V8.6 - 9.x (extended) Development
To enable greater freedom when designing dashboards, it would be nice to be able to switch off or alter the 'snap to grid' default size, as a user setting within the 'administration' page.
Would that be of benefit to other users?
Paul
Re: V8.6 - 9.x (extended) Development
I can support that Paul!


What's New
Introduction
Welcome to Habari Version 0.8!
This latest release of Habari contains security fixes, major improvements, and feature changes. You should read the Upgrading notes before you upgrade.
This is also our first release from Github. Have a look at how to install Habari from Github.
Issues Addressed
Security
- Don't let admin pages be loaded in an iframe d8a544eb85
- Protect Habari Silo uploads from CSRF 04cd07adfc, 85940b8d8f
- Filter the page string of requested admin pages to remove a non-persistent XSS hole a0f34009aa
- Prevent direct loading of config files 5eb87a12ca
Thanks again to Mauro Gentile for working with us on these security issues, his contributions are greatly appreciated, as is his patience in waiting for this release before revealing these bugs!
Bugs
A complete list of all the bugs fixed is near impossible.
- Remove a call to a PHP 5.3+ method on the admin logs page when filtering by date. r5125 fixes #1447.
- Many strings that had translation values available but were not using them now will show localized text.
- Fix errors displayed when using Charcoal. 9a18afb6 fixes #221.
- Use signed values for moving taxonomy terms. 35735ae fixes #229.
- Wrong date in entry dash module. 7041fc62 fixes #208.
- Prevent direct access to files. 64089ee3.
Enhancements
- Add initial support for child themes, wherein a child theme can use all of the templates of its parent, overriding only templates and styles that it intends to augment.
- Improve the consistency of rewrite rule names, which may break plugins using those rules. The rule update_entries has been renamed update_posts.
- Change the default behavior of theme functions from echo to return.
- Add support for gzip and deflate compression to both SocketRequestProcessor and CurlRequestProcessor, so that any external HTTP requests will be seamlessly compressed to save bandwidth, 5e20c9f3b7 and 3687139d57
Other Changes
- The k2 theme has been removed. It can now be found in habari-extras.
Known Bugs
Many bug fixes and improvements have been made since the last release, but as with any piece of software issues and enhancement requests remain. For full details see Habari's change management system.
Credits
These release notes were compiled by the Habari Community.
On behalf of the community, we give our warmest thanks to the developers and contributors who made this Habari release possible.


Module class
Basic classes
Info:
- License: GNU GPLv3
- Author: Bowuigi
Fields
| classes.object | Requires object, expect and log |
Class Vector2
| classes.Vector2:new (x, y) | Create a Vector2
Do not call this function directly, use Vector2(x,y) instead, which will return a Vector2 instead of just being the constructor |
| classes.Vector2:copy () | Make a copy of a Vector2, useful for functions |
Class Vector3
| classes.Vector3:new (x, y, z) | Create a Vector3
Do not call this function directly, use Vector3(x,y) instead, which will return a Vector3 instead of just being the constructor |
| classes.Vector3:copy () | Make a copy of a Vector3, useful for functions |
Class Base
| classes.Base:new (onCreate, onDestroy) | Create a Base object
You usually don't want to do this, but to use Base:extend() instead, which is useful to add your own stuff |
| classes.Base:destroy () | Destroy a Base object |
Class Point
| classes.Point:new (position, rotation, speed, mass) | Create a new Point
Do not call this function directly, use Point(position, rotation, speed, mass) |
| classes.Point:setSpeed (speed) | Set the speed of a Point |
| classes.Point:setPosition (position) | Set the position of a Point |
Fields
Class Vector2
A simple two dimensional Vector for storing coordinates
- classes.Vector2:new (x, y)
-
Create a Vector2
Do not call this function directly, useVector2(x,y)
instead, which will return a Vector2 instead of just being the constructorParameters:
- x number X coordinate of the vector
- y number Y coordinate of the vector
- classes.Vector2:copy ()
-
Make a copy of a Vector2, useful for functions
Returns:
-
Vector2
The same Vector, but copied
Class Vector3
A simple three dimensional Vector for storing coordinates
- classes.Vector3:new (x, y, z)
-
Create a Vector3
Do not call this function directly, useVector3(x,y)
instead, which will return a Vector3 instead of just being the constructorParameters:
- x number X coordinate of the vector
- y number Y coordinate of the vector
- z number Z coordinate of the vector
- classes.Vector3:copy ()
-
Make a copy of a Vector3, useful for functions
Returns:
-
Vector3
The same Vector, but copied
Class Base
Base class for most object in the game
Allows for a create and a destroy functions
Allows for a create and a destroy functions
- classes.Base:new (onCreate, onDestroy)
-
Create a Base object
You usually don't want to do this, but to useBase:extend()
instead, which is useful to add your own stuffParameters:
- onCreate function Function to run when the Base object is created
- onDestroy function Function to run when the Base object is destroyed
- classes.Base:destroy ()
-
Destroy a Base object
Returns:
-
nil
A nil value so you can assign what used to be the base
Usage:
-- Create a base myBase = Base((function() print("Base created") end), (function() print("Base destroyed") end)) -- Prints: "Base created" -- Destroy the base myBase = myBase:destroy() -- Prints: "Base destroyed"
Class Point
A Point that contains position, rotation and more physics information
- classes.Point:new (position, rotation, speed, mass)
-
Create a new Point
Do not call this function directly, usePoint(position, rotation, speed, mass)
Parameters:
- classes.Point:setSpeed (speed)
-
Set the speed of a Point
Parameters:
- speed Vector2 Speed at which the point moves (in px/s)
- classes.Point:setPosition (position)
-
Set the position of a Point
Parameters:
- position Vector2 Position of the point


SSRatingPicker Class Reference
| Inherits from | UIControl |
| Declared in | SSRatingPicker.h |
Overview
A simple control for picking a rating.
The default configuration matches the rating picker in the App Store app (to the pixel). The textLabel
is
automatically faded in if there is no rating and faded out when there is a rating.
To receive changes when the selectedNumberOfStars
changes, add a target for the UIControlEventValueChanged
control
event (similar to UISegmentedControl
).
Tasks
Accessing the Star Attributes
-
selectedNumberOfStars
The float value of the selected number of stars. Setting this value will send
propertyUIControlEventValueChanged
to the pickers targets. -
totalNumberOfStars
The unsigned integer value of the total number of stars.
property -
emptyStarImage
The image draw for a star that is empty.
property -
filledStarImage
The image draw for a star that is filled.
property -
starSize
The spacing of stars.
property -
starSpacing
The spacing of stars.
property
Accessing the Text Label
-
textLabel
The text label drawn under the stars when there is no rating selected. (read-only)
property
Properties
emptyStarImage
The image draw for a star that is empty.
@property (nonatomic, strong) UIImage *emptyStarImage
Discussion
The image draw for a star that is empty.
Declared In
SSRatingPicker.h
filledStarImage
The image draw for a star that is filled.
@property (nonatomic, strong) UIImage *filledStarImage
Discussion
The image draw for a star that is filled.
Declared In
SSRatingPicker.h
selectedNumberOfStars
The float value of the selected number of stars. Setting this value will send UIControlEventValueChanged
to the
pickers targets.
@property (nonatomic, assign) CGFloat selectedNumberOfStars
Discussion
The float value of the selected number of stars. Setting this value will send UIControlEventValueChanged
to the
pickers targets.
The default is 0.0
.
Declared In
SSRatingPicker.h
starSize
The spacing of stars.
@property (nonatomic, assign) CGSize starSize
Discussion
The spacing of stars.
The default is {21.0, 36.0}
.
Declared In
SSRatingPicker.h
starSpacing
The spacing of stars.
@property (nonatomic, assign) CGFloat starSpacing
Discussion
The spacing of stars.
The default is 19.0
.
Declared In
SSRatingPicker.h


Wement.io is a common comment system for all users whoever wants to quickly have a comment system. It has a shared powerful server to provide data storage service. and it provide user ad service to ensure the benefits of users.
The goal of wement.io is provide a common comment plugin for users. you can directly use the api of wement.io to fetch or post data from wement.io. also for wordpress, z-blog, hexo, hugo and any other blog system, you can install the plugin which is already written by excellent coders, it really very simple and easy.
Wement.io have a powerful server which is provide for data storage service, you can call api to post or get your websites comments.
Why you write things, but you can not get benefits, there are lots of 'vampires' to squeeze your efforts with no paid for you. wement.io provide ads service for your website, all benefits are yours.
Wement.io is open source software and service. we'd like to invite you to get join us.
Wement.io do not need you create a new user, it is very trouble. to use it, you just login with other famous platform, like github, facebook, wechat, twitter and so on.
- login with github
- login with facebook
- login with wechat


| Methods |
public
|
__construct(string $location, null|string $extension = null)
Construct the file storage based on a directory.
Construct the file storage based on a directory.
|
#
|
protected
|
parsePath(string $path): string
Parse the path string changing seperators to system ones.
Parse the path string changing seperators to system ones.
|
#
|
public
|
__invoke(): array
Return array of files if called.
Return array of files if called.
|
#
|
public
|
list(string ...$exceptions): array
Return all the file names in file array using exceptions.
Return all the file names in file array using exceptions.
|
#
|
public
|
listAbsolute(string ...$exceptions): array
Return all the absolute file names in file array using exceptions.
Return all the absolute file names in file array using exceptions.
|
#
|
public
|
replace(string $what, string $with, string $file): FileBag
Replace some content in the file.
Replace some content in the file.
Throws
|
#
|
public
|
get(string $file, mixed|null $default = null): string
Retrieve the content from a file.
Retrieve the content from a file.
Throws
|
#
|
public
|
has(string $file): bool
Check if file exists in array and physically.
Check if file exists in array and physically.
|
#
|
public
|
put(string $file, mixed $value, int $mode = 0777): FileBag
Set content of a file, overiting any content inside or create it.
Set content of a file, overiting any content inside or create it.
Throws
|
#
|
public
|
push(string $file, mixed $value): FileBag
Add content to the end of the file.
Add content to the end of the file.
Throws
|
#
|
public
|
prepend(string $file, mixed $value): FileBag
Add Content to the beggining of a file.
Add Content to the beggining of a file.
Throws
|
#
|
public
|
contains(string $file, mixed $value): bool
Check if file contains any substring.
Check if file contains any substring.
Throws
|
#
|
public
|
chmod(string $file, int|null $mode = null): string
Set or get CHMOD for file.
Set or get CHMOD for file.
Throws
|
#
|
public
|
move(string $file, string $location): FileBag
Move a file to another destination.
Move a file to another destination.
Throws
|
#
|
public
|
copy(string $file, string $location): FileBag
Copy a file to another destination.
Copy a file to another destination.
Throws
|
#
|
public
|
modified(string $file): int
Get last modified date.
|
#
|
public
|
includeAll(): mixed
Include all the files adding filename as key.
Include all the files adding filename as key.
|
#
|
public
|
flush(): FileBag
Delete all the files in the bag.
Delete all the files in the bag.
|
#
|
public
|
delete(string $file): FileBag
Remove a file from files and delete it physically.
Remove a file from files and delete it physically.
|
#
|
public
|
getIterator(): ArrayIterator
Returns an iterator for files.
Returns an iterator for files.
Implements
|
#
|
public
|
count(): int
Returns the number of files.
Returns the number of files.
Implements
|
#
|


new Trip(tripData, userOptions)
Trip
Parameters:
| Name | Type | Description |
|---|---|---|
tripData |
Array.<Object> | |
userOptions |
Object |
Members
-
<static> this.settings :Object
-
It is used to keep user and default settings.
Type:
- Object
Methods
-
<static> addAnimation(o)
-
Add animation on the trip block.
Parameters:
Name Type Description o
Object -
<static> bindKeyEvents()
-
Bind keydown events on document.
-
<static> bindResizeEvents()
-
When users resize its browser, we will rerun Trip and restart the timer. TODO: We have to debounce this function later to make performance better.
-
<static> canGoNext() → {Boolean}
-
Check whether we can go to next trip or not.
Returns:
whether we can go to next trip
- Type
- Boolean
-
<static> canGoPrev() → {Boolean}
-
Check whether we can go to previous trip or not.
Returns:
whether we can go to previous trip
- Type
- Boolean
-
<static> cleanup()
-
Clean up all stuffs when we are going to start / restart a trip, so we can make we won't mess up with old stuffs.
-
<static> create()
-
This is a method wrapper.
-
<static> createOverlay()
-
This method is used to create overlay. If the overlay is in the DOM tree, we will not create it again.
-
<static> createTripBlock()
-
This method is used to create a trip block at the first time when start. If the trip block already exists on the DOM tree, we will not create it again.
-
<static> decreaseIndex()
-
We can call this method to decrease tripIndex because we are not allowed to manipualte the value directly.
-
<static> doLastOperation()
-
This is the last operation when we successfully finish all trips in the end.
-
<static> getCurrentTripObject() → {Object}
-
This method is used to get current trip data.
Returns:
current trip data
- Type
- Object
-
<static> getReplacedTripContent(content) → {String}
-
This method is used to replace all passed content with
tripIndex
andtripTotal
information.Parameters:
Name Type Description content
String Returns:
replaced content
- Type
- String
-
<static> hasSpeicalDirections(position) → {Boolean}
-
Check whether position is special or not
Parameters:
Name Type Description position
String position
Returns:
whether position is speical direction or not
- Type
- Boolean
-
<static> hideExpose()
-
Make exposed element back to normal state and hide overlay.
-
<static> hideProgressBar()
-
Hide the progress bar and stop animations.
-
<static> hideTripBlock()
-
Hide the trip block.
-
<static> increaseIndex()
-
We can call this method to increase tripIndex because we are not allowed to manipualte the value directly.
-
<static> init()
-
Initialize Trip.
-
<static> isArray() → {Boolean}
-
We will use this native method to know whether this is an array.
TODO we have to move this to TripUtils
Returns:
- Type
- Boolean
-
<static> isFirst() → {Boolean}
-
Check whether current trip is the first one.
Returns:
whether current trip is the first one
- Type
- Boolean
-
<static> isLast() → {Boolean}
-
Check whether current trip is the last one.
Returns:
whether current trip is the last one
- Type
- Boolean
-
<static> isObject() → {Boolean}
-
We will use this native method to know whether this is an object.
TODO we have to move this to TripUtils
Returns:
- Type
- Boolean
-
<static> isString() → {Boolean}
-
We will use this native method to know whether this is an string.
TODO we have to move this to TripUtils
Returns:
- Type
- Boolean
-
<static> isTripDataValid(o) → {Boolean}
-
Check whether tripData is valid
Parameters:
Name Type Description o
Object tripData
Returns:
whether tripData is valid
- Type
- Boolean
-
<static> keyEvent(e)
-
Bound keydown events. We will do specific actions when matched keys are pressed by user.
Parameters:
Name Type Description e
Event -
<static> next()
-
next API, which will jump to next the trip.
-
<static> pause()
-
pause API, which will pause the trip.
-
<static> pauseOrResume()
-
This is an wrapper for pause and resume API.
-
<static> pauseProgressBar()
-
Pause the progress bar.
-
<static> preInit()
-
This is used to preInit Trip.js. For current use, we will try to override this.console if there is no window.console like IE.
-
<static> prev()
-
prev API, which will jump to previous trip.
-
<static> removeAnimation()
-
Remove animation from the trip block.
-
<static> resume()
-
pause API, which will pause the trip.
-
<static> resumeProgressBar(remainingTime)
-
Resumse the progress bar.
Parameters:
Name Type Description remainingTime
Number -
<static> run()
-
This is the main function to control each trip. In this method, we will make sure every tripData is valid and use that to do following works like showing trip, setup timer and trigger registered callbacks at the right timing.
-
<static> setTripBlock(o)
-
Based on current trip data, we will use this method to set all stuffs we want like content, prev / next labels, close button, used animations.
Parameters:
Name Type Description o
Object -
<static> setTripBlockPosition(o, horizontalOrVertical)
-
This method is mainly used to help us position the trip block. As you can see, we will find out the $sel and its positions first then put our trip block at the right location.
Parameters:
Name Type Description o
Object horizontalOrVertical
String -
<static> showCurrentTrip(o)
-
Show current trip. In this method, we will control all stuffs about current trip including animation, timer, expose, progress bar.
Parameters:
Name Type Description o
Object -
<static> showExpose()
-
Expose element which has hasExpose property.
-
<static> showProgressBar(delay)
-
This is used to show progress bar UI. We will use jQuery to manipulate the animation.
Parameters:
Name Type Description delay
Number -
<static> showTripBlock(o)
-
After we positioned our trip block, we have to show it on the screen. If the trip block is not on the screen, we will scroll the $root element and then make sure it is definitely on the screen.
Parameters:
Name Type Description o
Object -
<static> start()
-
Start Trip.
-
<static> stop()
-
Stop API, which will stop the trip.
-
<static> unbindKeyEvents()
-
Remove keydown events from document.
-
<static> unbindResizeEvents()
-
Remove resize event from window.


There is a Dutch word . . . verongelijktheid, to be wronged, not by an individual so much as by the world at large. You often see it in the way the much-heralded national team plays soccer.
Proud of their superior skills, their multicultural makeup, the almost mocking manner of their free-flowing play, maddening the players of more prosaic teams, like Germany, the stars of Dutch soccer usually start their games with all the swagger of swinging Amsterdam. In their playful individualism, their progressive daringness, they know they are the best. And sometimes they are. But when things go against them and the plodding Germans, or the bloody-minded Italians, or the cussed English, go up a goal or two, the heads slump, the bickering starts, and the game is lost in a sour mood of verongelijktheid. Why did this have to happen to us? What did we do to deserve this? Aren't we the best?
Ian Buruma, Murder In Amsterdam : The Death Of Theo Van Gogh And The Limits Of Tolerance (2006)


Number of URLs in history list:
Note: This example is opened in a new frame and will be treated as a new "session".


--- title: projects permalink: "/projects/index.html" layout: default ---
These are some of the hobby projects that I've worked on in my free time, you can check out all of my open source projects from my github profile.


CS460 Spring2016, Program #4
Demo of a Simple JSP Application
Please excuse the simple appearance of this page, just click the button


Edit
Delete
Ban
Other actions
4
Michael Williams
@mwilliams
Users
+14
218k
Orders
+27
1857
Visits
+109
749
Balance
$26.425
Dashboard
UI Elements
Form stuff
Messages
4
Statistics
Grids
404
Login
Form Stuff
Inputs & buttons
Usual inputs
Edit
Delete
Ban
Other actions
Dropdown Menu
Option #1
Option #2
Option #3
Single file uploader
Usual Text Area
Checkbox
Say yes!


Pelosi: 'We Don't Know' that Senate Won't Move on Impeachment | Breitbart
by Ian HanchettDuring a “Noticias Telemundo” exclusive released on Tuesday, House Speaker Nancy Pelosi (D-CA) said that “We don’t know” that the Senate won’t move on impeaching and removing President Trump and that the Senate failing to act shouldn’t deter the House from acting.
Anchor José Díaz-Balart said, “The Senate is controlled by Republicans. So, regardless of what happens in the House, the Senate will probably not go forward with anything on impeachment.”
Pelosi responded, “We don’t know that.”
She added, “They haven’t seen all of the facts yet. But because they’re not willing to uphold their oath of office to protect and defend the Constitution, should not be in any way a deterrent to us to uphold our oath of office to protect and defend the Constitution of the United States.”
Follow Ian Hanchett on Twitter @IanHanchett


This app was developed based two core concepts I have about rhythm.
Listed below are the 15 rhythms for the three most common levels of subdivisions. I have listed them in what I consider a general spectrum of syncopation and starting with the non-rest rhythms.
The process is based on learning these rhythms in sequenced steps through the three most common levels of subdivision: quarters, eighths, and sixteenths. First we go through all levels learning only the non-rest rhythms. I find that for a young musician, the concept of a rest can be quite challenging and can greatly complicate learning rhythms. I believe it is important that students master the non-rest rhythms first and then gradually introduce the rhythms with rests.
At all levels, rhythms are introduced gradually and sequentially from least syncopated to most syncopated. This allows the students time to practice each new rhythm such that they can internalize and quickly identify them.
Once this base set of non-rest rhythms is learned, we incorporate the rhythms with rests. Again in gradual steps to allow for mastery. Upon completing all of the steps, students should be able to perform very complicated rhythms.
Copy and share the link below to share the current Rhythm Trainer settings


$105-M net hot money inflows in Oct.
by Lee C. ChipongianThe Bangko Sentral ng Pilipinas (BSP) said it registered $105 million of net foreign portfolio investments in October, reversing September’s $232-million net outflows.
In a statement, the BSP said the net inflows in October resulted from the $1.25-billion inflows during the month versus $1.15-billion outflows.
Compared to same time last year, the current results were also an improvement from October 2018’s $67.83-million net outflows.
The central bank said 81.9 percent of inflows went into listed stocks such as holding firms, banks, property companies, retail companies, and food, beverage and tobacco companies.
About 18.1 percent were invested in peso government securities.
Bulk or 73.9 percent of inflows came from investors in the United Kingdom, US, Singapore, Luxembourg, and Malaysia.
According to the BSP, the local and global developments that influenced the movement of hot money during the period are: the US and China trade discussions; initial public offerings by firms in the industrial and services sectors; the BSP’s decision to reduce the reserve requirement ratio for universal/commercial and thrift banks by 100 basis points; and
further slowdown of headline inflation to 0.8 percent in October from 0.9 percent in September.
Based on BSP data, total registered investments increased by 31.5 percent year-on-year while gross outflows were higher by 12.5 percent compared to the outflows in 2018.
The outflows decreased in October compared to September’s $1.53 billion with US investors still the major beneficiary of these withdrawals with a 74.8 percent share of total.


The Open Source POS System or OpenPOS is a Responsive, Secure, and Modern POS system, designed and developed by the Open Source Community and is free to use by all.


Stock
问题描述 :
Stock is defined as a purely economic issue, it is actually representative of your company’s ownership of the shares. But in fact most investors regard it as a kind of commodities, not the production which are made in the factories. Since it is a commodity, there is measurement problem. Fruits are bought by jin, TV sets are bought by set. While the stock is bought in share. Stock and TV set here in set is similar. That is, we can not buy half-shares, and at least buy one share. Of course, stock and fruit, TV set, are different. Stock is so different as the price is changing at all time. Everyone can buy it legally in the trading market. Stock trading costs transaction fees. And the calculation is quite complicated so we don’t dive into this.
To make it easier, we have the problem simplified. First of all, ignore the price changing within a day, meaning that only one constant price on a certain day. Then assuming that only to pay fees when stock are sold, the transaction fee is a fixed value of s.
For example, if the transaction fee is $100. The stock price on the first day is $10 per share. We have $10,000, so we can buy 1,000 shares. The next day, the stock price rise to $11 per share. We sell all the 1,000 shares, so get $11,000. It cost $100 for the fee. So the profit is $900.
In this problem the transaction times is unlimited. You can sell and buy stock time and time again if you like. Now, if we know the stock prices in n trading days, the fee and the initial funding. So, how much money can we earn at most in the n days?
输入:
The first line contains the number of test cases t.
For each case, the first line contains three integers n (1<n<=3000), s (0<=s<=10000), p (0<p<=100000), respectively, the number of trading days, fee and initial funding. The second line contains n positive real numbers which are greater than 0 (up to two significant figures after the decimal point), the prices are given in chronological order of the n trading days.
输出:
The first line contains the number of test cases t.
For each case, the first line contains three integers n (1<n<=3000), s (0<=s<=10000), p (0<p<=100000), respectively, the number of trading days, fee and initial funding. The second line contains n positive real numbers which are greater than 0 (up to two significant figures after the decimal point), the prices are given in chronological order of the n trading days.
样例输入:
3 4 10 100 10.00 1.00 12.00 10.00 3 10 100 10.5 5.3 1.9 5 10 100 4 1 8 2 5
样例输出:
1090.00 0.00 1865.00
#include <cstdio> #include <queue> using namespace std; const int maxint=-1u>>1; const int maxn=100000+10; int n; long long x[maxn],p[maxn],m[maxn]; typedef pair<long long,long long>pii; int main() { int t; scanf("%d",&t); while (t--) { scanf("%d",&n); for(int i=0; i<n; ++i) scanf("%I64d%I64d%I64d",&x[i],&p[i],&m[i]); long long ans=0; priority_queue<pii>que; for(int i=n-1; i>=0; --i) { int s=x[i]; que.push(make_pair(p[i], m[i])); while(s&&!que.empty()) { pii top=que.top(); que.pop(); if(s>=top.second) { ans+=top.second*top.first; s-=top.second; } else { ans+=s*top.first; top.second-=s; s=0; que.push(top); } } } printf("%I64d\n",ans); } return 0; }
没有现任
因为是要把从字符串s的start位到当前位在hash中重置，修改提交后能accept，但是不修改居然也能accept
不错的网站，建议添加些比赛信息
对于输出格式不用控制？？还是直接使用cout输出。？？
位运算真赞
居然看懂了
能不能说一下tmp数组和solve都是干嘛的？
这怎么用Catalan数啊？求解答！
懂了，谢谢啦
学算法中的数据结构学到一定程度会乐此不疲的，比如其中的2－3树，类似的红黑树，我甚至可以自己写个逻辑文件系统结构来。
正解，应该是200！
已修改。一些字符在编辑的时候转义了
正解，我的方法占用的内存更多些
问题3是不是应该为1/4 .因为截取的三段，无论是否能组成三角形， x， y-x ，1-y,都应大于0，所以 x<y,基础应该是一个大三角形。小三角是大三角的 1/4.
我想整理一下leetcode的题解，站长能不能给权限


Implement the add function in the source code of this page.
add
When you press the Add button below, the answer should appear below.


Loading...
IOT RabbitMQ Project
Implementation of RabbitMQ along with IoT devices (Course Project 2020-2021)
Device Status
ONLINE
Temperature
CPU
Memory
Storage
Schedule Overview
Add Asset
Upload
×


Add more information here about Munich....
The Munich Residenz is the former royal palace of the Bavarian monarchs. The Residenz is the largest city palace in Germany and is today open to visitors for its architecture, room decorations, and displays from the former royal collections.
This castle in the kingdom of Bavaria is a must see. Built with Ludwig II own money as a retreat, it opened to the public after his death and now is visited by 1.3 million people a year.


"What's the most you've ever lost ...
... on a coin toss?"
our first serial killer comes into view.
He's sipping milk.
things look grim.
"You know what date is on this coin?It's been traveling all your life to get to you."
"And now it's here. And it's either heads or tails, and you have to call it."
Call it,
or
player information:
- lives: ♥ ♥ ♥ ♥ ♥
- Restart Level
- Restart Game
- save game


Provides model listeners that listen on service-builder models. See resources/META-INF/service-ext.properties for actual bindings.


Information About the Employer
The Co-operators are a cooperative insurance company consisting of: The Co-operators Group Limited, Co-operators Financial Services Limited, Co-operators General Insurance Company, Co-operators Life Insurance Company, CUMIS, The CUMIS group limited, The Edge Benefits, Addenda Capital Inc., The Sovereign General Insurance Company, The Premier group of companies, Technicost, Federated Agencies Limited, and HB Group Insurance Management Ltd. and COSECO Insurance Company. I worked at the head office located in downtown Guelph, ON. The Co-operators offers a diverse workplace atmosphere, your coworkers include all types of people with all sorts of educational backgrounds. The Co-operators includes graphic designers, software developers, insurance advisors, and pretty much everything in between.
Insurance is not inherently a computer science related field, but many aspects of computer science are used in the company to increase productivity. The company uses things like robotic process automation to increase productivity, however, my role as a Technical Support Analyst gave me a unique insight into the field of Computer Science. Through this role I was able to see what end users often struggled with when they were using software and where software tends to fail. This viewpoint is very valuable for a Software Development team, as often times developers will have varying degrees of bias when designing software. A developer can often make assumptions about their end users that might not be entirely true. A developer might think that their application is user friendly because they know how it works, but, they were the ones working on the software, so there knowledge will far surpass that of the majority of end users that will be using the software. Being a Technical Support Analyst at an insurance company, I gained a valuable perspective on Software Design.
Job Description
I worked as a Technical Support Analyst at The Co-operators from May 2019 – December 2019. In this role, I provided technical support to Co-operators employees who were having a wide variety of technical issues. Issues ranged anywhere from laptops not turning on to potential viruses. Through my experiences in this role, I gained many valuable skills and learned many important lessons.
Communication, customer service, and general technical knowledge are assets for this role, as your main goal is to aid in client service and provide competent and coherent support to people who can have any degree of technical knowledge.
General technical knowledge came easy to me as the Software Engineering program is very technical, and so I was made previously aware of most of the common software that is used for productivity. However, companies often have proprietary software that is built to the specific needs of the company. I needed to learn the software and technologies as I went throughout the role in order to be able to provide an adequate level of support.
Communication is a critical skill in this role, as most of the work you are doing is remote. Not every person who calls in an issue will be located in the same building, or even province as you. You need to be able to communicate information effectively via the phone, email or other means in order to provide optimal client service. Often times, you are dealing with technical issues with people who are not in the tech field, so their knowledge of more in depth computer concepts can be at any level. You need to convey the necessary information that is both understandable to every person’s individual level of knowledge/comfort and respectable. You cannot assume that the person will know more in-depth terms/technical jargon, but you cannot be condescending in an explanation. Being flexible with your communication is key. This is a concept that I had to learn as I went through the role, as I was learning a lot of the technologies used at The Co-operators as I went along. I needed to gain the confidence to speak to clients on the phone and explain to them what the issue was and the steps that needed to be taken in order to remedy them.
Customer service goes hand in hand with communication, one cannot have great customer service without great communication. Clients need to know that they are being treated as a priority, and that their issue will be taken care of. Providing great customer service means that you combine all the necessary skills for this job. You need to have the technical knowledge to identify and solve the issue, you need to be able to adequately communicate the information to the client, all in a respectful, timely manner. I have had prior experience with customer service in a different context, however. I worked at McDonald’s throughout my high school career and dealt with customers firsthand. This is a much less technical customer service role, but many of the same principles apply. You must be able to have the knowledge to satisfy the customer’s needs, you need to communicate to the customer the information necessary to move to the next steps in the process, all in a timely, respectful manner. My time at McDonald’s helped me to provide excellent customer service, I just needed to apply these principles in a more technical context. My communication skills needed to grow to expand the technical terminology and corporate formalities associated with the company. My technical knowledge also needed to grow to incorporate the different technologies and proprietary software used at the company. Overall, customer service is the defining skill for this role, and my skills in this field have dramatically increased since starting this role.
"I've learned that people will forget what you said, people will forget what you did, but people will never forget how you made them feel." Maya Angelou
Before coming into this role, I knew very little about the physical components of a computer. This role allowed me to develop my knowledge of the inner workings of a computer’s hardware. As a Software Engineering student, we typically focus on software topics and design, not so much practical hardware, and in this role, people can have issues with any part of their computer, either software or hardware. I developed my hardware skills and gained the confidence to open up a computer and reseat components and replace parts that needed replacing.
Goals
Throughout my term, I had a set of goals that I tried to reach. I set a total of four goals for myself:
-
1. COMMUNICATING - Oral Communication
-
To develop professional communication skills within an office setting. Learn to effectively communicate what is on my mind, whether it be suggestions, questions/concerns, or problems I am experiencing
-
-
2. CRITICAL & CREATIVE THINKING - Problem Solving
-
Be able to solve various problems in varying contexts - even if I have little experience with the related content.
-
-
3. PROFESSIONAL & ETHICAL BEHAVIOUR – Teamwork
-
Learn to be a team player in a professional work environment. That is, to learn how to know your role or position and do your work well and on time.
-
-
4. CRITICAL & CREATIVE THINKING - Problem Solving
-
Develop some sort of automation tool/helper to automate some process or to make a process easier for the team.
-
I was able to successfully develop these skills and reach these goals throughout the work term with the help of my mentor and team members.
Goal 1:
This position was my first real corporate experience, professional communication is very different form everyday casual communication. Learning corporate lingo and formalities was necessary to present myself professionally in the workplace. One specific aspect of communication I aspired to develop was my ability to ask professional questions. This is a useful skill as it is helpful to get all the information you need when faced with a task or challenge. I was tasked with a stretch assignment in which I had limited knowledge, so, I set up a call with the person who previously worked on the assignment so that I could learn the ins and outs from them. This was a measure in my development in this area, if my professional communication was not up to par, I might not have been able to acquire all of the necessary information to get that project off the ground.
Goal 2:
Problem solving is the core of what was done day to day as a Technical Support Analyst. We are faced with an issue, we must find the underlying root cause, and fix said issue. I wanted to gain knowledge and experience with a wide variety of issues so that I could expand the breadth of my technical knowledge. I wanted to tackle all types of issues, even those that I had little prior experience with, as those often teach you the most. As a Software Engineering student, we don’t often deal a whole lot with hardware, and when we do, it is often at a very high level. This role allowed me to tackle both software and hardware issues. I learned a great deal of troubleshooting techniques for both hardware and software. Alongside this, I tackled all of the shift duties involved with the team as well. This involved an early shift, late shift, and being on-call. The different shifts all have their own specific duties (specific duties left out for confidentiality). I was able to perform all of the shift duties adequately and confidently. I feel my problem-solving skills have vastly improved from this position, and this will help me in any field of study I pursue.
Goal 3:
When working in a team, being a team player is critical. If you are not a team player, you will not see much success. Academically, most of the work I do is solo, there is very limited group work. This is not the case in this role, however. Most of the things you do are as a team, or you have a team to back you up in case you are struggling. This is a bit of a change in my typical working dynamic, and I wanted to develop this skill, as I believe that it will help me in any professional endeavors down the road. Specifically, I wanted to learn to know my role within the team and know when a responsibility, task, or idea should be brought to another person/team’s attention. The idea that two heads are better than one was thoroughly exemplified in this role. Often times, if I was struggling with an issue, I would have my own assumptions about the issue, and would get “tunnel vision” in regard to my perspective on the issue. It usually only took another pair of eyes to see what my assumptions were, or to simply gain a new perspective to get another step in the process. I believe that my teamwork capabilities were definitely improved during my term.
Goal 4:
This was a very personal goal, as I wanted to do something outside of the day to day work of helping clients with computer issues. I wanted to help the team in some way with a piece of software or a script that could be useful in one way or another. I was lucky enough to be given a stretch assignment to re-build our team’s stat-board. This stat-board is displayed to the entire team and showcases some useful data and stats for the team. The stat-board’s main purpose was to show the currently unassigned incidents that were assigned to my team. The unassigned incidents were colour-coded to represent whether or not they have breached, about to breach, or have not breached the team’s service level agreement (SLA). The stat-board also displayed the times in the other offices where members of the team were located so that we have a quick resource to see if someone is expected to be in or out of the office at a certain time. The board also displayed the team members who were assigned the certain shift duties in the current week. This was a great opportunity for me to develop my professional problem-solving skills in a more technical sense, as the project was using languages that I have had very little experience with from school or otherwise (PowerShell and C#). I had to learn a lot of concepts as I went, and I was happy to get a stable, working product for the team. I believe this project will help me in future endeavors where I have little or no prior experience.
Acknowledgements
I would like to thank my team members at The Co-operators for making my transition into the corporate world as easy as possible.
I would also like to thank my mentor (name is kept for confidentiality) for allowing me to grow and providing me with all of the guidance I needed to be able to perform well in this role.


CN strike forces Nutrien to halt output at its largest potash mine
by Eric AtkinsThe week-long strike by 3,200 Canadian National Railway Co. train conductors has forced the shutdown of Nutrien Ltd.’s potash mine in Rocanville, Sask.
Nutrien, the world’s largest fertilizer company, said on Monday it will halt output at its largest mine for two weeks beginning Dec. 2., as the impact of the strike at Canada’s largest rail company widens.
“It is extremely disappointing that in a year when the agricultural sector has been severely impacted by poor weather and trade disputes, the CN strike will add further hardship to the Canadian agriculture industry,” said Chuck Magro, Nutrien’s chief executive officer. “Any further disruption will be harmful to our business, the Canadian economy, and Canada’s competitive position and reputation as a reliable supplier of fertilizer and food.”
Nutrien and rival Mosaic Co. export potash from a terminal on the West Coast through their jointly owned logistics company, Canpotex Ltd.
The CN employees, who work on trains and in rail yards, have been without a contract since July. Several months of talks assisted by a mediator have failed to produce an agreement. The union, Teamsters Canada Rail Conference, said the main issues are benefits, rest periods and the company’s use of remote controls to drive trains, which the union says is a safety issue.
The union has refused CN’s request to submit the dispute to a third-party arbitrator.
The federal government is facing mounting calls from business groups to legislate an end to the strike to limit the economic damage. Canada’s grain companies, farmers, miners and other major industries rely on CN to reach ports and overseas customers.
CN is running about 10-per-cent of its typical traffic on its 22,000-kilometre domestic network with qualified managers working as conductors. Unionized engineers, who are also TCRC members but covered under a separate collective agreement, are required to report for duty and drive trains.
“Currently, very limited amounts of various commodities are moving across the country. This includes container traffic to keep Canada’s ports fluid to be able to return to normal operations after the strike,” CN said on Friday.
The strike has caused CN to lay off a significant number of engineers, said Paul Boucher, a TCRC union leader who represents 350 locomotive engineers in Ontario and parts of Quebec. He could not provide an exact number.
With files from Reuters
Your time is valuable. Have the Top Business Headlines newsletter conveniently delivered to your inbox in the morning or evening. Sign up today .


Off-Topic
Releasing my theme :)
(3)
Is this patched
(6)
Can anyone make a no loot script here?
(1)
Confused on how to download hexus after buying
(2)
Hexus wont do anything today
(3)
Guess what day it is
(2)
How can I get the Buyer rank again
(5)
Roblox Crashing
(2)
Please Make New Trial Hexus
(1)
I'm welling to pay 30$ if someone can make this script
(2)
Trial lasting shorter than usual?
(7)
Crashing On Booga Booga, Jailbreak, and others?
(10)
I've recieved any downloads?
(3)
Where i buy hexus?
(2)
I can't always inject
(1)
Do you guys think that roblox Filter enabling system is going to increase?
(6)
I wanna buy but im banned from hexus discord
(1)
Can i pay Hexus with Steam account of 52 games?
(3)
Can i buy hexus with paysafe?
(2)
[req] Rsurf scripts ;3
(1)
How do i buy?
(5)
Why did u get this exploit
(17)
Anyone got any HOTTOthotto script packs n shit?
(2)
My biscord for prof
(1)
For AAPPLLEE, Reply to this
(3)
Where to buy
(3)
Paid Script
(13)
Updated or outdated?
(4)
Blocking?
(2)
A strawpoll
(8)
← previous page
next page →


| DOSE: |
100 mg |
oral |
Morphine |
(pill / tablet) |
| |
2 bowls |
smoked |
Cannabis |
(plant material) |
I had taken morphine for the first time ever about a week or so before this specific event. I loved it. It was the greatest drug I had ever taken, perfection in pill form. Everything about it was perfect. The only side effect was constant iching, but it felt GREAT to scratch it. If there was a way to describe morphine in one word, that word would be orgasm.
Well, one week or so later, my friend [who I'll refer to as E] and I acquired 2 200mg pills, the guy we got them from said not to take more than half each at a time. So we put them away until the next morning before school. The next morning I quickly rode my bike to E's house before school at 7 am. Our school started at 8 15 am, so we had plenty of time to enjoy the morphine. As soon as I got there, we pulled out the morphine tablets and cut one in half and downed them with water. During our last encounter with morphine we had discovered that smoking a bowl or two alongside it enhanced the morphine high, and almost doubled the pleasure. So we decided to smoke two bowls right after taking the pills. By the time the weed high hit us the morphine hit, it was perfection again.
By this time it was 7:30 am, we still had plenty of time to chill. But seeing as E's bike had been stolen a few days beforehand we decided to walk to school, which is halfway across our small town. So we head toward school enjoying the sweet sweet high of morphine. The walk to school was so enjoyable, there were no aches, every step felt so good, and I felt happy and enjoyed just holding a conversation and walking down the road.
But then something unexpected happened, I vomited, I didnít feel the vomit coming out, but the horrid taste was still there. It was a bad sign but we continued to school anyway. The morphine high was still just as good as ever, and we made it to school 5 minutes before the bell rung, still feeling wonderful.
Once in class I found we were just finishing an assignment from the day before which I had already completed.  But when I awoke everything took a turn for the worst. All the previous euphoria and pleasure had been removed and I was left extremely nauseated and exhausted. I headed to the bathroom because I felt the need to vomit, but the bathroom was on the other side of the school but I managed to get there in time, I vomited a nasty fluid into the toilet, realizing that it was stomach bile, as I had not eaten anything since the afternoon before. After vomiting, I did not feel better like I did that morning, and I left the bathroom hoping the worst was over.
I looked in the mirror as I was washing my hands and I saw a ghost looking back at me. Not literally, no hallucination, but my face was extremely pale and absolutely colorless and my pupils were dilated and my eyes were bloodshot. I looked horrible and I was sure people could tell something was wrong. I headed back to class and once there went straight to sleep, I didnít have energy enough to sit up straight in my desk, and instantly knocked out. I was awakened by the bell, and another trip to the restroom to vomit my stomach bile out. Now to 2nd period. It was horrible. I had to spend the entire class period in the restroom because I asked to use the bathroom and threw up outside the door of the class, returned and had to leave, but didnít make it yet again. When I came back my teacher could tell something was wrong and she sent me to the nurse.
 If I went to the nurse she would know what was wrong, and that I had taken morphine. I spent the rest of this block in the bathroom hiding awaiting lunch so I could try and get something into me. After vomiting some 15 times more, the bell for lunch finally rang. I headed out to the cafeteria and bought an ice cream cone and gatorade trying to take it easy.  From the first bite the nausea and pain throughout my body, which was already intense, worse than any sickness had ever made me feel, doubled completely, and I left my lunch on the table and hurried to the restroom where I spent the rest of lunch period. This process continued for the rest of the day, and by 3rd period my girlfriend had discovered what was wrong, and she was worried and pissed. Everyone had noticed now that something was wrong and they were all asking questions. I couldnít take it anymore I needed to get out of this place.
Finally, the bell to leave sounded and we all filed out of school. I met up with E who had enjoyed his high well, and my girlfriend and we awaited our rides. My girlfriend left after telling E never to let me do morphine again. E and I knew that we couldnít walk to his house with me like this, so we called his stepmom for a ride and once there I tried to drink a Mountain Dew but it made me vomit over and over once again.
It was then that I decided I had to go home, even if I felt like I was dying. And E and I walked to my house and it got to a point where E had to hold me up and help me walk because I couldnít stand myself. Once I finally reached my house I went up to my room and lay down with a bowl for vomit and suffered the remainder of the morphine out of my system.
Finally it was over, and I learned the problem behind this. I talked to the guy we got the morphine from and he said he forgot to tell us to eat before taking it. Damnit. Goddamnit. I can't believe all that pain just because a simple thing like not eating. Still, I loved the morphine more than any other substance the first time I tried it. But I will never touch it again, not after vomiting my brains out. How can something go from so good to so horrible, just because of a simple mistake? Maybe I'll never know.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


Now that you know what exactly Credit is, how does a person even establish a credit rating? Think about it—in the future, if you ever want a loan to buy a car, a house, or even a refrigerator, the bank will essentially want to see what your credit rating is before deciding. But how exactly do you begin?
The best and most obvious approach is through a credit card. By maintaining the balance of a credit card, paying off the bill on time, using the credit wisely and staying within the limit, this information is useful and contributes to your credit history! There are many types of Credit Cards with unique features for a Canadian Credit Card. Some credit cards are specifically designed to store credit history information to allow for mortgages, for example.
Another way most people don’t consider—your phone plan. Some companies like Telus don’t require credit history for a plan, but with each successful bill payment, will send information to credit bureaus.
It’s often hard for newcomers in Canada to start off, especially when it comes to Credit ratings. There are certain countries, such as China, that only consider your capacity of paying off loans, but never consider the payment history. This is why, when starting off, the earlier you start the credit rating, the better. In Canada but depending on the province, a person must be the age of majority (eg. 18 in Ontario, 19 in British Columbia) in order to apply for a credit card.
Credit ratings, in Canada, range from R1 to R9. The lower the number, the better! The higher the number, it means the person has a poor rating, and may not be trustworthy to loan money, and expect repayment. R0 is possible, it just means the person does not have a credit rating.
Like with many things in life, there are advantages and disadvantages of Mr. Good Ol’ Captain Credit. It can be a great ally, or an enemy if you do not understand the importance of credit. But let’s focus on the positives first.
Credit is a good friend. Credit is very convenient and a commonly accepted form of payment at many major stores in Canada, plus you are using other people’s money when buying—you don’t have to worry about paying off immediately, just when the bill arrives and the date is there. You don’t need money immediately to buy that sweet new iPhone 7; you can buy it now, and immediately enjoy it—plus, you can buy it online too. And finally, you begin establishing a credit rating once you start using credit, which is useful if you want to get a loan for something in the future as well!
…But can you trust Captain Credit? There is obviously temptation and lots of control needed! There are people who develop addictions with online shopping and going over the limit of their credit card, buying many things without considering the ability to pay back—and these habits are simply deadly. Overuse of credit card, such as going over the limit and not paying back, can create negative credit history information. Since Credit Rating is King in Canada, a damaged credit history will only negatively impact your ability to get a loan for serious things in the future!
The ability to budget is key (which is covered in another topic) to make sure you won’t misuse credit. Always read the fine print, and pay attention to any interest that might need to be paid back! Usually after a period of time, such as noted on a credit card bill, a bank will charge interest for late payments. Paying extra is a bummer, but also one of the benefits of being a lender—you receive more than simply the original amount.
Now that you have finished the section on credit here are some questions. You will have 3 attempts for the question. Don't worry if you mess up. You will be brought back to the begining of the section. So you can brush up on what you missed and then you can try again!
1. What’s the most common way to begin establishing a credit rating?
2. Why is it important to pay your credit card bill on time?
3. Which of the following are some advantages of using credit?
4. Which of the following are some disadvantages of using credit?
5. What’s one way for new-comers to Canada, if they cannot get a credit card here?
6. When is the best time to start getting a credit rating?


Business Insights Analyst - Boca Raton, FL 33496
The ideal candidate is adept at using large data sets to find opportunities for product and process and have experience using a variety of data mining/data analysis methods, using a variety of data tools.Shouldhave a proven ability to drive business results with their data-based insights.Must be comfortable working with a wide range of stakeholders and functional teams. The right candidate will have a passion for discovering solutions hidden in large data sets and working with stakeholders to improve business outcomes. Candidate must also be comfortable with presenting insights drawn from their analysis to different stakeholders.
Responsibilities:
Complete analysis on different business areas using information in Global Data Warehouse and other sources
Retrieve data using SQL and develop operational dashboards, scorecards and KPI monitoring methodologies, collaborating with cross functional business owners and presenting actionable insights using Excel, PowerPoint, Cognos, or Tableau
Provides interpretation of financial and non-financial metrics, evaluating progress on initiatives and providing insights and recommendations to the Leadership Team
Continually review and make recommendations for the improvement of our processes and technology in order to build a more quantitative and data-driven approach to company strategy
Collaborate with data governance to ensure that the data being gathered is accurate and defined appropriately
Identify emerging trends in data and data analysis
Present findings to key stakeholders through creation of PowerPoint and verbal presentations
Qualifications:
Bachelor’s Degree or equivalent experience
Minimum of 2 years of experience in a related field
Experience working with and creating data architectures and a drive to learn and master new technologies and techniques.
Experience using languages (Python, SLQ, Spark,Retc.) to manipulate data and draw insights from large data sets.
Knowledge and experience in advancedMachineLearning/Deep Learningalgorithms and statistics: GLM/Regression, Classification, Random Forest, Boosting, Trees, textmining,socialnetworkanalysis, etc.
Familiar with Excel,PowerPoint,Coremetrics, Tableau, Teradata, Splunk andCognos.
Excellent written and verbal communication skills for coordinating across teams.
Strongproblem-solvingskills with an emphasis on product development.
Data Mining and Analysis
Experience using SQL to manipulate data and draw insights from large data sets.
Equal Employment Opportunity
Office Depot and OfficeMax is committed to providing equal employment opportunities in all employment practices. All qualified applicants will receive consideration for employment without regard to race, color, religion, sex (including pregnancy, childbirth, lactation and related medical conditions), gender (including gender identity and expression), ancestry, national origin, citizenship status, marital status (including registered domestic partnership status), age, physical or mental disability, medical condition, genetic information, military and veteran status, sexual orientation or any other characteristic protected by federal, state or local law.
We will consider for employment qualified applicants with arrest and conviction records.
How to Apply
Click the Apply Now button and follow the instructions on each page. When you have completed the application, click the submit button.
Pay, Benefits & Work Schedule
Office Depot and OfficeMax offers competitive salaries, a benefits package, which includes a 401(k) and more, along with plenty of opportunity to move and grow within our organization! For immediate consideration for this exciting position, please click the Apply Now button.
Fair Chance Ordinance
We will consider for employment qualified applicants with arrest and conviction records City & County of San Francisco Fair Chance Ordinance


References
Class Summary
| Static Public Class Summary | ||
| public |
Executes command trees using registered middleware. |
|
| public |
|
|
| public |
Manages play/stop/update for a Dryad tree. |
|
| public |
Manages the tree structure, contexts for nodes, utilities to walk the tree, collect commands and call command middleware. |
Function Summary
| Static Public Function Summary | ||
| public |
dryadic(dryad: Dryad, layers: Array, rootContext: Object): DryadPlayer Short cut to create a DryadPlayer from a root Dryad optionally adding some layers. |
|
| public |
hyperscript(root: Dryad | Array, lookupClassByNameFn: Function): Dryad Convert a JSON object tree into a tree of instantiated Dryads |
|
| public |
run(command: *, context: *): * Calls a function, supplying the Dryad's context. May return a Promise for success/failure Usage: add() { return { run: (context) => { return new Promise((resolve, reject) => { // do something async like start a process, // fetch an image etc. // Dryad's properties: this.properties // Dryad's runtime context: context // on success call: resolve(); }); } }; } |


THE CLOSET (Le Placard) A film review by Julia Levin Copyright 2001 filmcritic.com
In this lighthearted, unpretentious comedy, Daniel Auteuil sheds the intensity of his previous roles -- in Les Voleurs, Ma saison préférée, Manon of the Spring, to name just a few -- and plays a shy, crooked-nosed accountant too boring to be tolerated by just about anyone. His François Pignon -- an appropriate name for somebody who is about to be fired, literally, for being a bore -- is a harmless placeholder who has no ambitions and no misconceptions about who he is.
Pignon's wife couldn't stand him and left two years ago, yet he still phones regularly to her and their indifferent teenage son. After learning that he is soon to be fired, Pignon, distraught, returns home and meets that "perfect stranger" we all want to meet someday: The one who steps into our life and brings magic into it. From that moment on, the neighbor, Belone (Michel Aumont), navigates Pignon's life like a chess game.
Belone easily persuades François to concoct a story about his homosexuality so his boss will fear a discrimination lawsuit, superimposes photographic images and -- voila -- produces a shot of Pignon in a leather-clad embrace with another man in bun-exposed pants. The photo gets sent to Pignon's employer, and the events start spinning like a windmill in stormy weather, eventually changing Pignon's life forever.
Oddly, for the rest of the story, The Closet flirts with being politically correct and is as predictable as it only can be. What gives the film a tint of pleasure and saves it from being totally grotesque and improbable is that the movie never aspires to be anything more than what it is. Director Francis Veber (The Dinner Game) finds a delightful irony in the fact that Pignon has to lie that he doesn't like women in order to prove he is a man. We, of course, will learn that there is so much more to Pignon than he and his colleagues could ever imagine.
While watching the film, I caught myself feeling surprised that such a banal movie could actually be off-the-cuff and entertaining. The most distasteful thought in The Closet is how little people really care about political correctness but how diligent they are in pretending the opposite.
Besides Auteuil, the acting, for the most part, is adequate. Gérard Depardieu, for example, starts off great as a gauche, self-righteous macho rugby couch, a racist, and a homophobe. However, as Pignon gets his job back, Depardieu's colleagues make him fearful for his own job for calling Pignon a "fruit." The situation becomes repetitiously improbable and Depardieu is annoying and unconvincing as we learn that he might actually be the one "coming out of the closet."
Michèle Laroque is especially good as Mademoiselle Bertrand, Pignon's boss, who not only discovers a real Pignon and subsequently seduces him, but also demonstrates to us how smart women master the most impossible situations.
Though maybe not quite so impossible as this film.

Visit filmcritic.com on the Web at http://www.filmcritic.com
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


I'm looking for new opportunities to use my communication superpowers to ease the discord between humans and technology.
I am a front end web developer, technical support engineer, and technical writer who helps customers and users become more successful and productive with software.
How? By digging in to what customers throw at me, resolving issues by thinking outside the box, by listening to the problems encountered by customers and co-workers, working with my team to discover what’s needed, and then applying what I learn from all of it to the work that I do and the things that I create.
My experience building a start-up informs my contributions, because I think hard about our customer's interaction with software on desktop, web, and mobile.
I’ve arrived at this place through my past experience as a senior technical support engineer, as an award winning technical writer, building websites and pages, from customer validation interviews, and from being a human being who thinks apps should be easier to understand and use.
When the confluence of humans and technology creates confusion, discord, and frustration, I’m here to help.
See my Resume


Hi, I'm using xalan-j_2_2_D9, and I get this error when I use the following code: --------- java.net.UnknownServiceException: protocol doesn't support output at java.net.URLConnection.getOutputStream(Unknown Source) at org.apache.xalan.xsltc.trax.TransformerImpl.getOutputHandler(TransformerImpl.java:232) at org.apache.xalan.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:166) at net.atos.mm.fwk.xml.bench.xsl.BenchXSLTC.fromFileToFile(BenchXSLTC.java:228) at net.atos.mm.fwk.xml.bench.xsl.BenchXSLTC.runTest(BenchXSLTC.java:140) at net.atos.mm.fwk.xml.bench.xsl.BenchBase.run(BenchBase.java:245) ---------- private void fromFileToFile(String sourceID, String xslID) throws TransformerException, TransformerConfigurationException { // Create a transform factory instance. TransformerFactory tfactory = TransformerFactory.newInstance(); // Create a transformer for the stylesheet. Transformer transformer = tfactory.newTransformer(new StreamSource(xslID)); // Transform the source XML to System.out. try { transformer.transform(new StreamSource(sourceID), new StreamResult(new File("fromFileToFile.out").toURL().toString())); } catch (java.net.MalformedURLException e) { } } What did I miss? Thanks. B.Verachten
Have a look at the string created by new File("fromFileToFile.out").toURL().toString() It probably looks funny. In any event, the easiest way to do this is to just supply the File as the argument to StreamResult: ... new StreamResult(new File("fromFileToFile.out")) GaryBruno Verachten wrote: > > Hi, > > I'm using xalan-j_2_2_D9, and I get this error when I use the following > code: > --------- > java.net.UnknownServiceException: protocol doesn't support output > at java.net.URLConnection.getOutputStream(Unknown Source) > at > org.apache.xalan.xsltc.trax.TransformerImpl.getOutputHandler(TransformerImpl.java:232) > at > org.apache.xalan.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:166) > at > net.atos.mm.fwk.xml.bench.xsl.BenchXSLTC.fromFileToFile(BenchXSLTC.java:228) > at > net.atos.mm.fwk.xml.bench.xsl.BenchXSLTC.runTest(BenchXSLTC.java:140) > at net.atos.mm.fwk.xml.bench.xsl.BenchBase.run(BenchBase.java:245) > ---------- > private void fromFileToFile(String sourceID, String xslID) > throws TransformerException, > TransformerConfigurationException { > > // Create a transform factory instance. > TransformerFactory tfactory = > TransformerFactory.newInstance(); > > // Create a transformer for the stylesheet. > Transformer transformer = > tfactory.newTransformer(new StreamSource(xslID)); > > // Transform the source XML to System.out. > try { > transformer.transform(new StreamSource(sourceID), > new > StreamResult(new File("fromFileToFile.out").toURL().toString())); > } catch (java.net.MalformedURLException e) { > } > } > > What did I miss?
Hi Gary,I had written the line you gave, but it didn't work, so I chose toUrl(), but it didn't work either... Thanks anyway. B.Verachten.Gary L Peskin wrote: >>StreamResult(new File("fromFileToFile.out").toURL().toString())); >> } catch (java.net.MalformedURLException e) { >> } >> } >> >>What did I miss? >> > >Have a look at the string created by > new File("fromFileToFile.out").toURL().toString() > >It probably looks funny. In any event, the easiest way to do this is to >just supply the File as the argument to StreamResult: > > ... new StreamResult(new File("fromFileToFile.out")) >
Perhaps you need to supply the full pathname. What error message do you get when you use the approach that I mentioned? Gary -----Original Message----- From: Bruno Verachten [mailto:] Sent: Thursday, August 30, 2001 11:27 PM To: Subject: Re: Protocol doesn't support output Hi Gary,I had written the line you gave, but it didn't work, so I chose toUrl(), but it didn't work either... Thanks anyway. B.Verachten.Gary L Peskin wrote: >>StreamResult(new File("fromFileToFile.out").toURL().toString())); >> } catch (java.net.MalformedURLException e) { >> } >> } >> >>What did I miss? >> > >Have a look at the string created by > new File("fromFileToFile.out").toURL().toString() > >It probably looks funny. In any event, the easiest way to do this is >to just supply the File as the argument to StreamResult: > > ... new StreamResult(new File("fromFileToFile.out")) >
I'll download the nightly build and see what I can do. I hope XSLTC result files won't be null, because I often have this problem. Thanks. B.Verachten, France
Are you using the XSLTC support for this. If so, I can't really help but hopefully the XSLTC people are listening. Thanks, Gary -----Original Message----- From: Bruno Verachten [mailto:] Sent: Friday, August 31, 2001 12:00 AM To: Subject: Re: Protocol doesn't support outputI'll download the nightly build and see what I can do. I hope XSLTC result files won't be null, because I often have this problem. Thanks. B.Verachten, France
Hi, I heard Gary ask if the XSLTC folks are listening. Morten just added an extension to XSLTC support the redirection of output to files. It is used like this: <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsltc="http://xml.apache.org/xalan/xsltc" xsl:version="1.0"> <xsl:template match="/"> <xsl:text>This goes to standard output</xsl:text> <xsltc:output file="blob.xml"> <xsl:text>This ends up in the file 'blob.xml'</xsl:text> </xsltc:output> </xsl:template> </xsl:stylesheet> The 'file' attribute of the <xsltc:output> element is treated as an attribute value template, so it can contain variable references and all the usual stuff. This may be just what B.Verachten needs. Tom


Want to know more? Want to become a superhero?
Name
Phone Number
Email
Preferred Method to Contact: Phone Email Mail
Located in the US?
Additional Comments: