Chars enables you to work transparently with UTF-8 encoding in the Ruby String class without having extensive knowledge about the encoding. A Chars object accepts a string upon initialization and proxies String methods in an encoding safe manner. All the normal String methods are also implemented on the proxy.
String methods are proxied through the Chars object, and can be accessed through the mb_chars method. Methods which would normally return a String object now return a Chars object so methods can be chained.
"The Perfect String ".mb_chars.downcase.strip.normalize #=> "the perfect string"
Chars objects are perfectly interchangeable with String objects as long as no explicit class checks are made. If certain methods do explicitly check the class, call to_s before you pass chars objects to them.
bad.explicit_checking_method "T".mb_chars.downcase.to_s
The default Chars implementation assumes that the encoding of the string is UTF-8, if you want to handle different encodings you can write your own multibyte string handler and configure it through ActiveSupport::Multibyte.proxy_class.
class CharsForUTF32 def size @wrapped_string.size / 4 end def self.accepts?(string) string.length % 4 == 0 end end ActiveSupport::Multibyte.proxy_class = CharsForUTF32
- +
- <=>
- =~
- []
- []=
- acts_like_string?
- capitalize
- center
- compose
- compose_codepoints
- consumes?
- decompose
- decompose_codepoints
- downcase
- g_length
- g_pack
- g_unpack
- in_char_class?
- include?
- index
- insert
- length
- ljust
- lstrip
- method_missing
- new
- normalize
- ord
- reorder_characters
- respond_to?
- reverse
- rjust
- rstrip
- size
- slice
- slice!
- split
- strip
- tidy_bytes
- tidy_bytes
- u_unpack
- upcase
- wants?
- Comparable
| HANGUL_SBASE | = | 0xAC00 |
| Hangul character boundaries and properties | ||
| HANGUL_LBASE | = | 0x1100 |
| HANGUL_VBASE | = | 0x1161 |
| HANGUL_TBASE | = | 0x11A7 |
| HANGUL_LCOUNT | = | 19 |
| HANGUL_VCOUNT | = | 21 |
| HANGUL_TCOUNT | = | 28 |
| HANGUL_NCOUNT | = | HANGUL_VCOUNT * HANGUL_TCOUNT |
| HANGUL_SCOUNT | = | 11172 |
| HANGUL_SLAST | = | HANGUL_SBASE + HANGUL_SCOUNT |
| HANGUL_JAMO_FIRST | = | 0x1100 |
| HANGUL_JAMO_LAST | = | 0x11FF |
| UNICODE_WHITESPACE | = | [ (0x0009..0x000D).to_a, # White_Space # Cc [5] <control-0009>..<control-000D> 0x0020, # White_Space # Zs SPACE 0x0085, # White_Space # Cc <control-0085> 0x00A0, # White_Space # Zs NO-BREAK SPACE 0x1680, # White_Space # Zs OGHAM SPACE MARK 0x180E, # White_Space # Zs MONGOLIAN VOWEL SEPARATOR (0x2000..0x200A).to_a, # White_Space # Zs [11] EN QUAD..HAIR SPACE 0x2028, # White_Space # Zl LINE SEPARATOR 0x2029, # White_Space # Zp PARAGRAPH SEPARATOR 0x202F, # White_Space # Zs NARROW NO-BREAK SPACE 0x205F, # White_Space # Zs MEDIUM MATHEMATICAL SPACE 0x3000, # White_Space # Zs IDEOGRAPHIC SPACE ].flatten.freeze |
| All the unicode whitespace | ||
| UNICODE_LEADERS_AND_TRAILERS | = | UNICODE_WHITESPACE + [65279] |
| BOM (byte order mark) can also be seen as whitespace, it‘s a non-rendering character used to distinguish between little and big endian. This is not an issue in utf-8, so it must be ignored. | ||
| UNICODE_TRAILERS_PAT | = | /(#{codepoints_to_pattern(UNICODE_LEADERS_AND_TRAILERS)})+\Z/ |
| UNICODE_LEADERS_PAT | = | /\A(#{codepoints_to_pattern(UNICODE_LEADERS_AND_TRAILERS)})+/ |
| UTF8_PAT | = | /\A(?: [\x00-\x7f] | [\xc2-\xdf] [\x80-\xbf] | \xe0 [\xa0-\xbf] [\x80-\xbf] | [\xe1-\xef] [\x80-\xbf] [\x80-\xbf] | \xf0 [\x90-\xbf] [\x80-\xbf] [\x80-\xbf] | [\xf1-\xf3] [\x80-\xbf] [\x80-\xbf] [\x80-\xbf] | \xf4 [\x80-\x8f] [\x80-\xbf] [\x80-\xbf] )*\z/xn |
| Borrowed from the Kconv library by Shinji KONO - (also as seen on the W3C site) |
| [R] | wrapped_string |
Compose decomposed characters to the composed form.
[ show source ]
# File vendor/rails/activesupport/lib/active_support/multibyte/chars.rb, line 571 571: def compose_codepoints(codepoints) 572: pos = 0 573: eoa = codepoints.length - 1 574: starter_pos = 0 575: starter_char = codepoints[0] 576: previous_combining_class = -1 577: while pos < eoa 578: pos += 1 579: lindex = starter_char - HANGUL_LBASE 580: # -- Hangul 581: if 0 <= lindex and lindex < HANGUL_LCOUNT 582: vindex = codepoints[starter_pos+1] - HANGUL_VBASE rescue vindex = -1 583: if 0 <= vindex and vindex < HANGUL_VCOUNT 584: tindex = codepoints[starter_pos+2] - HANGUL_TBASE rescue tindex = -1 585: if 0 <= tindex and tindex < HANGUL_TCOUNT 586: j = starter_pos + 2 587: eoa -= 2 588: else 589: tindex = 0 590: j = starter_pos + 1 591: eoa -= 1 592: end 593: codepoints[starter_pos..j] = (lindex * HANGUL_VCOUNT + vindex) * HANGUL_TCOUNT + tindex + HANGUL_SBASE 594: end 595: starter_pos += 1 596: starter_char = codepoints[starter_pos] 597: # -- Other characters 598: else 599: current_char = codepoints[pos] 600: current = UCD.codepoints[current_char] 601: if current.combining_class > previous_combining_class 602: if ref = UCD.composition_map[starter_char] 603: composition = ref[current_char] 604: else 605: composition = nil 606: end 607: unless composition.nil? 608: codepoints[starter_pos] = composition 609: starter_char = composition 610: codepoints.delete_at pos 611: eoa -= 1 612: pos -= 1 613: previous_combining_class = -1 614: else 615: previous_combining_class = current.combining_class 616: end 617: else 618: previous_combining_class = current.combining_class 619: end 620: if current.combining_class == 0 621: starter_pos = pos 622: starter_char = codepoints[pos] 623: end 624: end 625: end 626: codepoints 627: end
Returns true when the proxy class can handle the string. Returns false otherwise.
[ show source ]
# File vendor/rails/activesupport/lib/active_support/multibyte/chars.rb, line 132 132: def self.consumes?(string) 133: # Unpack is a little bit faster than regular expressions. 134: string.unpack('U*') 135: true 136: rescue ArgumentError 137: false 138: end
Decompose composed characters to the decomposed form.
[ show source ]
# File vendor/rails/activesupport/lib/active_support/multibyte/chars.rb, line 550 550: def decompose_codepoints(type, codepoints) 551: codepoints.inject([]) do |decomposed, cp| 552: # if it's a hangul syllable starter character 553: if HANGUL_SBASE <= cp and cp < HANGUL_SLAST 554: sindex = cp - HANGUL_SBASE 555: ncp = [] # new codepoints 556: ncp << HANGUL_LBASE + sindex / HANGUL_NCOUNT 557: ncp << HANGUL_VBASE + (sindex % HANGUL_NCOUNT) / HANGUL_TCOUNT 558: tindex = sindex % HANGUL_TCOUNT 559: ncp << (HANGUL_TBASE + tindex) unless tindex == 0 560: decomposed.concat ncp 561: # if the codepoint is decomposable in with the current decomposition type 562: elsif (ncp = UCD.codepoints[cp].decomp_mapping) and (!UCD.codepoints[cp].decomp_type || type == :compatability) 563: decomposed.concat decompose_codepoints(type, ncp.dup) 564: else 565: decomposed << cp 566: end 567: end 568: end
[ show source ]
# File vendor/rails/activesupport/lib/active_support/multibyte/chars.rb, line 521 521: def g_pack(unpacked) 522: (unpacked.flatten).pack('U*') 523: end
Unpack the string at grapheme boundaries. Returns a list of character lists.
Example:
Chars.g_unpack('क्षि') #=> [[2325, 2381], [2359], [2367]] Chars.g_unpack('Café') #=> [[67], [97], [102], [233]]
[ show source ]
# File vendor/rails/activesupport/lib/active_support/multibyte/chars.rb, line 487 487: def g_unpack(string) 488: codepoints = u_unpack(string) 489: unpacked = [] 490: pos = 0 491: marker = 0 492: eoc = codepoints.length 493: while(pos < eoc) 494: pos += 1 495: previous = codepoints[pos-1] 496: current = codepoints[pos] 497: if ( 498: # CR X LF 499: one = ( previous == UCD.boundary[:cr] and current == UCD.boundary[:lf] ) or 500: # L X (L|V|LV|LVT) 501: two = ( UCD.boundary[:l] === previous and in_char_class?(current, [:l,:v,:lv,:lvt]) ) or 502: # (LV|V) X (V|T) 503: three = ( in_char_class?(previous, [:lv,:v]) and in_char_class?(current, [:v,:t]) ) or 504: # (LVT|T) X (T) 505: four = ( in_char_class?(previous, [:lvt,:t]) and UCD.boundary[:t] === current ) or 506: # X Extend 507: five = (UCD.boundary[:extend] === current) 508: ) 509: else 510: unpacked << codepoints[marker..pos-1] 511: marker = pos 512: end 513: end 514: unpacked 515: end
Detect whether the codepoint is in a certain character class. Returns true when it‘s in the specified character class and false otherwise. Valid character classes are: :cr, :lf, :l, :v, :lv, :lvt and :t.
Primarily used by the grapheme cluster support.
[ show source ]
# File vendor/rails/activesupport/lib/active_support/multibyte/chars.rb, line 478 478: def in_char_class?(codepoint, classes) 479: classes.detect { |c| UCD.boundary[c] === codepoint } ? true : false 480: end
[ show source ]
# File vendor/rails/activesupport/lib/active_support/multibyte/chars.rb, line 93 93: def initialize(string) 94: @wrapped_string = string 95: @wrapped_string.force_encoding(Encoding::UTF_8) unless @wrapped_string.frozen? 96: end
Re-order codepoints so the string becomes canonical.
[ show source ]
# File vendor/rails/activesupport/lib/active_support/multibyte/chars.rb, line 534 534: def reorder_characters(codepoints) 535: length = codepoints.length- 1 536: pos = 0 537: while pos < length do 538: cp1, cp2 = UCD.codepoints[codepoints[pos]], UCD.codepoints[codepoints[pos+1]] 539: if (cp1.combining_class > cp2.combining_class) && (cp2.combining_class > 0) 540: codepoints[pos..pos+1] = cp2.code, cp1.code 541: pos += (pos > 0 ? -1 : 1) 542: else 543: pos += 1 544: end 545: end 546: codepoints 547: end
Replaces all ISO-8859-1 or CP1252 characters by their UTF-8 equivalent resulting in a valid UTF-8 string.
[ show source ]
# File vendor/rails/activesupport/lib/active_support/multibyte/chars.rb, line 630 630: def tidy_bytes(string) 631: string.split(//u).map do |c| 632: c.force_encoding(Encoding::ASCII) if c.respond_to?(:force_encoding) 633: 634: if !UTF8_PAT.match(c) 635: n = c.unpack('C')[0] 636: n < 128 ? n.chr : 637: n < 160 ? [UCD.cp1252[n] || n].pack('U') : 638: n < 192 ? "\xC2" + n.chr : "\xC3" + (n-64).chr 639: else 640: c 641: end 642: end.join 643: end
Unpack the string at codepoints boundaries. Raises an EncodingError when the encoding of the string isn‘t valid UTF-8.
Example:
Chars.u_unpack('Café') #=> [67, 97, 102, 233]
[ show source ]
# File vendor/rails/activesupport/lib/active_support/multibyte/chars.rb, line 465 465: def u_unpack(string) 466: begin 467: string.unpack 'U*' 468: rescue ArgumentError 469: raise EncodingError, 'malformed UTF-8 character' 470: end 471: end
Returns true if the Chars class can and should act as a proxy for the string string. Returns false otherwise.
[ show source ]
# File vendor/rails/activesupport/lib/active_support/multibyte/chars.rb, line 127 127: def self.wants?(string) 128: $KCODE == 'UTF8' && consumes?(string) 129: end
Returns a new Chars object containing the other object concatenated to the string.
Example:
('Café'.mb_chars + ' périferôl').to_s #=> "Café périferôl"
[ show source ]
# File vendor/rails/activesupport/lib/active_support/multibyte/chars.rb, line 156 156: def +(other) 157: self << other 158: end
Returns -1, 0 or +1 depending on whether the Chars object is to be sorted before, equal or after the object on the right side of the operation. It accepts any object that implements to_s. See String#<=> for more details.
Example:
'é'.mb_chars <=> 'ü'.mb_chars #=> -1
[ show source ]
# File vendor/rails/activesupport/lib/active_support/multibyte/chars.rb, line 148 148: def <=>(other) 149: @wrapped_string <=> other.to_s 150: end
Like String#=~ only it returns the character offset (in codepoints) instead of the byte offset.
Example:
'Café périferôl'.mb_chars =~ /ô/ #=> 12
[ show source ]
# File vendor/rails/activesupport/lib/active_support/multibyte/chars.rb, line 164 164: def =~(other) 165: translate_offset(@wrapped_string =~ other) 166: end
Alias for slice
Like String#[]=, except instead of byte offsets you specify character offsets.
Example:
s = "Müller" s.mb_chars[2] = "e" # Replace character with offset 2 s #=> "Müeler" s = "Müller" s.mb_chars[1, 2] = "ö" # Replace 2 characters at character offset 1 s #=> "Möler"
[ show source ]
# File vendor/rails/activesupport/lib/active_support/multibyte/chars.rb, line 225 225: def []=(*args) 226: replace_by = args.pop 227: # Indexed replace with regular expressions already works 228: if args.first.is_a?(Regexp) 229: @wrapped_string[*args] = replace_by 230: else 231: result = self.class.u_unpack(@wrapped_string) 232: if args[0].is_a?(Fixnum) 233: raise IndexError, "index #{args[0]} out of string" if args[0] >= result.length 234: min = args[0] 235: max = args[1].nil? ? min : (min + args[1] - 1) 236: range = Range.new(min, max) 237: replace_by = [replace_by].pack('U') if replace_by.is_a?(Fixnum) 238: elsif args.first.is_a?(Range) 239: raise RangeError, "#{args[0]} out of range" if args[0].min >= result.length 240: range = args[0] 241: else 242: needle = args[0].to_s 243: min = index(needle) 244: max = min + self.class.u_unpack(needle).length - 1 245: range = Range.new(min, max) 246: end 247: result[range] = self.class.u_unpack(replace_by) 248: @wrapped_string.replace(result.pack('U*')) 249: end 250: end
Enable more predictable duck-typing on String-like classes. See Object#acts_like?.
[ show source ]
# File vendor/rails/activesupport/lib/active_support/multibyte/chars.rb, line 121 121: def acts_like_string? 122: true 123: end
Converts the first character to uppercase and the remainder to lowercase.
Example:
'über'.mb_chars.capitalize.to_s #=> "Über"
[ show source ]
# File vendor/rails/activesupport/lib/active_support/multibyte/chars.rb, line 387 387: def capitalize 388: (slice(0) || chars('')).upcase + (slice(1..-1) || chars('')).downcase 389: end
Works just like String#center, only integer specifies characters instead of bytes.
Example:
"¾ cup".mb_chars.center(8).to_s #=> " ¾ cup " "¾ cup".mb_chars.center(8, " ").to_s # Use non-breaking whitespace #=> " ¾ cup "
[ show source ]
# File vendor/rails/activesupport/lib/active_support/multibyte/chars.rb, line 287 287: def center(integer, padstr=' ') 288: justify(integer, :center, padstr) 289: end
Performs composition on all the characters.
Example:
'é'.length #=> 3 'é'.mb_chars.compose.to_s.length #=> 2
[ show source ]
# File vendor/rails/activesupport/lib/active_support/multibyte/chars.rb, line 429 429: def compose 430: chars(self.class.compose_codepoints(self.class.u_unpack(@wrapped_string)).pack('U*')) 431: end
Performs canonical decomposition on all the characters.
Example:
'é'.length #=> 2 'é'.mb_chars.decompose.to_s.length #=> 3
[ show source ]
# File vendor/rails/activesupport/lib/active_support/multibyte/chars.rb, line 420 420: def decompose 421: chars(self.class.decompose_codepoints(:canonical, self.class.u_unpack(@wrapped_string)).pack('U*')) 422: end
Convert characters in the string to lowercase.
Example:
'VĚDA A VÝZKUM'.mb_chars.downcase.to_s #=> "věda a výzkum"
[ show source ]
# File vendor/rails/activesupport/lib/active_support/multibyte/chars.rb, line 379 379: def downcase 380: apply_mapping :lowercase_mapping 381: end
Returns the number of grapheme clusters in the string.
Example:
'क्षि'.mb_chars.length #=> 4 'क्षि'.mb_chars.g_length #=> 3
[ show source ]
# File vendor/rails/activesupport/lib/active_support/multibyte/chars.rb, line 438 438: def g_length 439: self.class.g_unpack(@wrapped_string).length 440: end
Returns true if contained string contains other. Returns false otherwise.
Example:
'Café'.mb_chars.include?('é') #=> true
[ show source ]
# File vendor/rails/activesupport/lib/active_support/multibyte/chars.rb, line 197 197: def include?(other) 198: # We have to redefine this method because Enumerable defines it. 199: @wrapped_string.include?(other) 200: end
Returns the position needle in the string, counting in codepoints. Returns nil if needle isn‘t found.
Example:
'Café périferôl'.mb_chars.index('ô') #=> 12 'Café périferôl'.mb_chars.index(/\w/u) #=> 0
[ show source ]
# File vendor/rails/activesupport/lib/active_support/multibyte/chars.rb, line 207 207: def index(needle, offset=0) 208: index = @wrapped_string.index(needle, offset) 209: index ? (self.class.u_unpack(@wrapped_string.slice(0...index)).size) : nil 210: end
Inserts the passed string at specified codepoint offsets.
Example:
'Café'.mb_chars.insert(4, ' périferôl').to_s #=> "Café périferôl"
[ show source ]
# File vendor/rails/activesupport/lib/active_support/multibyte/chars.rb, line 181 181: def insert(offset, fragment) 182: unpacked = self.class.u_unpack(@wrapped_string) 183: unless offset > unpacked.length 184: @wrapped_string.replace( 185: self.class.u_unpack(@wrapped_string).insert(offset, *self.class.u_unpack(fragment)).pack('U*') 186: ) 187: else 188: raise IndexError, "index #{offset} out of string" 189: end 190: self 191: end
Alias for size
Works just like String#ljust, only integer specifies characters instead of bytes.
Example:
"¾ cup".mb_chars.rjust(8).to_s #=> "¾ cup " "¾ cup".mb_chars.rjust(8, " ").to_s # Use non-breaking whitespace #=> "¾ cup "
[ show source ]
# File vendor/rails/activesupport/lib/active_support/multibyte/chars.rb, line 274 274: def ljust(integer, padstr=' ') 275: justify(integer, :left, padstr) 276: end
Strips entire range of Unicode whitespace from the left of the string.
[ show source ]
# File vendor/rails/activesupport/lib/active_support/multibyte/chars.rb, line 297 297: def lstrip 298: chars(@wrapped_string.gsub(UNICODE_LEADERS_PAT, '')) 299: end
Forward all undefined methods to the wrapped string.
[ show source ]
# File vendor/rails/activesupport/lib/active_support/multibyte/chars.rb, line 104 104: def method_missing(method, *args, &block) 105: if method.to_s =~ /!$/ 106: @wrapped_string.__send__(method, *args, &block) 107: self 108: else 109: result = @wrapped_string.__send__(method, *args, &block) 110: result.kind_of?(String) ? chars(result) : result 111: end 112: end
Returns the KC normalization of the string by default. NFKC is considered the best normalization form for passing strings to databases and validations.
- str - The string to perform normalization on.
- form - The form you want to normalize in. Should be one of the following: :c, :kc, :d, or :kd. Default is ActiveSupport::Multibyte.default_normalization_form
[ show source ]
# File vendor/rails/activesupport/lib/active_support/multibyte/chars.rb, line 398 398: def normalize(form=ActiveSupport::Multibyte.default_normalization_form) 399: # See http://www.unicode.org/reports/tr15, Table 1 400: codepoints = self.class.u_unpack(@wrapped_string) 401: chars(case form 402: when :d 403: self.class.reorder_characters(self.class.decompose_codepoints(:canonical, codepoints)) 404: when :c 405: self.class.compose_codepoints(self.class.reorder_characters(self.class.decompose_codepoints(:canonical, codepoints))) 406: when :kd 407: self.class.reorder_characters(self.class.decompose_codepoints(:compatability, codepoints)) 408: when :kc 409: self.class.compose_codepoints(self.class.reorder_characters(self.class.decompose_codepoints(:compatability, codepoints))) 410: else 411: raise ArgumentError, "#{form} is not a valid normalization variant", caller 412: end.pack('U*')) 413: end
Returns the codepoint of the first character in the string.
Example:
'こんにちは'.mb_chars.ord #=> 12371
[ show source ]
# File vendor/rails/activesupport/lib/active_support/multibyte/chars.rb, line 363 363: def ord 364: self.class.u_unpack(@wrapped_string)[0] 365: end
Returns true if obj responds to the given method. Private methods are included in the search only if the optional second parameter evaluates to true.
[ show source ]
# File vendor/rails/activesupport/lib/active_support/multibyte/chars.rb, line 116 116: def respond_to?(method, include_private=false) 117: super || @wrapped_string.respond_to?(method, include_private) || false 118: end
Reverses all characters in the string.
Example:
'Café'.mb_chars.reverse.to_s #=> 'éfaC'
[ show source ]
# File vendor/rails/activesupport/lib/active_support/multibyte/chars.rb, line 316 316: def reverse 317: chars(self.class.u_unpack(@wrapped_string).reverse.pack('U*')) 318: end
Works just like String#rjust, only integer specifies characters instead of bytes.
Example:
"¾ cup".mb_chars.rjust(8).to_s #=> " ¾ cup" "¾ cup".mb_chars.rjust(8, " ").to_s # Use non-breaking whitespace #=> " ¾ cup"
[ show source ]
# File vendor/rails/activesupport/lib/active_support/multibyte/chars.rb, line 261 261: def rjust(integer, padstr=' ') 262: justify(integer, :right, padstr) 263: end
Strips entire range of Unicode whitespace from the right of the string.
[ show source ]
# File vendor/rails/activesupport/lib/active_support/multibyte/chars.rb, line 292 292: def rstrip 293: chars(@wrapped_string.gsub(UNICODE_TRAILERS_PAT, '')) 294: end
Returns the number of codepoints in the string
[ show source ]
# File vendor/rails/activesupport/lib/active_support/multibyte/chars.rb, line 307 307: def size 308: self.class.u_unpack(@wrapped_string).size 309: end
Implements Unicode-aware slice with codepoints. Slicing on one point returns the codepoints for that character.
Example:
'こんにちは'.mb_chars.slice(2..3).to_s #=> "にち"
[ show source ]
# File vendor/rails/activesupport/lib/active_support/multibyte/chars.rb, line 325 325: def slice(*args) 326: if args.size > 2 327: raise ArgumentError, "wrong number of arguments (#{args.size} for 1)" # Do as if we were native 328: elsif (args.size == 2 && !(args.first.is_a?(Numeric) || args.first.is_a?(Regexp))) 329: raise TypeError, "cannot convert #{args.first.class} into Integer" # Do as if we were native 330: elsif (args.size == 2 && !args[1].is_a?(Numeric)) 331: raise TypeError, "cannot convert #{args[1].class} into Integer" # Do as if we were native 332: elsif args[0].kind_of? Range 333: cps = self.class.u_unpack(@wrapped_string).slice(*args) 334: result = cps.nil? ? nil : cps.pack('U*') 335: elsif args[0].kind_of? Regexp 336: result = @wrapped_string.slice(*args) 337: elsif args.size == 1 && args[0].kind_of?(Numeric) 338: character = self.class.u_unpack(@wrapped_string)[args[0]] 339: result = character.nil? ? nil : [character].pack('U') 340: else 341: result = self.class.u_unpack(@wrapped_string).slice(*args).pack('U*') 342: end 343: result.nil? ? nil : chars(result) 344: end
Like String#slice!, except instead of byte offsets you specify character offsets.
Example:
s = 'こんにちは' s.mb_chars.slice!(2..3).to_s #=> "にち" s #=> "こんは"
[ show source ]
# File vendor/rails/activesupport/lib/active_support/multibyte/chars.rb, line 353 353: def slice!(*args) 354: slice = self[*args] 355: self[*args] = '' 356: slice 357: end
Works just like String#split, with the exception that the items in the resulting list are Chars instances instead of String. This makes chaining methods easier.
Example:
'Café périferôl'.mb_chars.split(/é/).map { |part| part.upcase.to_s } #=> ["CAF", " P", "RIFERÔL"]
[ show source ]
# File vendor/rails/activesupport/lib/active_support/multibyte/chars.rb, line 173 173: def split(*args) 174: @wrapped_string.split(*args).map { |i| i.mb_chars } 175: end
Strips entire range of Unicode whitespace from the right and left of the string.
[ show source ]
# File vendor/rails/activesupport/lib/active_support/multibyte/chars.rb, line 302 302: def strip 303: rstrip.lstrip 304: end
Replaces all ISO-8859-1 or CP1252 characters by their UTF-8 equivalent resulting in a valid UTF-8 string.
[ show source ]
# File vendor/rails/activesupport/lib/active_support/multibyte/chars.rb, line 443 443: def tidy_bytes 444: chars(self.class.tidy_bytes(@wrapped_string)) 445: end
Convert characters in the string to uppercase.
Example:
'Laurent, òu sont les tests?'.mb_chars.upcase.to_s #=> "LAURENT, ÒU SONT LES TESTS?"
[ show source ]
# File vendor/rails/activesupport/lib/active_support/multibyte/chars.rb, line 371 371: def upcase 372: apply_mapping :uppercase_mapping 373: end


BY EDWIN JAHIEL
FAMILY NAME *** Directed by Macky Alston. Written by Alston & Kay Gayner. Photography, Eliot Rockett. Editing, Sandra Marie Christie and Christopher White. Music, Camara Kambon. Associate producer, Jennifer Chaiken. Executive producer, Nicholas Gottlieb. Released on PBS by P.O.V. 89 minutes. Rated TV-PG.
In September 1998, PBS will air Family Name. It is one of very best of the the P.O.V. (Point of View) series. P.O.V. is an excellent showcase for independent non-fiction films, the kind that are found mostly in festivals or specialized programs. Family Name won the Freedom of Expression Award at the 1997 Sundance Festival, and the IFP OPen Palm Award. It was later released theatrically, but not widely, and reviewed very little, albeit enthusiastically. P.O.V.-type films may be eye-opening, informative, and sometimes major contributions to the art and possibilities of cinema. But they are no competition for the sights, sounds, mayhem, special effects and such of commercial theatrical releases.
The filmmaker and central figure is documentarist Macky Alston who went from editor to producer-director. This is his first feature-length picture, and an extremely personal work.
Macky Alston is a member of the North Carolina Alston family, an extended, large and often distinguished "tribe." Both his grandfather and his father were preachers. The latter, who appears in the film, is most likable, a person that many churchgoers wish they had as their clergyman. He was also an activist in civil rights and apparently remains an advocate for causes dealing with liberty and justice.
The Alstons go back many years, if not centuries. The child Macky, growing up in North Carolina, always wondered by the number of his black classmates called Alston. His curiosity remained throughout the years, but the questions he put to his family went unanswered.
When Mackey was in his twenties, his father put in his hands a book about the history of the Alstons. It turned out that they had been among the largest slave-owners in North Carolina. So, at age 27 (he is 31 now) Mackey set on a voyage of discovery, visiting descendants of slaves and of slave-owners who lived mostly in North Carolina.
 For a long time he concealed this from his folks, and even when he "came out," on his parents' request kept his secret from some (or all?) his relatives.With his first-hand knowledge of concealing certain things, and as a member of a minority, Mackey was all the more dogged in his search.
He was to have have become a preacher and even attended Union Theological Seminary for two years, but decided not to continue in that path. Eventually, he moved to and worked in, New York City. (His parents were in Princeton, N.J.) He sometimes visited North Carolina. On his last trip he found out that there were to be two big family reunions --one white, the other black-- both held in the same week, a few miles apart and unaware of the other reunion.
With a film crew, he attended both reunions, talking to Alstons in both groups, especially in Pitsboro, N.C., where the phone book is like one long list of Alstons of all hues. He also searched in New York and other southern locations. In Pitsboro, the largest town on Chatham County, he learned that his great-great-great-great-great-great -uncle Joseph John Alston owned so much land and so many slaves that they called him Chatham Jack.
The film's interviewees are numerous. Some won't discuss this aspect of their history, others do so reluctantly, others yet respond willingly. The search expands, branches out, flashes back to Charles "Spinky" Alston, a notable Harlem Renaissance painter who had died in 1977, extends to past Alstons (some, prominent) from the past and the present. Mackey sleuths tirelessly, looks for documents, records, tombstone inscriptions, and draws both complicated family trees and clear conclusions
His travels, like those of Ulysses open up doors to factual knowledge, self-knowledge and mutual understanding, but unlike Homer's linear story, the trips often zig-zag and can fold back on themselves. The climax is a concert attended by both races. It becomes a wonderfully warm rapprochement. A final surprise of, simply, words on the screen, comes as a twist both touching and ironic. The truth does set you free.
Curiously, the filmic style of Family Name brings to my mind that splendid documentary by maverick filmmaker Ross McElwee, Sherman's March (1986). McElwee, the main character, and also a Southerner who lives in the North, filmed his own peregrinations in Dixie as he retraced the Union General's progress -- and in the process documented and analyzed (in often hilarious ways) the lifestyles, legends and mystiques of Southerners, especially women. Family Name is dead serious, yet not without gentle humor. It is really worth seeing.
" Le mauvais gout mene au crime" (Stendhal)
Edwin Jahiel's movie reviews are at http://www.prairienet.org/ejahiel
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


OUR PROGRAM
Our 8-month program is divided into 12 modules. The last module is a 6-weeks intensive Final Project where students work on a real project with a real partner. Our training takes place at BeCentral Brussels every Sunday. During the week, students are supported online in their self-study,homework and peer learning.
Our Impact
We graduated over 100 people in Belgium and more than 300 globally. In Belgium, over 70% found and retained a high-quality job as a developer.
100
Students graduated since HackYourFuture Belgium was founded in 2018
70%
Of our graduates find an internship, a job or start advanced studies.
300+
Alumni in the Netherlands, Denmark, Belgium and Canada.
Our core values
Community
We’re largely dependent on volunteers. That’s what makes us an engaged grassroots community, as our students call it ‘the HYF family’
Diversity & inclusiveness
Our program is adapted to suit people with different backgrounds, often in vulnerable situations. We teach on Sundays to allow everyone to take control of their personal lives during the week.
Commitment
Our program is free of charge, although we ask for strong commitment during our 7 month-journey. And you know what? Many alumni stay actively involved!
Open
Sharing is caring. Our curriculum is 100% open. We believe in knowledge for the many, not the few.
OUR SUCCESS STORIES
Gita - ttl.be
QA Developer
"What HYF brought to me is
you should never give up
and try to find a way when
you’re stuck.I’ve learned
that dreaming big without
big efforts will bring you
nowhere.Hack YourFuture was
part of my journey
to
become who I am now."
Ramzi - AppTweak
UX/UI Designer
"Hack Your Future is one of the
greatest programs that I joined.
It has opened many doors for me
to learn a lot about software
and web development.
Without this program,
I wouldn't be at the
current job
which requires
good knowledge in front-end
development"
Our Partners
Become a partnerSupport the developers of tomorrow
Help refugees build digital & soft skills for a career in web development. We are a non- profit organization. Thanks to your support we can improve and keep our program free of charge for students.
Contact us
We’re always happy to welcome people like you to our HYF community. Drop us a line and become part of it!


Mumbai, also known as Bombay, is the capital city of the Indian state of Maharashtra. It is the most populous city in India and the ninth most populous agglomeration in the world, with an estimated city population of 18.4 million.Mumbai lies on the west coast of India and has a deep natural harbour. In 2008, Mumbai was named an alpha world city. It is also the wealthiest city in India.
A foodie’s paradise, Mumbai’s Khau Gallis offer some of the most lip-smacking street food in the city. For the uninitiated, in Marathi, khau means treat and galli means a small lane. A melting pot of cultures and refreshingly diverse influences, street food in Mumbai offers a unique potpourri of flavours that is incredibly satisfying. And Khau Gullies are where one can feel the pulse of Mumbai’s culinary culture.
Barbeque Nation is an Indian restaurant chain owned by Indore-based Sayaji Hotels Limited. Every table in a Barbeque Nation outlet has a live-grille on it, which customers use to cook their food. Some of the best dishes on the menu are Chermoula Prawns, Shish Kebabs and Cajun Spiced Potatoes. In addition to grilled food, the restaurant serves soups, salads, and desserts, which are a mix of Mediterranean, Pan-Asian, American, Oriental, and Continental cuisine.
Café Mysore at King’s Circle is popular for its tiffin items, especially its dosas and onion uttapam. The tomato rasam is perfect on rainy Mumbai evenings. Add a vada dunked in the rasam to make it a delicious spicy, tangy and filling meal. The coffee at this simple eatery is among the best around Matunga.Café Mysore is a stone's throw away from Café Madras in Matunga.Mysore Sada Dosa, Khotto, Neer Dosa, Rasam Wada, Idli Gadbad are the food items that you should try here.
Shamiana, the original coffee shop of the city, offers an all-day dining experience with an international à la carte menu to suit every mood and palate, from breakfast through to dinner. The restaurant embraces a ‘refined ease’ with its relaxed environment, fresh comfort food and service that is sincere and warm. Sumptuous weekend brunches focusing on interactive experiences along with a daily blackboard of curated dishes add to the experience.
Ling's Pavilion is a chinese restaurant located in colaba.It can be termed as one of the best Chinese restaurant of town area. Yummy, spicy & authentic Chinese meals give you the real flavors & taste of the meals. If you love Chinese food and want to be treated to some authentic goodness, your best bet is Ling's Pavilion in Colaba.Done up like a pavilion, Ling’s is always teeming with homesick Chinese, Koreans and Japanese.
Salt Water Cafe creates a symphony of timeless European flavours to provide its guests with an overall taste that is difficult to forget. The food and drinks live up to the highest expectations. In a nutshell our food is prepared with the greatest dedication and freshest ingredients. Food - The talent in our kitchen works tirelessly to serve our customers with culinary persuasions from breakfast right up till dinner. The in-house bakery and deli showcases some of the finest flavours.
Created by Rogin Koshy


Requirements
Suggested Calibrations
Installation
Initial Setup (Repeat for each night)
| Tag | Type | Comment |
| frame | 0 | FRAME Number |
| flg_anly | 0 | Analysis flag 0=Don't Analyse |
| Obj | ' ' | Object Name |
| type | ' ' | ObjTyp : OBJ, STD, DRK, ZRO, FLT, ARC, MSK, ALG |
| mask_id | 0L | Mask ID |
| masknm | ' ' | Mask Name |
| exp | 0.d | Exposure time |
| filter | ' ' | Filter : U,B,V,R,I, C |
| filtpos | 0 | Filter Position |
| grism | ' ' | Grism : BG, RG, NO |
| aperpos | 0 | Aperture position |
| casspos | 0. | CASS pos angle |
| AM | 0. | Airmass |
| CCD | ' ' | CCD |
| TEL | ' ' | Telescope |
| gain | 0. | Gain |
| readno | 0. | Read Noise |
| date | 0.0d | Date of Obs |
| UT | ' ' | UT |
| RA | ' ' | RA |
| DEC | ' ' | DEC |
| Equinox | 0. | EQUINOX |
| rootpth | ' ' | Path of the Root |
| img_root | ' ' | Root name (usually in Raw directory) |
| flg_ov | 0 | OV FILE? 0=No, 1=Yes |
| img_ov | ' ' | Name of OV file (with directory) |
| flg_msk | 0 | Mask FILE? 0=No, 1=Yes |
| img_msk | ' ' | Name of Mask file |
| flg_final | 0 | Final File? 0=No |
| img_final | ' ' | Name of Final img |
| nslits | 0 | Num of slits |
| ystrt | 0L | Column for initiating the trace |
| msk_fil | ' ' | Name of the Mask info file (fits) |
| slit_fil | ' ' | Name of the Slit info file (fits) |
| arc_fil | ' ' | Name of the Arc image file (fits) |
| map_fil | ' ' | Name of the Map image file (fits) |
| flat_fil | ' ' | Name of the Flat image file (fits) |
| obj_fil | ' ' | Name of object structure (fits) |
Create bias frame (optional)
r
Combine Flats
Create the Map
Create the Slit Structure
| Tag | Type | Comment |
| flg_anly | 0 | Analyse? (1=yes, 0=no) |
| id | 0L | ID number |
| field | ' ' | Field name |
| length | 0. | (arcsec) |
| width | 0. | (arcsec) |
| pa | 0. | |
| arcpix | 0. | Arcsec per pix |
| xyqso | fltarr(2) | x offset from the QSO (arcsec) |
| xpos | 0. | x position of silt |
| nobj | 0 | Number of objects in slit |
| ypos | fltarr(10) | y pos of obj relative to slit edges (5#5) |
| yedg | fltarr(2) | Slit edges relative to slit mask cen (pix) |
| yedg_flt | fltarr(2) | y-Edges of slit on CCD (Undistorted FLAT) |
| yedg_orig | fltarr(5000,2) | Array of slit edges in orig |
| yedg_sky | fltarr(5000,2) | Edges of slit for sky subtraction |
Normalize the Flat
Create the Wavelength Image
Process the Science Images
CR Flagging
Clean Up
Create Object Structure
| Tag | Type | Comment |
| field | ' ' | Name of field |
| slit_id | 0L | |
| obj_id | ' ' | ID value (a=primary, b-z=serendip, x=NG) |
| flg_anly | 0 | 0=No analysis |
| exp | 0. | |
| xcen | 0L | Column where obj was id |
| ycen | 0. | |
| flg_aper | 0 | 0=boxcar |
| aper | fltarr(2) | Widths of aperture, 0/1 = bottom/top (pixels) |
| skyrms | 0. | RMS of sky fit |
| trace | fltarr(5000) | |
| npix | 0L | |
| wave | fltarr(5000) | |
| fx | fltarr(5000) | |
| var | fltarr(5000) | 15#15 rejected pix |
| flg_flux | 0 | 0=f16#16, 1=f17#17 |
| flux | fltarr(5000) | Fluxed data |
| sig | fltarr(5000) | Err in fluxed data |
| date | 0.0d | |
| UT | ' ' | |
| img_fil | ' ' | |
| slit_fil | ' ' | |
| instr_strct | ' ' | e.g. wfccdstr fits file |
Sky Subtraction
Extraction
Check/Edit the Individual Spectra
Flux the Spectra
Combine the Spectra
Solve for Redshifts


Following Cards are launching the test cases.
This button launches the CashFlow which passes.
This button launches the CashFlow which fails.
This button launches the report
This button launches the test functions


"More powerful than a rushing river!"
"More powerful than a rushing river!"
Collect 80 fragments of Abyssal Salve from
Chapter 14 - Powerful Knowledge (Heroic Difficulty)
Complete 10 times with Aqua in your party
(Extreme+ Difficulty)
Complete the stage with Aqua in your party
Requirement: Aqua must kill Baltor (Heroic Difficulty)
| Item Stats + Max Enchant | ||
|---|---|---|
| Max Health | 700 | +630 |
| Physical Attack | 190 | +168 |
| Physical Crit | 60 | +56 |
| Physical Pierce | 60 | +56 |
| Forge Bonus Stats | |||
|---|---|---|---|
| P. Attack | ≥ 40 | P. Pierce | +30 |
| P. Armor | ≥ 100 | P. Attack | +70 |
| M. Armor | ≥ 200 | Max Health | +2000 |


Typedefs | |
| typedef void *(* | koishi_entrypoint_t) (void *data) |
| A coroutine entry point. More... | |
Enumerations | |
| enum | koishi_state { KOISHI_SUSPENDED , KOISHI_RUNNING , KOISHI_DEAD , KOISHI_IDLE } |
| State of a koishi_coroutine_t instance. More... | |
Functions | |
| KOISHI_API void | koishi_init (koishi_coroutine_t *co, size_t min_stack_size, koishi_entrypoint_t entry_point) |
| Initialize a koishi_coroutine_t structure. More... | |
| KOISHI_API void | koishi_recycle (koishi_coroutine_t *co, koishi_entrypoint_t entry_point) |
| Recycle a previously initialized coroutine. More... | |
| KOISHI_API void | koishi_deinit (koishi_coroutine_t *co) |
| Deinitialize a koishi_coroutine_t structure. More... | |
| KOISHI_API void * | koishi_resume (koishi_coroutine_t *co, void *arg) |
| Resume a suspended coroutine. More... | |
| KOISHI_API void * | koishi_yield (void *arg) |
| Suspend the currently running coroutine. More... | |
| KOISHI_API KOISHI_NORETURN void | koishi_die (void *arg) |
| Return from the currently running coroutine. More... | |
| KOISHI_API void | koishi_kill (koishi_coroutine_t *co, void *arg) |
| Stop a coroutine. More... | |
| KOISHI_API int | koishi_state (koishi_coroutine_t *co) |
| Query the state of a coroutine. More... | |
| KOISHI_API koishi_coroutine_t * | koishi_active (void) |
| Query the currently running coroutine context. More... | |
| typedef void*(* koishi_entrypoint_t) (void *data) |
A coroutine entry point.
The entry point is a function that is called inside a coroutine context when it is resumed for the first time.
Once the entry point returns, control flow jumps back to the last koishi_resume call for this coroutine, as if it yielded. Its state is set to KOISHI_DEAD and it may not be resumed again.
| data | User data that was passed to the first call to koishi_resume. |
| enum koishi_state |
State of a koishi_coroutine_t instance.
| Enumerator | |
|---|---|
| KOISHI_SUSPENDED | The coroutine is suspended and may be resumed with koishi_resume. |
| KOISHI_RUNNING | The coroutine is currently executing and may be yielded from with koishi_yield. Only up to one coroutine may be running per thread at all times. |
| KOISHI_DEAD | The coroutine has finished executing and may be recycled with koishi_recycle or destroyed with koishi_deinit. |
| KOISHI_IDLE | The coroutine has resumed another coroutine and is waiting for it to yield. |
| KOISHI_API koishi_coroutine_t* koishi_active | ( | void | ) |
Query the currently running coroutine context.
| KOISHI_API void koishi_deinit | ( | koishi_coroutine_t * | co | ) |
Deinitialize a koishi_coroutine_t structure.
This will free the stack and any other resources associated with the coroutine.
Memory allocated for the structure itself will not be freed, this is your responsibility.
After calling this function, the coroutine becomes invalid, and must not be passed to any of the API functions other than koishi_init. In particular, it may not be recycled.
| co | The coroutine to deinitialize. |
| KOISHI_API KOISHI_NORETURN void koishi_die | ( | void * | arg | ) |
Return from the currently running coroutine.
Like koishi_yield, except the coroutine is put into the KOISHI_DEAD state and may not be resumed again. For that reason, this function does not return. This is equivalent to returning from the entry point.
| arg | Value to return from the corresponding koishi_resume call. |
| KOISHI_API void koishi_init | ( | koishi_coroutine_t * | co, |
| size_t | min_stack_size, | ||
| koishi_entrypoint_t | entry_point | ||
| ) |
Initialize a koishi_coroutine_t structure.
This function must be called before using any of the other APIs with a particular coroutine instance. It allocates a stack at least min_stack_size
bytes big and sets up an initial jump context.
After this function returns, the coroutine is in the KOISHI_SUSPENDED state. When resumed (see koishi_resume), entry_point
will begin executing in the coroutine's context.
| co | The coroutine to initialize. |
| min_stack_size | Minimum size of the stack. The actual size will be a multiple of the system page size and at least two pages big. If 0, the default size will be used (currently 65536). |
| entry_point | Function that will be called when the coroutine is first resumed. |
| KOISHI_API void koishi_kill | ( | koishi_coroutine_t * | co, |
| void * | arg | ||
| ) |
Stop a coroutine.
Puts co
into the KOISHI_DEAD state, indicating that it must not be resumed again. If co
is the currently running coroutine, then this is equivalent to calling koishi_die with arg
as the argument.
If co
is in the KOISHI_IDLE state, the coroutine it's waiting on would yield to the caller of co
, as if co
called koishi_yield(arg
). This applies to both explicit and implicit yields (e.g. by return from the entry point), recursively.
| co | The coroutine to stop. |
| arg | Value to return from the corresponding koishi_resume call. |
| KOISHI_API void koishi_recycle | ( | koishi_coroutine_t * | co, |
| koishi_entrypoint_t | entry_point | ||
| ) |
Recycle a previously initialized coroutine.
This is a light-weight version of koishi_init. It will set up a new context, but reuse the existing stack, if allowed by the implementation. This is useful for applications that want to create lots of short-lived coroutines fairly often. They can avoid expensive stack allocations and deallocations by pooling and recycling completed tasks.
| co | The coroutine to recycle. It must be initialized. |
| entry_point | Function that will be called when the coroutine is first resumed. |
| KOISHI_API void* koishi_resume | ( | koishi_coroutine_t * | co, |
| void * | arg | ||
| ) |
Resume a suspended coroutine.
Transfers control flow to the coroutine context, putting it into the KOISHI_RUNNING state. The calling context is put into the KOISHI_IDLE state.
If the coroutine is resumed for the first time, arg
will be passed as a parameter to its entry point (see koishi_entrypoint_t). Otherwise, it will be returned from the corresponding koishi_yield call.
This function returns when the coroutine yields or finishes executing.
| co | The coroutine to jump into. Must be in the KOISHI_SUSPENDED state. |
| arg | A value to pass into the coroutine. |
| KOISHI_API int koishi_state | ( | koishi_coroutine_t * | co | ) |
Query the state of a coroutine.
| KOISHI_API void* koishi_yield | ( | void * | arg | ) |
Suspend the currently running coroutine.
Transfers control flow out of the coroutine back to where it was last resumed, putting it into the KOISHI_SUSPENDED state. The calling context is put into the KOISHI_RUNNING state.
This function must be called from a real coroutine context.
This function returns when and if the coroutine is resumed again.
| arg | Value to return from the corresponding koishi_resume call. |


WITNESS LIST
Criminal Justice
April 18, 2017 1:30 PM - or upon adjournment
FOR:
Braxton, Felicia (Self), Fort Worth, TX
Grardino, Vincent Assistant CDA (Tarrant County Criminal District Attorney's Office),
Fort Worth, TX
Hurst, Mary (Self), Alvarado, TX
Lopez, Lisa (Self), Crowley, TX
FOR:
Dice, Michael Policy Admin (City of San Antonio), San Antonio, TX
Registering, but not testifying:
FOR:
Jones, James Sergeant (San Antonio Police Department), San Antonio, TX
Registering, but not testifying:
FOR:
Boyce, Liz Staff Attorney (Texas Association Against Sexual Assault), Austin, TX
Sanford, Tiana Jean Assistant District Attorney (Montgomery County District Attorney's
Office), Conroe, TX
Wood, Justin Assistant District Attorney (Travis County District Attorney), Austin, TX
Providing written testimony:
FOR:
Stein, Lucy (Self), Austin, TX
FOR:
Sanchez, Melissa Texas Public Policy Lead (Alzheimer's Association), Houston, TX
Registering, but not testifying:
FOR:
Fredriksen, Amanda Associate State Director, Advocacy (AARP), Austin, TX
ON:
Kidd, Nim Chief (Department of Public Safety), Austin, TX
Providing written testimony:
FOR:
Waters, Cacie Public Policy Specialist (Clarisa Flint & Alzheimer's Association: San
Antonio and South Texas), San Antonio, TX
Registering, but not testifying:
FOR:
Sanford, Tiana Jean Assistant District Attorney (Montgomery County District Attorney's
Office), Conroe, TX
VanSteenberg, Chip Executive Director (Montgomery County Emergency
Communication), Conroe, TX
Woodard, Shayne Consultant (Texas 9-1-1 Alliance), Austin, TX
WITNESS LIST
Criminal Justice
April 18, 2017 1:30 PM - or upon adjournment
FOR:
Creuzot, John (Self), Dallas, TX
May, Teresa (Harris County CSCD), Houston, TX
Registering, but not testifying:
FOR:
Owens, Trey Policy Analyst (Texas Criminal Justice Coalition), TX
Wood, Justin Assistant District Attorney (Travis County District Attorney), Austin, TX
FOR:
Ray, Tim (Effaustin.org), Austin, TX
Registering, but not testifying:
FOR:
Capers, Greg Sheriff (Sheriffs" Association of Texas), Colospring, TX
Frazier, Frederick 1st Vice President (Dallas Police Association), Dallas, TX
Harmon, Micah C. Lavaca County Sheriff (Sheriffs' Association of TX), Hallettsville, TX
O'Connor, Michael Sheriff (Victoria Sheriff Office), Victoria, TX
Ramirez, Reuben G. Major of Police (Dallas Police Department), Dallas, TX
Roberts, Jack (Texas Society of CPA's), Austin, TX
ON:
Preston, Terry Major (Texas Department of Public Safety), Austin, TX


---
layout: post
title: MyFaceCosmetics MyMix Foundation
tags:
- MyFace Cosmetics
status: publish
type: post
published: true
meta:
_edit_last: '2'
wp_plus_one_redirect: ''
_aioseop_title: MyFaceCosmetics MyMix Foundation
_aioseop_keywords: MyFaceCosmetics MyMix Foundation review
wp_plus_one_disabled: '1'
_yoast_wpseo_linkdex: '0'
_thumbnail_id: '3681'
_yoast_wpseo_focuskw: ''
_yoast_wpseo_title: ''
_yoast_wpseo_metadesc: ''
_yoast_wpseo_metakeywords: ''
_yoast_wpseo_meta-robots-noindex: '0'
_yoast_wpseo_meta-robots-nofollow: '0'
_yoast_wpseo_meta-robots-adv: none
_yoast_wpseo_sitemap-include: ! '-'
_yoast_wpseo_sitemap-prio: ! '-'
_yoast_wpseo_canonical: ''
_yoast_wpseo_redirect: ''
---
Its kind of tricky to get that perfect shade and finish in foundation. As a novice I always wished to get that natural flawless look, without any whitish cast, dry and cakey patches.
This foundation is with me since last two months, but I never got a chance to try it out, since its a darker shade. Luckily Unluckily my regular 10K practices under the sun left me tanned, and this shade looked so much natural then. I am really happy and would love to introduce this,
Price: £15.99 for 25ml
About:
For medium skin that tends to have medium to deep olive tones. MEDIUM 03 creates a rich, "caramel-y" glow. It camouflages any uneven skin tones and delivers that just-back-from-holiday glow.
If your skin tone is like Jennifer Lopez, Jessica Alba or Eva Longoria, choose MEDIUM 03.
- mymix foundations for MEDIUM skin celebrate the golden, honey tones while colour-correcting to masque any signs of sallowness.
- lightweight texture leaves skin feeling like you have nothing on…but looking flawless.
My experience: What I liked the most about it is the long lasting dewing look it gives. The formula is very light and very easy to blend. I use my fingers which are just enough for that uniform coverage. This foundation gives a medium coverage and does not hide certain problem areas. Gives a dewy finish which lasts me 4-5 hours (I have oily skin).
What I like:
- The dewy finish, thats definitely a plus for me,
- Very light texture,
- Very easy to blend, no brush required for that uniform coverage,
- Lasting power is good,
- Lots of shades to choose from,
- Does not settle into fine lines, neither looks cakey and fake,
What I did not like:
- I prefer a pump packaging, for foundations. More control on the amount that way,
- Available only online :(
This is a perfect everyday foundation with medium coverage, will totally recommend to those looking for natural and dewy finish. For complete coverage use of concealer and powder is a must.
How do you like your foundation, dewy or matte ?
You can catch them @ Website, Facebook, & Twitter
*Product was sent by the company, but that has not affected the review.


Displays the CAPTCHA verification image and the input text box. This module can be added from the webform detail panel like so: http://helpx.adobe.com/business-catalyst/using/create-insert-form.html#id_33012
{module_captchav2,[background color],[text color],[width in pixels]}
For background and text color, you can use named colors or hexadecimal color values. See HTML Color Picker on www.w3schools.com
{module_captchav2,LightBlue,#FF3300,220}


User Information
Name
Birthday
Select a Planet
Earth
Mercury
Venus
Mars
Jupiter
Select Life Expectancy by Continent
Northern America
Europe
Oceania
Latin America
Asia
worldwide
Africa
×
In this planet you are
years old.


Joe Gordon
“ Very large, active development team
Over the past twelve months, 1338 developers contributed new code to OpenStack. This is one of the largest open-source teams in the world, and is in the top 2% of all project teams on Ohloh.
For this measurement, Ohloh considers only recent changes to the code. Over the entire history of the project, 1808 developers have contributed.”
is 966,104 lines of python code
and OpenStack is 1,860,725!
(Rackspace data center)
In January 2011
Pros
Cons
OpenStack started with just two projects - Nova and Swift.
Now the same functionality is spread out over 6 projects.
Nova, Swift, Glance, Keystone, Cinder, Neutron
Statistics from ohlo.net
Powered by reveal.js


Follow the following instructions and use this page to calculate your CGPA:
Semester Credits
Enter below the total credits of all semesters, in sequence, separated by commas:
Method 1
Enter the individual SGPAs of all semesters:
Method 2
Enter the CGPA till 5th semester and expected SGPA of last 3 semesters:
Method 3
Enter the CGPA till 6th semester and expected SGPA of last 2 semesters:
Method 4
Enter the CGPA till 7th semester and expected SGPA of last semester:


|
WHEN ORDINARY PEOPLE DECIDE
YOUR FATE: FOX'S THE JURY
By Michael Asimow
With few exceptions, the jury
gets shortchanged in popular culture. In countless trials in
the movies and on TV, the verdict supplies the necessary suspense
element in the story. When the judge asks the twelve strangers
whether they have reached a verdict, we never know whether the
defendant will get a lethal injection or be escorted out the
courthouse door to freedom.
But
the narrative function of the jury goes far beyond generating
suspense. The standard trope in courtroom drama is to treat the
viewers as if they themselves are the jurors who are called upon
to reach a verdict. They watch the trial (well, the best bits
of it anyway) as if they were sitting in the jury box and they
reach their own conclusions about which witnesses are telling
the truth or lying. Since the consumers of the film or TV show
are intended to see themselves as jurors, they never learn much,
if anything, about the actual jurors. Such knowledge would only
get in the way of feeling like a juror yourself. Thus the focus
in courtroom drama is on the defendant, the lawyers, the judge,
the victims, the witnesses-but not on those out-of-focus faces
in the jury box.
Of course, there have been
some important exceptions. By far the most famous is 12 Angry
Men, Sidney Lumet's great 1957 drama which is now nearing
its 50th birthday. (The Showtime 1997 remake wasn't at all bad).
Another big exception is the stunning 2002 BBC miniseries The
Jury which focused almost entirely on the jury deliberations
in a difficult multiracial murder case. Unlike 12 Angry Men,
the BBC's The Jury seriously explored all the personal
problems that the jurors brought with them to the courthouse.
Runaway Jury was a pretty decent thriller centering on
a juror with an agenda. But what else can you think of? Aside
from a couple of pretty average jury tampering movies (The
Juror, Trial by Jury), and a dumb Paulie Shore comedy (Jury
Duty), and occasional snippets of deliberation (as in The
Rainmaker), the movies have pretty much stayed out of the
jury room.
All of which brings us to the
new Fox series, The Jury. Each week, twelve new actors
serve as the jury while the same cast members function as lawyers,
judge, and bailiff. (This will be a boon to the NY acting community).
We'll be sitting in the jury room with the jurors as they sweat
out their decision in a difficult criminal case. Occasionally,
the action cuts to scenes from the trial so we catch up with
what the jury has seen (we also see some plea bargaining which
the jury, of course, doesn't get to see). One interesting feature
is that viewers out there in TV land are asked to vote on the
case (The People's Court uses the same gimmick) which
requires us to pay attention and try to commit to one result
or the other. Finally, after the verdict is delivered, we see
what really went down at the crime scene. In the initial episode,
Three Boys and a Gun, we discover that the jury blew it.
You know what? I liked this
show.  They all had their own perspectives, their own
biases, just like real jurors do. They're people from different
ethnic groups, different social classes, who would never find
themselves together in the same room under other circumstances.
And they didn't always behave very well. Two of them spent the
night together and violated the judge's order by watching TV
news. One speculated that the defendant must have had a record
since he was a juvenile being tried as an adult. Others guessed
about what would happen to the kid if he is sent to adult prison.
Things got pretty heavy when one of the jurors accused the holdout
juror of being a Latina sticking up for a Latino defendant.
But they did a fair, responsible job, based on what they had
heard. It wasn't pretty, but it worked.
It's amazing, really. Almost
everybody does whatever they can to avoid jury duty. Those who
actually serve (only a fraction of those who were summoned) may
be good citizens or they may just be fearful of the consequences
if they flake. They have been conscripted to serve against their
will, torn from their jobs or businesses or from their homes,
and receive only a pittance for their services. It's the last
place they want to be. They must hang around the jury room for
hours or days waiting to be called. They are herded around the
courthouse like cattle. They are subjected to intrusive questions
and are unfairly challenged because lawyers think they won't
be fair or because they violate the lawyers' stereotypes. They
are bored to tears while sitting through tedious testimony or
inaudible sidebars.  Yet, both anecdotal evidence
and scholarly studies show that jurors are dead serious about
their job.
Jurors are just about the last
bastion of direct democracy in our country. They actually bear
the responsibility to apply the law in individual cases, involving
long prison terms, the death penalty, or huge amounts of money.
For practical purposes, their decision is final. Elites don't
make these critical decisions, ordinary folks do. Most of the
time, the individual has almost no voice in how things are run.
You can vote, of course, but you're one of millions. Your legislator
or your president or governor try to manipulate you but couldn't
care less what you actually think. Your life is controlled by
powerful officials such as police, tax collectors, or bureaucrats.
The jury room is just about the only place where you-just you-get
to govern.
So two cheers for Fox's The
Jury. OK, the deliberations got a little tedious and some
of the jurors (and the bailiff) were annoying. But the show
effectively simulates real people struggling hard to do the right
thing, arguing passionately with their fellow jurors, handing
out justice in tough cases the best that they can. That's the
very core of our legal system. Maybe it's not the greatest system
in the world, but it's all we've got. The people whose hard
work and sacrifice makes the jury system function should be celebrated
in pop culture far more often than they have been.
Posted July 8, 2004
|


n
into a hexadecimal representation.
If digits
is specified, the resulting String is padded with "0" until
its length equals digits
.s
.
The following replacements are made:
- & becomes &
- < becomes <
- > becomes >
If quotes
is true, the following characters are also replaced:
- " becomes "
- ' becomes 's
at position pos
is a space.
A character is considered to be a space character if its character code
is 9,10,11,12,13 or 32.
If s
is the empty String "", or if pos is not a valid position within
s
, the result is false.s
.
This function internally calls isSpace() to decide which characters to
remove.
If s
is the empty String "" or consists only of space characters, the
result is the empty String "".sub
in the String s
by the
String by
.
If sub
is the empty String "", by
is inserted after each character
of s
. If by
is also the empty String "", s
remains unchanged.
This is a convenience function for s
.split(sub
).join(by
).
If sub
or by
are null, the result is unspecified.s
.
This function internally calls isSpace() to decide which characters to
remove.
If s
is the empty String "" or consists only of space characters, the
result is the empty String "".s
starts with the string start
.
If start
is null, the result is unspecified.
If start
is the empty String "", the result is true.
s
ends with the stringend
. Ifend
is null, the result is unspecified. Ifend
is the empty String "", the result is true.


What is this all about?
The eeh-navigation AngularJS module provides a configurable, responsive navbar and sidebar directive. It also contains a companion menu item configuration service. The directives support navigation of UI-Router states, ng-click binding, and ng-href links.
eeh-navigation is used in its own documentation (i.e. this site).
There are live examples of eeh-navigation in action.
The AngularJS version of the SB Admin 2 theme also uses eeh-navigation.


WITNESS LIST Natural Resources Committee (Subcommittee on Groundwater Permit Exemptions) April 28, 1998-1:30P Groundwater Permit Exemptions On: Bowers, Richard (North Plains GCD #2) Everheart, Harvey (Mesa UWCD) Kowis, James (TNRCC) Moore, David L. (North Plains GCD #2) Powers, Bill (TX Farm Bureau) Spearman, John (Panhandle GWC Dist #3) Swinford, David (State Representative) Williams, C.E. (Panhandle GWC Dist #3) Wilson, Ross (TX Cattle Feeders Assoc)


or, someone bombards you with fresh, new ideas for computer fun, but promises to give you links for both the slides and how to procure the wizardry that will follow
by Meggie Mahnken
confession: I used to hate tools.
Then I became a developer.
And I started to hate my browser.
This Talk
There will be lots of pictures and screenshots.
Sometimes I will simply discuss a term.
Goal: breadth, not depth
My personal goal: try all the tools!
A is for AppleScript
a scripting language for "inter-application communication" on macs
good for modifying files en masse
built-in editor on macs
inside the built-in editor there are things called "application dictionaries"
these aren't that useful, but the AppleScript docs on the company's websites are
lots of fun scripts and "recipes" to sift through that people have already written
Hello, world!
B is for Brackets
A text editor that's oriented towards design
Easily preview HTML/CSS
closes tags automatically
closes tags automatically
seriously, never forget a closing tag in html again
It's also a full text editor, so many more secrets lie within.
C is for Command Line Interfaces
clicking is hard
some of your favorite web applications have command line versions
lets you continually dump the output of any terminal command to your desktop
example: date, disc usage, current machine processes, simple python scrips
always have the output of git branch appear on top of everything else
H is for HotKeys (Mac and Windows)
what are these?
(n.) can mean keyboard shortcuts, but more often refers to Windows-specific single-letter shortcuts that apply in a variety of contexts and may or may not require the "alt" key to be pressed.
all of my video screenshots were made into gifs by RecordIt
live demo (!)
Z is for zsh
A bit of shell history
History of shell
Thanks to most of the developers I know for telling me about their setups and tools.Thanks to Christine Yen who gave a talk that inspired this one.Thank you.
reveal.js is a framework for easily creating beautiful presentations using HTML. You'll need a browser with
support for CSS 3D transforms to see it in its full glory.
Vertical Slides
Slides can be nested inside of other slides,
try pressing down.
Basement Level 1
Press down or up to navigate.
Basement Level 2
Cornify
Basement Level 3
That's it, time to go back up.
Slides
Not a coder? No problem. There's a fully-featured visual editor for authoring these, try it out at http://slid.es.
Point of View
Press ESC to enter the slide overview.
Hold down alt and click on any element to zoom in on it using zoom.js. Alt + click anywhere to zoom back out.
Works in Mobile Safari
Try it out! You can swipe through the slides and pinch your way to the overview.
* Theme demos are loaded after the presentation which leads to flicker. In production you should load your theme in the <head> using a <link>.
Global State
Set data-state="something" on a slide and "something"
will be added as a class to the document element when the slide is open.
Custom Events
Additionally custom events can be triggered on a per slide basis by binding to the data-state name.
Pass reveal.js the backgroundTransition: 'slide' config argument to make backgrounds slide rather than fade.
Background Transition Override
You can override background transitions per slide by using data-background-transition="slide".
Clever Quotes
These guys come in two forms, inline:
“The nice thing about standards is that there are so many to choose from” and block:
“For years there has been a theory that millions of monkeys typing at random on millions of typewriters would
reproduce the entire works of Shakespeare. The Internet has proven this theory to be untrue.”
Pretty Code
function linkify( selector ) {
if( supports3DTransforms ) {
var nodes = document.querySelectorAll( selector );
for( var i = 0, len = nodes.length; i < len; i++ ) {
var node = nodes[i];
if( !node.className ) {
node.className += ' roll';
}
}
}
}
You can link between slides internally,
like this.
Fragmented Views
Hit the next arrow...
... to step through ...
any type
of view
fragments
Fragment Styles
There's a few styles of fragments, like:
grow
shrink
roll-in
fade-out
highlight-red
highlight-green
highlight-blue
current-visible
highlight-current-blue
Spectacular image!
Export to PDF
Presentations can be exported to PDF, below is an example that's been uploaded to SlideShare.
Take a Moment
Press b or period on your keyboard to enter the 'paused' mode. This mode is helpful when you want to take distracting slides off the screen
during a presentation.


The 16-year history of trying to get an arena for Bristol
After years of waiting, millions of pounds spent and months of political arguing about where it should be built - plans for an arena in Bristol take a major step forward
by Kate WilsonFirst proposed 16 years ago, the road to an arena for Bristol has been long and arduous to say the least.
Former Bristol Mayor George Ferguson played a key role in identifying the Temple Quay location and the deal was weeks away from being signed back in 2016.
But a row over a lack of car parking spaces delayed the project and meant Mr Ferguson could not firm up the contract before the mayoral election that year.
In Pictures: What the YTL Arena Bristol could look like
After beating Mr Ferguson, current mayor Marvin Rees paused the project and launched a ‘value for money’ assessment last spring over fears of mounting costs with the city centre site.
Following the publication of the KPMG report, Mr Rees officially scrapped plans for an arena at Temple Island in September, despite the council sinking £12million in to clearing and preparing it for the concert venue.
Instead the council said it would push forward with plans for a ‘mixed use’ development on the site which may include a conference centre, housing, offices and shops.
In that time Malaysian investment firm YTL has been working on its own proposals to build an arena complex at the Brarbazon hangar site in Filton.
The firm has now submitted a planning application for the site and revealed its plans for an arena on the edge of the city.
It's been a long and winding road to get to this point. Below is a timeline of all the twists and turns in the tale of trying to get an arena for Bristol.
Time Line
Bristol Arena Timeline
-
2003
Plans for an arena for Bristol were first proposed in 2003 with the aim of having it completed by 2008.
It was agreed that the arena should be built on brownfield site near Bristol Temple Meads station, on the former Bristol Bath Road depot land.
The arena was originally planned to have a 10,000 capacity.
-
2004
Bristol City Council buys nine acres of land next to Bristol Temple Meads station for £13million
-
2007
Fears of the spiralling cost of the area are raised in June 2007.
In December the plans are shelved after a report predicts that the project will come to £86million.
-
2009
The quest for an arena in the city was given a new lease of life in 2009 when plans for a 15,000 capacity venue were proposed in Ashton Vale, close to where Bristol City wanted to build a new stadium.
This was originally supported by the council, however architect and future Mayor, George Ferguson, lobbied the council to use the original Temple Meads plan.
-
2012
After several reports the council again changed its mind on the location of the arena and reverted back to the original site in Temple Meads.
The then Liberal Democrat controlled council said it would fund the project through a Bristol Bond.
After his election in November 2012, Bristol Mayor, George Ferguson gave new impetus to the plans and said the Bristol Arena was one of the main priorities for his administration.
-
2013
In January 2013 Mr Ferguson launched a competition for architects to submit designs for the Bristol Arena.
-
2014
Plans for a 12,000 capacity arena near Temple Meads were approved by Bristol City Council in February 2014.
It was agreed that £53million - the bulk of funding - would come from the West of England Local Enterprise Partnership City Deal and the remaining £38million would be loaned to the council by the lease operator.
Mr Ferguson predicted that the arena will be open by 2017.
A design by architectural firm, Populous, was voted as the favourite for the venue by the people of Bristol.
-
2015
Costs for the Arena jump by 16 per cent bringing the total to £93 million.
The project is pushed back to 2018.
Councillors also raised concerns over parking provisions at the area, with only 45 permanent spaces planned for the city centre venue.
-
2016
In January plans for an eight-storey, 500 space car park, were added to the arena brief with the aim of dispelling parking fears.
In March the council delayed the final approval of arena plans citing a lack of clarity.
It was also suggested that Mr Ferguson was attempting to push through approval to aid his election campaign.
In response, the former Mayor accused the committee of playing "party politics".
The plans were finally approved five weeks later, however the delay added an extra £400,000 on to the cost of the project.
-
January 2017
Bristol City Council axe contractors Bouygues UK Limited after an agreement on price could not be reached.
Bristol Mayor, Marvin Rees, released a statement assuring the public that the arena would go ahead, but had to be the right price.
-
March 2017
Papers released for Bristol City Council cabinet meeting in which councillors are recommended to approve Buckingham Group as new arena contractors.
Officers say three options will be left to the council if it cannot agree a price with Buckingham Group: drawing new plans for the arena, reducing arena capacity or shelving the project.
The council will also have to rethink parking plans for the arena after it sold the former Royal Mail sorting office - the site originally designated for an arena car park - to Bristol University.
The cost for the arena and supporting infrastructure now stands at £123.5million.
-
April 2017
Buckingham Group approved as new arena contractors.
Marvin Rees launches 'value for money' assessment to assess the future of the arena.
-
November 2017
Marvin Rees extends the 'value for money' assessment and goes back to the drawing board saying "nothing is off the table" including private investment, a new site or a a new design.
The Bristol Post reveals the council is considering moving the arena to the Brabazon hangar in Filton Airfield.
-
January 2018
Bristol City Council publicly admits it is considering YTL's offer and the bid will be included in it's value for money assessment.
-
March 2018
Bristol's Green Group put forward a motion in Full Council to keep the venue in the city centre. Several Labour councillors blasted the motion for being "inappropriate", but despite the protestations it was passed by 34 to 12 votes with 17 abstentions.
A 4,500 strong public petition in support of Temple Island was also submitted to the council.
-
April 2018
A decision on the location of Bristol Arena is delayed to allow Bristol City Council's scrutiny committee to review the 'value for money' assessment.
The announcement was due to be made on Tuesday, May 1.
-
June 12, 2018
The 'value for money' assessment in to Arena Island and Filton Airfield is published.
The KPMG report states the cost of building the concert venue on the city centre site had risen by £65million to £188.6million.
The auditors claim an arena on Temple Island would be profitable, however the land would provide more money and jobs if it was used for a conference centre, housing and shops.
The financial experts warn of potential "economic leakage" from the city centre if the arena is moved to north Bristol.
-
June 19, 2018
A week long scrutiny session begins in to the 'value for money report'.
The committee is told contractors, Buckingham Group, can build the arena in the city centre for the pre-arranged sum of £122million.
Councillors eventually recommend the venue should remain on Temple Island.
-
June 26, 2018
Bristol Mayor, Marvin Rees, announces he will delay making a decision on the arena site again to consider "new information".
The decision is moved back to September.
-
August 13, 2018
Bristol Live reveals private talks on whether to move the Bristol Arena from Temple Island to Filton started at least six months before the council has officially acknowledged.
-
August 20, 2018
A cross party group of councillors successfully calls for an extraordinary full council meeting to discuss the arena project.
Councillors want Mr Rees to "abide by" the result of a full council vote when making his decision.
-
August 21, 2018
Plans for a conference centre, homes, shops and a hotel on Temple Island are released by asset management firm Legal and General.
-
August 24, 2018
Cabinet papers recommend Mr Rees ditches plans for an arena on Temple Island and pushes forward with the proposed mixed use alternative.
-
September 3, 2018
Mr Rees supports the extraordinary full council motion which states the best place for an arena is Temple Island.
However, he claims 'all things are not equal' and the risks are too high for a city centre concert venue.
-
September 4, 2018
The Labour Mayor formally approves plans to scrap the arena on Temple Island and instead use the land to develop a conference centre, offices, a hotel, housing and shops.
-
September 20, 2018
Councillors from the Conservative and Liberal Democrat groups asked for Mr Rees' decision to be looked at again - citing "failures in the decision making process" which they said needed to be addressed.
A special call-in committee met to review the decision, but the challenge was thrown out and the committee agreed to take no further action.
-
January 2019
YTL revealed more details about its plans for a 17,000 seat arena at the Brabazon hangars in Filton.
This included the name - YTL Arena Bristol - to honour Yeoh Tiong Lay the man who founded YTL in Malaysia back in 1955.
-
March 2019
Massive Attack performs two shows at Steel Yard, a custom-built venue on Filton Airfield with a capacity of 14,000.
Many saw the events as a test run for how the city would cope when tens of thousands of people tried to get to a concert on the edge of the city during rush hour.
-
April 2019
YTL announces its design team for the arena project.
Grimshaw Architects - the company who designed The Eden Project and Thermae Bath Spa - would be working in partnership with Manica Architecture.
Landscape architects Grant Associates and planning consultants Avison Young were appointed to the project to help support them through the planning process, as well as structural and technical engineers and specialist consultants.
-
July 2019
Bristol City Council's cabinet agreed to continue discussions with Legal & General so an agreement regarding the Temple Island site can be reached.
It also agreed to spend £500,000 to progress development proposals for the site and to agree to enter into a Strategic Partnership with the asset management firm.
-
July 2019
YTL gives the public its first chance to see what it has planned for an arena at Filton.
The firm hosts a number of roadshows across Bristol and South Gloucestershire and also opens up the hangars for public tours.
-
November 2019
YTL formally submits a planning application to Bristol City Council to build an arena complex at the Brabazon hangars in Filton.
If you would like to see all the latest news from in and around Bristol, you can check back on Bristol Live's homepage .


uevent - User events
This package provides a general facility for the handling of user events. Allows the binding of arbitrary commands to arbitrary events on arbitrary tags, removal of bindings, and event generation.
The main difference to the event system built into the Tcl/Tk core is that the latter can generate only virtual events, and only for widgets. It is not possible to use the builtin facilities to bind to events on arbitrary (pseudo-)objects, nor is it able to generate events for such.
Here we can, by assuming that each object in question is represented by its own tag. Which is possible as we allow arbitrary tags.
More differences:
The package uses only a two-level hierarchy, tags and events, to handle everything, whereas the Tcl/Tk system uses three levels, i.e. objects, tags, and events, with a n:m relationship between objects and tags.
This package triggers all bound commands for a tag/event combination, and they are independent of each other. A bound command cannot force the event processing core to abort the processing of command coming after it.
The package exports eight commands, as specified below. Note that when the package is used from within Tcl 8.5+ all the higher commands are ensembles, i.e. the :: separators can be replaceed by spaces.
Using this command registers the command prefix to be triggered when the event occurs for the tag. The result of the command is an opaque token representing the binding. Note that if the same combination of <tag,event,command> is used multiple times the same token is returned by every call.
The signature of the command prefix is
where details contains the argument(s) of the event. Its contents are event specific and have to be agreed upon between actual event generator and consumer. This package simply transfers the information and does not perform any processing beyond that.
This command releases the event binding represented by the token. The token has to be the result of a call to ::uevent::bind. The result of the command is the empty string.
This command generates an event for the tag, triggering all commands bound to that combination. The details argument is simply passed unchanged to all event handlers. It is the responsibility of the code generating and consuming the event to have an agreement about the format and contents of the information carried therein. The result of the command is the empty string.
Note that all bound commands are triggered, independently of each other. The event handlers cannot assume a specific order. They are also not called synchronously with the invokation of this command, but simply put into the event queue for processing when the system returns to the event loop.
Generating an event for an unknown tag, or for a <tag,event> combination which has no commands bound to it is allowed, such calls will be ignored.
In this form the command returns a list containing the names of all tags which have events with commands bound to them.
In this format the command returns a list containing the names of all events for the tag with commands bound to them. Specifying an unknown tag, i.e. a tag without event and commands, will cause the command to throw an error.
In this format the command returns a list containing all commands bound to the event for the tag. Specifying an unknown tag or unknown event, will cause the command to throw an error.
This command sets up a sort of reverse events. Events generated, i.e. the command prefix invoked, when observers bind to and unbind from specific tags.
Note that the command prefix is only invoked twice per tag, first when the first command is bound to any event of the tag, and second when the last command bound to the tag is removed.
The signature of the command prefix is
The result of the command is a token representing the watcher.
This command removes a watcher for (un)bind events on tags.
The result of the command is the empty string.
This command sets up a sort of reverse events. Events generated, i.e. the command prefix invoked, when observers bind to and unbind from specific combinations of tags and events.
Note that the command prefix is only invoked twice per tag/event combination, first when the first command is bound to it, and second when the last command bound to the it is removed.
The signature of the command prefix is
The result of the command is a token representing the watcher.
This command removes a watcher for (un)bind events on tag/event combinations.
The result of the command is the empty string.
This document, and the package it describes, will undoubtedly contain bugs and other problems. Please report such in the category uevent of the Tcllib Trackers. Please also report any ideas for enhancements you may have for either package and/or documentation.
When proposing code changes, please provide unified diffs, i.e the output of diff -u.
Note further that attachments are strongly preferred over inlined patches. Attachments can be made by going to the Edit form of the ticket immediately after its creation, and then using the left-most button in the secondary navigation bar.
Programming tools
Copyright © 2007-2012 Andreas Kupries <andreas_kupries@users.sourceforge.net>


${preBootJs}
The Qookery library allows Qooxdoo programmers to declare and run user interfaces through an easy to master XML language.


class: center, middle # Things Other People Have Said About Technical Debt --- # The Agenda 1. The Agenda 1. What It Is 1. Why It's Bad 1. How to Address the Bad 1. Bonus: Technical Inflation --- # What It Is A metaphor. **Debt** == you owe $$ to someone **Technical Debt** == you owe code ("proper"/fixed code) to yourself, the project, your team By Ward Cunningham. [Source](http://martinfowler.com/bliki/TechnicalDebt.html) --- # What It Is ## Unintentional VS Intentional *with a grain of salt **Unintentional** >"...a design approach just turns out to be error-prone or a junior programmer just writes bad code." **Intentional** >"...an organization makes a conscious decision to optimize for the present rather than for the future." Source: [Steve McConnell](http://www.construx.com/10x_Software_Development/Technical_Debt/) *Note: [Maiz Lulkin](https://medium.com/@joaomilho/festina-lente-e29070811b84) would say that unintentional technical debt isn't technical debt at all. [Ward Cunningham](https://www.youtube.com/watch?v=pqeJFYwnkjE) talks about how he didn't mean the analogy to mean bad code. --- # What It Is ## Large VS Small **Large** "We don't have time to implement this the right way; just hack it in and we'll fix it after we ship." **Small** "Other debt accumulates from taking hundreds or thousands of small shortcuts-- - generic variable names, - sparse comments, - creating one class in a case where you should create two, - not following coding conventions, and so on. [...] ...it adds up faster than you think" Source: [Steve McConnell](http://www.construx.com/10x_Software_Development/Technical_Debt/) --- # Why It's Bad Well, isn't inherently bad. >"Just as a business incurs some debt to take advantage of a market opportunity developers may incur technical debt to hit an important deadline." - [Martin Fowler](http://martinfowler.com/bliki/TechnicalDebt.html)
Source: [Henrik Kniberg](http://blog.crisp.se/2013/10/11/henrikkniberg/good-and-bad-technical-debt) --- ## But When It Is Bad... >"Like a financial debt, the technical debt incurs interest payments[...] extra effort" - [Martin Fowler](http://martinfowler.com/bliki/TechnicalDebt.html) >"If the debt grows large enough [e.g. large legacy codebase], [...] so much work goes into keeping a production system running (i.e., 'servicing the debt') that there is little time left over to add new capabilities to the system." - [Steve McConnell](http://www.construx.com/10x_Software_Development/Technical_Debt/) ---
Source: My Sand Castle Is Too Big by alexiuss (DeviantArt) --- # How To Address The Bad ## Avoid It When It's The Small Type >"Keeping your unintended debt down gives you more room to intentionally take on debt." [Steve McConnell](http://www.construx.com/10x_Software_Development/Technical_Debt/) ## Deficit List >"Each time a debt is incurred, the tasks needed to pay off that debt are entered into the [decifit tracking] system along with an estimated effort and schedule." [Steve McConnell](http://www.construx.com/10x_Software_Development/Technical_Debt/) --- # How To Address The Bad ## Plan For It >"Like any other debt, budget for technical debt in your release and iteration planning." [Atlassian Site on Agile](https://www.atlassian.com/agile/delivery#!technical-debt) ## Calendar >"Schedule a date and time to sit down and address technical debt, make them visible calendar events." - Juan Musleh (paraphrased from Pyladies Talk) --- # How To Address The Bad ## Debt ceiling
Source: [Henrik Kniberg](http://blog.crisp.se/2013/10/11/henrikkniberg/good-and-bad-technical-debt) --- # How To Address The Bad **Summary**: Make It Visible, Make It A Priority, Make Time. --- The End.
--- # Bonus: Technical Inflation "Technical Inflation could be viewed as the ground lost when the current level of technology surpasses that of the foundation of your product to the extent that it begins losing compatibility with the industry." Example: falling behind in versions of a language to the point where your code is no longer compatible with the mainstream - Scott Wood


Shopping Cart
Product
Price
Quantity
Total
Panadol Tablet
£5.99
-
+
£5.99
x
Update cart
Procede to checkout
Calculate Shipping
United Kingdiom
United Kingdiom
U.S.A
Cart Totals
Cart Subtotal
£65.94
Shipping
Free Shipping
Order Total
£65.94


Use this tool to generate SQL mock data that you can use to populate an empty table in your
Firebird Database.
For each field, select from the list of predefined data types, set the number of rows you want and hit GENERATE
DATA. Simple as that.


---
layout: page
title: The Commute Into Manhattan
subtitle: The Majority of People Who Work In Manhattan Take Public Transit
#use-site-title: true
---
The Commute Into Manhattan Map below highlights the important role that transit, LIRR, and MNR play in regional transportation and access to Manhattan. The map visualizes ACS 2006-2010 Commute Flow data, and includes a hover feature that allows users to see the total number of people that commute into Manhattan from each county, and the percentage of these commuters that use transit. Less people commute into Manhattan from distant counties, but even in these cases a large percentage of commuters rely on transit. It should also be noted that the margin of error increases and accuracy of the data potentially decreases in counties with a smaller number people who commute into Manhattan.
To make the map, I worked with 2009 - 2013 CTPP commute flow data, and used postgreSQL to create new columns containing the county level aggregate statistics, which are displayed when the mouse is hovered over a given county. I referenced and used code from a Leaflet interactive choropleth map tutorial, customizing sections of code to suit my needs. I also used labels-only map tiles and Leaflet's map pane and layer order functionality to overlay the labels above the data layer, improving the map's legibility.
Mean Income of New Jersey Residents by Commute Mode
This interactive chart will be part of a dashboard that provides quick access to transportation mode share, demographics, and income data for commuters traveling into Manhattan's Central Business District (CBD). I am building the dashboard to offer easy access to important data and facts in the congestion pricing debate. My interactive chart, for example, refutes claims that the congestion charge would be a regressive tax by showing that workers who drive have a significantly higher mean income than those taking transit. To make the chart I used 2017 American Community Survey 5 year annual income estimates. I used code from this example of an updating bar chart, customizing it to my needs, and adding new code to include the horizontal mean income line.