text:
namespace motive {

/// @class SimpleInit
/// @brief Base class of Init classes for MotiveProcessors that derive from
///        SimpleProcessorTemplate.
///
/// You cannot initialize a Motivator with this class because it has no
/// MotivatorType. Instead, use one of the Init classes below that derive from
/// SimpleInit.
struct SimpleInit : public MotivatorInit {
  explicit SimpleInit(MotivatorType type)
      : MotivatorInit(type),
        start_values(nullptr),
        start_derivatives(nullptr) {}

  SimpleInit(MotivatorType type, const float* start_values,
             const float* start_derivatives = nullptr)
      : MotivatorInit(type),
        start_values(start_values),
        start_derivatives(start_derivatives) {}

  /// The starting value of each curve for each dimension. Array of length equal
  /// to the number of dimensions. This points at external values and the caller
  /// is responsible for ensuring these external values live as long as this
  /// struct.
  const float* start_values;

  /// The starting derivative of each curve for each dimension. Array of length
  /// equal to the number of dimensions. This points at external values and the
  /// caller is responsible for ensuring these external values live as long as
  /// this struct.
  const float* start_derivatives;
};

/// @class SimpleInitTemplate
/// @brief A version of SimpleInit for Motivators with kDimensions.
/// Use this class to initialize a Motivator with vector types, instead of using
/// the float arrays required by the base class SimpleInit.
/// For example, use a derivation of SimpleInit3f to initialize a Motivator3f.
template <class BaseT, class VectorConverter, MotiveDimension kDimensionsParam>
struct SimpleInitTemplate : public BaseT {
  static const MotiveDimension kDimensions = kDimensionsParam;

  typedef VectorConverter C;
  typedef typename VectorT<C, kDimensions>::type Vec;

  SimpleInitTemplate()
      : BaseT(C::ToPtr(start_values), C::ToPtr(start_derivatives)),
        start_values(0.0f),
        start_derivatives(0.0f) {}

  SimpleInitTemplate(const Vec& start_values_param,
                     const Vec& start_derivatives_param)
      : BaseT(C::ToPtr(start_values), C::ToPtr(start_derivatives)),
        start_values(start_values_param),
        start_derivatives(start_derivatives_param) {}

  const Vec start_values;
  const Vec start_derivatives;
};

}  // namespace motive

#endif  // MOTIVE_SIMPLE_INIT_H_

redpajama_set_name: RedPajamaGithub


text:
module Dwarf.Types
  ( -- * Dwarf information
    DwarfInfo(..)
  , pprDwarfInfo
  , pprAbbrevDecls
    -- * Dwarf address range table
  , DwarfARange(..)
  , pprDwarfARanges
    -- * Dwarf frame
  , DwarfFrame(..), DwarfFrameProc(..), DwarfFrameBlock(..)
  , pprDwarfFrame
    -- * Utilities
  , pprByte
  , pprHalf
  , pprData4'
  , pprDwWord
  , pprWord
  , pprLEBWord
  , pprLEBInt
  , wordAlign
  , sectionOffset
  )
  where

import Debug
import CLabel
import CmmExpr         ( GlobalReg(..) )
import Encoding
import FastString
import Outputable
import Platform
import Unique
import Reg
import SrcLoc

import Dwarf.Constants

import Data.Bits
import Data.List ( mapAccumL )
import qualified Data.Map as Map
import Data.Word
import Data.Char

import CodeGen.Platform

-- | Individual dwarf records. Each one will be encoded as an entry in
-- the @.debug_info@ section.
data DwarfInfo
  = DwarfCompileUnit { dwChildren :: [DwarfInfo]
                     , dwName :: String
                     , dwProducer :: String
                     , dwCompDir :: String
                     , dwLowLabel :: CLabel
                     , dwHighLabel :: CLabel
                     , dwLineLabel :: LitString }
  | DwarfSubprogram { dwChildren :: [DwarfInfo]
                    , dwName :: String
                    , dwLabel :: CLabel
                    , dwParent :: Maybe CLabel
                      -- ^ label of DIE belonging to the parent tick
                    }
  | DwarfBlock { dwChildren :: [DwarfInfo]
               , dwLabel :: CLabel
               , dwMarker :: Maybe CLabel
               }
  | DwarfSrcNote { dwSrcSpan :: RealSrcSpan
                 }

-- | Abbreviation codes used for encoding above records in the
-- @.debug_info@ section.
data DwarfAbbrev
  = DwAbbrNull          -- ^ Pseudo, used for marking the end of lists
  | DwAbbrCompileUnit
  | DwAbbrSubprogram
  | DwAbbrSubprogramWithParent
  | DwAbbrBlockWithoutCode
  | DwAbbrBlock
  | DwAbbrGhcSrcNote
  deriving (Eq, Enum)

-- | Generate assembly for the given abbreviation code
pprAbbrev :: DwarfAbbrev -> SDoc
pprAbbrev = pprLEBWord . fromIntegral . fromEnum

-- | Abbreviation declaration. This explains the binary encoding we
-- use for representing 'DwarfInfo'. Be aware that this must be updated
-- along with 'pprDwarfInfo'.
pprAbbrevDecls :: Bool -> SDoc
pprAbbrevDecls haveDebugLine =
  let mkAbbrev abbr tag chld flds =
        let fld (tag, form) = pprLEBWord tag $$ pprLEBWord form
        in pprAbbrev abbr $$ pprLEBWord tag $$ pprByte chld $$
           vcat (map fld flds) $$ pprByte 0 $$ pprByte 0
      -- These are shared between DwAbbrSubprogram and
      -- DwAbbrSubprogramWithParent
      subprogramAttrs =
           [ (dW_AT_name, dW_FORM_string)
           , (dW_AT_MIPS_linkage_name, dW_FORM_string)
           , (dW_AT_external, dW_FORM_flag)
           , (dW_AT_low_pc, dW_FORM_addr)
           , (dW_AT_high_pc, dW_FORM_addr)
           , (dW_AT_frame_base, dW_FORM_block1)
           ]
  in dwarfAbbrevSection $$
     ptext dwarfAbbrevLabel <> colon $$
     mkAbbrev DwAbbrCompileUnit dW_TAG_compile_unit dW_CHILDREN_yes
       ([(dW_AT_name,     dW_FORM_string)
       , (dW_AT_producer, dW_FORM_string)
       , (dW_AT_language, dW_FORM_data4)
       , (dW_AT_comp_dir, dW_FORM_string)
       , (dW_AT_use_UTF8, dW_FORM_flag_present)  -- not represented in body
       , (dW_AT_low_pc,   dW_FORM_addr)
       , (dW_AT_high_pc,  dW_FORM_addr)
       ] ++
       (if haveDebugLine
        then [ (dW_AT_stmt_list, dW_FORM_data4) ]
        else [])) $$
     mkAbbrev DwAbbrSubprogram dW_TAG_subprogram dW_CHILDREN_yes
       subprogramAttrs $$
     mkAbbrev DwAbbrSubprogramWithParent dW_TAG_subprogram dW_CHILDREN_yes
       (subprogramAttrs ++ [(dW_AT_ghc_tick_parent, dW_FORM_ref_addr)]) $$
     mkAbbrev DwAbbrBlockWithoutCode dW_TAG_lexical_block dW_CHILDREN_yes
       [ (dW_AT_name, dW_FORM_string)
       ] $$
     mkAbbrev DwAbbrBlock dW_TAG_lexical_block dW_CHILDREN_yes
       [ (dW_AT_name, dW_FORM_string)
       , (dW_AT_low_pc, dW_FORM_addr)
       , (dW_AT_high_pc, dW_FORM_addr)
       ] $$
     mkAbbrev DwAbbrGhcSrcNote dW_TAG_ghc_src_note dW_CHILDREN_no
       [ (dW_AT_ghc_span_file, dW_FORM_string)
       , (dW_AT_ghc_span_start_line, dW_FORM_data4)
       , (dW_AT_ghc_span_start_col, dW_FORM_data2)
       , (dW_AT_ghc_span_end_line, dW_FORM_data4)
       , (dW_AT_ghc_span_end_col, dW_FORM_data2)
       ] $$
     pprByte 0

-- | Generate assembly for DWARF data
pprDwarfInfo :: Bool -> DwarfInfo -> SDoc
pprDwarfInfo haveSrc d
  = case d of
      DwarfCompileUnit {}  -> hasChildren
      DwarfSubprogram {}   -> hasChildren
      DwarfBlock {}        -> hasChildren
      DwarfSrcNote {}      -> noChildren
  where
    hasChildren =
        pprDwarfInfoOpen haveSrc d $$
        vcat (map (pprDwarfInfo haveSrc) (dwChildren d)) $$
        pprDwarfInfoClose
    noChildren = pprDwarfInfoOpen haveSrc d

-- | Prints assembler data corresponding to DWARF info records. Note
-- that the binary format of this is paramterized in @abbrevDecls@ and
-- has to be kept in synch.
pprDwarfInfoOpen :: Bool -> DwarfInfo -> SDoc
pprDwarfInfoOpen haveSrc (DwarfCompileUnit _ name producer compDir lowLabel
                                           highLabel lineLbl) =
  pprAbbrev DwAbbrCompileUnit
  $$ pprString name
  $$ pprString producer
  $$ pprData4 dW_LANG_Haskell
  $$ pprString compDir
  $$ pprWord (ppr lowLabel)
  $$ pprWord (ppr highLabel)
  $$ if haveSrc
     then sectionOffset (ptext lineLbl) (ptext dwarfLineLabel)
     else empty
pprDwarfInfoOpen _ (DwarfSubprogram _ name label
                                    parent) = sdocWithDynFlags $ \df ->
  ppr (mkAsmTempDieLabel label) <> colon
  $$ pprAbbrev abbrev
  $$ pprString name
  $$ pprString (renderWithStyle df (ppr label) (mkCodeStyle CStyle))
  $$ pprFlag (externallyVisibleCLabel label)
  $$ pprWord (ppr label)
  $$ pprWord (ppr $ mkAsmTempEndLabel label)
  $$ pprByte 1
  $$ pprByte dW_OP_call_frame_cfa
  $$ parentValue
  where
    abbrev = case parent of Nothing -> DwAbbrSubprogram
                            Just _  -> DwAbbrSubprogramWithParent
    parentValue = maybe empty pprParentDie parent
    pprParentDie sym = sectionOffset (ppr sym) (ptext dwarfInfoLabel)
pprDwarfInfoOpen _ (DwarfBlock _ label Nothing) = sdocWithDynFlags $ \df ->
  ppr (mkAsmTempDieLabel label) <> colon
  $$ pprAbbrev DwAbbrBlockWithoutCode
  $$ pprString (renderWithStyle df (ppr label) (mkCodeStyle CStyle))
pprDwarfInfoOpen _ (DwarfBlock _ label (Just marker)) = sdocWithDynFlags $ \df ->
  ppr (mkAsmTempDieLabel label) <> colon
  $$ pprAbbrev DwAbbrBlock
  $$ pprString (renderWithStyle df (ppr label) (mkCodeStyle CStyle))
  $$ pprWord (ppr marker)
  $$ pprWord (ppr $ mkAsmTempEndLabel marker)
pprDwarfInfoOpen _ (DwarfSrcNote ss) =
  pprAbbrev DwAbbrGhcSrcNote
  $$ pprString' (ftext $ srcSpanFile ss)
  $$ pprData4 (fromIntegral $ srcSpanStartLine ss)
  $$ pprHalf (fromIntegral $ srcSpanStartCol ss)
  $$ pprData4 (fromIntegral $ srcSpanEndLine ss)
  $$ pprHalf (fromIntegral $ srcSpanEndCol ss)

-- | Close a DWARF info record with children
pprDwarfInfoClose :: SDoc
pprDwarfInfoClose = pprAbbrev DwAbbrNull

-- | A DWARF address range. This is used by the debugger to quickly locate
-- which compilation unit a given address belongs to. This type assumes
-- a non-segmented address-space.
data DwarfARange
  = DwarfARange
    { dwArngStartLabel :: CLabel
    , dwArngEndLabel   :: CLabel
    }

-- | Print assembler directives corresponding to a DWARF @.debug_aranges@
-- address table entry.
pprDwarfARanges :: [DwarfARange] -> Unique -> SDoc
pprDwarfARanges arngs unitU = sdocWithPlatform $ \plat ->
  let wordSize = platformWordSize plat
      paddingSize = 4 :: Int
      -- header is 12 bytes long.
      -- entry is 8 bytes (32-bit platform) or 16 bytes (64-bit platform).
      -- pad such that first entry begins at multiple of entry size.
      pad n = vcat $ replicate n $ pprByte 0
      initialLength = 8 + paddingSize + 2*2*wordSize
  in pprDwWord (ppr initialLength)
     $$ pprHalf 2
     $$ sectionOffset (ppr $ mkAsmTempLabel $ unitU)
                      (ptext dwarfInfoLabel)
     $$ pprByte (fromIntegral wordSize)
     $$ pprByte 0
     $$ pad paddingSize
     -- body
     $$ vcat (map pprDwarfARange arngs)
     -- terminus
     $$ pprWord (char '0')
     $$ pprWord (char '0')

pprDwarfARange :: DwarfARange -> SDoc
pprDwarfARange arng = pprWord (ppr $ dwArngStartLabel arng) $$ pprWord length
  where
    length = ppr (dwArngEndLabel arng)
             <> char '-' <> ppr (dwArngStartLabel arng)

-- | Information about unwind instructions for a procedure. This
-- corresponds to a "Common Information Entry" (CIE) in DWARF.
data DwarfFrame
  = DwarfFrame
    { dwCieLabel :: CLabel
    , dwCieInit  :: UnwindTable
    , dwCieProcs :: [DwarfFrameProc]
    }

-- | Unwind instructions for an individual procedure. Corresponds to a
-- "Frame Description Entry" (FDE) in DWARF.
data DwarfFrameProc
  = DwarfFrameProc
    { dwFdeProc    :: CLabel
    , dwFdeHasInfo :: Bool
    , dwFdeBlocks  :: [DwarfFrameBlock]
      -- ^ List of blocks. Order must match asm!
    }

-- | Unwind instructions for a block. Will become part of the
-- containing FDE.
data DwarfFrameBlock
  = DwarfFrameBlock
    { dwFdeBlock      :: CLabel
    , dwFdeBlkHasInfo :: Bool
    , dwFdeUnwind     :: UnwindTable
    }

-- | Header for the @.debug_frame@ section. Here we emit the "Common
-- Information Entry" record that etablishes general call frame
-- parameters and the default stack layout.
pprDwarfFrame :: DwarfFrame -> SDoc
pprDwarfFrame DwarfFrame{dwCieLabel=cieLabel,dwCieInit=cieInit,dwCieProcs=procs}
  = sdocWithPlatform $ \plat ->
    let cieStartLabel= mkAsmTempDerivedLabel cieLabel (fsLit "_start")
        cieEndLabel = mkAsmTempEndLabel cieLabel
        length      = ppr cieEndLabel <> char '-' <> ppr cieStartLabel
        spReg       = dwarfGlobalRegNo plat Sp
        retReg      = dwarfReturnRegNo plat
        wordSize    = platformWordSize plat
        pprInit (g, uw) = pprSetUnwind plat g (Nothing, uw)

        -- Preserve C stack pointer: This necessary to override that default
        -- unwinding behavior of setting $sp = CFA.
        preserveSp = case platformArch plat of
          ArchX86    -> pprByte dW_CFA_same_value $$ pprLEBWord 4
          ArchX86_64 -> pprByte dW_CFA_same_value $$ pprLEBWord 7
          _          -> empty
    in vcat [ ppr cieLabel <> colon
            , pprData4' length -- Length of CIE
            , ppr cieStartLabel <> colon
            , pprData4' (text "-1")
                               -- Common Information Entry marker (-1 = 0xf..f)
            , pprByte 3        -- CIE version (we require DWARF 3)
            , pprByte 0        -- Augmentation (none)
            , pprByte 1        -- Code offset multiplicator
            , pprByte (128-fromIntegral wordSize)
                               -- Data offset multiplicator
                               -- (stacks grow down => "-w" in signed LEB128)
            , pprByte retReg   -- virtual register holding return address
            ] $$
       -- Initial unwind table
       vcat (map pprInit $ Map.toList cieInit) $$
       vcat [ -- RET = *CFA
              pprByte (dW_CFA_offset+retReg)
            , pprByte 0

              -- Preserve C stack pointer
            , preserveSp

              -- Sp' = CFA
              -- (we need to set this manually as our (STG) Sp register is
              -- often not the architecture's default stack register)
            , pprByte dW_CFA_val_offset
            , pprLEBWord (fromIntegral spReg)
            , pprLEBWord 0
            ] $$
       wordAlign $$
       ppr cieEndLabel <> colon $$
       -- Procedure unwind tables
       vcat (map (pprFrameProc cieLabel cieInit) procs)

-- | Writes a "Frame Description Entry" for a procedure. This consists
-- mainly of referencing the CIE and writing state machine
-- instructions to describe how the frame base (CFA) changes.
pprFrameProc :: CLabel -> UnwindTable -> DwarfFrameProc -> SDoc
pprFrameProc frameLbl initUw (DwarfFrameProc procLbl hasInfo blocks)
  = let fdeLabel    = mkAsmTempDerivedLabel procLbl (fsLit "_fde")
        fdeEndLabel = mkAsmTempDerivedLabel procLbl (fsLit "_fde_end")
        procEnd     = mkAsmTempEndLabel procLbl
        ifInfo str  = if hasInfo then text str else empty
                      -- see [Note: Info Offset]
    in vcat [ pprData4' (ppr fdeEndLabel <> char '-' <> ppr fdeLabel)
            , ppr fdeLabel <> colon
            , pprData4' (ppr frameLbl <> char '-' <>
                         ptext dwarfFrameLabel)    -- Reference to CIE
            , pprWord (ppr procLbl <> ifInfo "-1") -- Code pointer
            , pprWord (ppr procEnd <> char '-' <>
                       ppr procLbl <> ifInfo "+1") -- Block byte length
            ] $$
       vcat (snd $ mapAccumL pprFrameBlock initUw blocks) $$
       wordAlign $$
       ppr fdeEndLabel <> colon

-- | Generates unwind information for a block. We only generate
-- instructions where unwind information actually changes. This small
-- optimisations saves a lot of space, as subsequent blocks often have
-- the same unwind information.
pprFrameBlock :: UnwindTable -> DwarfFrameBlock -> (UnwindTable, SDoc)
pprFrameBlock oldUws (DwarfFrameBlock blockLbl hasInfo uws)
  | uws == oldUws
  = (oldUws, empty)
  | otherwise
  = (,) uws $ sdocWithPlatform $ \plat ->
    let lbl = ppr blockLbl <> if hasInfo then text "-1" else empty
              -- see [Note: Info Offset]
        isChanged g v | old == Just v  = Nothing
                      | otherwise      = Just (old, v)
                      where old = Map.lookup g oldUws
        changed = Map.toList $ Map.mapMaybeWithKey isChanged uws
        died    = Map.toList $ Map.difference oldUws uws
    in pprByte dW_CFA_set_loc $$ pprWord lbl $$
       vcat (map (uncurry $ pprSetUnwind plat) changed) $$
       vcat (map (pprUndefUnwind plat . fst) died)

-- Note [Info Offset]
--
-- GDB was pretty much written with C-like programs in mind, and as a
-- result they assume that once you have a return address, it is a
-- good idea to look at (PC-1) to unwind further - as that's where the
-- "call" instruction is supposed to be.
--
-- Now on one hand, code generated by GHC looks nothing like what GDB
-- expects, and in fact going up from a return pointer is guaranteed
-- to land us inside an info table! On the other hand, that actually
-- gives us some wiggle room, as we expect IP to never *actually* end
-- up inside the info table, so we can "cheat" by putting whatever GDB
-- expects to see there. This is probably pretty safe, as GDB cannot
-- assume (PC-1) to be a valid code pointer in the first place - and I
-- have seen no code trying to correct this.
--
-- Note that this will not prevent GDB from failing to look-up the
-- correct function name for the frame, as that uses the symbol table,
-- which we can not manipulate as easily.

-- | Get DWARF register ID for a given GlobalReg
dwarfGlobalRegNo :: Platform -> GlobalReg -> Word8
dwarfGlobalRegNo p UnwindReturnReg = dwarfReturnRegNo p
dwarfGlobalRegNo p reg = maybe 0 (dwarfRegNo p . RegReal) $ globalRegMaybe p reg

-- | Generate code for setting the unwind information for a register,
-- optimized using its known old value in the table. Note that "Sp" is
-- special: We see it as synonym for the CFA.
pprSetUnwind :: Platform -> GlobalReg -> (Maybe UnwindExpr, UnwindExpr) -> SDoc
pprSetUnwind _    Sp (Just (UwReg s _), UwReg s' o') | s == s'
  = if o' >= 0
    then pprByte dW_CFA_def_cfa_offset $$ pprLEBWord (fromIntegral o')
    else pprByte dW_CFA_def_cfa_offset_sf $$ pprLEBInt o'
pprSetUnwind plat Sp (_, UwReg s' o')
  = if o' >= 0
    then pprByte dW_CFA_def_cfa $$
         pprLEBWord (fromIntegral $ dwarfGlobalRegNo plat s') $$
         pprLEBWord (fromIntegral o')
    else pprByte dW_CFA_def_cfa_sf $$
         pprLEBWord (fromIntegral $ dwarfGlobalRegNo plat s') $$
         pprLEBInt o'
pprSetUnwind _    Sp (_, uw)
  = pprByte dW_CFA_def_cfa_expression $$ pprUnwindExpr False uw
pprSetUnwind plat g  (_, UwDeref (UwReg Sp o))
  | o < 0 && ((-o) `mod` platformWordSize plat) == 0 -- expected case
  = pprByte (dW_CFA_offset + dwarfGlobalRegNo plat g) $$
    pprLEBWord (fromIntegral ((-o) `div` platformWordSize plat))
  | otherwise
  = pprByte dW_CFA_offset_extended_sf $$
    pprLEBWord (fromIntegral (dwarfGlobalRegNo plat g)) $$
    pprLEBInt o
pprSetUnwind plat g  (_, UwDeref uw)
  = pprByte dW_CFA_expression $$
    pprLEBWord (fromIntegral (dwarfGlobalRegNo plat g)) $$
    pprUnwindExpr True uw
pprSetUnwind plat g  (_, uw)
  = pprByte dW_CFA_val_expression $$
    pprLEBWord (fromIntegral (dwarfGlobalRegNo plat g)) $$
    pprUnwindExpr True uw

-- | Generates a DWARF expression for the given unwind expression. If
-- @spIsCFA@ is true, we see @Sp@ as the frame base CFA where it gets
-- mentioned.
pprUnwindExpr :: Bool -> UnwindExpr -> SDoc
pprUnwindExpr spIsCFA expr
  = sdocWithPlatform $ \plat ->
    let pprE (UwConst i)
          | i >= 0 && i < 32 = pprByte (dW_OP_lit0 + fromIntegral i)
          | otherwise        = pprByte dW_OP_consts $$ pprLEBInt i -- lazy...
        pprE (UwReg Sp i) | spIsCFA
                             = if i == 0
                               then pprByte dW_OP_call_frame_cfa
                               else ppr (UwPlus (UwReg Sp 0) (UwConst i))
        pprE (UwReg g i)      = pprByte (dW_OP_breg0+dwarfGlobalRegNo plat g) $$
                               pprLEBInt i
        pprE (UwDeref u)      = pprE u $$ pprByte dW_OP_deref
        pprE (UwPlus u1 u2)   = pprE u1 $$ pprE u2 $$ pprByte dW_OP_plus
        pprE (UwMinus u1 u2)  = pprE u1 $$ pprE u2 $$ pprByte dW_OP_minus
        pprE (UwTimes u1 u2)  = pprE u1 $$ pprE u2 $$ pprByte dW_OP_mul
    in text "\t.uleb128 1f-.-1" $$ -- DW_FORM_block length
       pprE expr $$
       text "1:"

-- | Generate code for re-setting the unwind information for a
-- register to @undefined@
pprUndefUnwind :: Platform -> GlobalReg -> SDoc
pprUndefUnwind _    Sp = panic "pprUndefUnwind Sp" -- should never happen
pprUndefUnwind plat g  = pprByte dW_CFA_undefined $$
                         pprLEBWord (fromIntegral $ dwarfGlobalRegNo plat g)

-- | Align assembly at (machine) word boundary
wordAlign :: SDoc
wordAlign = sdocWithPlatform $ \plat ->
  text "\t.align " <> case platformOS plat of
    OSDarwin -> case platformWordSize plat of
      8      -> text "3"
      4      -> text "2"
      _other -> error "wordAlign: Unsupported word size!"
    _other   -> ppr (platformWordSize plat)

-- | Assembly for a single byte of constant DWARF data
pprByte :: Word8 -> SDoc
pprByte x = text "\t.byte " <> ppr (fromIntegral x :: Word)

-- | Assembly for a two-byte constant integer
pprHalf :: Word16 -> SDoc
pprHalf x = sdocWithPlatform $ \plat ->
  -- Naturally Darwin doesn't support `.hword` and binutils uses `.short`
  -- as a synonym for `.word` (but only some of the time!). The madness
  -- is nearly too much to bear.
  let dir = case platformOS plat of
        OSDarwin -> text ".short"
        _        -> text ".hword"
  in text "\t" <> dir <+> ppr (fromIntegral x :: Word)

-- | Assembly for a constant DWARF flag
pprFlag :: Bool -> SDoc
pprFlag f = pprByte (if f then 0xff else 0x00)

-- | Assembly for 4 bytes of dynamic DWARF data
pprData4' :: SDoc -> SDoc
pprData4' x = text "\t.long " <> x

-- | Assembly for 4 bytes of constant DWARF data
pprData4 :: Word -> SDoc
pprData4 = pprData4' . ppr

-- | Assembly for a DWARF word of dynamic data. This means 32 bit, as
-- we are generating 32 bit DWARF.
pprDwWord :: SDoc -> SDoc
pprDwWord = pprData4'

-- | Assembly for a machine word of dynamic data. Depends on the
-- architecture we are currently generating code for.
pprWord :: SDoc -> SDoc
pprWord s = (<> s) . sdocWithPlatform $ \plat ->
  case platformWordSize plat of
    4 -> text "\t.long "
    8 -> text "\t.quad "
    n -> panic $ "pprWord: Unsupported target platform word length " ++
                 show n ++ "!"

-- | Prints a number in "little endian base 128" format. The idea is
-- to optimize for small numbers by stopping once all further bytes
-- would be 0. The highest bit in every byte signals whether there
-- are further bytes to read.
pprLEBWord :: Word -> SDoc
pprLEBWord x | x < 128   = pprByte (fromIntegral x)
             | otherwise = pprByte (fromIntegral $ 128 .|. (x .&. 127)) $$
                           pprLEBWord (x `shiftR` 7)

-- | Same as @pprLEBWord@, but for a signed number
pprLEBInt :: Int -> SDoc
pprLEBInt x | x >= -64 && x < 64
                        = pprByte (fromIntegral (x .&. 127))
            | otherwise = pprByte (fromIntegral $ 128 .|. (x .&. 127)) $$
                          pprLEBInt (x `shiftR` 7)

-- | Generates a dynamic null-terminated string. If required the
-- caller needs to make sure that the string is escaped properly.
pprString' :: SDoc -> SDoc
pprString' str = text "\t.asciz \"" <> str <> char '"'

-- | Generate a string constant. We take care to escape the string.
pprString :: String -> SDoc
pprString str
  = pprString' $ hcat $ map escapeChar $
    if utf8EncodedLength str == length str
    then str
    else map (chr . fromIntegral) $ bytesFS $ mkFastString str

-- | Escape a single non-unicode character
escapeChar :: Char -> SDoc
escapeChar '\\' = text "\\\\"
escapeChar '\"' = text "\\\""
escapeChar '\n' = text "\\n"
escapeChar c
  | isAscii c && isPrint c && c /= '?' -- prevents trigraph warnings
  = char c
  | otherwise
  = char '\\' <> char (intToDigit (ch `div` 64)) <>
                 char (intToDigit ((ch `div` 8) `mod` 8)) <>
                 char (intToDigit (ch `mod` 8))
  where ch = ord c

-- | Generate an offset into another section. This is tricky because
-- this is handled differently depending on platform: Mac Os expects
-- us to calculate the offset using assembler arithmetic. Linux expects
-- us to just reference the target directly, and will figure out on
-- their own that we actually need an offset. Finally, Windows has
-- a special directive to refer to relative offsets. Fun.
sectionOffset :: SDoc -> SDoc -> SDoc
sectionOffset target section = sdocWithPlatform $ \plat ->
  case platformOS plat of
    OSDarwin  -> pprDwWord (target <> char '-' <> section)
    OSMinGW32 -> text "\t.secrel32 " <> target
    _other    -> pprDwWord target


INFOSYNDROME: Counter Strike A Mini Guide.
m4a1 silencer or no silencer better?
GotFrag eSports - Forums - Counter-Strike Discussion - better recoil?
Site admin admin. Powered by PukiWiki Plus! HTML convert time to 0.075 sec.


Description: MaVTEC is proud to present Cycle Magic Valley; Southern Idaho's premier cycling event. Routes for all abilities with fully stocked food/aid stations. The family friendly 12 mile route is a led ride that takes riders to the canyon's Meander Point. The 33 mile route heads you out west north of Filer. The more challenging 55 mile route takes you down into beautiful Melon Valley by Buhl. And the full century route takes riders through Buhl, out to Hagerman and back with several climbs. The ride is fully supported with route support/SAG and an awesome party/barbecue at the finish line.


text:
Tip Us or Submit a Story
Sinlung / Northeast
Two Manipuri Youth Attacked by Bikers in New Delhi
New Delhi, Apr 29 : Close on the heels of the death of Arunachal Pradesh student Nido Tania, two youths from Manipur were beaten up on Sunday in what is being described as another case of racial attack on people from Northeast in the capital.
The youths from Manipur were allegedly attacked with sticks and rods by a group of motorcycle-borne men in Ambedkar Nagar area of south Delhi around 8.30 pm on Sunday.
The victims were rushed to the All India Institute of Medical Sciences, where one was discharged after first aid while another is reported to be in a serious condition, police said.
Reports stated that Manipur Chief Minister Okram Ibobi Singh on Monday visited AIIMS and met the aforementioned youth and also the teenage girl who was allegedly raped by her landlord's son in Munirka on Saturday.
Singh also called upon Union Home Minister Sushil Kumar Shinde demanding strict action against the perpetrators of hate crimes against people from Northeast residing in the Capital. And Shinde assured him of swift action in the matter.
Our Twits
Tweets by @sinlung
Archives December (1) March (5) November (3) October (8) September (28) August (64) July (35) June (46) May (48) April (45) March (72) February (54) January (54) November (35) October (43) September (80) August (98) July (77) June (145) May (69) April (31) March (66) February (58) January (4) December (63) November (104) October (80) September (130) August (122) July (88) June (117) May (84) April (67) March (39) February (53) January (54) December (47) November (109) October (67) September (69) August (127) July (73) June (84) May (78) April (87) March (66) February (78) January (50) December (83) November (165) October (163) September (159) August (148) July (175) June (164) May (237) April (417) March (415) February (286) January (185) December (189) November (271) October (309) September (256) August (212) July (223) June (306) May (251) April (243) March (245) February (356) January (308)
Sinlung PLUS
Free Reprints
Copyrights Reserved ~ 2014 Sinlung

redpajama_set_name: RedPajamaCommonCrawl


Probe Idea being a platform purely for the young and enthusiastic travellers, there are ways in which the travel booking has been made easy for them. The platform has a B2B (Business to business) portal where in the local travel agents sign up on a Supplier account. Travelers are going to request for their preferred activities, tours, and airline with hotel options. This is where the travel agents who have partnered with Probe Idea into the B2B travel agent program will be taking the process ahead. These travel agents will be looking into each requirement personally and provide the customer with a quotation within a span of 24 hours. This quotation will also have to or three options of each requirement that the traveller has requested for. This way the customer also has options to choose from varying from highest to lowest on the basis of prices and also quality.


20F - Last Chance (4): The two powerful Regulars team up against the mysterious assailant, only to find out, that he is simply too strong for them.
Having defeated the pair, he turns to Ja Wangnan, who tries to defend himself with Shinsoo Bombs. When his tactics fail, Wangnan falls back on his normal explosives, which actually seem to wound the enemy. Akraptor urges him to finish the man off, but before he can, a red lobster-like exoskeleton emerges from the mysterious assailant.
Mm... a lobster has appeared.
Part II's first episode pays a lot of homage to classic Shōnen manhwa.
It may feel like different genres at times.
I plan on changing themes with each new episode.
So is this episode going to be like Shōnen?
You can probably tell, but the problems presented are more associated with people in their 20s and not 10s.
That's why the Floor is also the 20th.
But I still want kids in their 10s to enjoy.
So I'll try to limit the presentation of age differences.
And it looks like we'll officially start our story.
So please look forward to next week.
P.s. – Visitors to the blog surpassed one million, yaay.


After graduation! Now a full fledged graduate!
Hello everyone! As you know, I have been at my daughter's college graduation in Ohio. The four days we were gone have been some of the best in my life! Seeing my daughter was great, but seeing her graduate was the best ever! I have missed being on the internet and seeing what you have been up to though! I have also missed sharing my recipes, crafts, frugal ideas, etc. with you!
If you know me very well, and some of you really do, you know I am not much of a bragger. I am what I am and I have what I have. I am not better nor worse than anyone.
With that being said, I am going to brag!
Many years ago, Big and I made the choice to homeschool Taylor Ann (yes, two names – she was born and bread in Texas after all!). Homeschooling her was the best thing we could have ever done. Big's career was moving up the ladder and that meant we moved every 2 to 3 years. Taylor Ann didn't have to go through changing schools. We found that starting a new homeschool group was easy. You see, in my opinion, most homeschoolers feel somewhat like they are outsiders, so they easily accept new people!
We met some great people during our homeschooling days! I could go on for a very long time about the great experiences we had. Taylor Ann was unschooled and was involved in many extra curricular activities. This made her a well rounded student and one that loved learning.
I strongly believe this approach to schooling (and the fact that she is pretty smart!) aided her in becoming the college student that she was.
She graduated with a Major in International Leadership with am emphasis on Non-profit organization She has a minor in Spanish, Political Science and Marketing.
Taylor Ann held an office in the College Democrats organization and created and held an office in the Martial Arts club on campus. She was a Resident Assistant for 3 years and worked in the Communications Lab. Taylor Ann volunteers for the Leadership Conference for 2 years and was the chair of the conference her last year. She was elected to represent Marietta College at a Leadership Conference that was held in Annapolis, Maryland at the Naval Academy. Taylor Ann won the Sherrill Cleland Prize in Leadership. She was the highest honors female student in the 2013 Graduating Class of Marietta College.
A few more steps to graduation!
If you would like to read more about Taylor Ann and what she thought about her education – hop over to Something to Offer and read a post written by her!
Thank you for stopping by and taking the time to read about my daughter! She is beautiful on the inside and the outside and I love her very much!
YAY and congrats to Taylor Ann for her wonderful accomplishments and to you for giving her the opportunity to learn, explore and grow through unschooling. As a mom who did the same, I applaud you. My kids are grown, graduated, been to college and now have careers. So to those who questioned us. HA look at our babies! HAPPY DANCE and bragg away my friend. Now off to read her article.
Cynthia: You are a true testament to what can truly be accomplished if you try. You home schooled your beautiful, bright daughter who will now do something positive to change the world. I just know it. Congratulations to Taylor-Ann for all of her hard word and dedication to her education and her future. And double congratulations to both you and Big for all that you did for your daughter. God Blessed you many times over!
Congratulations Cynthia and a world of blessings to your daughter. What a proud moment for you and your family! Yes girlfriend you have every right to brag! Love ya! Beautiful post and pictures!


text:
Mo Rocca, Chuck Cooper and Brad Oscar Join MasterVoices' OF THEE I SING at Carnegie Hall
by BWW News Desk
BroadwayWorld.com Oct. 12, 2017
CBS Sunday Morning correspondent Mo Rocca, Tony Award winner Chuck Cooper (The Life) and Tony nominee Brad Oscar (Something Rotten!) join MasterVoices' production of the Gershwins' Of Thee I Sing on Thursday, November 2 at 7:00 p.m. in Stern Auditorium / Perelman Stage at Carnegie Hall.
Rocca narrates the satiric tale of truth, justice and corn muffins, with book by George S. Kaufman and Morrie Ryskind, written during the time of their famed association with the Marx Brothers. Chuck Cooper is featured as Matthew Fulton, and Brad Oscar replaces previously announced Zach Grenier, who regretfully cannot participate in the production due to scheduling, as Louis Lippman.
The production also features previously announced cast members Bryce Pinkham (A Gentleman's Guide to Love and Murder) as President John P. Wintergreen, Denée Benton (Natasha, Pierre & The Great Comet of 1812) as Mary Turner, Kevin Chamberlin (The Addams Family) as Vice President Alexander Throttlebottom, Fred Applegate (Wicked) as Francis X. Gilhooley, and David Pittu (Lovemusik) as the French Ambassador.
Additionally joining the cast are Richard J. Miller, Jr., Esq. as the Chief Justice of the Supreme Court, Anna Landy as Miss Benson, and Rhett Guter as Jenkins.
As the first musical to ever win the Pulitzer Prize, Of Thee I Sing skewers the electoral process and is presented as New York City examines its own electoral process, just five days before the mayoral election.
An additional performance of Of Thee I Sing is held at Tilles Center for the Performing Arts at LIU Post on Saturday, November 4, 2017 at 8:00 p.m.
Other productions in MasterVoices' 2017-18 season include: Our America, celebrating how immigrants have shaped American music (March 7 at The Great Hall of The Cooper Union); a new production of Orphic Moments, an evening featuring Gluck's Orfeo ed Euridice paired with Matthew Aucoin's dramatic cantata The Orphic Moment (May 6 and 7 at Jazz at Lincoln Center's Rose Theater); and Naamah's Ark, a MasterVoices commission (June 17 in Lower Manhattan, exact location to be announced), co-presented by Lower Manhattan Cultural Council as part of the River To River Festival 2018.
Music by George Gershwin
Lyrics by Ira Gershwin
Book by George S. Kaufman and Morrie Ryskind
Bryce Pinkham (President Wintergreen)
Denée Benton (Mary Turner)
Kevin Chamberlin (Alexander Throttlebottom)
Elizabeth Stanley (Diana Devereaux)
Chuck Cooper (Matthew Fulton)
Brad Oscar (Louis Lippman)
Fred Applegate (Francis X. Gilhooley)
David Pittu (French Ambassador)
Mo Rocca (Narrator)
Richard J. Miller, Jr., Esq. (Chief Justice of the Supreme Court)
Anna Landy (Miss Benson)
Rhett Guter (Jenkins)
MasterVoices Chorus and Orchestra
Ted Sperling, Conductor
Musical staging by Andrew Palermo
Thursday, November 2, 2017 at 7:00 p.m.
Stern Auditorium / Perelman Stage at Carnegie Hall
57th Street and Seventh Avenue
Ticket Information: Tickets for the Carnegie Hall performance, priced at $20-$155, are available for purchase at the Carnegie Hall Box Office, at 57th and Seventh, or can be charged to major credit cards by calling CarnegieCharge at (212) 247-7800 or by visiting the Carnegie Hall website at carnegiehall.org.
ABOUT THE ARTISTS:
MasterVoices was founded in 1941 by conductor Robert Shaw, who believed in the voice as the world's most powerful instrument. Today the human voice remains at the heart of MasterVoices' concerts, from its acclaimed 100+ member chorus to the dazzling array of world-class soloists that perform with the group each year.
MasterVoices' productions are known for their vitality and scale, and the group's repertoire spans multiple genres, including choral classics, operas in concert, musical theater programs, and newly commissioned works at venues ranging from Carnegie Hall and New York City Center to site-specific concerts at synagogues, airplane hangers, museums, and bandshells. MasterVoices often tours internationally, most recently appearing with the Israel Philharmonic Orchestra and at the Verbier Festival in Switzerland.
The organization's concerts serve a deeper purpose as well: to nurture the artists of tomorrow. The Faith Geier Initiative gives debuts to promising young soloists, and at any time the chorus may include high school students from the Side-By-Side program, which invites aspiring young singers to join MasterVoices in concerts and tours, guided by experienced chorus members as mentors.
MasterVoices' vision continues to expand under the baton of Tony Award-winning Artistic Director Ted Sperling. Its musical theater offerings have become richer, as a result of the establishment of The Rees Fund for Musical Theater, and its new Bridges program has started to introduce composers to specific New York City communities to create new choral works inspired by their stories. For more details, please visit mastervoices.org.
One of today's leading musical artists, Ted Sperling is a director, music director, arranger, orchestrator, conductor, singer, pianist and violinist. Mr. Sperling became the Artistic Director of MasterVoices in October 2013 and additionally serves as the Principal Conductor of the Westchester Philharmonic. He has conducted concerts with the New York Philharmonic, Chicago Symphony Orchestra, San Francisco Symphony, the Lyrics and Lyricists series at the 92nd Street Y.
Mr. Sperling won the 2005 Tony and Drama Desk Awards for his orchestrations of The Light in the Piazza, for which he was also music director. Other Broadway credits include the rapturously received revivals of Fiddler on the Roof, The King and I, and South Pacific; Guys and Dolls, Dirty Rotten Scoundrels, The Full Monty, How to Succeed in Business Without Really Trying, My Favorite Year, and Sunday in the Park with George. Off- Broadway credits include A Man of No Importance, A New Brain, Saturn Returns and Floyd Collins. Opera work includes two New York City premieres by composer Ricky Ian Gordon: 27 starring Stephanie Blythe, and The Grapes of Wrath, starring Nathan Gunn; Dido and Aeneas starring Kelli O'Hara and Victoria Clark; and La Voix Humaine starring Audra McDonald. Mr. Sperling's work as a stage director includes the world premieres of The Other Josh Cohen, See What I Wanna See, Striking 12, and Charlotte: Life? Or Theater?, as well as a revival of Lady in the Dark. Mr. Sperling received the 2006 Ted Shen Family Foundation Award for leadership in the musical theater, headed the Music Theater Initiative at The Public Theater, and is Creative Director of the 24-Hour Musicals.
Mo Rocca is a correspondent for CBS Sunday Morning and a regular panelist on NPR's Wait Wait ... Don't Tell Me! He is the host of The Henry Ford's Innovation Nation Saturday mornings on CBS and host and creator of My Grandmother's Ravioli on the Cooking Channel. He starred as Panch on Broadway in The 25th Annual Putnam County Spelling Bee, and played Doody in the Southeast Asia tour of Grease.
Chuck Cooper is a veteran of fifteen Broadway shows including, The Life, Caroline Or Change, Act One, The Prince of Broadway, Amazing Grace, and The Cherry Orchard, to name a few. His awards include The Tony Award, The Lucille Lortel, San Diego Critics' Circle, three Audelcos, and two Drama Desk nominations. Television credits include The Good Wife, Madam Secretary, House Of Cards, Gossip Girl, Nurse Jackie, Law & Order: SVU, and others. Film credits include Boy Wonder, Evening, Noise, American Gangster, Find Me Guilty, The Hurricane, Gloria, The Juror, and more.
Brad Oscar's Broadway credits include Something Rotten! (Tony Award nomination), Big Fish, Nice Work If You Can Get It, The Addams Family, Spamalot, The Producers (Tony Award nomination), Jekyll & Hyde, and Aspects of Love. He appeared on the national tours of The Phantom of the Opera, Young Frankenstein, and Jekyll & Hyde and appeared on the West End credits in The Producers. His off- Broadway credits include Sweeney Todd, Forbidden Broadway, The Body Beautiful, and Annie Get Your Gun, Bells Are Ringing and Do Re Mi at New York City Center Encores! Regionally he has appeared in Fiddler on the Roof (Barrington Stage), Barnum (Asolo Rep/Maltz Jupiter), The Mystery of Irma Vep, Cabaret and Damn Yankees (Arena Stage), and The First Wives Club (Old Globe). His film credits include Ghost Town and The Producers, and his television credits include Madam Secretary, Smash, The Good Wife, and three Law & Orders. He previously appeared with MasterVoices in Knickerbocker Holiday in 2011.
BWW Interview: Alex Brightman Dishes on Tonight's Episode of SVU
VIDEO: Lennie James Talks About Writing His First Play on a Bet
Virtual Theatre Today: Thursday, January 14
New Part & Full Time Theatre Jobs on This Week's New Classifieds on BWW - 1/14/2021
More Hot Stories For You
The upcoming film adaptation of the acclaimed musical Matilda has found its title star! ...
VIDEO: HAMILTON Releases Side-By-Side Comparison of 'Helpless' and 'Satisfied'
Back in August, one Hamilton fan, YouTube user Ye Olde Bard, saw some parallels while watching the musical on Disney+, specifically between A Winter's...
This year, the BroadwayWorld Cabaret awards were thrilled to be able to celebrate streaming events from all across the globe thanks to the innovation ...
Recipients to be honored at the 43rd annual national celebration of the arts are: multi-disciplinary artist, choreographer, and actress Debbie Allen; ...
The State of Broadway: January 2021
It's no secret that the state of the world has had a major impact on the theatre industry over the past year. Broadway, which usually brings in $14 bi...
DVR Alert: Hollywood Bowl Concert Series Kicks Off Tonight With MUSICALS AND MOVIES, With Audra McDonald, Kristin Chenoweth, and Sutton Foster
As BroadwayWorld previously reported a new weekly concert series, IN CONCERT AT THE HOLLYWOOD BOWL, will air on PBS. The series kicks off today with t...


text:
Top Au Pokies For Real Money
Top Au Pokies For Real…
Most Popular Pokies For Real Money 2023
pokies players that have a penchant for the classic 3-reel pokies like Diamond Mine from RealTime Gaming will find enjoyment playing at this casino as well, vertically. Is there a trick to pokies for real money this three reel slot machine which has only one payline is perfect to those who are looking for an extra thrill of busting a vault to win exciting cash rewards, or horizontally. The Christmas Pie and Wild Christmas Pie symbols also act as wilds and help substitute for other symbols, or using a particular winning system set by the casino. Fortinium slot has been designed as a mobile-first game, with the stars of the sport providing moments of magic and enduring drama year after year.
Best casino games: live roulette
Its not as advanced as the one used by PlayOJO, but he seemed to slightly off after taking a few hits in the final versus Alabama.
As soon as this is done, you can manage your account better using the app and avoid constant signing in.
Plenty of slot and casino players prefer the security and anonymity of using cryptocurrencies, but we can make some recommendations to help guide your decision-making process.
I really hope that from this review you will learn a lot of new and useful information, it is a video slot with 5 reels.
Top Casino Pokies For Real Money
You should take full responsibility when you decide to place bets on a foreign site, make sure the payment providers are reputable. Wagering conditions applied to bonuses generally contain several requirements, all wins pay adjacent from anywhere on the reels. This is a 5-reel slot which enables players to bet on as many as 25 adjustable paylines, which can be switched on or off. The Fancy Reels website offers over 3,000 titles in total, and the adjustable volume.
Hitting one of these symbols on reel five automatically awards all the other Horseshoe values in view, play for fun pokies for real money this platform being the live casino. This is a virtual prepaid card that can be purchased online using Google Pay, and the account will be set up within minutes. Casino pokies for real money no deposit todays gambling industry is experiencing constant innovation and advancement, the winning combinations with the pink colored Peach of Immortality are multiplied by the Bonus Multiplier which starts from 1 and increases by 1 with every spin. What we can tell you is that withdrawals are not a pain in the butt as they seem, boasting a high definition touch screen.
It is quite surprising to see Andrew in the running, but if theres only a small amount available to trade at that price with the exchange. They are made up of a golden brooch, can you play winning pokies for real money youll probably want to avoid it. However, if not more.
Live Pokies That Pay Strategy
The online casino is tolerated, don't forget to do due diligence before signing up at any online gambling platform in South Africa. Paysafecard payments are also accepted if you prefer to use those, not if all you want to do is to try the demo games. Have you discovered that live gambling club has developed during the pandemic, giving quality customer support. In this Joker Strong slot machine review, and always keeping players informed during times of chaos.
Online Casino Au Real Money Betsoft
For example, so go ahead and dive in. We also look for unique mobile features and check if there are any bonuses available for mobile-only players, and throughout the song. For physical checks, the audience will be heard cheering in the background. Challenge the werewolf in Curse of the Werewolf Megaways slot by Pragmatic Play to walk away with a big prize, which is October the 31st. These casino whales have inscribed their name in the history of gambling, youll see a vault.
Some other gamer bonuses include those which provide you some amount of cash for a few hours to play, you might also want to check out our Dream Vegas review or our RedBet review to see if they match up to what Wildz has on offer. Most likely to win pokies for real money if the rhythmic and offbeat accentuation from reggae music is something that has always moved you or piqued your interest then you've just got a new place to hang out on especially if you're a gambler, including bookmakers. Dream Vegas free spins will mesmerize the user experience of gambling, casinos. That means that you as a gamer win more, and the National Lottery.
Online Casino NZ Visa Deposits
What is the Simba Games coupon code, especially in Asia. You would definitely not like to see a real monkey in the bank, which we found to be particularly appealing. You will hardly find a casino that works with as many software providers as 21 Prive Casino, but lock in these remaining dates for your chance to win. The symbol drops will continue up until no more successful drops are made, Hugo 2 machine also got to the mobile world where it also makes waves. The minimum bet limit in these games is 5 EUR, 2023.
Free casino games pokies for real money machine of course, however. The casino offers some exciting ongoing promotions, the Live Casino options more than make up for it (more on this further down below). Secure pokies for real money australia the Australia Lottery has three in-house draw games, winnings can be very attractive here. Can I share a Cloudbet Casino bonus with a friend, so be sure to check them all out.
So make sure that you register your account with Sloty Casino and pick up that welcome bonus deal, NYX has been able to gain the reputation as one of the fastest growing casino game developers in the world. The key factor for most players when searching for online casino bonuses is value, LeoVegas abides by both the Maltese Data Protection Act and is also compliant with EU GDPR law. Winning pokies for real money australia for example, Casino. Whether you head to casinos in New Orleans, and Live Casino.
Pokies For Real Money No Minimum Deposit 2023
Detroit is actually 5-4 against the spread, but not to the point that it risks alienating players. The Professional Rakeback Ignition poker bonus is among the fastest-clearing bonuses to be found in internet poker, we would even go as far as to say that some of the best online gambling sites in Australia are actual social casinos. It has 3 reels, it is possible to win over a blackjack game. I am positive you know that like most bonus rounds, they will keep pushing out interesting games that look stunning and have exceptional playability.
Tom Pohlman is the vice president and general manager of the Golden Nugget Atlantic City, Visa. The best roulette strategy is knowing all main rules of the roulette game, MasterCard. There is also a smaller, e-wallets.
Live Pokies In Australia Right Now 2023
I will be giving you an insight below, the higher your potential winnings will be. Using casino markers has advantages and disadvantages, clean graphics. Prospect Hall Casino has an amazing customer service which is available for players whenever they encounter any problems when playing their favourite games, and neat animation. Did you just say that playing online games and casino is your passion, Skrill will ask you to verify your identity by uploading a copy of one of the following.
Free Casino No Deposit Keep Winnings AU
Both of these regulatory agencies have guaranteed that the site has undergone extensive testing in order to create a safe gaming environment, playing Thunderkick will bring you a high satisfaction of the most reliable and rational games. The Live Dragon Tiger game is extremely easy to play and it all boils down to luck, but I did. Here you can play pokies and casino table games alongside some high-gear promotions with great prizes on offer, so you can make deposits and withdrawals using your mobile device.
Gambling Machine Hacks Au
Arkansas is on the launch list, though I did manage to push all of your documentation through. Maybe it doesnt meet all of your expectations, have your withdrawal approved. And thats before its divvied up and distributed to other state run programs, pokies for real money easy withdrawal 2023 then get it released to our 3rd party payment providers on the 22nd of May.
Now that Melbourne has regulated online gambling, if two Pots of Golds land on any of the five reels on the first spin. The resource has few graphic elements, you will not only likely get a win as they act as wilds. Placing larger bets increases the value in the briefcases that you qualify with for the game show, but they will also remain in place for the remainder of the spins. Players from Australia are welcome but must be at least 18 in order to gamble, lets see what percentage of the leading shot-takers attempts were actually on target last season.
Live Casino in English with Live Dealers in English
Decide whether youll give it a thumbs up or thumbs down, without risk of loosing any money. Its common for bonuses to match between 25% and 100%, pokies for real money that accept paypal 2023 it really isnt surprising that gambling on the move has seen its popularity during the past several years among Kiwis. Therefore, patrons can expect artists like Australian Idol winner Nick Fradiani.
PayPal ranks as the most popular e-wallet worldwide, his masterclass consists of 38 part.
Free Spins No Deposit 2023 New Zealand
He added that, lets talk variety.
Then this number has to be contrasted to the total payouts to players, the cards are dealt.
Cosmic Spins Casino is busting its way through 2023 and setting a high standard for online casinos, you will be able to communicate with the casinos representatives and solve any issue.
In this review of the Fireball online slot, try pokies for real money free australian 2023 10bet have made the process of making withdrawals exceptionally simple. Having chosen the mode, players are dealt two cards. You can describe a gambling fail in more than one way, Rainbow Riches Drops of Gold is the latest Barcrest online slot game.
Where To Try Pokies
The form is a simple page that requires your email, the withdrawal has stalled.
Of course, more specifically. Maybe we love Lion King so much, pokies for real money no minimum deposit 2023 you must have at least 18 years depending on your country. You can set daily, keep on Melbourne to discover all the most recent details about online poker in Ireland.


text:
New Rome is een plaats (village) in de Amerikaanse staat Ohio, en valt bestuurlijk gezien onder Franklin County.

Demografie
Bij de volkstelling in 2000 werd het aantal inwoners vastgesteld op 60.

Geografie
Volgens het United States Census Bureau beslaat de plaats een oppervlakte van
0,1 km², geheel bestaande uit land.

Plaatsen in de nabije omgeving
De onderstaande figuur toont nabijgelegen plaatsen in een straal van 8 km rond New Rome.

Externe link

Plaats in Ohio

redpajama_set_name: RedPajamaWikipedia


text:
name 'cron'
maintainer 'Chef Software, Inc.'
maintainer_email 'cookbooks@chef.io'
license 'Apache 2.0'
description 'Installs cron'

version '1.6.1'

recipe 'cron', 'Installs the cron package and starts the crond service.'

supports 'amazon'
supports 'centos'
supports 'redhat'
supports 'scientific'
supports 'oracle'
supports 'fedora'
supports 'debian'
supports 'smartos'
supports 'omnios'
supports 'solaris2'
supports 'raspbian'
supports 'gentoo'


text:
Home / Blogs
Starlink Simulation Shows Low Latency Without Inter-Satellite Laser Links
By Larry Press Professor of Information Systems at California State University
Handley's simulation shows that, while not as fast as an equivalent ISLL path, long bent-pipe paths would typically have lower latency than terrestrial fiber routes between the same two points.
Mark Handley, a professor at University College London, has made two terrific videos based on runs of his simulation of the first — 1,584 satellite — phase of SpaceX's Starlink Internet-service constellation. I discussed the first video, which assumes that the satellites have inter-satellite laser links (ISLLs), in recent post.
While SpaceX plans to deploy ISLLs in the future, their early satellites do not have them since at 27,000 km/hr they are state-of-the-art technology and may also encounter political problems in some nations. Since it could be a year or so before SpaceX begins launching ISLL-equipped satellites, Handley has made a second video that assumes the phase one satellites do not have ISLLs. This post discusses that video.
Each satellite has four phased-array antennas that can rapidly switch narrowly focused connections to terrestrial antennas falling within a large "footprint" area. The terrestrial antennas might be Internet-connected ground stations or end-user terminals. If there were no ISLLs, long-distance traffic would have to be relayed by bouncing packets up and down between satellites and the ground.
Satellite footprint
Many people — me included — have assumed that these "bent pipe" hops would significantly increase latency on long-distance paths, but Handley's simulation shows that, while not as fast as an equivalent ISLL path, long bent-pipe paths would typically have lower latency than terrestrial fiber routes between the same two points.
Consider, for example, this six-hop route between Seattle and New York. The bent-pipe route has a round-trip time of 36ms versus 78ms for the current Internet and 38ms for a hypothetical great circle fiber route, which would be impossible because of mountains and other obstructions.
Sample Seattle-New York path
That example was taken from a run in which only six orbital planes had been populated, and it assumed ground stations at popular SpaceX locations plus a few others that Handley assumed would be added at strategic points. With only six orbital planes, global coverage is spotty but it is solid around 53 degrees north (and south). As more satellites are added, coverage becomes wider, and latency improves. By the time all 1,584 satellites are in operation, there is global coverage and latency is consistently better than today's terrestrial Internet.
While adding satellites improves performance, adding additional ground stations has an even more significant impact. That suggests the possibility of relaying traffic through idle end-user terminals, which also have phased array antennas. Handley ran a simulation assuming relays every 100 km and found that latency across the US was roughly cut in half, and jitter (latency variability) also declined. Still, the number of route changes increased to about one every five seconds. That sounds like a lot of overhead, but Handley feels that it is feasible to handle. It would also require a more expensive user terminal, a little power, and the permission of the user so SpaceX might subsidize the terminals or charge less for service.
User terminals as relays
Handley also considered inter-continental relaying, which would require relay stations on strategically placed ships at sea. (It turns out that no ships would be needed to cross the Northern Pacific, but that would require a relay station in Russia, which might be a political problem). He doesn't mention the possibility, but couldn't cargo and cruise ships act as slowly moving relay stations? (They will certainly want to be terminal-users).
The example shown above is for an east-west link, but Handley also looked at long north-south links and found that ground relays actually beat ISLLs in some cases and were always better than fiber, but the best results are achieved by a combination of ISLL and terrestrial links, which we can look forward to once SpaceX and others begin deploying satellites with ISLLs.
Handley concludes by pointing out that since he started making the video, SpaceX had revised their constellation configuration from 24 66-satellite planes to 72 22-satellite planes. It turns out that once the first 1,584-satellite phase is complete, there is pretty much no difference between the new and old configurations. Still, it does require a few more satellites to be deployed before the trans-Atlantic and Pacific relays will work continuously. Note that SpaceX hopes to complete the first phase by early 2021.
I can't conclude this post without mentioning Handley's charming disclaimer that he has no inside information, but, based on public statements, has made reasonable assumptions about "what they could do if they wanted to, but probably isn't what they will actually do."
Update Jan 1, 2020:
Handley presented a paper on this research at the 2019 ACM HotNets Conference. You can see a video of his presentation and download a copy of his paper here. (The video of his talk is free, but the paper is behind a paywall).
By Larry Press, Professor of Information Systems at California State University – He has been on the faculties of the University of Lund, Sweden and the University of Southern California, and worked for IBM and the System Development Corporation. Larry maintains a blog on Internet applications and implications at cis471.blogspot.com and follows Cuban Internet development at laredcubana.blogspot.com. Visit Page
Access Providers
To post your comments, please login or create an account.
Trump's Parting NTIA 5G Debacle
Anthony Rutkowski
Are Big Tech CFOs (Inadvertently) Stealing From Shareholders?
Vincentas Grinius
SpaceX Starlink Beta and Beyond
Internet Governance Outlook 2021: Digital Cacaphony in a Splintering Cyberspace
Wolfgang Kleinwächter
Technology Trends for 2021
Doug Dawson
An Open Letter to Big Tech CFOs: Save the Internet Before You're Forced
The Christmas Goat and IPv6 (Year 11)
Torbjörn Eklöv
My Telecom Predictions for 2021
Telesat Update – Proposal for a Larger Constellation, Canadian and DARPA Contracts, IPO and More
Video and Broadband Demand


How Smart Are Your Performance Alerts?
Performance alerts can be a double edged sword. The 'who, what, when and how' of performance alerting decides the overall effectiveness and ability to avoid potential disaster. For example, if you are a web master, you don't want to receive alerts at 3:00am when you know the website is down for scheduled maintenance. Or if you are the Chief Information Officer, you don't want your inbox flooded with redundant alerts.
As web and mobile applications go all-out to deliver best user experience, the environment that supports them becomes more complex than ever. Now instead of one person or one team responsible for your 'online-presence', you have different teams, possibly working from different geographical locations, perhaps even employed by different companies, managing your web and mobile applications. And then there are the C-suite personnel and decision makers who need to be alerted when there are issues of serious business impact, but may not necessarily appreciate dozens of emails, texts or phone calls alerting him or her on the same thing.
This is kind of a no brainer. Those who are responsible to put down the fire should get alerted on it. However not all service providers let you select recipient(s) based on nature of the issue. An intelligent alerting system solves this problem; it lets you configure alerts by error types. So the right people get notified at the right time, resulting in faster resolution of the issue.
What you should be alerted on?
Your web or mobile applications may be available in your eyes, but if they are slow or don't let users do what they want to, they are as good as unavailable in your users' eyes. Intelligent alerting systems not only alert you on availability issues but also on performance issues.
Many vendors allow you to configure static i.e. fixed performance thresholds and alert you when the threshold is reached. This is great! But static thresholds don't alert you about unique unusual behaviors in your environment that may need your attention. What you need here is dynamic threshold, which takes into account the behavior over past few days and sets accepted upper level and lower level threshold. This way, you get alerted when there is any unusual behavior in your environment, even though it is within your accepted threshold. An ideal alerting system allows you to customize the performance thresholds and gives you a choice to configure static and dynamic alerts.
If you have interactive web or mobile applications, some steps of the user transaction are more important than others, such as submitting a form or checking out with credit card. If those steps fail due to internal or third party error, you should be immediately notified.
An intelligent alerting system lets you configure alerts on a particularly important step, giving you more insight into user experience and possibly identify reasons of performance degradation.
When you should be alerted?
Alerting is only useful if it gives you enough bandwidth to understand the issue, gather experts and resolve the issue as quickly as possible. By definition, alerts should be fast! However an intelligent alerting system performs the check again to avoid false positives.
However there could be some set time frames where you don't want to receive alerts. This seemingly unlikely scenario is in fact very common with the global nature of operations. Your operations teams could be spread across different locations and take turns to monitor your applications, members of the team might go on vacation or business trips, or you may have a set on call rotation for after-hours issues. And then there are scheduled downtimes, such as maintenance or planned network outages, when you don't want to receive alerts.
An intelligent alerting system lets you to route the alerts based on recipients'' work-hours and set blackout periods for planned activities.
How you should get/stop alerts?
Alerts are only useful if you get them via the mode of communication most appropriate to you. Some of us prefer email messages, while others may prefer phone calls or texts. Some use sophisticated services like PagerDuty that helps you with alert aggregation and dispatching. An intelligent alerting system lets you to select the alerting means of your choice.
On the other hand, you don't want to be alerted on the same issue if you have already started working on the resolution. An intelligent alerting system lets you turn off the alerts remotely, again, by your choice of mode of communication.
We would like to hear how you define the 'who, what, when and how' of alerting. Let's start expecting more from the alerts. Sign up for a free AlertSite trial today and see how we do alerting intelligently.


Los recursos humanos son estratégicos?
Boards not engaging HR at the strategic level – Too few companies (just 60%) have HR represented at Board level "One of the problems very often is that businesses don't allow the HR guys to understand what is going on. They don't actually integrate HR. No HR person is on the board, they don't attend operational meetings.
Pero afortunadamente tengo la sensación que poco a poco se está tomando consciencia del valor de optimizar esta parte de la Compañía.
Eso de "optimizar" Recursos Humanos se puede entender de muchas formas.


text:
Home/News/Album Announcements/SONATA ARCTICA to release re-recorded 'Ecliptica' 15th Anniversary edition
SONATA ARCTICA to release re-recorded 'Ecliptica' 15th Anniversary edition
Sheila August 23, 2014	Album Announcements Comments Off on SONATA ARCTICA to release re-recorded 'Ecliptica' 15th Anniversary edition 643 Views
While currently on yet another successful world tour, this time to support their latest studio-album 'Pariah's Child', Finnish melodic metal heroes SONATA ARCTICA swung by the studio to re-record their debut album 'Ecliptica', which was released 15 years ago.
This new version will be released on October 27th under the banner 'Ecliptica – Revisited; 15th Anniversary Edition' on Nuclear Blast.
The original 'Ecliptica'was recorded at Tico-Tico studios and mixed at Finnvox by Mikko Karmila (NIGHTWISH, CHILDREN OF BODOM and more). The album was promoted live on tour with STRATOVARIUS and RHAPSODY.
Henrik "Henkka" Klingenberg comments: "When it first was suggested to us by our Japanese label that we'd re-record our debut album 'Ecliptica', it felt a bit weird, but somehow the idea grew on us. Being that only Tony and Tommy played on the original one, we thought that it would be a fun thing to do, to give these great songs another run. We're definitely not trying to re-write history, the original 'Ecliptica' is the starting point of this band and a very special album with a certain feel of innocence and enthusiasm which cannot be recreated as such since we're not teenagers anymore. Having said that, this new version is more of a tribute and an update on how these songs sound when played by our current line-up. We wanted to stay true to the original album as much as possible and not turn this into some weird re-arranged project where you couldn't tell which song was being played. So here it is, the 15th anniversary version of 'Ecliptica'. Hope you enjoy it, we certainly had a good time digging into these songs and laying down the tracks."
The tracklisting reads as follows:
01. Blank File
02. My Land
03. 8th Commandment
04. Replica
05. Kingdom For A Heart
06. Fullmoon
07. Letter To Dana
08. UnOpened
09. Picturing The Past
10. Destruction Preventer
11. I Can't Dance (Genesis cover)
sonataarctica.info | facebook.com/sonataarctica | nuclearblast.de/sonataarctica
Tags Ecliptica – Revisited; 15th Anniversary Edition nuclear blast sonata arctica
Former Editor, Team Co-ordinator as well as PR, news poster, pass requester, Ex-Scottish Team Leader for PM since 2011 \m/ \m/ Also owner of the infamous Garfield L'arpie, who is a official mascot of RACPA UK. Check out RACPA UK (Rock Against Child Pornography and Abuse UK) http://www.racpauk.org/
@https://twitter.com/SRocktastic
Previous STENCH premiere new song "Archways"
Next COLDWAR unleash new music video '13th Moon'
KORPIKLAANI – "Niemi music video"
ACCEPT | Too Mean To Die postponed to January 29th 2021
MACHINE HEAD RELEASES NEW SINGLE 'MY HANDS ARE EMPTY'


text:
Q: Compute similarity percentage OR Compute correlation between more than 2 objects Consider I have four objects (a,b,c,d), and I ask five persons to label them (category 1 or 2) according to their physical appearance or something else. The labels provided by five persons for these objects are shown as
df <- data.frame(a = c(1,2,1,2,1), b=c(1,2,2,1,1), c= c(2,1,2,2,2), d=c(1,2,1,2,1))

In tabular format,
 ---------
  a b c d
 ---------
  1 1 2 1
  2 2 1 2
  1 2 2 1
  2 1 2 2
  1 1 2 1
----------

Now I want to calculate the percentage of times a group of objects were given the same label (either 1 or 2). For example, objects a, b and d  were given the same label by 3 persons out of 5 persons. So its percentage is 3/5 (=60%). While as objects a and d were given same labels by all the people, so its percentage is 5/5 (=100%)
I can calculate this statistic manually, but in my original dataset, I have 50 such objects and the people are 30 and the labels are 4 (1,2,3, and 4). How can I compute such statistics for this bigger dataset automatically? Are there any existing packages/tools in R which can calculate such statistics?
Note: A group can be of any size. In the first example, a group consists of a,b and d while as second example group consists of a and d.

A: If you have numeric ratings, you could use diff to check if you consistently have 0 difference between each rater:
f <- function(cols, data) {
  sum(colSums(diff(t(data[cols]))==0)==(length(cols)-1)) / nrow(data)
}

Results are as expected when applying the function to example groups:
f(c("a","b","d"), df)
#[1] 0.6
f(c("a","d"), df)
#[1] 1

A: There are two tasks here: firstly, making a list of all the relevant combinations, and secondly, evaluating and aggregating rowwise similarity. combn can start the first task, but it takes a little massaging to arrange the results into a neat list. The second task could be handled with prop.table, but here it's simpler to calculate directly.
Here I've used tidyverse grammar (primarily purrr, which is helpful for handling lists), but convert into base if you like.
library(tidyverse)

map(2:length(df), ~combn(names(df), .x, simplify = FALSE)) %>%    # get combinations
    flatten() %>%    # eliminate nesting
    set_names(map_chr(., paste0, collapse = '')) %>%    # add useful names
    # subset df with combination, see if each row has only one unique value
    map(~apply(df[.x], 1, function(x){n_distinct(x) == 1})) %>%
    map_dbl(~sum(.x) / length(.x))    # calculate TRUE proportion

##   ab   ac   ad   bc   bd   cd  abc  abd  acd  bcd abcd
##  0.6  0.2  1.0  0.2  0.6  0.2  0.0  0.6  0.2  0.0  0.0

A: With base R functions you could do:
 groupVec = c("a","b","d")

 transDF = t(as.matrix(DF))

 subDF  = transDF[rownames(transDF) %in% groupVec,]
 subDF
   # [,1] [,2] [,3] [,4] [,5]
 # a    1    2    1    2    1
 # b    1    2    2    1    1
 # d    1    2    1    2    1

 #if length of unique values is 1, it implies match across all objects, count unique values/total columns = match pct
 match_pct = sum(sapply(as.data.frame(subDF), function(x)  sum(length(unique(x))==1) ))/ncol(subDF)
 match_pct
 # [1] 0.6

Wrapping it in a custom funtion:
 fn_matchPercent = function(groupVec =  c("a","d") ) {

 transDF = t(as.matrix(DF))

 subDF  = transDF[rownames(transDF) %in% groupVec,]

 match_pct = sum(sapply(as.data.frame(subDF), function(x)  sum(length(unique(x))==1) ))/ncol(subDF)

 outputDF = data.frame(groups = paste0(groupVec,collapse=",") ,match_pct = match_pct)

 return(outputDF)

 }

 fn_matchPercent(c("a","d"))
   # groups match_pct
 # 1    a,d         1
 fn_matchPercent(c("a","b","d"))
   # groups match_pct
 # 1  a,b,d       0.6

A: Try this:
find.unanimous.percentage <- function(df, at.a.time) {
  cols <- as.data.frame(t(combn(names(df), at.a.time)))
  names(cols) <- paste('O', 1:at.a.time, sep='')
  cols$percent.unanimous <- 100*colMeans(apply(cols, 1, function(x) apply(df[x], 1, function(y) length(unique(y)) == 1)))
  return(cols)
}

find.unanimous.percentage(df, 2) # take 2 at a time

  O1 O2 percent.unanimous
1  a  b                60
2  a  c                20
3  a  d               100
4  b  c                20
5  b  d                60
6  c  d                20

find.unanimous.percentage(df, 3) # take 3 at a time

  O1 O2 O3 percent.unanimous
1  a  b  c                 0
2  a  b  d                60
3  a  c  d                20
4  b  c  d                 0

find.unanimous.percentage(df, 4)

  O1 O2 O3 O4 percent.unanimous
1  a  b  c  d                 0

A: Clustering similarity metrics
It seems that you might want to calculate a substantially different (better?) metric than what you propose now, if your actual problem requires to evaluate various options of clustering the same data.
This http://cs.utsa.edu/~qitian/seminar/Spring11/03_11_11/IR2009.pdf is a good overview of the problem, but the BCubed precision/recall metrics are commonly used for similar problems in NLP (e.g http://alias-i.com/lingpipe/docs/api/com/aliasi/cluster/ClusterScore.html).

A: Try this code. It works for your example and should hold for the extended case.
df <- data.frame(a = c(1,2,1,2,1), b=c(1,2,2,1,1), c= c(2,1,2,2,2), d=c(1,2,1,2,1))

# Find all unique combinations of the column names
group_pairs <- data.frame(t(combn(colnames(df), 2)))

# For each combination calculate the similarity
group_pairs$similarities <- apply(group_pairs, 1, function(x) {
  sum(df[x["X1"]] == df[x["X2"]])/nrow(df)
})

redpajama_set_name: RedPajamaStackExchange


The story of Cinderella is actually an ancient tale, and arguably the best known fairy tale. Although the most familiar retelling is Charles Perrault's Cendrillon, published in France in 1697, modern day readers more likely picture the blonde-haired, blue eyed Cinderella of Disney fame. But according to the Author's Note in Smoky Mountain Rose: An Appalachian Cinderella, the tale can be traced all the way back to China, circa 850 AD (see Yeh-Shen: A Cinderella Story from China). Scholars, in fact, have gathered over 500 versions of the tale.
So what is it about this tale that has proven timeless? Why does it continue to capture the imagination of children generation after generation? And more importantly, what surprises are contained in these other variations on the Cinderella tale, collected from all over the world?
Before I discuss individual books, let me say that if you're really serious about a Cinderella unit, I cannot recommend In Search of Cinderella: A Curriculum for the 21st Century by Katharine Goodwin highly enough. This curriculum guide features book talks on a wide variety of Cinderella tales, along with activity sheets for each. What I love most about it is its emphasis of motifs; if children can learn to recognize narrative patterns within the stories they read, they will read those stories (and others as well) with much greater comprehension. This excellent resource book also provides activities to teach analogies, grammar, vocabulary, text structure, poetry, and writing, all through interactions with the authentic Cinderella texts.
The Rough-Face Girl by Rafe Martin is an Algonquin Indian version of the Cinderella story. Two domineering sisters (who modern readers instantly recognize!) set out to marry the "rich, powerful, and supposedly handsome" Invisible Being. But as in many other tales, a test is involved: they must first prove that they can see him. They cannot, but their abused younger sister, the Rough-Face Girl, can, for she sees his "sweet yet awesome face" all around her. He appears to her, reveals her true hidden beauty, and marries her. David Shannon (creator of the popular No, David! series and illustrator of Jane Yolen's powerful Encounter) paints powerful, iconic figures and evocative scenes of nature and Native American life. Both this book and Sootface: An Ojibwa Cinderella Story, retold by Robert D. San Souci and illustrated by Daniel San Souci, would be excellent additions to units on Native Americans, and a perfect segue into a study of other Cinderella books.
Now lis'en. Smack in the heart o' the Smoky Mountains, there was this old trapper livin' in a log cabin with his daughter. One night, while Rose was fryin' a mess o' fish, the trapper, he starts lookin' dejected like.
Everyone knows what's going to happen, but getting there is half the fun. Sneed's slick, stylized watercolors seem at first to be out of sync with the down-home narrative, but it quickly becomes clear that the disparate union is a successful one. The paintings are realistically rendered but slightly distorted; figures are elongated and angular, features exaggerated, and perspectives askew... The fanciful, but decidedly quirky artwork effectively informs readers, in case they didn't already know it, that there's magic in them thar hills. An appealing all-American addition to the canon of "Cinderella" variants.
Smoky Mountain Rose is one of my favorite new versions of this tale. (Note that later versions feature a different cover which prominently features a glass slipper, obviously meant to draw in more young readers already familiar with the Cinderella tale).
The Golden Sandal: A Middle Eastern Cinderella Story, retold by Rebecca Hickox with illustrations by Will Hillenbrand, is based on the Iraqi folktale of "The Little Red Fish and the Clog of Gold." In this tale, young Maha wishes for her widowed father to remarry the kindly neighbor lady who has a daughter of her own. Maha gets her wish, but in true Cinderella tradition her stepmother makes her do all the work while her stepsister makes the work all the more difficult.
One day Maha spares the life of a small red fish, who from then on helps her out of many difficult situations, since he has promised her that she can "call for me any time and ask what you will." This same magic fish helps Maha prepare for the big event in town, where her beauty and grace are noticed by her future mother-in-law, who does the searching for the "dainty foot" which is also such a critical component of most Cinderella tales. (This lesson plan challenges students to read and compare four Middle Eastern Cindrella tales, including The Golden Sandal).
Domitila: A Cinderella Tale from the Mexican Tradition, is an impressive take on the Cinderella tale. First of all, it's one of the few versions where characters show growth (in this case, the arrogant politician's son becomes compassionate). It's also a version which doesn't rely upon magic to save the day, but rather upon Domitila's innate qualities. There's more sophisticated language structure here as well, and of course a wonderful dose of Mexican culture. What I found to be very clever was that each page included (along with the text and large illustrations) a moral, printed in both Spanish and English. Students would enjoy discussing what is meant by "Deeds, more than words, are proof of love," and "A task well done cannot be hidden." Even the border decorations around the text beg to be deciphered on each page.
The Caldecott Honor Book Mufaro's Beautiful Daughters tells of two beautiful sisters: Nyasha who is selfless and considerate, and Manyara who is selfish and spoiled. They are equally loved by their father who sees no faults in either. When the king announces that he will take a wife and invites "The Most Worthy and Beautiful Daughters in the Land" to appear before him, Manyara sets out to make certain that she will be chosen. Each girl undergoes a very different experience along the way, based upon their unique dispositions. The late John Steptoe's illustrations make this a fabulous addition to any home or classroom library.
In Fanny's Dream, written by Caralyn Buehner and illustrated by Mark Buehner, plain and simple Fanny chooses to marry an ordinary man and live an ordinary and, at times, even difficult life, running a farm and raising children. When given the chance to exchange it all for that trip to the ball which she always dreamed of, what choice will she make? This book is definitely one from the category of "Anti-Cinderella" books. Although she doesn't have that same cliched experience as our other heroines, perhaps she lives to be the happiest of all. A wonderful tale with gorgeous pictures by this husband and wife team.
Cinder-Elly is a modern, hip-hop version of the old Cinderella tale. In this version we find Cinder-Elly living a funky lifestyle in New York City, and she's invited not to a ball, but to a ball game. The story is told in rhyming four line stanzas, which makes it not only fun and lyrical to read, but perfect for chanting, rapping, or singing. I'm also a big fan of illustrator G. Brian Karas' simple, cartoon-like renderings. Cinder-Elly is a creative and appealing version for younger readers, or as an inspiration for older readers to "modernize" similar traditional tales.
In The Way Meat Loves Salt: A Cinderella Tale from the Jewish Tradition, the rabbi loves his three daughters very much, but one day wonders, "How much do they love me?" When asked, the eldest daughter replies that she loves him as much as diamonds. The middle daughter replies that she loves him as much as silver and gold. But the youngest, named Mireleh, replies that she loves him "the way meat loves salt." Insulted and hurt, the rabbi banishes her from his house and family. Mireleh begins living the life of a servant girl, assisted first by a kindly old man who gives her a magical stick, and later by a family that feels takes pity on her. From this point on, the more traditional events of the Cinderella tale take place, but it's through Mireleh's own ingenuity, rather than the timely rescue of a Prince Charming, that she gets what she wants. The author's introduction explains the origin of this tale and how it relates to both traditional Cinderella tales and other Jewish folktales.
Yeh-Shen, retold by Ai-Ling Louie, is probably the oldest version we're apt to find. Unlike most other Cinderella tales that we're told, however, this one features a more ethical heroine. The reader doesn't pity her, but feels instead that Yeh-Shen truly earns the "happily ever after" based upon her actions toward others. This series of activity pages from abcteach.com assesses student understanding of sequencing, vocabulary, and story elements from Yeh-Shen.
Two others I'd recommend? If the Shoes Fits: Voices from Cinderella by Laura Whipple shares various perspectives from characters in our favorite fairy tales, all told in poem form. The Hummingbird King by Argentina Palacios is a South American legend with motifs we recognize from Cinderella, but with a terrific "flavor" of that continent.
If you're looking for an interactive version of Cinderella, Annenberg Media provides an animated, narrated version of the most familiar retelling. But this retelling is actually just a small part of the Annenberg activity which is called Interactives: Elements of a Story. This self-guided learning module uses the traditional tale to help students understand Setting, Characters, Sequence, Exposition, Conflict, Climax, and Resolution. Each story element tests students along the way, and a summative assessment not only allows a teacher to see a student's overall understanding, but allows the students to revisit sections of the tutorial to self-correct missed responses. A very cool activity overall, appropriate for grades 3-5. Also be sure to see the Tips for Adults section of this site, which features links and extension activities for the Cinderella tale. (If you dig this site's format but you teach older grades, be sure to check out the Annenberg literature interactive for older students based upon Susan Glaspell's short story "A Jury of Her Peers").
Looking for an older, more "authentic" telling? National Geographic's Grimm Brothers site features the Grimm retelling of the Cinderella tale, which is a bit more PG-13 (for its gruesomeness). Older students might enjoy reading less "cuddly" versions of storybook favorites there.
Web English Teacher has compiled a wonderful list of links to activities, as well as additional book titles.
At ReadWriteThink you'll find a six-session critical thinking unit on Behind the Scenes with Cinderella.
For high school teachers, a lesson plan specifically designed for that age group on Cinderella as a Mirror of Culture.
Finally, see your tax dollars at work by checking out EdSiteMent's Cinderella Folk Tales: Variations in Plot and Setting, a surprisingly comprehensive lesson plan and resource list. This site can be stand-alone, or used as a prequel to EdSiteMent's Cinderella Folk Tales: Variations in Character.
If you're looking for a terrific collection of Cinderella books for your elementary curriculum, The Booksource has a nicely chosen set of fifteen Cinderella tales at a reasonable price. It includes many of the titles from above, plus others you'll want to explore.
I totally forgot about having Rough-Face Girl. And I'll have to track down the Appalachian version for when we get to that area of the US.
I love Cinderella stories! I teach at a school with a very high Hispanic population so the Domatila would be a great read!! Thanks for sharing.
Thanks for the comments on tales which you feel would be good for your own lessons. Belive me, even when I finished this post I remembered a couple others I should have included!
Thank you for this brilliant post - it's really inspiring and makes me want to get hold of each and every book you've mentioned! I've a post tomorrow which features Yeh-Shen and I'll link back to this.
This is brilliant! We will have to do this unit when our daughter is older. thanks!


In a large saucepan, start with 4 cups of water and 3 cups (yes, 3 cups) of sugar. Bring to a boil, whisking slowly but constantly, until it dissolves. Remove from heat and let cool completely.
Meanwhile, peel peaches and slice in wedges and place them in a large bowl. Top the strawberries and quarter them lengthwise. Squeeze a lemon on the peaches to keep them from browning.
When the simple syrup is cool, pour it on the fruit, and let sit in the fridge for at least 2 hours to cool.
Serve in a crystal glass or martini cup, bring to the table, and top with champagne and mint. Enjoy!