text:
Wharfedale Observer: Find a job in Wharfedale and all around West Yorkshire
Get involved: send your pictures, video, news and views by texting WONEWS to 80360, or email
Using the internet to enhance distance learning
4:46pm Friday 23rd April 2010
Why it's never too late to learn new skills and change career
3:45pm Monday 22nd March 2010
The classroom vs. distance learning: which is best?
5:11pm Monday 15th March 2010
Why should I enhance my vocational skills in 2010?
5:10pm Monday 15th March 2010
Jon will make you a cover star!
5:14pm Wednesday 28th October 2009
Thanks to Jon Taylor, ordinary people can grace the cover of their favourite celebrity magazine.
Mechanic Jeanne is making it in a man's world
4:55pm Tuesday 20th October 2009
Jeanne Goodall is on course for fulfilling her driving ambition.
Essential Links
Local Information
Enter your postcode, town or place name


text:
Quick access : Muses "The Holy Germ" Snack time Numériques créations. Cathedrales of Lights "Quis Nam Es" project Le Creusot/Pacifique sud : Interference Diversions Romance at Creusot Snecma: Art and Architecture Abstractions Faces of Vanuatu Portraits Religious Drawing Varios |
| ||||||||||||||||||||||
© All of the images on this website are copyrighted original artworks by their author and are protected by international copyright law. No materials in this gallery may be reproduced, copied, downloaded, or used in any form without written permission of the contemporary artist Aldéhy.

subset: commoncrawl


text:
`Fault Lines On The Face Of China: 50 Reasons Why China May Never Be Great' - Excerpt 95"One of the key problems holding back women is their under-representation in politics and business. Though China does have some prominent women, such as China's Vice-Premier Wu Yi (cited as the third most powerful woman in the world by Forbes in 2006) Xie Qihua, chairwoman of China's biggest steelmaker, Baosteel, and Ma Xuezheng, a senior vice president of computer manufacturer Lenovo, (named by Forbes as one of the world's most powerful women in business in 2006) these cases are very much the exception.Wu Yi is the only woman at the highest level of the Chinese government, and Xie Qihua was the only female boss in her industry until her retirement in 2007. Ma Xuezheng also retired in 2007 for 'personal reasons' though Forbes hinted this was to do with problems in Lenovo's takeover of IBM's global PC business.China's political and business culture is a world of men. Only 20% of members of China's National People's Congress are women, and only about 16% of the Chinese People's Political Consultative Conference. China did not get its first female governor, Gu Xiulian, until 1983. Nationwide, there are 15 million female officials, accounting for 38% of the total number of officials. But most of these 15 million serve at a low level. Only 9.9% serve at provincial or ministerial level. And at the highest level of government, just 2% are female said media in 2005."
`Fault Lines On The Face Of China: 50 Reasons Why China May Never Be Great' - Excerpt 96"It is true that China has some laws that at least address domestic violence. Yet these laws are both weak and unclear. China's revised Marriage Law of 2002 does outlaw marital violence. But it does not say how violence is to be defined, leaving victims in a legal grey area. China's previous marriage law, drawn up in 1980, did not mention domestic violence at all. Between 2001 and 2005, just 10 sexual harassment cases were heard by China's courts. Of these, just one plaintiff won. One!Even Beijing, the center of law making, did not hear its first sexual harassment case until 2003. The woman in that case, Lei Man, lost because she was unable to provide proof of her claim, and because medical authorities for the defense diagnosed her as 'suffering from paranoia.'Sexual harassment is also a problem in China due to the cultural reticence to talk about sex. This reticence means children are very rarely taught about the dangers of sexual abuse. 'People in China have read of cases of sexual abuse in other countries, but many do not seem to realize that it's a problem here as well. Many children and parents simply ignore it and know little about it' said Chinese media in 2004. The sexual abuse of children was not made a criminal offence in China until 1991. It was not until 2007 that China's Ministry of Education released a guide, to be taught in schools, telling tell minors of the dangers of sexual abuse. The concept of 'street proofing' children appears to be unheard of in China."


text:
Iran allows eight candidates for presidential race
TEHRAN - Iran has approved eight candidates for the presidential election due next month, rejecting President Mahmoud Ahmadinejad's top aide in a major setback to the hawkish leader of the Islamic republic. Ahmadinejad criticised the decision to remove Esfandiar Rahim Mashaei from the final candidate list and said it was an act of "oppression". He announced plans to take up the case with ...
Work starts on creation of new Dubai island
Work began on Monday on the development of a man-made island in Dubai, 500 metres directly opposite the Jumeirah Beach Residence complex. To be known as Bluewaters Island, the new development will house five star hotels and resorts, al fresco dining and entertainment zones, and residential apartments and villas. The focal point of the island city, which will cost $1.6 billion, will be a 688 ...
Iran upgrading nuclear program IAEA
Tehran has reportedly upgraded its nuclear program by adding advanced uranium enrichment facilities and building a plutonium-producing reactor according to the International Atomic Energy Agency (IAEA). The IAEA report reflects the increased international concerns about the potential proliferation dangers it represents as the completion date approaches, the Huffington Post reports. According ...
Senate Votes Unanimously Toward War Against Iran
S.Res.65 , which ';[s]trongly support(s) the full implementation of United States and international sanctions on Iran and urg[es] the President to continue to strengthen enforcement of sanctions legislation.'; The legislation, as expected from a Lindsey Graham product, is full of misstatements, historical revisionism, and war-drum-beating hyperbole. Particularly revolting is the ...
Five killed in Lebanon's Tripoli
A Lebanese Sunni gunman holding a rifle, takes a position in Al-Koubbeh, in Tripoli. Five people were killed and more than 50 wounded in overnight clashes in Tripoli between Lebanese gunmen backing rival factions in Syria's civil war, doctors and security sources said on ...
Movie Review
High Art
"High Art" is an oddly unaffecting, dark character drama about a naive young woman who becomes infatuated with a once-celebrated photographer who left the art scene 10 years earlier. The film marks the writing/directing debut of Lisa Cholodenko, an assistant editor on numerous Hollywood films, and there is no doubt that Cholodenko has talent as a director. "High Art" is filmed with a kind of absor ... ...
On Facebook
Barred from election Rafsanjani lambasts Iranian authorities report
In this picture taken on Saturday, May 11, 2013, former Iranian President Akbar Hashemi Rafsanjani waves to media as he registers his candidacy for the upcoming presidential election at the election headquarters of the interior ministry in Tehran, Iran. (AP Photo/Ebrahim ...
Media watchdog criticises UAE over tweeters jail term
United Arab Emirates this month on similar charges.RSF "expresses outrage at the Abu Dhabi appeals court confirmation of the 10-month prison sentence of netizen Abdullah al-Hadidi," it said in a statement issued on Wednesday.Hadidi is the son of one of 94 Islamists being tried in the Gulf state's top court over an alleged plot to seize power.A court jailed him for posting details ...
Israel government divided on peace issue Livni
Head of Israel's parliamentary opposition Tzipi Livni attends a news conference at the Knesset, Israel's parliament, in Jerusalem, Wednesday, Nov. 30, 2011. (AP Photo/Sebastian ...
Iran says IAEA report shows nuclear drive is peaceful
A new report by the UN atomic watchdog validates Iran's progress in its "peaceful" nuclear activities despite international sanctions, the country's envoy to the agency said on ...
Emirates set to add more Sri Lanka flights
Emirates Airline has announced plans to increase capacity on its services to Sri Lanka from June 30, with the addition of three more flights per ...
Making the news
Nothing will ever completely replace playing the game I love, however I feel like I'm starting a new adventure and I'm genuinely excited about what lies ahead. I'm fortunate to have been given many opportunities throughout my career and now I feel it's my time to give back.
David Beckham
The world's best known footballer was speaking after formally announcing his retirement.
Hotel Review
Amora Hotel Jamison Sydney
This hotel is located right in the heart of the CBD of Sydney in Jamison Street. The hotel neighbours the ...
Keep readingNews Survey
Do you take the threat of North Korea seriously?
Middle East Star
Middle East Star - Updating News from the Middle EastThere is a star in the Middle East. A star news service that covers the Middle East conflict and all else happening in this part of the world. The Middle East Star is an online newspaper, bringing you a daily mixture of regional, local and world news, along with the latest in global business and markets.
Whether it is the latest reading on the Dow Jones, or a story breaking out of Tel Aviv, you can turn to the Middle East Star. Israel news, and stories from the Palestinian territories are the main focus, but we extend our coverage to news articles about the Gulf countries, and key cities like Manama in Bahrain, Doha in Qatar, Abu Dhabi and Dubai in the UAE, Cairo in Egypt, and Muscat in Oman.
There is news about the Palestinian territories, Iran, Syria, Jordan, Kuwait, Saudi Arabia, Lebanon, Egypt, and Yemen. Keep in touch with all that is happening in the Middle East and elsewhere. And if a story breaks keep following it. Stories are continually updated.
We also conduct regular news polls, where you can vote your view on a topic making the news. You can track the trending of the vote on major issues, to see how others are seeing things.
From time to time we bring you editorials and expert opinion, on subjects that are sometimes controversial, but aimed to be of interest to the majority of our readers.
Middle East Star is a comprehensive news service for readers with an avid interest in the region.
- Qualcomm Broadcom and Nvidia buck falling semiconductor revenues in 2012
- Twitter offers users two factor authentication to tighten security
- HTC announces the Desire 600 as affordable HTC One alternative
- Samsung Galaxy S4 launches in red brown and purple as it flies past 10 million sales
- Microsoft takes mick out of Mac in ad promoting Windows 8 tablet
- ESPN layoffs hundreds of employees as TV rights fees rise Re-issue with correction
- IPL spot fixing Police enter Gurunaths residence in Chennai
- ICC launches Champions Trophy website
- IPL spot-fixing Mumbai Police in Chennai to quiz BCCI chiefs son-in-law Guru Meiyappan
- Cheruiyot to miss World championships for pregnancy
- Medical breakthrough Doctors save Ohio boy by laser-printing an airway tube so he can breathe
- Public meeting Mona El Farra discusses public health in Gaza.
- California nurses go on weeklong strike
- Big differences in costs for Colorado small-group coverage under health reform
- BRICS countries pledge to step up cooperation in public health
Subscribe to our Newsletter
Get the latest Middle East Star headlines delivered to your inbox.
- Mexico City hosts chili pepper festival
- Man found hanging at St. Petersburg theatre
- The Picture House launches With a new digital projector the Cramphorn Theatre in Chelmsford is offering screenings of classic films as well as...
- Groovin again with the Rascals Steven Van Zandt gets 60s group to reunite for Broadway-styleshow.
- Eileen Chang gets B'way-style musical


text:
We talked about our own personal experiences of health and well-being to identify common themes. We found that we had experienced the feeling of being overwhelmed by options, choices, activities, people, places – the day to day disturbances that shape our levels of stress and happiness.
We initially thought that we would design a system whereby the user would make a list of decisions or items that were causing stress, with an inner loop monitoring their progress as they complete individual items. This system was just too general to be able to model – e.g. every different type of item had a different approach to sensing.
We continued on the theme of stress management, but focused on one item that helped us all manage stress – physical activity. We identified that exercise helped us maintain physical fitness and a sense of rhythm in our lives.
We decided to model a system that would help us monitor our stress levels and define a level of exercise relative to that stress level.
The goal of our system is to help a user maintain their level of stress.
The outer loop's goal is to help the user maintain a target level of stress by defining an amount of exercise to be undertaken.
- The sensor is a manual test – every day the user assess their stress level from 1-7. For each point on the scale an amount of exercise is defined.
- The system compares the current stress reading with the previous reading.
- If there is a change, the amount of exercise is changed.
- If there is no change, the amount of exercise is maintained.
- The target environment is the amount of exercise planned.
- Possible disturbances include a lack of available time (if we only have 5 minutes to spare, defining one hour's exercise is problematic)
The inner loop's goal is to help the user complete the amount of exercise by comparing the amount they have completed to the amount required.
- The sensor is the user's watch or clock. The user checks the number of minutes of exercise completed against the amount required.
- The system compares the amount completed to the required amount.
- The user exercises for the amount of time remaining.
- The target environment is the amount of exercise completed.
- The Possible disturbances include all the things that get in the way of exercise; apathy, competing time requirements, location
Clip from class


text:
The Magritte Museum came into being thanks to an original partnership of the GDF SUEZ Group with the Royal Museums of Fine Arts of Belgium, the Magritte Foundation, the Belgian Régie des Bâtiments, and Belgium's Science Policy Administration.
The museum partnership marks one of the first times in Belgium that a private company made its experience and professional skills available free of charge for the benefit of a museographic project of such size; it also marks the country's first skill-based sponsorship of its kind.
The partnership's goal and its innovative character were acclaimed with Prométhéa's award to GDF SUEZ of the 2008 Caïus Prize for Major Company Culture Sponsorship (awarded for corporate giving in Belgium).
The GDF SUEZ Group provided the full expertise of its energy services business line, an area where it is European leader with 77,000 employees and EUR 14 billion in 2008 revenues. Its subsidiaries involved included:
• Fabricom GTI and AXIMA Contracting for all challenges involving electrical, air conditioning, and ventilation facilities that were essential for conserving and protecting the art works and their lighting – one of the worksite's key objectives: to conserve and showcase Magritte's works of art. Thanks to the techniques used in lighting, the museum will consume 30% less energy;
• INEO media system, a French subsidiary, installed electronic systems (including interactive terminals, video display points, an Internet documentation site, and five "animated windows" that will reflect the Magritte sky); and
• for energy, Solar Technics for the solar panels installed on the museum roof, and Electrabel, which contributed the project's sustainable dimension by providing 100% renewable electrical energy.
The Group carried out all of the museum building's renovation work (covering close to 27,000 sq. ft.), with a commitment of over 400 employees.
The largest corporate sponsorship project ever undertaken by GDF SUEZ
Through this Magritte Museum skill-based sponsorship, GDF SUEZ objectives are to showcase an exceptional collection and a major share of Belgium's cultural legacy, to promote access to this heritage for everyone, and to marshal the skills, know-how, and innovativeness of its professionals in support of a major loyalty-building project with an important sustainable development focus.
More directly, the GDF SUEZ support for the Magritte Museum illustrates the importance of the group's location in Belgium where it is one of the country's largest employers and industrial groups (the country's largest electricity producer, where it generates 17% of its global revenues and has over 25,000 employees).
In Belgium, for several years, GDF SUEZ has developed a strong skill-based sponsorship program through:
• the Princess Elisabeth Antarctica polar station, and
• 'Living Tomorrow' at Vilvoorde.
In France, the Group carried out the lighting of the Louvre Pyramid.
Beyond its skill-based sponsorship program, GDF SUEZ has developed an ambitious partnership with the Magritte Museum to enhance its prominence.
By way of example, to showcase the project throughout the entire, nearly year-long period of building renovation, GDF SUEZ organized and underwrote the design, production, and financing of an immense building cover, inspired by Magritte's 1954 painting l'Empire des Lumières (Dominion of Light), to decorate the building. The striking trompe-l'oeil was backlit at night with electricity from solar panels provided by a Group subsidiary, Solar Technics.


text:
Please fill in the following form to contact us
New Channel Islands Semi-Pro 12 Model Height:6' 1" Middle Width: 18 3/4" Thickness: 2 5/16" Board Shape:Performance Shortboard Tail Shape: Rounded Squash Fin Setup: Thruster or 5 Fin Model Description:Taking his favorite aspects of the Tangent and Proton, Kelly designed the Semi-Pro on the computer from start to finish. Riding it to three WCT wins and a 10th world title, his design proved itself as the ultimate all-around shortboard. The Semi-Pro should be ridden shorter than usual: Kelly likes to ride them with his normal dims but his same height (5'9"). This shorter rail allows for his tight signature arcs in the pocket. Deep single concave make the board work best on rail, and ample rocker allows for deep gouging carves. With the wide point 2 inches behind center and increased nose-width, this board still handles mushy days. The Semi- Pro is changing the way professional surfers ride their boards. Other Information:Fine-tuned during the course of Kelly's 2011 campaign, the Semi-Pro 12 comes from Kelly's wider forward outline which incorporates a 12" nose. The main purpose of this design change was to allow for more volume which translates to easier paddling and wave catching while still accommodating a short rail for Kelly's signature arcs.Learn more about all of our Channel Islands Models by clicking HERE
Picking out a surfboard can a difficult task whether you're a beginner, intermediate, or expert surfer. At the Surf Station, we have a highly trained, dedicated staff that knows the different variables in the design of a surfboard and can help you pick out the perfect board to add to your quiver. There is no real "size chart" that can be provided for surfboards as everybody and every board is a little different.
However, please read our Surfboard Buyers Guide to get better acquainted with the different variables and then either send over an email to firstname.lastname@example.com or use our live chat feature to talk with an expert.
What's it cost to ship my board?? We would love to ship your boards for free but unfortunately that can't be done. We take extra care in boxing and packing our boards to ensure their safe arrival and there is a cost associated with that. See below for Shipping Rates on Surfboards.
"Super fast delivery board in great condition"
Shamus Cannon | Xanadu X-20 5'11"
"Great deal on the fins! Fast shipping and great communication. A++ "
Christian Santa | FCS K2.1 Fins
"Just as described, great transaction."
Billy J Stewart | Future WCT Fins


text:
Twitter Goes Mobile on its Birthday Gavin Sugden, Research Director 21 March 2012 The most striking thing about the use of social media in 2012 is the normality of it for many: In the modern world people want information quickly and in an easily digestible format, and this helps to explain the growth in popularity of Twitter since its inception 6 years ago. Comments 1
Going public on the private screen Gavin Sugden, Research Director 16 March 2012 The rise of the smartphone has coincided with the increased popularity, and normality, of social media usage. How are the two connected? Comments 0
Social media and mobile – buzzwords of the year (again) John Carroll, Senior Director 21 February 2012 The use of mobile or social media is now the norm for most of our surveys' respondents. Is the research industry up to the challenge? Comments 0
Are targeted TV ads smart? John Carroll, Senior Director 14 February 2012 Can we be certain that the increased targeting of advertising is going to be attractive to consumers in the future? Comments 0
Media Research: Reasons to be cheerful John Carroll, Senior Director 13 December 2011 In a year sandwiched between the General Election and the Olympics, what has 2011 meant for the media research industry? If the research showcased at this year's Media Research Group (MRG) Conference is anything to go by, then it has been a year of experimentation and change. Comments 0
The issues facing media research John Carroll, Senior Director 10 October 2011 John Carroll, Ipsos MediaCT Senior Director and Chair of the Media Research Group (MRG) on the issues facing media research and why the research industry needs to experiment to achieve change. Comments 0
Why newspapers and magazines should survive the digital age John Carroll, Senior Director 1 September 2011 In our latest MediaCT Light Bites blog, John Carroll asks, in an industry where we are led to believe that print is dying and tablets are the saviour, why has print stood the test of time? Comments 1
The Bigger and Older Nation John Carroll, Senior Director 3 May 2011 It has been well reported that we are getting older as a nation. Is the media industry taking heed? Comments 0
MediaCT Light Bites: The Slow Rise of Digital Radio John Carroll, Senior Director 5 August 2010 The latest set of RAJAR results published on 5th August 2010 (Q2 2010) shows that the current UK digital share of radio listening is 25%, meaning we are now half way towards the Government's target of 50% set for the switchover from analogue to digital broadcasting. Comments 0
Ipsos MediaCT "helps clients make connections in the digital age". We do this through an in-depth understanding of how consumers access media content inside and outside of the home. In addition to our monthly Bite-Sized Thought Piece publications, Light Bites provides our reactions to the latest media research industry developments.
Read More


text:
Offering everything from webinars to online chats, we understand that sometimes you want to visit but are unable to make the trip to campus. Below you will find a list of all of our virtual visit opportunities! If you have any questions about our virtual events, please email Stephanie Cohen at email@example.com or call 203-479-4117.
Online ChatsLearn more about the University of New Haven by joining us for a free, live online chat! You will have the opportunity to chat with admissions counselors, admissions representatives, and current students! Sign up for a chat today! |
Virtual Campus TourExperience our campus without having to make a special trip! With our specially-designed virtual tour, you can experience 360-degree panoramic photos of many of our campus facilities, a guided "walking" tour through campus, as well as photos and videos straight from YouTube and Flickr. |
Virtual Open Houses & College FairsThe University of New Haven hosts an annual virtual open house, as well as participates in multiple virtual college fairs throughout the year. |
WebinarsWe are proud to offer students interested in UNH the opportunity to participate in a series of webinars (online seminars) on topics that interest them. Topics range from the application process, to financial aid, and many more. |


text:
Dark and foggy nights lead our friends into mystery and danger for the Season 1 shocker
Episode 6 Broadcast 14 December 2012
The Blackened Mirror is an online series of short episodes, following the adventures of a cynical private investigator, Harland Quinn, who has a broken down office in a Depression-era city. Until one day a mysterious woman walks through his office door with her odd companion … and then things get progressively stranger. You'll be able to watch the show as part of the Happy Hunting! TV show or here in its own dedicated channel. But that's only the start of The Blackened Mirror, because it's is more than just a virtual world TV show; you'll be able to find more information and win prizes by following a series of games and puzzles within the virtual world of Second Life or through a variety of social media across the internet.
Perhaps you can see why we're calling it Fun Noir …


text:
netjukebox is a Web-based media jukebox for MPD, VideoLAN, and Winamp/httpQ. It features realtime MP3 streaming from different audio formats. Users can download single tracks or a whole album in one zip file. It is also possible to batch-transcode the whole music collection to another format or bitrate without touching the original files.
DomCore is a set of PHP Foundation classes which are ready to be extended to give basic capabilities to your applications. It features a powerful template replacement engine, a language engine for I18N, an extended debugging mode, enhanced error and exception management, Java-like programming (you can't use a class attribute without declaring it first), serializable class management, mass file operations (full directory copy and delete), shared memory management, multi-level caches on data sources, and implementation of programation patterns.
360-FAAR (Firewall Analysis Audit and Repair) is an offline, command line, Perl firewall policy manipulation tool to filter, compare to logs, merge, translate, and output firewall commands for new policies, in Checkpoint dbedit, Cisco ASA, or ScreenOS commands. It is all contained in one file. It can read policy and logs for: Checkpoint FW1 (in odumper.csv / logexport format), Netscreen ScreenOS (in get config / syslog format), and Cisco ASA (show run / syslog format). It uses both inclusive and exclusive CIDR and text filters, permitting you to split large policies into smaller ones for virutalization at the same time as removing unused connectivity. It supports policy to log association, object translation, rulebase reordering and simplification, rule moves, and duplicate matching automatically. It allows you to seamlessly move rules to where you need them. 'print' mode creates a spreadsheet for your audit needs with one command.
Fimex is a the File Interpolation, Manipulation, and EXtraction library for gridded geospatial data. It converts between different, extensible data formats (currently netcdf, NcML, grib1/2, metgm, wdb, and felt). It enables you to change the projection and interpolation of scalar and vector grids. It makes it possible to subset the gridded data and to extract only parts of the files. For simple usage, Fimex also comes with the command line program fimex.
Knotter is a highly configurable interlace designer. Interlace patterns are a kind of design historically used as a decorations in many places and by different cultures (some examples are Celtic knotworks and Islamic interlaces). Knotter aims to allow its user to design such patterns in an intuitive way and to provide easy ways to integrate the result into external general-purpose graphic software. For this purpose, designs created within Knotter can be saved in a custom human-readable format and exported as Scalable Vector Graphics and in a wide number of raster image formats.
HGL is a compiler/interpreter suite for developing images. It features its own simple but powerful language, an output format configurable by plugins, runtime input handled by plugins, and easy integration into various environments like Web servers or graphical applications. The input is taken from a source file, which has to be compiled for quick and frequent access by the interpreter. An interpreter then runs the compiled files, takes input from custom plugins (if neccessary), and outputs its result via custom plugins.
A shell focused on interactive use, discoverability, and user friendliness.


text:
Parse Project
From DocBase
The purpose is to make improvements to the PARSE function.
See Improvements to the PARSE function (on R3 Blog) for project requirements.
Some ideas have been posted REBOL Enhancement Proposal for the Parse dialect (on Gabriele's site).
The primary editor/manager of this project is: Brian Hawley (BrianH).
The current and up-to-date R3 summary document for parse is Parse Summary.
The goal of this page is to collect finished proposals for passing along to Carl to implement in REBOL 3. These proposals are currently considered pretty settled, unless there are really new ideas or unknown implementation issues.
Discussion of these proposals should be posted in REBOL 3 chat, under the R3/Parse heading (#28). If you want to contribute to this page, start there. Membership is open: Anyone with REBOL 3 can join in.
There will be factors that affect these proposals that will be specific to changes in REBOL 3. Some of these changes are already in the R3 public alpha releases, and some are still being planned. The best approach is to test your code against the public alphas and ask for clarification in R3 chat. People who know and make the plans are in R3 chat almost every day, including Carl.
When making proposals here, there are some things you should keep in mind:
- People are going to use this dialect to do real work, so consider practical implications first as they are what make a feature "important".
- The scope of PARSE is language recognition. Going outside of that scope shouldn't be done lightly.
- PARSE is implemented in native code, primarily by Carl. It doesn't change often. Carl's word on PARSE is the last word.
- These changes are being proposed for REBOL 3.0, not 2.x. There are some semantic changes in REBOL 3 that may make some of these changes easier, and other changes required. If you have any confusion about REBOL 3's semantic changes, ask the editor, preferably in AltME. Testing the public alpha releases of R3 is not enough - some changes are still in the planning stage.
- REBOL 3.0 strings are Unicode, so charsets might not work in the way that you might expect. In particular, complementing a charset in R3 requires a special flag in the charset because of memory issues. This was the original reason for the NOT proposal, for instance.
- REBOL 3.0 will have multitasking. We will not be accepting proposals that are not multitasking-safe.
- PARSE is only one of many REBOL dialects that all work together. Not everything has to go into PARSE - some tasks are better done in other REBOL dialects.
- PARSE rules are data. If your feature doesn't make it in you can always write a preprocessor for your rules in PARSE.
- Simplicity and balance are nice and will make REBOL programming less stressful. Overly complex features will likely be rejected.
- Don't be afraid to include stuff that only smart people will understand - we have a lot of those. Still, be nice to people who don't have Comp-Sci degrees - we have a lot of those too.
- PARSE and REBOL have been around for years, and there is a lot of terminology that has specific usage in the REBOL community. We can be convinced to use other terms, but any attempt to just use different terminology without reference to the REBOL-standard terms will just lead to confusion.
The PARSE function of REBOL will not become a parser generator, though the dialect might be usable for others to create one if they so choose. PARSE rules make a good target language though.
Modification operations are out of the scope of language recognition and pattern matching; modification is usually done in REBOL code in the parentheses. However, modification of the data being parsed is a really common practice in existing REBOL code and will likely continue to be so - complaining will not make the practice go away. The CHANGE, INSERT and REMOVE proposals below have been accepted as a minimal way to allow people to do what they are already doing, badly in many cases. It is unlikely that any other modification proposals will be accepted.
Theory of PARSE
REBOL is designed as a practical language. It has been notoriously difficult to make REBOL fit theoretical models because its design was only inspired by theory, but driven by practice. This has not stopped the community from trying though, and those efforts bring certain advantages to REBOL. While conforming to a theory is not an end in itself, it does let you use some helpful techniques that have resulted from the research on that theory.
(Editor's Note: Thanks to Peta for researching most of this section.)
The PARSE dialect is an enhanced member of the family of Top-down parsing languages (TDPL family) including the Top-down parsing language (TDPL), the Generalized top-down parsing language (GTDPL) and the Parsing expression grammar (PEG) and uses the same "ordered choice" parsing method as the other members of the family.
The prioritization of the ordered choice (a.k.a. "alternative", but the "ordered choice" name is more appropriate since the order of rules matters) causes that the second choice in the
["a" | "ab"]
rule never succeeds since the first one takes precedence. This causes the greediness of repetition operators, e.g.:
repeated-rule: [any rule]
has a recursive definition:
repeated-rule: [rule repeated-rule | none]
, which is greedy since the first choice always takes precedence when possible.
There is one formal difference between PARSE and the other members of the TDPL family: All other TDPL family members succeed when the start rule succeeds. As opposed to that, for PARSE to succeed the RULES rule (which is the PARSE counterpart of TDPL family start rule) has to succeed and the final PARSE position has to be the end of the input. This property is essential. It's part of the basic purpose of PARSE, and has been for years. If you are only concerned about a section of the data and are using the return value of the PARSE function, you can put [to end] on the end of your start (RULES) rule.
PARSE is provably able (see below) to recognize all the grammars the members of the TDPL family can recognize (and more), although it needs to use a couple of complicated idioms to represent the four basic family operators (FAIL, NOT, AND and THEN) it does not support directly yet.
The membership of the PARSE dialect in the above language family brings the following advantages all the family members have:
- PARSE expressions make a good replacement for regular expressions because they are strictly more powerful. For example, a regular expression inherently cannot find matched pairs of parentheses because it is not recursive, but the PARSE dialect can.
- PARSE makes a good replacement for an LL parser because it is strictly more powerful. For a grammar not recognizable by a LL parser see the Wikipedia example below.
- Context free grammar parsers usually require a separate tokenization step because of the way they use lookahead. PARSE of string types does not require a separate tokenization step and the tokenization rules can be written in the same way as any other grammar rule.
- When parsing block types, the data is actually in-memory datastructures that have been constructed at runtime or loaded by the LOAD function. No tokenizing is necessary because there is no lexical format in memory. This gives the block parsing dialect some additional operations that the string parsing dialect doesn't have. One of these, the INTO operation, is not shared with other members of the TDPL family. INTO allows PARSE to recognize already nested data structures that are out of scope for traditional parsers that are defined to operate on a series of elements. Within a given block, PARSE acts like a member of the TDPL family.
- Many context free grammars contain inherent ambiguities, even when they're intended to describe unambiguous languages. The "dangling else" problem in C, C++, and Java is one example. These problems are often resolved by applying a rule outside of the grammar. In the PARSE dialect these ambiguities never arise because of prioritization.
- PARSE has an unlimited lookahead capability, brought to PARSE by the ordered choice operator.
If your rules contain any modifying REBOL code that is executed in parentheses or modifying operations (that may be added as proposals here) then any changes made by those operations will not be undone on backtracking. (Editor's note: Just like that Icon code you couldn't debug.) You may need to consider this when trying to use modifying rules since they may interact with the unlimited lookahead capability PARSE has. As a result of modifying techniques, linear optimizations like those of Packrat parsers are likely impossible in REBOL PARSE (though one can hope).
For those of you who are fans of REBOL history, it is no longer possible (even in REBOL 2) to explicitly set the parse position with a get-word to another series than the one being parsed already, a previously popular technique used for incremental parsing (and which crashed PARSE if misused). Another thing which won't crash anymore in REBOL 3 is off-the-end references to series - they get moved back to the nearest end. Safer, if more boring.
(Editor's Note: When someone in the REBOL community says "set the parse position" they are referring to explicitly setting the parse position with get-words. All other changes to the parse position are implicit effects of the other operations, and thus not usually mentioned.)
General format of entries:
- name (as section heading): the suggested command/concept name
- suggested by: a name we can hit up for more info
- purpose: a one line statement of the concept
- importance: why we need this change
- syntax: how the parse operation will be called (optional)
- examples: clear examples of usage and results
(Also a filter, because if we cannot say it easily, then the concept may be too complex.)
Editor's Note: Please keep the syntax sections of the proposals similar to the existing syntax sections, with alternates as list items and keywords capitalized. If there are entire alternate proposed groups of syntax, use separate syntax lists and discuss the differences. Do not use pre blocks for syntax. I'll try to keep things consistent.
Here is the current list of priorities linked to the feature descriptions below.
- [x] NOT (originally proposed as NOT 2)
- [x] AND
- [x] FAIL
- [x] THEN
- [x] QUOTE
- [x] /all by default (only for rule parsing, not simple parsing)
- [x] TO and THRU multiple
- [x] IF (condition) (originally proposed as CHECK)
- [x] CHANGE 1 (partially implemented)
- [x] REMOVE 1
- [x] INSERT (partially implemented)
- [x] INTO strings
- [x] RETURN
- [x] BREAK/return
- [x] Set PARSE position to another series (though see #1787)
- [x] DO
Deferred for later (hopefully):
- [ ] OF (though maybe called something else)
- [ ] REVERSE (probably the REVERSE rule variant)
- [ ] CHANGE ONLY option
- [ ] CHANGE rule (expression)
- [ ] INSERT ONLY option
- [ ] INSERT (expression)
- [ ] /ignore stuff
- [ ] n BREAK
- LIT (in favor of QUOTE)
- EITHER (in favor of THEN)
- CHANGE 2 (in favor of CHANGE 1)
- REMOVE 2 (in favor of REMOVE 1)
- INTO type (in favor of INTO without the type)
- BREAK only from loops (misunderstood what loops are in PARSE)
- STAY (apparently, in favor of the listed alternatives)
- TO or THRU NOT (TO and THRU have limited syntax)
Here is a list of the requested improvements to PARSE.
CASE and NO-CASE keyword pair
Suggested by: Ladislav, BrianH
Purpose: PARSE is able to perform either case-sensitive or case-insensitive matching depending on the /CASE refinement. This proposal allows to specify matching sensitivity in the PARSE rule.
Importance: Makes the Parse dialect more expressive, the /CASE refinement is "external" to the dialect.
case rule no-case rule
Using this syntax The CASE and NO-CASE keywords influence matching sensitivity in the given RULE. Both keywords take one argument, which may be a matching rule.
parse input [case "my string"]
should be equivalent to current
parse/case input ["my string"]
On the other hand, a rule such as
parse input [case "my string" no-case "another string"]
is not easily expressible in the current PARSE dialect. The last example looks like being equivalent to
parse input [case "my string" "another string"]
since the default mode in the RULE should be the NO-CASE state, because the /CASE refinement was not used.
Backward compatibility:
To maintain the backward compatibility, the /CASE PARSE refinement should still be allowed.
Suggested by: Carl
Purpose: Allows unordered matching sets.
Importance: Various dialects (e.g. the GUI) allow an unordered sequence of values, but these are difficult to efficiently parse using available methods.
- OF [type ...]
The types in the argument block would be names of datatypes or typesets as words. Literal datatypes or typesets may also be accepted (?).
An OF statement could be used as the rule argument to COPY, SET or RETURN operations. The value returned would be a block of the values matched in the order specified, regardless of what order they appear in the series, and any missing values would be replaced with the value none.
of [integer! string! word!]
This accepts none or one of the specified datatypes in the input stream. Example matches would be:
1 "str" word 1 "str" "str" 1 1 "str" word "str" 1 word word 1 "str" ...
The output result of OF would be the a block with the captured values in the order specified.
1 --> [1 none none] 1 "str" --> [1 "str" none] word 1 "str" -> [1 "str" word]
Alternate syntax proposal by Steeve Luc:
- OF [type or OPT type ...]
In this proposal the values to be matched are mandatory unless marked as optional with the OPT keyword. Missing mandatory values would cause the rule to not match. The ordering and return characteristics would be the same.
Note: The name OF is supposed to imply that this would be a set OF values. Some other suggestions that have been made are:
- FROM: FROM a set of values.
- ALL: ALL of these values (for the mandatory values version above).
- GATHER: GATHER some values in no particular order.
Future: A possible future enhancement would be to allow 0, 1, or more.
Suggested by: Carl (refinement of LITERAL requested by others)
Purpose: Escapes values from the PARSE dialect.
Importance: The PARSE dialect uses a range of terminal tokens, and those cannot be used as direct matches during block parsing. For example, if you write the numeral 1, it is considered a count parameter to the command that follows. A solution is to provide a general escape mechanism for matching literal tokens.
quote 1
matches a value 1 in the input stream, not a count of 1.
To further show the reasoning, consider:
2 quote 1
which would match 2 values of 1 in the input stream.
This can also be applied to words:
quote abc
matches the word abc in the input stream.
quote 'abc quote abc: quote :abc
will match 'abc, abc:, and :abc respectively.
You can also match full literal structures, which will be compared as if with the REBOL EQUAL? function. For example,
quote [a b c]
will match a nested block! with only the words a, b and c in it, in that order.
The great value of QUOTE is that a rule can directly match input tokens without evaluating a paren block (a production). Previously, you would have to write rules like this to do literal matching:
set w set-word! (if w = to-set-word 'abc [...])
Issues: In theory, this is a high-precedence (full strength) matching rule. This means that it is absolutely literal, so there would be no constructive forms (of any kind). That may be too limiting and may present an argument for providing a constructive sister of QUOTE.
Suggested by: Peta
Purpose: For block parsing, escapes values from the PARSE dialect. Semi-constructive.
- The PARSE dialect uses a range of terminal tokens, and those cannot be used as direct matches during block parsing. For example, if you write the numeral 1, it is considered a count parameter to the command that follows. A solution is to provide a general escape mechanism for matching literal tokens.
- The great value of LIT is that a rule can directly match input tokens without evaluating a paren block (a production). Previously, you would have to write rules like this to do literal matching:
set w set-word! (if w = to-set-word 'abc [...])
- This variant is more flexible than the non-constructive one, which may require an enhancement later.
- LIT block
- LIT paren
- LIT other
The LIT block syntax can be used to match a sequence of values. A counterpart of string in string-matching. Non-constructive.
- To match a [1 2] sequence:
parse [1 2] [lit [1 2]]
- To match a subblock:
parse [[1]] [lit [[1]]]
- To match a paren:
parse [(1)] [lit [(1)]]
The LIT paren syntax is constructive. It evaluates the paren. The result is used for matching. If it is a block, then the LIT block case above applies, otherwise the LIT other case applies.
- To match 2:
parse [2] [lit (1 + 1)]
- To match a [1 2] sequence:
parse [1 2] [lit (reduce [1 + 0 1 + 1])]
- To match a paren:
parse [(1)] [lit (lit (1))]
The LIT other syntax is for other cases. Non-constructive.
- To match a value 1:
lit 1
- To match two values of 1:
2 lit 1
- To match a word:
lit abc
- To match a lit-word:
lit 'abc
- To match a set-word:
lit abc:
- To match a get-word:
lit :abc
- To match a path:
lit a/b/c
- To match a lit-path:
lit 'a/b/c
Suggested by: Peta
Purpose: Inverts the success result of a rule, only.
- With the addition of Unicode charsets, it is no longer practical to complement a charset for comparison reasons.
- By not consuming input this would be a direct inversion of the rule.
- Works as a look-ahead operation. PARSE, as a member of the TDPL family already has unlimited look-ahead capability. This operation allows even an inexperienced user to make use of it.
- Replaces the tricky idiom (which proves, that the capability is already present in PARSE):
[rule (cont: [end skip]) | (cont: none)] cont
Explanation: Together with the AND operation this will make the Parse dialect directly compatible with the Parsing expression grammar. The behavior of this NOT operator is consistent with the other proposed basic operations of the TDPL family PARSE doesn't directly support yet:
- Is consistent with the AND operation:
[AND rule] = [NOT NOT rule]
- Is consistent with the EITHER operation:
[NOT rule] = [EITHER rule FAIL NONE]
- Is consistent with itself:
[NOT NOT NOT rule] = [NOT rule]
- NOT rule
- To match one character distinct from SPACE-CHAR the following rule would work:
not space-char skip
- Can invert even the END rule:
not end
Notes: Regardless of the underlying series changes performed by the argument rule this NOT operation will be consistent with PARSE's other backtracking operations.
Suggested by: Peta, the name AT by Chris Ross-Gill
Purpose: A look-ahead rule: Matches the parse rule without changing the current position.
- Replaces the [here: rule :here] idiom which has problems with recursion-safety.
- Compatible with the Parsing expression grammar - together with the NOT operator it allows direct usage of PEG expressions in PARSE. See the Wikipedia example below, which is a PEG.
- May be used in combination with the original (R2-type) INTO syntax for look-ahead type check. The semantics of INTO would still need to be expanded to support string types.
- As a member of the TDPL family PARSE already has unlimited look-ahead capability. This operator allows even an inexperienced user to comfortably make use of the capability.
- AND rule
Notes: The recursion-safe idiom known to do the same is:
[rule (cont: none) | (cont: [end skip])] [end skip] | cont
The name AT has been suggested as an alternative to the originally proposed AND name, but AND was finally chosen.
- Combine with the original INTO to check that the type of the value is a block!:
and block! into rule
- Combine with modifying operations:
and insert "a" "a"
AND in this case resets the parse position, but not the effect of the INSERT. This technique can be used to implement modify-then-verify or iterative processes.
- (Advanced) Match an n #"a" n #"b" n #"c" string for any n >= 1 (a PEG taken from the Wikipedia, an example of a non-context-free grammar, which cannot be parsed by an LL parser):
nanb: [#"a" opt nanb #"b"] ; the same number n >= 1 of #"a"s and #"b"s nbnc: [#"b" opt nbnc #"c"] ; the same number n >= 1 of #"b"s and #"c"s nanbnc: [ and [nanb #"c"] ; look-ahead test of the same number of #"a"s and #"b"s followed by a #"c" some #"a" ; skip all #"a"s nbnc ]
Explanation of the example:
- The nanb rule makes sure that there are as many b's as there are a's, recursively (you can't do that with regular expressions).
- The #"c" after nanb makes sure these are followed by at least one #"c" (this helps to make sure, that there aren't other #"b"s following).
- Combined, those rules ensure that there are the same number of a's and b's followed by #"c"s.
- By using the AND operation we are able to do this check as a look-ahead rule, providing context for the subsequent rules (you can't do that with a context-free grammar).
- We then skip past the a's and use the nbnc rule to make sure that there are at least as many c's as there are b's.
- The nanbnc rule ends after nbnc, making sure that there aren't any extra c's.
- All together, this ensures that there are the same number of a's, b's and c's. Magic!
Suggested by: Carl
Purpose: Executes its argument rule, ignoring whether or not it matches, and doesn't advance.
- STAY rule
- Unlike AND and NOT, STAY doesn't care if its rule matches.
- Useful for rules that have effect, like CHANGE, REMOVE and INSERT, and rules containing productions. Especially if you don't need to verify them.
Note: the proposed
stay rule
is just a shortcut for
and [opt rule]
opt [and rule]
rule fail | none
opt [rule fail]
not [rule fail]
Suggested by: Peta
Purpose: Syntactic conditional pattern matching without dynamic rules.
- Increases the expressiveness of the PARSE dialect to match that of the Generalized TDPL.
- Together with FAIL it allows direct usage of the GTDPL in PARSE.
- Dynamic rules tend to be a tricky process to write and debug, not to mention the potential binding issues if they aren't done just right. The more language patterns we can recognize without dynamic rules, the better.
- Replaces the idiom:
[rule1 (cont: rule2) | (cont: rule3)] cont
- This rule is not as important as the other proposed rules in this group (FAIL, NOT, AND). Using the NOT operator it can be replaced by a simple idiom:
[rule1 rule2 | not rule1 rule3]
- EITHER rule1 rule2 rule3
Parse to the #"a" delimiter, to the #"b" delimiter, or to the end of the input, whichever comes first:
any [either [#"a" | #"b"] [end skip] skip]
Editor's Note: The simpler but otherwise equivalent THEN proposal below was accepted instead.
Suggested by: Carl (as a variant of EITHER)
Purpose: Syntactic conditional pattern matching without dynamic rules.
- Increases the expressiveness of the PARSE dialect to match that of the Generalized TDPL.
- Together with FAIL it allows direct usage of the GTDPL in PARSE.
- Dynamic rules tend to be a tricky process to write and debug, not to mention the potential binding issues if they aren't done just right. The more language patterns we can recognize without dynamic rules, the better.
- Replaces the idiom:
[rule1 (cont: rule2) | (cont: rule3)] cont
- THEN rule2 | rule3
If THEN is reached (any implied rule1 succeeded), then rule2 is matched and the next alternate (containing rule3) is skipped. If rule1 failed, the next alternate is backtracked to using the normal backtracking rules. If rule2 fails, then it backtracks to whatever rule4 alternate that there may be after the rule3 alternate, if any.
Parse to the #"a" delimiter, to the #"b" delimiter, or to the end of the input, whichever comes first:
any [[#"a" | #"b"] then [end skip] | skip]
Note: The word => has been suggested instead of THEN for this operation, but would require a REBOL syntax exception.
Editor's Note: THEN was accepted with that name, not as =>.
Suggested by: BrianH, Peta
Purpose: Deliberately cause the rule to fail and backtrack to the next alternative (the opposite of NONE).
- This is helpful when you want more fine-grained control over your parse rules.
- It would make the
end skip
idiom used by advanced PARSE programmers available to regular programmers.
- Compatible with the TDPL - allows direct usage of the TDPL in Parse.
For a non-useful example matching the string "ab":
["a" (print "a") fail | "ab"]
TO and THRU multiple
Suggested by: Pekr, Ladislav, et.al.
Purpose: Advance forward to one of multiple match points.
Importance: If there are multiple targets for scanning forward in a stream, it can be quite difficult to code, requiring a user to implement full granularity of the grammar (for example, in string parsing the use of charsets at a lexical level). However, if TO and THRU allow multiple targets, then this effort can be avoided.
- TO rule
- THRU rule
Where the syntax of the rule would be:
- token
- QUOTE token
- [token | ...]
- [QUOTE token | ...]
Rules would likely be composed of only simple tokens or bitsets rather than full rules, for efficiency. Some values are difficult to recognize without full rules, so a QUOTE keyword may be helpful to recognize some values, though likely not nested structures. TO and THRU are not greedy - they match the first possible match.
copy chars to [cr | lf | end]
TO or THRU fail if there is no point in the subsequent data where their argument rule can succeed.
A correction to the existing TO or THRU behavior: When string parsing, TO or THRU "" should always succeed and be equivalent to NONE. We might also consider allowing TO or THRU NONE, with the same meaning. The recursive equivalents of TO and THRU succeed in these cases.
Recursive equivalents:
- A: [THRU B] should be equivalent to A: [B | SKIP A]
- A: [TO B] should be equivalent to A: [AND B | SKIP A]
- This can be very complicated to implement in a general way that has any reasonable performance. However, it should be possible to implement a useful subset, such as that shown in the above example (simple token matches, not grammar matches). It remains to be seen whether the NOT qualifier could be within the high performance subset.
- An alternative strategy (suggested by Peta) would be to have the TO or THRU operation determine whether its rule matches the subset that can be performed with an optimized method, and then use that method when it can. We would need to determine whether the runtime overhead of rule analysis would overshadow the benefits (- only in case the rule analysis is not performed already to check for invalid expressions).
Notes about NOT
With NOT (Editor's Note: Peta's suggestion and my favorite), TO NOT and THRU NOT would be equivalent because NOT consumes no input. The rule can fail only in specific circumstances:
- TO or THRU NOT NONE would always fail, even at the end.
- TO or THRU NOT END would fail at the end of the data.
- More generally, TO or THRU NOT RULE can fail only if the given RULE would succeed at the end of the input.
Editor's Note: With the same rules that would cause TO NOT to fail, the greediness of ANY will cause it to go into an endless loop, a common error in PARSE usage. That would be a good argument for a non-greedy or at least safe equivalent.
However, TO NOT RULE isn't generally equivalent to ANY RULE, e.g.:
to [not "ab"]
isn't equivalent to
any "ab"
, since e.g.
parse "ababab" [a position: (print ["success" index? position])]
- the A: [TO [NOT "ab"]] rule would succeed reaching index 2 in the given string, while A: [ANY "ab"] would advance to the tail of the input.
TO [NOT RULE | END] is equivalent to ANY [AND RULE SKIP].
WHILE operator
Suggested by: Ladislav, Brian, name by Carl
Purpose: Iterate RULE while it matches.
Importance: The simplest possible iteration.
- WHILE rule
Recursive definition/equivalent:
- A: [WHILE B] should be equivalent to A: [B A | none]
ANY operator
Suggested by: Carl, Pekr
The operator should stop iterating, when the input position doesn't advance.
Purpose: Iterate rule while it matches, but eliminate endless loops.
Note: the
any rule
expression is equivalent to:
while [and [rule a:] b: if (greater? index? a index? b) :a]
SOME operator
Suggested by: Carl, Pekr
The operator should stop iterating, when the input position doesn't advance.
Purpose: Iterate rule while it matches, but eliminate endless loops.
Note: the
some rule
expression is equivalent to
and [rule a:] b: opt [if (greater? index? a index? b) :a any rule]
UNTIL operator
Suggested by: Ladislav
Purpose: Iterate RULEB until RULEA is matched.
Importance: Increases the expressiveness of Parse without needing BREAK to stop the iteration.
- UNTIL rulea ruleb
Recursive definition/equivalent:
- A: [UNTIL B C] should be equivalent to A: [B | C A]
- a rule advancing past the "abc" substring on success
until "abc" ["a" | "b" | "c"]
- a rule advancing to the start of the "abc" substring on success
until [and "abc"] ["a" | "b" | "c"]
Note: In recent releases, UNTIL can be implemented using WHILE:
while [b accept | c | reject]
ACCEPT keyword
The ACCEPT keyword terminates repetition of the current rule matching, treating the match as successful. (see the example in UNTIL)
REJECT keyword
The REJECT keyword terminates repetition of the current rule matching, treating the match as unsuccessful. (see the example in UNTIL)
Suggested by: BrianH (renamed by Carl)
Purpose: Modification of the data being parsed (generalization of other suggestions).
Importance: The most frequently requested ability for PARSE, based on help requests from people who messed up the workarounds.
- CHANGE rule value
- CHANGE ONLY rule value
- CHANGE NONE value
- CHANGE ONLY NONE value
- CHANGE rule (expression)
- CHANGE ONLY rule (expression)
- CHANGE NONE (expression)
- CHANGE ONLY NONE (expression)
- CHANGE rule NONE
If specified the rule would be matched before the change is made, failing and backtracking if not matched. The ONLY modifier would be used in block parsing, and would insert the result of the expression as a block rather than inline, like CHANGE/ONLY. The NONE keyword would mean that nothing would be removed or inserted, respectively.
Replacement values can be one of these:
- A word (or path?) which refers to the value (dereferenced, not executed).
- A REBOL expression calculated in parentheses.
- Some other literal value (except word types and parens), treated as a terminal (like QUOTE).
After this operation finishes the position is set to the position after the replacement value, just like the return value of the CHANGE function in REBOL. The current position at the end of the matching rule is used as the other end of the segment to be changed, with CHANGE/PART compatibility rules applying.
- Removing a series of values.
a: "12abc34" parse a [some [to alpha change [some alpha] none]] a = "1234"
- Changing a series of values to another value.
a: "12abc34" parse a [some [to alpha change [some alpha] "zzzz"]] a = "12zzzz34"
- Inserting a value after a pattern.
a: "12abc34" parse a [some [to alpha some alpha change none "zzzz"]] a = "12abczzzz34"
- Changing a series of values to a calculated block.
a: [1 2 a b c 3 4] parse a [some [to word! change only [some word!] (array/initial 4 'z)]] a = [1 2 [z z z z] 3 4]
Note: All modification operations are irreversible, and so will not be undone on backtracking. As noted in the theory section above, it may not be easy to backtrack to a "reasonable" position, but backtracking issues can be controlled with careful use.
Suggested by: Carl (variant of CHANGE 1)
Purpose: Modification of the data being parsed (generalization of other suggestions).
Importance: The most frequently requested ability for PARSE, based on help requests from people who messed up the workarounds.
- CHANGE pos value
- CHANGE ONLY pos value
- CHANGE pos (expression)
- CHANGE ONLY pos (expression)
The pos argument is a series position set earlier, used as one end of the portion to be changed. (Editor's addition) Or pos could be an integer offset advancing from the current position, used as an end point. The other end of the portion is the current position at the point of the rule. CHANGE/PART compatibility would apply to the start and end positions. The ONLY modifier would be used in block parsing, and would insert the value or result of the expression as a block rather than inline, like CHANGE/ONLY. The NONE keyword of CHANGE 1 would not be necessary - REMOVE or INSERT could be used instead.
Replacement values can be one of these:
- A word or path which refers to the value (dereferenced, not executed).
- A REBOL expression calculated in parentheses.
- Some other literal value (except word types and parens), treated as a terminal (like QUOTE).
After this operation finishes the position is set to the position after the replacement value, just like the return value of the CHANGE function in REBOL.
- Removing a series of values from a string.
a: "12abc34" parse a [some [to alpha b: some alpha change b ""]] a = "1234"
- Changing a series of values to another value.
a: "12abc34" parse a [some [to alpha b: some alpha change b "zzzz"]] a = "12zzzz34"
- Inserting a value after a pattern using a series position.
a: "12abc34" parse a [some [to alpha some alpha b: change b "zzzz"]] a = "12abczzzz34"
- Inserting a value after a pattern using an integer offset.
a: "12abc34" parse a [some [to alpha some alpha change 0 "zzzz"]] a = "12abczzzz34"
- Changing a series of values to a calculated block.
a: [1 2 a b c 3 4] parse a [some [to word! b: some word! change only b (array/initial 4 'z)]] a = [1 2 [z z z z] 3 4]
Note: All modification operations are irreversible, and so will not be undone on backtracking. As noted in the theory section above, it may not be easy to backtrack to a "reasonable" position, but backtracking issues can be controlled with careful use.
Suggested by: BrianH
Purpose: Shortcut for CHANGE rule NONE
Importance: Ease of use.
- REMOVE rule
a: "12abc34" parse a [some [to alpha remove [some alpha]]] a = "1234"
Note: See CHANGE 1 for behavior.
Suggested by: Carl (variant of REMOVE 1)
Purpose: Shortcut for CHANGE pos "", or CHANGE pos [] for block parsing.
Importance: Ease of use.
- REMOVE pos
a: "12abc34" parse a [some [to alpha b: some alpha remove b]] a = "1234"
Note: See CHANGE 2 for behavior.
Suggested by: BrianH
Purpose: Insert a value (shortcut for CHANGE).
Importance: Ease of use.
- INSERT value
- INSERT ONLY value
- INSERT (expression)
- INSERT ONLY (expression)
- Inserting a value after a pattern.
a: "12abc34" parse a [some [to alpha some alpha insert "zzzz"]] a = "12abczzzz34"
- Changing a series of values to a calculated block.
a: [1 2 a b c 3 4] parse a [some [to word! some word! insert only (array/initial 4 'z)]] a = [1 2 a b c [z z z z] 3 4]
Note: See CHANGE for behavior.
Suggested by: BrianH
Purpose: Recursion-safe and multitasking-safe local words.
Importance: Essential for working with hierarchical structures or syntax.
- USE [vars] [rules]
- Recursive length printing.
rule: [ use [a b] [ "b" (print 1) | a: "a" rule "a" b: (print subtract index? b index? a) ] ]
parse "aba" rule ; Prints 1 3
parse "aabaa" rule ; Prints 1 3 5
The USE-RULE function defined in the script library implements this as the default variant, but it has also a /NO-REBIND variant, which does not rebind the given rules block, i.e. takes care of doing the binding just once.
Notes: The rule argument to USE would likely need to be have BIND/copy applied, and only nested blocks and parens would be bound, just like with USE in REBOL. It is the initial rebinding that makes this multitasking-safe. We might be able to use the semantics of R3 function! contexts with a little memoization - the overhead should be compared to the BIND/copy overhead to see which is better. However, this would prevent the bound words from being used outside the extent of the USE operation.
In REBOL 2 (and in the public REBOL 3 alpha from January 2008), the PARSE keywords can be used as variables without influencing the PARSE functionality, like here:
rebol/version ; == 18.104.22.168.1 parse [] b: [(end: 11) end (print [end same? bind? second b bind? 'end])] ; 11 true
Similarly, the binding of the PARSE keywords does not change and does not influence the functionality, as can be proven too.
IF (condition)
Suggested by: BrianH, Ladislav (originally proposed as CHECK)
Purpose: Direction of parse rules based on semantic criteria.
Importance: Powerful feature for advanced parse rules. There are some patterns that can't be recognized easily by just syntax rules - sometimes the difference is semantic. This is a feature required by some more advanced language processors including parsers of some programming languages.
- IF (expression)
The REBOL expression in the paren following the IF keyword is executed like any other paren. If the result of the expression would be accepted as true by REBOL's IF function, parsing continues as usual; if not, the rule fails as if there were a FAIL there.
Previously you had to do something like this:
(cont: unless condition [[end skip]]) cont
- Odd numbers only.
[set x integer! if (odd? x)]
- Word not defined yet.
['define set x word! if (not find words x)]
Suggested by: Carl
Purpose: Reverses parse direction in the input stream.
Importance: Some patterns are easier to match by advancing forward, then reversing the direction of the pattern match. (Often this is a shortcut for what would be a more complicated approach.)
to lf reverse [remove cr]
This would advance to the LF char, then look back one for CR and remove it if found.
Notes: There are two interpretations of this proposal that should be considered.
Syntax 1:
In this version, the parse direction would be changed indefinitely. The parse direction should probably be saved on block entry and restored on backtrack, like the position - if there is no subsequent backtracking then any directional changes would stick until the next REVERSE.
Syntax 2:
- REVERSE rule
In this version, only the argument rule would be checked in reverse. The parse direction would be restored after the rule is finished.
For either version, we need to consider whether string literals would be matched in reverse when the direction is reversed in string parsing. Whichever is more efficient would probably be fine.
BREAK only from loops
Suggested by: BrianH
Purpose: Have the BREAK operation break to SOME or ANY, rather than just out of a block.
Importance: It would make BREAK work the way people would expect, and more useful.
Notes: Right now you can't put a BREAK in a nested block or a referred-to rule. This limits its usefulness by quite a bit. It would be helpful if PARSE's BREAK acted like the BREAK function and escaped from the closest loop, no matter how far it is nested in grouping blocks.
Editor's Note: Based on a misunderstanding of what constitutes a loop. Rejected.
n BREAK
Suggested by: Steeve Luc
Purpose: To specify how many block levels you want to break from.
Importance: This allows you to create more complex rules and still break out of them if necessary.
- n BREAK
Where n is a positive integer. This syntax mirrors the number repetition operator.
Discussion: If the proposal to redefine BREAK as breaking to a loop is implemented, then this would let you break from n nested loops. Otherwise, it would be to break out of n nested blocks.
Suggested by: Peter Wood (as RETURN), many others who assumed it worked already.
Purpose: Make the REBOL BREAK/return function work within the PARSE function.
Importance: Ease of use and consistency.
Notes: This function would be called from within parens, and would work just like BREAK/return does for loops. If it is not called, PARSE returns what it would normally return.
>> parse "a" [alpha (break/return 1)] == 1 >> parse "1" [alpha (break/return 1)] == false
Note: There is a question of whether this change could introduce an unnecessary inconsistency. The goal of the proposal can be easily achieved by putting the parse call into a function body, a loop, or a catch control function, e.g. like this:
>> loop 1 [parse "a" [alpha (break/return 1)]] == 1 >> loop 1 [parse "1" [alpha (break/return 1)]] == false
Suggested by: BrianH (inspired by Peter Wood)
Purpose: Return a recognized series from the PARSE function.
Importance: Ease of use, this time for parse-and-grab.
- RETURN rule
- RETURN stops the parsing immediately and returns from the PARSE function.
- For block parse RETURN copies like COPY, rather than references like SET.
- If the BREAK/return proposal is accepted this may not be necessary.
- Return the first tag in a string.
>> parse "abc<hello>def" [to "<" return thru ">"] == "<hello>" >> parse "abcdef" [to "<" return thru ">"] == false
INTO type
Suggested by: BrianH, Steeve Luc
Purpose: Making INTO recognize more types in block parsing, including switching to string parsing for string types. This is a generalization of the INTO-STRING proposal.
Importance: Incredibly helpful for advanced dialects and mixed block and string dialects.
- INTO type rule
- The type parameter of INTO would be limited to series types and typesets that include only series types.
- The type or typeset would need to match before the rule is tested. Failure of either counts as failure.
- An INTO statement could be used as the rule argument to COPY, SET or RETURN operations.
- Any position-setting or directional operations in the rule only refer to position within the value under consideration, not the outer context.
- Parsing a string in a block.
parse [1 "abc" 2] [integer! into string! [some alpha] integer!]
Editor's Note: Rejected in favor of the typeless INTO proposal below.
Suggested by: Peta
Purpose: Making INTO recognize more types in block parsing, including switching to string parsing for string types.
Importance: Incredibly helpful for advanced dialects and mixed block and string dialects. No INTO syntax change makes it more backwards compatible - this is just a semantic change.
- INTO rule
The existing INTO syntax would be extended to string types, though still only be in the block parsing dialect. PARSE would switch into string parsing if the value in question is a string type. As with the above proposal an INTO statement could be used as the rule argument to COPY, SET or RETURN operations.
- An INTO statement could be used as the rule argument to COPY, SET or RETURN operations.
- Any position-setting or directional operations in the rule only refer to position within the value under consideration, not the outer context.
- This would lose the feature of having INTO fail when presented with string values, in favor of switching modes. This could be a subtle semantic change that might affect existing rules even though the syntax is the same.
- Since there are differences between the string and block parsing dialects, it would be a good idea to check the type ahead of time with the AND proposal above.
- Parsing a string in a block.
parse [1 "abc" 2] [integer! and string! into [some alpha] integer!]
Set PARSE position to another series
Suggested by: Peta
- Allow the PARSE position to be set explicitely to another series
- Citing the editor's note: "For those of you who are fans of REBOL history, it is no longer possible (even in REBOL 2) to set the parse position to another series than the one being parsed already, a previously popular technique used for incremental parsing (and which crashed PARSE if misused)."
- PARSE now detects attempts to explicitly set its position into another series and "forbids them". Since the INTO operator does just that (it sets the PARSE position into another series), such an operation is provably always possible. Therefore, as an alternative to the current behavior, it is possible for PARSE to do the appropriate bookkeeping to make sure no crash can occur.
- There is one property, which can be influenced by this: The final check, whether the start rule has finished at the END OF INPUT position. In case this proposal was accepted, the END OF INPUT test can be reasonably defined by testing, whether the final position is at the end of the series parsed as the last one.
- :position
Editor's Note: INTO works through recursion, not parse position setting. Accepted, but it currently has a problem with backtracking (see [1787] for details, at least it doesn't crash).
Suggested by: Gabriele
Purpose: Putting REBOL code in your dialects. Block parse dialect only.
- DO rule
At the current parse position, a single expression of REBOL code will be evaluated, using the algorithm of the REBOL DO/next function. The parse position is then changed to the position after the expression, as would be returned by DO/next. No binding is performed by the DO operation, but it does not restrict any binding explicitly done by the expression.
The single result of the expression is then matched by the argument rule as if the value were contained in a nested block and the rule used as the argument of INTO. If the expression result is of a block type it will be treated as if it is nested, not inline. Any rule that expects to match more than one value will fail, as there will only be one value to be matched. The SKIP rule will match any value, including #[none], but not unset values. The NONE rule will match either #[none] or unset values. An empty rule block will only match unset values (Question: Should the NONE rule also behave this way? Decision for Carl - he knows the internals).
DO will fail if:
- There is no expression to be executed.
- The expression is executed correctly but the rule doesn't match.
DO will pass along any unhandled errors the expression generates.
A DO statement could be used as the rule argument to COPY, SET or RETURN operations. The result used by those operations will be the value of the expression, not a block containing the value.
Notes: Gabriele's original proposal expresses the concern that failure of a DO operation is likely a sign of a serious problem and thus should generate an error rather than just fail. This concern should be considered.
Examples (adapted from Gabriele's REP):
parse [1 + 1] [set result do integer!]
Should evaluate the expression "1 + 1" and set the word 'RESULT to the resulting value (2). The PARSE cursor should be advanced after the expression (i.e. to the tail of the block, in this case).
circle-rule: [ 'circle set center do pair! set radius do number! (radius: to-integer radius + 0.5) ]
parse [circle as-pair x y d / 2] circle-rule
Should evaluate "as-pair x y" and set 'center to the result, then should evaluate "d / 2" and set 'radius to the result, etc.
parse [circle 10 20] circle-rule
This would fail if DO fails as proposed, but if DO generates errors this would raise an ERROR! like:
** Parse Error: Expecting pair!, not 10 ** Near: 10 20
(i.e. with the NEAR field reporting the position of the PARSE cursor before the evaluation).
parse [circle 5x5 7 / 0] circle-rule ** Math Error: Attempt to divide by zero ** Near: 7 / 0
Suggested by: Carl
Purpose: Limits lookahead distance.
Importance: Performance for some cases. Useful in cases where a TO or THRU target is expected to be hit within a certain distance, but a miss might be quite large (the entire input.)
limit integer! | series!
limit 1000 to newline limit here thru "test"
Limits the lookahead scan to a given range. Tells the parser to force a failure if the index is greater or equal to the limit that has been set.
In the example above, the code scans forward looking for a new line, but if it's not found within 1000 characters, the code fails.
Limit could be used to handle situations where you would otherwise have to do a recursive call to parse within a production, or repeated calls to parse with more specific rules. Instead you would find the limit in one pass, backtrack with stay or fail, then do a more specific search within the limit.
Could make some programmers lazy.
/all by default
Suggested by: Carl, to much acclaim
Purpose, Importance: It's what people do the most anyways.
The behavior of string parsing without /all has been found to be so tricky that most experts don't use the default behavior except for by accident. This proposal will get rid of the old default that causes so much trouble, and let us propose a new option that works better.
We'll need to get rid of the (now unnecessary) /all refinement. The aforementioned new option will probably need to be implemented too.
/ignore stuff option
Suggested by: BrianH
Purpose: To simplify parsing by letting you specify stuff to ignore silently.
Importance: The old default string parse behavior was too tricky to use, but good in theory. It would be useful to be able to be more specific about what you want to ignore, and could be extended to block parsing too.
For string parsing, the stuff parameter could be one of a char! or bitset!, or a string! that would be treated like a parameter to make bitset!. For block parsing, stuff could be a datatype!, a typeset!, or a block of types treated like a parameter to make typeset!. If any of the stuff is specified in the parse rule operation currently being considered, then parse pays attention to it. Otherwise, if anything matching the stuff is found in the input it is skipped as if it isn't there.
Any stuff in the middle of a range to be copied with the copy operation will be copied - it doesn't completely disappear. The stuff is only ignored by the matcher. (This is where the discussion part comes in though.)
It might allow programmers to be lazy.
Here are some examples of the use of multiple proposals to show how they work together.
- Make directory tree in place (advanced). This uses USE, AND, CHANGE 2, INTO, and REVERSE rule.
use [r d res] [ parse res: read d: %./ r: [ use [ds f] [ any [ (ds: d) and [ set f into [to end reverse "/"] ( d: join d f f: read d ) change only -1 f ] into r (d: ds) | skip ] ] ] res ]
- Explained:
use [r d res] [ ; External words from standard USE statement ; r is the rule, d is the directory, res is the block returned by reading d. parse res: read d: %./ r: [ use [ds f] [ ; These words override any outer words. any [ ; Check for directory filename. (ds: d) ; This maintains a recursive directory stack. and [ ; Make the change in look-ahead. ; Set f to the filename if it is a directory else fail. ; You don't need to check for a file! - that's all READ returns. set f into [to end reverse "/"] ; string parsing ; f is a directory filename, so process it. ( d: join d f ; Add the directory name to the current path. f: read d ; Read the directory into a block. ) ; f is now a block of file! values. ; The position has advanced, so we are currently after the directory name. ; Change the previous value (the directory name) to the block, nested. change only -1 f ] ; Back in the same position as before the AT. ; We only get this far if the last rule succeeded and changed the value ; to a block, so we don't have to check for a block! type value. ; Now recurse into the new block. into r (d: ds) ; Pop the directory stack. ; Otherwise backtrack and skip. | skip ] ; end any ] ; end use ] ; end parse res ; This is the expanded directory block. ]


text:
You have
stories left before being redirected to Clickshare to login or register.
ACT test canceled
Friday, February 8, 2013
READING, Mass. — Due to the expected blizzard, the ACT Test that was scheduled at Austin Preparatory School in Reading for this Saturday, February 9 has been postponed to Saturday, February 16. |


text:
Enter your password here…
- new website
- Josh Berk's "Dark Days of Hamburger Halpin" audiobook session
- Larry Burton's "500 Miles of Highway" mastered
- Cristabelle Braden EP, "Harmony", released
- new Mad Conductor/Stupid Henchmen tune
- Listen to Scott Dunn's new tracks…
- Dan's House YouTube channel – Drumagog tutorial!
- listen to new songs
- chat feature added for clients
- "Infinite Alliance" is Mad Conductor + Stupid Stupid Henchmen
A smattering of styles! Check 'em out. Insomnia, newly mixed and mastered material from Bethlehem's indie Apostrophe S. Let It Show, blues, recently released from Midnight Shift. Chelsea Hotel - beautiful Leonard Cohen cover from Lewis & Clarke. Ha Gringo, original piece from jazz guitarist and Sinatra band alumnus Frank DiBussolo. G.N.A.R.S., ska/hip-hop collaboration from Mad Conductor & Danny Rebel & the KGB. Everything in Between old-fashioned ROCK, from The Feens. Jack Black, kick-ass southern rock from the Ric Toole Band, produced by Hughie Thomasson.ads
Clicking any ads above will lead you to websites not affiliated with Dan's House Studio.


text:
Honoring Long John Silver
"There's some people that you don't forget,
Even though you've only seen 'em one time or two
When the roses fade and I'm in the shade
I'll remember you"
— Bob Dylan
John Frank Stockman was a man who is not easily forgotten. The Marcus Hook native was a corporal in the Marines and perished in a helicopter crash on Nov. 18, 1970, during the Vietnam War.
Until recently, though, Stockman and his service to America had been mostly overlooked. Sure, his name is on the Vietnam Veterans Memorial in Washington, D.C., on Panel W6, Line 69.
But like the thousands of names on that wall, and the thousands more who returned home, there's a story. One of those Vietnam veterans who came home was Cliff Leonard, who lives in Jacksonville, Fla.
Leonard, who is retired, served in Vietnam during Stockman's first tour and knew him then. Leonard now makes sculptured busts of fallen war heroes. He started with veterans who had served in the Middle East.
When it came time to consider Vietnam veterans, Stockman was one of the first names Leonard considered. He likes to take the busts, which are made of clay and then painted in bronze, and present them to families as mementos. Continued...
While Stockman, who was 27 when he died, does have two sisters — Frances Howarth of Marcus Hook and Diana Ferguson in Louisiana — the current plan is to present the bust to Stockman's nephew, John Ferguson, who was named after Stockman.
John Stockman also had two children, Joseph A. and Magelia Marie, but John Ferguson said he has not been able to locate them and attempts by the Daily Times to locate Joseph A. Stockman were unsuccessful, as well.
While John Stockman's family life was somewhat cloudy, the kind of Marine he was came through clearly with descriptions by men who served with him in Vietnam.
"He and I had a lot of similar qualities," said Leonard, who served with Stockman in Vietnam in 1966 and 1967. "We were real easygoing and were good talkers. But we were serious out in the weeds. But he was well liked. You never like your officers and stuff, but all the grunts, as we called each other, were pretty close. There are a lot of people who are saying he was my best friend."
Stockman served three tours of duty in Vietnam, something almost unheard of back then. A 1961 Eddystone High School graduate, Stockman was recommended for the Navy Commendation Medal and the Purple Heart and his battalion was recommended for a Navy Unit Citation.
Stockman went on that third tour despite the urgings of his sister, Diana.
It was on that tour that began 42 years ago last Thursday that he was a part of the Marines' 1st Reconnaisance Battalion Unit.
Stockman was part of a seven-man group called Team Rush Act.
The group perished when the CH-46D helicopter lifting the group from a jungle on Quan Nam mountain in South Vietnam crashed, killing 15 in all, including everyone in Stockman's unit, the helicopter crew and Lt. Col. William Leftwich, the commanding officer of the 1st Reconnaisance Battalion.
Accounts of the accident say a major reason for the helicopter's crash was extremely poor visibility due to it being monsoon season. Usually, extractions of recon teams were not done under such conditions, but one of Team Rush Act's members, Doc Daniels, had suffered a broken leg and the team was calling for an emergency extraction. Continued...
One Marine familiar with what occurred during the accident is Dana Zuber, who was the radio operator for that battalion. He had trained the Team Rush Act radio operator, Gary Hudson, who perished in the accident, which was the third attempt to extract Team Rush Act.
"This has haunted me for so many years, that very well could have been me there," said Zuber, who lives in Las Vegas. "The pilot should have turned left, but he turned right. I think he got a bit of vertigo. The sun had recently set."
"To be in recon (or even the pilots who transported us) John Stockman had to be one tough SOB," said Chuck Fenwick, who was also in 1st Recon in Vietnam. "He thought in terms of 'we' instead 'me.' Most of the time when soldiers or Marines are surrounded and outgunned it is considered a bad day. In recon, if you are not surrounded and outgunned, then you are not in the right place. Sometimes, he would have to run for hours to keep from being overwhelmed by a superior force which had discovered him."
Stockman, also known as "Long John Silver" to his fellow Marines, was the patrol leader of Team Rush Act, a responsible position that required the trust of the men who were with him.
"He was a guy I looked up to," Zuber said. "He had a lot of time in the unit and a lot of time in the bush. He was a born leader. We all followed and all looked up to him. He had a good sense of humor and was very direct. He would believe in the task and get the task done.
"He was very professional in his nature. We felt confident with him when we went on patrol because he had a lot of experience. He was a natural teacher, too. There were a lot of scared young guys, and a guy like Stockman took you under his wing."
Part of being taken under Stockman's wing was enjoying the lighter moments he supplied back at the base, which was 22 miles from his final patrol. The intensity of spending days behind enemy lines, was often contrasted by Stockman with his practical jokes after they returned.
"You had to be quiet out in the bush," said Roy Rogers, who served with Stockman in 1967 and 1968. "You would have to do a lot of hand signals and stuff to communicate. Then when we would get back into our area, he would just turn crazy. Not in a bad way, but he would love to have fun."
According to those who knew him, Stockman would regularly lead a card game. He also was known for doing goofy things, like once shaving a cross into his hairy chest. Then before going on patrol, it was announced that if a patrol returned with an enemy soldier, they would get some rest and relaxation at China Beach. Stockman's patrol did just that, and along with the R&R, Stockman and the group celebrated by getting Mohawk haircuts.
"I was in a recon company and I think I was there before John got there," Rogers said. "He was in another platoon and transferred in. He was the life of the party after he showed up. I was a young kid and had never seen nothing like John Stockman." Continued...
John Ferguson suspects those personal connections made with the Marine Corps drew his uncle back to Vietnam. While Ferguson wasn't born until 1974, he does have several letters from Stockman that he has read.
"He was gung-ho and all about the Corps," Ferguson said. "He lived and breathed and died the Corps. He would do anything for anyone of those guys. That's why he went back. My mom said he was restless when he was home. He stayed with them between tours and she tried to talk him out of going back."
That Diana Ferguson was not able to do that remains, according to John Ferguson, one of her worst memories. But according to one expert, talking John Stockman out of going back to serve with his brothers in the Marines would have been next to impossible.
"In my opinion, he would not likely have changed his mind," said Frank Mancuso, a Marine and Vietnam veteran who is a licensed professional counselor at the Center for Christian Counseling and Relationship Development in Marlton, N.J. "After serving his country and his appetite, whatever that was, on his first tour, John knew what he was getting into.
"I spent time in foxholes with a couple of Marines who volunteered for a second and third tour of duty. Their stated reasoning was rank advancement and accompanying pay. But on the psych side of them and me, one is most alive when death is close by. Some of them have a thrill-seeking personality and combat can easily provide a series of thrills or highs."
Mancuso also pointed out that returning to what was once a normal lifestyle in the United States can be equally as difficult.
"It is one thing to go from barbecues to war, but it is another to go from war to barbecues," Mancuso said.
While John Ferguson is eager to have a bust of the uncle he never met, Mancuso said it may take an emotional adjustment for John Stockman's sisters to accept it, especially initially. Mancuso added that it may be helpful in the long-term. Leonard said he hopes to have the bust completed in September.
"Having a bust of the deceased family member will probably be met with quiet resistance, unless they are ready to make peace with it all," Mancuso said. "Perhaps in time, the family will find his representation an honor and tribute to his memory, as well as help them come to terms with a long-lived grief."
Local Guide
Business Name
Location, ST | website.com
Social Wire
National News Videos
- Chester in mourning after 11-year-old struck, killed (4319)
- Middletown pediatrician held for trial in shooting of former partner (3948)
- Jay Leno has fun with Daily Times headline on 'Tonight Show' (2032)
- Sound Off appearing in the June 19 Daily Times (1723)
- Woman hospitalized with stab wound following attack outside Upper Darby McDonald's (1212)
- Eagles' Jackson needs action to back talk (114)
- Freind: Americans are becoming prisoners to fear (11)
- Slain Prospect Park mom remembered as 'kind, loving person' (With Video Slideshow) (9)
- Upper Chichester eyeing cameras for Johnson Avenue trouble spot (8)
- Party on the 10th: Merion gives Golf View Road residents an easy excuse to have fun (8)
- Guest column: Sound therapy is one
of the most effective ways to treat tinnitus (7) - A day later, Merion proves just as tough for visitors (With Video) (6)
Recent Activity on Facebook
Blog Center
Heron's Nest
Phil Heron uses this site to turn back the curtain a bit on the great mystery involved in creating a newspaper and his other general thoughts on life and the news.
Rise and Shine
Your daily wake up call with updated traffic, weather and few fun things to get you through the morning.
C-City Blogger
Presenting Chester City's news and views to Delco Times web visitors who want to know more of what's going on in the City besides the stories they read in the paper.
Fun Things To Do With Kids In Delaware County
Promotes family friendly events and activities held in and around Delco on a weekly basis.
Cliff's Notes
Cliff Wilson served as chairman of the Delaware County Democratic Party for 16 years (1994-2010). He will write on politics and other issues he feels strongly about.
Animal Coalition of Delaware County
Offers timely health advice for pets, behavioral tricks of the trade, follow-up success stories, and more. Updated regularly by ACDC's all-volunteer staff that includes long-time foster parents and pet owners who have years of experience.
Media, PA News
Kent Davidson covers local politics, events, and goings-on in the borough of Media, PA.


text:
Montana Sky Lodge Package for 12 Travelers
6 nightsPackage for 12 includes:
- Exclusive use of Montana Sky Lodge
- 6 bedrooms, 4 full bathrooms, 2 half bathrooms, 3700 square feet
- 4 king beds, 1 queen bed, 1 double bed
- Full gourmet kitchen
- Grand fireplace, living and dining areas
- Theater and library room
- Great room/meditation room
- Sun porch (seasonal), outdoor balcony, and full wraparound deck
- Housekeeping service on one midweek day (4 hours)
Booking Conditions:
- Price does not include taxes or security deposit. Mandatory 7% tax and $500 refundable security deposit are payable to the lodge directly. Reservations are subject to weather conditions. Due to 7,000 foot elevation, severe weather conditions may make roads impassable.
Regular Price: | $4,000 |
Starting Bid: | $1,880 6 nights |
Buy Now: | $2,294 6 nights |
How Auctions Work
Watch how to video1 (888) 297-3299 (US & Canada) | +1 (310) 215-8060
Amenities, Activities, & Attractions
- Fishing
- Hiking
- Windsurfing
- Mountain Biking
- Stargazing
- Canoeing
- Nature Walks
- Yoga
- Fly Fishing
- Downhill Skiing
- Snowmobiling
- Ice Fishing
- White Water River Rafting
- Wildlife Viewing
- Trail Riding
- Cross Country Skiing
- Boating
- Snowboarding
In-Room Amenities
- Fully-Equipped Kitchen
- Private Decks
General Information
- 6 Bedrooms
- Dining Room
- Historic Sites
- Hot Springs
- Active & Adventure
- Family
- Ski & Snow
- Villas
- Private Estate
- Rating
- 1⊗
- 2⊗
- 3⊗
- 4⊗
- 5⊗
- Clear AllX
- Rating
- Show All
- 1
- 2
- 3
- 4
- 5
- Anonymous· 2 years ago
This lovely lodge allows you to take a deep breath of clear Montana air, eat marvelous home-cooked food, sink into the plush pillows, and deeply relax. I did some writing, some yoga, some walking, some visiting with the genuinely friendly owners and felt so refreshed, I didn't want to leave! I was invited as a guest and felt both comforted and relaxed the whole time I was there. Every room looks out on mountains, every window opens to the smell of pine and the sound of a rushing stream! Truly!
Anonymous· 2 years agoThe entire experience was incredible! The property owners offered exceptional hospitality and were available to direct us to local interests throughout our stay, which was very much appreciated. We were looking for a beautiful place to relax and rejuvenate for a few days. The lodge accommodations were clean, comfortable, cozy and intimate, and the ambiance had a warm inviting presence throughout. We immersed ourselves in the property and the amenities fit our needs perfectly. We enjoyed the state-of-the-art kitchen, where we spent many days preparing gourmet meals sharing in the dining experience with friends and indulging ourselves in the serene surroundings. I felt like I had truly been on the most relaxing vacation of my life, where I was able to cherish each moment of each day. We discovered a new vacation spot and we will definitely be back.
Anonymous· 3 years agoI had an opportunity to attend a pre-opening of Montana Sky Lodge in June. I have traveled extensively in my career and on holiday and I must say Montana Sky Lodge is simply a beautiful, charming, and very comfortable place to stay. The breakfast was amazing, so delicious and nutritious! The surrounding grounds reflect Montana at its best. I opened my window to breath the fresh Montana air and I fell to sleep listening to the gurgling of the nearby creek. Just awesome! The bedrooms and the bathrooms are so comfortable and beautifully appointed! The owners have exquisite taste and have spared no expense decorating the lodge to the nines! I highly recommend the lodge. Don't miss this unforgettable place and stay as long as you can! The area is rich with mining history and if you like to play golf the course in Anaconda is a destination golf course. Bottom line is Montana Sky Lodge is a five-star kinda place!
Contact Montana Sky Lodge
Book Direct: Montana Sky Lodge
1-888-869-9396 (US & Canada Toll Free)
Alert Me
Email me when a new vacation package becomes available for this property.
Montana Sky Lodge Map
211 Tippy Toe Trail, 59711, Anaconda, Montana Nearest Airport: BTMMontana Sky Lodge
Anaconda, MontanaBrilliant warm summers with lush forests beckoning to be explored, and crisp winter wonderlands in pristine colder months await in the serene seclusion of Montana Sky Lodge - an eco chic luxury getaway nestled in the mountains of Montana. On 40 acres near Anaconda - an area known as Big Sky Country - this private lodge elegantly blends modern comfort and luxury, and is "off the grid" as it is completely solar powered. Beautiful wood floors lead through the bright open living room, warmed by the fire, past the full gourmet kitchen, and onto cozy and comfortable bedrooms. Enjoy peace and quiet in the library room or theater, and stretch out under the sun on the expansive wraparound balcony, gazing out over the endless expanse of forest. With personal catering and maid service available, your days belong entirely to you, with the beauty of Montana and the intimate luxury of Montana Sky Lodge surrounding you.
Wake to the delightful aromas of a warm breakfast and hot coffee in the dining room, and then make your way to the third floor great room for a yoga session to clear your mind. Under the dazzling summer sun, venture out into Lost Creek State Park to hike verdant trails and discover fascinating wildlife. Take a mountain biking excursion or go horseback riding through the trails of Deerlodge National Forest, then enjoy a leisurely afternoon round of golf at scenic Old Works Golf Course or the 9-hole Anaconda Country Club. Boat and windsurf on Georgetown Lake, and when winter sets in head out for a day of exciting ice fishing. The alpine valleys of Mount Haggin Wildlife Management Area are perfect for cross country skiing, and take a day trip to nearby Philipsburg for endless fun at Discovery Basin Ski Area. With 67 runs, from novice to pro, on over 2,200 acres, you can ski, snowboard, and snowmobile from morning to dusk. Take to the huge skies in a hot air balloon, and travel over the breathtaking mountains and valleys in the evening, before relaxing fireside in the comforts of your lodge. At Montana Sky Lodge each day is this perfect, each night this beautiful, and each adventure truly this magical.