text:
Build an Eclipse development environment for Perl, Python, and PHP
Use the Dynamic Languages Toolkit (DLTK) to create your own IDE
Before you start
About this tutorial
This tutorial shows how Eclipse's Dynamic Languages Toolkit (DLTK) makes it possible to build development tools for scripting languages. In particular, it explains how to implement syntax coloring, user preferences, and interpreter integration in a plug-in-based project.
This tutorial explains—one step at a time—how to build a DLTK-based development environment. The discussion presents DLTK by focusing on a practical plug-in project based on the Octave numerical computation language. The topics covered include:
- Creating a plug-in project
- Configuring the editor and Eclipse DLTK text tools
- Adding classes to control syntax coloring in the text editor
- Enabling user preferences
- Integrating the script interpreter into the development environment
- Adding a custom console to communicate between the workbench and the interpreter
This tutorial is written for Java™ developers familiar with Eclipse and interested in building tools for dynamic languages, such as PHP, Tcl, Ruby, and Python. It assumes that you have a basic understanding of plug-ins and Eclipse-based development tools in general.
System requirements
To build the example project in this tutorial, you need a computer with an Eclipse installation (the examples in this tutorial use version 3.7 or later) and a current JRE. You must install a recent version of the DLTK, which we describe in the section "Install the DLTK." (See Related topics for links to download Eclipse.)
Introducing DLTK and the DLTK editor
Eclipse offers many capabilities for building custom development tools,
but they're not easy to use or understand. Many of the classes, such
TextEditor, require significant
configuration to work properly. In contrast, the DLTK provides a
prepackaged development environment that requires only minor tweaking
to be operational. Building a development tool with the DLTK is like
baking a cake from a mix: The output isn't completely original, but
you get a maximum of quality and reliability with a minimum of effort.
A second important difference between DLTK and Eclipse involves the
supported languages. Eclipse's build capabilities are based on
compiled languages like Java,
C, and
C++. The DLTK is geared toward dynamic
languages, which include scripting languages like PHP, Ruby,
and Tcl. Ideally, a development tool for these languages supports easy
integration of script interpreters, command evaluation on a
line-by-line basis, and the ability to enter commands at a console.
Eclipse doesn't provide these features, but the DLTK supports them
Install the DLTK
If you haven't installed the DLTK, do so now. Perform the following steps:
- Open Eclipse, then click Help > Install New Software.
- Select Indigo - http://download.eclipse.org/releases/indigo from the Work with list.
- Select the General Purpose Tools > Dynamic Languages Toolkit - Core Frameworks check box, then click Next.
- Click Next after reviewing the prerequisites that will also be installed.
- If you accept the license agreements, click Finish to install the plug-in.
- After installing the files, restart Eclipse.
The DLTK-based plug-in project: The Octave IDE
This tutorial does more than just discuss the DLTK and its features. It walks you through the steps of creating an DLTK-based IDE for the Octave scripting language. Octave is a GPL-licensed toolset for performing mathematical computation, particularly with matrices. Octave commands are easy to understand, and the language closely resembles that of the popular proprietary Matlab tool. You can download the example code from Download.
The Octave IDE you'll be building won't have all of Eclipse's bells and whistles, but you will be able to create Octave scripts (*.m files), edit them in a multifeatured text editor, run the Octave interpreter with the click of a button, and see the result displayed in the IDE's console. Figure 1 shows what the editor and console look like.
Figure 1. The Octave IDE
This tutorial explains the process of building the Octave IDE in four steps:
- Create the Octave editor and add features.
- Store and respond to user preferences.
- Integrate the Octave interpreter.
- Display the interpreter's output in the console.
The first task deals with the Octave script editor. There's a lot to learn about this subject, but before you start coding, let's take a step back and look at how DLTK editors work. Much of this discussion applies to all Eclipse text editors.
A high-level introduction to the DLTK text editor
At its most basic level, the DLTK text editor is just a regular SWT
StyledText widget with a lot of additional
capabilities. These capabilities fall into one of two categories:
- Responding to user events. Changing the editor's display according to the user's keystrokes
- File I/O. Transferring character data between the IDE and files on the user's system
In DLTK editors, event handling is managed by a
ScriptSourceViewer object. This object,
created by the
ScriptEditor, wraps around
StyledText widget and manages its
response to user keystrokes. Typically, this response involves
modifying the widget's presentation or updating the editor's internal
data. This data is embodied in an
object, which not only stores text but also information related to
line numbers, positions, and regions, called partitions.
ScriptSourceViewer updates the
IDocument by accessing an object called a
SourceModuleDocumentProvider. In addition
to providing access to the
IDocument, this
object handles file operations. DLTK handles all the editor's file
interactions for you, but if you're interested in learning more, read
the documentation on the object's superclass:
If you're familiar with the MVC pattern, the relationship between the
IDocument, and
StyledText widget should be clear. The
IDocument serves as the editor's Model
aspect, containing data independent of its presentation. The
StyledText widget represents the editor's
View aspect, and the
serves as the Controller, managing communication among the Model, the
View, and the user. Figure 2 shows this
Figure 2. Primary elements of the DLTK editor
If the explanation thus far makes sense and Figure 2 seems reasonable, you should have no difficulty understanding the technical discussion that follows. In the next section, you start creating the Octave plug-in.
Getting started with a DLTK project
For the sake of simplicity, this tutorial integrates all the Octave IDE functionality into a single plug-in. Generally, you implement a feature using multiple plug-ins: one containing core classes, one containing UI classes, one containing debug classes, and so on. But this tutorial's code only needs one plug-in, so if you have Eclipse running, click File > New > Project, select the Plug-in Project option, and click Next to begin creating the plug-in project. Follow the steps here to create a plug-in project that includes a sample editor, which is a good starting point for your new plug-in.
- Enter the project name, which in this example is
org.dworks.octaveide, as shown in Figure 3.
Figure 3. Entering the project's name
- In the Content screen, shown in Figure 4, enter
org.dworks.ocativeideas the ID if it's not already set, and click Next.
Figure 4. The Content screen
- Select the Create a plug-in using one of the templates check box, select Plug-in with an editor from the list, and click Next.
- Enter
OctiveEditor, as shown in Figure 5, enter
mfor the File Extension, and then click Finish to create your plug-in project.
Figure 5. Entering the information for the editor
Your new plug-in project is created with the plugin.xml configuration file already available in your project, and you're off to a good start. You can edit the plugin.xml configuration using the built-in editor, or you can edit the source of the file directly by clicking the editor's plugin.xml tab. This tutorial shows you the listing of the plugin.xml file itself.
Before continuing with the rest of the tutorial, you should add two
dependencies that allow your plug-in code to find the DLTK classes. In
the Dependencies tab of your plugin.xml editor, click
Add, and add
org.eclipse.dltk.core and
org.eclipse.dltk.ui. The current version in
this tutorial is 3.0.1.
Configure the Octave plug-in
The plugin.xml file that was started when you created your plug-in project contains information about the plug-in's extensions. These extensions tell Eclipse how the plug-in intends to contribute to the workbench. To start, the plugin.xml file needs two simple extensions: one that identifies the Octave editor and one that identifies the types of files to be edited. The first extension was already created when you created the plug-in project using the template.
Listing 1 presents the first extension, which defines characteristics of the Octave editor.
Listing 1. The Octave IDE editor extension
<extension point="org.eclipse.ui.editors"> <editor id="org.dworks.octaveide.editor.OctaveEditor" class="org.dworks.octaveide.editor.OctaveEditor" contributorClass="org.dworks.octaveide.actions.OctaveActionContributor" default="true" icon="icons/oct.gif" name="OctaveEditor"> <contentTypeBinding contentTypeId="org.dworks.octaveide.octaveContentType"> </contentTypeBinding> </editor> </extension>
This extension contains several important attributes. The
class attribute defines the primary class
that embodies the editor:
which you will create shortly. The
contributorClass attribute identifies the
class that provides actions for the editor. And the
default attribute states that the
OctaveEditor should be the default editor
for associated files. The
name attribute
identifies the text that will be displayed for the editor. As defined
in the plugin.properties file, the
OctaveEditor.name property corresponds to
"Octave Script Editor."
The last supplement in the extension,
contentTypeBinding, requires explanation.
Eclipse maintains a registry of content types that represent file
formats and naming conventions. By adding a
contentTypeBinding element to the editor's
extension, you can associate the editor with file suffixes, file
names, and even file aliases. But for your Octave editor, you're only
interested in *.m files, so your extension of
org.eclipse.core.runtime.contentTypes is
simple. Listing 2 shows this second extension.
Listing 2. The Octave IDE ContentType extension
<extension point="org.eclipse.core.runtime.contentTypes"> <content-type id="org.dworks.octaveide.octaveContentType" base-type="org.eclipse.core.runtime.text" file-extensions="m" name="%octaveContentType" priority="high"> </content-type> </extension>
Many more attributes are available for customizing content types, but
this declaration identifies the
content type as being text based and associated with the file suffix
.m. The
priority attribute
states that if a file becomes associated with multiple content types,
this type should be given high priority.
Creating a DLTK language toolkit class
A principal advantage of using the DLTK is that it's simple to
customize how IDEs work. This customization is made possible through
DLTK's language toolkit interfaces
IDLTKUILanguageToolkit, and so on). These
interfaces present methods that, when implemented, configure many
aspects of the IDE, such as parsing, color usage, user preferences,
and accessing the interpreter.
This tutorial focuses primarily on the DLTK UI, so you'll only concern
yourself with the
The methods in this interface perform one of two functions: They
either return a class that handles editor configuration or provide the
ID of a configuration object declared in plugin.xml. Seven of these
methods are listed here in Table 1.
Table 1. Methods on the IDLTKUILanguageToolkit interface
|Method name
getEditorId(Object elementID)
|Returns the editor's ID
|Returns the
ScriptTextTools object
that will customize how text is presented in the editor
|Returns the
object that will configure the operation of the editor's
source viewer
|Returns the
IPreferenceStore object
that contains user settings
|Returns the IDs of the preference pages related to editor settings
|Returns the IDs of the preference pages related to the script interpreter
|Returns the ID of the script interpreter
In the example code, the
OctaveUILanguageToolkit class fleshes out
these methods with objects and identifiers. The first two objects
discussed relate to the first two methods in the toolkit:
OctaveEditor and
Create the Octave editor and the Octave text tools
Now that you've configured the editor's extension, the first order of
business is to create the
Thanks to the DLTK, it won't require much coding: The DLTK's
ScriptEditor class (the superclass of
OctaveEditor) handles most of the editor's
operations on your behalf. All you need are a few configuration
methods. In the
OctaveEditor, the most
important of these is
getTextTools(), which
returns a
ScriptTextTools object.
ScriptTextTools class is convenient.
This central class accesses several other classes that provide the
editor's capabilities. By subclassing
ScriptTextTools, an editor can customize
how these capabilities are performed. The Octave editor creates a
subclass called
OctaveTextTools, which
provides access to the important objects shown in Table 2.
Table 2. Objects made available by OctaveTextTools
|Reads the editor text and determines partition boundaries
|Configures the
and the way it responds to user-generated events
These objects become particularly important in implementing syntax coloring—that is, changing the color of text depending on the text's syntactic function in code. The next topic explains this feature in greater detail.
Syntax coloring in a DLTK editor
Syntax coloring is one of the most noticeable aspects of any professional source code editor. Not only do the colors make the code easier to read, but they also make typing errors readily apparent. Figure 6 shows how comments, numbers, keywords, and strings are colored differently from regular code.
Figure 6. Syntax coloring in the Octave IDE
Configure syntax coloring in the Octave editor
The DLTK process of syntax coloring consists of four steps:
- The
ScriptSourceViewerresponds to keystrokes by alerting the document's partitioner.
- The partitioner splits the document's text into partitions according to rules.
- When the partitioning is finished, the viewer alerts a presentation reconciler to analyze the modified partition.
- The reconciler calls upon a damager/repairer to analyze the affected region and apply syntax coloring.
In this manner, the editor uses a divide-and-conquer strategy to color text. First, it splits the document into partitions. Then, it analyzes the modified partition and determines whether and where syntax coloring should be updated. The next two sections explain this process in greater depth and show how to implement them in the Octave IDE.
Document partitioning
In addition to text, an
IDocument stores an
array of
Positions that serve as boundaries
of regions within text. These regions not only make syntax coloring
possible (comments one color, code another color) but also let you
apply different tools to different parts of the text. For example,
there's no reason to tell your script parser to analyze commented
lines. Using partitions, you can make sure your parser only operates
on regions containing actual code.
Document partitioning is accomplished by two central objects: one that
IDocumentPartitioner and one
that implements
IPartitionTokenScanner. The
partitioner delivers text to the scanner, which analyzes the text and
ITokens. The partitioner uses
these tokens to set
Positions within the
It would be nice if the
automatically initialized the partitioner and scanner whenever the
user opens an *.m file. But the document's configuration must be
explicitly defined in plugin.xml with an extension of the
extension point. This extension identifies the class that should be
called on to configure the document during its initialization. Listing 3 presents the extension defined for the
Octave IDE plug-in.
Listing 3. Configuring the document
<extension point="org.eclipse.core.filebuffers.documentSetup"> id="org.dworks.octaveide.editor.OctaveDocumentSetup" name="%documentSetupName" <participant extensions="m" class="org.dworks.octaveide.editor.OctaveDocumentSetup"> </participant> </extension>
OctaveDocumentSetup calls on the DLTK
ScriptTextTools object to initialize *.m
documents. By default, this creates a
FastPartitioner to serve as the document's
Each DLTK editor has to create its own
IPartitionTokenScanner object to read
characters and produce tokens corresponding to partitions. For
example, if you want to create a partition for text starting with
/* and ending with
*/, you need to configure the scanner so
that it forms the appropriate token when it encounters this text
pattern. Table 3 lists how the Octave plug-in
divides text into three partitions.
Table 3. Partitions into which the Octave plug-in divides text
|Identified by
OCTAVE_COMMENT, which
|Identified by
OCTAVE_STRING, which
|Regular script code
|Identified by
which equals
These partitions are defined in the
IOctavePartititons interface. They are used
to initialize the
FastPartitioner, which
sends them on to the partition scanner.
Partitions in the Octave editor can be identified using a set of
logical rules, so your
OctavePartitionScanner will extend the
RuleBasedPartitionScanner class. The most
important method in this class is
setPartitionRules, which accepts an array
IPredicateRule objects. The goal of a
rule is to convert sections of text into
ITokens. Rules can be difficult to code
from scratch, but thankfully, Eclipse provides many useful
implementations of the
interface. The Octave IDE uses two of them to recognize partitions:
SingleLineRule and
MultiLineRule. Both classes have similar
constructors, and they are initialized with the following information
(at least):
- The character that begins the partition
- The character that ends the partition
- The
ITokencorresponding to the recognized partition
For example, say you want to create a rule that produces a string token
when it finds text starting and ending with a single quotation mark
'). You do this with the following code:
IToken stringToken = new Token(OctavePartitions.OCTAVE_STRING); new SingleLineRule("'", "'", stringToken, '\\');
Listing 4 presents the entire code that
OctavePartitionScanner uses to detect
partitions in Octave scripts. The Octave editor creates comment
partitions when it encounters text preceded by a percent sign
%) and followed by a new line. String
partitions are delimited by single quotation marks.
Listing 4. The Octave IDE partition scanner
// Declare the different tokens IToken string = new Token(IOctavePartitions.OCTAVE_STRING); IToken comment = new Token(IOctavePartitions.OCTAVE_COMMENT); // Create the list of rules that produce tokens List<IPredicateRule> rules = new ArrayList<IPredicateRule>(); rules.add(new SingleLineRule("%", "\n", comment)); rules.add(new SingleLineRule("'", "'", string)); IPredicateRule[] result = new IPredicateRule[rules.size()]; rules.toArray(result); setPredicateRules(result);
Having created the
and initialized its rules, you've finished configuring the editor's
partitioning. The next step is to tell the editor how to scan and
color text inside the partitions.
Scan text inside partitions
As mentioned, DLTK editors rely on a
ScriptSourceViewer to respond to user
events like keystrokes. You can tailor the viewer's operation with a
ScriptSourceViewerConfiguration object.
Like the
ScriptTextTools class, the
configuration object does little work of its own. Instead, its methods
identify classes that assist the source viewer's operation. When it
comes to syntax coloring, two of the most important of these
"assistance" methods are shown here in Table 4.
Table 4. Assistance methods for syntax coloring
|Method name
|Returns an
that controls how text is presented when changes occur
|Returns an array of
AbstractScriptScanners that perform
the same type of text scanning as the
described earlier
These two methods are closely related. The following discussion explains how the Octave IDE implements them to provide text coloring.
The IPresentationReconciler
In Eclipse parlance, a reconciler is an object that keeps
track of a document's content and responds to changes. A
presentation reconciler is a reconciler that responds to
document changes by altering how text is presented. Specifically, the
IPresentationReconciler responds to changes
by calling on the objects shown in Table 5.
Table 5. Objects used by IPresentationReconciler
|Object name
|Determines the extent of the document modification
|Creates a
TextPresentation object
to respond to the modification identified by the
These two objects operate in sequence. When the user modifies text in a
partition, the
gives the partition name to the
IPresentationDamager. After the damager
identifies the modified region, the
IPresentationRepairer analyzes the region
to see if, where, and how the partition's text presentation should be
To keep matters simple, Eclipse provides a
DefaultDamagerRepairer that serves as
damager and repairer. The Octave IDE constructs a
DefaultDamagerRepairer for each of the
three partitions and initializes each with a different scanner. This
reconciler is shown in Listing 5.
Listing 5. Configuring the presentation reconciler
// Create a DefaultDamagerRepairer for the default partition (code) DefaultDamagerRepairer dr = new DefaultDamagerRepairer(codeScanner); reconciler.setDamager(dr, IDocument.DEFAULT_CONTENT_TYPE); reconciler.setRepairer(dr, IDocument.DEFAULT_CONTENT_TYPE); // Create a DefaultDamagerRepairer for string partitions dr = new DefaultDamagerRepairer(stringScanner); reconciler.setDamager(dr, OctavePartitions.OCTAVE_STRING); reconciler.setRepairer(dr, OctavePartitions.OCTAVE_STRING); // Create a DefaultDamagerRepairer for comment partitions dr = new DefaultDamagerRepairer(commentScanner); reconciler.setDamager(dr, OctavePartitions.OCTAVE_COMMENT); reconciler.setRepairer(dr, OctavePartitions.OCTAVE_COMMENT);
Just as the partition scanner identifies partitions using rules, each of these scanners creates tokens according to similar rules. The next section discusses text scanners in detail.
Scanning text inside partitions
The constructor of the
ScriptSourceViewerConfiguration calls
initializeScanners() to create the scanners
needed to analyze text. Listing 6 presents the
full implementation of
in the
Listing 6. Creating the script scanners
private AbstractScriptScanner codeScanner, stringScanner, commentScanner; protected void initializeScanners() { // Create a scanner for the script code codeScanner = new OctaveCodeScanner(getColorManager(), fPreferenceStore); // Create a scanner for string partitions stringScanner = new SingleTokenScriptScanner(getColorManager(), fPreferenceStore, IOctavePartitions.OCTAVE_STRING); // Create a scanner for comment partitions commentScanner = new SingleTokenScriptScanner(getColorManager(), fPreferenceStore, IOctavePartitions.OCTAVE_COMMENT); }
Because the partition scanner already identified strings and comments,
these partitions don't need to be reanalyzed. This is why the
stringScanner and
commentScanner are both
SingleTokenScriptScanners. This class
doesn't make decisions based on rules but always returns the same type
IToken. For example, the
stringScanner returns a token initialized
OctavePartitions.OCTAVE_STRING, and
commentScanner returns a token
initialized with
OctavePartitions.OCTAVE_COMMENT. You'll see
how these token properties determine text color shortly.
codeScanner is more involved and
performs the brunt of the IDE's text analysis. This scanner is an
OctaveCodeScanner and, like the
PartitionTokenScanner, creates tokens based
on rules. But instead of the
SingleLineRule, it relies on the
IRule implementations shown in Table 6.
Table 6. IRule implementations used by OctaveCodeScanner
|Returns a token when the scanner encounters specific words
|Returns a token when the scanner encounters numbers
These rules are created in the
method of the
OctaveCodeScanner. Listing 7 presents this method in full.
Listing 7. Creating the script scanners
protected List<IRule> createRules() { // Create tokens IToken keywordToken = getToken(DLTKColorConstants.DLTK_KEYWORD); IToken numberToken = getToken(DLTKColorConstants.DLTK_NUMBER); IToken defaultToken = getToken(DLTKColorConstants.DLTK_DEFAULT); // Create and populate list List<IRule> ruleList = new ArrayList<IRule>(); // Create word rule to detect keywords WordRule wordRule = new WordRule(new OctaveWordDetector(), defaultToken); for (int i = 0; i < IOctaveKeywords.keywords.length; i++) wordRule.addWord(IOctaveKeywords.keywords[i], keywordToken); ruleList.add(wordRule); // Create number rule to detect numbers NumberRule numberRule = new NumberRule(numberToken); ruleList.add(numberRule); // Set the token returned for default text setDefaultReturnToken(defaultToken); return ruleList; }
It's important to distinguish the tokens created in Listing 7 from
those created in Listing 4. The
Token constructor accepts any
Object as its argument, and this
Object tells the token's recipient what
action to take. In Listing 4,
Tokens are initialized with partition names
that tell the
FastPartitioner how to update
the document's partitioning. In Listing 7,
Tokens are initialized with
TextPresentation objects, which tell the
IDE how to present text in the editor.
Listing 7 calls
getToken to associate each
Token with a
TextPresentation. This method searches
through a
Map populated with the user's
preferences. To understand how this map is updated, it's important to
understand how DLTK preferences work. This is the subject of the
following discussion.
Configuring DLTK preferences
The previous discussion showed how text presentation depends on the user's preferences. Now, we will go farther, showing how to create pages that receive the user's preferences. You can access these preferences by clicking Window > Preferences in Eclipse. At the conclusion of this discussion, we explain how the user's preferences make it possible to integrate the script interpreter into the IDE.
Preference stores
An Eclipse preference store is like a property file: It contains name-value pairs that identify the user's preferred settings. But there are two important differences. Each preference holds a default value in addition to its current value, and preference values must take one of six basic types:
Preferences are stored and retrieved by calling methods defined by the
IPreferenceStore interface. The
setValue and
setDefaultValue methods add and update
preferences. To retrieve a preference value, you can call one of
getDouble, or
getString. Similar methods access default
values, such as
To access preferences related to SWT objects (more particularly,
FontData, and
FontData[] objects), you can call methods
in the
PreferenceConverter class.
During initialization, a DLTK
creates an
ArrayList of four
IPreferenceStore objects:
- The
ScopedPreferenceStorecreated for the Octave plug-in (org.dworks.octaveide)
- The
ScopedPreferenceStorecreated for the Eclipse text editor plug-in (org.eclipse.ui.editors.text)
- An
EclipsePreferencesAdapterthat provides preferences related to the project containing the script being edited
PreferencesAdapterthat contains the preferences associated with the DLTK core
These stores are combined into a
ChainedPreferenceStore. If two or more
preference stores contain identical preferences, the value is supplied
by the store that added first.
Initialize preferences
Eclipse makes it possible to set preferences during initialization with
the extension point
org.eclipse.core.runtime.preferences. The
Octave IDE extends this point and identifies the
OctavePreferenceInitializer class as
providing default values for the IDE's preferences, which in turn
extends the abstract class
AbstractPreferenceInitializer, whose only
required method is
initializeDefaultPreferences. The IDE
invokes this method during initialization, and Listing 8 shows how it's implemented in code.
Listing 8. Initializing default preferences
public void initializeDefaultPreferences() { IPreferenceStore store = OctavePlugin.getDefault().getPreferenceStore(); OctavePreferenceConstants.initializeDefaultValues(store); }
This simple routine accesses the Octave plug-in's preference store and
calls on the
class to initialize the store's values. This is a subclass of DLTK's
PreferenceConstants class, which defines
and initializes a wide range of general scripting preferences. In this
tutorial, the only preferences that will be initialized are those
dealing with syntax coloring. Listing 9 shows how
this initialization is accomplished.
Listing 9. Setting syntax-coloring preferences
public static void initializeDefaultValues(IPreferenceStore store) { // Set default preferences for the editor PreferenceConstants.initializeDefaultValues(store); // Make keywords blue and bold PreferenceConverter.setDefault(store, DLTKColorConstants.DLTK_KEYWORD, new RGB(40, 0, 200)); store.setDefault(DLTKColorConstants.DLTK_KEYWORD + PreferenceConstants.EDITOR_BOLD_SUFFIX, true); // Set default values for other preferences PreferenceConverter.setDefault(store, DLTKColorConstants.DLTK_SINGLE_LINE_COMMENT, new RGB(25, 200, 25)); PreferenceConverter.setDefault(store, DLTKColorConstants.DLTK_NUMBER, new RGB(255, 25, 25)); PreferenceConverter.setDefault(store, DLTKColorConstants.DLTK_STRING, new RGB(50, 100, 100)); }
The first of the Octave-specific preferences deals with keywords. The
code configures both the color and the style (bold, italics,
strikethrough) of keywords in the IDE and requires two steps. First,
PreferenceConverter is called on to
with blue. Next, the
method associates
DLTKColorConstants.DLTK_KEYWORD +
true. These two lines ensure that if
Token is initialized with
DLTKColorConstants.DLTK_KEYWORD, the
corresponding text is displayed in blue and boldface.
Preference pages and configuration blocks
Now that you understand how to initialize preferences, it's important to give users the opportunity to configure preferences themselves. Eclipse makes this possible through preference pages. DLTK simplifies the process of constructing these pages with objects called configuration blocks. This section describes both of these classes and how they work together to provide user preferences in the Octave IDE.
Eclipse preference pages
When you click Window > Preferences in Eclipse, the
left pane of the Preferences window presents a
hierarchy of user-configurable options. For the Octave IDE, you want a
top-level preference called
Octave, with
sub-preferences for syntax coloring and the Octave interpreter. Figure 7 shows what this window should look like.
Figure 7. The Octave Preferences window
In the Octave project, plugin.xml defines three preference topics by
extending the point
org.eclipse.ui.preferencePages. Each
extension requires
name, and
attributes. The two sub-preferences have an additional
names the
id of the parent preference.
These extensions are shown in Listing 10.
Listing 10. Octave preference extensions
<extension point="org.eclipse.ui.preferencePages"> <page class="org.dworks.octaveide.preferences.OctaveMainPreferencePage" id="org.dworks.octaveide.preferences.OctaveMainPreferencePage" name="%MainPreferencePage.name"/> <page category="org.dworks.octaveide.preferences.OctaveMainPreferencePage" class="org.dworks.octaveide.preferences.OctaveSyntaxColorPage" id="org.dworks.octaveide.preferences.OctaveSyntaxColorPage" name="%SyntaxColorPreferencePage.name"/> <page category="org.dworks.octaveide.preferences.OctaveMainPreferencePage" class="org.dworks.octaveide.preferences.OctaveInterpreterPreferencePage" id="org.dworks.octaveide.preferences.OctaveInterpreterPreferencePage" name="%InterpreterPreferencePage.name"/> </extension>
class attribute names a class that
IWorkbenchPreferencePage, a
subinterface of
IPreferencePage. DLTK
provides its own implementation of
IWorkbenchPreferencePage called
DLTK also provides several subclasses for specific purposes. These
class-interface relationships are depicted in Figure
Figure 8. Preference page class hierarchy
The three classes in Listing 10 are all direct subclasses of
If you look through their Java files, you'll see they don't contain
much code. Each class provides an ID, a label, and access to the
plug-in's preference store. Further, every
must implement the method
createConfigurationBlock(), which
constructs the object that provides the page's graphical aspect. This
object must implement the DLTK interface
IPreferenceConfigurationBlock. This
important interface is discussed next.
DLTK configuration blocks
When it comes to presenting IDE preferences, the hardest part is
building the UI. For example, the Octave syntax-coloring preference
page not only allows the user to choose text colors and styles, it
also provides an embedded text editor that shows how the styling
actually looks. Creating these graphical controls from scratch can be
time-consuming, but DLTK's
IPreferenceConfigurationBlocks make your
life much easier. Figure 9 shows what the
configuration block class hierarchy looks like.
Figure 9. Configuration block class hierarchy
The syntax-coloring configuration block
The first class of interest is
which was created specifically for providing the user with
syntax-coloring preferences. The
createSyntaxPage method performs the main
work, which is to create the graphical preference page. More
specifically, it forms a
TreeViewer that
displays the different syntax types and a set of buttons that
represent color and style preferences. Then, it calls
createPreviewer to build the embedded text
The Octave plug-in code contains a subclass of
Besides the constructor, the methods listed in Table
7 are implemented.
Table 7. The methods implemented by OctaveSyntaxColorConfigurationBlock
|Method name
|Returns a viewer to wrap around the embedded text editor
|Returns a basic object to configure the viewer in the embedded text editor
|Calls on an
IDocumentSetupParticipant to set up
the partitioning of the document
|Returns a 2D array that identifies the different types of syntax that can be colored and the corresponding key in the preference store
The first three methods are straightforward, because the embedded text
editor doesn't need a complicated viewer, viewer configuration object,
or document setup participant. However, the last method,
getSyntaxColorListModel, requires
explanation. This method provides a 2D array whose elements correspond
to the syntax types in the page's
TreeViewer. Each element requires three
pieces of information: a name, a category, and a corresponding key in
the page's preference store.
Going back to the example, Figure 10 shows that
the Octave syntax color model consists of four different syntax types:
keywords, numbers, strings, and single-line comments. The first three
types fall under the
General heading, while
the last type falls under the
heading. The code in Listing 11 shows how these
types are configured in
Listing 11. Creating the syntax color list model
protected String[][] getSyntaxColorListModel() { return new String[][] { { "Single-Line Comments", DLTKColorConstants.DLTK_SINGLE_LINE_COMMENT, sCommentsCategory }, { "Keywords", DLTKColorConstants.DLTK_KEYWORD, sCoreCategory }, { "Strings", DLTKColorConstants.DLTK_STRING, sCoreCategory }, { "Numbers", DLTKColorConstants.DLTK_NUMBER, sCoreCategory }}; }
When the user changes a preference setting in the page and clicks OK, the page updates the corresponding value in the preference store. The editor responds to the preference change by updating the presentation of its text.
Interpreter preferences
The last preference option in Figure 10 provides
settings for the IDE's script interpreter. DLTK provides two classes
that make this possible:
ScriptInterpreterPreferencePage and
InterpretersBlock. The
InterpretersBlock creates the page's
graphical control, which consists of a
Label that provides instructions; a
CheckboxTableViewer that lists available
interpreters; and a series of buttons that allow the user to add,
edit, copy, remove, or search for interpreters. Figure 10 shows what
this page looks like along with the window that appears when the user
clicks Add.
Figure 10. The interpreter preference page and window
The abstract class
requires that subclasses implement two methods:
getCurrentNature and
createInterpreterDialog. The first method
returns a
String that represents the
interpreter, the source code language, and other associated objects.
This nature is frequently identified in DLTK extension points, and
it's important. If your Eclipse installation contains multiple
DLTK-based features for different dynamic languages, you can easily
distinguish them by their natures.
The second method,
forms the window that appears when the user clicks
Add on the preference page. This window, shown in
Figure 10, must furnish at least four pieces
of information: the location of the interpreter executable, its name,
its type, and the location of any libraries it requires to execute. To
form this window, the
createInterpreterDialog method requires an
instance of the DLTK class
AddScriptInterpreterDialog constructor
accepts an array of interpreter types and an object that implements
IInterpreterInstall. Having multiple
interpreter types allows the IDE to support multiple interpreters for
the same language. The Octave IDE only supports one installation type,
and it's identified in plugin.xml with an extension of
These preference extensions are shown in Listing
Listing 12. Octave preference extensions
<extension point="org.eclipse.dltk.launching.interpreterInstallTypes"> <interpreterInstallType class="org.dworks.octaveide.launch.OctaveInterpreterInstallType" id="org.dworks.octaveide.launch.OctaveInterpreterInstallType"> </interpreterInstallType> </extension>
class attribute identifies an object
that implements
Each installation type is given a name, an ID, a nature (a
String that identifies the interpreter and
source type), and the locations of the interpreter and any required
libraries. In addition, each
IInterpreterInstallType must create one or
IInterpreterInstall objects.
Although an
IInterpreterInstallType object
defines a class of interpreter installations, an
IInterpreterInstall object must be created
for each particular installation. This object serves as the
interpreter's primary data storage object, and it holds the
information in Table 8.
Table 8. The data stored by IInterpreterInstall
|A label for the interpreter installation
|A logical identifier for the interpreter installation
|A logical identifier for the IDE (interpreter, source files, and so on)
|Installation location
|The path to the installation of the interpreter
|Library locations
|Paths to the interpreter's required libraries
|Execution environment
|Environment variables and process configuration
|Interpreter arguments
|Parameters directed to the interpreter
Finally, each
IInterpreterInstall must
provide access to an
object. This object is responsible for actually starting the
interpreter, and the following discussion explains not only how it
works but how it fits into the interpreter-IDE interaction as a whole.
The DLTK interpreter and console
The most important feature of a DLTK application isn't the text editor or preferences but the ability to launch an interpreter with a button click and view its output in the IDE console. The DLTK interpreter and console are closely entwined, and managing them in code is a complicated process. Before delving into all the classes and interfaces, here's a high-level look at the events that take place when the user clicks Run:
- The IDE responds to the button click by creating a launch object, collecting launch information, and adding a process to the launch.
- The creation of the launch notifies all launch listeners, including the DLTK console manager.
- The console manager acquires the launch information and uses it to create three objects: a console server, an interpreter object, and a console factory.
- The console server creates a socket (by default, port 25000) and waits for incoming connections.
- The console factory starts the interpreter and creates a console.
- The console manager accesses the Eclipse Console plug-in and adds the new console.
DLTK classes handle much of this processing, but you still have to create many of your own. The Octave IDE needs to support Octave-related launches, then it needs Octave-specific classes to manage the console and interpreter. This discussion presents each of these subjects in turn.
Configure the DLTK launch
In Eclipse, the process of starting an application is called launching the application in Run mode. Because Eclipse supports many launching executables, you must make sure that the Octave interpreter launches when the user executes an Octave script. This association is made through launch configuration types, and you can see the available types in the Run window by clicking Run > Run in Eclipse. Figure 11 shows what launch configuration types looks like.
Figure 11. The Octave launch configuration type
To create a launch configuration type for Octave, the first step is to
add an extension of the
to plugin.xml. In Figure 11, you can see the Octave configuration type
selected in the window. Listing 13 presents the
extension that defines this new type.
Listing 13. Defining the Octave launch configuration type
<extension point="org.eclipse.debug.core.launchConfigurationTypes"> <launchConfigurationType id="org.dworks.octaveide.launch.OctaveLaunchConfigurationType" delegate="org.dworks.octaveide.launch.OctaveLaunchConfigurationDelegate" modes="run" public="true" name="%OctaveLaunchConfigurationType.name" </launchConfigurationType> </extension>
The example project executes Octave scripts but doesn't debug them.
Therefore, the
modes attribute is set to
run but not
run,debug. The most important attribute is
delegate, which identifies a class that
This interface defines a single method,
launch, which is called when the user
creates a launch configuration and clicks Run.
DLTK provides its own implementation of
ILaunchConfigurationDelegate called
When this class's
launch method is invoked,
it calls the methods listed in Table 9.
Table 9. The methods called during AbstractScriptLaunchConfigurationDelegate.launch()
|This method constructs an
InterpreterConfig object that
receives all the information from the launch configuration.
|This method accesses the
IInterpreterInstall object created
by the interpreter installation type and uses it to form an
|This method creates a process for the interpreter and adds it to the launch.
This process may sound complicated, but the first two methods simply
organize information about the launch; the
InterpreterConfig holds information taken
from the launch configuration, and the
IInterpreterInstall stores information
taken from the preferences. It's important to understand that the
third method does not actually start the interpreter. It
creates an
IProcess for the interpreter and
adds it to the
Launch object.
The DLTK console manager
When the DLTK plug-in
org.eclipse.dltk.console.ui starts, it
accesses the Eclipse Debug UI plug-in and adds an instance of
ScriptConsoleManager as a launch listener.
These listeners are notified whenever a launch is added, changed, or
removed. The
ScriptConsoleManager only
responds to added launches, and its first task is to check whether the
launch has a recognizable script nature. If so, the manager creates
three important objects: a console server, an interpreter object, and
a console factory.
The manager creates a
ScriptConsoleServer to
manage communication between the interpreter and the console. During
its initialization, the server binds a
ServerSocket to port 25000 and tells it to
wait for incoming connection requests. These requests are embodied by
ConsoleRequest objects, and as the server
receives new requests, it calls the
consoleConnected method of each.
After creating the server, the
ScriptConsoleManager accesses a
ConsoleRequest representing the
interpreter. It does this by searching for an extension of the point
in plugin.xml. This extension point identifies a nature designation
and a class that implements
IScriptInterpreter, a subinterface of
ConsoleRequest. After it obtains the server
and interpreter object, the console manager can start creating the
console. To do this, it calls upon a console factory.
The console factory and the console
Ordinarily, if you want to access an Eclipse console from a plug-in,
you need only extend one extension point:
This extension must identify a class that implements
IConsoleFactory. Then, when the user clicks
Open Console in the Console view, Eclipse calls
the class's
openConsole method to create a
new console.
DLTK makes things slightly more complicated. The DLTK
ScriptConsoleManager also needs to access a
console factory, but it requires a class that implements
IScriptConsoleFactory. Conveniently,
IConsoleFactory and
IScriptConsoleFactory both require the same
openConsole method. However, you need to
create two extension points: one for the Eclipse console factory and
one for the DLTK console factory. Listing 14
shows what these two points look like for the Octave IDE.
Listing 14. Identifying the Octave console factory
<extension point="org.eclipse.dltk.console.ui.scriptConsole"> <scriptConsole class="org.dworks.octaveide.launch.OctaveConsoleFactory" natureID="org.dworks.octaveide.nature" /> </extension> <extension point="org.eclipse.ui.console.consoleFactories"> <consoleFactory class="org.dworks.octaveide.launch.OctaveConsoleFactory" icon="icons/oct.gif" label="%OctaveConsole.Console" /> </extension>
When the
ScriptConsoleManager accesses a
script console factory, it calls the factory's
openConsole method, which creates the
ScriptConsole object. Like
the Eclipse text editor, this console displays text using a
document-based methodology; it has a
ConsoleDocument, an
IConsoleDocumentPartitioner, and arrays of
Positions and
When the
ScriptConsole is created, it calls
setInterpreter with a reference to the
IScriptInterpreter object that the console
manager creates. This method creates a connection between the console
and the interpreter in the form of an
InitialStreamReader. This stream reader
attaches itself to the interpreter by calling
Next, the
InitialStreamReader reads each
line of the interpreter's output and sends it to the console's
display. When it's done displaying text, the console prints a prompt
and places itself in editable mode.
After creating the
ScriptConsole, the
ScriptConsoleManager accesses the Eclipse
ConsoleManager and adds the new object to
the list of available consoles. Now the new console will be visible to
the user and accessible by the interpreter.
Run the interpreter
Let's take a closer look at the
IScriptInterpreter object created by the
ScriptConsoleManager. This interface
extends the
ConsoleRequest interface, which
means that it can be delivered to the
ScriptConsoleServer for processing. The
console manager handles this delivery, and when the server receives
the interpreter's request, it calls
IScriptInterpreter.consoleConnected(IScriptConsoleIO protocol).
This method serves two important roles: It constructs the
InitialStreamReader that enables data
transfer between the console and the interpreter, and the method's
argument identifies the protocol to be used for communication. The
IScriptConsoleIO interface defines two
important methods that receive data from the interpreter:
InterpreterResponse execInterpreter(String command). Sends a script command to the interpreter, then receives a response
ShellResponse execShell(String command, String[] args). Sends a shell command to the interpreter, then receives a response
These two functions direct commands to the interpreter and receive its
output. Each
IScriptConsoleIO protocol
object is initialized with an
and an
OutputStream. When
execInterpreter is called, the protocol
sends the command to the interpreter to its
OutputStream. When the interpreter
responds, the protocol receives the
InterpreterResponse (essentially, a
String) and directs it to the console
through the
All communication to the interpreter relies on the protocol's methods.
For example, the
interface contains the
exec(String command)
that sends commands to the interpreter. This command calls on
IScriptConsoleIO.execInterpreter to deliver
the command. Similarly, the interpreter's
close method relies on
As this tutorial has shown, the DLTK provides myriad features for creating development environments for dynamic languages. Creating these environments doesn't require a lot of code, but you have to know exactly what you're doing. To configure text presentation, you must understand how the editor, viewer, and document interact as well as the rudiments of rule-based partitioning and scanning. To enable user preferences, you have to grasp the strange class hierarchy of Eclipse preference pages and DLTK configuration blocks. To enable launching of dynamic-language projects, you have to deal with threads, streams, and the protocol methods needed to communicate between the console and script interpreter.
The DLTK learning curve is steep and continues upward for a significant distance. But if you need to build a full-featured IDE for your customized script language, you'll find no better toolset. In addition to the material presented in this tutorial, DLTK provides many sample IDEs for languages like PHP and Tcl.
Downloadable resources
- PDF of this content
- DLTK-based plug-in for Octave (os-eclipse-octave-example_plugin.zip | 47KB)
Related topics
- Explore the Eclipse Dynamic Languages Toolkit.
- Visit the GNU Octave site for more information about this tool.
- Check out Ryan Rusaw's Octclipse toolset.
- Check out the Recommended Eclipse reading list.
- Download the Eclipse Platform and other projects from the Eclipse Foundation.
- Browse all the Eclipse content on developerWorks.
- New to Eclipse? Read the developerWorks article Get started with the Eclipse Platform (Chris Aniszczyk and David Gallardo, July 2007) to learn its origin and architecture and how to extend Eclipse with plug-ins.
- Expand your Eclipse skills by checking out IBM developerWorks' Eclipse project resources.


text:
Models of Teaching by Bruce Joyce, Marsha Weil and Emily Calhoun With the current emphasis on standards-based education, teachers everywhere are searching for programs and practices that have the strongest positive effect on student achievement. Since its initial publication in 1972, Models of Teaching, now in its eighth edition, has been considered the classic text in the field. Rationale and research pair with real-world examples and applications to provide a strong foundation for new educators. The thoroughly documented research on the various models of teaching (and their subsequent positive effects on student success) give teachers the tools they need to build strong classrooms that accelerate student learning. Encompassing all of the major psychological and philosophical approaches to teaching and schooling, this new edition of a classic text is at the core of a successful K-12 teacher education program. Look inside this new edition: NEW! Evidence-based approaches to teaching receive a full explanation in entirely new chapters. New studies on models of teaching give readers the most current picture of education today. All research is refreshed and updated, ensuring accuracy and currency. Provides an abundance of both classic and contemporary teaching models, classified into four families: Social, Information-Processing, Personal, and Behavioral Systems. Each model includes suggestions for putting the teaching strategies to use in the classroom with applications and through a Summary Chart.Bruce R. Joyce is the author of 'Models of Teaching (8th Edition)', published 2008 under ISBN 9780205593453 and ISBN 0205593453.[read more]
You can find lots of answers to common customer questions in our FAQs
View a detailed breakdown of our shipping prices
Learn about our return policy
Still need help? Feel free to contact us
View college textbooks by subject
and top textbooks for college
With our dedicated customer support team, you can rest easy knowing that we're doing everything we can to save you time, money, and stress.

subset: commoncrawl


text:
Apt 47, 8 beds
Near the slopes
Good space
The apartment is 83 sqm with 8 beds. There are four bedrooms, two with bunk beds and two with twin beds. The kitchen and living room are an open plan. The kitchen are equipped with fridge, freezer, stove with oven, dishwasher and microwave. There are two bathrooms, one with shower and sauna.
Drying cabinet, ski storage and an electric outlet for head bolt heater is also available for this apartment.
Smoking and pets are not allowed in this apartment.


text:
CAPE COD, Mass., Aug. 1 (UPI) -- Dozens of great white sharks have been frequenting the waters off the coast of Cape Cod. Now, another of the magnificent beasts is trackable -- the first great white to be tagged this season.
The Massachusetts Shark Research Program announced Thursday that -- with the help of the Atlantic White Shark Conservancy -- a 12-foot great white shark is now equipped with an electronic tracking device. There are now 40 trackable sharks that visit Cape Cod on a regular basis.
A number of reports have claimed white sharks are gathering along the East Coast in increasing numbers. Not long ago, a local tuna fisherman captured footage of a 16- to 18-foot great white circling his boat.
"This is the biggest White Shark I have ever seen. But I've seen some very large Mako sharks," Tyler Macallister, captain of the F/V Cynthia C, told Boston Magazine.
The successful tag comes after weeks of searching for sharks via sea plane. Twice a week, scientists with the Atlantic White Shark Conservancy scan Cape Cod's waters by spotter plane and boat looking for potential specimens. Many have been spotted, but only now has one been tagged.


text:
0 item(s)
A charming bouquet of 2 dozen fresh and fragrant red roses, adorned with just a touch of greenery. This arrangement is perfect to say I LOVE YOU for an anniversaries, or just because. 2 dozen red roses delivered in a clear glass vase, this bouquet is also a romantic standard for any day of the year.
Choose Four Seasons Flowers to order red roses for delivery in San Diego!
One Star
Two Star
Three Star
Four Star
Five Star


text:
The situation encountered by Heritage analysts on the ground in Venezuela last week was of a country that has been looted and is falling apart—literally and figuratively. The once thriving nightlife of downtown Caracas is but a distant memory. These days the streets are deserted, surrendered to gangsters and narcotraffickers. People are too fearful of rampant crime to venture out at night, mindful of the nearly 20,000 murders in Venezuela just last year.
There are shortages of basic necessities everywhere. Venezuelans travelling abroad always bring home an extra suitcase full of medicines, foodstuffs, and even toilet paper. Mary O'Grady reported in The Wall Street Journal that "over the past 10 years inflation in food and nonalcoholic beverages is 1,284%."
Thanks to Chavez's ridiculously generous (and economically harmful) energy subsidies, in Venezuela you can fill up your car's gasoline tank for about $0.90—yes, you read that right—90 U.S. pennies will buy a little more than 15 gallons. But Venezuelan families have a very hard time finding basic foods such as milk, eggs, bread, and chicken on store shelves. People resort to hoarding, reminiscent of the bad old days in the USSR.
One Venezuelan colleague told us that he routinely runs red lights while driving at night in Caracas to avoid being targeted by roving gangs of cold-blooded carjackers—he even keeps a taxi sign in his car to confuse the would-be bandits. And, as dangerous as driving is in a city where, after 14 years of Chavismo, life has become cheap, our driver from the airport told us he had been a university-educated professional—head of a government ministry's public relations department—before Chavez took over. Now over 40, he says he cannot find steady work and that there are thousands like him facing the same situation.
Most observers expect great difficulty for Capriles to overcome the combination of sympathy for Chavez and the formidable, Cuban-designed Chavista machine. Maduro has lately been invoking the memory of "El Comandante" by relating to voters that Chavez has been visiting him in the form of a small bird ("un pajarito") that urges Maduro to continue the revolution.
We hope that, instead, the majority of Venezuelans will decide that it is Chavismo that is for the birds.
On April 4, we travelled to Caracas to make the case for economic freedom in Venezuela in advance of the election this Sunday between Hugo Chavez's hand-picked successor, Nicolás Maduro, and opposition candidate Enrique Capriles, who lost to Chavez last October.
We participated in a series of Spanish-language presentations and media interviews with a handful of opposition think tanks, newspapers, radio stations, and a lone television channel (Globovision) that are still permitted to operate in Venezuela.
We also presented the findings about Venezuela in the 2013 Index of Economic Freedom at events organized by CEDICE Libertad and the Venezuelan–American Chamber of Commerce (VENAMCHAM).


text:
For some, the emergence of real-life superheroes is proof that human nature isn't inherently selfish, but instead, noble. And for others, it's a sign that they should become supervillains. You people make me proud.
Leave to Garrison Dean to start the trouble:
Who wants to become super villains with me just so we can go mess with these guys? Seriously. I want to hang him from a fire-escape by his wallet chains. I'm all for truth or justice, but I also believe that Spandex should be worn by people with low BMIs.
Of course, it didn't help that so many people agreed with him:
Illogic: "Are you saying we should become personal trainers for wannabe superheroes?
Just send them a link to the nearest parkour group or something. That'd hopefully both get them fit, and make them realize you don't have to wear a costume to be a good and helpful human being. (Not to mention self-pleasuring.)"
Garrison Dean: "Train them!? Fuuuuck that! I want to be the steel nozzle pouring fear into their baggy pants. They want to help society? I want to make them work for it! You can't feed the homeless when I've brainwashed them to become my UNWILLING ARMY OF DOOM!!!"
LittleDragon: "Wait a minute...your brainwashing them into your UNWILLING army? Why not brainwash them into becoming your WILLING army? It works better. Just as soon as they show up here I'll show them the town. There is a reason the Mayor kicked the tv show COPS out of town and told them to never come back."
mudderofcanton: "Until I can think of a better name I will be Kicker of Losers. My weapon of choice steel toed boots! YEAH!!"
JaiMak: "man, I want to go to ohio and kick their ass."
labbla: "I'm visiting Cincinnati this summer. Looks like I better whip up an evil scheme and a super villain costume."
MoraAmphiaraus: "I kind of...want to be a super villain now, and hunt these guys down. in the end it would do some good by keeping kids off the street and out of neighborhoods such as the tenderloin district in san francisco, or downtown oakland where they'd get eaten alive."
LucilleMagumbalee: "So if I just beat the crap outta one of these guys do I earn the rank Super Villian, or will I need to be wearing a costume when I hand out the ass beating?"
Honestly, it's like none of you saw Dr. Horrible or something. Don't take the dark path! It'll lead to Felicia Day getting killed! Again!
(Spoiler warning.)
Of course, others just had a problem with the real-life supervillains that appeared in the video:
OW-Holmes, the housekeeper: "The real problem is his voice. How is he supposed to strike terror into the hearts of men, with such a high voice? And you cant build any kind of mystique walking around during the day. You need to be peering off the sides of rooftops and skulking in alleys. As a sociopath with an unwavering sense of right and wrong, I know how to be a real superhero."
JodaThongnopnua: "He needs to get his Christian Bale 'I've had a cough for a week' voice on."
ChibaCityCowboy: "lol yeah right at the beginning of The Dark Knight Returns , I thought to myself 'So when did Batman start smoking...'"
Plague: "That guy looks more like a villain's cheap sidekick from a Power Ranger's episode than a superhero."
Belabras Saw Three Lights!: "Ignoring the inadvisability of this, why aren't any of these fools wearing even the most basic of body armor? If you are honestly intending to have physical altercations with people who are breaking the law why are you going about it in what looks like a swimsuit, jeans, and a lucha libre mask?"
Jcous: "They really need to step up their costume game. Also, they could stand to work out a bit. Nothing against a little flab on your average person, but these are supposed to be superheroes, right? They need to be able to outrun and out-fight their opponents, in theory, not to mention instill some semblance of fear. I wouldn't be too worried if I saw a somewhat out-of-shape young gentleman in neon yellow, spraypainted (couldn't afford screen printing?) spandex jogging after me with handcuffs. They need a stylist, personal trainer and PR agent. Oh, and Shadowhare has to do something about that voice. Watch Batman begins - learn that Batman growl"
At least some of you got where they were coming from:
thatoneguy42: "You know what i'm gonna say more power to them. Id rather be saved by a regular guy in spandex, who actually has some notion of right and wrong, than by a bunch of corrupt, closed-minded, easily manipulated, angry, racist fat-asses in blue who abuse and batter innocents to make themselves feel special when they can't meet their quotas. i bet you ONE of those superheroes does more good in a day than half of the cops out there. Keep on rocking Shadowhare, fight the good fight."
BCWoods: "You know, as someone who suffers from some pretty strong social phobias, I kind of look up to these guys in a weird way. Don't get me wrong, I totally think they're going to be raped, killed, eaten, and re-raped by the first real deviant they come across... but still I couldn't even put on spandex in my OWN house, let alone walk around in public wearing an outfit that ridiculous. That takes some serious balls."
spacekicker: "I look at it like this. Instead of wearing costumes they could readily be walking around town as emo goth kids, or a random gang of hoodlums. Instead they actually feed the homeless and give everyone a good chuckle, and if they do stand up and help someone from getting beat up or whatever. Shoot, good for them. It may be silly, but it's the good kind of silly"
And that's what we'll put on their gravestones, after Garrison and his Evil League of Evil Evilness has destroyed all the good in the world, just for fun. "They lived for the good kind of silly."
It's a fitting epitaph.


text:
The Blackhawks are camping out in South Bend, Ind., for the extended weekend. And if you were lucky enough to score tickets to the Saturday or Sunday practices, you've got a road trip on the horizon!
Pop on "Holiday Road" and get ready for a highway montage, my friends. Here are three roadside attractions worth your time and gas on your way to or from training camp. Happy motoring! Manti Te'o joke!
Michael Jackson's childhood home
2300 Jackson St., Gary, Ind.
1 mile north of Interstates 80/94, Broadway exit
Seriously, it's on Jackson Street! And it was named that when they moved there! Anyhoo, since MJ's death in 2009, fans have laid flowers, posters and notes in memory along the fence surrounding the yard. It's not too often you can stand on the sidewalk of a random, modest house and say, "The most famous person in the world in 1984 used to brush his teeth here."
Blackhawks connection: As you drive away, switch off the Lindsey Buckingham and hit play on the Jackson Five's "I Want You Back." Sing it like you're singing to the Stanley Cup.
Albanese Confectionery
5441 E Lincoln Highway (US 30), Merrillville, Ind.
2 miles west of Interstate 65
This is the closest thing to a real-life Willy Wonka factory you can find. There is a 40-foot chocolate fountain, and I am not joking about the fountain. Bring money, because you will want to eat everything. Prepare for your car floor to be covered in wrappers. (Even worse than it is now.)
Blackhawks connection: Brandon Pirri showed some sweet moves in the AHL, leading the league in scoring last season. Expect to see him earn a spot on coach Joel Quenneville's lines this year. And he probably likes candy.
Shakespeare Garden, Purdue North Central Campus
1,500 feet south of Interstates 80/90, Route 421 exit
It's a 30-by-30-foot garden filled with all the flora ever mentioned in The Bard's works, tucked behind a small pond while the Indiana Toll Road roars only a quarter-mile away. Unbelievably random and incongruently beautiful.
Blackhawks connection: Imagine Brandon Bollig standing here reciting lines from "Twelfth Night," then punching a guy. Perfect.
RedEye special contributor Alex Quigley can be heard on WGN Radio 720.
Want more? Discuss this article and others on RedEye Sports' Facebook page.


text:
The Data Breach Solution Center Provided by the Utah Department of Health
**Free Credit Monitoring Extended for Second Year**
The State recently extended the free credit monitoring services for a second year to victims who have enrolled. The credit monitoring extension is automatic and was completed by April 9, 2013. Those who already enrolled do not need to take any action. Ignore all notices that state your services will soon expire.
The Data Breach
In March 2012, computer hackers broke into a Utah State government server and stole the Social Security numbers of up to 280,000 people, as well as less-sensitive information from up to an additional 500,000 others. Find out more about the data breach.
What is the State Doing to Help?
We at the Utah Department of Health understand how upsetting this news is, and we apologize for the stress it has caused. The state accepts full responsibility and has taken several significant steps to fix the situation, protect your credit, and make sure a data breach like this never happens again.
Free Credit Monitoring
We have extened free credit monitoring for a second year if your Social Security number was stolen. Find out more.
Free Identity Theft Counseling
We are currently offering free identity theft counseling services with ID Experts if your Social Security number was stolen. Find out more.
Data Security Ombudsman
We have appointed Sheila Walsh-McDonald and her staff to personally assist anyone affected by the breach. Find out more.
Statewide Workshops
We held a series of workshops around the state to explain the data breach and guide Utahns through the process of getting help. Find out more.
Independent and Internal Reviews
Independent auditors have performed internal reviews to determine the cause of the breach and to secure all state servers against further breaches. Find out more.
Notification Letters
We mailed letters to as many people as possible whose Social Security numbers and other personal information were stolen. Find out more.


text:
Kol-Tai was a Dramen colonist who settled on the planet Dramia II during the early 23rd century.
In 2251, Kol-Tai was infected with the Saurian virus at the time the colony was visited by Dr. Leonard McCoy, who headed a mass-inoculation program there. McCoy cured Kol-Tai of the Saurian virus. Unfortunately, soon after McCoy departed, the colony was hit by a massive plague. All of the colonists, except Kol-Tai, died from the plague, leaving the Dramian government to believe McCoy was responsible for the plague.
Nineteen years later, while the USS Enterprise was on an emergency mission to Dramia, McCoy would be arrested for a crime, which he was unaware of having committed. Attempting to get McCoy acquitted, the Enterprise traveled to Dramia II in search of a witness in favor of McCoy at his trial. There they discovered Kol-Tai, who regarded McCoy as a savior and a friend, and was willing to travel back to Dramia with the Enterprise.
On the journey back to Dramia, the Enterprise passed through an aurora. Moments later, Kol-Tai and the rest of the crew of the ship, except Spock, began to contract the plague. The Enterprise made it to Dramia just in time to break McCoy out of jail, and for him to find a cure. Once the plague cure was found, McCoy was able heal all aboard the ship, including Kol-Tai. It was at that time determined that the aurora was responsible for the plague, and with the added testimony from Kol-Tai, McCoy was acquitted of the crimes charged against him. (TAS: "Albatross")
External link
- Kol-Tai at StarTrek.com, the official Star Trek website


text:
When George C. Wolfe's "Spunk" was first staged at New York's Public Theater in 1990, it was greeted as a kind of rediscovery of the fiction of Zora Neale Hurston, the author of the 1937 novel "Their Eyes Were Watching God," who fell out of popular favor and died in poverty in 1960.
In the 21 years between that premiere and that current revival of "Spunk" at Court Theatre, the importance of Hurston as an observer of African-American life and a poet of its soul has only been further cemented. There might not be the same Harlem Renaissance feelings about "Spunk," but there are still plenty of Hurston pleasures in the play.
There are three of her stories in the aptly named "Spunk" — a word that captures Hurston's essential chutzpah and love for political incorrectness even before that restricting term had been coined. In "Sweat," we see the picture of a troubled marriage, a washerwoman tied to both dirty laundry and an abusive husband. That's followed by the short "Story in Harlem Slang," a piece about a couple of Uptown hustlers doing their thing to the best of their considerable abilities. After intermission, we get "The Gilded Six-Bits," the most involving of this trio and yet another picture of the complexities of a marriage in which only one of the parties fully appreciates the basic rules of the s union.
Court's production, which was directed by Seret Scott and makes use of the original 1990 music by Chic Street Man, is a very relaxed affair. You might find that it's a bit too relaxed and casual, a bit too visually loose and neutral, especially if you see Hurston's sense of humor and flourish as only the outer coverings for stories about great human pain, love and resilience.
One wishes for a few more sharp edges. When the mellow vibe is cut, the surface of the show peels back and you suddenly are aware of the high stakes that beset these, and any, human lives. And like many conceptual shows where the original staging and the actual text were linked and developed together, there are moments here when it feels like the Court cast members don't fully own everything they are doing.
Still, the evening trips along in a very chilled and enjoyable fashion, with the second act landing with the most honesty and humanity. As the blues singer with the job of linking these tales together, Alexis J. Rogers adds glamour and charm to the cool-cat guitar playing of Kelvyn Bell. Michael Pogue zoots his way through Hurston's most comedic impulses; Kenn E. Head seems most in tune with her enigmas; and the excellent Patrese McClain and Chris Boykin jointly carry the load of this writer's irrepressible sexuality and moral conscience. In the Hurston world, you cannot separate the one from the other.
I'd just say the "Spunk" quotient could do to rise a few more beats on the Hyde Park dial — Hurston was funny and accessible but also uncompromising in every last way. That's why it took a while for people to understand all she saw and meant.
When: Through Oct. 9
Where: Court Theatre, 5535 S. Ellis Ave.
Running time: 2 hours, 10 minutes
Tickets: $40-$60 at 773-753-4472 or courttheatre.org


text:
western mass...?
Posted 03 August 2004 - 06:22 AM
Posted 03 August 2004 - 08:49 AM
In Hadley, my hometown, their are several haunted locations. Hadley was a town built in the late 1700's and was home to many Indian Wars, then led to a lot of paranormal activity. At the end of Meadow St. in Hadley, their is an abandoned house, it is said that the father beat and his children and his son latter stabbed him. I, and a group of friends, have done a complete search of the house, (all on vidoe tape), and have heard voices and seen odd things out of the corners of our eyes.
Also in Hadley, right off Rt. 47, is the Porter-Phelps-Huntington House, this is an origional house from the late 1700's when Hadley was first made a town, Indian Wars took place it the back-yard, and four different families have lived there. The cartaker, a friend of mine, says that the beds are made each night, and when she goes back the next morning, it looks as though someone has slept in them, things move around the house, candles light and go out, and you can hear voices.
Again, in Hadley, right past Meadow St., off of 47, is the North Hadley Cemetery. This place, which I also have vidoe footage of, is extremely wierd. Their is an alter in the north-east section of the cemetery, and the ground around it is extremely soft. At night you can hear voices, and I have seen a ghostly figure, wearing colonial cloths with a shovel, leaning up against a tree, just several months ago.
Off of Rt. 47 (In Hadley), past Meadow St., and right by the river, is an Indian War ground, at night, if theirs fog, you can make out shapes of horses and men, riding through the corn fields, the fog parts, and the corn moves as they pass. Voices can also be heard.
Right off of South Maple St. (Still in Hadley) their is a section of woods where over 200 coloniails died in the early 1800's. Figures have been seen, voices are heard, and "things" follow you. I have never been more scared in my life after going into these woods.
Also in Western MA, is the Northampton State Hospital (in the process fo being torn down). This palce is supposedly extremely haunted.
The Belchertown Public Highschool is home to several ghosts, a girl hung herself in a hall-way about 30 years ago. At night, the lockers supposedly open and close and the hallway is always several degress cooler.
In Goshen, the town cemetery is extremely active. In the early 1800's, a family ran a counter-fit business under the cemetery, their are tunnels all over Goshen that lead to the cemetery. Athorities arrested this family but blew up the business, causin a lot of distruction in the cemetery, stones are scewed and some graves were moved. People have said to have seen figures and odd feelings of nausea as they enter the cemetery. (day or night)
Now, if you plan on visiting any haunts in my hometown, I suggest you come with a good attitude, and show great respect for these spirits, they are unlike any other I have encountered, and can easily scare you beyond anything else.
I hope I was of some help to you.
If you'd like more info., IM me at Hudak87, or PM me.
Posted 03 August 2004 - 08:53 AM
Posted 03 August 2004 - 07:43 PM
For some actual haunts, you'd need to come closer to me, where the towns are older.
Posted 04 August 2004 - 04:47 AM
Posted 23 December 2006 - 09:10 PM
I'm from Southwick MA, Directly south of Westfield. Your looking too fair. Southwick has a ton of places to look for paranormal activity. There was a massacre in 1685 down the street from Laro Road. House down North Long-Yard Road are Loaded with activity.
In the first house right over the line of westfield and southwick (on Pontussic road) there have been Shadow People seen and heard. This was the house that I used to live in. Stuff would be moved on us and our neighbors would complain about the sounds coming from our house when we weren't home.
There were Human remains dug up about 3 years ago on a tabacoo farm and the ghost is in the old Tingly house. Yes, the Haunted House in Southwick is actually haunted. I went to school with the girl who died in the house. I believe that she is also in there. (if you look at the window over the door at night you will see something breathing on the glass and hand prints appear out of no where. Sketchy Crap to see. There is also a full-body apparition seen walking from the barn that is attacted to the house into the field and then disappearing.
My grandmother lives in a house on this road and I have seen a few ghost in this house, and was actually harassed by one. My cousin and I slept over and weren't able to sleep because the ghost of a child was throwing toys at us. I woke up with a bruise in the shape of a fist on my thigh. There have been Voices heared, Full-body apparitions seen, Shadow people seen, and a dead cat walks through the house at night.
Down the road is the old school-house which was converted into a house. The old school teacher has been seen and the beds are always made even though no one had been home all day. My aunt lives in this home.
There is also a native american burial ground at the foot of the mountain in the woods. My cousin and I stumbled upon it when we were hikeing in the woods.
The newer houses do not have as much activity, but the older ones have enough to spare.
Posted 23 December 2006 - 09:14 PM
Posted 27 December 2006 - 10:54 PM
Posted 26 September 2007 - 07:55 PM
Posted 29 September 2007 - 03:25 AM
Personally, I cannot inform you of any haunts around here. Most of the places I've heard are either residential or have been demolished. As mentioned above, the old Northampton Mental Hospital is definitely a must if you can get in.
One of my friends had mentioned something about there being a haunting in Forest Park, but I haven't heard anything more of it so it's not certain in my book.
Also, recently listed on the Shadowlands is Van Horn Park, but I'm having trouble believing that. The water does look disgusting the further you get into the park, but besides that, I haven't sensed/seen anything. Besides, the park at night is wicked dangerous. Too many hobos and drunks around.
Referring to that abandoned neighborhood in Westfield, whoa. I would definitely like to hear more about that.
Posted 30 September 2007 - 05:38 PM
Posted 04 October 2007 - 05:56 AM
If so, I'd just like to say this: lol. I remember seeing this off in the distance and just staring. However, there are a lot of these types of streets around Western Mass. If I could, I would check this out, but I'm home-bound for now. Anyone gonna take a shot?
Posted 04 October 2007 - 05:30 PM
Posted 04 October 2007 - 07:54 PM
nope, that's not it. an easier way to find the abandoned nieghborhood (of doom). in google map enter in butternut rd in westfield, ma. click the hybrid map button. you'll see city view rd make a t-intersection with butternut rd. about an inch and a half over to the right is an unmarked street that leads to (what looks like) an abandoned niegborhood. it fits the the desription posted early. it's not that hard to find, my finacee and I found the entrance road the other night. we're going to try and actually go there in week or two when we both can get a day off of work.
This sounds spooky. Why would a whole neighborhood of people (about 10 homes) up and abandon them? Could it have been a subdivision where the builder went bankrupt, couldn't sell the homes and just abandoned the whole project? If any of you go, take pictures please....lots and lots of photos. Be careful not to trespass or to get hurt, never know what state these homes could be in. You can also inquire at the town hall at the assessors department as to what happened and why the homes are vacant, it is public info. and they should tell you. I wish I lived closer to that area or I would do lots of research and take a visit.
Posted 07 October 2007 - 06:30 PM
0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users


text:
Bah. I don't have time right now to write all the many things in my head, so I'll put a picture of my latest finished project instead. I made this little blanket for my newest nephew, Maxwell, using these instructions. I really love how it turned out and I'll do it again for sure!
Wednesday, April 27, 2011
Posted by Carrie at 9:57 AM 12 comments Links to this post
Tuesday, April 19, 2011
somebunny is one
This is my favorite picture from Roman's birthday. He and his cousin (one week older) are not very good at sharing yet. :)
Roman likes:
Silky fabric for comfort
Greek yogurt
Chocolate cake with peanut butter icing
Eating dirt
Playing with his brothers
Calling people on the phone
Snuggling with Mom and Dad
Roman is not such a fan of:
Walking. He may crawl to eternity.
Sharing his toys with Kole :)
Other people looking at him
Posted by Carrie at 7:17 AM 11 comments Links to this post
Monday, April 11, 2011
days like this
Everyone is needy
All the children cry all day
Nothing sounds good for dinner
Things just don't get done
I just can't wait to put my babies in bed
And then crawl under the covers myself with my Ben.
But real quick-like I decide to download the videos from my camera and I find a little shimmering jewel like this one and I laugh and laugh until I cry happy tears at the job I get to do. I'm convinced this is better than a Christmas bonus to keep me reporting to my job every day.
..."this is green guy... he knows... cool stuff." Indeed, Banks. Indeed.
Posted by Carrie at 8:10 PM 3 comments Links to this post
Sunday, April 10, 2011
adding to our brood
Meet Coco and Layla. May they survive Banks' constant squeezing and may their introduction to the henhouse be a miraculously peaceful one.
Posted by Carrie at 8:34 AM 7 comments Links to this post
Friday, April 8, 2011
friday's child
I hope this puts a big smile on your face this Friday.
It's the weekend(!) and I have a perma-smile today cause I'm going on a hot date tonight. Weeeeee! Have a wonderful weekend, everyone!
Posted by Carrie at 7:12 AM 8 comments Links to this post
Monday, April 4, 2011
oh, hello there!
Posted by Carrie at 1:49 PM 4 comments Links to this post


text:
In many ways, flash memory has become the darling of the storage industry. Not only do a huge variety of devices use flash for basic data storage, we're already seeing movement towards both SSDs (Solid State Drives) or hybrid drives that marry flash to a traditional hard drive, seeking the best of both worlds when it comes to overall performance. All the hype around flash memory, however, doesn't translate into a unified flash product, which is why Nokia is leading a new drive to unify flash.
Nokia is partnering with some of its own competitors (Samsung and Sony Ericsson) as well as with chipmakers such as Micron, Spansion, STMicroelectronics, and Texas Instruments to promote a single flash storage technology aimed at mobile phones. Currently dubbed Universal Flash Storage, the goal is to eliminate the need for various card readers and translation devices for the number of media currently available.
"Nokia will actively participate in the development of the UFS specification, which aims to provide future mobile devices with high performance and flexibility," said Seppo Lamberg, Nokia SVP of technology platforms. "This collaborative UFS effort will provide the industry with an open standard mass memory solution with optimal performance and interoperability."
Nokia's goal with UFS is simple: support very low memory access times, lower power consumption, and increase data retrieval speeds beyond those of current flash storage products. Nokia says that it wants to reduce access times for a 90-minute HD movie to a few seconds, something the company says currently takes as long as three minutes under current flash standards.
The new Universal Flash Storage standard is expected to be complete in 2009 with a shipping version debuting at some point after that, hopefully with both increased performance and reliability over current flash systems. If the standard is successful, it might succeed in what is, overall, an extremely fragmented market.
Even discounting the gap between the newer NAND standard and older NOR technology, Wikipedia lists 18 total memory card formats. Obviously some of these are far more prevalent on the market than others, but there's no reason for 18 separate formats to exist, period. With many of the 18 formats entrenched in the market, UFS is going have an uphill fight. But if Nokia is able to get other handset makers to support it—and Samsung and Sony Ericsson are on board—it may have a chance.


text:
|Note: It is unfortunately not possible to be awarded more than one scholarship and combinations are not possible.
Wittenborg offers students from Brazil the chance to study on one of its bachelor's degree or master's degree programmes through the OTS Scholarship programme.
The Bachelor International Business Administration (IBA) in 10 specialised fields offers students with 3 years previous higher education or a Higher National Diploma equivalent in a business-related field to follow a Top-Up Final Year. Please note that all IBA programmes participate in the OTS Scholarship, except for the IBA Entrepreneurship & Small Business, IBA Hospitality Management and the BA (Hons) International Hospitality Management programme. For an overview of all of our IBA Final Year programmes, please have a look here.
The Master of Science programmes, also available with OTS Scholarships, are offered jointly with the University of Brighton's faculty, the School of Service and Sport Management, and successful students are awarded a UK MSc (Master of Science Degree) and a PGDip (Postgraduate Diploma) from Wittenborg.
- The programme is fully taught in the Netherlands at Wittenborg's campus in the Netherlands, by a mixture of professors from the University of Brighton and Wittenborg University.
- Students who study on the Master of International Science programmes in International Hospitality Management, International Tourism Management or International Event Management can make full use of the resources of Wittenborg and the University of Brighton, including online research facilities. If students wish to conduct their Final Project (from April to September) in the UK, this can be arranged.
The MBA programmes currently has 8 specialisations and is fully taught in our Apeldoorn campus. Students applying for this programme need to have at least a bachelor's degree, along with 3 years of professional work experience after obtaining the bachelor's degree. For an overview of all MSc and MBA programmes that participate in the OTS Scholarship programme, please have a look here.
Orange Tulip Scholarship Fund - Brazil - OTS Scholarship offer
Programme type
Normal Fee
OTS Fee
Bachelor Final Year
7,500 euro
5,000 euro
2,500 euro
Master (MSc)
12,600 euro
7,500 euro
5,100 euro
MBA (Apeldoorn campus)
14,300 euro
7,500 euro
6,800 euro
|MBA (Amsterdam campus)
|18,300 euro
|7,500 euro
|10,800 euro
Admission requirements:
- Your nationality is non-EEA
- You have never studied in the Netherlands before
- IELTS or TOEFL: IELTS 6.0 or TOEFL equivalent. (Click here for an overview of the equivalent scores, Wittenborg's TOEFL code is 4889)
- GRE Requirement: Not applicable
- GMAT Requirement: Not applicable
- High School GPA Requirement: Not applicable
- Highest educational background: At least 3 years higher education/HND equivalent in a business-related field
- Working experience: Not a requirement
- Your nationality is non-EEA
- You have never studied in the Netherlands before
- IELTS or TOEFL: IELTS 6.5 or TOEFL equivalent. (Click here for an overview of the equivalent scores, Wittenborg's TOEFL code is 4889)
- GRE Requirement: Not applicable
- GMAT Requirement: Not applicable
- GPA Requirement: Not applicable
- Highest educational background: Bachelor's degree in a business related field
- Work experience: Work experience is not required for enrolment into the MSc programmes. For the MBA programmes, a minimum of 3 years of work experience is a mandatory requirement for enrolment into the MBA programmes.
The deadline for applying for the OTS Scholarship is April 1st. In order to apply for this scholarship, please send your OTS application form along with your Wittenborg application documents to email@example.com. Additionally, please do not forget to inform the NESO office in your country of your application for the OTS scholarship. Currently the deadline for applying for OTS has been extended to June 1st 2020 to accommodate any applicants who might not be able to apply on time due to Covid-19.


text: A note from the owner:You are invited to enjoy the peace and tranquility that Hawk Valley Retreat & Cottages Bed & Breakfast has to offer. We are located just 8 miles east from downtown Galena. Stroll our 10 secluded acres of meadows and gardens. Complete with a pond, walking trail, panoramic valley and sunset views. Watch the birds, enjoy the porch swing, or relax in our gazebo, and make it your own private haven.At Hawk Valley Retreat & Cottages your accommodation choices include three rooms in the main house or four private cottages, and we also have a renovated barn which is available through full property rental or for day events. Each morning of your stay, wake up to a hearty full breakfast which is served in the dining room of the main house.When we decided (and it was a quick decision) that we wanted a lifestyle change, we decided on a Bed and Breakfast, looked online, found Hawk Valley Retreat, came and checked it out and there was never a question about where we would settle and we have never looked back.We invite you to join us in our little retreat away from life, where you can relax and pretend that the rest of the world doesn't exits (at least for a few days).Wendy and Hal


text:
Cool outdoor thrills, family fun, relaxing retreats and warm hospitality!
Winter is a magical season in the Catskills! An easy drive from New York City leads to a wonderland of snow-covered mountains, family-friendly resorts, and old-fashioned train rides. Follow country roads to charming villages dotted with antique shops, art galleries, craft studios and innovative restaurants.
Ski areas feature varied terrain-from beginner trails to black diamonds. Along with skiing and snowboarding, there's snowtubing and sky-high ziplines. Step off the slopes, and it's a short trip to cozy inns and mountaintop luxury.
This scenic route follows a loop from, and back towards, the New York State Thruway.
A. Woodstock
It's a peaceful beginning at the KTD Monastery. Painted by a Tibetan artist-in-residence, the shrine replicates an authentic Tibetan monastery. Tibetan prayer flags lead up the winding mountain road to retreats and courses on Tibetan culture, meditation and yoga.
The award-winning River Rock Health Spa, providing natural wellness treatments in a tranquil mountain setting, is another lovely place to relax-and a habitat for deer, hawks and other wildlife.
Check out the friendly shops, studios and restaurants on Tinker Street and browse the Woodstock Artists Association & Museum (WAAM) showing work by area artists in its spacious galleries.
B. Mt. Tremper
Come to sing or listen. The Emerson's restaurant features open mike nights on Tuesdays. The resort invites relaxation in its luxury suites, family-friendly lodge and four-star spa open to day visitors as well as overnight guests. Adjacent shops include a collection of hand-crafted kaleidoscopes. You can step inside the world's largest!
Weekend meditation programs and retreats at Zen Mountain Monastery include classes from calligraphy to Qi Gong.
Get into the spirit of the season aboard the Catskill Mountain Railroad's Holiday Trains, running on weekends in December. Decorated with lights and ornaments, the trains traverse magical winter landscapes.
C. Tannersville
Bring your tools and carve an ice sculpture at the Tannersville Ice Sculpting Festival, or just check out the glistening artwork all around you.
D. Hunter
Hunter's new six-passenger ski lift, the Kaatskill Flyer, gets you to the top fast. A stay at the slopeside Kaatskill Mountain Club features amenities like a spa and heated indoor-outdoor pool. The whole family can zip year-round on Hunter Mountain's New York Zipline, the longest and highest in North America. Canopy tours run from tame to wild!
In April, Hunter's TAP New York Festival features specialty foods and microbrews from more than 80 craft breweries.
E. Windham
There's big news at Windham Mountain: a Kids Snowmobile Park! Imagine how cool your children will feel driving Windham's new fleet of 120cc Arctic Cat snowmobiles around an oval track at the Adventure Park.
Along with skiing and snowboarding, Windham also features the Windham Mountain Adventure Park with ten lanes of exhilarating snowtubing, a large ice-skating rink, and a comfy lodge. Grab a hot cocoa in Sliders Café before lacing up your skates!
Taste made-from-scratch pies at Catskill Mountain Country Store & Restaurant, voted best by Hudson Valley magazine. The emporium features local crafts, gourmet foods and baked goods, as well as a small zoo with pigs, goats, turkeys, and miniature horses. It's a deliciously affordable stop. The owner-chef trained at the Culinary Institute of America.
Guests at historic Christman's Windham House resort rave about breakfast served with maple syrup produced on the property. Even the tap water-crystal-clear mountain spring water from Christman's own springs. Tours of the syrup house are available in March; the delicious syrup is sold year-round.
F. East Meredith
Events at the Hanford Mills Museum include February's Ice Harvest Festival. Recreating the region's coolest tradition, visitors can help cut blocks of ice from the frozen pond with vintage ice saws and watch a horse drawn sled haul it to an ice house. Kids' activities, horse drawn sleigh rides, a hot soup buffet, craft vendors and bonfires add to the old-fashioned fun!
G. Roxbury
Choose from skiing, boarding, snowtubing and snowshoeing at Plattekill Mountain. Enjoy big mountain terrain, 38 trails and top notch conditions in a friendly, family-oriented, atmosphere. There's a big Torchlight Parade on New Year's Eve!
The Roxbury's themed rooms are so cool and elegant they rate high on National Geographic's Stay List. After a soak at the Shimmer Spa, spend the night in a whimsical space. The entire town of Roxbury is on the National Historic Register.
H. Highmount
This season's events at Belleayre Mountain include the Mountain Cup Race, Winter Festival Week, and the WKNY Challenge Race. Slopes offer every level of challenge, from family fun to extreme skiing at this model for the ski industry-with state-of-the-art Cat-access skiing and boarding, new terrain parks, and extensive glades.
I. Callicoon
Whatever the weather, there's lots to do at Villa Roma Resort, from ice-skating to skiing and boarding on two slopes with chairlift and snowmaking, to swimming, bocce and shuffleboard in the indoor sports complex. Enjoy entertainment on-site and dining options from gourmet to an in-house Starbucks.
J. White Lake
In February, head ??? to the 29th annual King of the Ice fishing competition on frozen White Lake. Prize-winning categories include trout, pickerel, perch, crappies and walleye. Sponsored by the Sullivan County Conservation Club.
K. Monticello
Just southeast, the Monticello Casino & Raceway features over 1,000 slot machines, year-round harness racing and several restaurants.
For more ideas and information, see The Catskills Regional Tourism Website.


text: The above black and white photo (courtesy of the Craig and Shara Anderson collection) shows what the Long Gallery's original clock looked like during her career. It was nearly 4 foot wide and completely hand-carved. Once Queen Mary arrived in Long Beach, though, the renovators tore out this beautiful clock and the wreath of musical instruments and hands were divided into several separate pieces and sold at auction. While I would certainly love to own the complete wreath, I have 2 segments on display in my bedroom as seen in the color photos. The attention to detail and the sheer enterprise of creating such a masterpiece is remarkable. In fact, most of the wood aboard her majesty were treated with human hands, not machines. It is an inescapable fact that no present liner can even approach Queen Mary' s grandeur. Mankind will never build such a hands-on liner again and although it is shameful that so much was thoughtlessly dismantled by Long Beach, at least her corridors and public rooms are essentially the same as when she sailed.


text:
It is time for the This Is How We Roll Thursday link party!
We are so happy you have joined us this week, and can't wait to see what you've been working on.
Each featured post will be shared on all four of the hosts' Pinterest, Facebook, Twitter, and Google+ accounts and will be pinned on the This Is How We Roll Thursday Featured Pinterest board. Watch for the #ThisIsHowWeRoll hashtag and feel free to use it when you share posts from the party.
We'd also like to start featuring more of EVERYONE's posts. To do that we've created a custom search bar. If you give us permission, we will add your site's URL to the search function so that whenever we write a round-up post, we can check for relevant posts on your site to include. We also want to make this search tool available to all of you. To be added to the This Is How We Roll custom search, fill out this form. You can access the search bar on this page. Feel free to bookmark it for easy access whenever you need it.
Now let's roll!
We are Corinne from Wondermom Wannabe, Cynthia from Feeding Big and your host this week is
Susan from Organized 31
Hi, I'm Susan. I believe life is better when organized. Maybe I feel this way because I've moved into and organized 25+ houses in 12 states and 3 foreign countries. My active duty husband, 3 children, dog and leopard gecko are always up for another move and another adventure. I'd love if you dropped by Organized 31 to visit.
Here are some things I've been working on recently:
Patriotic Mason Jar Craft Ideas
Our features this week are:
Most viewed
Low Maintenance Gardening from Birdz of a Feather
Camping I Spy Game Printable from Growing Up Gabel
Easy DIY Summer Picnic Coasters from Flamingo Toes
DIY Vintage Ring Toss Game from I Should Be Mopping the Floor
If you were featured, grab a Featured Button and display it on your post or party page.
Latest posts by Cynthia (see all)
- Roasted Sweet Potatoes and Apples - September 29, 2017
- Easy Fried Apples - September 27, 2017
- Nutmeg-Apple Conserve, a canning recipe - September 26, 2017