StringUtil
| Kind of class: | public class |
|---|---|
| Package: | |
| Inherits from: |
|
| Version: | 06/23/11 |
| Author: | Aaron Clinger, Mike Creighton, David Nelson, Jon Adams |
| Classpath: | org.casalib.util.StringUtil |
| File last modified: | Thursday, 23 June 2011, 20:37:02 |
/* CASA Lib for ActionScript 3.0 Copyright (c) 2011, Aaron Clinger & Contributors of CASA Lib All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - Neither the name of the CASA Lib nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ package org.casalib.util { import flash.xml.XMLDocument; import flash.xml.XMLNodeType; import flash.xml.XMLNode; import org.casalib.util.NumberUtil; /** Utilities for manipulating and searching Strings. @author Aaron Clinger @author Mike Creighton @author David Nelson @author Jon Adams @version 06/23/11 */ public class StringUtil { public static const WHITESPACE:String = " \t\n\r"; /**< Whitespace characters (space, tab, new line and return). */ public static var SMALL_WORDS:Array = new Array("a", "an", "and", "as", "at", "but", "by", "en", "for", "if", "is", "in", "of", "on", "or", "the", "to", "v", "via", "vs"); /**< The default list of small/short words to be used with {@link #toTitleCase}. */ /** Determines if the singular or plural versions of a noun should be used given a number. @param count: The number of items. @param singular: The singular version of the word. @param plural: The plural version of the word. If no word is defined method appends "s" to the singular word. @return The singular or plural version of the word. @exampletrace(StringUtil.pluralize(1, "Dog")); // Traces "Dog" trace(StringUtil.pluralize(3, "Dog")); // Traces "Dogs" trace(StringUtil.pluralize(2, "Child", "Children")); // Traces "Children"
*/ public static function pluralize(count:int, singular:String, plural:String = null):String { plural ||= singular + 's'; return Math.abs(count) == 1 ? singular : plural; } /** Returns a shortened String. @param source: String to shorten. @param trailing: The number of characters to remove from the end of the String. @param leading: The number of characters to remove from the begining of the String. @param separator: Characters to seperate the begining and the end of the String. @return The shortened String. @exampletrace(StringUtil.truncate('Mississippi', 2, 3, '...')); // Traces "Mis...pi"
*/ public static function truncate(source:String, trailing:uint, leading:uint = 0, separator:String = ""):String { const lead:String = source.substr(0, leading); const trail:String = source.substr(-trailing, trailing); return lead + separator + trail; } /** Transforms source String to title case. @param source: String to return as title cased. @param lowerCaseSmallWords: Indicates to make {@link #SMALL_WORDS small words} lower casetrue
, or to capitalized small wordsfalse
. @return String with capitalized words. */ public static function toTitleCase(source:String, lowerCaseSmallWords:Boolean = true):String { source = StringUtil._checkWords(source.toLowerCase(), ' ', true, lowerCaseSmallWords); var parts:Array = source.split(' '); var last:int = parts.length - 1; if (!StringUtil._isIgnoredWord(parts[0])) parts[0] = StringUtil._capitalizeFirstLetter(parts[0]); if (!StringUtil._isIgnoredWord(parts[last]) && (!lowerCaseSmallWords || !StringUtil._isSmallWord(parts[last]))) parts[last] = StringUtil._capitalizeFirstLetter(parts[last]); source = parts.join(' '); if (StringUtil.contains(source, ': ')) { var i:int = -1; parts = source.split(': '); while (++i < parts.length) parts[i] = StringUtil._capitalizeFirstLetter(parts[i]); source = parts.join(': '); } return source; } protected static function _checkWords(source:String, delimiter:String, checkForDashes:Boolean = false, lowerCaseSmallWords:Boolean = false):String { var words:Array = source.split(delimiter); var l:int = words.length; var word:String; while (l--) { word = words[l]; words[l] = StringUtil._checkWord(word, checkForDashes, lowerCaseSmallWords); } return words.join(delimiter); } protected static function _checkWord(word:String, checkForDashes:Boolean, lowerCaseSmallWords:Boolean):String { if (StringUtil._isIgnoredWord(word)) return word; if (lowerCaseSmallWords) if (StringUtil._isSmallWord(word)) return word.toLowerCase(); if (checkForDashes) { var dashes:Array = new Array('-', '–', '—'); var i:int = -1; var dashFound:Boolean; while (++i < dashes.length) { if (StringUtil.contains(word, dashes[i]) != 0) { word = StringUtil._checkWords(word, dashes[i], false, true); dashFound = true; } } if (dashFound) return word; } return StringUtil._capitalizeFirstLetter(word); } protected static function _isIgnoredWord(word:String):Boolean { var periodIndex:int = word.indexOf('.'); var upperIndex:int = StringUtil.indexOfUpperCase(word); if (periodIndex != -1 && periodIndex != word.length - 1 || upperIndex != -1 && upperIndex != 0) return true; return false; } protected static function _isSmallWord(word:String):Boolean { return StringUtil.SMALL_WORDS.indexOf(StringUtil.getLettersFromString(word).toLowerCase()) > -1; } protected static function _capitalizeFirstLetter(source:String):String { var i:int = -1; while (++i < source.length) if (!StringUtil.isPunctuation(source.charAt(i))) return StringUtil.replaceAt(source, i, source.charAt(i).toUpperCase()); return source; } /** Creates an "universally unique" identifier (RFC 4122, version 4). @return Returns an UUID. */ public static function uuid():String { const specialChars:Array = new Array('8', '9', 'A', 'B'); return StringUtil.createRandomIdentifier(8, 15) + '-' + StringUtil.createRandomIdentifier(4, 15) + '-4' + StringUtil.createRandomIdentifier(3, 15) + '-' + specialChars[NumberUtil.randomIntegerWithinRange(0, 3)] + StringUtil.createRandomIdentifier(3, 15) + '-' + StringUtil.createRandomIdentifier(12, 15); } /** Creates a random identifier of a specified length and complexity. @param length: The character length of the random identifier. @param radix: The number of unique/allowed values for each character (61 is the maximum complexity). @return Returns a random identifier. @usageNote For a case-insensitive identifier pass in a maxradix
of 35, for a numberic identifier pass in a maxradix
of 9. */ public static function createRandomIdentifier(length:uint, radix:uint = 61):String { const characters:Array = new Array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'); const id:Array = new Array(); radix = (radix > 61) ? 61 : radix; while (length--) { id.push(characters[NumberUtil.randomIntegerWithinRange(0, radix)]); } return id.join(''); } /** Detects URLs in a String and wraps them in a link. @param source: String in which to automatically wrap links around URLs. @param window: The browser window or HTML frame in which to display the URL. @param className: An optional CSS class name to add to the link. You can specify multiple classes by seperating the class names with spaces. @return Returns the String with any URLs wrapped in a link. @see Read more about the regular expression used by this method. */ public static function autoLink(source:String, window:String = "_blank", className:String = null):String { const pattern:RegExp = new RegExp('(?i)\\b((?:[a-z][\\w-]+:(?:/{1,3}|[a-z0-9%])|www\\d{0,3}[.]|[a-z0-9.\\-]+[.][a-z]{2,4}/)(?:[^\\s()<>]+|\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\))+(?:\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\)|[^\\s`!()\\[\\]{};:\'".,<>?«»“”‘’]))', 'g') className = (className != "" && className != null) ? ' class="' + className + '"' : ''; window = (window != null) ? ' target="' + window + '"' : ''; return source.replace(pattern, '$1'); } /** Converts all applicable characters to HTML entities. @param source: String to convert. @return Returns the converted string. */ public static function htmlEncode(source:String):String { return new XML(new XMLNode(XMLNodeType.TEXT_NODE, source)).toXMLString(); } /** Converts all HTML entities to their applicable characters. @param source: String to convert. @return Returns the converted string. */ public static function htmlDecode(source:String):String { return new XMLDocument(source).firstChild.nodeValue; } /** Determines if String is only comprised of punctuation characters (any character other than the letters or numbers). @param source: String to check. @param allowSpaces: Indicates to count spaces as punctuationtrue
, or not tofalse
. @return Returnstrue
if String is only punctuation; otherwisefalse
. */ public static function isPunctuation(source:String, allowSpaces:Boolean = true):Boolean { if (StringUtil.getNumbersFromString(source).length != 0 || StringUtil.getLettersFromString(source).length != 0) return false; if (!allowSpaces) return source.split(' ').length == 1; return true; } /** Determines if String is only comprised of upper case letters. @param source: String to check. @return Returnstrue
if String is only upper case characters; otherwisefalse
. @usageNote This function counts numbers, spaces, punctuation and special characters as upper case. */ public static function isUpperCase(source:String):Boolean { if (source != source.toUpperCase()) return false; return true; } /** Determines if String is only comprised of lower case letters. @param source: String to check. @return Returnstrue
if String is only lower case characters; otherwisefalse
. @usageNote This function counts numbers, spaces, punctuation and special characters as lower case. */ public static function isLowerCase(source:String):Boolean { if (source != source.toLowerCase()) return false; return true; } /** Determines if String is only comprised of numbers. @param source: String to check. @return Returnstrue
if String is a number; otherwisefalse
. */ public static function isNumber(source:String):Boolean { var trimmed:String = StringUtil.trim(source); if (trimmed.length < source.length || source.length == 0) return false; return !isNaN(Number(source)); } /** Searches the String for an occurrence of an upper case letter. @param source: String to search for a upper case letter. @return The index of the first occurrence of a upper case letter or-1
. */ public static function indexOfUpperCase(source:String, startIndex:uint = 0):int { var letters:Array = source.split(''); var i:int = startIndex - 1; while (++i < letters.length) if (letters[i] == letters[i].toUpperCase() && letters[i] != letters[i].toLowerCase()) return i; return -1; } /** Searches the String for an occurrence of a lower case letter. @param source: String to search for a lower case letter. @return The index of the first occurrence of a lower case letter or-1
. */ public static function indexOfLowerCase(source:String, startIndex:uint = 0):int { var letters:Array = source.split(''); var i:int = startIndex - 1; while (++i < letters.length) if (letters[i] == letters[i].toLowerCase() && letters[i] != letters[i].toUpperCase()) return i; return -1; } /** Returns all the numeric characters from a String. @param source: String to return numbers from. @return String containing only numbers. */ public static function getNumbersFromString(source:String):String { var pattern:RegExp = /[^0-9]/g; return source.replace(pattern, ''); } /** Returns all the letter characters from a String. @param source: String to return letters from. @return String containing only letters. */ public static function getLettersFromString(source:String):String { var pattern:RegExp = /[[:digit:]|[:punct:]|\s]/g; return source.replace(pattern, ''); } /** Determines if String contains search String. @param source: String to search in. @param search: String to search for. @return Returns the frequency of the search term found in source String. */ public static function contains(source:String, search:String):uint { var pattern:RegExp = new RegExp(search, 'g'); return source.match(pattern).length; } /** Strips whitespace (or other characters) from the beginning of a String. @param source: String to remove characters from. @param removeChars: Characters to strip (case sensitive). Defaults to whitespace characters. @return String with characters removed. */ public static function trimLeft(source:String, removeChars:String = StringUtil.WHITESPACE):String { var pattern:RegExp = new RegExp('^[' + removeChars + ']+', ''); return source.replace(pattern, ''); } /** Strips whitespace (or other characters) from the end of a String. @param source: String to remove characters from. @param removeChars: Characters to strip (case sensitive). Defaults to whitespace characters. @return String with characters removed. */ public static function trimRight(source:String, removeChars:String = StringUtil.WHITESPACE):String { var pattern:RegExp = new RegExp('[' + removeChars + ']+$', ''); return source.replace(pattern, ''); } /** Strips whitespace (or other characters) from the beginning and end of a String. @param source: String to remove characters from. @param removeChars: Characters to strip (case sensitive). Defaults to whitespace characters. @return String with characters removed. */ public static function trim(source:String, removeChars:String = StringUtil.WHITESPACE):String { var pattern:RegExp = new RegExp('^[' + removeChars + ']+|[' + removeChars + ']+$', 'g'); return source.replace(pattern, ''); } /** Removes additional spaces from String. @param source: String to remove extra spaces from. @return String with additional spaces removed. */ public static function removeExtraSpaces(source:String):String { var pattern:RegExp = /( )+/g; return StringUtil.trim(source.replace(pattern, ' '), ' '); } /** Removes tabs, linefeeds, carriage returns and spaces from String. @param source: String to remove whitespace from. @return String with whitespace removed. */ public static function removeWhitespace(source:String):String { var pattern:RegExp = new RegExp('[' + StringUtil.WHITESPACE + ']', 'g'); return source.replace(pattern, ''); } /** Removes characters from a source String. @param source: String to remove characters from. @param remove: String describing characters to remove. @return String with characters removed. */ public static function remove(source:String, remove:String):String { return StringUtil.replace(source, remove, ''); } /** Replaces target characters with new characters. @param source: String to replace characters from. @param remove: String describing characters to remove. @param replace: String to replace removed characters. @return String with characters replaced. */ public static function replace(source:String, remove:String, replace:String):String { return source.split(remove).join(replace); } /** Removes a character at a specific index. @param source: String to remove character from. @param position: Position of character to remove. @return String with character removed. */ public static function removeAt(source:String, position:int):String { return StringUtil.replaceAt(source, position, ''); } /** Replaces a character at a specific index with new characters. @param source: String to replace characters from. @param position: Position of character to replace. @param replace: String to replace removed character. @return String with character replaced. */ public static function replaceAt(source:String, position:int, replace:String):String { var parts:Array = source.split(''); parts.splice(position, 1, replace); return parts.join(''); } /** Adds characters at a specific index. @param source: String to add characters to. @param position: Position in which to add characters. @param addition: String to add. @return String with characters added. */ public static function addAt(source:String, position:int, addition:String):String { var parts:Array = source.split(''); parts.splice(position, 0, addition); return parts.join(''); } /** Counts the number of words in a String. @param source: String in which to count words. @return The amount of words. */ public static function getWordCount(source:String):uint { return StringUtil.removeExtraSpaces(StringUtil.trim(source)).split(' ').length; } /** Extracts all the unique characters from a source String. @param source: String to find unique characters within. @return String containing unique characters from source String. */ public static function getUniqueCharacters(source:String):String { var unique:String = ''; var i:uint = 0; var char:String; while (i < source.length) { char = source.charAt(i); if (unique.indexOf(char) == -1) unique += char; i++; } return unique; } } }
Summary
-
WHITESPACE
: String
- Whitespace characters (space, tab, new line and return).
-
SMALL_WORDS
: Array
- The default list of small/short words to be used with toTitleCase.
-
pluralize
(count:int, singular:String, plural:String = null) : String
- Determines if the singular or plural versions of a noun should be used given a number.
-
truncate
(source:String, trailing:uint, leading:uint, separator:String = "") : String
- Returns a shortened String.
-
toTitleCase
(source:String, lowerCaseSmallWords:Boolean = true) : String
- Transforms source String to title case.
-
uuid
() : String
- Creates an "universally unique" identifier (RFC 4122, version 4).
-
createRandomIdentifier
(length:uint, radix:uint = 61) : String
- Creates a random identifier of a specified length and complexity.
-
autoLink
(source:String, window:String = "_blank", className:String = null) : String
- Detects URLs in a String and wraps them in a link.
-
htmlEncode
(source:String) : String
- Converts all applicable characters to HTML entities.
-
htmlDecode
(source:String) : String
- Converts all HTML entities to their applicable characters.
-
isPunctuation
(source:String, allowSpaces:Boolean = true) : Boolean
- Determines if String is only comprised of punctuation characters (any character other than the letters or numbers).
-
isUpperCase
(source:String) : Boolean
- Determines if String is only comprised of upper case letters.
-
isLowerCase
(source:String) : Boolean
- Determines if String is only comprised of lower case letters.
-
isNumber
(source:String) : Boolean
- Determines if String is only comprised of numbers.
-
indexOfUpperCase
(source:String, startIndex:uint) : int
- Searches the String for an occurrence of an upper case letter.
-
indexOfLowerCase
(source:String, startIndex:uint) : int
- Searches the String for an occurrence of a lower case letter.
-
getNumbersFromString
(source:String) : String
- Returns all the numeric characters from a String.
-
getLettersFromString
(source:String) : String
- Returns all the letter characters from a String.
-
contains
(source:String, search:String) : uint
- Determines if String contains search String.
-
trimLeft
(source:String, removeChars:String = StringUtil.WHITESPACE) : String
- Strips whitespace (or other characters) from the beginning of a String.
-
trimRight
(source:String, removeChars:String = StringUtil.WHITESPACE) : String
- Strips whitespace (or other characters) from the end of a String.
-
trim
(source:String, removeChars:String = StringUtil.WHITESPACE) : String
- Strips whitespace (or other characters) from the beginning and end of a String.
-
removeExtraSpaces
(source:String) : String
- Removes additional spaces from String.
-
removeWhitespace
(source:String) : String
- Removes tabs, linefeeds, carriage returns and spaces from String.
-
remove
(source:String, remove:String) : String
- Removes characters from a source String.
-
replace
(source:String, remove:String, replace:String) : String
- Replaces target characters with new characters.
-
removeAt
(source:String, position:int) : String
- Removes a character at a specific index.
-
replaceAt
(source:String, position:int, replace:String) : String
- Replaces a character at a specific index with new characters.
-
addAt
(source:String, position:int, addition:String) : String
- Adds characters at a specific index.
-
getWordCount
(source:String) : uint
- Counts the number of words in a String.
-
getUniqueCharacters
(source:String) : String
- Extracts all the unique characters from a source String.
Constants
WHITESPACE
Whitespace characters (space, tab, new line and return).
Class properties
SMALL_WORDS
The default list of small/short words to be used with toTitleCase.
Class methods
addAt
Adds characters at a specific index.
- String with characters added.
autoLink
Detects URLs in a String and wraps them in a link.
- Returns the String with any URLs wrapped in a link.
contains
Determines if String contains search String.
- Returns the frequency of the search term found in source String.
createRandomIdentifier
Creates a random identifier of a specified length and complexity.
- Returns a random identifier.
-
For a case-insensitive identifier pass in a max
radix
of 35, for a numberic identifier pass in a maxradix
of 9.
getLettersFromString
Returns all the letter characters from a String.
- String containing only letters.
getNumbersFromString
Returns all the numeric characters from a String.
- String containing only numbers.
getUniqueCharacters
Extracts all the unique characters from a source String.
- String containing unique characters from source String.
getWordCount
Counts the number of words in a String.
- The amount of words.
htmlDecode
Converts all HTML entities to their applicable characters.
- Returns the converted string.
htmlEncode
Converts all applicable characters to HTML entities.
- Returns the converted string.
indexOfLowerCase
Searches the String for an occurrence of a lower case letter.
-
The index of the first occurrence of a lower case letter or
-1
.
indexOfUpperCase
Searches the String for an occurrence of an upper case letter.
-
The index of the first occurrence of a upper case letter or
-1
.
isLowerCase
Determines if String is only comprised of lower case letters.
-
Returns
true
if String is only lower case characters; otherwisefalse
.
- This function counts numbers, spaces, punctuation and special characters as lower case.
isNumber
Determines if String is only comprised of numbers.
-
Returns
true
if String is a number; otherwisefalse
.
isPunctuation
Determines if String is only comprised of punctuation characters (any character other than the letters or numbers).
true
, or not to false
. -
Returns
true
if String is only punctuation; otherwisefalse
.
isUpperCase
Determines if String is only comprised of upper case letters.
-
Returns
true
if String is only upper case characters; otherwisefalse
.
- This function counts numbers, spaces, punctuation and special characters as upper case.
pluralize
Determines if the singular or plural versions of a noun should be used given a number.
-
trace(StringUtil.pluralize(1, "Dog")); // Traces "Dog" trace(StringUtil.pluralize(3, "Dog")); // Traces "Dogs" trace(StringUtil.pluralize(2, "Child", "Children")); // Traces "Children"
- The singular or plural version of the word.
remove
Removes characters from a source String.
- String with characters removed.
removeAt
Removes a character at a specific index.
- String with character removed.
removeExtraSpaces
Removes additional spaces from String.
- String with additional spaces removed.
removeWhitespace
Removes tabs, linefeeds, carriage returns and spaces from String.
- String with whitespace removed.
replace
Replaces target characters with new characters.
- String with characters replaced.
replaceAt
Replaces a character at a specific index with new characters.
- String with character replaced.
toTitleCase
Transforms source String to title case.
true
, or to capitalized small words false
. - String with capitalized words.
trim
Strips whitespace (or other characters) from the beginning and end of a String.
- String with characters removed.
trimLeft
Strips whitespace (or other characters) from the beginning of a String.
- String with characters removed.
trimRight
Strips whitespace (or other characters) from the end of a String.
- String with characters removed.
truncate
Returns a shortened String.
-
trace(StringUtil.truncate('Mississippi', 2, 3, '...')); // Traces "Mis...pi"
- The shortened String.
uuid
Creates an "universally unique" identifier (RFC 4122, version 4).
- Returns an UUID.


This site was created to give you a sense of how many words you're using in a specific line of text. This may be advantageous to you if you are editing a draft of a paper and need to know what words are used too frequently, and other word options to use. This is an open-source project designed using Django 2.02 and Python 3.6. Contributions can, and should, be made to GitHub.
Try it!


DroneForPHP is a tool to generate configuration files for drone.io, a continuous integration tool for PHP that uses Docker to run third-party software for code testing.
This site curates a list of that software that the author finds useful in his projects, and incorporates a tool to generate a drone configuration file (known as a .drone.yml file) to use that software.
For installation instructions for drone.io, see the official drone.io guide, here.
There are plenty of other code quality tools available, which may be more appropriate for your requirements. However, this tool is based on the PHP tools I find helpful and use.
The whole of DroneForPHP is hosted on github under MIT licence.


{% extends 'base.html' %} {% block head %}
The Education Students' Association(EDSA-Legon) was officially established/registered on the 4th of November 2016 as an Association in the University of Ghana, under the auspices of the then Dean of Student Affairs. As part of getting the Education program well grounded and known within the University of Ghana community, a core group of students who formed the pioneer badge of the Education program for the 2015/2016 academic year, worked towards the formation of the now established Association.
The whole process was led by the Association's first ever President, Mr. Wisdom Kwame Kudjordji and spanned the latter days of September 2016 and the 4th of November 2016. The Association started with a population of about 180 students and has since increased to over 500 students. Two Faculty members, Dr. Paul Butakor and Dr. Yaa Cole have served as the Association's Patron since its formation.
Below is the list of the first set of executives for the Association, who were officially elected to serve for the 2016/2017 academic year (following the Association's pioneer period):
The purpose of EDSA is in three(3) sections:
The motto of EDSA-UG is one that well reflects the purpose of the Association and clearly states what it seeks to achieve .The motto is:
'Inspiring Minds, Enhancing Development'
The Recent executive list is currntly unavailable
{% endfor %}


WITNESS LIST State Affairs Committee March 27, 2003 - 8:00A SB 10 FOR: Benning, Henry (Henry Benning Associates, and others), El Paso, TX Clark, Jeffrey (National Federation of Independent Business), Austin, TX Davis, Will (Texas Association of Life & Health Insurers), Austin, TX Glenn, Eric (Humana, Inc.), Austin, TX Rohm, Wanda (NFIB/Presto Printing), Austin, TX Shepard, Janelle (Texas Citizen Action Network), Austin, TX Springer, Stacy (Texas Small Business Alliance in Austin), Austin, TX Thompson, Jay (TALHI), Austin, TX Warner, Freddy (Automotive Wholesalers of Texas), Austin, TX AGAINST: McGiffert, Lisa (Consumers Union), Austin, TX Thompson, Mike (Self), Austin, TX Registering, but not testifying: For: Baum, Walt (Association of Electric Companies of Texas), Austin, TX Bellsnyder, Luke (Texas Association of Business), Austin, TX Blanton, Tom (Texas Automobile Dealers Association), Austin, TX Christian, George Scott (Texas Civil Justice League), Austin, TX Dennis, Rachel (Texas Bankers Association), Austin, TX Dipprey, Ron (Texas Chemical Council, Associated Chemical Industry of TX, Greater Austin Crime Commission), Austin, TX Evans, Charles (Texas Court Reporters Association, Trinity River Authority), Austin, TX Fitzgerald, Amy (Texas Electric Cooperatives), Austin, TX French, Mike (Texas Manufactured Housing Association), Austin, TX Garey, Glen (Texas Restaurant Association), Austin, TX Grant, Kathy (Texas Cable & Telecommunications Association), Austin, TX Grimm, James (Texas Poultry Federation), Round Rock, TX Heydinger, Ted (Texans for Economic Progress), Austin, TX Hofmann, John (Brazos River Authority), Waco, TX Horton, Ken (Texas Pork Producers Association), Austin, TX Huffman, Jeff (Texas Credit Union League), Dallas, TX Jennings, Randy (Centex IUC), Austin, TX Kester, Steve (American Electronics Association), Austin, TX Klingler, Hans (Texas Association of Voluntary Hospitals, Texas Association of Goodwills), Austin, TX Lively, Lance (AGC of Texas), Austin, TX McKinney, Mike (Wholesale Beer Distributors of Texas), Austin, TX Mintz, David (Texas Apartment Association), Austin, TX Newton, Chris (Texas Petroleum Marketers & Convenience Store Association), Austin, TX Noble, Shannon (Texas Air Conditioning Contractors Association), Austin, TX Norman, Scott (Texas Association of Builders), Austin, TX Oakley, Keith (Associated Security Services & Investigators of TX, TX Municipal Police Association), Austin, TX Oakley, Keith (Texas Association of Licensed Investigators), Dallas, TX Oates, John (Aetna), Austin, TX Owen, Bob (Texas Society of CPAs), Austin, TX Pollard, Mike (Texas Association of Life & Health Insurers), Austin, TX Posey, Dan (Scott and White Health Plan), Temple, TX Prough, Andrew (Citizens Commission on Human Rights), Austin, TX Robbins, Dean (Texas Water Conservation Association), Austin, TX Ross, Susan (Texas Dental Association), Austin, TX Rummel, Leah (Texas Association of Health Plans), Austin, TX Saegert, Carolyn Merchan (Texas Credit Union League), Austin, TX Scurlock, Steve (Independent Bankers Association of Texas), Austin, TX Spilman, Tom (Wholesale Beer Distrtibutors), Austin, TX Taylor, Des (Texas Association of Insurance & Financial Advisors), Austin, TX Turner, Bob (Texas Sheep & Goat Raisers Association), Austin, TX Turner, Jill (Texas Farm Bureau), Austin, TX Warren, Jim (Council of Consulting Engineers), Austin, TX Williams, Tony (Texas Cotton Ginners' Association), Austin, TX Wilson, Ross (Texas Cattle Feeders Association), Amarillo, TX Against: De la Garza, Veronica (American Diabetes Association), Austin, TX On: Bingham, Bill (Texas Department of Insurance), Austin, TX Stuart, Charles (Blue Cross Blue Shield of Texas), Austin, TX Suiter, Kim (National MS Society), Austin, TX SB 116 FOR: Caldwell, Wendy (Federation of Families for Childrens Mental), Rowlett, TX Derr, Patti (Self), Austin, TX Dolphay, Julia (Self), Rowlett, TX Fette, Claudette (Federation of Families), Denton, TX Gantt, Melanie (Mental Health Association in Texas), Austin, TX Gionfridelo, Pam (Self), Austin, TX Gothart-Barron, Sherri (Self), Austin, TX McMurrough, Peggy (Self), Jasper, TX Parker, Mark (Self), Round Rock, TX Yate, Dr. Deanna (Texas Psychological Association), San Antonio, TX AGAINST: Breeding, John (Texans for Safe Education), Spicewood, TX Davis, Will (Texas Association of Life & Health Insurers), Austin, TX McIntosh, Glenn (Suicide and Violence Education Resource Services), Cedar Park, TX Springer, Stacy (Texas Small Business Alliance in Austin), Austin, TX Registering, but not testifying: For: Becker, Dr. E. (Self) Bresnen, Steve (Texas Society of Psychiatric Physicians), Austin, TX Garnett, Dr. Richard (Self), Fort Worth, TX Hennigan, Mary (Texas Occupational Therapy Association), Austin, TX Kern, Diana (Self), Cedar Creek, TX Kolodzey, Patricia (Texas Hospital Association), Austin, TX Kroll, Carrie (Texas Pediatric Society), Austin, TX Lovelace, Joe (National Alliance for the Mentally Ill), Austin, TX McGiffert, Lisa (Consumers Union), Austin, TX Misclez, Amy (The ARC of Texas), Austin, TX Sperry, Bryan (Children's Hospital Association of Texas), Austin, TX Thyssen, Monica (Advocacy Incorporated), Austin, TX Against: Bellsnyder, Luke (Texas Association of Business), Austin, TX Moore, Norman (Self), Austin, TX Prough, Andrew (Citizens Commission on Human Rights), Austin, TX SB 382 FOR: Stephens, Michael "Spanky" (Texas State Athletic Trainers Association), Austin, TX AGAINST: Eiland, Gordon (Texas Physical Therapy Association), Austin, TX Registering, but not testifying: For: Matthews, Randell (Texas State Athletic Trainers' Association), San Angelo, TX Against: Bellsnyder, Luke (Texas Association of Business), Austin, TX Clark, Jeffrey (NFIB National Federation of Independent Business), Austin, TX Fette, Claudette (Self), Denton, TX Hennigan, Mary (Texas Occupational Therapy Association), Austin, TX SB 541 FOR: Bellsnyder, Luke (Texas Association of Business), Austin, TX Clark, Jeffrey (NFIB National Federation of Independent Business), Austin, TX Glenn, Eric (Humana, Inc.), Austin, TX Manross, Lee (Texas Association of Health Underwriters), Austin, TX McCandless, Pati (UNICARE), Austin, TX Springer, Stacy (Texas Small Business Alliance in Austin), Austin, TX Thompson, Jay (TALHI), Austin, TX AGAINST: Gunn, Dr. Sheila (American Diabetes Association), Houston, TX Headrick, Kelly (American Cancer Society), Austin, TX Mayes, Jr., Wendell (Self), Austin, TX McGiffert, Lisa (Consumers Union), Austin, TX Suiter, Kim (National MS Society), Austin, TX Thompson, Mike (Self), Austin, TX Zamudio, Virginia (A.D.A. & A.A.D.E.), San Antonio, TX Registering, but not testifying: For: Henning, Lori (Goodwills of Texas), Austin, TX Oates, John (Aetna), Austin, TX Prough, Andrew (Citizens Commission on Human Rights), Austin, TX Rummel, Leah (Texas Association of Health Plans), Austin, TX Taylor, Des (Texas Association Insurance & Financial Advisors), Austin, TX Against: Bresnen, Steve (Texas Society of Psychiatric Physicians), Austin, TX De La Garza, Veronica (American Diabetes Association), Austin, TX Hanna, Jennifer (Self), Austin, TX Noble, Shannon (Women's Issues Network), Dallas, TX Ramsey, Lesley (Texas Campaign for Women's Health), Austin, TX Wolter, David (Self), Austin, TX On: Bingham, Bill (Texas Department of Insurance), Austin, TX SB 563 FOR: Garnett, Dr. Richard (Self), Fort Worth, TX Herndon, Dr. Patrick H. (Self), Spicewood, TX AGAINST: Thompson, Jay (TALHI), Austin, TX Registering, but not testifying: For: Lovelace, Joe (National Alliance for the Mentally Ill), Austin, TX Sorrenson, Dr. Laurie (Self), Austin, TX Against: Bellsnyder, Luke (Texas Association of Business), Austin, TX Clark, Jeffrey (National Federation of Independent Business), Austin, TX On: Bingham, Bill (Texas Department of Insurance), Austin, TX SB 857 FOR: Sorrenson, Dr. Laurie (Texas Optometric Association), Austin, TX AGAINST: Davis, Will (Texas Association Life & Health Insurers), Austin, TX Registering, but not testifying: For: Avery, B.J. (Texas Optometric Association), Austin, TX Cornett, John Todd (Texas Optometry), Amarillo, TX Davis, Mark (Texas Optometric Association), San Antonio, TX Goff, Kathleen (Texas Optometric Association), El Paso, TX Kirkpatrick-Hartman, Amy (Texas Optometric Association), Victoria, TX Neely, Dennis (Texas Optometric Association), Midland, TX Nelson, Jim (Golden Rule Insurance Company), Austin, TX Newman, Clarke (Texas Optometric Association), Dallas, TX Niemann, Fred (Texas Optometric Association), Austin, TX Against: Glenn, Eric (Humana, Inc.), Austin, TX


A universal asynchronous receiver/transmitter(UART), is a type of "asynchronous receiver/transmitter", a piece of computer hardware that translates data between parallel and serial forms.
A UART usually contains the following components:
USIC_UART_UART001 App provides non reentrant API to configure the USIC channel and Read/Write APIs/Macros which can be used for achieving a non RTOS use case. Communication may be "full duplex" (both send and receive at the same time) or "half duplex" (devices take turns transmitting and receiving) or "loop back mode" (Output signal is connected to the receiver input of same UART channel).
App provides non reentrant APIs to achieve a UART communication usecase using a USIC channel.


Daughter of a Katipunan leader in Cavite, who was one of the Trece Martirez,
executed by the Spanish officials in 1896. Born in Trozo, Manila, on July 18, 1875.
She joined the Katipunan in July 1893, one of the first women to have done so.
She also kept important documents of the Katipunan. Died on October 25, 1950.


I'm Mathijs a mostly-self-thought software developer. At least that's how it started, when I got my first job as developer I learned the basics of OOP, I spend nearly a year before I left to continue with my studies. During my studies I made an data-analysis tool for specific software during my internship and continued to work at this company as a while as Android developer, leaning more about embedded software. Besides the work and the studies (in which I actually also learned lots of different languages besides the main programme) I've always liked spending some of my time experimenting with new technologies. Note, that new does not mean it has to be bleeding edge, I meant things which are new to me. Below Is a list of some of the thing's I feel confident about.
PHP is the language I've spend most time working in, especially because it was my goto language to start learning with.
However I do feel more confident when I spend time working in Java, the language is strong robust and used for many different solutions.
From small devices to phones, websites and even helps space missions.
I've written my first lines of Java developing Android apps.
Besides that, I had the honor of filling up my bachelor's Minor learning Java-EE taught by Consultants from Info-Support.
Besides the basics of Java + Java Enterprise Edition and it's usages there were more things on the agenda.
During this period we worked constantly in Scrum and developed every function making use of TDD.
They explained the theory of Software Craftmanship and to make us remember had us take the "The Clean Coder" and "Clean Code" books by Uncle Bob.
Thanks again if you end up reading this, I learned loads.
Adding these in the same block, If you can write HTML but don't know what CSS is about there might be something wrong with you ;-). I started my mastering of software development by making simple websites in HTML, and soon applied CSS. This started as a hobby, and made many never released or finished websites with information about hobbies and games I played. Over the years I never stopped learning new technologies, this includes "new" standards, like CSS3 and HTML5. I feel rather confident writing HTML and CSS and barely ever have to go to my friend Stackoverflow.
As many developers I met back in the day I started working, I used to hate Javascript, I felt it wasn't stable and might crash on different browsers, also there were loads of people disabling this in browsers.
I ended up doing lots of work in libraries like ExtJs (Sencha) and started to feel more confident and attached to the language.
Nowadays I tend to keep up to date about the development, that's why this website is written in Angular2 using TypeScript,
a nicely typed language which at this time is being converted to regular Javascript using Traceur.
Libraries I spend time developing in: Prototype, Jquery, ExtJs, AngularJS, AngularJS 2.
Besides these libraries I also worked a little with command line tools, like NodeJS, Grunt, Gulp, Bower etc.
I'm not a big fan of Objective-C but I love Swift, however for getting around in iOS development you need basic knowledge of the language and API's it offers. During my graduation I had no help from other people with experience in these languages, so after some time working with Objective-C I did a small test how hard it would be to change the current code to swift. Without knowledge I wrote the 4 classes I had into swift within a few hours, and kept these like that. I love the Swiftness of development and forced type safety Swift enforces on the developer and working with the language felt like writing code in Google Go
When I first head of Google Go I had no idea what it was like, after a few months I started toying around with it since I needed to know! (I'm a huge Google Fanboy).  I experimented a little with Go, and actually have a program which would work as host for a blogging site which I want to get out there soon. A while back I applied for a Job which actually would allow me to become a Go Developer, but I ended up rejecting since I would mostly be doing Front-End stuff which was not worth the risk and travel. The program I wrote as a test however, is available on my Github Page and I feel happy sharing it with others.
For other skills I feel like I know something about, You could check out my Linkedin where I tend to keep track of my skills. Some of these might seem unimportant for me to mention, however it might be that someone else likes to read about them.
I like to see myself as a Social and outgoing person, I tend to try and keep most of my team members smiling as we go but I could learn to give better commitments on deadlines avoiding dissapointment. I love learning new things and feel like I can do this in a rapid pace, and improving my skills in the stuff I know about and keeping up to date with developments. I can be quite easy to distract and I prefer to do things Ad-Hoc instead of planned out before me a little chaos can be found in most things I say and write but I try to make things clear. Because of my planning skills I like working in a Scrum based environment, besides being forced to work on smaller tasks, you plan once and go for the sprint making it easier to keep your planning in order. I prefer working in teams so I can learn from others and hopefully let other people learn from me as well, I get satisfaction out of helping others, but I do not ask for help that quickly.
So I've written some parts about how I feel like I cope in a professional environment and what I do to keep up to date at home. I do however do other stuff as well!
I do love myself a good glass of beer, this does not mean I get drunk on liters of beer every night but I like to taste different kinds. If you are interested in my latest tastes, you could follow me on Untappd. Besides drinking beer me and my girlfriend try to master the art of brewing. When we have some spare time on the weekends, we put the giant kettle on the stove, grind some barley and cook for a couple of hours. I'm planning to post on here when something interesting happens in this world.
At the time I'm writing this I unfortunately barely have any spare time, all my evenings and most of the weekend goes into my study.
When this time passes in the future I'd like to take up Mountain biking and Reading again.
All the time left, I spend petting our cat Orval Stroganoff.


You have not created the subscription. Therefore you cannot change the plan.
No plan configured, this app has unlimited usage.
{{plan.maxApiCalls | sqxKNumber}} API Calls
{{plan.maxAssetSize | sqxFileSize}} Storage
{{plan.maxContributors}} Contributors


Example Binary Tree
Visual Aid
Example Code
Terms
- tree - graph with no cycles
- binary tree - tree where nodes have at most 2 nodes
- root - the ultimate parent, the single node of a tree that can access every other node through edges; by definition the root will not have a parent
- internal node - a node that has children
- leaf - a node that does not have any children
- path - a series of nodes that can be traveled through edges - for example A, B, E is a path through the above tree
Search Patterns
- Breadth First Search - Check all nodes at a level before moving down a level
- Think of this of searching horizontally in rows
- Depth First Search - Check the depth as far as it goes for one child, before moving on to the next child.
- Think of this as searching vertically in diagonals
- Pre-Order Traversal - Access the data of the current node, recursively visit the left sub tree, recursively visit the right sub tree
- All the way to the left, top down, going right after other options have already been logged.
- In-Order Traversal - Recursively visit the left sub tree, access the data of the current node, recursively visit the right sub tree
- In the order they were the “current root”, the actual return order of the recursive calls.
- Post-Order Traversal - Recursively visit the left sub tree, recursively visit the right sub tree, access the data of the current node.
- Starting with the bottom most nodes working up through the tree
Constraints
- Binary trees have at most two children per node
- Given any node of the tree, the values on the left must be strictly less than that node
- Given any node of the tree, the values on the right must be strictly greater than or equal to that node
- Given these constraints a binary tree is necessarily a sorted data structure
- The worst binary trees devolve into a linked list, the best are height balanced (think branching).
PseudoCode For Insertion
- Create a new node
- Start at the root
- Check if there is a root
- If not the root becomes the new node
- If there is a root check if the value of the new node is equal to, greater then, or less then the value of the root
- If it is greater or equal to
- Check to see if there is a node to the right
- If there is, move to the new node and continue with the node to the right as the subtree root
- If there is not, add the new node as the right property of the current node
- If it is smaller
- Check to see if there is a node to the left
- If there is, move to the new node and continue with the node to the left as the subtree root
- If there is not, add the new node as the left property of the current node
PseudoCode For Search Of A single Item
- Start at the root
- Check if there is a root
- If not, there is nothing in the tree, so the search is over
- If there is a root, check if the value of the root is equal to, greater then, or less then the value were looking for;
- If it is equal to the value
- We found what we are searching for
- If it is less than the value
- Check to see if there is a node to the left
- If there isn’t
- the value isn’t in our tree
- If there is
- repeat these steps with the node to the left as the new subtree root
- If it is greater than the value
- Check to see if there is a node to the right
- If there isn’t
- the value isn’t in our tree
- If there is
- repeat these steps with the node to the right as the new subtree root
PseudoCode For Breadth First Search Traversal
- Create a queue class or use an array
- Create a variable to store the values of the nodes visited
- Place the root in the queue
- Loop as many times as there are items in the queue
- Dequeue a node
- If there is a left value to the node dequeued, add it to the queue
- If there is a right value to the node dequeued, add it to the queue
- Push the nodes value into the variable that stores nodes visited
PseudoCode For Depth First Search Traversal
Pre-Order
Iterative
- Create a stack class or use an array
- Push the root into the stack
- Create a variable to store the values of the nodes visited
- Do this as long as there is something on the stack
- Pop a node from the stack
- Push that nodes value into the variable that stores nodes visited.
- If there is a node to the right push it into the stack
- If there is a node to the left push it into the stack
- Return the variable storing the values
Recursive
- Create a variable to store the current root
- Push the value of current root to the variable storing the values
- If the current root has a left propety call the function on that the left property
- If the current root has a right propety call the function on that the right property
- Spread the current root, the left values, and the right values
In-Order
Iterative
- Create a stack class or use an array
- Create a variable to store the current root
- Create a variable to store the values of the nodes visited
- Create a loop
- While the current root exists
- push the current root to the call stack
- current root is equal to the left of current root
- if the stack is empty break out of the loop
- set a variable to equal the popped value of the stack
- push that variable into the variable that stores values
- set the current root to the right of the current loop
- Return the variable storing the values
Recursive
- Create a variable to store the current root
- Push the value of current root to the variable storing the values
- If the current root has a left propety call the function on that the left property
- If the current root has a right propety call the function on that the right property
- Spread the the left values, current root ,and the right values
Post-Order
Iterative
- Haven’t figured this one out yet.
Recursive
- Create a variable to store the current root
- Push the value of current root to the variable storing the values
- If the current root has a left propety call the function on that the left property
- If the current root has a right propety call the function on that the right property
- Spread the the left values, the right values, and current root
Example Binary Search Tree
class TreeNode {
constructor(val) {
this.val = val;
this.left = null;
this.right = null;
}
}
class BST {
constructor() {
this.root = null;
}
//Insert a new node
recursiveInsert(val, currentNode = this.root) {
if (!this.root) {
this.root = new TreeNode(val);
return this;
}
if (val < currentNode.val) {
if (!currentNode.left) {
currentNode.left = new TreeNode(val);
} else {
this.insert(val, currentNode.left);
}
} else {
if (!currentNode.right) {
currentNode.right = new TreeNode(val);
} else {
this.insert(val, currentNode.right);
}
}
}
iterativeInsert(val, currentNode = this.root) {
if (!this.root) {
this.root = new TreeNode(val);
return this;
}
if (val < currentNode.val) {
if (!currentNode.left) {
currentNode.left = new TreeNode();
} else {
while (true) {
if (val < currentNode.val) {
if (!currenNodet.left) {
currentNode.left = new TreeNode();
return this;
} else {
currentNode = currentNode.left;
}
} else {
if (!currentNode.right) {
currentNode.right = new TreeNode();
return this;
} else {
currentNode = currentNode.right;
}
}
}
}
}
}
//Search the tree
searchRecur(val, currentNode = this.root) {
if (!currentNode) return false;
if (val < currentNode.val) {
return this.searchRecur(val, currentNode.left);
} else if (val > currentNode.val) {
return this.searchRecur(val, currentNode.right);
} else {
return true;
}
}
searchIter(val) {
let currentNode = this.root;
while (currentNode) {
if (val < currentNode.val) {
currentNode = currentNode.left;
} else if (val > currentNode.val) {
currentNode = currentNode.right;
} else {
return true;
}
}
return false;
}
// Maybe works, who knows, pulled it off the internet....
deleteNodeHelper(root, key) {
if (root === null) {
return false;
}
if (key < root.val) {
root.left = deleteNodeHelper(root.left, key);
return root;
} else if (key > root.val) {
root.right = deleteNodeHelper(root.right, key);
return root;
} else {
if (root.left === null && root.right === null) {
root = null;
return root;
}
if (root.left === null) return root.right;
if (root.right === null) return root.left;
let currNode = root.right;
while (currNode.left !== null) {
currNode = currNode.left;
}
root.val = currNode.val;
root.right = deleteNodeHelper(root.right, currNode.val);
return root;
}
}
//Recursive Depth First Search
preOrderTraversal(root) {
if (!root) return [];
let left = this.preOrderTraversal(root.left);
let right = this.preOrderTraversal(root.right);
return [root.val, ...left, ...right];
}
preOrderTraversalV2(root) {
if (!root) return [];
let newArray = new Array();
newArray.push(root.val);
newArray.push(...this.preOrderTraversalV2(root.left));
newArray.push(...this.preOrderTraversalV2(root.right));
return newArray;
}
inOrderTraversal(root) {
if (!root) return [];
let left = this.inOrderTraversal(root.left);
let right = this.inOrderTraversal(root.right);
return [...left, root.val, ...right];
}
inOrderTraversalV2(root) {
if (!root) return [];
let newArray = new Array();
newArray.push(...this.inOrderTraversalV2(root.left));
newArray.push(root.val);
newArray.push(...this.inOrderTraversalV2(root.right));
return newArray;
}
postOrderTraversal(root) {
if (!root) return [];
let left = this.postOrderTraversal(root.left);
let right = this.postOrderTraversal(root.right);
return [...left, ...right, root.val];
}
postOrderTraversalV2(root) {
if (!root) return [];
let newArray = new Array();
newArray.push(...this.postOrderTraversalV2(root.left));
newArray.push(...this.postOrderTraversalV2(root.right));
newArray.push(root.val);
return newArray;
}
// Iterative Depth First Search
iterativePreOrder(root) {
let stack = [root];
let results = [];
while (stack.length) {
let current = stack.pop();
results.push(current);
if (current.left) stack.push(current.left);
if (current.right) stack.push(current.right);
}
return results;
}
iterativeInOrder(root) {
let stack = [];
let current = root;
let results = [];
while (true) {
while (current) {
stack.push(current);
current = current.left;
}
if (!stack.length) break;
let removed = stack.pop();
results.push(removed);
current = current.right;
}
return results;
}
//To-Do iterativePostOrder
//Breadth First Search
breadthFirstSearch(root) {
let queue = [root];
let result = [];
while (queue.length) {
let current = queue.shift();
if (current.left) queue.push(current.left);
if (current.right) queue.push(current.left);
current.push(result);
}
return result;
}
// Converting a Sorted Array to a Binary Search Tree
sortedArrayToBST(nums) {
if (nums.length === 0) return null;
let mid = Math.floor(nums.length / 2);
let root = new TreeNode(nums[mid]);
let left = nums.slice(0, mid);
root.left = sortedArrayToBST(left);
let right = nums.slice(mid + 1);
root.right = sortedArrayToBST(right);
return root;
}
}


{% extends 'base.html' %} {% block pagecss %} {% end %} {% block pagecontent %}
objectid
,
ra
, decl
, lcfname
, and columns with
active filter/sort conditions are always retrieved.
Use J2000 equatorial coordinates in either decimal or sexagesimal format and an optional search radius in arcminutes. The maximum search radius is 60 arcmin = 1.0 deg. If a search radius isn't specified, 5.0 arcmin will be used by default.
By default, results are returned in order of increasing distance (in arcsec) from the center coordinates.
[DD]D.ddd... [+-][D]D.ddd... DD.dd...
example: 289.0 45.0 10.0
HH:MM:SS.sss... [+-]DD:MM:SS.sss... DD.dd...
HH MM SS.sss... [+-]DD MM SS.sss... DD.dd...
example: 19 25 27.9129 +42 47 03.693 15.0
objectid
,
ra
, decl
, lcfname
, and columns with
active filter/sort conditions are always retrieved.
Full text search is useful for object names, variable type tags, object classification tags, and external object names (e.g. from SIMBAD if they're available). Queries use the SQLite FTS5 query syntax.
For an exact match to an object name, use
"object name"
.
To look up object names using the SIMBAD SESAME resolver, check the Look up object names using SESAME box. In this mode, you can also look up clusters and nebulae, etc. using their common names (Messier, NGC, etc.). The LCC-Server will then try to find all matching objects within a 1.0 degree radius centered on the reported SIMBAD coordinates.
ASAS AND NSVS
"ASAS J19"*
simbad_best_objtype:EB color_classes:RR*
objectid
,
ra
, decl
, lcfname
, and columns with
active filter/sort conditions are always retrieved.
This form lets you build a query based on the available columns in the database and the filters you choose. Filters may be chained together using AND/OR logic. You may also choose a column to sort the result-set rows in a particular order. This will be automatically added to the requested query columns.
objectid
,
ra
, decl
, lcfname
, and columns with
active filter/sort conditions are always retrieved.
The table below lists the most recently generated datasets from search queries, including your datasets and those made public by other users. See all available datasets for a full list or search for datasets below.
| Set ID | Objects | Query | Products | Last updated |
|---|
| time | query ID | status | message |
|---|


DfE enquiries
Central newsdesk 020 7783 8300
General enquiries 0370 000 2288
Press release
Over 400 academies are now open – double the figure open in May 2010.
Figures released today show momentum is building for the government’s flagship school reform. The government announced today that:
In addition, the Department is also working with academy sponsors who have targeted underperforming schools. Plans are advanced to reopen these schools as academies in the coming academic year.
Michael Gove today congratulated the schools becoming academies this term:
I am delighted that more schools are opening as academies this week, and are now free from central and local bureaucratic control.
Schools are taking up our offer to become academies because they recognise the huge benefits of being an academy - more autonomy, more power to teachers, and an opportunity to thrive, free from interference from government.
The Coalition believes that headteachers and teachers - not politicians and bureaucrats - know best how to run schools. That’s why all school now have the opportunity to become academies, with stronger schools supporting weaker ones.
Heads of the new academies today spoke of their excitement as their schools become academies this week.
Mike Crawshaw, Head of Debenham High School, Suffolk, said:
We’ve always worked hard to give our parents what they want - an outstanding school on their doorstep, with excellent teaching and the opportunities for their children to succeed, whatever their talents and interests. But as we’ve improved, expectations of what we do and aspirations for what we can achieve have rightly risen with them.
So that’s why we’ve decided to become an academy now. It will give us more day-to-day control to give families the sort of education they want - a broad, balanced and relevant curriculum; strong and clear discipline; extra academic and pastoral support for children that need it; and thriving music, sport and activities outside class. It is a clear vote of confidence in our staff’s skill and abilities - that we are trusted by government to make the right calls for our pupils.
Paula Humphreys, Head of The Broxbourne School, Hertfordshire, said:
The governing body believes that we have the experience and expertise to use the additional autonomies of academy status to continue the development of the school; to further raise standards; and to be more proactive in responding to the needs of the local community: leading in raising attainment and removing barriers to learning. The additional freedoms open to us as an academy and our commitment to cooperation with other schools and agencies will be important components in the school’s work at the heart of the community.
Martin Watson, Head of Lavington School, Wiltshire, said:
The governors made this decision because we believe the school knows best what is needed to provide an outstanding education to our students. We intend to better tailor our curriculum to best provide for all abilities.
The freedoms around pay and conditions will enable us to reward those staff who take on additional responsibilities not covered in the TLR structure. Being an academy also enables us to continue and even expand our work with other schools for mutual development and improvement.
Gary Longman, Head of The King’s (The Cathedral) School, Peterborough, said:
The governing body of The King’s (The Cathedral) School, Peterborough is delighted that the school acquired academy status on 1 January 2011. As an outstanding school the governors believe that the new status will give them the best opportunity to maintain, and indeed raise, current standards and protect all they cherish about Peterborough’s Cathedral School founded by Henry VIII in 1541.
Although the school will gain a further degree of independence we look towards developing the existing collaborative arrangements with other schools in the locality. We believe that we will be able, in these difficult times, to target resources wisely to the benefit of our pupils. In the short term we hope to provide additional one-to-one support for a number of pupils in mathematics and English, in addition to protecting our existing curriculum and class sizes. This is an exciting phase in the long and rich history of the school.
John Townsley, Head of Morley High School, Leeds, said:
Becoming an academy is of immense importance to Morley High School. We will re-open as The Morley Academy this week and, as a direct consequence of our change of status, we will begin to play an even greater part in transforming the educational experience of thousands of young people.
As an Outstanding school we are being given greater freedom and trust and we intend to use that freedom to maximum effect. Already an organisation with a track record of highly effective intervention in less effective schools, we will now drive forward with an even greater sense of purpose in this area. We remain convinced that so much is to be gained from highly effective schools working in partnership with less effective schools to raise standards of achievement. Becoming an academy provides us with the flexibility and additional resourcing to work on a number of fronts with a range of partners in a manner which will have an enormous impact on so many students. This will include the appointment of new colleagues who will be employed to work both at The Morley Academy and partner schools.
Bob Mitchell, Head of Bodmin College, Cornwall, said:
Academy status will give us the freedom to allocate all resources at our disposal to be directly beneficial to our students. We can offer extended opportunities, not only to students at Bodmin College, but to students across our networks.
The key driver for this decision rests with the belief that becoming an academy will give the College full control of local decision making, hence becoming more effective and efficient in the delivery of a 21st century educational offer for everyone at the College and within the community.
Central newsdesk 020 7783 8300
General enquiries 0370 000 2288
Published: 6 January 2011


--- layout: post title: "Tablets, Free Software, and You" date: 2011-09-23 01:38:56 +0000 permalink: /2011/09/23/tablets-free-software-and-you/ category: Computer tags: - Linux - Tablets - Open Source - Free Software - Free Data redirect_from: - /blog/tablets-free-software-and-you/ ---
Tablets are the current 'big thing' in computing devices -- so much so, in fact, that many believe tablets will replace most of the uses of laptops and desktops. This aligns closely with the trend to put "everything" on the web. While making everything browser-based certainly has its conveniences, it also has risks.
Users are continually placing their privacy and their data in the hands of others, while ignoring the risks posed by these actions. Look, for example, at the terms of service and software licenses associated with the iPad. Apple can remotely "kill" software on your iPad. If that software was storing your data, too bad, it's gone.
What if all your images are stored in a "cloud storage" solution and your provider suddenly decides to increase rates (or decrease your free storage quota)? Will you pay whatever it takes to get your images back? How about your email, the videos of your children, or your personal documents?
I'm sure you believe that this won't happen, or that you can just move your data. If you believe this, take a look at where your data is stored today. Do you use Microsoft Outlook archives? I hope you'll never want to load the archive files when you don't have access to Outlook.
While Richard Stallman has pointed out that even Android, based on the open source Linux kernel, probably does not qualify as free software, that's probably not nearly as important as whether or not your data is free. Even if you chose to use proprietary software, keeping your data free and open lets you move it when you need it.
Tablets and cloud services are two sides of the same coin -- while they might be convenient in the short term, their true costs are well hidden. For the ease of use, you are giving up substantial amounts of control. Maybe this is something you're okay with, but you shouldn't be. I'm not. Users of the iPad and iPhone routinely "jailbreak" their devices to wrestle some control of their device back. Why buy a device that requires circumventing the license agreement to use how you want it? Demand open devices.
Use open, standardized formats that are not encumbered by patents. Make sure you have access to your data -- its best if you keep your data somewhere to yourself (your own computer, flash drive, or other device). Don't let companies who care only about their bottom dollar tell you what you can do with your data.
Take control of your devices, take control of your software, and most importantly, take control of your data.


@import play.Configuration
@(email: String)
@baseUrl = {@Configuration.root().getString("hcomp.ballot.baseURL")}
@urlPrefix = {@Configuration.root().getString("url.prefix")}
@mainFrame("My Account") {
My Account
@if(email.isEmpty) {
Please enter your email address.We will send you the the necessary link to access your account.
} else {
We've sent you the link to access your account to:
@email
Notice that you won't receive more than one mail per day to prevent spam.
Please keep your email in your mailbox.
}
}


This inspection reports any call to wait() not made inside a corresponding synchronized
statement or synchronized method within Groovy code. Calling wait() on an object
without holding a lock on that object will result in an IllegalMonitorStateException being thrown.
Such a construct is not necessarily an error, as the necessary lock may be acquired before
the containing method is called, but its worth looking at.
Powered by InspectorGroovy


{% extends 'wedding/base.html' %} {% load staticfiles %} {% block content %}
4:30pm - Arrive
5:00pm - Ceremony
5:30pm - Cocktail hour
6:30pm - Dinner
8:00pm - Dessert & dancing


This setting is only used by the restore action.
The rename_pattern and rename_replacement options can be also used to rename indices on restore using regular expression that supports referencing the original text as explained here.
actions: 1: action: restore description: >- Restore all indices in the most recent snapshot with state SUCCESS. Wait for the restore to complete before continuing. Do not skip the repository filesystem access check. Use the other options to define the index/shard settings for the restore. options: repository: # If name is blank, the most recent snapshot by age will be selected name: # If indices is blank, all indices in the snapshot will be restored indices: rename_pattern: 'index(.+)' rename_replacement: 'restored_index$1' wait_for_completion: True max_wait: 3600 wait_interval: 10 filters: - filtertype: state state: SUCCESS exclude: - filtertype: ...
In this configuration, Elasticsearch will capture whatever appears after index
and put it after restored_index
. For example, if I was restoring
index-2017.03.01
, the resulting index would be renamed to
restored_index-2017.03.01
.
Read more about this setting at http://www.elastic.co/guide/en/elasticsearch/reference/7.3/modules-snapshots.html#restore-snapshot
There is no default value.


BRBeaconMessageReporter Class Reference
| Inherits from | BRBeaconMessagePassingStreamNode : BRBeaconMessageStreamNode : NSObject |
|---|---|
| Declared in | BRBeaconMessageReporter.h BRBeaconMessageReporter.m |
Overview
A beacon message reporter periodically reads the log of a {@link BRBeaconMessageLogger} instance and sends reports to a specified sender. The reports will be sent to the receiver every {@link #timeBetweenReportsInMs} milliseconds.
Other Methods
– initWithLogger:andBuilder:andSender:
Creates a new instance using the preconfigured {@link BRBeaconMessageLogger}, {@link BRBeaconMessageReportBuilder} and {@link BRBeaconMessageReportSender}.
- (id)initWithLogger:(BRBeaconMessageLogger *)logger andBuilder:(id<BRBeaconMessageReportBuilder>)reportBuilder andSender:(id<BRBeaconMessageReportSender>)sender
Parameters
logger |
The preconfigured logger that is used for scanning and persistently logging {@link BRBeaconMessage}s. |
|---|---|
reportBuilder |
A builder that transform a stream of {@link BRBeaconMessage}s to a {@link BRBeaconMessageReport} object. |
sender |
The {@link BRBeaconMessageReportSender} object which the reports will be sent to. |
Discussion
Creates a new instance using the preconfigured {@link BRBeaconMessageLogger}, {@link BRBeaconMessageReportBuilder} and {@link BRBeaconMessageReportSender}.
Declared In
BRBeaconMessageReporter.h
– startReporting
Starts scanning, persistently logging and periodically sending reports.
- (void)startReporting
Discussion
Starts scanning, persistently logging and periodically sending reports.
Declared In
BRBeaconMessageReporter.h
– stopReporting
Stops scanning, logging and reporting.
- (void)stopReporting
Discussion
Stops scanning, logging and reporting.
Declared In
BRBeaconMessageReporter.h
– preprocessMessage:
This method is called right before a beacon message is passed to the receivers.
- (void)preprocessMessage:(BRBeaconMessage *)message
Parameters
message |
The received message that is going to be passed to the receivers. |
|---|
Discussion
This method is called right before a beacon message is passed to the receivers.
Declared In
BRBeaconMessagePassingStreamNode.h
– postprocessMessage:
This method is called right after a beacon message was passed to the receivers.
- (void)postprocessMessage:(BRBeaconMessage *)message
Parameters
message |
The received message that was passed to the receivers. |
|---|
Discussion
This method is called right after a beacon message was passed to the receivers.
Declared In
BRBeaconMessagePassingStreamNode.h


public class TrollPlayer
extends java.lang.Object
| Modifier and Type | Method and Description |
|---|---|
java.util.Set<TrollEffect> |
activeEffects()
Returns a set of effects that are currently active on the player.
|
boolean |
canBeTrolledBy(org.bukkit.command.CommandSender sender)
Checks whether the player can be trolled.
|
boolean |
canPickup()
Checks whether the player can pickup items.
|
boolean |
chatIsGibberish()
Checks whether the trolled player's chat messages will be changed to gibberish.
|
java.lang.String |
getName()
Gets the name of the player.
|
org.bukkit.OfflinePlayer |
getOfflinePlayer()
Gets the instance
OfflinePlayer associated with the
TrollPlayer instance. |
org.bukkit.entity.Player |
getPlayer()
Gets the instance
Player associated with the
TrollPlayer instance. |
org.json.simple.JSONObject |
getUserInfo()
Gets the
JSONObject holding all the information
about the player, which is collected by the plugin. |
java.util.UUID |
getUUID()
Gets the
UUID of the player associated with the
TrollPlayer instance. |
boolean |
hasBadfoodEffect()
Checks whether the player will be poisoned by any item they consume.
|
boolean |
hasExplodeMinedBlocksEffect()
Checks whether mining a block will generate an explosion.
|
boolean |
invIsLocked()
Checks whether the player's inventory is locked.
|
boolean |
isBlacklisted()
Checks whether the player is blacklisted by the plugin.
|
boolean |
isFrozen()
Checks whether the player is physically frozen.
|
void |
setBadfoodEffect(boolean hasBadfoodEffect)
Adds or lifts the Badfood effect to/from the player.
|
void |
setBlacklisted(boolean isBlacklisted)
Adds or removes a player's UUID from the blacklist.
|
void |
setExplodeMinedBlocksEffect(boolean hasExplodeMinedBlocksEffect)
Adds or lift the effect to/from the player.
|
void |
setFrozen(boolean isFrozen)
Sets the player's freeze-status.
|
void |
setGibberishChat(boolean chatIsGibberish)
Adds or removes the Gibberish effect to/from the player.
|
void |
setInvLocked(boolean invIsLocked)
Sets the lock-state on the player's inventory.
|
void |
setPickup(boolean canPickup)
Sets the state of the No-Pickup effect.
|
public java.util.UUID getUUID()
UUID
of the player associated with the
TrollPlayer instance.public org.bukkit.OfflinePlayer getOfflinePlayer()
OfflinePlayer
associated with the
TrollPlayer instance.OfflinePlayer
.public org.bukkit.entity.Player getPlayer()
Player
associated with the
TrollPlayer instance.
If the player is offline, the value null
is returned.Player
.public java.lang.String getName()
public org.json.simple.JSONObject getUserInfo()
JSONObject
holding all the information
about the player, which is collected by the plugin.JSONObject
with the user's data.public boolean canBeTrolledBy(org.bukkit.command.CommandSender sender)
sender
- the CommandSender.true
if the player can be trolled.public boolean isFrozen()
true
if frozen.public boolean chatIsGibberish()
true
if effect is enabled.public boolean invIsLocked()
true
if yes.public boolean canPickup()
false
if the No-Pickup effect is
enabled.public boolean hasBadfoodEffect()
true
if yes.public boolean hasExplodeMinedBlocksEffect()
true
if the player is affected.public boolean isBlacklisted()
true
if the player is blacklisted.public void setFrozen(boolean isFrozen)
isFrozen
- whether or not the player should freeze.public void setGibberishChat(boolean chatIsGibberish)
chatIsGibberish
- whether the player should talk gibberish.public void setInvLocked(boolean invIsLocked)
invIsLocked
- whether the player should be locked out or not.public void setPickup(boolean canPickup)
canPickup
- whether the player should be able to pickup dropped items.public void setBadfoodEffect(boolean hasBadfoodEffect)
hasBadfoodEffect
- whether the player should be poisoned by food.public void setExplodeMinedBlocksEffect(boolean hasExplodeMinedBlocksEffect)
hasExplodeMinedBlocksEffect
- true
if the blocks should explode.public void setBlacklisted(boolean isBlacklisted)
isBlacklisted
- whether or not to blacklist the player.public java.util.Set<TrollEffect> activeEffects()


13C MAS NMR spectra for a) SSZ‐26 (red), isomer I in the solid state (blue) and in water (black), b) SSZ‐27 (red), isomer III in the solid state (blue) and in water (black). c) 13C CPMAS‐NMR (0.5 ms cross‐polarization contact time) spectra for SSZ‐26 and SSZ‐27.


Articles
Dynamic Input
About
Search
Title
Organization:
Author:
Text Summary:
Short
Medium
Long
Top Sentences
Top Block of Text
Summarize
Short
Medium
Long
Top Sentences
Top Block of Text
Han Li and Kevin Jiang, CS 4700


Birthday
On my twenty-ninth birthday I got let go from the job I had been on for less than two months. I was hired on at a low rate to move files between servers, and I decided to write a PowerShell script to speed up the process. I improved productivity by an order of magnitude. As in, my project manager told me “the guy who was doing this before you would do in a day what you’re doing in an hour!” They were really excited to have me working so efficiently that they gave me a raise, and I was glad to be tweaking a shell script to do this. (Incidentally, if you’re in a Windows environment, don’t use your own shell script to do this, run robocopy.)
I’d been unemployed for a long while, and I was just glad to be working again. And on top of that I got to program a bit–sure Windows PowerShell wasn’t my preferred environment–but it was great to fix a problem with some code.
And then they gave me the call. I was working from home the day before my birthday, and I had ended up taking a long late lunch with my partner. I had a shell script running at home. I was on the bus home when one of the recruiters at the consultancy called me and let me know that this was my last day. I brought in my equipment the next day, and that was that.
The only jobs I’ve ever been let go from were ones I didn’t like that much in the first place. In this case I accelerated my departure from the project by doing the work very effectively.
“[Developers’] principal work is human communication to organize the users’ expressions of their needs into formal procedure. That work will be necessary no matter how we change the life cycle. And it’s not likely to be automated.” –Peopleware, Tom DeMarco and Timothy Lister
About a month ago, I started working as a web developer for Contour. This is the job that I wanted a year ago. This is the job I was hoping for while I was teaching myself Rails while visiting my family in Guangzhou.
I’m really glad to be working where I am, I like the company and my coworkers and I find the work challenging. I’m planning to take the steps I need to really level up in this role, including taking a nine-month night course on Ruby and Rails at UW. I’m finding it difficult to find the time outside my forty-hour work week to focus on self-teaching, let alone finding the time to contribute to open source. (My apologies to Ryan Bigg, I haven’t been able to review much of Rails 3 in Action at all yet.)
This struggle between work and life balance, it’s to be expected, especially when you actually have a life outside of work.
This weekend I turned thirty, and celebrated with barbecuing, beer, backyard reading, blueberry scones, and a new backpack. I’m beginning to figure out what I want to do with the one life I’ve been given, and I’m really glad to be working a job that I like. The weekends go by so quickly, and the workweek seems to move even faster. I’m blocking the time I can to learning what I can. And I’m really happy that I convinced myself I could teach myself to code well enough to be a professional, I think that it’s going to be a really satisfying career.


|
12/26/02
The Walkthrough that used to be here has been replaced by one of
my own writing, doubtless a source of endless delight to everyone who
was concerned with this issue in recent and not-so-recent history. Actually, it's been posted here for almost a month,
ever since I wrote it over the course of one weekend,
but I suspect that no one whom I hadn't told noticed it.
7/19/01 This
shrine opened today. Some sections, such as enemies and a html
walkthrough, are not up yet, so any links to them will not work.
Hopefully they'll be up soon. Created by:
Squaresoft |
||||
|


As part of my course, I was asked to generate an idea for a game and then creat a 2D animation game trailer using Adobe Animate. This task itself required me to spend a huge amount of time exploring the use of programs like PhotoShop and Illustrator, as well as Adobe Animate.
Synposis and Purpose Statement: Before beginning any practical work, I wrote a game synopsis and also a purpose statement of my game trailer. These help to understand the game itself and also to flesh out what I want the audience to gain from the trailer, which in turn helped me with some ideas. Here is my synposis and purpose statement:
My game trailer is going to follow the same plot and game idea from the previous SAC, which will be about a character called Artemis who lives in a world filled with dinosaurs and other creatures from the Jurassic, Cretaceous and Mesozoic eras. In my trailer I want to begin with a sort of story beginning with a young version of the main character who is living in peace perhaps on a beach enjoying the view, but then using sound effects built up suspense and use different camera cuts to cut between scenes where the young Artemis is scared and the sound of angry dinosaurs are heard. There will be some narrating at the beginning and then at the very end the narration will come back and say something more eerie and suspenseful.
Set in an alternate universe filled with ancient creatures of the Triassic, Jurassic and Cretaceous periods of the Mesozoic era, you play as a huntress named Artemis. The Earth is split into 3 large continents; Triassica, Jurassica and Cretaceia, each filled with the animals from each Mesozoic period. The player, or Artemis, begins their journey in the Triassic continent, Triassica, where their tribe has been wiped out by a strange and dangerous creature which had disappeared just as mysteriously as it had appeared. Artemis must complete quests and rebuild civilisation with an ambitious amount of side quests and main quests. Collect resources, craft tools, befriend tribes, tame creatures, build villages, discover landmarks, gather resources, escape angry tribes; Artemis’ adventures are endless.
The purpose of my game trailer will be to built suspense and have the audience interested in an interesting story and also action in the game. The trailer would be released on YouTube but could also be advertised on social media such as Instagram or Tumblr, basically places where people interested in games would be spending time on. Other advertisements for my game could also come in the form of posters. I want my audience to be drawn to the action that is hinted in the trailer and be intrigued by the main character.
Moodboards: To help me get a feel of how I wanted my animation to look, I created 3 small moodboards. These helped express my ideas for setting, colour palletes, art style, and overall vibe of my trailer.
Storyboards: These are essentially all sketched screenshots of your animation. Storyboards really help to flesh everything out. And I mean EVERYTHING. Without this storyboard, I wouldn't have been able to plan out how to get my story from part A to part B, as well as the fact that I wouldn't have been able to organise all the assets needed for the animation itself.
Speaking of assets, below are some of the assets I used for the animation, as well as backgrounds that I drew.
Audio: For my animation, I needed audio (no duh), so I made sure to find free sound effects and music that I could use, all copyright and royalty free. I even recorded my own voice and use the voice acting talents of my little brother to help with the dialogue. Here is a list of all the free audio I used.
Animating: Now came the real long part... Animating!! Once I had all my assets, audio, and backgrounds, I started animating my game trailer. It was a tedious process; there were many small details that were fundamental in making the animation feel the way I wanted it to. But, after many mistakes and many cases of trial and error, I was able to successfully animate over a minute of content for a game :)


--- title: "Opening Soon!" date: "2021-01-29 00:00:00 -06:00" categories: - whats-blooming layout: "post" blog-banner: "whats-blooming-now-winter.jpg" post-date: "January 29, 2021" post-time: "12:00 AM" blog-image: "2021-01-29-wbn.jpg" published: true ---
We're excited to say that the Garden is opening back up February 1st. We've missed you and can't wait to have you back!
These pricklypear pads display beautiful color in the winter.
The contrast of agave against the snow is stunning.
Winter creates a wonderful time to learn how to identify conifers. Looking at the leaves and their arrangement will give you a lot of information. I have included some simple play on words to help remember.
Pinus species can be distinguished by their needles which are clumped together in groups, known botanically as fascicles. The number of needles in each fascicle will help you determine which species you are looking at. This Utah native species has 5 needles per fascicle.
Spruce needles do not grow in groups, they are single needle. A way to distinguish spruces is to remember that spruce starts with the letter 'S'. Spruce leaves are 'Spiky'. The needles have a pointed tip and are sharp to the touch. Spruce leaves are 'Square' in cross section. You will be able to roll the needle between your fingers. Spruce bark is 'Scaly'. With age, spruce trees bark becomes rough and scaly.
Firs are also single needle. Firs start with an 'F' and their needles are 'Flat' in cross section. You will not be able to roll the needle between your fingers easily. The needles are softer to the touch than spruce, hence firs are 'Furry'.
We look forward to seeing you in February!


Getting Started with ZRG3M
Provisioning the certificate to G3 device
ZRG3M includes G3 device, an ICTK's PUF based-security chip that performs authentication and cryptography operations. It is suited for performing secure authentication, protecting firmware , preventing counterfeiting and storing secure data. This guide will provide writing certificates and keys to G3 via ZRG3M board so that the customer can write their personal certificate to connect AWS IoT.
Certificate Requirements
Cryptographic algorithm: ECC(ECDSA and ECDH) with secp256r1(NIST P256)
- ECC curve name : prime256v1
- Private key file extension : *.key
- Certificate file extension : *.crt
Please have the ECC certificates ready for provisioning. Use this link(openssl guide) to create one if needed.
Write your certificate to ZRG3M:
G3 password will be set differently with client's request. Unless defined, it is set to default value : 11223344 . Please contact<EMAIL_ADDRESS>for detail information.
• A client certificate (*.crt)
• A client private key ( *.key)
• RootCA : AmazonRootCA certificate
certi.json
Available port will be shown in windows. Once user selects the port for the ZRG3M, it will be stored in json file name 'zrg3m.json'
*please disable Wi-Fi connection prior to below process. Any interruption may cause false input to G3 device.
Writing process may take up to minutes and will be shown as above. Please reset the ZRG3M board after the process.


Text Classification (Part 3)
Using Big Data
The dataset used for that project is an already polished and fairly large corpus by Maciej Szpakowski.
This is an open source dataset composed of millions of news articles mostly scraped from a curated list of 1001 domains from http://www.opensources.co/. Because the list does not contain any reliable websites, additionally NYTimes and Webhose English News Articles articles have been included to balance the classes better. The dataset is still work in progress, and for now, the public version includes only 9,408,908 articles (745 out of 1001 domains).
The available data has more than 26GB on disk when we unzip the file and more than 75GB in RAM using pandas. For that reason, I considered using dask. However, loading the CSV file ended in a ParserError (Error tokenizing data. C error: EOF inside string starting at row 63
) and apparently, this is a known problem with dask’s read_csv if the file contains a newline character between quotes.
To read the CSV file with pandas, the same row (63) ended in a _csv.Error: field larger than field limit (131072)
. To address that error we have to first increase the csv.field_size_limit
.
# _csv.Error: field larger than field limit (131072)
# https://stackoverflow.com/a/15063941/5983691
def csv_field_limit():
maxInt = sys.maxsize
decrement = True
while decrement:
# decrease the maxInt value by factor 10
# as long as the OverflowError occurs.
decrement = False
try:
csv.field_size_limit(maxInt)
except OverflowError:
maxInt = int(maxInt/10)
decrement = True
The dataset is not huge but is also larger than we’d like to manage on a laptop, especially if we value interactivity. In any case, let’s have a look at the first 100 rows to see what we have and determine what features we can drop and others we want to keep.
To fix the EOF
problem, we can load in the dataset in chunks and loop that way through the dataset. Loading the CSV file in chunks helps but it is impractical to get a full picture of our data. With dask, we can utilise all the cores we have on our laptop.
Now we can get a quick view of what categories and how many we have in our dataset:
categories = ddf.category.value_counts().compute()
categories
As we can see we need to do some cleaning. We have some oddly named categories and I also checked for null values. From our data exploration, we have a few handy functions to clean the data we will use here again. For example, remove all digits, HTML strings and stopwords from our text and to lemmatise the words.
To send the data to separate processes for processing, we can configure dask’s scheduler and set it globally. This option is useful when operating on pure Python objects like strings.
dask.config.set(scheduler='processes')
Parquet
To save disk space dask encourages dataframes (pandas) users like us to use Parquet. It is a columnar binary format that is easy to split into multiple files (easier for parallel loading) and is generally much simpler to deal with than compared to HDF5 a popular choice for Pandas users with high-performance needs. It is also a common format used by other big data systems like Apache Spark and Apache Impala.
For data-sets too big to fit conveniently into memory, like ours, we want to read it in line by line or iterate through the row-groups in a similar way to reading by chunks from CSV with pandas. For the latter, fastparquet makes it possible to do that using iter_row_groups API.
pf = ParquetFile('myfile.parq')
for df in pf.iter_row_groups():
print(df.shape)
# process sub-data-frame df
As an alternative option, I found the rows package by Álvaro Justen.
Deep Learning Model
For the initial model, I choose to create a Convolutional neural network (CNN) using keras:
model = Sequential([
Conv1D(filters, kernel_size, input_shape=(input_shape[0], input_shape[1]),
padding='valid', activation='relu', strides=1),
GlobalMaxPooling1D(),
Dense(hidden_dims),
Dropout(0.2, activation='relu'),
Dense(1, activation='sigmoid')
])
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
Also, to be able to read in the data I needed to create a custom generator to process each line in the CSV file:
def _generator_process_line(line):
embedding = np.zeros((max_words, 100))
for i, word in enumerate(line[0].split()[:max_words]):
if word in glove:
embedding[i] = glove[word]
return embedding, line[1]
def Generator(data, batch_size):
while True:
with open(data, 'r') as f:
# skip header
for _ in range(1):
next(f)
batch_i = 0
batch_embedding = np.zeros((batch_size, max_words, 100))
batch_category = np.zeros((batch_size, 1))
reader = csv.reader(f)
for line in reader:
embedding, category = _generator_process_line(line)
if (batch_i + 1) == batch_size:
yield batch_embedding, batch_category
batch_embedding = np.zeros((batch_size, max_words, 100))
batch_category = np.zeros((batch_size, 1))
batch_i = 0
else:
batch_embedding[batch_i] = embedding
batch_category[batch_i, 0] = category
batch_i += 1
The following code snippet trains the model on data generated batch-by-batch by the python generator above on one GPU.
with tf.device('/gpu:0'):
history = model.fit_generator(Generator(train_data, batch_size),
steps_per_epoch=train_size//batch_size,
validation_data=Generator(valid_data, batch_size),
validation_steps=valid_size//batch_size,
epochs=epochs, verbose=1)
Our model returns a near perfect accuracy score of 97.83%, and if we are looking at the training and validation results, we might be inclined to save the keras model into a single HDF5 file at each epoch. That way we can save the best possible model. We probably could have stopped at the third epoch and saved us a lot of time.
GPU
You may notice the with
-statement and recall that I am working on a laptop. To train the model on the laptop is not manageable. To be able to train the model I used paperspace’s gradient service, which includes jupyter notebooks, a job runner, and a python module to run any code on Paperspace GPU cloud. The gradient machine I created is a Quadro P4000 with 8CPU’s and 30GB RAM. One epoch needed about 45 minutes to calculate.
Jupyter Notebook
Here is the notebook to that post.
What next?
Create two more keras models, one which focuses on its “content” and the other model on its “context”. Furthermore, be able to predict what type of news article do we have - reliable or unreliable. And as a bonus, I like to add linguistic analysis.
Finally, build a dashboard.


About
We, at cryptera, bring to you CIT's technical symposium filled with aspiring computer science engineers striving to change the world and share it with all those willing to participate! All you need to do is take one small step towards the CIT entrance on September 8 and thus take one great step towards a greater future!
It's not really about the competition.  You're often racing against time. You're frequently running everything through your mind. You're always competing against preconceived ideas. It's not really the person next to you that you worry about.


This custom chart type depends on a package called
chartjs-chart-financial
which is not yet on
NPM.
It is included in the demo app as a git submodule directly from the github site of the package.
This also demonstrates using a different date/time plugin than
moment
.
This demo uses
luxon
instead, plugged into the chart.js
module using the
chartjs-adapter-luxon
package.


--- layout: post status: publish published: true title: John Troyer - A Leader by Example author: display_name: iguy login: iguy email<EMAIL_ADDRESS>url: '' author_login: iguy author_email<EMAIL_ADDRESS>wordpress_id: 602 wordpress_url: http://itsjustanotherlayer.com/?p=602 date: !binary |- MjAxMS0wNy0yNCAwMjoxMDoxMyAtMDUwMA== date_gmt: !binary |- MjAxMS0wNy0yNCAwNzoxMDoxMyAtMDUwMA== categories: - VMware tags: [] comments: [] ---
One of the challenges any leader has is how to motivate and encourage people to contribute their time and energy to a cause. This can be done a variety of ways and a company that wants to foster a community needs someone that can use all of them. Often a community forum is setup early on to help create a hangout location for their customers to share successes. These forums will start out strong and then peter out after a short period of time. The initial contributors don't feel thanked for their work, get discouraged and leave. People stop coming to the forums since their questions don't get answered and its a vicious cycle. VMware's community has managed to avoid this downward trend and is the strongest I've ever seen.
John Troyer is one of the great leaders at VMware who has helped foster the vExpert community and kept it alive and well. He encourages, thanks and helps supply these Experts with the recognition that a strong community needs. A ground breaker who connects with the community through podcasts, Twitter, forums and emails showing that our work is not ignored. He is out there responding to questions, posting challenges to start a new meme on Twitter and podcasting about the topics on people's minds constantly. He helps show that our efforts are one of the things that makes VMware stronger day by day. He brings to light that VMware appreciates our work and ultimately appreciates us.
Thanks John for the tons of work you do day to day helping connect with the VMware evangelists and die-hards. Thanks for all the work you've done to make the vExpert program reward those that spend their free time making VMware better for everyone.
Thanks.