text:
Q: Zoom In/Out Interferes with Canvas Drawing Location I am working with some classmates to make a word search game.  It is pretty much done, but the only problem that we are facing is when the user decides to zoom in or out.  When the user clicks and drags their cursor within the canvas, a red line highlights the letters under the cursor.  After zooming, the highlighting appears somewhere other than under the mouse.
At first, we thought the problem was caused by window scrolling because the canvases were bigger than the screen, so we made them
You can recreate the problem by going here, zooming in, scrolling down a little bit, and trying to highlight a string of letters.
Please only include suggestions with Javascript: no JQuery, additional libraries, any other languages.
<html>
<head>
    <title>Canvas Testing</title>
    <script type="text/javascript">
        var canvas,//canvas html tag
        wordsCanvas,//displays words
        wContext,//wordsCanvas context
        context,//to edit canvas items
        words = ["KING","HOMEWORK","BASEBALL","SIDEWALK","CUPCAKE","WHITEHOUSE","ISLAND","SOCCER","INDEPENDENCE","LOVE","CALCULUS","BEACH","SUMMER","PET","MICHIGAN","CANDY","WORLD","SIX","SNOW","SWEET"],//array of the words users must find
        found = new Array(),
        w,//width
        h,//height
        w1,//width of each letter (board 6 letters wide right now)
        h1,//height of each letter (board 6 letters tall right now)
        draw = false,//tells when the game should highlight a letter
        letterPoints = new Array(),//holds the coordinates of each letter
        lines = new Array(),//holds the coordinates of each line for a correct word highlighted
        startLP = null,//holds the Letter object (letter, x, y) for the start of the line
        endLP = null;//holds the Letter object (letter, x, y) for the end of the line

        function init(){//initializes the canvas, context,w,h variables
            canvas = document.getElementById("canvas");
            context = canvas.getContext("2d");
            canvas.height = window.innerHeight*600/630;
            canvas.width = window.innerWidth*900/1380;
            w=canvas.width;
            h=canvas.height;
            w1 = w/20;
            h1 = h/20;
            context.font = h1+"px Courier";
            context.textAlign = "left";
            context.textBaseline = "top";

            wordsCanvas = document.getElementById("wordsCanvas");
            wordsCanvas.height = window.innerHeight*600/630;
            wordsCanvas.width = window.innerWidth*400/1380;
            wContext = wordsCanvas.getContext("2d");
            wContext.font = h1+"px Georgia";
            wContext.textAlign = "left";
            wContext.textBaseline = "top";

            background();
            fillWords(-1);

            //add event listeners for mouse actions
            canvas.addEventListener("mousedown", function(event) {
                setLine("press",event);
            });
            canvas.addEventListener("mouseup", function(event) {
                setLine("release",event);
            });
            canvas.addEventListener("mousemove", function(event) {
                setLine("drag",event);
            });
            canvas.addEventListener("mouseout", function(event) {
                setLine("out",event);
            });
        }

        function fillWords(greenIndex){//displays words to search for
            wContext.clearRect(0,0,300,h);
            var index = 0;
            if(greenIndex != -1)
            {
                found[found.length] = words.splice(greenIndex,1);
            }

            for(var i=0; i<h; i+=h1)
            {
                if(index<words.length)
                {
                    wContext.fillStyle = "red";
                    wContext.fillText(words[index],10,i);
                }
                else
                {
                    wContext.fillStyle = "green";
                    wContext.fillText(found[found.length-((h/h1)-index)],10,i);
                }
                index++;
            }

            wContext.fillStyle = "black";
        }

        function background(){//sets the background to the letters and then draws the lines that lay on correctly highlighted words words
            var letterCount = 0;//counts # of letters on the board
            //one string that represents all letters on the board
            var backLets = "harinavesenanotheasp"+
                           "oobalremmusicwonsdpa"+
                           "momvtcalclsxvaiybaev"+
                           "swttysumvkingbddmrzd"+
                           "ahaeuyacemjtavpniche"+
                           "nivpnagihcimbseaceoy"+
                           "tthesteatkijeodchqmj"+
                           "ueesnodbsggmaccutsea"+
                           "mhmikalviabahceraqwm"+
                           "motislandbtcvetiwmoi"+
                           "eurwtenkeeeterntanra"+
                           "tsoolotewheewhthsekl"+
                           "sewroxvrarwdbaseball"+
                           "nehtvxjglmsadalkazqt"+
                           "odceetenkenstcvepcap"+
                           "ttaabvdlcupcakepeaxm"+
                           "rieqindependenceplia"+
                           "afbacucakehowrkdkisf"+
                           "chldlrowbrqmmuscqflg"+
                           "amerivegdsuluclacoev";

            context.fillStyle = "black";
            for(var y=0; y<h; y+=h1)//goes through the board and draws each letter, then stores their coordinates in the letterPoints array
            {
                for(var x=0; x<w; x+=w1)
                {
                    r = y/h1 + 1;//tells the row that the letter is in
                    c = x/w1 + 1;//tells the column that the letter is in
                    temp = new Letter(backLets.charAt(letterCount),x,y,r,c);
                    context.fillText(temp.letter.toUpperCase(),temp.x,temp.y);
                    if(letterPoints.length<400)
                        letterPoints[letterPoints.length] = temp;
                    letterCount++;
                }
            }

            /*go through lines array holding coordinates for lines that lay on correct words*/
            for(var z=0; z<lines.length; z++)
            {
                //this if structure allows the words matching the list to be highlighted in different colors so adjacent words will not be highlighted into blocks
                context.fillStyle = "lime";

                var coords = lines[z];//elements of lines array are not empty but the drawLine isn't processing them
                drawLine(coords[0],coords[1]);
            }
        }

        function setLine(action, e){//sets the coordinates for the lines to be drawn
            if(action == "press")
            {
                startLP = findNearestLP(e.clientX - canvas.offsetLeft, e.clientY - canvas.offsetTop);//gets nearest coordenate to a click and returns a letter object with that info
                if(startLP != null)
                {
                    draw = true;
                }
            }
            if(action == "drag")
            {
                //updates the last coordinates that the dragged mouse is on and draws a line to that point from the start
                if(draw)
                {
                    context.clearRect(0,0,w,h);
                    background();
                    endLP = findNearestLP(e.clientX - canvas.offsetLeft, e.clientY - canvas.offsetTop);

                    context.fillStyle = "red";
                    drawLine(startLP, endLP);
                }
            }
            if(action == "release"  || (action == "out" && draw))
            {
                draw = false;
                /*If a correct word is highlighted, store the start and end coordinates
                else clear*/
                endLP = findNearestLP(e.clientX - canvas.offsetLeft, e.clientY - canvas.offsetTop);
                //Get the letters that are highlighted by the line
                if(endLP != null)
                {
                    var word = getWord();//returns the word that was made from the start to end point by adding the characters that were highlighted
                    if(word != null && matchWords(word)/*This string will be replaced by a word from the list of word search targets*/)
                    {
                        lines[lines.length] = [startLP,endLP];
                    }
                }
                context.clearRect(0,0,w,h);//clears the board of any drawn lines
                background();//if the line highlighted a word from the list, this method should redraw that line

                if(words.length == 0)
                    alert("Congratulations! You win!");

            }
        }

        //searches through the words array to see if the highlighted word is there
        function matchWords(target){
            if(words.indexOf(target.toUpperCase()) != -1)
            {
                fillWords(words.indexOf(target.toUpperCase()));
                return true;
            }

            return false;
        }

        //uses coordinates from setLine() to draw the lines
        function drawLine(start, end){
            context.globalAlpha = 0.6;//sets transparency of lines

            /*
                Check up,down,left,right,diagonals
                See if start and end can make a valid line
                If yes, find the letters from start to end and store it as a word
            */

            if(start.x == end.x && end.y>start.y)//checking down
            {
                context.fillRect(start.x,start.y,w1,(end.y+h1)-start.y);
            }
            else if(start.x == end.x && end.y<start.y)//checking up
            {
                context.fillRect(end.x,end.y,w1,(start.y+h1)-end.y);
            }
            else if(start.y == end.y && end.x>start.x)//checking left to right
            {
                context.fillRect(start.x,start.y,(end.x+w1)-start.x,h1);
            }
            else if(start.y == end.y && end.x<start.x)//checking right to left
            {
                context.fillRect(end.x,end.y,(start.x+w1)-end.x,h1);
            }
            else if(start.y > end.y && start.x < end.x && ((start.r-end.r)/(end.c-start.c))==1)//checking left to right diagonal (down to up)
            {
                for(var z = letterPoints.length-1; z>=0; z--)
                {
                    var temp = letterPoints[z];
                    if((start.x<=temp.x && end.x>=temp.x && start.y>=temp.y && end.y<=temp.y) && ((start.y-temp.y==0 && temp.x-start.x==0) || ((start.r-temp.r)/(temp.c-start.c))==1))//((start.r-temp.r)/(temp.c-start.c))==1  means if the slope of between two points is 1
                    {
                        context.fillRect(temp.x,temp.y,w1,h1);
                    }
                }
            }
            else if(start.y < end.y && start.x < end.x && ((end.r-start.r)/(end.c-start.c))==1)//checking left to right diagonal (top to bottom)
            {
                for(var z = 0; z<letterPoints.length; z++)
                {
                    var temp = letterPoints[z];
                    if((start.x<=temp.x && end.x>=temp.x && start.y<=temp.y && end.y>=temp.y) && ((start.y-temp.y==0 && temp.x-start.x==0) || ((temp.r-start.r)/(temp.c-start.c))==1))//((temp.r-start.r)/(temp.c-start.c))==1  means if the slope of between two points is 1
                    {
                        context.fillRect(temp.x,temp.y,w1,h1);
                    }
                }
            }
            else if(start.y > end.y && start.x > end.x && ((start.r-end.r)/(start.c-end.c))==1)//checking right to left diagonal (down to up)
            {
                for(var z = letterPoints.length-1; z>=0; z--)
                {
                    var temp = letterPoints[z];
                    if((start.x>=temp.x && end.x<=temp.x && start.y>=temp.y && end.y<=temp.y) && ((start.y-temp.y==0 && start.x-temp.x==0) || ((start.r-temp.r)/(start.c-temp.c))==1))
                    {
                        context.fillRect(temp.x,temp.y,w1,h1);
                    }
                }
            }
            else if(start.y < end.y && start.x > end.x && ((end.r-start.r)/(start.c-end.c))==1)//checking right diagonal (top to bottom)
            {
                for(var z = 0; z<letterPoints.length; z++)
                {
                    var temp = letterPoints[z];
                    if((start.x>=temp.x && end.x<=temp.x && start.y<=temp.y && end.y>=temp.y) && ((start.y-temp.y==0 && start.x-temp.x==0) || ((temp.r-start.r)/(start.c-temp.c))==1))
                    {
                        context.fillRect(temp.x,temp.y,w1,h1);
                    }
                }
            }
            context.globalAlpha = 1.0;//sets transparency back to 1
        }

        function findNearestLP(clickX,clickY){//finds the nearest letter coordinate from the user's click
            for(var z = 0; z<letterPoints.length; z++)
            {
                var lp = letterPoints[z];
                if((clickX<=lp.x+w1 && clickX>=lp.x) && (clickY<=lp.y+h1 && clickY>=lp.y))
                {
                    return letterPoints[z];
                }
            }
            return null;
        }

        function getWord()
        {
            var result = "";
            /*
                Check up,down,left,right,diagonals
                See if startLP and endLP can make a valid line
                If yes, find the letters from start to end and store it as a word
            */

            if(startLP.x == endLP.x && endLP.y>startLP.y)//checking down
            {
                for(var z = 0; z<letterPoints.length; z++)
                {
                    var temp = letterPoints[z];
                    if(temp.x == startLP.x && temp.y>=startLP.y && temp.y<=endLP.y)
                    {
                        result += temp.letter;
                    }
                }
            }
            else if(startLP.x == endLP.x && endLP.y<startLP.y)//checking up
            {
                for(var z = letterPoints.length-1; z>=0; z--)
                {
                    var temp = letterPoints[z];
                    if(temp.x == startLP.x && temp.y<=startLP.y && temp.y>=endLP.y)
                    {
                        result += temp.letter;
                    }
                }
            }
            else if(startLP.y == endLP.y && endLP.x>startLP.x)//checking left to right
            {
                for(var z = 0; z<letterPoints.length; z++)
                {
                    var temp = letterPoints[z];
                    if(temp.y == startLP.y && temp.x>=startLP.x && temp.x<=endLP.x)
                    {
                        result += temp.letter;
                    }
                }
            }
            else if(startLP.y == endLP.y && endLP.x<startLP.x)//checking right to left
            {
                for(var z = letterPoints.length-1; z>=0; z--)
                {
                    var temp = letterPoints[z];
                    if(temp.y == startLP.y && temp.x<=startLP.x && temp.x>=endLP.x)
                    {
                        result += temp.letter;
                    }
                }
            }
            else if(startLP.y > endLP.y && startLP.x < endLP.x && ((startLP.r-endLP.r)/(endLP.c-startLP.c))==1)//checking left to right diagonal (down to up)
            {
                for(var z = letterPoints.length-1; z>=0; z--)
                {
                    var temp = letterPoints[z];
                    if((startLP.x<=temp.x && endLP.x>=temp.x && startLP.y>=temp.y && endLP.y<=temp.y) && ((startLP.y-temp.y==0 && temp.x-startLP.x==0) || ((startLP.r-temp.r)/(temp.c-startLP.c))==1))
                    {
                        result += temp.letter;
                    }
                }
            }
            else if(startLP.y < endLP.y && startLP.x < endLP.x && ((endLP.r-startLP.r)/(endLP.c-startLP.c))==1)//checking left to right diagonal (top to bottom)
            {
                for(var z = 0; z<letterPoints.length; z++)
                {
                    var temp = letterPoints[z];
                    if((startLP.x<=temp.x && endLP.x>=temp.x && startLP.y<=temp.y && endLP.y>=temp.y) && ((startLP.y-temp.y==0 && temp.x-startLP.x==0) || ((temp.r-startLP.r)/(temp.c-startLP.c))==1))
                    {
                        result += temp.letter;
                    }
                }
            }
            else if(startLP.y > endLP.y && startLP.x > endLP.x && ((startLP.r-endLP.r)/(startLP.c-endLP.c))==1)//checking right to left diagonal (down to up)
            {
                for(var z = letterPoints.length-1; z>=0; z--)
                {
                    var temp = letterPoints[z];
                    if((startLP.x>=temp.x && endLP.x<=temp.x && startLP.y>=temp.y && endLP.y<=temp.y) && ((startLP.y-temp.y==0 && startLP.x-temp.x==0) || ((startLP.r-temp.r)/(startLP.c-temp.c))==1))
                    {
                        result += temp.letter;
                    }
                }
            }
            else if(startLP.y < endLP.y && startLP.x > endLP.x && ((endLP.r-startLP.r)/(startLP.c-endLP.c))==1)//checking right diagonal (top to bottom)
            {
                for(var z = 0; z<letterPoints.length; z++)
                {
                    var temp = letterPoints[z];
                    if((startLP.x>=temp.x && endLP.x<=temp.x && startLP.y<=temp.y && endLP.y>=temp.y) && ((startLP.y-temp.y==0 && startLP.x-temp.x==0) || ((temp.r-startLP.r)/(startLP.c-temp.c))==1))
                    {
                        result += temp.letter;
                    }
                }
            }
            if(result != "")
                return result;
            return null;
        }
        //letter class
        function Letter(letter,x,y){
            //The letter variable is mainly used for getting the highlighted word
            this.letter = letter.charAt(0);

            //the x and y coordinate variables are used for drawing the highlighting line and getting the letter variable at certain coordinates
            this.x = x;
            this.y = y;

            //the r and c variables are used to keep track of which rows and columns the letters are on.  This is very helpful for drawing the highlighting line on a diagonal
            this.r = r;
            this.c = c;
        }
    </script>
</head>
<body onload="init()">
    <canvas id="canvas" style="border: 1px solid #000000;"></canvas>
    <canvas id="wordsCanvas" style="border: none;"></canvas>
</body>

A: By using only offsetLeft and offsetTop inside setLine, you do not take into account the scrolling.
Killer weapon here is getBoundingClientRect, that will give you relative position of the canvas taking every aspect into account :
    function setLine(action, e){//sets the coordinates for the lines to be drawn
      var bRect = canvas.getBoundingClientRect();

      var relX = e.clientX  - bRect.left ;
      var relY = e.clientY - bRect.top;

      if(action == "press")
        {
            startLP = findNearestLP(relX, relY);//gets nearest coordenate to a click and returns a letter object with that info
            if(startLP != null)
            {
                draw = true;
            }
        }
        if(action == "drag")
        {
            //updates the last coordinates that the dragged mouse is on and draws a line to that point from the start
            if(draw)
            {
                context.clearRect(0,0,w,h);
                background();
                endLP = findNearestLP(relX, relY);

                context.fillStyle = "red";
                drawLine(startLP, endLP);
            }
        }
        if(action == "release"  || (action == "out" && draw))
        {
            draw = false;
            /*If a correct word is highlighted, store the start and end coordinates
            else clear*/
            endLP = findNearestLP(relX, relY);
            //Get the letters that are highlighted by the line
            if(endLP != null)
            {
                var word = getWord();//returns the word that was made from the start to end point by adding the characters that were highlighted
                if(word != null && matchWords(word)/*This string will be replaced by a word from the list of word search targets*/)
                {
                    lines[lines.length] = [startLP,endLP];
                }
            }
            context.clearRect(0,0,w,h);//clears the board of any drawn lines
            background();//if the line highlighted a word from the list, this method should redraw that line

            if(words.length == 0)
                alert("Congratulations! You win!");

        }
    }


I bought this as a gift for my son, versatile is the perfect description. It can be worn over a sports coat /suit jacket (car coat length)- and can be worn equally to a formal evening or just casually. I have yet to be displeased with a Cardinal of Canada purchase.
Coat was exactly what I was looking for. First size was a bit to big. But customer service was great to work with and had my exchange sent to me right away. Was a pleasure working you. I will be a repeat customer! Many companies could learn about customer service from you.
My first order from Cardinal, and what a pleaser! Beautiful coat made with the proven Loro Piana Storm System. Feels great, looks great - instant hit and, just judging by initial quality, something I ought to be able to keep for many years to come. This might be my runaway new clothing brand!
Join our newsletter and enjoy 20% off your next purchase. Be the first to receive updates on new arrivals, special promotions and events.


text: My BlockMc plugins

redpajama_set_name: RedPajamaGithub


We have credit card processing facilities at our retail store for Visa & Mastercard. Your Zen Cart (electronic store) purchase details will be transmitted to us securely. You can make payment via PayPal for eBay and other on-line sales. Or call us at 250-413-3138 and we can take your information.
We are obliged by the bank to charge your credit card in Canadian dollars, which are converted by your credit card company into US$. This price will be close to but may not exactly match the card company's conversion rate, so the amount on your credit card statement may vary slightly. We will accept US dollar cheques. Currently, $1US=$0.80 CDN approximately.
We must charge Canadian Harmonized Sales Tax on items sold to Canada (13% in Ontario, New Brunswick, and Newfoundland & Labrador; 15% in Nova Scotia; 12% in British Columbia; and 5% elsewhere). Books are exempted. Items which are exported to the United States or elsewhere are not charged tax.
We will give you 15% back in Kimmerly Dollars (our own discount certificates) on purchases of $100 or more of ALL regularly priced retail items from our store. Exclusions include our site Auction, eBay items, BNAPS literature, some philatelic literature, and any sale or previously discounted items.
Kimmerly Dollars can be used to pay for your future purchases on anything in the store with the exception of our site Auction, other on-line auction items (eBay etc.).
Kimmerly dollars have no monetary value and are redeemable for goods at Ian Kimmerly Stamps only.


If you are an organized, detail-oriented, deadline driven, highly motivated professional with a passion for critical, technical problem solving, and able to handle multiple responsibilities in a fast-paced environment independently, then we are your next destination employer! As a member of the Software Security Group your primary function would be to identify software security vulnerabilities and work with development teams on remediation. As a member of the team, this individual will have a proven background in application security, software development and DevOps. This is an opportunity to join a fast-paced team that interacts with all areas of Freddie Mac.
o Document your findings and follow processes for communication with application owners.
o Provide application system account management, including password management.
o Apply broad technical knowledge and skills to analyze, develop, create and implement process improvements, trouble shooting, and operational support.
o Understand applications from a technical architecture and business goals perspective to apply Security best practices.
o Work on multiple tasks in support of one or more projects that require a singular area of expertise.
o Maintain knowledge database articles.
o Develop training materials and conduct training sessions on the supported tools and processes.
o Provide quality system admin support for Fortify, Black Duck, Contrast and other security tools including metrics reporting to ensure compliance and maintain best practices.
o Participate in the upgrades and patch fixes of supported tools, and partner with other IT staff to coordinate infrastructure maintenance and system migrations.
o Develop automated scripts using JAVA/.Net, REST API, Python to automate system admin functions and develop home grown utilities, tools and integrations.
o Develop requirements, test scripts and lead/participate in test execution for supported tool upgrade projects.
* Bachelor's degree in computer science or engineering or related experience.
* Follows established directions from supervisor. Able to provide technical guidance to the team.
* Customer Focus -Engage with customers to understand and deliver on support needs.


text:
Q: How to pass parameters from Pug to Backend JavaScript? I have this pug page and I need to open the link to a new window.
The link is dynamic because it is populated from the backend and when I click the link, I want to open it in a new tab.
How do I do it ?
layout.pug
a(href='/goto/?url='+url)

main.js
app.get('/goto/?url=:url', (req, res) => {
    var new_tab_url = req.params.url;
    window.open(new_tab_url, '_blank').focus();
});

I need to pass the URL from layout.pug to main.js to open a new tab.
But I keep getting error
Cannot GET /goto/

Or perhaps , is there other simpler way ?
Thank you

A: To open a link in a new window, just use this:
a(href= url, target='_blank')

There's no reason to pass a variable to a backend router or try to handle the redirection server-side. Just use target="_blank".

A: My bad. This topic is closed since the issue has been resolved.
I am using Express (Node.JS) and this is what I do :
layout.pug
a(href='/goto/?url='+url)

main.js
app.get('/goto', (req, res) => {
    var new_tab_url = req.query.url;
    res.redirect(new_tab_url);
});

At least this works on my issue.
Using :
NodeJS Express and Pug

redpajama_set_name: RedPajamaStackExchange


text:
Friends For Christmas
John Farnham and Olivia Newton-John
John Farnham and Olivia Newton-John have collaborated again to release the deluxe edition of their platinum selling Christmas album Friends For Christmas, available now through Sony Music Australia. The album embodies a traditional Christmas sound whilst showcasing their ever impressive vocals and includes three brand new recordings exclusive to this album, The First Noel, Here Comes Santa Claus and One Little Christmas Tree. John and Olivia's last two collaborative album Two Strong Hearts and Friends For Christmas reached #1 on the ARIA album chart. Friends For Christmas Deluxe Edition features all the Christmas hits that fans have come to know and love from John and Olivia.
When John Farnham and Olivia Newton-John's Two Strong Hearts joint tour finished the two friends didn't want the fun to end. That tour, which spawned a No.1 album and DVD, lit a creative fire which has become their festive feast Friends For Christmas. Returning with the new deluxe edition, John and Olivia hit the studio to record new versions of their favourite Christmas classics as duets.
As John Farnham explains, 'I have always loved working with Olivia. To record a Christmas album seemed like the right, almost inevitable thing to do. I hope everyone enjoys listening to it as much as we loved recording it together".
'It was such a joy singing these beautiful holiday songs with my favourite singer and good mate John Farnham," said Olivia Newton-John. 'The holidays are about family and friends and having this chance to sing these classics with John was pure fun from beginning to end!"
The lush production was handled by Farnham's long-time musical maestro Chong Lim, who has also worked with Delta Goodrem, Kylie Minogue and Tina Arena.
With their impressive careers, this isn't ARIA Hall of Fame buddies John and Olivia's first time at the Christmas album rodeo. Farnham released Christmas Is.... in 1970, including the self-penned -Good Time Christmas.' Olivia is also no stranger to Christmas albums, making Tis The Season with country singer Vince Gill in 2000, then Christmas Wish in 2007 and This Christmas with John Travolta in 2012. Together, their Friends For Christmas album reached #1 on the ARIA Chart and received Platinum sales.
Fans who saw John and Olivia live on their Two Strong Hearts joint tour, or relived the joy on DVD, will be thrilled to invite them into their homes this Christmas. Two iconic, timeless voices singing 15 iconic, timeless songs.
Friends For Christmas Deluxe Edition is out now!
Friends For Christmas Track Listing:
Have Yourself A Merry Christmas
One Little Christmas Tree
Friends For Christmas Deluxe Edition is available now: http://smarturl.it/FFC.DeluxeEdition

redpajama_set_name: RedPajamaCommonCrawl


The global pharmaceutical market will reach $1.12 trillion by 2022.
And according to The New York Times, states across the country are clamping down on pharmaceutical companies, forcing them to disclose pricing information and justify price increases. In fact, 24 states have passed a total of 27 bills throughout 2018 to block rising prescription drug costs, and several state legislature are still in session.
In short, due to the lack of regulation at the federal level, many states have decided to take matters into their own legislative hands.
"In the absence of federal action, states are taking the lead in combating high drug prices," said State Representative Sean Scanlon of Connecticut.
According to CNN Health, Nirmal Mule, founder and president of Nostrum Pharmaceuticals, has decided to raise the price of a specific antibiotic mixture known as nitrofurantoin from $500 per bottle to more than $3,200.
The drug is listed by the World Health Organization as an "essential" medicine for urinary tract infections.
Mulye even defended Martin Shkreli (Pharma Bro), who was once dubbed as the "most hated man in America" after his company raised the price of an AIDS medication by more than 5,000% in 2015.
Ilumya (tildrakizumab-asmn) — For the treatment of plaque psoriasis. Approved in March.
Lutathera (lutetium Lu 177 dotatate) — For the treatment of gastroenteropancreatic neuroendocrine tumors. Approved in January.
Andexxa (coagulation factor Xa (recombinant), inactivated-zhzo) — For the reversal of factor Xa inhibitors. Approved in May.
Aimovig (erenumab-aooe) — For the preventative treatment of migraines in adults. Approved in May.
Doptelet (avatrombopag) — For the treatment of thrombocytopenia in adults with chronic liver disease. Approved in May.
Jynarque (tolvaptan) — For the treatment of autosomal dominant polycystic kidney disease. Approved in April.
Erleada (apalutamide) — For the treatment of prostate cancer. Approved in February.
Symdeko (tezacaftor/ivacaftor) — For the treatment of cystic fibrosis. Approved in February.
Thanks to the actions of some state legislators, drugs like these may actually be affordable for many of the Americans who need them.


text:
Suspect, 2 victims dead in Massachusetts attacks, police say
Posted at 8:36 PM, May 10, 2016
By Lawrence Crook and Ralph Ellis
(CNN) — Two victims in a series of stabbings in Taunton, Massachusetts, have died, as well as the suspect, authorities said Tuesday night.
The suspect's motive remains under investigation but there is no connection to terrorism, Dave Procopio, director of media communications for Massachusetts State Police, said Tuesday night.
At least two of the stabbings occurred at the Silver City Galleria Mall after the assailant crashed a motor vehicle into the front of a store, Procopio said. The other two stabbings appear to have been committed at a residence. It's not known which location was the site of the fatal stabbings.
An off-duty law enforcement officer shot the assailant at the mall, authorities said.
The victims were taken to area hospitals for treatment.
The assailant may have been involved in an earlier motor vehicle crash at the residence before the stabbings, Procopio said.
A federal law enforcement source in Boston said the incident is being treated as a "criminal matter."
The FBI is aware of the situation and coordinating with state and local police, said Kristen Setera, spokeswoman for the Boston FBI field office.
CNN's Deb Feyerick and John Newsome contributed to this report.


"It has really opened my eyes!" "I have a student about to start graduate school for entomology (the study of insects) and I don't think he slept at all, just running around the buildings all night looking at insects." "Your facilities are fantastic!" "The great thing about Archbold is its placement in an ecosystem that is not found anywhere else on Earth, so we had a unique experience." These are just some of the many expressions we hear from students and faculty that visit Archbold Biological Station with their classes during their college spring break.
Dr. Stephen Deyrup's class from Siena College, Albany NY, looking for moths that live in Crotalaria plants. Photo by Archbold Biological Station.
Some of the other colleges that visited Archbold this spring are: Martin Methodist College from Tennessee, Pace University from New York, Siena College from Ohio, Syracuse University from New York, Florida International University, the University of Florida, Albion College from Michigan, and Concordia College from Minnesota. Students stay in the Adrian Archbold Lodge, which is one of Archbold's ultra-energy-efficient and water-efficient buildings, certified as LEED® Platinum. The upcoming generation of students really appreciate staying in 'green' accommodations.
"I've been to a lot of field stations but none of them were as nice or had the charm that Archbold does", stated Mike Bush, Professor at Concordia College. He added, "Combined with the facilities at Archbold, which are among the best I've ever seen at a research station, this place has no equivalent with regard to undergraduate field courses." Coming to Archbold has allowed his class to have hands-on experience in the field and to gain experience working with each other in small groups, collecting and analyzing data. Prior to the field trip, students were required to familiarize themselves with the geological history, natural history, and conservation issues of central Florida.
Prof. Maria Luskay and students from Pace University, New York, tour Archbold's ranch as part of their documentary film-making class. #PaceDocs Photo by Archbold Biological Station.
It's clear that Archbold and Highlands County instill enduring memories.


text:
Characterization and expression analysis of Th-POK from the Japanese pufferfish, Takifugu rubripes
Ryusuke Nagamine, Hiroki Korenaga, Masahiro Sakai, Christopher J. Secombes, Tomoya Kono*
Marine Alliance for Science and Technology for Scotland (MASTS)
Scottish Fish Immunology Research Centre
In fish, T cell lineage commitment has not been studied, although there are reports related to CD4 and CD8 positive cells. This study describes the cloning and analysis of a master regulator involved in this process, the Th-POK gene in Japanese pufferfish, Takifugu rubripes. The Fugu Th-POK cDNA was composed of 1901. bp, with a 75. bp 5'-UTR, a 131. bp 3'-UTR, and a 1692. bp open reading frame which translates into a peptide of 564 amino acid residues. The deduced Fugu Th-POK protein contained a BTB/POZ domain, Krüppel motif (H/C linker) and Krüppel-like zinc finger DNA binding domain with C2H2 structure. The homology analysis of Fugu Th-POK (ZBTB7B) with other known ZBTB7 members (ZBTB7A, 7C) showed low identity, and the phylogenetic tree analysis showed the Fugu Th-POK clustered with the mammalian Th-POK, away from other ZBTB7 members. The analysis of transcriptional control region of Th-POK gene suggested that the 5'-flanking region and intron 1 include numerous canonical binding motifs for transcription factors regulating T cell development. The genomic organization of the Fugu Th-POK gene was composed of three exons and two introns, and its structure was identical to that of its human counterpart. Comparison of the Fugu and human genomes showed that high levels of conserved synteny existed around the Th-POK gene. The high expression of the Fugu Th-POK gene in unstimulated tissues was seen in head kidney, muscle, skin and gills. Moreover, the expression of the Fugu Th-POK gene in thymic cells was increased by LPS, polyI:C and PHA stimulation.
Comparative Biochemistry and Physiology. Part B, Biochemistry & Molecular Biology
https://doi.org/10.1016/j.cbpb.2012.11.006
Takifugu
Tetraodontiformes
5' Flanking Region
5' Untranslated Regions
Head Kidney
Synteny
Takifugu rubripes
Th-POK
Transcriptional analysis
Nagamine, R., Korenaga, H., Sakai, M., Secombes, C. J., & Kono, T. (2013). Characterization and expression analysis of Th-POK from the Japanese pufferfish, Takifugu rubripes. Comparative Biochemistry and Physiology. Part B, Biochemistry & Molecular Biology, 164(2), 124-132. https://doi.org/10.1016/j.cbpb.2012.11.006
Characterization and expression analysis of Th-POK from the Japanese pufferfish, Takifugu rubripes. / Nagamine, Ryusuke; Korenaga, Hiroki; Sakai, Masahiro; Secombes, Christopher J.; Kono, Tomoya.
In: Comparative Biochemistry and Physiology. Part B, Biochemistry & Molecular Biology, Vol. 164, No. 2, 02.2013, p. 124-132.
Nagamine, R, Korenaga, H, Sakai, M, Secombes, CJ & Kono, T 2013, 'Characterization and expression analysis of Th-POK from the Japanese pufferfish, Takifugu rubripes', Comparative Biochemistry and Physiology. Part B, Biochemistry & Molecular Biology, vol. 164, no. 2, pp. 124-132. https://doi.org/10.1016/j.cbpb.2012.11.006
Nagamine R, Korenaga H, Sakai M, Secombes CJ, Kono T. Characterization and expression analysis of Th-POK from the Japanese pufferfish, Takifugu rubripes. Comparative Biochemistry and Physiology. Part B, Biochemistry & Molecular Biology. 2013 Feb;164(2):124-132. https://doi.org/10.1016/j.cbpb.2012.11.006
Nagamine, Ryusuke ; Korenaga, Hiroki ; Sakai, Masahiro ; Secombes, Christopher J. ; Kono, Tomoya. / Characterization and expression analysis of Th-POK from the Japanese pufferfish, Takifugu rubripes. In: Comparative Biochemistry and Physiology. Part B, Biochemistry & Molecular Biology. 2013 ; Vol. 164, No. 2. pp. 124-132.
@article{09266cdef8dd4436a851968fae2e4ce9,
title = "Characterization and expression analysis of Th-POK from the Japanese pufferfish, Takifugu rubripes",
abstract = "In fish, T cell lineage commitment has not been studied, although there are reports related to CD4 and CD8 positive cells. This study describes the cloning and analysis of a master regulator involved in this process, the Th-POK gene in Japanese pufferfish, Takifugu rubripes. The Fugu Th-POK cDNA was composed of 1901. bp, with a 75. bp 5'-UTR, a 131. bp 3'-UTR, and a 1692. bp open reading frame which translates into a peptide of 564 amino acid residues. The deduced Fugu Th-POK protein contained a BTB/POZ domain, Kr{\"u}ppel motif (H/C linker) and Kr{\"u}ppel-like zinc finger DNA binding domain with C2H2 structure. The homology analysis of Fugu Th-POK (ZBTB7B) with other known ZBTB7 members (ZBTB7A, 7C) showed low identity, and the phylogenetic tree analysis showed the Fugu Th-POK clustered with the mammalian Th-POK, away from other ZBTB7 members. The analysis of transcriptional control region of Th-POK gene suggested that the 5'-flanking region and intron 1 include numerous canonical binding motifs for transcription factors regulating T cell development. The genomic organization of the Fugu Th-POK gene was composed of three exons and two introns, and its structure was identical to that of its human counterpart. Comparison of the Fugu and human genomes showed that high levels of conserved synteny existed around the Th-POK gene. The high expression of the Fugu Th-POK gene in unstimulated tissues was seen in head kidney, muscle, skin and gills. Moreover, the expression of the Fugu Th-POK gene in thymic cells was increased by LPS, polyI:C and PHA stimulation.",
keywords = "Structural analysis, Synteny, Takifugu rubripes, Th-POK, Transcriptional analysis",
author = "Ryusuke Nagamine and Hiroki Korenaga and Masahiro Sakai and Secombes, {Christopher J.} and Tomoya Kono",
note = "Acknowledgments This work was supported financially by the Program "Improvement of Research Environment for Young Researchers" from the Japanese Ministry of Education, Culture, Sports, Science and Technology, a Grant-in-Aid for Young Scientists (23780199) and a grant for Scientific Research on Priority Areas from the University of Miyazaki.",
doi = "10.1016/j.cbpb.2012.11.006",
journal = "Comparative Biochemistry and Physiology. Part B, Biochemistry & Molecular Biology",
T1 - Characterization and expression analysis of Th-POK from the Japanese pufferfish, Takifugu rubripes
AU - Nagamine, Ryusuke
AU - Korenaga, Hiroki
AU - Sakai, Masahiro
AU - Secombes, Christopher J.
AU - Kono, Tomoya
N1 - Acknowledgments This work was supported financially by the Program "Improvement of Research Environment for Young Researchers" from the Japanese Ministry of Education, Culture, Sports, Science and Technology, a Grant-in-Aid for Young Scientists (23780199) and a grant for Scientific Research on Priority Areas from the University of Miyazaki.
N2 - In fish, T cell lineage commitment has not been studied, although there are reports related to CD4 and CD8 positive cells. This study describes the cloning and analysis of a master regulator involved in this process, the Th-POK gene in Japanese pufferfish, Takifugu rubripes. The Fugu Th-POK cDNA was composed of 1901. bp, with a 75. bp 5'-UTR, a 131. bp 3'-UTR, and a 1692. bp open reading frame which translates into a peptide of 564 amino acid residues. The deduced Fugu Th-POK protein contained a BTB/POZ domain, Krüppel motif (H/C linker) and Krüppel-like zinc finger DNA binding domain with C2H2 structure. The homology analysis of Fugu Th-POK (ZBTB7B) with other known ZBTB7 members (ZBTB7A, 7C) showed low identity, and the phylogenetic tree analysis showed the Fugu Th-POK clustered with the mammalian Th-POK, away from other ZBTB7 members. The analysis of transcriptional control region of Th-POK gene suggested that the 5'-flanking region and intron 1 include numerous canonical binding motifs for transcription factors regulating T cell development. The genomic organization of the Fugu Th-POK gene was composed of three exons and two introns, and its structure was identical to that of its human counterpart. Comparison of the Fugu and human genomes showed that high levels of conserved synteny existed around the Th-POK gene. The high expression of the Fugu Th-POK gene in unstimulated tissues was seen in head kidney, muscle, skin and gills. Moreover, the expression of the Fugu Th-POK gene in thymic cells was increased by LPS, polyI:C and PHA stimulation.
AB - In fish, T cell lineage commitment has not been studied, although there are reports related to CD4 and CD8 positive cells. This study describes the cloning and analysis of a master regulator involved in this process, the Th-POK gene in Japanese pufferfish, Takifugu rubripes. The Fugu Th-POK cDNA was composed of 1901. bp, with a 75. bp 5'-UTR, a 131. bp 3'-UTR, and a 1692. bp open reading frame which translates into a peptide of 564 amino acid residues. The deduced Fugu Th-POK protein contained a BTB/POZ domain, Krüppel motif (H/C linker) and Krüppel-like zinc finger DNA binding domain with C2H2 structure. The homology analysis of Fugu Th-POK (ZBTB7B) with other known ZBTB7 members (ZBTB7A, 7C) showed low identity, and the phylogenetic tree analysis showed the Fugu Th-POK clustered with the mammalian Th-POK, away from other ZBTB7 members. The analysis of transcriptional control region of Th-POK gene suggested that the 5'-flanking region and intron 1 include numerous canonical binding motifs for transcription factors regulating T cell development. The genomic organization of the Fugu Th-POK gene was composed of three exons and two introns, and its structure was identical to that of its human counterpart. Comparison of the Fugu and human genomes showed that high levels of conserved synteny existed around the Th-POK gene. The high expression of the Fugu Th-POK gene in unstimulated tissues was seen in head kidney, muscle, skin and gills. Moreover, the expression of the Fugu Th-POK gene in thymic cells was increased by LPS, polyI:C and PHA stimulation.
KW - Structural analysis
KW - Synteny
KW - Takifugu rubripes
KW - Th-POK
KW - Transcriptional analysis
U2 - 10.1016/j.cbpb.2012.11.006
DO - 10.1016/j.cbpb.2012.11.006
JO - Comparative Biochemistry and Physiology. Part B, Biochemistry & Molecular Biology
JF - Comparative Biochemistry and Physiology. Part B, Biochemistry & Molecular Biology
10.1016/j.cbpb.2012.11.006Licence: Unspecified


I serve as an Agile Transformation Lead for CapTech's Denver Office and National Clients. I have a passion for servant leadership and developmental management techniques with more than 10 years of Agile experience working directly with senior, government, and diverse professional teams; co-located and globally-distributed. My coaching approach is industry and domain agnostic focusing on continuous improvements within culture, people, processes, and tooling to ensure a seamless, lasting transformation that leads to long term success.


text:
Our first blog
Natalie Snedden
The Story Behind Our Cold-Weather Shelter, pt 2
In a past newsletter we talked about what it takes for a volunteer organization with no office or physical facilities of its own to open an overnight shelter during the cold months of winter. A Home For Everyone In DeKalb relies on its community partners to help deliver on its mission to shelter unhoused individuals in DeKalb County. One partner who stepped up to the need to provide a safe and warm place during cold nights was Decatur First United Methodist Church (DFUMC).
Reverend Laura Rappold, Associate Pastor of Missions at DFUMC spoke about it this way, "When we were approached about using our gym for the warming shelter, we knew that it was something we would like to make happen, but that there were also a lot of factors to consider when making the decision."
A need so simple as offering shelter can become a complicated effort when it overlaps with other commitments needing some of the same resources. "Decatur First has several groups (both community groups and groups inside the church) who use this space regularly," says Rev, Rappold, "so we needed to speak with them about their willingness and ability to be flexible with the gym use on nights when it was under 35 degrees. We also needed the approval and support of our Engage Team, church council, church staff, and insurance company!"
While waiting for an answer, A Home moved forward with its work of gathering and organizing supplies, setting up a schedule to show to volunteers, and keeping its board members informed of the planning. DFUMC connected with the stakeholders at their church. "We were able to talk with each of these teams and all of them were in favor of housing our neighbors in need overnight, said Rev. Rappold."
The help did not end with the commitment to make the gym available. "We needed to do a few facilities things, such as making sure the heat was working properly, the bathrooms were functioning well, and that there was adequate storage space for AHFEID's supplies," said Rev. Rappold. "Our amazing facilities team took care of all of this and more. Additionally, our staff members have trained the volunteers in Safe Sanctuaries, which is a set of policies and procedures that reduces the risk of abuse in the Church. Several members of our staff met regularly with two of our lay volunteers, along with Shelly and Ellen from A Home, to make sure that we were thinking through all of the necessary details before opening up."
A Home values its community partners, knowing that it takes collaboration to achieve its mission. The churches throughout Decatur are part of a support network that are in constant communication regarding needs and resources to help with the issue of homelessness in DeKalb. Rev. Rappold sums up her church's commitment, "Our congregation has been very supportive of this ministry- they have donated hundreds of items for hygiene kits, signed up to bring meals, brought warm clothes, and volunteered to stay overnight. We could not host this shelter without their generous support."
It truly takes a village to make A Home.
2023 Point In Time Homeless Census
Just Say Yes
Won't you help us continue to do good in the community?
A volunteer-led 501(c)(3) tax-exempt organization that coordinates emergency cold weather shelters in churches
and provides rapid rehousing assistance for those experiencing homelessness in DeKalb County (Georgia)
EMAIL US | DONATE NOW | SUBSCRIBE TO OUR NEWSLETTER
© 2021 A Home For Everyone in DeKalb


Staffordshire University has teamed up with leading Cloud Services Provider, ANS Group to become the first University in the UK to deploy an AI-driven coach and support assistant via intelligent Chatbot technology.
Using Microsoft Azure as a foundation, the university has teamed up with ANS to create an intuitive Digital Coach to provide key information and support to students ranging from course timetables, campus facilities and extra-curricular activities.
Aside from responding to popular questions, the Digital Coach, which has since been named, 'Beacon', will be used as a crucial tool to build a relationship with students and identify any at-risk individuals who may feel unhappy or unsettled, and provide them with support and guidance.
Andrew Proctor, Director of Digital Services at Staffordshire University commented, "The vast majority of our students have a perpetual online presence across multiple devices, and a strong preference for on-demand, instant responses to queries. Previously responding to each individual query took time but by introducing Beacon, students can interact and get responses instantaneously any hour of the day or night. Not only this, but Beacon also gets in touch with students to provide them with personalised, timely and relevant information and nudge them towards actions and activities that will maximise their experience and attainment.
Students will be able to access the Digital Coach from their mobile phones interacting via text or voice conversation.


text:
""" Presenter json views, Project page functions """

# Duplicate code
# pylint: disable=R0801

from django.db import transaction
from app.presenter.views.helpers import ViewUrlGenerator
from app.presenter.schemas import BluesteelSchemas
from app.logic.benchmark.models.BenchmarkDefinitionModel import BenchmarkDefinitionEntry
from app.logic.bluesteel.models.BluesteelProjectModel import BluesteelProjectEntry
from app.logic.bluesteel.controllers.BluesteelProjectController import BluesteelProjectController
from app.logic.bluesteel.controllers.BluesteelLayoutController import BluesteelLayoutController
from app.logic.bluesteel.models.BluesteelLayoutModel import BluesteelLayoutEntry
from app.logic.gitrepo.models.GitBranchModel import GitBranchEntry
from app.logic.commandrepo.models.CommandSetModel import CommandSetEntry
from app.logic.commandrepo.controllers.CommandController import CommandController
from app.logic.httpcommon import res
from app.logic.httpcommon import val

def filter_folder_path(path):
    """ This function will filter out \\..\\ or \\ at the begining. Also if path becomes empty, . will be used """
    local_search_path = path
    local_search_path = local_search_path.replace('\\..\\', '\\')
    local_search_path = local_search_path.replace('/../', '/')
    if local_search_path.startswith('/') or local_search_path.startswith('\\'):
        local_search_path = local_search_path[1:]
    if not local_search_path:
        local_search_path = '.'
    return local_search_path

@transaction.atomic
def save_project(request, project_id):
    """ Save project properties """
    if request.method != 'POST':
        return res.get_only_post_allowed({})

    project_entry = BluesteelProjectEntry.objects.filter(id=project_id).first()
    if project_entry is None:
        return res.get_response(404, 'Bluesteel project not found', {})

    (json_valid, post_info) = val.validate_json_string(request.body)
    if not json_valid:
        return res.get_json_parser_failed({})

    (obj_validated, val_resp_obj) = val.validate_obj_schema(post_info, BluesteelSchemas.SAVE_PROJECT)

    if not obj_validated:
        return res.get_schema_failed(val_resp_obj)

    CommandSetEntry.objects.filter(group=project_entry.command_group).delete()

    local_search_path = filter_folder_path(val_resp_obj['git_project_folder_search_path'])

    project_entry.name = val_resp_obj['name']
    project_entry.git_project_folder_search_path = local_search_path
    project_entry.save()

    CommandController.add_full_command_set(project_entry.command_group, 'CLONE', 0, val_resp_obj['clone'])
    CommandController.add_full_command_set(project_entry.command_group, 'FETCH', 1, val_resp_obj['fetch'])

    return res.get_response(200, 'Project saved', {})

@transaction.atomic
def delete_project(request, project_id):
    """ Delete project on a layout """
    if request.method != 'POST':
        return res.get_only_post_allowed({})

    project_entry = BluesteelProjectEntry.objects.filter(id=project_id).first()
    if project_entry is None:
        return res.get_response(404, 'Bluesteel project not found', {})

    layout_id = project_entry.layout.id
    project_entry.layout.active = False
    project_entry.layout.save()

    BluesteelProjectController.delete_project(project_entry)
    BluesteelLayoutController.sort_layout_projects_by_order(project_entry.layout)

    obj = {}
    obj['redirect'] = ViewUrlGenerator.get_layout_edit_url(layout_id)
    return res.get_response(200, 'Project deleted', obj)

def get_project_list_from_layout(request, layout_id):
    """ Return project ids, names and get-branch-list url """
    if request.method != 'GET':
        return res.get_only_get_allowed({})

    layout = BluesteelLayoutEntry.objects.filter(id=layout_id).first()
    if layout is None:
        return res.get_response(400, 'Layout not found', {})

    project_entries = BluesteelProjectEntry.objects.filter(layout=layout).order_by('order')

    projects = []
    for project in project_entries:
        obj = {}
        obj['id'] = project.id
        obj['name'] = project.name
        obj['url'] = {}
        obj['url']['project_branch_list'] = ViewUrlGenerator.get_project_branch_list_url(project.git_project.id)
        obj['url']['project_definition_list'] = ViewUrlGenerator.get_project_definition_list_url(project.id)
        projects.append(obj)

    data = {}
    data['projects'] = projects

    return res.get_response(200, 'Projects info found', data)

def get_branch_names_from_project(request, project_id):
    """ Return branch ids, names """
    if request.method != 'GET':
        return res.get_only_get_allowed({})

    project = BluesteelProjectEntry.objects.filter(id=project_id).first()

    if project is None:
        return res.get_response(400, 'Project not found', {})

    branch_entries = GitBranchEntry.objects.filter(project__id=project.git_project.id).order_by('order')

    branches = []
    for branch in branch_entries:
        obj = {}
        obj['id'] = branch.id
        obj['name'] = branch.name
        branches.append(obj)

    data = {}
    data['branches'] = branches

    return res.get_response(200, 'Project branches info found', data)

def get_definitions_from_project(request, project_id):
    """ Return Benchmark Definition ids, names """
    if request.method != 'GET':
        return res.get_only_get_allowed({})

    def_entries = BenchmarkDefinitionEntry.objects.filter(project__id=project_id, active=True).order_by('name')

    definitions = []
    for definition in def_entries:
        obj = {}
        obj['id'] = definition.id
        obj['name'] = definition.name
        obj['url'] = {}
        obj['url']['worker_list'] = ViewUrlGenerator.get_benchmark_definition_workers_url(definition.id)
        definitions.append(obj)

    data = {}
    data['definitions'] = definitions

    return res.get_response(200, 'Project definitions info found', data)


The following list includes many resources for small business owners and entrepreneurs. Be sure to review them - many of these organizations offer grants, loans, and business education.
Shop Shaker is a marketing initiative to encourage businesses and residents to spend their dollars locally. Contact the Economic Development Department at 216-491-1335 with questions and to get your Shop Shaker window cling to prominently display on your storefront window.
The Shaker Heights Development Corporation is a community improvement 501(c)( 3) nonprofit corporation created to help the City realize its strong vision for the future.
The City of Shaker Heights has been an active member of the Heights Hillcrest Regional Chamber of Commerce (HRCC) since 1949. Membership benefits include networking events, professional development, health insurance, business referrals, energy savings and discounted office supplies.
Advertise your business in Shaker Life magazine, which is published quarterly and distributed free to Shaker's 40,000 residents.
The Dealership, a former car dealership where deals are done, networks are created and collaborations are forged, is a shared office entrepreneurial hub at 3558 Lee Road. The Shaker Heights Development Corporation operates the space where individuals and small businesses can rent an office, join the co-work space and come to the many events and programs that will be held there.
The Dealership is easily accessible by bike, public transit and car. For more information, email the Shaker Heights Development Corporation or call at 216-491-1425.
Since its founding on July 30, 1953, the U.S. Small Business Administration has delivered millions of loans, loan guarantees, contracts, counseling sessions, and other forms of assistance to small businesses. A loan program created in partnership with Cuyahoga County and the Small Business Administration (SBA) is now available to Shaker Heights businesses that qualify for an SBA loan. For help determining the best incentive program for your business needs, email the Economic Development Department or call at 216-491-1335.
The Ohio Small Business Development Centers (SBDC) Network is the premier technical assistance program for Ohio's small businesses.
The Economic Community Development Institute (ECDI) supports loans for new and established businesses, including SBA loans. Many of their other services can help develop a new business into a loan-ready client. ECDI's loans range from $500 to $350,000 and show a large variety in their clients and the uses for the loans. Equipment-based loans are currently very popular, but others use the funds for entrepreneurial ventures and other operating costs. ECDI provides the tools, technical assistance and support for businesses to succeed.
The Hebrew Free Loan Association makes interest free loans to Northeast Ohioans.
Goldman Sachs 10,000 Small Businesses at Cuyahoga Community College is a practical business management education program that helps you develop the skills you need to grow your company. If you are selected to participate, you also will receive a series of one-on-one business advising sessions from dedicated professionals to help develop a tailored plan for growth.
Cleveland Culinary Launch and Kitchen is a shared kitchen and food business incubator in Cleveland, Ohio.


when we were in Roatan and have tried to find the ingredients here to make them authentically….we did bring some beans back with us but have almost used them all so we will be searching for a red refried bean recipe that will have the same wonderful flavors.
"…….Ok I'll see if I can get Angela to take me down there this week….great excuse to go get a baleada too….but it is downtown Coxen Hole on a dirt side road….a real hole in the wall….we only found it because we know a local….lucky us!!
Also the beans here are to die for…they are red and come in a plastic package….name brand Natura's….even Gannon now eats beans…..Sean's trying to research where to get them….sounds like they are going to have all the ones they too brought back gone before I get home….I will bring more!!!!
A baleada is Honudura's version of a breakfast burrito – kind of. Key to remember is different ingredients make different tasting baleadas. Since some of the local ingredients are not readily available in the US (or at least not in the traditional Honduran version) you have to make do with what you have, substitutes noted.
Scramble the eggs and melt cheese on top.
Spread warm refried beans on tortilla and then add eggs, Crema, and avocado. spread other ingredients fold in half.
Let me just say, I absolutely love your site. I am now following it VERY CLOSELY..LOL.
Amazing food and posts, as always.
Oh – you're too kind! Glad you enjoy our bantering and thanks for letting us know!
You're making my mouth water. Can't wait to get back to Roatan for our breakfast treat!
Keep me posted if you find those red beans. I've looked for them here also, to no avail. They must be a Honduran exclusive!
I wouldn't be imaginative enough to come up with such a great recipe!
Great photos, Wanda! Can't wait to get back to Roatan and try these. I'm thinking winter of 2010 will see my return. Winter in MN without it is too long.
That's an interesting recipe and suggestion for breakfast. I like saying it…"Baleada" – fun!
Yum! Looks so good!I really love your posts!
Wow! I love your site! beautiful pictures and great recipes.
These look so great! I've never had red refried beans before. Will definitely keep my eye out for them!
Wow! Brought back memories of Tegucigalpa. I am lucky to live in Houston where there is a large Salvadoreno population. Thanks for the post.
Looks yummy. I love anything with avocado.
That looks and sounds truly delicious!!
oh my that looks tasty!
I love all flavors and all cuisines from different cultures. This looks really so delicious!
The photos are stunning. Thank you Emma and Wanda.
Such a delicious and filling way to start the day.Definately gotta try these next time.
The crema is unlike that we have in North America. You will hear it referred to as mantequlla blanca (white butter) or mantequilla crema.
Thanks for the info Jenn we will give it a try….
Was just Googling Honduran mantequilla (looking for it here in MN) and came across this blog! It's been a year and a half since I got back from my foreign exchange to Honduras and I crave baleadas every day– they aren't just a breakfast food! You can eat them for lunch or dinner, and handmade flour tortillas and refried beans are better than anything you could get in a package.
this brand sell both the cheese and the crema!
Wonderful – thank you for passing along this info.!


Edit the thread title to 2012-06-15 - Main Street Armory - Rochester, NY or cyberdrummer will spank us all.
BITS remains, LNF and TITL added, TDEN stays. I'd call that a great setlist.
Adding up the track times in my head, with estimates, that looks like a 110 minute set! AWESOME!
Nice setlist, by the way.
Hope they swap out TDEN on the B set, cuz I don't want to listen to it 3 consecutive nights in a row. Same for War/Test, but I think the couplet will remain firm in both setlists.
Not a big fan of TDEN, FIL, TTSTA or WIMH. I'm sure they will be ok when I'm standing in the 8th row watching. Hope they dont show the animated video for TDEN. I never liked that. They cant please us all and I'm sure we will like the show no matter what they play!
NOTE: The interlude in OTBOA was not planned (at least it wasn't supposed to be so long). John Petrucci's guitar was not working so they improvised and JR and MM did a mellow jam. It was beautiful!!!
EDIT: To clarify, SURROUNDED was played tonight.
LOL I didn't notice that part of it. It was really great - were you close enough to see what happened?
on setlist.fm and didn't have a couple songs I remembered.
Wow, an impromptu jam... Would have loved to hear it! Did you see many cameras/cellphones shooting videos?
Yeah, I am also wondering how security is this time around.
I never saw anyone make an effort to stop the process.
I really hope Metropolis sticks.
Me too. It seems a lot of people upload their videos the next day after the show, rather than trying to do it the same night after getting back from the show. Understandable, but I'm impatient!
I will say, unfortunately, that the email I received containing my itinerary for the Cleveland concert Meet and Greet said, "Absolutely NO cameras of any kind, including cell phone cameras, at the meet and greet AND concert."
Also, someone changed setlist.fm and said they did not play Wait For Sleep.
You can't take a pic with the band anymore?
No, you do get the picture with the band, but they take it. You aren't allowed, for example, to take video or pictures while in line or getting items signed.
Nothing yet on youtube. Weird.
minus TDEN and I'd agree with you!
I really hope it doesn't. It's not as if they haven't played enough already on previous tours. I'd love to see them give that one and PMU a complete rest from a tour (as in, not played at all).
Actually I understand why they'd say that about the MnG since it will slow the process down a huge amount. But that would be pretty lame during the concert. Personally, I'd go into the concert with your phone and/or camera ready since security is rarely that strict - especially with phone cameras.
I don't believe they are opening the first few shows on this leg of the tour. I saw someone on MP.com ask how the opener "Dark Day Sunday" was.
I'm surprised TWIMH and TTTSTA seems to be generally not liked that much. I thought I was the only one.
It seems to me those two songs get too much play. I don't think I've ever heard About to Crash live but this will be maybe the third time I've seen those two...unless they (hopefully) switch them out.
Extremely unlikely, at least on this leg. I agree with you, for all that matters. About To Crash is terribly overlooked by the band.
Great setlist. I can't wait to hear a bootleg of this concert or another with the same set.
I know. Surely someone managed to get some video. Like, ANYTHING.
Awesome set. I really hope Metropolis sticks, because I'm dying to see that one live.
Honestly, I'm still kind of glad I looked at it. I'd still be holding out for The Glass Prison or In the Name of God, so now I can deal with the disappointment before I get there.
Very nice! Good to see This Is the Life and Lost Not Forgotten both finally get played.
And I hope Metropolis stays for the whole summer. It being arguably their definitive live song, and this being Mike Mangini's first tour with the band, it makes sense to play it a lot to see the treatment he gives it. Plus, it would be nice to finally get a whole version of it on an official live DVD with just the five of them playing it.


text:
Q: Java mail create DSN (Delivered Status Notification) I want to create DSN (delivered status notification) and send back to sender. I use MimeMulitPartReport and add 3 part of body. However, it does not work. In the recipient side, it does not show a human readable message and DSN information. I can't figure out, what's wrong in my code.
Thank you

A: I use JavaMail 1.4.5 with DSN extension http://www.oracle.com/technetwork/java/javamail/index-141777.html :
private MimeMessage dsnEmail() throws MessagingException {
    MimeMessage msg = new MimeMessage(mailSession);
    MultipartReport multipart = new MultipartReport(
            HUMAN_READABLE_MSG,
            new DeliveryStatus(),
            originalEmail
    );
    msg.setContent(multipart);
    msg.setSubject("Delivery Status Notification (failure)");
    msg.setRecipient(Message.RecipientType.TO, originalEmail.getSender());
    return msg;
}

with this maven import :
<dependency>
    <groupId>com.sun.mail</groupId>
    <artifactId>dsn</artifactId>
    <version>1.4.5</version>
</dependency>

I hope it helps


text:
Tag Archives: appear
August 7, 2022 Business
How One Can Make Your Nasa Appear Like One Million Bucks
In the 1960s, for example, NASA scientists developed a plastic coated with a metallic reflecting agent. Learn extra about cool NASA improvements on this interactive animation from Discovery Channel. ' stands for zero or more characters (see section 4.2.3). For a wildcard search, the record query form returns all phrases in the database that match the required pattern, along with the frequencies of those words within the database. The person can choose the return of solely particular journals within the "Filter" section of the query kind. As talked about in section 2.1.1 and in Structure, one necessary side of the Adverts search system is the record of synonyms. The listing query page (linked to the phrases "Authors", "Title Words", and "Text Words" above the corresponding entry fields on the main question kind) permits the person to seek out synonym groups and phrases in the database. The relationship attributes 'equal' and 'relevance' are used to look without and with synonym alternative respectively. The databases supported via this interface are listed in desk 2, search fields supported are listed in table 3, supported relationship attributes are listed in desk four and the supported structure attributes are listed in table 5. Desk 6 lists the supported report codecs and desk 7 exhibits the supported report syntax.
For all geometry instances the following geometric attributes are set. This permits a user to see at a look which new issues for this set of journals have been published. In order to confirm the suitability of these strategies, they've been applied to 2 totally different sorts of datasets: on the one side, measurement knowledge recorded below real situations on Martian surface, and, on the opposite side, a set of take a look at measurements theoretically unaffected by external perturbations. Basically, it can be said that observations over a larger range of photo voltaic intensities (e.g., for more than one order of magnitude) increase the likeliness to differentiate between the two circumstances by observing the sunrise surface temperatures. Thermoelectric energy generation varies with many elements (e.g., room temperature, physique temp, area of contact, the stress of contact). One instance arises in supplies science when break up Hopkinson pressure bar experiments are used to calibrate circulation stress models (Sjue et al.,, 2019), however solely after the measured strains are transformed to stress-strain curves (Grey III,, 2000). When accomplished outdoors of the statistical framework, this course of can introduce bias or conceal uncertainty.
One continuously used example is a hyperlink that returns all articles written by a selected person. This sort of interface permits customers to hyperlink to the Adverts for a complete listing of references on a specific subject. In order to allow completely different journals to make use of the Ads system for looking out their references, journal particular pages are available. In each case, bibstem is the abbreviation for the chosen journal. Astrophysical Journal. These forms are available for linking by anybody. When you execute a types query after retrieving the type through this service, the right method line will already be in place. Asphalt does not have a melting level, but at temperatures of over one hundred degrees Fahrenheit, it can begin to behave more like a liquid than a stable. They'll work exhausting to deliver a aim to fruition however may not be prepared to sacrifice their personal lives. They have a need to succeed within the typical sense however aren't keen to examine their ethics at the door. It is meant for users who don't have entry to web browsers. Many customers use this to provide an up-to-date publication list for themselves by encoding an creator query into an embedded query.
These document formats are the identical as in the short results record. The references are identified by way of the bibliographic codes (or bibcodes for short) talked about above and described intimately in Information. Please use solely links of the form described above to directly access abstracts and articles. In the total abstract display as described above. As output, temporary and full records are supported. In the HTML file syntax, hyperlinks to other supported Adverts inner and external knowledge sources are included. The supported report syntax is both SUTRS (Easy Unstructured Textual content File Syntax), HTML (HyperText Markup Language), or the Ads tagged format. Both abstracts and articles will be accessed instantly although HTML hyperlinks. Embedded queries can be utilized to construct hyperlinks that return the outcomes of a pre-formulated query. Default return is 'form'. If raw return is requested, the unique doc is returned without any processing. If textual content return is requested, only the text of the question result is returned, formatted as if viewed by a WWW browser.


Before we move forward, full throttle in Saul's holy collision, can I point you back to these words from Saul, watching Stephen's stoning.
"The way I picture him in this moment, turns out to be worlds apart from the actual.
When Saul comes on the scene this is exactly how I see him. Puffed up, larger than real life, red faced angry, and in the words of my Sweet Granny, "meaner than a striped (pronounced stripe-ed) snake." Striking fear in hearts.
A force to be reckoned with. Saul, meaning masculine. Everything about this sends a shiver of fear running down my spine.
In actuality, Saul is a small man. Small in stature, estimated to be somewhere between four feet six and four feet ten. In fact, this once fire breathing, larger than life enemy, was shorter than I am.
Take away the fear, I could have looked down on him.
A pointed nose, eyebrows that met in the middle of his forehead, and knobby knees.
Somewhere along Saul's transformation, his name changes to Paul, which, in the Greek language, means small in stature.
The irony does not pass me by.
Not only is Saul physically small, through his transformation, he becomes a lowly, humble servant of Jesus.
Saul goes low, decreases. Christ grows large in him and through him. What an amazing transformation!
When I have come through my darkest, most broken seasons, I come through more convicted. More refined. My season of pit dwelling transformed me in ways I never would or could have imagined. We see this in Saul.
Not much time passes, and Saul is now on the other side, the receiving end of persecution.
Saul escapes, arrives in Jerusalem, attempting to meet with the believers. His former way of life has proceeded him. The believers are afraid, not believing Saul has changed.
Often our past sins are not without consequence.
A fellow, by the name of Barnabas takes him under his wing. Presents Saul to the believers and backs his story of transformation. Barnabas also tells them, he, himself, had witnessed Saul preaching boldly in the name of Jesus in Damascus.
Barnabas, well known and trusted, stands up for Paul. Barnabas becomes Saul's encourager, and later his mentor.
Once again Saul's life is threatened. The believers deliver Saul to safety by taking him down to Caesarea, sending him away to Tarsus, his hometown.
For a period of time the church experienced peace throughout Judea, Galilee, and Samaria, becoming stronger as the believers lived in fear of the Lord.
The persecutor becomes the persecuted. Chased from this day forward, never giving up for the name of Jesus.
No one is too far gone that God cannot turn them around!
Please sign up and receive my daily emails. You will not want to miss one step of this Journey to Action. Coming tomorrow: Day Twenty: Peter Heals the Lame and Raises the Dead! In the event you missed yesterday, you can find it here.
Beautiful Tammy! I had no idea about the stature of Saul// Paul but have always stood amazed at his complete transformation. Thank you for reminding us that no one is "too far gone" for Jesus to transform them.
Paul does give us hope! I was surprised when I learned that myself Tammy!
Just finished the Beth Moore, Entrusted study. So true, no one is too far gone for Jesus. Thanks for sharing.
Thank you Robyn for stopping by!
A lot to chew on in this post. The enemy certainly does seem larger than life sometimes, this is a good reminder to cut him down to size.
Yes he does! And I often forget the power I have!
I love that we know so much about Paul and his transformation. It brings hope for me about myself and others. Thanks for writing this.
So much THIS: "When I have come through my darkest, most broken seasons, I come through more convicted. More refined. My season of pit dwelling transformed me in ways I never would or could have imagined. We see this in Saul." Hope indeed changes things!
Thank you Tara for your encouragement!
Today is catch up day. I won't comment on every post, but I'm here!


Perhaps the worst trend in recent gaming culture is this idea that only certain types of games really count as games. You'll hear "walking simulator" thrown out like a pejorative about games like Firewatch, as though every important game in our medium's history has level scores and swarms of enemies to kill with sick combos and headshots. Good gaming isn't and shouldn't be that exclusive, and Firewatch is a very good game.
Set in the Wyoming wilderness in the year 1989, Firewatch centers around Henry, a greiving husband running away from his wife's diagnosis of dementia to take a job as a fire lookout; Delilah, his unseen supervisor; and their summer long romance/murder investigation/flirtatous ruminations on the meaning of relationships. It's a wonderfully written, wonderfully stylized game that left some people cold with its decidedly curt ending, but I genuinely enjoyed it and thought it tapped into something most games don't have the ability to understand. There's a genuine sense of warmth and humanity on display here.
Also, it looks great and is just the right amount of challenging to not get in the way of its story, which is the primary attraction here. In a lot of ways, it's a more audacious and memorable game than some of the others here, but it's probably a little too short to be as great as it could have been.
Speaking of adventure games, here we are at the annual Are We Tired of Telltale Games yet discussion? I'm not, at least not yet, because despite the bizarre formula they've fallen into, there's not anyone else quite like them in the gaming landscape. This isn't Call of Duty or Assassin's Creed. No one else has really tried to bring back point and click adventure games like Telltale, and to this point, there's still some novelty in that.
Besides, good writing never goes out of style, and despite some confusing choices, I'd say their recent effort, Batman: a Telltale Series (or Telltale's Batman, or Batman, but Telltale This Time, or whatever we're calling it) is worth the time. I wrote about the first two episodes at release, but got caught up with others afterwards. I think perhaps Telltale made a mistake in making so much out of this being their continuity, a new spin on the Batman mythos, that for so much of it ending up being the same characters doing more or less the same thing. Given that this stuff has been around for more than 75 years, there's nothing wrong with that. I think that this game, despite its many strength, falters most when it tries to have its cake and eat it, too. The most prominent example of this design is how, sometime in episode 3, the game's cast just sort of stops expanding. It tries to tell a close, personal story with a cast of nearly two dozen characters, which is basically impossible, so the only thing left for the player is to face the same three or four enemies over and over again until it just sort of…stops.
That's a common comic book staple, sure, but when this game's excellent portrayals of the Joker, or Scarface, or Victor Zsasz show up for a few minutes, you're left wondering why you can't go hang out with them more instead of tangling with the nebulous, undefined Children of Arkham and whatever non-union equivalent of the Court of Owls nonsense they've worked up again.
Don't let me make it sound like this game isn't worth your time, however. The investigative stuff here is better than any Batman game before it has ever dreamed, and the conversations and overall storytelling style befits Telltale's well-established pedigree. This version of Gotham, too, feels like a synthesis of the towering Art Deco monoliths of the Animated Series and the glowering contemporary claustrophobia of the Nolan films, and everything in between. It's a truly excellent setting. Good enough to recommend, but perhaps not enough to love, which if you know my history with Batman, isn't that high of a bar.
The first two games on this list were, despite their flaws, very unique sorts of major games to see in 2016. Titanfall 2 is very much not, and despite that, I kind of loved it. The latest in the long line of gung-ho military shooters with ineffectual-looking combat and gravelly-voiced white dudes with jump packs, it's exactly the sort of game I tend to hate more and more these days. I haven't played a Call of Duty game since the first Black Ops, and I probably won't be changing that any time soon.
I had Titanfall for a bit in the halcyon days of the Xbox One, when nobody had released anything and nobody knew what was coming, and I found it charming. It had no campaign to speak of, which is generally why I play shooters at all anymore, but I liked the sense of forward momentum it had, and the titan fights were at least something new for the genre. Fast forward two and a half years and Respawn made themselves a proper game based on that endearing structure, and it ended up being pretty good. This game makes the very strong and good choice of having themed levels, which makes them stand out from one another very strongly. Not the *best* themed levels anyone made this year, but we'll see more of that later.
A lot has been made of this game's story, which is, of course, pure drivel. But it's drivel focused on the perspective of its two player characters, generic pilotman Jack Cooper, his foster Titan BT-7274, and their ragtag adventures fighting whatever generic evil corporation these games use, I forget. It works well enough, and BT is vaguely sociopathic enough to end up on the right side of the robot companion spectrum. More HK-47 than Claptrap.
Anyways, it's not a new sort of game, but it still has room for cleverness in it, and also you can fight giant robots with a sword. So, pretty good.
I've got to be honest here. There was a stretch this summer where I was pretty sure I wasn't even going to play this game. For all their insipid storytelling, labyrinthine plots and overbearing teenliness (especially recently), the Final Fantasy games have some of the highest points in the history of the medium. Square was making mature, interesting, emotional stories starring multi-faceted and diverse sets of characters since at least 1991, and their streak of games to round out last century stands as one of the strongest runs in any developer's history.
While it's true the series has declined since the advent of HD systems, it still has its moments. Overall, that's how I'd describe FFXV. The open-world system is perhaps a little misguided, the fighting isn't up to even the most recent games' admittedly mediocre par, and the characters are disappointingly skewed towards men (though if any series deserves the benefit of the doubt on that front, it's this one). I don't just mean the main party, but even most of the interesting side characters are men. Perhaps even worse than that, the only truly bad character in this game is a woman, and she's the first woman you meet in the game.
Yet, I still found myself at least temporarily enraptured by the way the four characters (listless Prince Noctis, bouncy Prompto, burly Gladiolus and mannered Ignis, aka the old anime standbys of Sad Boy, Good Boy, Strong Boy and Smart Boy) ricochet off one another. Whether traipsing through the wilds on a hunt for some random monster, sharing photos and hanging out at their makeshift campsite, or cruising down the distinctly American-looking highways, these four rad dudes genuinely enjoy one another's company, which is a nice swerve in the formula JRPGs (or Western ones) usually tend towards. It doesn't hurt that the opening and closing few hours are the game's strongest, and the villain this time around is one of the more well-written and performed antagonists the series has ever seen (I won't spoil anything other than to say that every Final Fantasy should have a relatively humanoid main villain, and every game that descended into incoherent muck has missed that boat completely).
Final Fantasy is never not at least interesting, is what I'll say, and there are times when this installment is the most interesting in fifteen years. There are other times when it's frustrating or even outright dumb, but strangely I found myself very forgiving of those parts. It's a game that you want to love, even if you don't.
Sequels are a tricky thing, especially when they were never planned for. After the runaway success of 2012's XCOM: Enemy Unknown, Maryland-based strategy game company Firaxis was left with an interesting dilemma: do we focus on story or gameplay? Strategy games, especially turn-based ones, are definitely more famous for the latter, often at the expense of the former, but the final act of the XCOM reboot all but erased the possibilty of a direct sequel.
So Firaxis did the smart thing and erased that continuity, setting the second game in an alternate timeline where the original XCOM (the group, not the game) was destroyed and survivors rallied together to form a resistance movement. It works because, again, this sort of game is generally not particularly narrative-heavy. So XCOM 2 differentiates itself from its predecessor mainly through changes in gameplay. A small stroke of genius is how those changes would be most impactful to veterans of the original game, forcing them to go through a larger learning curve than new players. Combat is faster, enemies are more aggressive and deadly, and most importantly, most fights have turn limits and timers, forcing the player to fight on the move and adopt more guerilla-style tactics.
One of the reboot's biggest strengths was the amount of personality your voiceless cipher soldiers could show, through a lot of dumb hats and silly nicknames, and that's on even greater display here.
All in all, the changes made to the XCOM formula, in my opinion the standard bearer for this entire sub-genre, are different enough to make this inevitable sequel feel a little less inevitable.
The Banner Saga: producer of quality gaming screenshots since 2014.
So that stuff I said about games like this not really being story-focused? Throw that out the window. I didn't get a chance to write about the original Banner Saga release, but given that this sequel is a direct continuation of the same overarching plotline, just consider this my thoughts on both games.
So The Banner Saga is, for lack of a better term, a strategy/adventure game. Starring a ever-growing, motley crew of humans and varl (a race of thousand-year-old horned giants) trying to outrun an army of…undead stone knights and some sort of apocalyptic shadow, these games are extremely unique. That uniqueness permeates every facet of their design. The animated art style, a reference to famed Disney animator Eyvind Earle made explicit through a major character, is truly unlike anything on the market, full of lush, colorful palletes and rich with Norse mythology. Speaking of mythology, the setting of these games is another incredibly unique thing to behold. The sun has stopped in the sky, ancient monsters roam the lands, and the major cities of the world are being erased, it's one of the few truly apocalyptic games I've ever played. It's no coincidence that this game plays like an older BioWare title, full of myth, history and ill portent, compressed to its best bits given that the three men responsible for it were all previously employed by the Albertan monolith.
The gameplay itself contributes even further to this sense of something that hasn't ever been done before, and it took me awhile to understand why. The Banner Saga is, without question, the most successful adaptation of old-school tabletop gaming that I've ever seen. Most major character development happens in minor scenes where text-boxes pop up and a series of seemingly irreleveant choices are presented to the player. How do you deal with your caravan coming across a set of refugees? Do you accept them into your ranks? Give them some of your already scarce supplies and send them on their way? Rob them? What you choose might not have an immediate impact, but these things coalesce and combine in such a way that every single player will have come across a different variation of the story. What I like most about it is that, for the most part, these choices aren't supposed to be "figured out" or part of some greater whole. They're gut choices, miniature morality plays for you to do what you think feels right at the time. Sometimes, doing the assertive or pragmatic thing pays off more down the road. There's no morality system to track what you've done, and there's no commanding voice on high telling you to stay on the straight and narrow. There's just survival.
This sort of bleak relativism is ingeniously woven into the gameplay as well, with your general supply count also being the only currency with which you can buy upgrades for your characters. So you have to choose between keeping your party members up to date or keeping the people you've been tasked with protecting alive. If you run out of supplies, people starve. If everyone starves, you lose. More importantly than losing, you fail. Similarly, in combat, a character's hit points and their attack attributes are one and the same, making someone closer to death weaker overall. This makes the combat perhaps a little too easy to break, but the second chapter does well to mitigate it by introducing a series of strange new enemies and mechanics to keep you on your toes.
Overall, I still can't really put my finger on what about these games I find so interesting. There's a distinct mood they inspire, a sort of perserverance in the face of true danger, a real sense of impending doom and people scrabbling around to escape it that permeates everything. It's a beautiful, elegiac game and the best Kickstarter game I've ever played, and I think anyone who considers themselves an RPG fan owes it to themselves to try it out.
As I said in my initial review, DOOM does a remarkable job of recapturing what made the original games not just first-person shooters, but the first-person shooters. The first ones. What I didn't really talk about in that first piece was how DOOM 1 and 2's gameplay really differentiated it. I focused more on the spirit of those legendary games more than the mechanics. In a recent part of his fantastic Game Maker's Toolkit series, Mark Brown goes into depth on what he (and Harvey Smith, praised be his name) call Orthogonal Unit Differentiation. Put in the simplest terms possible, this means that in-game units behave like chess pieces. They all exist within the same general mechanics, but have disparate, noticeable attributes that separate them from one another.
To put it even simpler: the enemies in DOOM have to be dealt with differently from one another. There's a pattern to defeating each and every one that can repeated, flipped around and combined in nearly infinite variations. As with the original Doom, every encounter forces the player to think more tactically, but in a way that doesn't feel as plodding or as drawn out as those sorts of shooters often can be. Knowing what order to attack in, what angles you can be attacked from, becomes almost second nature to any good Doom player. This new game perhaps isn't as lyrical or poetic in it simplicity, but it certainly comes closer to this core game mechanic than any shooter since at least the original Halo game in forcing the player into this dance macabre. In this way, more than any other, this new game lives up to its predecessors, and made it a unique, fresh and essential game for any FPS fan in 2016.
There may not be a more effective game-making tool than perspective. First person games have an inherent advantage at this sort of thing, be it properly framing the towering Citadel of Half-Life 2, the soaring cliffs of the original Halo or the oppressive depths of BioShock, FPS games are generally very good at communicating just where the player is in relation to the world around them. It's the biggest part of what we call "atmosphere," and until now, I would've said it was impossible for a side-scrolling platformer to be more atmospheric than any of those behemoths.
I forgot about Playdead. After achieving the unachievable in making the Xbox 360 an indie game haven with their 2010 masterwork LIMBO, one could have been forgiven in thinking the Danish darlings had seen their peak as game makers. Inside, which like its predecessor, focuses on the struggles of a silent young boy trying to escape from unimaginable horrors, is the most remarkable sort of spiritual successor in that it makes the original game irrelevant. Eschewing the first game's stark minimalist black and white color tone, Inside is a more evocative and colorful affair, though only slightly, and without any semblance of voice acting (or traditional "plot"), it's the sort of game that relies on world-building, environmental storytelling and the great lost art of mystery to get its point across.
I won't talk too much about that point, or the events that surround it; suffice it to say that the last 30 minutes or so of this game are as remarkable, shocking and relentlessly creative as I've ever experienced. It's just a remarkable game, despite my general disinterest in platformers these days. Inside is the exception to that rule, and it's the third best game in what ended up being a very strong year.
This game feels less like a response to its predecessor (Human Revolution, one of my favorite games, or the original Deus Ex, one of my very favorite games, take your pick), than it does a response to the sudden re-emergence of the Immersive Sim genre, namely 2012's Dishonored. These sorts of games have always existed in a bit of an echo chamber, bouncing ideas and concepts off of one another, sharing developers, even sharing easter eggs, but Mankind Divided (or DXMD), feels almost desperate in its attempts to replicate Arkane's runaway hit.
Everything, from the Eastern European setting, to the densely packed, multi-tier level design, to even the new powers themselves, feel like blatant attempts to mimick the emergent, often explosive mechanisms that make Dishonored what it is. While I won't fault the game for trying this, as some of these aspects add greatly to the game, it does feel a little more restricted than a proper Deus Ex game should. These games aren't about tight controls and clockwork mechanisms, they're about something…more. There's a sense of freeform expression, of infinite possibility spaces and globe-spanning conspiracy, that Deux Ex is founded upon. While I love DXMD's Prague, it being the only explorable city space is incredibly disappointing to me. It just doesn't feel quite like a good Deus Ex game should. Even then, it's still a Deus Ex game. It's great. Just not as great as it aspires to be, and the less said about the incredibly awkward Aug Rights metaphor, the better (though it does work quite well in the smaller-scale side quest style stuff).
In the end, the side quests are what I'll remember this game most fondly for, since the core plotline is almost shockingly short and small in scale. But those long hours spend prowling Prague, solving murders and uncovering cyber-assassins was a thoroughly unique experience.
I know the world of Dishonored 2 as well, after two playthroughs, as any other I can think of in my long, long lifetime of gaming. I can see a screenshot and more often than not, instantly recall where it is in which level, what it connects to, where it goes. This is because Dishonored 2 rewards those two attributes every game should strive towards above all others: patience, and creativity.
As I've said before, it's a game of immense richness and mechanical brilliance, two traits that often find themselves at odds in game design. A game like this is anything but often. As the second and more self-evidently glorious of the two Immersive Sims released in the fall of 2016, Dishonored 2 has the luxury of knowing exactly what it is, what it wants to do and how it's going to do it. Like the first game, it's not one obviously brimming with content. There's no repository of sidequests, no customizable hub area, no challenge maps (though those came eventually for the original). It's a game so confident in its construction that it knows such things are superfluous for a game made the right way. The way Warren Spector, Harvey Smith and the rest of Ion Storm envisioned nearly twenty years ago.
When I said that Mankind Divided feels less like a response to the Deus Ex lineage of old than to modern titles, this is the modern title I had in mind, and the comparison finds Eidos Montreal's sterling effort lacking. I know the streets of Karnaca because I've bled on them. I've died on them. I've stalked and failed and tried again and killed on them. I've inched across them, slowly, soaking in every detail of every wondrous sign and all the incredible architecture. It's a game that just makes sense to the reptile parts of my brain. It's on my wavelength on a fundamental level, and it's the best game of 2016.