text:
Rare ranked-choice tie means Portland will decide at-large council race by drawing lots
The top two vote-getters in the four-way race got the exact same number of votes in a ranked-choice runoff.
By Randy BillingsStaff Writer
In what is believed to be a first in an American ranked-choice election, the race for an at-large seat on the Portland City Council ended in a tie and will be decided by drawing lots, city officials said.
School board member Roberto Rodriguez and planning board chairman Brandon Mazer, two of the four candidates for the seat, each received 8,529 votes as a result of the runoff by Election Systems & Software, the city said. Rodriguez had finished first after the initial tally of votes Tuesday, 273 votes ahead of Mazer in a citywide race in which more than 19,000 ballots were cast.
The city said in a news release Wednesday that the winner of the race would be determined Thursday morning through a public process established under city rules. The process states that a tie is decided "by lot," which the city said is "a method of making a decision or selection by choosing something, often slips of paper, at random." The candidate selected by lot will be the winner. And the drawing will take place at 10 a.m. Thursday in front of City Hall, the city said.
A hand recount could still be requested, but only after a winner has been named, the city said.
The city charter does not directly address ties in a ranked-choice election, but does allow the city clerk to "adopt additional regulations consistent with this subsection to implement these provisions." The city's rules were adopted in 2011 in conjunction with the charter amendments implementing ranked-choice voting.
State law governing statewide ranked-choice elections also calls for ties between last-place candidates to be "decided by lot" – only unlike the city's rules, the candidate selected by lot loses.
Defeat for ballot measure for smaller shelters in Portland
The count was conducted using ranked-choice voting and went to an instant runoff because none of the candidates surpassed the 50 percent threshold needed to win.
COMMON WAY TO DECIDE TIES
Chris Hughes, policy director at the Ranked Choice Voting Resource Center, said Wednesday that over 400 ranked-choice elections have been held in the United States and this is the first one he's aware of that ended in a tie. That being said, it's common for election ties to be decided by drawing lots, whether it's a coin toss, drawing straws or some other sort of random drawing, he said.
Brandon Mazer Shawn Patrick Ouellette/Staff Photographer
Hughes pointed to a 2017 election in Virginia as an example. In that race, Republican David Yancey was chosen as the winner after his name was drawn out of an artisanal bowl. His win allowed his party to retain control over the House of Delegates, according to National Public Radio.
"Ties in any kind of election are super rare," Hughes said. "From everything I have seen, ties tend to happen in smaller elections. They don't tend to happen when there's like 15,000 votes cast. And every election law I have seen decides ties by lot."
Mazer said in a statement Wednesday that he's looking forward to following "the procedures that govern our elections."
"I deeply appreciate all of the work that everyone has put into helping on this campaign. It's clear that our campaign's focus on affordable housing, property taxes, and education resonated with Portland voters," Mazer said. "While we wait for more information – to everyone that knocked on doors, made phone calls, ranked me on their ballot, or simply said hello during the campaign – thank you so much."
Roberto Rodriguez Shawn Patrick Ouellette/Staff Photographer
Rodriguez did not respond Wednesday to a voicemail and text message seeking comment.
The race was so close late Tuesday night that city officials delayed the instant runoff until Wednesday.
Prior to the instant runoff, Rodriguez led the at-large contest with 5,553 votes or just over 29 percent. Mazer had 5,280 votes or nearly 28 percent. Travis Curran had 4,776 votes or 25 percent. And Stuart Tisdale had 3,480 votes or 16.6 percent. About 8 percent of Portland ballots did not choose any candidates in the at-large race.
The four at-large candidates were seeking to fill outgoing Councilor Nicholas Mavodones' seat on the council. Curran, 35, is a server and retail manager at Maine Craft Distilling who ran unsuccessfully for mayor in 2019. Mazer, 35, is an attorney and chairman of the planning board. Rodriguez, 42, owns an urban farming business and is serving his second term on the school board. Tisdale, 68, is an attorney and retired history and government teacher at Cheverus High School.
Tuesday's election comes at a pivotal stage for Maine's largest city. None of the three incumbent councilors sought re-election, leaving a third of the council up for grabs.
Jennings era comes to an end as Portland city manager moves on
CITY AT PIVOTAL STAGE
Meanwhile, a charter commission could recommend sweeping changes to city government, including shifting more power to the elected mayor and either demoting or eliminating the city manager position. But those recommendations will not be made until next summer at the earliest and would need voter approval to take effect.
The incoming council will be charged with searching for a new city manager, a job Jon Jennings left Monday after six years to become the next city manger of Clearwater, Florida. Corporation Counsel Danielle West was sworn in as the interim city manager on Tuesday and Associate Corporation Counsel Jennifer Thompson was sworn in as interim corporation counsel.
Even with the at-large race undecided, Tuesday's results continued a streak of wins for Portland progressives, who passed four citizen referendums last fall that ushered in rent control, a higher minimum wage and a Green New Deal for Portland and strengthened a ban on facial recognition software. Progressives also captured a majority of seats on the charter commission.
In District 2, Victoria Pelletier, a 33-year-old special projects coordinator at the Greater Portland Council of Governments whose focus is on racial equity and economic development, cruised to a decisive win over Jon Hinck, a 67-year-old attorney and former at-large city councilor and state representative. Pelletier, a political newcomer, earned nearly 59 percent of the votes to represent the West End and Parkside.
In District 1, Anna Trevorrow, a 39-year-old medical malpractice paralegal at Norman, Hanson & DeTroy serving her third term on the school board, bested political newcomer Sarah Michniewicz, a self-employed seamstress who has led the Bayside Neighborhood Association for four years. Trevorrow earned 55 percent of the votes to represent the East End, Bayside, the Old Port and islands.
Related Headlines
Statewide and town-by-town Maine results for Election 2021
Kennebunk voters release town from Barnard Tavern deed restriction
Majority of Richmond voters in favor of starting withdrawal process again
Tech company Garmin plans 50 hires, build-out at its Yarmouth site
Slippery seal turns the tide on Cape Elizabeth police
Snow totals for Jan. 23
Man accused in lawsuit of assaulting girls in '90s says medical conditions make that impossible
Storm brings accidents, power outages, nearly a foot of snow to most of Maine


text:
{-# LANGUAGE QuasiQuotes,DoAndIfThenElse,TemplateHaskell #-}

module Handler.Paper where

import Import

import qualified Data.List as L
import qualified Data.Text as T
import qualified Data.Text.IO as TIO
import qualified Data.Text.Lazy as TL

import Data.Text.Lazy.Encoding as TL
import Data.Text.Encoding as T

import Safe

import Text.XML as X (Document)
import qualified Data.Aeson as Ae

import qualified Model.PaperReader as PR
import Text.Blaze.Html.Renderer.Text

import Handler.Widget
import Handler.Form
import Handler.Utils
import Handler.Render

import qualified Data.ByteString.Base64.URL as Base64 (decode)

import Model.Pubmed
import Model.RIS

import Model.PaperP
import Model.PaperMongo

import Control.Lens hiding ((.=))
import qualified Parser.Lens as L

import qualified Parser.Paper as P
import Parser.PaperReader (readerFromHtml,readerFromUrl,parseHtml)
import Parser.PaperReaderTypes

import Data.Time.Clock

import Control.Applicative
import Debug.Trace
import Network.HTTP.Conduit

import Data.String (fromString)

-- to use Html into forms
import Yesod.Form.Nic (YesodNic)
instance YesodNic App

--
-- Handlers for adding a paper.
--

--FIXME: All runDB functions should be changed to raw mongo.

getPaperJsonR :: PaperId -> Handler TypedContent
getPaperJsonR pid = do
  email <- requireAuthId'
  mp <- getPaperDB email pid
  case mp of
    Just p -> return $ toTypedContent (toJSON p)
    Nothing -> return $ toTypedContent $ object ["success" .= False, "message" .= ("Paper ID not found."::Text)]

postPaperJsonR = getPaperJsonR

postAddUrlR :: Handler TypedContent
postAddUrlR = do
  email <- requireAuthId'
  murl <- lookupPostParam "url"
  $(logInfo) $ T.concat ["postAddUrlR from: ",email,":",fromMaybe "(No url)" murl]
  let
    mreader = murl >>= readerFromUrl
    json = object ["supported".=isJust mreader]
  time <- liftIO $ getCurrentTime
  let history = History Nothing HAVisitOriginal time (User email Nothing Nothing) Nothing
  _ <- runDB $ insertUserH email history
  return $ toTypedContent json

postAddFromBookmarkletR :: Handler TypedContent
postAddFromBookmarkletR = do
  email <- requireAuthId'
  $(logInfo) $ T.append "postAddFromBookmarkletR from: " email
  [murl,mhtml] <- mapM lookupPostParam ["url","html"]
  -- $(logInfo) $ T.concat [fromMaybe "Nothing" url, " ", fromMaybe "Nothing" html]
  case (murl,mhtml) of
    (Just u,Just h) -> addIfNotExistBookmarklet email u h
    _ -> selectRep $ provideRep $ nowrapLayout $(widgetFile "bookmarklet_param_invalid")

addIfNotExistBookmarklet :: Text -> Text -> Text -> Handler TypedContent
addIfNotExistBookmarklet email url html = do
  res <- getPaperByUrl email url
  case res of
    Just (pid,paper) ->
      selectRep $ provideRep $ nowrapLayout $(widgetFile "bookmarklet_paper_exists")
    Nothing -> do
      mp <- htmlToPaper url html
      case mp of
        Just (pp,p) -> addIfNotExist email url html Nothing
        Nothing -> return $ failureJSON "Parsing cannot be done."
      -- selectRep $ provideRep $ nowrapLayout $(widgetFile "bookmarklet_paper_added")

-- |Entry point for adding a paper.
-- |POST params:
-- |url: Text, html: Text, serverside: Bool, parsed: stringified JSON
postAddPaperR :: Handler TypedContent
postAddPaperR = do
  email <- requireAuthId'
  $(logInfo) $ T.append "postAddPaperR from: " email
  [murl,mhtml,mserverside,mparsed] <- mapM lookupPostParam ["url","html","serverside","parsed"]
  case (murl,mhtml,mserverside,mparsed) of
    (Just u,Just h,Just "false",Just jsontxt) -> do
      mp <- jsonTxtToPaper jsontxt
      addIfNotExist email u h mp
    (Just u,Just h,_,_) -> do
      mp <- htmlToPaper u h
      addIfNotExist email u h mp
    _ -> return $ toTypedContent $ object ["success" .= False,"message" .= ("Params are incomplete." :: Text)]

-- Add a re-parsed content from client.
postUpdatePaperR :: Handler TypedContent
postUpdatePaperR = do
  email <- requireAuthId'
  $(logInfo) $ T.append "postUpdatePaperR from: " email
  mparsed <- lookupPostParam "parsed"
  case mparsed of
    Just jsontxt -> updateWithParsed email jsontxt
    _ -> return $ toTypedContent $ object ["success" .= False,"message" .= ("Params are incomplete." :: Text)]

-- Ver.0.11 change:
-- Using DOI as identity. Different version with the same DOI is merged by availability flags.
addIfNotExist :: Text -> Text -> Text -> Maybe (P.Paper,Paper) -> Handler TypedContent
addIfNotExist _ _ _ Nothing = return $ toTypedContent $ object ["success" .= False, "message" .= ("Not valid data." :: Text)]
addIfNotExist email url html (Just (pp,p)) = do
  let doi = paperDoi p
  res <- getPaperByDOI email doi
  json <- case res of
    Just (present_id,present) -> do
      let ResourceAvailability cit abs full fig ref toc = paperAvailable present
      if not (cit && abs && full && fig && ref && toc) then
        doAdd email url html (Just (present_id, present)) pp p
      else
        return $ object ["success" .= False, "message" .= ("Already exists" :: Text),
                      "doi" .= (paperDoi present), "id" .= toPathPiece present_id,
                      "summary" .= object (paperSummary present_id present)]
    Nothing -> doAdd email url html Nothing pp p
  return $ toTypedContent json

htmlToPaper :: Url -> Text -> Handler (Maybe (P.Paper,Paper))
htmlToPaper url html = do
  mnewpp <- liftIO $ parseHtml url html
  let mnewp = fmap paperPToPaper mnewpp  -- Take out Paper from PaperP
  case mnewpp of
    Just newpp -> do
      time <- liftIO $ getCurrentTime
      return $ Just $ (newpp, (paperPToPaper newpp) {paperTimeAdded=time})
    Nothing -> return Nothing

jsonTxtToPaper :: Text -> Handler (Maybe (P.Paper,Paper))
jsonTxtToPaper jsontxt = do
  let mjson = Ae.decode (TL.encodeUtf8 $ TL.fromStrict jsontxt)
  let mnewpp = mjson >>= parseJsonFromClient
  case mnewpp of
    Just newpp -> do
      time <- liftIO $ getCurrentTime
      return $ Just $ (newpp, (paperPToPaper newpp) {paperTimeAdded=time})
    Nothing -> return Nothing

-- Unlike doAdd, this forces update.
updateWithParsed :: Text -> Text -> Handler TypedContent
updateWithParsed email jsontxt = do
  mps <- jsonTxtToPaper jsontxt
  case mps of
    Just (pp,p) -> do
      mp <- getPaperByUrl email (P._paperUrl pp)
      case mp of
        Just (pid,paper) -> do
          -- $(logInfo) $ "updatedWithParsed: success."
          let html = paperOriginalHtml paper
          updatePaperDB email pid $ (paperPToPaper pp){paperOriginalHtml=html,paperUserEmail=Just email}
          let json = object ["success" .= True, "message" .= ("Paper updated."::Text)]
          return $ toTypedContent $ json
        Nothing -> do
          return $ failureJSON "Paper with specified URL is not found."
    Nothing -> do
      return $ failureJSON "JSON fields missing or parse failure."

doAdd :: Text -> Text -> Text -> Maybe (PaperId,Paper) -> PaperP -> Paper -> Handler Value
doAdd email url html mpresent pp p = do
  mnewpp <- liftIO $ parseHtml url html
  let mnewp = fmap paperPToPaper mnewpp  -- Take out Paper from PaperP
  $(logInfo) $ "Paper got from parser"
  res <- case (mpresent,mnewp) of
    (Nothing,Just newp) -> do
      time <- liftIO $ getCurrentTime
      pid <- runDB $ insertUser email newp{paperTimeAdded=time}
      $(logInfo) "Paper added to DB"
      saveFormattedCache FormatB pid (fromJust mnewpp)   -- Stub: Also change reparse.
      time <- liftIO $ getCurrentTime
      let history = History (Just pid) HACreate time (User email Nothing Nothing) Nothing
      _ <- runDB $ insertUserH email history
      return (mnewp,Just pid)
    (Just (present_id,present),Just newp) -> do
      $(logInfo) "Merge paper to DB"
      paper <- liftIO $ mergeTwoPapers present newp
      updatePaperDB email present_id paper
      liftIO $ print present_id
      return (Just paper,Just present_id)
    (_,Nothing) -> do
      $(logWarn) $ "Parsing failure."
      return (Nothing,Nothing)
  return $ case res of
             (Just rep,Just pid) ->
              let
                cit = paperCitation rep
                journal = (citationJournal cit)
                useGScholar = not . all id $
                              [isJust journal,
                              isJust (citationTitle cit),
                              isJust (citationVolume cit),
                              isJust (citationYear cit),
                              isJust (citationPageFrom cit)
                              ]
                pubmedCovered j = True -- Stub.
                usePubmed = useGScholar && (maybe True pubmedCovered journal)
              in
                object [ "success" .= True, "summary" .= object (paperSummary pid rep),"usePubmed" .= usePubmed,
                          "useGScholar" .= useGScholar ]
             _ -> object [ "success" .= False , "message" .= ("No reader was found." :: String)]
--
-- Handlers for checking if the specified paper is supported.
--

getSupportedPaperR :: Handler TypedContent
getSupportedPaperR = supportedPaperR lookupGetParam

postSupportedPaperR :: Handler TypedContent
postSupportedPaperR = supportedPaperR lookupPostParam

type LookupFunc = Text -> Handler (Maybe Text)

supportedPaperR :: LookupFunc -> Handler TypedContent
supportedPaperR f = do
  murl <- f "url"
  let
    mreader = murl >>= readerFromUrl
    pubname = maybe "N/A" (\r -> (readerName r) r) mreader
    pub = ["publisher" .= pubname]
    json = object (["supported" .= isJust mreader] ++ pub)
  return $ toTypedContent json

--
-- Handlers for modifying (removing, reparsing, changing tags) papers.
--

-- Server side fetching.
getRefetchPubmedInfo :: Handler TypedContent
getRefetchPubmedInfo = do
  mpid <- lookupGetParam "id"
  mdoi <- lookupGetParam "doi"
  case (mpid >>= fromPathPiece, mdoi) of
    (Just pid,Just doi) -> do
      (minfo,txt) <- liftIO $ pubmedByDOI doi
      case minfo of
        Just info -> do
          doAddPubmedInfo pid (TL.toStrict txt) info
        _ -> return $ failureJSON "Pubmed fetching/parsing failure."
    _ ->
      return $ failureJSON "Params are missing."

postAddPubmedInfoR :: Handler TypedContent
postAddPubmedInfoR = do
  mpid' <- lookupPostParam "id"
  mxmlstr <- fmap decodeXml <$> lookupPostParam "xml"
  -- liftIO $ print xmlstr
  let mpid = mpid' >>= fromPathPiece
  let minfo = mxmlstr >>= pubmedFromXml
  case (mpid,minfo,mxmlstr) of
    (Just pid,Just info,Just xmlstr) ->
      doAddPubmedInfo pid xmlstr info
    (Just pid,Nothing,Just xmlstr) ->
      return $ failureJSON "XML parse error (Probably because there is no record on Pubmed)."
    _ -> return $ failureJSON "Parameters are missing."

doAddPubmedInfo :: PaperId -> Text -> PubmedInfo -> Handler TypedContent
doAddPubmedInfo pid txt info = do
  liftIO $ TIO.writeFile (fromString (appRootFolder++"data/pubmed/"++(T.unpack $ pmId info))) txt
  updatePaperWithPubmed info pid
  return $ toTypedContent $ object ["success" .= True, "pubmed_id" .= pmId info]

updatePaperWithPubmed :: PubmedInfo -> PaperId -> Handler ()
updatePaperWithPubmed info pid = do
  email <- requireAuthId'
  paper <- getPaperDB404 email pid
  let cit = paperCitation paper
  let authors = citationAuthors cit
  let newcit = cit {citationJournal=citationJournal cit <|> pmJournal info,
                    citationTitle=citationTitle cit <|> pmTitle info,
                    citationVolume=citationVolume cit <|> pmVolume info,
                    citationYear=citationYear cit <|> pmYear info,
                    citationPageFrom=citationPageFrom cit <|> pmPageFrom info,
                    citationPageTo=citationPageTo cit <|> pmPageTo info,
                    citationAuthors= (if null authors then fromMaybe [] $ pmAuthors info else authors)}
  let newp = paper {paperCitation=newcit}
--  liftIO $ print info
--  liftIO $ print newcit
  updatePaperDB email pid newp
  return ()

-- Adding info from RIS format metainfo.
postAddGoogleScholarInfoR :: Handler TypedContent
postAddGoogleScholarInfoR = do
  email <- requireAuthId'
  mris <- lookupPostParam "ris"
  mpid <- lookupPostParam "id"
  case (mpid >>= fromPathPiece,mris) of
    (Just pid,Just ris) -> do
      case parseRIS ris of
        Just risinfo -> do
          updatePaperWithRIS risinfo pid
          return $ toTypedContent $ object ["success" .= True]
        _ -> return $ failureJSON "RIS file parse failure."
    _ -> return $ failureJSON "Parameters are missing."

updatePaperWithRIS :: RISInfo -> PaperId -> Handler ()
updatePaperWithRIS info pid = notFound -- stub: seems the following code has a weird bug that makes random change.
{-updatePaperWithRIS info pid = do
  email <- requireAuthId'
  paper <- getPaperDB404 email pid
  let cit = paperCitation paper
  let authors = citationAuthors cit
  let newcit = cit {citationJournal=citationJournal cit <|> risJournal info,
                    citationTitle=citationTitle cit <|> risTitle info,
                    citationVolume=citationVolume cit <|> risVolume info,
                    citationYear=citationYear cit <|> risYear info,
                    citationPageFrom=citationPageFrom cit <|> risPageFrom info,
                    citationPageTo=citationPageTo cit <|> risPageTo info,
                    citationAuthors= (if null authors then fromMaybe [] $ risAuthors info else authors)}
  let newp = paper {paperCitation=newcit}
--  liftIO $ print info
--  liftIO $ print newcit
  updatePaperDB email pid newp
  return ()
-}

formHandlerWithIdtext form func = do
  ((result, widget), enctype) <- runFormPost form
  json <- case result of
            FormSuccess idtext -> do
              let ids = splitIdText $ Just idtext
              case ids of
                  [] -> return $ object (["success" .= False, "message" .= ("ID is invalid."::String)])
                  xs -> func xs
            FormMissing -> return $ jsonFormError
            FormFailure _ -> return $ jsonFormError
  return $ toTypedContent json

formHandlerWithIdtextAndParams form func = do
  ((result, widget), enctype) <- runFormPost form
  json <- case result of
            FormSuccess idtext -> do
              let ids = splitIdText $ Just idtext
              case ids of
                  [] -> return $ object (["success" .= False, "message" .= ("ID is invalid."::String)])
                  xs -> do
                    partext <- lookupPostParam "params"
                    let params = splitParamText partext
                    func xs params
            FormMissing -> return $ jsonFormError
            FormFailure s -> do
              $(logError) $ T.pack $ show s
              return $ jsonFormError
  return $ toTypedContent json

jsonFormError :: Value
jsonFormError = object ["success" .= False, "message" .= ("Error while processing the form."::String)]

-- single paper removal.
postRemovePaperR :: PaperId -> Handler TypedContent
postRemovePaperR pid = do
  runDB $ delete pid
  return $ toTypedContent $ object ["success" .= True]

postRemovePapersR :: Handler TypedContent
postRemovePapersR = do
  email <- requireAuthId'
  idstxt <- lookupPostParam "id"
  fmap toTypedContent $ doRemove (splitIdText idstxt)

postReparsePapersR :: Handler TypedContent
postReparsePapersR = do
  email <- requireAuthId'
  idstxt <- lookupPostParam "id"
  fmap toTypedContent $ doReparse (splitIdText idstxt)

getReparsePaperR :: Handler TypedContent
getReparsePaperR = do  -- caution: this is for a single pid, different from postReparsePapersR.
  mpid <- lookupGetParam "id"
  let mpidstr = mpid >>= fromPathPiece
  memail <- requireAuthId'
  json <- case mpidstr of
    Just pid -> do
      doReparse [pid]
    Nothing -> do
      return $ object ["success" .= False, "message" .= ("No valid paper ID found."::String)]
  return $ toTypedContent json

formHandlerWithIdTagText form func = do
  ((result, widget), enctype) <- runFormPost form
  liftIO $ print result
  json <- case result of
            FormSuccess (idtext,tagtext) -> do
              let ids = splitIdText $ Just idtext
              let tags = splitParamText $ Just tagtext
              case (ids,tags) of
                  ([],_) -> return $ object (["success" .= False, "message" .= ("ID is invalid."::String)])
                  (_,[]) -> return $ object (["success" .= False, "message" .= ("Tag is invalid."::String)])
                  (is,ts) -> func is ts
            FormMissing -> return jsonFormError
            FormFailure _ -> return jsonFormError
  return $ toTypedContent json

postAddTagsR = formHandlerWithIdtextAndParams onetimeTokenF doAddTags
postRemoveTagsR = formHandlerWithIdtextAndParams onetimeTokenF doRemoveTags

postReplaceTagsR :: Handler TypedContent
postReplaceTagsR = do
  email <- requireAuthId'
  mpidtxt <- lookupPostParam "id"
  let mpid = mpidtxt >>= fromPathPiece
  mtags <- lookupPostParam "tags"
  let tags = splitParamText mtags
  $(logInfo) $ T.pack $ show (mpid,mtags)
  case (mpid,length tags > 0) of
    (Just pid,True) -> toTypedContent <$> doReplaceTags [pid] tags
    _ -> return $ failureJSON "You need id and tags params."

-- paperMisc field update. This is used with stringified JSON.
postReplaceMiscR :: Handler TypedContent
postReplaceMiscR = do
  email <- requireAuthId'
  mpidtxt <- lookupPostParam "id"
  let mpid = mpidtxt >>= fromPathPiece
  mjsontxt <- lookupPostParam "json"
  case (mpid,mjsontxt) of
    (Just pid,Just jsontxt) -> do
      runDB $ updateWhere [PaperId ==. pid, PaperUserEmail ==. Just email] [PaperMisc =. T.encodeUtf8 jsontxt]
      return $ toTypedContent $ object ["success" .= True, "message" .= ("Information changed." :: Text)]
    _ -> return $ failureJSON "Params are not valid."

-- Actions
-- These are called from post***R functions.
-- These should not be directly called from a client to avoid CSRF.

doReparse :: [PaperId] -> Handler Value
doReparse pids = do
  email <- requireAuthId'
  --FIXME: Support multi paper.
  ps <- getPapersByIds email pids
  if null ps then
    return $ object ["success" .= False
                     , "action" .= ("Reparse"::String)
                     , "message" .= ("Papers with these IDs were not found"::String)
                     , "id" .= map toPathPiece pids]
  else do
    json <- forM (zip pids ps) $ \(pid,p) -> do
      mrep <- liftIO $ parseHtml (paperUrl p) (paperOriginalHtml p)
      case mrep of
        Just rep -> do
          runDB $ replaceUser email pid (paperPToPaper rep)
          deleteAllRenderedCache pid
          return $ object ["success" .= True,
                       "action" .= ("Reparse"::String),
                       "ids" .= map toPathPiece pids,
                       "citation" .= (rep^.L.citation)
                       ]
        Nothing ->
          return $ object ["success" .= False, "message" .= ("Original HTML cache is missing (or you just added a citation, not full text.).":: String)]
    return $ Ae.toJSON json

doRemove :: [PaperId] -> Handler Value
doRemove pids = do
  email <- requireAuthId'
  runDB $ deleteWhereUser email [PaperId <-. pids]
  time <- liftIO $ getCurrentTime
  let obj = map f pids
  _ <- forM pids $ \pid -> do
    let history = History (Just pid) HARemove time (User email Nothing Nothing) Nothing
    runDB $ insertUserH email history
  return $ toJSON obj
  where
    f :: PaperId -> Value
    f pid = object ["success" .= True, "action" .= ("Remove"::String), "id" .= toPathPiece pid]

-- ToDo: Rewrite these with updateWhere. Current version is kind of verbose.
-- I tried that once by updateWhere [PaperTags +=. tags],
-- but it caused a runtime error somehow.

doAddTags :: [PaperId] -> [Text] -> Handler Value
doAddTags ids tags = do
  liftIO $ print (tags,ids)
  email <- requireAuthId'
  -- let tags = filter (not . T.null) atags
  updatedtags <- forM ids $ \pid -> do
    mpaper <- getPaperDB email pid
    case mpaper of
      Just paper -> do
        let newtags = L.union (paperTags paper) tags
        let newpaper = paper{paperTags=newtags}
        updatePaperDB email pid newpaper
        return newtags
      Nothing ->
        return []
  let html = case (headMay ids,headMay updatedtags) of
            (Just pid,Just tags) -> paperTagsHtml pid tags
            (Nothing,Nothing) -> ""
  return $ object ["success" .= True,"message" .= ("Tags were replaced." :: Text)]

doRemoveTags :: [PaperId] -> [Text] -> Handler Value
doRemoveTags ids tags = do
  email <- requireAuthId'
  liftIO $ print (tags,ids)
  updatedtags <- forM ids $ \pid -> do
    paper <- getPaperDB404 email pid
    let oldtags = paperTags paper
    let removed = filter (`elem` oldtags) tags
    let newtags = oldtags L.\\ removed
    let newpaper = paper{paperTags=newtags}
    updatePaperDB email pid newpaper
    return newtags
  let html = case (headMay ids,headMay updatedtags) of
            (Just pid,Just tags) -> paperTagsHtml pid tags
            (Nothing,Nothing) -> ""
  return $ object ["success" .= True]

doReplaceTags :: [PaperId] -> [Text] -> Handler Value
doReplaceTags ids tags = do
  email <- requireAuthId'
  runDB $ updateWhere [PaperId <-. ids, PaperUserEmail ==. Just email] [PaperTags =. tags]
  return $ object ["success" .= True, "ids" .= map toPathPiece ids]

postExportCitationR :: Handler RepPlain
postExportCitationR = do
  email <- requireAuthId'
  idtext <- lookupPostParam "id"
  let ids = splitIdText idtext
  ps <- getPapersByIds email ids
  liftIO $ print ids
  sendResponse $ RepPlain $ toContent $ T.intercalate "\n" (map PR.paperRIS ps)

postPaperRefsR = getPaperRefsR

getPaperRefsR :: PaperId -> Handler TypedContent
getPaperRefsR pid = do
  email <- requireAuthId'
  mp <- getPaperById email pid
  case mp of
    Just paper -> return $ toTypedContent $ Ae.object ["success" .= True, "refs" .= map toJSON (paperReferences paper)]
    Nothing -> return $ failureJSON "Paper ID not found."

getPaperInfoAjaxR :: PaperId -> Handler Html
getPaperInfoAjaxR pid = do
  email <- requireAuthId'
  paper <- getPaperDB404 email pid
  nowrapLayout (paperInfoAjax paper)

getPaperCitationR :: PaperId -> Handler RepPlain
getPaperCitationR pid = do
  email <- requireAuthId'
  paper <- getPaperDB404 email pid
  if paperUserEmail paper == Just email then do
    sendResponse $ RepPlain $ toContent $ PR.paperRIS paper
  else
    notFound

failureJSON :: Text -> TypedContent
failureJSON msg = toTypedContent $ object ["success" .= False, "message" .= msg]

redpajama_set_name: RedPajamaGithub


text:
Demonlover
Roger Ebert September 19, 2003
"Demonlover" begins in the cutthroat world of big business, and descends as quickly as it can to just plain cutting throats. It's a high-gloss corporate thriller that watches a group of vicious women executives as they battle for control of lucrative new 3-D Internet porn technology. One of the sites in question offers real-time torture and death, leading us to wonder: (1) Can such a dangerously illegal site actually generate the fortune that seems to be involved? and (2) Are any of these women queasy about selling human suffering at retail? The movie's answers are apparently yes and no.
My description makes the movie sound like a sleazy bottom-feeder, but this is an ambitious production by director Olivier Assayas, whose last film, "Les Destinees" (2000), was about a struggle for control of a family firm that manufactures Limoges china. Yes. Now we have another corporate struggle, but in a corporation with no values, no scruples, and apparently no employees, since all we see are executives.
The movie is set in the chilly world of high-gloss offices, international hotels and private jets. French, English and Japanese are spoken interchangeably. The story opens with Henri-Pierre Volf (Jean-Baptise Malartre), Internet millionaire, flying to Tokyo to close a deal with TokyoAnime to buy new 3-D imagining software. which will make online porn unbelievably profitable. Also on board is his ruthless assistant Diane (Connie Nielsen), who slips drugs into the Evian of her rival, Karen (Dominique Reymond). Karen passes out in the airport, her briefcase is stolen, and Diane is promoted to her job.
Until this point the movie has had the look and feel of your average corporate thriller; Michael Douglas could turn up at any moment. Then it takes a sudden drop into some really nasty business. We see demos of cutting-edge Internet porn (not graphic, but close), and we glimpse the first hints that beneath the surface an even more demented level lurks, at which users in real time are able to suggest tortures for the women they see on the screen.
Let's assume we all agree this is depraved and evil. Let's move on to the logic of the story. Would it be cost-effective to torture people online? How would you advertise this site, and bill for it? How much would it cost? Who would be reckless enough to pay? An international corporation like Henri-Pierre's would obviously be wiser to sell soft porn instead of this illegal material with a tiny audience.
But never mind. The movie is confused about this and many other things, in a scenario that grows steadily murkier. Back home in Paris, Diane's scheme has paid off in the big job with the big salary, but Elise (Chloe Sevigny), who is loyal to Karen, suspects what she did to get the job, and Elise is a dangerous customer. So is Elaine (Gina Gershon), who works for the American firm Demonlover and is bidding against Magnatronics for the rights owned by Henri-Pierre. Their rivalry is further complicated (or is it made unnecessary?) by the fact that Diane is actually a corporate spy.
If that seems like a secret I should not have revealed, be assured that it is irrelevant to the progress of the movie, which exists largely in content-free visuals of beautiful women, ripped lingerie, luscious suites, sexual jousting and lots and lots of people coming down all manner of corridors and going into one door after another in order to capture, threaten, ravish, seduce, blackmail or murder one another.
By the end of the movie, I frankly didn't give a damn. There's an ironic twist, but the movie hadn't paid for it and didn't deserve it. And I was struck by the complete lack of morality in "Demonlover." No one seems to question the fact that they all play to make money by torturing people. It's all just business. As a metaphor for certain tendencies in modern commerce, this may be intended, but somehow I don't think so. I think "Demonlover" is so in love with its visuals and cockeyed plot that it forgets to think about the implications.
Wander Darkly
Sheila O'Malley
Pretend It's a City
The Stand In
Sylvie's Love
Demonlover (2003)
Rated NR For Mature Audiences
Charles Berling as Herve Le Millinec
Jean-Baptiste Malartre as Henri-Pierre Volf
Gina Gershon as Elaine Si Gibril
Dominique Reymond as Karen
Connie Nielsen as Diane De Monx
Chloe Sevigny as Elise Lipsky
Directed and Written by

redpajama_set_name: RedPajamaCommonCrawl


text:
ESPN's Joe Lunardi: 'The Bubble Is Bad'
Published October 20, 2008 • Updated on October 22, 2008 at 3:44 pm
It's early march, which means it's time for us to hang on every word spoken by Joe Lunardi, the ESPN bracketologist who has carved out his own niche as the world's foremost authority on which teams are getting into the NCAA Tournament and which teams will be left out.
Lunardi is the guru of the Bubble, so what Lunardi said on ESPN Radio today was particularly interesting. Explaining why he wouldn't want to expand the Tournament field beyond 65 teams, Lunardi said, "The bubble is pretty bad."
Lunardi hasn't updated his bracket with the weekend's action, but going into the weekend he listed Arkansas, Arizona State, Virginia Tech and Maryland as the last four teams in, with Florida, Syracuse, Saint Joseph's and Western Kentucky as the last four out.
Fans of those eight teams won't want to hear that the bubble is bad, but Lunardi is basically right: The bubble teams aren't particularly good basketball teams, certainly not good enough that it's realistic to think they could win six straight games to win the title. So while the bubble teams are the ones that garner the most attention at this time of year, the bubble really isn't very good. And expanding the field would just make the bubble worse.
Permalink | Email this | Linking Blogs | Comments
Copyright FANHO - FanHouse
A 4-Day Workweek in Maryland? Bill Would Push Employers to Try


On Saturday afternoon I acted as Celebrant at the marriage of a local couple with their 30 family and friends. Their ceremony was held on the balcony of Paradise Palms and their four year old son acted as ring bearer and their 5 week old daughter slept through the whole proceedings.
Yesterday afternoon I married a local couple from Yorkeys Knob at the Kuranda Rainforest Resort. They had around 70 family and friends present and the bride was given away by her son. It was a lovely cool afternoon and a pleasant change from the heat of Cairns.


text:
The Co-op Food
Opening times for The Co-op Food in Worthing
The Co-operative Food - Petrol Durrington - Nelson Road is placed at The Boulevard, Nelson Road, Durrington, in Worthing. The post code of this place is BN13 1JY. It is a branch of The Co-op Food chain, serving people from West Sussex county. To connect with the agency please dial the number 01903 500100. This point is open on: Monday 07:00 - 23:00, Tuesday 07:00 - 23:00, Wednesday 07:00 - 23:00, Thursday 07:00 - 23:00, Friday 07:00 - 23:00. On Saturday: 07:00 - 23:00 and on Sunday: 07:00 - 23:00. It is located nearby Clapham, Durrington, High Salvington, Patching, Tarring, so it also delivers its services there.
The Co-op Food Opening Times
The Boulevard, Nelson Road
Durrington
BN13 1JY
The Co-op Food near me
The Co Op Food in Worthing, The Boulevard, Nelson Road (0.00 mile)
The Co Op Food in Worthing, 13-15 Goring Road (0.42 mile)
The Co Op Food in Worthing, 23 South Street (0.61 mile)
The Co Op Food in Worthing, 13 Manor Parade (0.62 mile)
The Co Op Food in Worthing, 49-56 New Broadway (0.75 mile)
Boots in Worthing, 21 Goring Road (0.42 mile)
Card Factory in Worthing, 2 Brooklyn Chambers (0.42 mile)
Costa Coffee in Goring by Sea (0.41 mile)
Costa Express in Worthing, Tesco Express Durrington (0.43 mile)
Iceland in Worthing, 12 Wallace Parade (0.43 mile)
KFC in Goring (0.51 mile)
Post Office in Worthing, 112 George V Avenue (0.37 mile)
Tesco in Worthing, 24a Goring Road. (0.42 mile)
WH Smith in West Worthing (0.37 mile)


The transparency in our commodity pricing and the state-of-the-art technology we offer ensures that trading commodities with EGM is efficient and effective. Scroll down the page to access our pricing. To learn more about trading commodities, click below.
A. The above contract specifications can also be found under the 'Specification' in the MarketWatch on the MT5 platform.
B. Spreads can widen during overnight hours.
*Margins are specified by Dubai Gold & Commodities Exchange and are subject to change.


Our first edition e-magazine is now available!
Be inspired by Will Allen as he celebrates their 20th year urban farming for Growing Power in the heart of Milwaukee, Wisconsin. See videos for light quality and green power LEDs. You'll also find tips for planning a successful greenhouse operation along with the best substrate for the tastiest lettuce.


Have you been passed over for a job opportunity because you were pregnant? Were you fired or turned down for a promotion after disclosing your pregnancy to your employer? These examples of pregnancy discrimination are situations many women face. Fortunately, the law prohibits employers from considering pregnancy as a factor in the hiring process, accrual and crediting of seniority, vacation calculation, pay increases, and temporary disability benefits. If an employee is temporarily unable to perform her job due to pregnancy, she must be treated the same as any other temporarily disabled employee. In addition, it is illegal to limit pregnancy-related benefits to married employees. Pregnancy is stressful without unfair and discriminatory treatment at work. Contact the law offices of Carlin & Buchsbaum to recover the back pay, benefits or damages you deserve.
With Carlin & Buchsbaum, you can take action against unlawful pregnancy discrimination.


Needless to say, diet plays a major part in skin health and can either make or break your path to great skin. This is why we should incorporate as many nutrient-dense 'foods for the skin' into our diet as we can.
In the video below, Andy Hnilo cooks up his go-to 'skin food' meal. Made up sweet potatoes and beets, pastured eggs, and a nutrient-packed avocado mash, it is full of great foods for the skin!
1. Slice the beets and sweet potatoes into fine slices. This helps them cook up quick.
2. Steam sear them in grass-fed butter, ideally using a seasoned cast iron pan.
3. Add a pinch of cayenne and Himalayan salt.
4. Cover the pan and keep on medium heat until cooked.
Nutrition tip: With a high nitric oxide content, beets are great for circulation.
Cooking Tip: It is highly recommended that you get a cast iron pan and properly season it. There is a lot of bad cooking ware out there, which actually introduce chemicals and toxins to the food you are cooking. Be very aware of the non-stick pans that release toxins!
1. Cook the eggs and spice with Himalayan salt, hot sauce (O' Brothers Organic Habanero is a go-to!), and Ethiopian Berbere spice.
Nutrition Tip: For the daring, separate the yokes to consume raw. They are full of good omega fats, choline, and good saturated fats to help with testosterone production. Cholesterol is actually a building block in testosterone production, which both men and women need to balance hormones.
What you'll need: broccoli sprouts, avocado for vitamin B and good fats, spirulina, olive oil, avocado, beet kraut, and hot sauce.
Instructions: Add all of the ingredients into a bowl and mash together.
Nutrition tip: Broccoli sprouts arguably have the most nutrient content of all plant sprouts. Check out Dr. Rhonda Patrick's explanation of the benefits of sulforaphane in broccoli sprouts, which is a very potent nutrient for the body and loaded with good benefits. Between broccoli, alfalfa, and daikon radish sprouts, you should use as many sprouts as you can.
Bonus nutrition tip: It's really underrated, but spirulina adds a cool flavor to dishes and has unbelievable benefits. Spirulina contains a ton of good micronutrients, Vitamins A, C, K, B12, glutamine, sodium alginate, and stimulates the production of various stem cells.
There you have it! A meal full of nutrient-dense foods for the skin, complete with fermented foods, good fats, and nutritious vegetables.
Do you have a favorite 'skin food meal' or ingredient? We would love to hear some of your go-to foods for glowing skin in the comments below!
Thanks for sharing these wonderful information. These are very useful for maintaining healthy and glowing skin.


For Sale – Beautifull 1980 Rolls Royce Silver Shadow II | Classic Cars HQ.
54000 miles RHD in rare colour gold/brown, in very good condition and very well maintained. upholstery(replaced in 2002) of finest leather in almost new condition and wood on dash reconditioned is as new. Total over Eur 50,000.-- spent over the years on this car which originally delivered by Jack Barclay of London Mayfair. All maintenance history and invoices available.


text:
Q: When someone says "that explanation was a lot of hand-waving" what does this mean? I've been hearing term "hand-waving" thrown around a lot, especially when my peers describe their CS(computer science) classes. Does anyone know what that term means in this context?
(also a little background on where the term came from would help too!)

A: Wiktionary says it better than I can, describing "hand waving" in this context as:

Discussion or argumentation involving approximation, vagueness,
  educated guessing, or the attempt to explain or excuse vagaries.

The phrase is purely idiomatic. Picture the hand gestures of someone speaking on a topic that perhaps is vague or confusing, or of which the speaker is unfamiliar or poorly prepared. Certainly brings back memories of my computer science classes!

A: The Jargon File has a good definition of 'handwave':

handwave: /hand wayv/
[poss. from gestures characteristic of stage magicians]

*

*v. To gloss over a complex point; to distract a listener; to support a (possibly actually valid) point with blatantly faulty logic.

*n. The act of handwaving. "Boy, what a handwave!"
If someone starts a sentence with "Clearly..." or "Obviously..." or "It is self-evident that...", it is a good bet he is about to handwave (alternatively, use of these constructions in a sarcastic tone before a paraphrase of someone else's argument suggests that it is a handwave). The theory behind this term is that if you wave your hands at the right moment, the listener may be sufficiently distracted to not notice that what you have said is bogus. Failing that, if a listener does object, you might try to dismiss the objection with a wave of your hand.
The use of this word is often accompanied by gestures: both hands up, palms forward, swinging the hands in a vertical plane pivoting at the elbows and/or shoulders (depending on the magnitude of the handwave); alternatively, holding the forearms in one position while rotating the hands at the wrist to make them flutter. In context, the gestures alone can suffice as a remark; if a speaker makes an outrageously unsupported assumption, you might simply wave your hands in this way, as an accusation, far more eloquent than words could express, that his logic is faulty.

Jargon File: Handwave
Not to be confused with 'waving a dead chicken'.

redpajama_set_name: RedPajamaStackExchange


We, as consumers, like to know what we're eating. We want the calories, sodium, fibre, fat, and everything else that's in our food. What we have this week is a couple machines which helped Herring Reduction workers determine the fat and protein content of Vitamin oil and fish meal.
The Goldfisch Fat Extractor (the one with our model, below) extracts fat and oil from samples for testing. The procedure involves placing samples between a boiling solvent and a cold surface. As boiling continues, the solvent vaporizes, condenses on the cold surface, and washes down through the samples into the boiling solvent below. The protein tester is a Kjeldal Distillation Apparatus, actually determines nitrogen content, which gives a solid indication of protein levels. Unfortunately protein levels can be faked by adding nitrogen-rich chemicals such as melamine.
These machines are still in use today, and while you may have thought burning fat was expensive, extracting it will set you back about $15,000.


Learning how to write a novel outline is very important as you're creating the backbone of your book. If you don't plan it and rather be a pantser all your life, then you'd mess up the potential if your work.
You're here to learn how to write a novel outline. I assume you're having a hard time crafting your story because you're lost, apparently. You have this grand idea of a book concept, however, you aren't sure what to do with it. You don't know where to start and how to begin your first chapter.
I understand how it feels when you're so disorganized and you don't know where your book idea heads to. Normally, for a beginner novelist like you, writing a 60,000-word novel sounds overwhelming.
You have no idea where to start or how to start. Perhaps, you don't know what chapter you'll include you think is apt for the rising development in your story.
Why I Encourage You To Craft Your Novel Outline Before Writing Your Story?
This is how important to learn how to write a novel outline and I'll teach you the process step-by-step in this post. Through learning each process, writing a novel won't be as hard as you think it'd be. However, it won't be as easy as you think.
Writing a novel requires a lot from you.
I wrote 3 novels in one year in different genres I love. Historical Fiction. Mystery-Romance-Action. Gay Romance.
How did I manage to write them in 2018 alone?
How did I make the whole tedious work bearable amidst the stressful day as a freelancer and a housewife?
Incredibly, I endure the hurdles of writing my books and achieve my yearly goals. To write more novels within 365 1/4 days.
This is what I'm going to teach you in this post. A step-by-step process of how to write a novel outline as easy as I can and as clear as I can to guide you all the way down to the construction of your own novel outline for your own books. Are you ready?
Before we dig into the process, I'd like you to grab your FREE copy of my ebook "Save 1,000 Hours & Finish Your Novel" to give you an idea of what this post is about.
In this free PDF file, you'll learn exactly how I write my novels fast as organized as possible. Click the button below to officially subscribe to my list and start crafting your novel plan.
What is a novel outline?
A novel outline is basically the skeleton of your novel itself. It's the very foundation of your book wherein you dig into your book concept, premise, characters, settings, plot, and even the necessary sketch scene ideas. You're going to make that plan as concrete as you can, along with the interviews and research to make sure your facts are 100% real.
Though you are creating fiction, it doesn't mean you don't consult the experts on a certain field to make sure your plot twists make sense or not. If your plot involves chemicals, consult a chemist or an expert from a related field.
Make as many interviews as you can, backed by your own research from different sources. That's exactly what I did for my books.
How to write a novel outline?
It's necessary to craft your novel outline so you'd save time whenever you start writing your book. You don't want to keep pausing and think what's next only to find you haven't accomplished a chapter on that day.
If you have the outline with you, skimming makes the job easier. Thus, you save more time and finish faster than you think.
How Important Is A Novel Outline?
Let me tell you how devastated I was prior to my discovery to the priceless gem. You need to speed up your protagonist's big, big trouble and challenge him sooner than your readers expect. But to do this properly, you need to have a thorough plan or else you'll end up dragging the chapters all over again.
I was a pantser back then. For a pantser, this won't be noticeable. However, if you have the plan, you can see in advance which of which drags your chapter and be eliminated or replaced by another devastating conflict.
When I wrote my Historical Fiction, 30 Days With Mr. Weirdo, in the middle of 2017, I had no novel outline back then. I sat on my laptop and started writing without any plans only to end up finishing it around 6 months or so, which is frustrating because I killed my characters to end the book, too tired to finish it the way I wanted to.
Result? My readers hated me.
Many of them cried and pleaded my response why I chose to end such a beautiful story that way. Until now, I'm in a deep thought whether I should rewrite the whole book and revise as much as I could to revive the plot at its best. Not to please my readers, but to return to my original plan. To how I want my characters' story to end.
I learned my lesson the hard way. So, I started to learn how to write a novel outline when I thought of finishing my draft Belladonna, which became Accidental Quest months after.
When I crafted it prior to the writing schedule (two weeks earlier), it was a surprise. I finished the novel within 30 days without detour from my original plan. Of course, there are minor changes in between, but it doesn't affect the climax and the outcome of the story at the end.
I tried the same technique with my gay romance The Rival, my unfinished book in 2017. I wasn't sure why I couldn't finish it soon and my readers begged to finish it for their sake. Sadly, I couldn't until I followed my novel outline.
As a result, I finished the whole story within the month of October. Like my previous novel, I had minor changes but it doesn't really change the whole story. Just added details to improve the flow as well as increasing the characters' exposure within the chapters.
The beauty of crafting your novel outline is incomparable. It shed a light on your story from the beginning up until the conclusion with ease. I experience that myself in my novels. It doesn't matter if I use Dabble Writer, my favorite novel writing app, or the traditional methods such as using the index cards or a piece of paper to write on.
In this section, I'll share with you how I make my novel outline to give clarity on your story flow and see where to improve and to eliminate with regards to your scenes you have in mind. So, let's begin.
1. Come up with the perfect title of your novel.
I opt to use Reedsy's title generator for this one. This will make your life easier. There are many tools you can use out there to give you ideas of what title could you give to your novel.
Don't just take one title because it sounds nice. It should coincide with your plot!
I have here the title generators I've personally used in my books. But my top choice is Reedsy.
2. Choose the best idea for your novel.
This part is easy, however, with your self-disbelief this would be hard. You already have the book in mind. It's just a matter of writing it and be committed to write and finish it with confidence.
Ask yourself what kind of books, movies, or literature you're fond of. You might like Nancy Drew series or Hardy Boys. If not, Fifty Shades of Grey Trilogy is your thing.
Listen to your heart what story you want to tell your readers. Don't look at the trends or what kinds of books are there in the bookstores. Step back and listen to what your heart tells you.
Is it about the dream you had last night? Or you might want to write your grandmother's story you find fascinating like Ransom Riggs's Miss Peregrine's Peculiar Children. Check what kinds of movies have you watched or you're interested in. From there, you'll know what story you want to write today.
I've been reading a lot of Nancy Drew series and Hardy Boys when I was a kid. During those times, watching Detective Conan, a famous Japanese anime series, has been my all-time favorite.
While I find these stories entertaining, I love history so much to the point I study it deeper than my teachers. And like any other girl out there, I love romance and action series. Especially with an independent and skillful female antagonist when it comes to fights.
I don't like females presented as the damsel in distress. Rather, I want them to face the trouble by themselves. Of course, they have limitations and perhaps, their arrogance oozes. This is where the love interest comes in to tone it down or challenge her beliefs.
Because of that, I tend to write my novels with these genres. As a result, I wrote Accidental Quest.
3. Structure a premise for stronger stories.
A premise, like your novel outline, is the foundation of your book. But, it comprises 1 to 2 sentences giving you, as an author, a sense of clarity to how your overall story looks like.
You need a premise to see your characters' struggles, his end goals, the situation, the resistance, the conflict, and if possible, the ending.
Step #1: Know your "when" clause to give a clear representation of who your main character is.
Does the clause above give you a clear picture of who the main character is? If yes, great. You need to do the same for your own book as well. At least, when someone asks you who's your protagonist, you can answer them even when your eyes closed.
Step #2: Add supporting character, which highlights your protagonist's character with purposeful intention.
If you observe closely, there is no fiction showing the protagonist is all alone in their adventure. There is always the aid of a supporting character either helping them achieve their goal or existing to give them problems. In that way, it will give you more opportunity to introduce your protagonist's personality to your readers.
Thus, in your premise, this sidekick should be present. Always.
Step #3: Use "until" to introduce the conflict of the story affecting your protagonist's decisions.
Do you see the conflict now? In our first step, you create a vivid description of your main character; the second step gives you the opportunity to add supporting characters that affect your protagonist's daily decision and, at the same time, highlights their personality more; now, you give a clear picture of the chaos your protagonist will undergo throughout the book you're writing.
Step #4: Use "leading to" to give a sense of clarity to the end goal your main character wants to achieve from the beginning.
Leading to the discovery of how his family has been involved with drugs and a series of murders of innocent people to protect their drug business, affecting his judgment on the present investigation he's handling.
Now, we're having a picture what his struggle is. The ambitious and witty rookie detective, which is pretty obvious, wants to leave a big impression in the police department.
That arrogance leads him to accept an unsolvable murder to test his wits. However, he doesn't expect he travels back in time – back to the 1960s – where he lives the daily life under his grandfather's identity.
When he did, he discovers his grandfather wasn't just a powerful man in the military, but he's also involved in the drug syndicate and a series of murders in the town.
For the rookie detective, of course, this information shocks him, leading to suspicion whether any of his family is the real culprit of the crime or not. That alone tests his judgment, if he chooses to uphold his oath as an honest policeman or act the same as his grandfather did 60 years ago.
Step #5: Combine all the elements to craft your book premise.
Let's combine what we've got here.
When an ambitious and witty rookie detective teams up with his close police officer and best friend to investigate an unsolvable murder. Until he finds out he travels back to 1968 under the identity of his grandfather, who faces a crisis involving similar murder he's investigating due to drug-related threats, leading to the discovery of how his family has been involved with drugs and a series of murders of innocent people to protect their drug business, affecting his judgment on the present investigation he's handling.
Now, that's a book premise. What have you got? Share them in the comment section below. It'd be fun reading them.
3. Learn how to write great characters of your story.
Great characters can be phenomenal, unforgettable. So, think of the distinct features that will register in your readers' minds as soon as they read your book. Try to recall Elizabeth Bennet or Mr. Fitzwilliam Darcy we all love in Pride and Prejudice.
If you're into Korean dramas like me, can you forget 4th Prince Wang So and Hae Soo in Moon Lovers: Scarlet Heart Ryeo? How about Wang Yeo/Grim Reaper and General Kim Shin/Goblin in Guardian: The Lonely And Great God?
What makes them unforgettable? What's with these characters that keep us hooked in the story? Why drives us crazy when we read them in one chapter to the other?
Great characters can be phenomenal, unforgettable. So, think of the distinct features that will register in your readers' minds as soon as they read your book.
These are frequent reader's questions that only an author can answer. If there's an effective character planning in a novel prior to the writing phase. Otherwise, the characters will appear the same. The same language tone, same behavior, boring. To make sure there's a definite distinction between the characters, you have to make a character profile. A separate page that goes along with the novel outline.
Literally, their physical traits. From hair color, eye color, skin color to their height, stance, and build.
Are they lean, fat, or wimpy? Do they have prominent features like an X scar on the face like Kenshin Himura of Rurouni or a tattoo like those of Lisbeth Salander of The Girl With The Dragon Tattoo?
Watch their language. What words does he use frequently whenever he cusses?
Their mannerisms, too. What do they do or how do they react when he's anxious? Does he shake his leg or looks away and muzzles whenever he's confronted? Differentiate them.
What their dislikes, likes, strengths, or weaknesses?
Find their interests or talents, if necessary.
Did the character/s experience childhood trauma? What events made him change from a cheerful kid to an aloof and distant man today?
What objects remind him of his loved ones? Maybe he received a hairpin his mom likes to wear every day. Now, she's deceased and he's been holding it for 10 years in great misery.
Are there any circumstance or certain behavior the supporting character does that makes him violent or emotionally provoked? Highlight them in their profile.
Both the protagonist and the antagonist's profile should have their profiles ready with photos as references, if possible.
For most writers on Wattpad, authors use celebrities' photos as references to how their characters look like as a real person. In that way, readers can imagine it visually other than how they appear in the book.
4. Write the plot outline for your novel. Your sketch scene ideas.
This is another tedious work in writing a novel, but the lean meat and the foundation of your book. Without this, your premise, idea, characters – no matter how careful you plan them – will go to waste. That is if you have a disorganized plot.
I found Derek Murphy's comprehensive discussion about writing a plot outline, which comes along with a 1-hour video. In this regard, he discusses how to create a chapter-per-chapter outline you can apply in your own stories. That way, it will make your novel writing journey easier.
5. Build your story's setting in your novel.
When it comes to the setting, you have to define the time and place the plot occurs. Is it during the Victorian or the Spanish era (for Philippines' historical fiction)? Perhaps, you set the story in the Golden Age like in the 1950s. You decide, but it should be apt to your plot.
I don't think you need to use the town's old cemetery as an overall location for your book if you intend to write a romance set in 2018, right? Unless if you intend your character to time travel. There should be a sense of place for your characters.
Your readers should know where a particular scene takes place with a clear description, including the reason implied behind your characters heading to the town's old cemetery. There should be a reason.
That said, you need to be familiar with your surroundings. How can you write a location if you simply imagine it?
I tried it with my first historical fiction, wherein the story takes place in Bulacan. However, I am not familiar with the place since I had never been there. Consequently, I watched as many videos as I can to have a picture of how the location looks like.
Another way to build your story's setting is writing the specific location where your characters are as clear as possible. If it's a kitchen, flesh the description to the extent your readers can picture out how the kitchen looks like. Same goes with the other locations in your story.
Though your story might have several locations, there is the main setting in your novel. To me, it's a country, a state, or a particular island. It can be a 100-acre farmland, a spaceship, a ship (like in Titanic), or a deserted land. It's up to you where you want your story will take place.
Learning how to write a novel outline requires a lot of practice, along with patience, determination, focus, and research. Patience level is high to keep you going even with little steps you do every single day.
Determination, too, must be upheld otherwise you end up losing your sanity in the middle. Especially when you're writing the midpoint of the book. It's the usual place where most writers get stuck. You'll understand this when you get there.
I don't have to explain why you need focus because this is self-explanatory. You can't write if you're too distracted by so many things. You can't have your social media running when you write.
Lastly, you need to research. Even writing this post requires a lot of research in my part. My books have undergone in-depth research to make sure my plot twists are logical and realistic. In fact, I interviewed different experts in the field, which I used for my plot outline.
Overall, finishing a story, a lengthy one, can give you a sense of pleasure you can't explain in words. That happens when you type in the last word of that book. I experienced that myself when I finished my manuscript Accidental Quest. It's my a-ha moment.


text:
Two bank robberies in one day
Susan Morse and Kelly Morgan
YORK, Maine — A woman disappeared with an undisclosed amount of cash Tuesday afternoon after quietly handing a note to a teller at Kennebunk Savings Bank, 2 Hannaford Drive, then walking out with the money, according to police.
York Police Chief Doug Bracy said about a dozen people were in the bank when the woman walked in and stood in line at about 2:19 p.m.
"She waited to walk up to the counter," Bracy said.
Police did not immediately release the content of the note and would not comment Tuesday on whether the robber was armed, but detective Sgt. Thomas Cryan said there was no threat of violence.
He described the woman as in her mid-20s, about 5 feet 4 inches to 5 feet 6 inches tall, and 180 to 200 pounds. She was wearing eyeglasses and a tan baseball cap with an unidentified insignia, along with a blue long-sleeved top over a white T-shirt and matching dark blue pants. Police said she had long brown hair.
Police would not comment on how she carried the cash. After getting the money, "she walked out the door," Bracy said.
Police on Tuesday afternoon said they were uncertain whether the woman left by vehicle or other means.
Linda Voss of Kittery Point was in line at the bank when the robbery occurred. She said she had no idea what had happened until a "bank manager asked us to go to another area and sit down. We knew it was serious."
Police interviewed witnesses shortly after the robbery. They were released from the bank at 3:10 p.m.
Cryan said the bank would remain closed for the rest of the day.
Bracy said surveillance tapes are being reviewed by officers.
The FBI has been contacted, he said, as well as authorities who handled an armed robbery in Arundel on Tuesday morning.
It is not known whether the two robberies were related, Cryan said.
The FBI and York County Sheriff's Office are investigating the armed robbery of the Infinity Credit Union, according to Arundel authorities.
Deputies said a man displayed a handgun and demanded money when he entered the credit union, located at 1298 Alfred Road in Arundel, at approximately 9:30 a.m.
The gunman fled with an undetermined amount of money and the credit union is currently conducting an audit. It is not known if the suspect had an accomplice.
No employees were injured during the robbery.
According to police radio communications, the suspect is described as a white male, approximately 6 feet tall, weighing 150 to 160 pounds, with light-colored eyes. He was described as wearing a full yellow fisherman-type suit with an orange face mask.
In York, Maine State Police and the Kittery and South Berwick police departments were on scene, along with several York officers.
Kennebunk Savings spokeswoman Heather Harris said that bank will be open for regular business hours today, May 30.
President and Chief Executive Officer Bradford C. Paige said in a prepared release, "Our first and foremost concern is keeping our employees and customers safe, and we're glad to say that everyone is OK. However, in order to cooperate fully with the police, we will not be disclosing any additional information about the incident."
Paige referred additional questions to the York Police Department.
Reporter Jennifer Feals contributed to this article.


text:
This article was published in issue 252
Catherine de' Medici: hostess with the mostest
The high priestess of hospitality, 500 years later
Mary Gray
January 9, 2019 - 2:45
2019 has been hyped as the year of Leonardo, with initiatives planned to mark the 500th anniversary of his death. But the Renaissance man has some competition in Catherine de' Medici, high priestess of hospitality for Florence—or France, depending on how you slice it.
Catherine came into the world 500 years ago this April, as Leonardo was entering his final days. Her legacy is a complicated one. She is frequently (if not always accurately) credited with introducing myriad dining innovations to France, via the Italian cooks who trailed her there after her marriage to Henry II. Many myths about the extent of her contributions continue to circulate; Dr. Martina Becattini, co-curator of the recent Stibbert Museum exhibition Conviti e banchetti. L'arte di imbandire le mense, and a professor at Florence's Istituto Lorenzo de' Medici, nonetheless says the French court still "owes much to this explosive Florentine female figure."
Caterina de' Medici, Florence's Queen of France
Catherine's "explosive" influence didn't end in 16th-century France: for current-day creative types, she's a cross-disciplinary icon, a muddied memory on whom you can project what you like (fine taste in perfumery? Culinary prowess?) and draw inspiration as needed. The versatile Florentine artist-designer Marina Calamai fondly recalls thinking of Catherine and her achievements while completing a gelato-themed painting—"Sweets," says Calamai, "are my first love in art"—and building an exhibition that placed desserts in dialogue with Renaissance splendor. Calamai says she sees "a strong correspondence between the multidimensionality of the Renaissance era and the multidimensionality of Catherine de' Medici, and in this sense feel{s} connected to her."
"Multidimensionality" might be the most succinct way of framing Catherine, and the most fruitful light in which to consider her legacy. Particularly as the force behind elaborate, often politically driven court festivals she fashioned—"joyeuse magnificences" that blended food, music, theatre, dance and more into extended entertainment buffets. (Here again, Calamai has a kinship with Catherine, having recently produced Apologia della creatività, a multisensory show set to be restaged in Florence later this anniversary year.)
Catherine as creative hostess and related themes will be explored at a forthcoming conference, "Catherine de' Medici: 500 Years of Italian Hospitality," hosted by Apicius International School of Hospitality at Florence University of the Arts (a call for papers is open until January 31.) Coordinator of the March 16 conference Marco Di Manno, who teaches a FUA course in food and culture, said he is intrigued by Catherine as an example of feminine creativity and talent. Her multifaceted fêtes, Di Manno told TF, reflected an enthusiasm for hospitality that he finds to be in line with the "playground" role today's Florence frequently assumes: "{For better or worse}, Florence has become a center for grand parties, weddings, often organized by foreigners, in venues like Palazzo Pitti"—backdrops suited to sumptuous banquets not too far off from those she dreamed up.
Catherine thriving as courtly hostess could speak to something deeper-seated than lavish tastes and political motives: an ethos of reconciliation and finding common ground. Daniela Cavini, author of Behind the Medici Men: the Ladies, suggested to TF that what some historians see as Catherine's major flaw—her inability to effectively take sides—was a product of her childhood experience of the Siege of Florence, during which she was taken hostage. "She experienced firsthand {the effects} of warring parties," Cavini said, "and I think this made a deep impression on her whole life—through trying to stay in the middle, trying not to take sides, to please everyone … like Florence itself today. And hospitality is part of this."
Submissions for the Apicius conference may be sent to [email protected].
Cavini will discuss the legacy of varied Medici women in a presentation of her book at the British Institute (6pm, January 30.)
Mary is Events & Associate Editor at The Florentine. She co-authored the 2017 edition of guidebook Time Out Florence and was recently named a Premio Famiglia Fiducia Fellow at Middlebury College's School in Italy, where she is a 2019 M.A. candidate in Italian Studies. Follow her (and her more photogenic Maltese-terrier mix Miro) on Instagram @VeryMaryGray.
How to survive the summer with kids
B9 at Manifattura Tabacchi
Artists' residencies, coworking spaces and makers' ateliers
Marco Badiani
Summer events extravaganza at Belmond Villa San Michele
Pool parties and panoramic picnics
LGBT+ hangouts in Florence and Tuscany
Dance, drink and drag
Vincenzo D'Angelo


Lawrence Lessig is a Professor of Law at Stanford Law School and founder of the school's Center for Internet and Society. Prior to joining the Stanford faculty, he was the Berkman Professor of Law at Harvard Law School. Lessig was also a fellow at the Wissenschaftskolleg zu Berlin, and a Professor at the University of Chicago Law School. He clerked for Judge Richard Posner on the 7th Circuit Court of Appeals and Justice Antonin Scalia on the United States Supreme Court.
He is the author of "Free Culture", "The Future of Ideas" and "Code and Other Laws of Cyberspace". He also chairs the Creative Commons project. Professor Lessig is a boardmember of the Electronic Frontier Foundation, a Board Member of the Center for the Public Domain, and a Commission Member of the Penn National Commission on Society, Culture and Community at the University of Pennsylvania.
Professor Lessig teaches and writes in the areas of constitutional law, contracts, comparative constitutional law, and the law of cyberspace.
For more information, please see Steven Levy's profile of Professor Lessig in the October 2002 issue of Wired: Lawrence Lessig's Supreme Showdown or see his curriculum vitae.


text:
Get Ready For Longer Lines: All Baseball Fans At AT&T Park Must Be Scanned With Metal Detectors
AT&T Park Metal Detectors MLB SF Giants by Bay City News | February 14, 2014 5:39 pm	| in News | 1
Baseball fans arriving at AT&T Park this season will have to go through stricter security screenings than they have in years past, the Giants announced today.
With the beginning of the 2014 season on April 8, all fans entering AT&T Park will be screened by metal detectors.
Major League Baseball has mandated that all teams must use metal detectors by the start of the 2015 season, according to the Giants.
The Giants' cross-Bay rivals, the Oakland A's, started using metal detectors at the gates late last season.
"We believe that the addition of metal detectors will further ensure a safe atmosphere for all our fans who attend a Giants game," said Jorge Costa, Giants senior vice president of ballpark operations.
Fans entering AT&T Park will have to remove all metal objects including keys, coins and cellphones from their pockets while going through the metal detectors, while their tickets are being scanned.
Bags no larger than 16 inches by 16 inches by 8 inches are allowed in the park and will be screened separately as fans are entering.
Anyone who does not want to walk through the metal detectors will have the option of being checked by a handheld wand, Giants officials said.


What happens when a progressive architecture firm has space and asks, "What's possible with this space?" That's exactly what Olson Kundig did with their "Storefront" space in Pioneer Square. The Reel Grrls accepted this challenge and created a giant snow globe, filmed some work, and culminated their time there with a karaoke party. Here are some of my favorite pictures from that event. The Reel Grrls is an organization that teaches young people (primarily young women) how to be well-rounded media professionals, training them in various aspects of professionalism, technical skills, creativity, and fun. I definitely encourage you to check out their program as well as consider them if you have any video needs. They do good work!


text:
Houghtaling and Downey Introduce Resolution to Honor Jewish Holidays Statewide
Following the beginning of Rosh Hashana this week, Monmouth County Assembly Members Eric Houghtaling and Joann Downey have introduced a Joint Resolution that would honor the Jewish holidays of Rosh Hashana, Yom Kippur, and Passover in the State of New Jersey.
The Resolution (AJR-123) designates the two days following the first sunset of Rosh Hashana, the day following the first sunset of Yom Kippur, and the two days following the first sunset of Passover as special days of recognition in New Jersey, and honors the particular significance of these holidays to the Jewish people.
"We have more than half a million Jewish people in New Jersey, the fourth-largest Jewish population in the country," said Houghtaling (D-Monmouth), "That is why we want to ensure their holidays and traditions are given their due respect."
"Our state is blessed with a very diverse unique population, which is something we should celebrate," said Downey (D-Monmouth), "This Resolution helps do just that, and ensures that these holidays are recognized for their importance to the Jewish people."


text:
Edinburgh Impact
Edinburgh Impact home
Beyond football's elite, survival can seem like success
As Europe's top clubs take time out for the World Cup, most of Scotland's professional teams – financially, on a different planet – will keep playing regardless.
Home supporters celebrating as Arbroath play Queen of the South at Gayfield Park in November 2021. Both teams will continue playing while the 2022 World Cup is happening.
By Martin Gannon, Lecturer in Entrepreneurship at the University of Edinburgh Business School
Finlay Maclean & Renzo Cordina, Senior Lecturers in Accounting & Finance, at the University of Dundee
Football has grown into a global multi-billion dollar business – and nowhere more so than in Europe, where leading clubs can boast turnovers in excess of £500million.
This economic expansion has not been universally welcomed, however, with some critics contending that this perceived over-commercialisation is at odds with the game's sporting roots. Yet, despite claims of the prioritisation of commercial gain, most European football clubs continue to pursue sporting success, incurring significant debt in the process.
To counteract this, and with one eye on promoting financial sustainability, the governing body of football in Europe (UEFA) introduced Financial Fair Play (FFP) regulations in 2010, limiting permissible losses for football clubs.
Specifically, FFP stipulates that clubs can spend a maximum of €5m more than they earn over a three-year period, but this can increase to €30m if there are injections from club owners or related parties. While all member association members are required to submit financial statements to UEFA, such restrictions apply only to those whose costs exceeded income by more than €5m in the two years prior to participation in a European competition, such as the UEFA Champion's League.
Grassroots view
There has, however, been debate since their inception about whether catch-all FFP regulations are appropriate for smaller league contexts.
Recognising this, we sought the views of the directors of Scottish clubs on their experiences of FFP. Many acknowledged the limitations of UEFA regulations for Scottish football more broadly, with top-down regulations perceived as ignoring the interests of smaller clubs with, at times, costly outcomes. One study participant, for instance, recalled the case of Brechin City – a club with only the remotest chance of ever playing in Europe– being told by UEFA that their pitch was not wide enough and should be modified at great expense.
Our findings highlight the complexity of top-down, catch-all regulations within football – with some club directors contending that FFP imposed the financial 'discipline' needed to ensure Scottish football's sustainability. Others, however, were more sceptical about the ability of FFP to curb excessive spending and borrowing, arguing that larger clubs have ways of bypassing restrictions – such as striking inflated sponsorship deals that involve companies linked to club owners.
Falling foul of FFP
For some Scottish football club directors, there remains fear that FFP can stimulate a 'poverty-trap'. Restrictions on losses and limits on benefactor funding for those incapable of earning substantial football-related revenues may consolidate the position of larger clubs, they say. The directors argue that this favours the status quo and could prevent smaller clubs from investing in success and securing entry into European competitions out of fear of falling foul of FFP.
One counterargument to this is that some small clubs still manage to achieve success in spite of the regulations in place. Only last month, for example, BK Häcken – Gothenburg's second biggest club, with a modest 6,500-capacity stadium – defied the odds by winning the Swedish league.
BK Hacken's Ibrahim Sadiq (in white) takes on AIK players in October 2022 in Solna, Sweden
The relevance of benefactor funding restrictions within the Scottish football context is, however, of limited importance, especially in the lower leagues where investment tends to be scarce.
As one participating director highlighted, this level of football is a far cry from Europe's premier competitions, and is instead closely bound to the local community where "these people are doing it for the love of the club". Indeed, directors here often tend to be supporters, with limited investment ability compared with larger, foreign-backed clubs competing for European honours.
Yet, the current financial situation of most Scottish football clubs is far from secure; strengthening the case for financial discipline. Broadcasting revenues are dwarfed by those of larger European leagues – just £38 million in Scotland compared with £3.1 billion in England last season – though additional support from UEFA may redress this imbalance.
To that end, UEFA introduced the Conference League last term to provide teams that do not regularly qualify for European competition increased opportunity to do so. Dundee United were the beneficiaries of this in 2022, but the new competition has reduced the number of teams allowed to take part in the more lucrative Europa League. That could have a potential impact on revenues for Scottish clubs if the country's coefficient – which determines how many clubs qualify – diminishes.
Power of community spirit
There are also huge disparities between the revenues and salary commitments of Scotland's two largest clubs, Celtic and Rangers, and the chasing pack. Recent news articles have highlighted the Scottish Professional Football League's (SPFL) record £39.5m turnover for 2021-22. At the same time, the direct impact of the cost of living crisis on clubs, and the considerable impact of inflation on the spending power of Scottish football fans, will likely exacerbate long-standing disparities.
Clubs are experiencing a decline in the number of fans attending away matches; a demand for higher wages by players; and increased energy costs – with each likely to worsen their financial positions. To counteract this, the Scottish FA and SPFL have been considering the introduction of earlier kick-off times to reduce the need for floodlights in stadiums.
Queen of the South fans in the shed at Palmerston Park, Dumfries
Thus, while FFP regulations may act as a monitoring mechanism for investment-swamped larger football clubs, their role within Scotland appears limited. Here, the industry is more reliant on fan support and community spirit than in larger football leagues, with a one-size-fits-all approach to regulations potentially detrimental to smaller clubs. Such regulations are especially acute given the current financial challenges smaller clubs face.
Scottish football has, however, been historically resilient to financial difficulties, with only two out of the ten Scottish clubs which have gone into administration since 2000, no longer registered with the SPFL. Perhaps, given the community spirit associated with football in Scotland, the future is less bleak than many would imagine.
Picture credits: Gayfield - Colin McPherson/Getty; BK Hacken - Michael Campanella/Getty; Palmerston Park - Colin McPherson/Corbis via Getty
What will a successful Qatar World Cup look like?
'Where artistry and everyday life meet'
Connect with the Business School's Entrepreneurship and Innovation research group
Find out more about our Masters in Entrepreneurship and Innovation
This article was published on 21 Dec, 2022
All articles are licensed under a Creative Commons Attribution-NoDerivatives 4.0 International License.


The Czech delegation has returned just over a week ago from the 48th international MEP (Model European Parliament) session in Tallinn, Estonia. We would like to congratulate the delegates (Adam Hoško, Anna Králová, Joseph Osborne, Sára Borzová and Sofie Gjuričová) as well as the committee president (Prokop Martínek) for representing our country successfully. The evaluations they received are indeed praiseful. Moreover, Adam and Anna were chosen to chair a committee at the upcoming international MEP session in Madrid.
For more information visit Model European Parliament Estonia.


text:
Q: Levels of Rings and Fields, -1 as a sum of squares Definition: Let $R$ be a commutative ring. The level of $R$, denoted $s(R)$, is the least positive integer $s$ such that $-1$ can be written as the sum of $s$ many squares in $R$. Set $s(R)=\infty$ if no such $s$ exists.
You might recall that a field $F$ is formally real if and only if $s(F)=\infty$.
Question: Let $F_n$ be the field of fractions of the integral domain $$\mathbb{Q}[x_1,\ldots,x_n]/(x_1^2+\ldots+x_n^2+1).$$ What is $s(F_n)?$ (It is clearly bounded above by $n$.)
$$~$$$$~$$
I have been reading some literature about this and the question of possible levels for fields was worked out by the following result of Pfister in 1965.
Theorem:

*

*If $F$ is a field with $s(F)<\infty$ then $s(F)$ is a power of 2.

*Let $m\geq 0$ and suppose $2^m\leq n<2^{m+1}$. Let $F=\mathbb{Q}(x_1,\ldots,x_n)$ and set $d=x_1^2+\ldots+x_n^2\in F$. Then $s(F(\sqrt{-d}))=2^m$.

So the powers of 2 are exactly the positive integers that can occur as the level of a field.
For general commutative rings there are more possibilities. In particular, there is this result of Dai, Lam, Peng from 1980.
Theorem: Let $R_n=\mathbb{Q}[x_1,\ldots,x_n]/(x_1^2+\ldots+x_n^2+1)$. Then $s(R_n)=n$.
The proof (at least the one I read) of that last one is much easier than Pfister's result, and is interesting in the sense that it uses the famous Borsuk-Ulam Theorem  from topology.
So my question asks about the level of the field of fractions of $R_n$, which again is bounded above by $n$. But by Pfister's result it must be a power of 2. For example it should be easy to show $s(F_3)=2$. In light of part two of Pfister's theorem, maybe it's reasonable to expect $s(F_n)$ to be the greatest power of 2 that is still not more than $n$. Maybe there is a way of altering the proof of part two of Pfister's theorem to make it work for $F_n$.
The link I have been reading for all of this is the following:
http://www.math.tifr.res.in/~anands/Level.pdf

A: No need, Pfister did it. This is Theorem 2.6 on page 382 of Lam's 2005 book, in particular formula (2.8) and the Remark partway down the page.  Lam's book is reference [5] in the pdf you are reading.
=-=-=-=-=-=-=-=-=-=-=-=-=-=

=-=-=-=-=-=-=-=-=-=-=-=-=-=


Please visit and consider participating with some of our favorite organizations. These groups are doing great work in the community.
We are a group of women in the Longmont, Colorado area who actively promote the conservative values of the Republican Party.
Are you interested in learning more about local or state politics? Would you like to meet the candidates and hear about the initiatives involved in upcoming elections? Would you like to network with other conservative hard-chargers? Come talk with us. Join us at a Monthly Meeting or at any of our "Special Events" or contact any of the officers.
A women's organization to foster and encourage loyalty to the Republican Party and to the principles for which it stands. To promote an informed membership and electorate through political education and activity. To increase the effectiveness of women in the cause of good government through political involvement. To facilitate cooperation among CFRW, NFRW, and the Republican Party organizations. To work for the election of Republican Party nominees.
The Rocky Mountain Black Conservatives exists to serve persons of color in the great states of the western USA. We educate, inform and encourage true diversity of political thought and expression.
We are a themed club blending the classic structure of Toastmasters to practice our oral communication and leadership skills using the Timeless Principles of Leaders in Action focusing on individual rights, the proper role of government, active and engaged citizens, and our founding documents, the Declaration of Independence and the United States Constitution.
The Opportunity Coalition helps to promote and facilitate a business-friendly environment that encourages free enterprise, entrepreneurship and collaboration. Its intent is to create more opportunity, quality employment, and connections for Colorado's citizens.
The Opportunity Coalition was created for business owners, executives, entrepreneurs, thought leaders, public servants and concerned citizens. The Opportunity Coalition strives to provide the platform, resources, and connections needed to help people succeed. In today's economy, the Opportunity Coalition provides leadership, collaboration and support to help grow businesses and create economic vitality.
The Reagan Club of Colorado seeks to promote the Constitution, smaller government, lower taxes, personal freedom, helping candidates, and educating the public about one of our greatest presidents, Ronald Wilson Reagan. We feature different programs and speakers as we honor the 40th President.


You can make Kahlua Coffee Liqueur, this coffee-flavored beverage at home. This makes wonderful gifts, or to savor yourself. This is easy to make.
Kahlua coffee liqueur is a sweet, rich, coffee-flavored drink you can easily make at home. My homemade Kahlua recipe is just the perfect thing for an after-dinner tipple. You can just savor it with your family or also use it to make wonderful gifts. Just pour it into bottles and dress it up with pretty ribbons.
Any bar will have a bottle of Kahlua. It's one of the ingredients in the popular White Russian cocktail. Because of this, you might think that Kahlua originated in Russia. You also might think that Kahlua is made in the Middle East because the name Kahlua comes from the word kahwa, which is an Arabic slang word for coffee. But, no – this coffee-flavored liqueur is Mexican. Kahlua is a wonderful mix of coffee, rum, corn syrup and vanilla beans (one more traditional Mexican ingredients).
How is Traditional Kahlua Made?
Before being used to make Kahlua, the coffee beans are dried, de-husked and allowed to age for about six months before they are roasted, ground up and brewed. The sugar cane used in the Kahlua is harvested, crushed and juiced and then reduced to form molasses. Yeast and water are added to the cane to ferment the mixture and produce the alcohol content in Kahlua. The cane spirit is combined with the coffee, vanilla, and caramel and allowed to rest for eight weeks before being filtered, bottled, and sent out into the world of delighted drinkers. Today, Kahlua is drunk at a rate of two million cases a year in 150 countries around the world.
What Drinks can You Make with Kahlua?
Mind Eraser – Fill a glass with ice to the brim. Add Kahlua and vodka then top off with club soda. Don't stir this is a drink that should have layers.
Black Russian – Fill a glass with ice. Add one part Kahlua and two parts vodka. Mix and garnish with a cherry on top.
Kahlua and Cream – Simply fill a glass with ice, and add about 1 or 2 ounces of Kahlua and fill the rest with half and half.
Also, consider pouring some aged Kahlua over ice cream – it's like coffee candy!
Life is good, and so is this Kahlua. This keeps well and gets better with age. The longer it ages, the thicker and more syrupy it gets.
Combine the coffee, sugar, vanilla, and water. Stir until the sugar is dissolved completely. Set aside to cool (otherwise, you will evaporate the alcohol).
Add vodka and stir until well mixed. Pour over ice, and add your favorite ingredients. Sit back, relax, and enjoy.
Kahlua is rum based…? why vodka or brandy?
Sounds like not enough coffee flavor. Here's my version that I have had and used for 40 years.
Dissolve sugar & coffee in water. Let stand 5 min. then stir in brandy. Using cheese cloth, strain into sterile bottles. Break vanilla bean in half for each bottle. 3 months-fair, 6 months-good, 12 months-excellent. The longer it ages, it gets thicker and more syrupy. I have some that is over 5 years old. Like coffee candy over ice cream.


Is Regional Cooperation Enough or do we need Amalgamation?
Amalgamation is the buzz word of the day. With the malarkey going on in Auckland as officials, politicians and the residents all try and make sense of what is happening, we must try and be in charge of our own destiny. This is not something we would want imposed upon us!
When we have the debate the regional council must take a lead in any discussion on amalgamation rather than let Wellington City set the agenda. Kapiti's voice must be heard as one of the smaller and more distant local councils from central Wellington. Work is already underway with our officials working out what is possible.
We do not need to amalgamate.
Lets us indeed question the status quo but not at the expense of our identity, our needs and our integrity. Let us fly our kites but not to become entangled and disadvantaged. We don't want to be amalgamated into a great amorphous entity where democracy and our voice could be at risk.


The Haymarket Australia Post Shop, providing parcel collection options.
Serving wholesome, fresh and tasty food and a great coffee with indoor and outdoor seating.
Providing hair design services specialising in Shiseido hair straightening and Keratin colour therapy.
An Authentic Vietnamese Takeaway Shop. Bringing You The Soul Of Saigon Food. From Pho, Banhmi, Rice Paper Rolls and Grilled Pork Vermicelli.
A one-stop shop photography solution from traditional film processing to digital imaging services.
Top Juice is the ideal destination for delicious, healthy and convenient food packed full of daily essentials. Sourcing only the freshest produce, Top Juice offers a nutritious seasonal menu filled with exotic fruits and vegetables all year round. With everything from fresh juices, smoothies and protein shakes to garden salads, indulgent yoghurts and last but not least, chocolate-dipped strawberries. Top Juice has you covered with a great range of natural and guilt-free treats!
Experience Australia's finest modern Japanese dining & bar at our newly renovated Umi Sushi & Bar. Featuring live seafood in our 8- meters fish tank, omakase chef's daily selection sushi banquet, cook to order Japanese kushiyaki skewers and huge varieties of Japanese sake and whisky, we are now reopened to be bigger and nicer. Private dining rooms and outdoor seatings are also available. This is a culinary experience not to be missed!
Zilver creates innovative fusion Chinese food and delivers an excellent customer service experience.


Alexis Bloom charts the legacy of right-wing news baron Roger Ailes.
Barry Avrich offers a timely portrait of lawyer Ben Ferencz.
Annis Innis Dagg's tenacity and fight for her rights is well documented by Alison Reid.


text:
Q: Why CASE WHEN always return 0 and 1 in mysql? I use a table where there are two integer fields right_score and left_score. When CASE WHEN is used it outputs incorrect result :
SELECT
    right_score,
    left_score,
    CASE
        WHEN right_score < 3 THEN right_score = 1
        WHEN right_score >= 3 THEN right_score = 0
    END AS r_result,
    CASE
        WHEN left_score < 3 THEN left_score = 1
        WHEN left_score >= 3 THEN left_score = 0
    END AS l_result
FROM
    de_data
WHERE
    id = 037629

The output shows right_score=0 , left_score=0, r_result=0 and l_result=0
But i expect the result as
The output shows right_score=0 , left_score=0, r_result=1 and l_result=1
Where did i went wrong ?

A: Everything is running as programmed.
So for  right_score = 0
WHEN right_score < 3 THEN right_score = 1

First MySQL checks if right_score is smaller than three and in the next and second step MySQL checks if right_score is equal to 1 what is false which mysql tells by sending a 0
So in that line you have two comparisons and the result is what you have programmed a bunch of true(1) and false (0)
If you remove all the second comparisons, you get what you expected.

CREATE TABLE de_data(id varchar(6),right_score int ,    left_score int)

INSERT INTO de_data VALUES ('037629', 1,1),('037629', 3,1),('037629', 1,3),('037629', 3,3),('037629', 2,2)
,('037629', 1,1),('037629', 2,2)

SELECT
    right_score,
    left_score,
    CASE
        WHEN right_score < 3 THEN right_score = 1
        WHEN right_score >= 3 THEN right_score = 0
    END AS r_result,
    CASE
        WHEN left_score < 3 THEN left_score = 1
        WHEN left_score >= 3 THEN left_score = 0
    END AS l_result
FROM
    de_data
WHERE
    id = 037629

right_score | left_score | r_result | l_result
----------: | ---------: | -------: | -------:
          1 |          1 |        1 |        1
          3 |          1 |        0 |        1
          1 |          3 |        1 |        0
          3 |          3 |        0 |        0
          2 |          2 |        0 |        0
          1 |          1 |        1 |        1
          2 |          2 |        0 |        0

SELECT
    right_score,
    left_score,
    CASE
        WHEN right_score < 3 THEN  1
        WHEN right_score >= 3 THEN  0
    END AS r_result,
    CASE
        WHEN left_score < 3 THEN  1
        WHEN left_score >= 3 THEN  0
    END AS l_result
FROM
    de_data
WHERE
    id = 037629

right_score | left_score | r_result | l_result
----------: | ---------: | -------: | -------:
          1 |          1 |        1 |        1
          3 |          1 |        0 |        1
          1 |          3 |        1 |        0
          3 |          3 |        0 |        0
          2 |          2 |        1 |        1
          1 |          1 |        1 |        1
          2 |          2 |        1 |        1

db<>fiddle here