text:
Week 1 of HS Lacrosse in the Books, Sasquatch and Scholarships, Game Recaps and More!
Issue 83 - Corner Canyon/Park City remain at the top of the polls.
McKenzie Christiansen
Good morning lacrosse fans! Thank you for taking time out of your day for the Utah Lax Report. If you have any questions or feedback, feel free to shoot me a note: tim@timhaslam.com.
This newsletter is published via Substack who released an iOS app this week. If you maybe miss an email here or there or subscribe to other Substack newsletters, the app is a great place to house all your newsletters. Check it out here.
As a reminder, the fine folks at Tribal West are offering 10% off your online order using the code TRIBAL2022 on tribalwest.com. You can order online and pick it up in-store!
As always, please visit our title sponsors Tribal West Lacrosse (website) & MinersTown Strength and Condition (website).
Armchair Lacrosse Coach: Sasquatch and Scholarships
Editor's Note: Before you delve in, I've asked Brad to answer mailbag questions next week. So let's hear it! Submit your questions here.
Most of us are familiar with cultural myths, legends and folklore like the Yeti, Sasquatch and even the infamous Utah Skinwalkers. However, it seems like the ever mysterious "College Lacrosse Scholarship" still belongs on this list. My reason for bringing this up is it was brought to my attention (stemming from last week's column) that the common misconceptions regarding lacrosse scholarships are, in fact, alive and well in our Beehive State lacrosse communities. With this in mind, I figured I would perform a public awareness activity of sorts via the armchair.
Before I start the procedure. Please understand my goal is not to crush dreams or hinder ambition in any way. However, the truth can have that effect sometimes so I will do my best to mercifully rip off the bandaid.
Hypothetical Myth #1: My cousin was awarded a full athletic scholarship to play lacrosse at Harvard. This is fantasy because schools in the IVY LEAGUE do not offer athletic-related aid (technically). Aid packages at these schools are awarded almost exclusively based on need. So if your cousin was talented enough athletically to be recruited and offered a spot, that's a big deal. Understand that most coaches at IVY schools have a certain amount of spots allotted by admissions for each year or recruiting classes for qualified students. If your cousin was accomplished enough academically to gain admission, that is a big deal as well. But your cousin got a huge aid package based on her FAFSA (Free Application for Federal Student Aid) score as well as other proprietary institutional systems. These schools have giant endowments from which to draw and they are competing for the best and the brightest. If they want you, they will find a way.
Hypothetical Myth #2: My buddy's friend received a half athletic scholarship to play lacrosse at Middlebury College. False. Division III institutions do not offer athletic aid. They do, however, offer merit-based scholarships and need-based aid. Depending on school policy this could certainly add up to half or even full tuition. More often than not, the aid package at a D-III school can outweigh the aid packages offered by schools with athletic scholarships. Plus, getting recruited and admitted is a big deal. Coaches at this level operate in a similar situation regarding available spots in their programs for admissible student-athletes. However, you are more likely to see giant rosters at D-III schools than at any other level. Larger rosters mean more opportunity. (There are 247 Men's and 291 Women's Programs in D-III).
Sidenote: In my opinion, getting admitted to an IVY, NESCAC or any other top-echelon school IS the scholarship and it will likely pay for itself in spades. The name recognition and cache that a degree from these schools carries in the marketplace is tremendous, not to mention the alumni and classmate network you will have access to. Using your athletic prowess to help get you over the top with regard to admissions is a tried and true strategy as old as time. Also note that the list of great academic/athletic institutions is large and can be found throughout all the NCAA Divisions I, II and III. Also, for the military service academies like the US Military Academy (Army West Point), US Naval Academy (Navy Annapolis) and US Air Force Academy (Air Force Colorado Springs) admission is literally the full scholarship. These schools are ridiculously competitive and pay full freight for the few in our society that have the mental, physical and emotional fortitude to see the ultimate academic/athletic crucible through to becoming a commissioned officer one of the branches.
Myth #3: You have met or even heard of more than one student-athlete in the history of D-I or D-II college lacrosse that was awarded a full-tuition, room and board lacrosse scholarship. This is incredibly rare. Like "white whale" rare. A lacrosse unicorn if you will. That said, it does exist… but you would never know because people don't talk about it, especially the recipients and their coaches.
This is because lacrosse is an equivalency sport for both Men (M) and Women (W). Lacrosse is also known as a "non-revenue" sport (more on this in a minute). Equivalency (EQ) sports are different from Head Count (HC) sports in that HC sports can only give athletic aid in the form of the "Full Boat". For example, FBS football programs have a maximum of 85 full scholarships to provide to 85 players. These are one-year contracts and you either have one or you don't.
EQ sports have a pool of athletic aid or a set number of athletic scholarships to spread across the entire program as the coaches or policymakers see fit.
Almost all sports in the NCAA D-I are, contrary to popular belief, EQ sports as well as ALL SPORTS across the NCAA D-II, NAIA and JUCO. The exceptions list in D-I athletics are FBS Football, Basketball (M&W), Tennis (W), Gymnastics (W) and Volleyball (W). The non-revenue label for lacrosse comes into play at large D-I schools as the revenue sports like Football and Basketball provide much scholarship funding for the rest of the athletic department.
BELOW: Lacrosse Scholarships Available Per Fully Funded (FF) Program
It is important to understand the available scholarship number outlined above but you need to take into account that most programs are not fully funded. Not even close to fully funded. This means that the available scholarship funding being spread across the team is generally small. Now change your calculus to account for the average Men's Lacrosse programs being made up of 45 players and you have an even smaller scholarship pool. If all 45 players in a fully-funded D-I men's lacrosse program got an equal piece it works out to roughly 30% of the bill. The likelihood of paying for college via a lacrosse scholarship on its own is very low.
The way you pay for college is by stacking as much aid as the individual school will allow. Aid can come from a variety of sources. Merit-based aid, athletic scholarships, leadership grants, need-based aid, work-study opportunities, outside grants/scholarships as well as state and federal aid. Cobbling together a great package is an art, not a science and it starts with academics. Academic performance during your high school career (as well as test scores) is the absolute starting point for 99% of recruiting contact decisions. Coaches are going to focus their efforts on the student-athletes that fit the academic profile of the institution they represent and if they don't know if you are an academic fit, you can bet it will come up early in communication.
Please remember that the high school GPA doesn't define the person. It's a number. There are lots of student-athletes that didn't crush it academically in high school and are plenty capable of huge improvement in the college setting. Kids mature into adults. I have seen this transformation many times, but understand that grades and the class trajectory chosen in high school are a leading indicator of success at the next level. If you didn't play the game well in high school, why would anyone think you will be able to flourish when the demands are more and the challenge more formidable.
Last thought. Parents, Coaches and Mentors of all kinds. Please help the young athletes (and their families) in your orbit to understand the reality of the situation. It all starts with academics. School quite literally comes first. Whether we are talking about getting an opportunity to compete at the next level or finding a way to pay for it. Academics are the answer. If your priorities are in the right order the likelihood of finding a place to pursue your academic/athletic goals is high but if they are out of whack the consequences can be terribly hard to overcome. Family first, school second and sports/social third.
Do your best! - BL
As always, our polls are brought to you by Salty Lacrosse.
No. 1 Corner Canyon - The Chargers kicked off its 2022 campaign with a 20-3 drubbing of Region 1 favorite Davis. The game was 14-1 at halftime. The Chargers host Cherokee Trail (CO) on Tuesday then host No. 2 Park City on Friday in a rematch of the 2021 Class A Championship. With the new playoff structure, these two teams won't see each other again this season so tune in… or better yet, go to the game! Also, while the Chargers continue to perform on the field, they are using their high profile to Stand Up to Bullies off the field. KUTV did a feature on the campaign that you can watch here.
No. 2 Park City - The Miners will host No. 7 Lone Peak on Tuesday then head to No. 1 Corner Canyon on Friday. What a way to start the season!
No. 3 Olympus - The Titans dismantled Westlake, 20-6, on Friday in front of the Titan faithful. Oly will head to Pleasant Grove on Tuesday then host Herriman on Friday. After this week, three ranked opponents: No. 6 Alta, No. 9 Green Canyon and No. 5 Mountain Ridge loom on the Titans schedule.
olympus.lacrosse
A post shared by Olympus Lacrosse (@olympus.lacrosse)
No. 4 American Fork - The Cavemen beat Springville, 26-0, on Thursday to open its season. American Fork will host Juan Diego on Wednesday and travel to Bingham on Friday.
No. 5 Mountain Ridge - The Sentinels played in the Green Canyon tournament on Friday and came away with three wins. They beat Roy, 14-0, No. 7 Lone Peak, 9-4, and No. 9 Green Canyon, 6-5. Mountain Ridge will host West on Tuesday before taking on West Jordan on March 22.
No. 6 Alta - The Hawks jumped two spots in the polls thanks to a 10-4 win over No. 8 Brighton. Alta will travel to Mountain View on Tuesday then host Cherokee Trail (CO) on Thursday. The following week has big implications for the Hawks who face region foe Timpview on Tuesday then No. 3 Olympus on Wednesday.
No. 7 Lone Peak - The Knights also played in the Green Canyon tournament and beat No. 9 Green Canyon, 4-3, in overtime then lost to No. 5 Mountain Ridge, 9-4. They closed the tournament with an 8-2 win over Roy. The Knights were playing with heavy hearts as a teammate passed away this week, #88 Walker McFadden. The Knights will head to No. 2 Park City on Tuesday then host Northridge on Thursday.
lpboyslacrosse
A post shared by Lone Peak (@lpboyslacrosse)
No. 8 Brighton - After a 10-4 loss to No. 6 Alta, Brighton will host Riverton today, travel to No. 9 Green Canyon on Wednesday then host Pleasant Grove on Friday.
No. 9 Green Canyon - The Wolves were not rewarded on the field for their generosity in hosting the preseason tournament as they fell to No. 7 Lone Peak, 4-3, in overtime and No. 5 Mountain Ridge, 6-5. They did beat Viewmont, 9-2, to open the event. Green Canyon will host No. 8 Brighton on Wednesday before welcoming a showdown against No. 3 Olympus in a rematch of a 2021 Class A quarterfinal matchup.
No. 10 Davis - The pollsters had empathy for the Darts to keep them in the Top 10 after falling victim to the Corner Canyon pain train after losing 20-3 on Friday. No rest for the weary though as the Darts have two key region games beginning at Fremont on Tuesday then host rival Farmington on Thursday.
Other games of note: Timpview bested East on Thursday, 16-15, in a nailbiter. Orem beat Payson, 8-7, in a game that took 4 overtimes to find a winner by Tiger A/M Chase Ohran.
Weber beat Sky View, 13-11, in a great game. I was on hand to take pictures for Weber and it was a beautiful night for lacrosse in Cache Valley. You can see the full gallery here.
On Tuesday, the 2022 Preseason Boys All-American Watchlist was published. See the full list here.
On Wednesday, the 2022 Preseason Girls All-American Watchlist was published. See the full list here.
Up Next (Bold games to watch)
3/14 East vs Bountiful
3/14 Waterford vs Ridgeline
3/15 Fremont vs Davis
3/15 Mountain Ridge vs West
3/15 Farmington vs Syracuse
3/15 Clearfield vs Layton
3/16 Cedar Valley vs Lone Peak
3/16 Park City vs Skyridge
3/16 Juan Diego vs Pleasant Grove
3/17 Green Canyon vs Box Elder
3/17 Payson vs East
3/17 Layton vs Fremont
3/17 Syracuse vs Weber
3/18 Juan Diego vs Provo
3/18 Woods Cross vs Olympus
3/18 Skyridge vs Mountain Ridge
Week 1 Game Recaps
March 8th - Payson wins 11- 9 over Timpanogos. Player of the game for Timpview #6 Hailey Peterson.
March 8th - Bear River wins 12-9 over Jordan. Player of the game for Bear River #39 Jenna Lacroix. Player of the game for Jordan #33 Dayanara Adame.
March 9th - Pleasant Grove wins 18 -3 over Timpview. Player of the game for Pleasant Grove #5 Katelin Wallace.
March 9th - Maple Mountain wins 14-6 over Spanish Fork.
March 10th - Juan Diego wins 16-4 over Wasatch.
March 10th - West Jordan wins 23-3 over Viewmont.
March 10th - Corner Canyon beats Riverton, 18-11.
The game was relocated from Riverton to Corner Canyon because Riverton's home field was iced over from the storm. As the game began these two teams had us all questioning who was going to take home the win. On the first draw, not even 10 seconds into the game, the Chargers ripped it off the center to midfielder Allison Reading as she darted down the field to make the first goal of the Chargers season. Riverton had a fast recovery as they reset for the draw, Livia Sargent snagged it off the draw and drove downfield to make the Silverwolves their first goal of the season. We're 30 seconds into the game and two goals have been scored. As the half progressed the score continued to go back and forth until the chargers excelled and ended the half 11- 6.
As the clock ticked down for the second half to begin, both the Silverwolves and Chargers stepped on the field with frozen fingers by fire in their hearts. The first draw was taken and Riverton won that face-off, once again Livia Sargent swung the ball downfield to Bella Butterfield as she scored the first goal of the half. It was exciting to see the Chargers doing a backer defense and the Silverwolves playing man defense. The teams started to get physical during this half, the officials did an amazing job calling the game fair on both teams' fouls. Ten minutes into the second half Corner Canyon had two players in the penalty box. The Silverwolves were on the move to make up for lost time/points, the Chargers got nervous and started face guarding some of the Riverton top players to eliminate the opportunity to score. Sargent was unstoppable on the field. Corner Canyon had her swarmed with 5 defenders and she had the skills to hold on to the ball. She broke through to drive downfield to make her 4th goal of the night. The Chargers kept consistent energy from start to finish, including Simone Parker who is a talented midfielder. She was a huge contributor to the Chargers win.
"I'm proud of how we played against the Silverwolves," said Corner Canyon Head Coach Matt Kenning. "We had a moment where they could not complete a direct pass and a few lapses on the defensive end. All in all the team fought off Riverton and never stopped working hard. We learned that we need to play cleaner and limit our mistakes. We also learned that Simone could be the best pure scorer in the state and Allie Reading is easily one of the best field defenders in the state. Those two played well today made all the difference. Mal Story and Kenzie Zimmerman also played well. When everyone else plays to their potential we will be a 6A contender for sure."
"We played really well for playing in 12-degree weather and I'm proud of the girls for the effort they put in," said Riverton Head Coach Jocelyn Dorton. "Corner Canyon played a zone backer defense which our Riverton attackers weren't used to. The Silverwolves had to adapt but we were able to figure out how to break through the Chargers defense. Corner Canyon face guarded Livia Sargent which was tough on our attack as she is a leader for our very young team. Overall I'm proud of how they played and can't wait for our next game!"
March 11th Lone Peak wins 18-5 over Alta. Player of the game for Lone Peak #16 Kacee Kelley.
March 11th Payson wins 8-5 over Lehi. Player of the game for Lehi #38 Jaidynn Hutchinson.
March 11th Brighton wins 20-5 Over Syracuse. Player of the game for Syracuse #13 Brooklyn Suttlemyre.
Bulldog Brawl Tournament ( Provo High School)
Provo wins 13-2 over Clearfield. Player of the game for Provo #25 Rachel Pope.
Timpanogos wins 7-1 over Clearfield.
Lehi wins 8-4 over Provo. Player of the game for Lehi #40 Kathren Moreau. Player of the game for Provo #11 Ellee Scott.
Lehi Wins 11-4 over Clearfield. Player of the game for Lehi #66 Hannah Lindsay.
Timpanogos wins 8-4 over Provo. Player of the game for Provo #33 McKinley Jorgensen.
Lehi wins 4-2 over Timpanogos.
Lehi Head Coach Taylor Siri: "This was both teams' third and final game in the tournament. Both teams fought hard the whole game. Something we learned today was the importance of being patient. On attack we needed to find the best option, not necessarily force the first available opportunity. Our defense had great crashes and our goalie made key saves! The girls played as a team throughout the whole tournament and it paid off."
Timpanogos Head Coach Meghan Hallam: "It was an awesome game. Both teams were giving all they had after a long day of games. Even though we had so many games that day, our team had a lot of energy throughout the game! That ultimately is what kept the game so close. Our defense was strong and intense and our offense worked hard on their rides! We learned to keep the energy up after a tiring day and stick together as a team! We had a lot of fun playing Lehi and can't wait to play them again in the regular season."
Girls Player of the Week - Alex Heugly
Sophomore at Brighton High School #23, attacker.
Alex is only a sophomore this year, but she's going to be a stand-out for us this year! She is going on 6+ years of playing lacrosse.Her stick skills, speed and her re-defending skills are unmatched. She has an extremely high lacrosse IQ and is dedicated to being the best player she can be.
Fun fact: Her sister is currently playing at Westminster. And her dad is the best announcer in the state!
Men's College
In the MCLA, No. 2 BYU headed to Southern California for a three-game swing that started with a 13-4 win over No. 21 Cal Poly. The Cougars carried the momentum to an 18-5 win over No. 23 Dominican on Friday and then beat No. 8 Santa Clara, 10-7 on Saturday.
No. 19 UVU took the same trip, just in a different order. The Wolverines beat No. 23 Dominican, 19-11, then fell to No. 8 Santa Clara, 15-14, in overtime. UVU avenged the loss as it beat No. 21 Cal Poly, 12-11, in three overtimes!
In the NCAA ranks, Westminster went 2-1 on its Florida road trip, beating Lynn on Monday, 16-11, before losing to No. 13 Rollins on Wednesday, 19-11. The Griffins finished the trip on Thursday with a 22-3 win over Emmanuel College.
No. 18 Utah fell to UMBC, 13-10, on Friday to conclude its Spring Break trip. Utah takes on No. 6 Georgetown next Saturday before returning home to face Mercer on March 26.
Upcoming Men's Schedule
3/16 - Utah club @ BYU - 7 pm
3/19 - Utah @ Georgetown - 9 am
3/19 - Concordia-Irvine @ BYU - 1 pm
Pole Goal of the Week goes to John Geppert from Maryland. After the first shot was saved, he rode hard, caused a turnover, picked up the GB and scored.
USA Lacrosse Magazine @USALacrosseMag
If at first you don't succeed, get that ball back and get the #PoleGoal. 💪 John Geppert with the JUICE GOAL for @TerpsMLax this morning.
8:02 PM ∙ Mar 12, 2022
BYU hosted Utah Valley on Saturday and won, 16-13.
The Westminster Griffins headed to Missouri for a two-game road trip. The Griffins started strong but fell to Rockhurst, 19-8, and Missouri Western, 13-5.
Utah State hosts Weber State on Saturday at 10 am.
BYU hosts Utah on Saturday at 1 pm.
Westminster will host Lindenwood on March 28.
That's it for this week, stay safe out there and see you on the sidelines!
— Tim Haslam (Intro/Mens/Boys), Kenzie Christiansen (Womens/Girls) & Brad Lavoie (Armchair Lacrosse Coach)
A guest post by
Utah Lacrosse Reports - Girls Writer. KSL Game Night Rewind - Sports Analyst. USA Women's Elite - Defender
Subscribe to McKenzie


text:
import crypto from 'crypto';
import fs from 'fs';
import https from 'https';
import redis, { ClientOpts, RedisClient } from 'redis';
import Redlock from 'redlock';

/**
 * 持久化
 * 1. file,保存到文件上
 * 2. redis,保存到redis
 * 3. 不保存
 */
type SaveType = 'file' | 'redis' | 'none';

/**
 * 配置项
 */
interface IJSSDKOptions {
  /**
   * 是否企业号,默认false
   */
  corp?: boolean;
  /**
   * 公众号appId
   */
  appId: string;
  /**
   * 公众号secret
   */
  secret: string;
  /**
   * 随机字符串长度,最长32位,默认16位
   */
  nonceStrLength?: number;
  /**
   * ticket和token持久化类型,默认none,可选redis、file
   */
  type?: SaveType;
  /**
   * redis host,type = redis时,必须提供
   */
  redisHost?: string;
  /**
   * redis port,type = redis时,必须提供
   */
  redisPort?: number;
  /**
   * redis password
   */
  redisAuth?: string;
  /**
   * token 缓存文件,type = file时,必须提供
   */
  tokenFilename?: string;
  /**
   * ticket 缓存文件,type = file时,必须提供
   */
  ticketFilename?: string;
  /**
   * 是否缓存在进程内存,默认true
   */
  cache?: boolean;
  /**
   * 打开调试,默认false
   */
  debug?: boolean;
}

interface ITokenData {
  accessToken?: string;
  ticket?: string;
  expireTime: number;
}

type Callback = (err: Error | null, ret: ITokenData | null) => void;

interface ISignResult {
  /**
   * error code
   * 1. 4001,需要签名的url参数没有提供
   * 2. 内部获取jssdk api ticket错误
   * 3. 0正常签名
   */
  errCode: 4001 | 4002 | 0;
  msg?: string;
  appId?: string;
  nonceStr?: string;
  timestamp?: number;
  url?: string;
  signature?: string;
}

interface IExpressResponse {
  json: (body?: any) => void;
}
interface IExpressRequest {
  query: any;
  body: any;
}

const TAG = 'express-jssdk';

const NONCE_STR_MAX = 32;
const GET_TICKET_URL = 'https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=';
const GET_TICKET_URL_CORP = 'https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?access_token=';

/**
 * 票据
 */
const TYPE_TICKET = 1;
/**
 * TOKEN
 */
const TYPE_TOKEN = 2;

/**
 * 配置项
 */
const defOptions: IJSSDKOptions = {
  corp: false,                                            // 是否企业号
  appId: '',
  secret: '',
  nonceStrLength: 16,                                     // 随机字符串长度,最长32位
  type: 'none',                                           // ticket和token持久化类型,默认none,可选file、redis
  redisHost: '127.0.0.1',                                 // redis host
  redisPort: 6379,                                        // redis port
  tokenFilename: __dirname + '/local-token.json',
  ticketFilename: __dirname + '/local-ticket.json',
  cache: true,
  debug: false,
};

/**
 * 票据缓存
 */
const ticketCache: ITokenData = {
  expireTime: 0,
  ticket: '',
};
/**
 * token缓存
 */
const tokenCache: ITokenData = {
  expireTime: 0,
  accessToken: '',
};

/**
 * redis 客户端
 */
let redisClient: RedisClient;

let options: IJSSDKOptions;

let redlock: any;

/**
 * 导出中间件
 * @param {object} _options
 */
const jssdk = (_options: IJSSDKOptions) => {
  if (!_options.appId || !_options.secret) {
    throw new Error('appId and secret must be provided!');
  }
  if (_options.type === 'file' && (!_options.tokenFilename || !_options.ticketFilename)) {
    throw new Error('if type = file, tokenFilename and ticketFilename must be provided!');
  }
  if (_options.type === 'redis' && (!_options.redisHost || !_options.redisPort)) {
    throw new Error('if type = redis, redis config must be provided!');
  }
  options = Object.assign({}, defOptions, _options);

  // 兼容上个版本,修正type = mem为type = none
  if ('mem' === options.type as string) { options.type = 'none'; }

  // type 设置为 none时,强制使用进程内存
  if ('none' === options.type) { options.cache = true; }

  // reset cache
  ticketCache.expireTime = 0;
  ticketCache.ticket = '';
  tokenCache.expireTime = 0;
  tokenCache.accessToken = '';

  // 票据token储到redis
  if ('redis' === options.type) {
    const conf: ClientOpts = {
      host: options.redisHost,
      port: options.redisPort,
    };
    if (options.redisAuth) {
      conf.password = options.redisAuth;
    }
    redisClient = redis.createClient(conf);
    redisClient.on('error', (err) => {
      console.error(TAG, 'redis error:', err.message);
      // 连接不上redis时,cache开启
      options.cache = true;
    });
    redisClient.on('connect', () => {
      if (options.debug) { console.log(TAG, 'redis connected to the server:', redisClient.connection_id); }
      redlock = new Redlock(
        [redisClient],
        {
          driftFactor: 0.01,
          retryCount: 10,
          retryDelay: 200,
          retryJitter: 200,
        });
    });
  }

  return (req: IExpressRequest, res: IExpressResponse) => {
    const url = (req && req.query && req.query.url) || (req && req.body && req.body.url);
    sign(url, (ret) => {
      res.json(ret);
    });
  };
};

// const disconnectRedis = () => {
//   if (redisClient.connected) { redisClient.quit(); }
// };

export = jssdk;

function createNonceStr(length: number = 16) {
  length = length || 16;
  length = length > NONCE_STR_MAX ? NONCE_STR_MAX : length;

  let str = '';
  const chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
  for (let i = 0; i < length; i++) {
    str += chars[Math.floor(Math.random() * chars.length)];
  }
  return str;
}

function getAccessToken(cb: (err: Error | null, token: string | null) => void) {
  readTokenOrTicket(options.type || 'none', TYPE_TOKEN, (err, data) => {
    if (err || !data || !data.accessToken || data.expireTime < Date.now()) {
      // 如果是企业号用以下URL获取access_token
      let url = '';
      if (options.corp) {
        url = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid='
          + options.appId + '&corpsecret=' + options.secret;
      } else {
        url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='
          + options.appId + '&secret=' + options.secret;
      }
      https.get(url, (res) => {
        res.on('data', (d: Buffer) => {
          const tokenData: ITokenData = {
            accessToken: '',
            expireTime: 0,
          };
          let ret;
          try {
            // 正常 {"access_token":"ACCESS_TOKEN","expires_in":7200}
            // 错误 {"errcode":40013,"errmsg":"invalid appid"}
            ret = JSON.parse(d.toString());
          } catch (error) {
            cb(new Error('get token parse error'), null);
            return;
          }
          if (ret && ret.access_token) {
            tokenData.accessToken = ret.access_token;
            tokenData.expireTime = Date.now() + 7000000;
            cb(null, tokenData.accessToken || '');
            saveTokenOrTicket(options.type || 'none', TYPE_TOKEN, tokenData);
          } else if (ret.errcode) {
            cb(new Error(d.toString()), null);
          } else {
            cb(new Error('No token!'), null);
          }
        });
      }).on('error', (e) => {
        cb(e, null);
      });
    } else {
      cb(null, data.accessToken);
    }
  });
}

function getJsApiTicket(cb: (err: Error | null, ticket: string | null) => void) {
  readTokenOrTicket(options.type || 'none', TYPE_TICKET, (err, data) => {
    if (err || !data || !data.expireTime || data.expireTime < Date.now()) {
      getAccessToken((error, token) => {
        if (error) {
          cb(error, null);
          return;
        }
        https.get(options.corp ? GET_TICKET_URL_CORP + token : GET_TICKET_URL + token, (res) => {
          res.on('data', (d) => {
            const ticketData: ITokenData = {
              ticket: '',
              expireTime: 0,
            };
            let ret;
            try {
              // 正常 {"errcode":0,"errmsg":"ok","ticket":"xx","expires_in":7200}
              ret = JSON.parse(d);
            } catch (error) {
              cb(new Error('get ticket parse error'), null);
              return;
            }
            if (ret && ret.errcode === 0 && ret.ticket) {
              ticketData.ticket = ret.ticket;
              ticketData.expireTime = Date.now() + 7000000;
              cb(null, ret.ticket);
              saveTokenOrTicket(options.type || 'none', TYPE_TICKET, ticketData);
            } else {
              cb(new Error('No ticket!'), null);
            }
          });
        }).on('error', (_httpError: Error) => {
          cb(error, null);
        });
      });
    } else {
      if (data.ticket) {
        cb(null, data.ticket);
      } else {
        cb(new Error('Ticket not Found'), null);
      }
    }
  });
}

function sign(url: string, cb: (ret: ISignResult) => void) {
  if (!url) {
    cb({
      errCode: 4001,
      msg: 'argument url must be provided!',
    });
    return;
  }
  getJsApiTicket((err, ticket) => {
    if (err) {
      cb({
        errCode: 4002,
        msg: err.message,
      });
      return;
    }

    const timestamp = Math.floor(Date.now() / 1000);
    const nonceStr = createNonceStr(options.nonceStrLength);
    const signStr = 'jsapi_ticket=' + ticket + '&noncestr=' + nonceStr + '&timestamp=' + timestamp + '&url=' + url;

    const signature = crypto.createHash('sha1').update(signStr).digest('hex');

    cb({
      errCode: 0,
      appId: options.appId,
      nonceStr,
      timestamp,
      signature,
    });
  });
}

/**
 * 保存票据token
 * @param {string} saveType token保存类型file本地文件,redis
 * @param {number} tokenOrTicket
 * @param {object} data
 * @param {string} fileName
 */
function saveTokenOrTicket(saveType: SaveType, tokenOrTicket: number, data: ITokenData) {
  if (options.cache) { refreshCache(tokenOrTicket, data); }
  if ('redis' === saveType) {
    if (!redisClient.connected) {
      console.warn(TAG, 'redis disconnected');
      // redis未建立连接,且未开启缓存,开启缓存并缓存数据
      if (!options.cache) {
        if (options.debug) { console.log(TAG, 'redis disconnected, set cache = true.'); }
        options.cache = true;
        refreshCache(tokenOrTicket, data);
      }
      return;
    }
    const key = tokenOrTicket === TYPE_TICKET ? REDIS_KEY_TICKET : REDIS_KEY_TOKEN;
    const lockName = tokenOrTicket === TYPE_TICKET ? LOCK_TICKET : LOCK_TOKEN;
    redlock.lock(lockName, 1000).then((lock: any) => {
      redisClient.set(key, JSON.stringify(data));
      return lock.unlock().catch((err: Error) => {
        console.error(err);
      });
    });
  } else if ('file' === saveType) {
    const fileName = tokenOrTicket === TYPE_TICKET ? options.ticketFilename : options.tokenFilename;
    if (!fileName) {
      if (!options.cache) {
        if (options.debug) { console.log(TAG, 'type = file and no filename, set cache = true.'); }
        options.cache = true;
        refreshCache(tokenOrTicket, data);
      }
      return;
    }
    fs.writeFile(fileName, JSON.stringify(data), (err) => {
      if (err) {
        // 保存到文件上失败,且未开启缓存,开启缓存并缓存数据
        if (!options.cache) {
          if (options.debug) { console.log(TAG, 'save to file error, set cache = true.'); }
          options.cache = true;
          refreshCache(tokenOrTicket, data);
        }
        console.error(TAG, 'Save to File (' + fileName + ') Error:', err.message);
      }
    });
  }
}

function refreshCache(tokenOrTicket: number, data: ITokenData) {
  if (options.debug) { console.log(TAG, ' refresh cache, TYPE =', tokenOrTicket, 'data =', data); }
  if (tokenOrTicket === TYPE_TICKET) {
    ticketCache.expireTime = data.expireTime;
    ticketCache.ticket = data.ticket;
  } else {
    tokenCache.expireTime = data.expireTime;
    tokenCache.accessToken = data.accessToken;
  }
}

const REDIS_KEY_TOKEN = 'jssdk.token';
const REDIS_KEY_TICKET = 'jssdk.ticket';

const LOCK_TOKEN = 'locks:token';
const LOCK_TICKET = 'locks:ticket';

/**
 * 读取缓存的票据token
 * @param {string} saveType [file, redis, mem]
 * @param {number} tokenOrTicket
 * @param {function} cb
 */
function readTokenOrTicket(saveType: SaveType, tokenOrTicket: number, cb: Callback) {
  if (options.cache) {
    if (tokenOrTicket === TYPE_TICKET) {
      if (ticketCache && ticketCache.ticket && ticketCache.expireTime > Date.now()) {
        // 内存有缓存
        cb(null, ticketCache);
        if (options.debug) { console.log(TAG, 'readTokenOrTicket: read ticket from cache'); }
        return;
      }
    } else {
      if (tokenCache && tokenCache.accessToken && tokenCache.expireTime > Date.now()) {
        if (options.debug) { console.log(TAG, 'readTokenOrTicket: read token from cache'); }
        cb(null, tokenCache);
        return;
      }
    }
  }
  if ('redis' === saveType) {
    if (!redisClient.connected) {
      if (options.debug) { console.log(TAG, 'readTokenOrTicket: redis disconnected'); }
      cb(new Error('redis disconnected'), null);
      return;
    }
    const key = tokenOrTicket === TYPE_TICKET ? REDIS_KEY_TICKET : REDIS_KEY_TOKEN;
    redisClient.get(key, (err, reply) => {
      if (err) {
        if (options.debug) { console.log(TAG, 'readTokenOrTicket: read redis error =', err.message); }
        cb(err, null);
      } else {
        try {
          cb(err, JSON.parse(reply.toString()) as ITokenData);
          if (options.debug) { console.log(TAG, 'readTokenOrTicket: reply =', reply); }
        } catch (error) {
          if (options.debug) { console.log(TAG, 'readTokenOrTicket: type = redis, parse data  error =', error); }
          cb(error, null);
        }
      }
    });
  } else if ('file' === saveType) {
    const fileName = tokenOrTicket === TYPE_TICKET ? options.ticketFilename : options.tokenFilename;
    if (!fileName) {
      cb(new Error('No filename'), null);
      return;
    }
    fs.readFile(fileName, (err, data) => {
      if (err) {
        if (options.debug) { console.log(TAG, 'readTokenOrTicket: read file error =', err.message); }
        cb(err, null);
      } else {
        try {
          cb(err, JSON.parse(data.toString()) as ITokenData);
          if (options.debug) { console.log(TAG, 'readTokenOrTicket: buffer =', data); }
        } catch (error) {
          if (options.debug) { console.log(TAG, 'readTokenOrTicket: type = file, parse data error =', error); }
          cb(error, null);
        }
      }
    });
  } else {
    // 不是file也不是redis,返回空,让后面逻辑去微信服务器请求
    cb(null, null);
  }
}

redpajama_set_name: RedPajamaGithub


text:
Senate Defeats Two EPA Rule-Curbing Measures
Administrative Judge: Pollution Controls Are Least Cost Option for Coal-Fired Big Stone
Dominion Begins Restart of North Anna Reactors
EPA Grants First GHG Permit to Texas Facility
Energy Efficiency Measures Could Cut Power Consumption Between 5% and 15% by 2020, Study Says
Council Throws Out Plans for Major Scottish CCS Plant
Report: Wind Power Could Reach Parity with Gas Power by 2016
Calif. Consumer Advocate Division Decries CPUC Approval of "Overpriced" CSP Project
The California Public Utilities Commission's (CPUC's) approval on Thursday of Abengoa Solar's 250-MW Mojave Solar concentrating solar power (CSP) parabolic trough facility in San Bernardino County—the second "overpriced renewable contract" approved by the CPUC in recent weeks—was disappointing, the regulatory commission's Division of Ratepayer Advocates (DRA) said in a statement.
The project, proposed by Abengoa Solar subsidiary Mojave Solar LLC, calls for a 25-year contract with Pacific Gas & Electric (PG&E). The CPUC said that while the power purchase agreement was pending regulatory approval, Mojave Solar learned that the transmission network upgrades necessary for the project to provide resource adequacy to PG&E would not be completed until several years after the project was scheduled to achieve commercial operation.
"Because the power purchase agreement required that the facility provide resource adequacy, PG&E and Mojave Solar renegotiated the power purchase agreement in order to meet the requirements for a Department of Energy Federal Loan Guarantee and to maintain the value of the original power purchase agreement," the CPUC said. "The contract is more costly than other procurement opportunities available to PG&E, but the CPUC determined that the value of adding the Mojave Solar project to California's fleet of renewable energy generation capacity warranted approving the project."
The commission in October also approved the North Star Solar project based in Fresno. But like Abengoa, "the North Star project is not price-competitive with other current in-state renewable options available to PG&E," said the independent consumer advocacy division of the CPUC. "By approving these overpriced projects, the Commission is not allowing customers to benefit from decreased costs of a more favorable renewable energy market."
The DRA also said the commission's decision could keep rates for customers in California high for decades to come. In a February 2011 report titled "Green Rush," the DRA documented the unnecessary rise in renewable power project costs in California. "Senate Bill 2 (1X), which established the goal that 33% of the state's electricity should come from renewable sources, also includes direction to the CPUC to contain costs," it said.
"The Commission has the power to keep the cost of renewable energy reasonable," said the DRA's acting director, Joe Como. "Instead, with the Commission's continued approval of projects like North Star and Abengoa, it is signaling to the market that California will accept overpriced renewable energy, and that it is willing to lock customers into higher rates for decades to come."
CPUC President Michael R. Peevey , who pushed for approval of the project, said that "Mojave Solar is the furthest developed new utility-scale solar thermal project that the CPUC has encountered in our capacity of reviewing the utilities' RPS power purchase agreements. It was "highly viable and the solar thermal facility will enhance the resource diversity of PG&E's energy portfolio," he added.
Only one of the five commissioners, Mike Florio, voted against the contract. Florio said the new plant was not needed to meet the state's renewable energy goals and would waste ratepayers' money. He also said ratepayers would be burdened with $1.25 billion in above-market costs, which will be passed on to PG&E customers.
"I agree with Commissioner Florio who said that we should be getting twice the amount of renewable energy for the price of this contract," Como said.
"The CPUC must get serious about reducing greenhouse gas emissions from power plants and it can't do that by ignoring the costs. DRA strongly supports the state's renewable energy goals, but fears that customer backlash against high energy bills will hurt the state's efforts," he added. "Sending a message to renewable energy developers and investors that the cost of renewables must be reasonable will support the effort to reach California's goals to reduce greenhouse gas. We simply can't afford to do otherwise."
Sources: POWERnews, DRA, CPUC
California agencies ordered to prepare for 33% renewable power target
Spain's Power System Slashes Debt in 2015
DOE, GE Make Hefty Investments in Solar Power
Solar power in the U.S. received multiple boosts in the past week as the Department of Energy (DOE)…
Schwarzenegger to Veto Bills for Calif. RPS Increase, Orders Agency to Adopt Regulations
California Gov. Arnold Schwarzenegger (R) signed an executive order on Tuesday directing the California Air Resources Board (CARB)…

redpajama_set_name: RedPajamaCommonCrawl


Home | Historic York, Inc.
Historic York in the News!
Follow the links below to read recently published articles on Historic York, Inc.
Historic York Now Accepts PayPal!!
Please donate or become of member of Historic York, Inc. today! You can mail your donation to Historic York, Inc or use our new PayPal links below.
Please enjoy and share Historic York's Winter 2014 Newsletter! It highlights what we have been doing over the past few months. Enjoy! If you have any questions, comments or suggestions please let us know. You may contact us info@historicyork.org or by phone at (717) 843-0320.
Hoke House Needs Your Help!
Congrats to Paul Nevin and the Friends of Hoke House who have been successful in reaching an agreement with the Spring Grove Borough and Rutters. The borough has agreed to give the Friends of Hoke House until the end of December to work on the historic tavern so it's not an eyesore to passing motorists. Rutters has agreed to give the Friends 3 years to find a suitable tenant. The next challenge is raising $10,000 by the end of the year to pay for the repairs. The Spring Grove Area Historical Preservation Society has agreed to contribute $5,000 if the other $5,000 can be raised by the the Friends of Hoke House. Tax-deductible donations should be sent to Preservation PA, 257 North Street, Harrisburg, PA 17101 with "Hoke House" noted in the memo line. Any amount will be greatly appreciated!
Historic York is pleased to announce that the nominations for the 2015 Historic Preservation Awards are open and will continue until September 2015. Applications can be obtained from Historic York in person, by e-mail (info@historicyork.org) or by using the link below. Additional information on the nomination form due date and awards ceremony will be added to this website once finalized. If you have any questions or comments in the mean time please don't hesitate to contact us at info@historicyork.org or by phone at (717) 843-0320.
2014 HISTORIC YORK PRESERVATION AWARD WINNERS!!!
Historic York would like to Thank everyone who attended out 2014 Historic Preservation Celebration last evening. It was a great success! We would especially like to that LSC Design, Inc. for hosting the event.
We are currently accepting nominations for our 2015 Historic Preservation Awards. If you have any questions or need an application, please contact Roger Ciuffo at info@historicyork.org.
Preservation of Historic Homes in York — Who Cares?
So, why care about old – or historic – homes? Let me tell you why I care and see if you agree.
Since 2005, I've worked with a couple of partners to restore three large historic homes and have just started on a fourth (see http://www.900southgeorge.com for one of the completed restoration projects). All were built in the late 1800's – one for the founder of the Peterman Shoe Company (now the Maewyn's Pub on North George); one for York's most famous architect (John Dempwolf) and one for the man whose son became president of York Bank & Trust (now M&T).
All three homes had fallen on hard times before restoration – a vacant dentist's office, a condemned rest home and a dilapidated college student party house. After lots of sanding, scraping, caulking, repairing and painting – all three are once again well-maintained family residences and have helped to stabilize their historic neighborhoods.
A lot of people have asked me why I get involved in these projects. It's not because I love sanding walls, filling holes in rotted wood or peeling hideous wallpaper. So why do I do it? To me, new isn't always best. While I applaud, believe in and support the growth and new development in downtown York, I believe that both the old and the new are critical parts of what can make York special.
So, why do I think that old can also equal good?
Historic York, Inc. identifies, preserves, and protects buildings, structures and sites of historical and architectural significance in York County, Pennsylvania.
Historic York, Inc. serves as a community voice for the protection of historic buildings and sites.
We advocate historic preservation, provide community education, and assist local individuals, organizations & public officials with preservation related activities.
Do you have any early 1800's six over six window sash?
You might want to try Refindings which is an off shoot of Historic York. They are located at 465 E Prospect St, York, PA 17403 and can be reached at (717) 854-7152 or on the web at http://www.refindings.com/.
Are you having a home tour this spring or summer?
Be on the lookout for a tour in October of the churches that have Rudy Stained Glass windows.


text:
LBrands
The co-CEOS are named 'Entrepreneur Of The Year 2019' in the Southwest Region
New Twists in Lip Color and Mascara
Wellness Is Among New Categories for 2019 CEW Awards
Arkay Packaging Honored by P&G
CEW Will Celebrate Influencers at the Beauty Awards
Fusion Packaging Announces First Acquisition
EY has announced that co-founders, Derek Harvey and Jonathan Gross, of FusionPKG, have received the Entrepreneur Of The Year 2019 Award in the Industry Disrupter category in the Southwest region. The award recognizes "entrepreneurs who are excelling in areas such as innovation, financial performance and personal commitment to their businesses and communities, while also transforming our world." Harvey and Gross were selected by an independent panel of judges, and the award was presented at a special gala event at the Hilton Anatole Hotel in Dallas, TX on June 29th.
Founded in 2004, FusionPKG is a total beauty solutions provider headquartered in Dallas, with offices in New York, Los Angeles and Zhejiang, China. Combining both design and engineering expertise with consumer trend insight, FusionPKG says they provide beauty brands with state-of-the-art packaging and formulas to help them stay ahead of the curve in an increasingly fast-evolving industry. Leading beauty brand partners include Estee Lauder, Too Faced, Tarte, Rodan & Fields, Urban Decay, and Murad.
As Southwest award winners, Harvey and Gross are now eligible for consideration for the Entrepreneur Of The Year 2019 National Awards. Award winners in several national categories, as well as the Entrepreneur Of The Year National Overall Award winner, will be announced at the Entrepreneur Of The Year National Awards gala in Palm Springs, CA, on November 16, 2019. The awards are the culminating event of the Strategic Growth Forum, the nation's most prestigious gathering of high-growth, market-leading companies.
The Entrepreneur Of The Year Awards were founded and produced by Ernst & Young LLP. It is considered the world's most prestigious business awards program for entrepreneurs. Since 1986, EY has honored entrepreneurs whose ingenuity, spirit of innovation and discipline have driven their companies' success, transformed their industries and made a positive impact on their communities.
www.beautypackaging.com
Cetaphil Recruits Ms. Maisel's Rachel Brosnahan
Berry Global Receives Kao USA's Supplier of Excellence Award
Luxe Pack New York in Green Awards Announced
Diamond Packaging
Eco Products and One-Stop Shopping Draw Crowds at L.A. Shows
Arkay Packaging is Honored by P&G
Fusion Packaging Announces First Acquisition at MULA


Tap Strikers is a Role Playing android game made by SHOWDOWN SOFT that you can install on your android devices an enjoy !
Heroes of 3 races – Humans, Amanes, and Noachias – rally together to take back the world from evil monsters. With their authentic skills, these heroes will help you save the world. Eliminate monsters to take gold and artifacts! Don't be frustrated by formidable monsters! Your rebirth will allow you to be even stronger to knock them down! Join the battle now!!!


text:
2019 AMOR Annual Report
On February 14, 2020, the Alliance to Mobilize Our Resistance (AMOR) celebrates three years of building resistance and supporting community members and families who have been impacted by the unjust immigration system and other forms of state violence. Thank you very much for helping us get this far. We are grateful for our community's support during 2019, for showing up to rallies and demonstrations, donating money, volunteering, and coming to our fundraising events and meetings.
AMOR is a coalition of six grassroots organizations fighting state violence while building community-based support systems. Grounded in principles of anti-racism, we practice our values by centering the voices, experiences, and leadership of directly impacted people. Our participatory structure prioritizes community members learning about AMOR's services, accessing these services, and taking part in AMOR's volunteer and organizing structure. We foster communities of support and solidarity while sharing our collective knowledge and skills with each other and with local service providers. AMOR's staff of two coordinates six support teams that connect people with relevant resources and services: Immigration Legal Support, Police Violence Relief, Community Care, Language Justice, Transportation, and Community Response.
As our network has grown over the past three years, relationships of trust within the community have strengthened and AMOR has received more referrals. In 2019, we focused on building our capacity to meet increasing requests. Here's some information about what our teams have accomplished over the past year.
Case Work
The Immigration Legal Support team provided 97 people with holistic case management related to immigration detention, deportation, and status changes, and paid bond to release 4 people from the Wyatt Detention Center.
The Community Care team connected 23 people with free and low-cost mental health care and held 3 donation drives for care basket items, toys, and food.
The Language Justice team provided their translation and interpretation services to 28 individuals and groups.
The Transportation team gave 126 rides to community members.
In 2019 we hosted…
3 ICE watch training sessions.
3 community interpreter volunteer training sessions.
3 transportation volunteer training sessions.
3 Know Your Rights training sessions.
Community Building and Healing Events
Healing Day for community members, volunteers, and organizers to receive services including massage, acupuncture, and reiki.
Annual Grill-Off fundraiser and cooking competition at Lincoln Woods State Park.
Community Healing in Puerto Rico event facilitated by Caminando la Utopia, a community acupuncture collective in Puerto Rico.
Summer Beach Day in Middletown.
Annual Lobster Fest fundraiser at Providence Friends Meeting.
AMOR's first-ever Fall Potluck for community members, volunteers, and organizers to share food together.
Public Actions
January 26: Demonstration at Bristol County for Week of Action to end deportations of Southeast Asians.
February 17: Noise demo supporting ICE detainees in Boston.
March 14: Interrupted 287(g) meeting in Plymouth County.
March 28: March and noise demo at the Wyatt Detention Center.
April: Week of Action against the Wyatt.
April 10: Interrupted ICE Meeting held by Bristol County Sheriff Thomas Hodgson about their 287(g) contract.
May 27: Vigil and march for lives lost through detention.
June 12: Central Falls community forum to hear citizens' concerns and give them an update on the Wyatt.
June 24: Social media storm and demonstration at Locke Lord LLP as part of the FANG Collective's #ShutDownICE Week of Action.
June 25: Disrupted Plymouth County sheriff's dinner to publicly ask Sheriff McDonald to end his collaborations with ICE.
June 27: Call-In Day to Bristol County District Attorney Thomas Quinn demanding that he stop prosecuting people for resisting ICE.
June 27: Blockaded Massachusetts Department of Corrections in response to their 287(g) agreement with ICE.
June 28: Barnstable County Stonewall banner drop in Cape Cod to commemorate the 50th anniversary of the Stonewall police riots.
June 29: Bristol County noise demo and rally to demand an end to collaborations with ICE.
August 15: Social media storm on Kemper Museum regarding their complicity in the Wyatt's operations.
In 2019, AMOR led two primary campaigns. The first was against the Donald Wyatt Detention Center, which recently renewed its contract with ICE to profit from detaining people who recently crossed the border and were brought to Rhode Island. The Wyatt also detains people who were transferred from the Suffolk County House of Corrections in Boston which ended its contract with ICE. AMOR launched its Shut Down Wyatt campaign to support those detained in getting released and to eliminate all contracts between the Wyatt and ICE. In December 2019, AMOR began supporting those detained in the Wyatt with their immigration bonds. For a long time, immigration bonds for people held at the Wyatt ranged between $25,000 to $40,000, which family members and organizations were not able to pay. However, due to a recent case decision in Massachusetts, people have started receiving lower bond amounts. As of December, AMOR has bonded out 4 individuals on its own and collaborated with families and the Boston Immigrant Justice Accompaniment Network (BIJAN) in bonding out 2 more individuals from the Wyatt Detention Center.
The second campaign AMOR led in 2019 was to pass the Driver's Licenses for all legislation. One of the most common requests AMOR receives through the support line is for transportation, especially women with children, so that they can get to important appointments and meetings. Driver's licenses are incredibly important assets in our community, especially because public transportation in Rhode Island does not provide reliable service in all of our neighborhoods. People need to get around but do not want to break the law or drive without insurance. Many who would otherwise buy a car cannot do so because their immigration status prevents them from obtaining a license. Rhode Island is one of 13 states attempting to pass legislation that would grant undocumented state residents access to driver's licenses. AMOR has been organizing with The Rhode Island Immigrant Coalition to support the bill and garner public support for the bill and will continue to do so in 2020.
Thank you again for supporting our work this past year, and we hope that you will continue to be part of our growing network. Together, we will keep fighting to close the Wyatt for good while building community-based support systems that decrease our reliance on institutions that promise safety while causing us direct harm. We are also excited to expand our staff by hiring a case manager assistant this year. If you have any further questions or comments, feel free to contact Catarina Lorenzo, AMOR's Director, at (401) 675-1414 or cata@prysm.us.
The AMOR Support Line is a multilingual (currently English & Spanish) line of volunteer operators that connects community members to AMOR's network of services, including comprehensive mental health care, legal support, court accompaniment, community support, transportation, and interpretation.
cata@amorri.org


Listed below are ten content ideas with explanations to get you started. We'll be posting another ten next week too!
Long posts are great for channels such as LinkedIn and Facebook; they are essentially mini blogs and are used when you have something meatier to say. Remember to break up your sentences into paragraphs so that your post is easier to read on both desktop and mobile devices.
On LinkedIn you have a dedicated area to host your posts, on Facebook you can post an Instant Article.
A list is where you bring together various useful content for the benefit of your reader e.g. Top 5 Small Business Bloggers, The 10 Best Free Royalty Free Photo Sites.
These types of post can work well as a blog but also as a mini 'series' on platforms such as Facebook and Instagram.
Think about what your audience may find useful as a curated list and ask them to add their suggestions.
Your mobile phone is a video studio in your pocket – so use it! You don't have to be an editing professional to use videos, simply shoot short and simple videos and post them to your preferred channels.
Video content works well across all channels, just be mindful of the best length e.g. YouTube is ideal for longer videos, Twitter is ideal for really short snippets such as reply to someone who has mentioned you in a tweet and Facebook videos work well under a minute or so.
With pre-recorded video you have the opportunity to 'get it right' unlike using live!
If you write blog posts, share the links to them across all your social media channels. Evergreen content is that which has a long life-span (like an evergreen tree which doesn't lose its leaves) and can be shared more than once over months.
Twitter is a great platform for evergreen content as you can keep sharing away!
Remember your aim is to write useful, entertaining and engaging blog posts for your audience which will be hosted on your website. Sharing the links drives people back to your website to read your content and they may stay on your site for longer!
If you have a freebie i.e. something you give people in return for their email, then be sure to regularly share this across your social media platforms. Tweet about it, create an image, record a video of you showing it off.
Don't be shy about promoting a valuable freebie; it should form a core part of your content calendar.
You can set up landing pages on your website to automate the process of collecting email data and sending out freebies in return.
This seems really obvious, but the internet is crammed full of websites where you can share content from – and they WANT you to share their content!
So when you're reading a blog or watching a video hit that share button and share to one (or more) of your platforms.
Let your perfect customer know why you think it will be useful for them and they may be more encouraged to take the time out to read/watch etc.
If you know it, teach it!
If you've read an amazing book, been on a really useful course, been to a great networking group then share that advice, don't keep it to yourself.
Share the main tips and hints and the reason why you think they will help your audience achieve their aims.
Be generous with your time and knowledge and people will appreciate you.
Post a call to action e.g. buy/order/book now to encourage sales and post about your promotions.
But remember to use these posts sparingly, no one likes being constantly sold to on social media.
Make sure you like influencers within your industry from your business social media accounts, not just your personal profiles. That way when you comment and engage with their content you are raising awareness of your own company.
It's likely that within your industry there are a few really influential people who your perfect customers will love to hear from; so regularly commenting and sharing their content is an incredibly easy way to be socially active.
If your business involves meeting lots of people then get into the habit of taking plenty of photos of you with them. You may be a trainer, a hairdresser, a dog groomer, own a hotel or you may simply attend lots of networking.
Whenever you meet people, if they are relevant to your audience (and they don't mind) upload photos of you with them and tag them/their business.
People love to see and hear you talking about them and will normally re-share these types of posts meaning both businesses have their profiles raised.
And you never know who else in their network may see you!
Next week we will be posting Part Two with another ten ideas.


text:
CREECblog
CREECstore
CREEC Accessibility Project
People with disabilities must have equal access to our civic life. Although the Americans with Disabilities Act (ADA) has been in place for decades, multiple accessibility barriers still exist. The CREEC Accessibility Project fights with urgency to make real the ADA's promises.
About the Accessibility Project
The Accessibility Project focuses on the following areas:
Physical accessibility including:
Stadiums and other entertainment venues
Prisons, jails, and immigration detention
Hotel transportation
Effective communication for Deaf and hard of hearing people including:
Doctors' offices and hospitals
Law enforcement, courts, prisons, jails, and immigration detention
Captioning including open captioning in stadiums and captioning of online content
Refusal to accept relay calls
Fair housing including:
Reasonable accommodations in policies
Reasonable physical modifications in apartments and condos
Fast Advocacy for Communication (FAC)
CREEC regularly provides Fast Advocacy for Communication (FAC) to respond quickly when Deaf or hard of hearing people are denied interpreters or other communication needs. For example, if a doctor's office refuses to provide a sign language interpreter for an upcoming appointment, we can educate that office about the laws requiring effective communication and advocate for them to provide an interpreter to our client. We're often able to resolve the issue before the client's appointment.
While many of our fast advocacy efforts focus on communication issues with doctors and hospitals, we also use this approach to address communication barriers in other settings such as live entertainment and government offices. Here's more information about our FAC program.
If you've been refused a sign language interpreter or other auxiliary aid/service necessary for communication at a future appointment or event, email fac@creeclaw.org for possible FAC.
About the Accessibility Project Director
Martie Lafferty has been practicing disability rights law for two decades. She joined CREEC in March 2019 and is based in our Tennessee office. During her career, Martie has successfully resolved multiple accessibility issues through education, advocacy, negotiation, and litigation. She serves on the Board of Directors of the Disability Rights Bar Association and the Tennessee Fair Housing Council. For more information about Martie, click here.
Increasing the Accessibility of Cities by Monitoring Consent Decrees. As part of CREEC's ongoing work to increase the accessibility of cities to people who use wheelchairs and other mobility devices, we are currently monitoring the compliance of several cities with consent decrees entered in cases where we represented a class of disabled people. Those decrees require cities to install and remediate thousands of ADA compliant curb ramps over multi-year periods. Our monitoring work ensures that these cities are meeting the requirements of the decrees and that the installed and remediated ramps comply with the ADA's requirements for accessibility. Check out this video about installation activities in Portland, Oregon: LINK (https://youtu.be/W7Jd3fwEyhg)
Rogers et al. v Colorado Department of Corrections et al.: On September 18, 2019, a Denver federal court ordered the Colorado Department of Corrections (CDOC) to provide videophones for Deaf prisoners. This order ensures that Deaf prisoners will be able to communicate with their family and friends in sign language. For more information about this case, click here.
Trivette et al. v Tennessee Department of Correction: On March 31, 2020, Civil Rights Education and Enforcement Center (CREEC) and Disability Rights Tennessee (DRT) filed a Complaint in the federal district court for the Middle District of Tennessee on behalf of Mr. Trivette and DRT. The suit is based on violations of federal law that require that state prisons provide inmates in their custody with equal access to programs and services, including providing sign language interpreters and videophones when needed for effective communication, and equal access to phone privileges.
Lashbrook v City of San Jose: CREEC along with co-counsel Goldstein, Borgen, Dardarian & Ho (GBDH), reached a landmark settlement with the City of San Jose on behalf of a class of persons with mobility disabilities. The settlement requires San Jose to install or remediate over twenty-seven thousand accessible curb ramps throughout the City over the next eighteen years, and to appropriate more than $130 million to fund this work. Importantly, class members are able to request curb ramp construction and remediation at specific locations according to this settlement. The settlement was approved on September 2, 2020.
Conferences & Activities
In April 2019, CREEC enjoyed participating in Wellfest at Bridges in Nashville, TN. In addition to sharing information about CREEC, we were pleased to have impromptu meetings with potential clients.
In August 2019, we attended the Tennessee Disability Coalition's (TDC) annual policy retreat. We enjoyed talking with other TDC members about policy issues impacting people with disabilities.
On September 22, 2019, CREEC had a booth at Relay Colorado's Safari Deaf Awareness Day at the Denver Zoo. We shared information about our work, particularly the FAC program.
On October 12, 2019, we had a booth and presented at the DeafNation Expo in Nashville, TN. We shared information about our effective communication work.
For more details about our participation in Safari Deaf Awareness Day and DeafNation Expo, click here.
Inmates with Disabilities: Know Your Rights.
CREEC's Quick Guide to Interpreters in Medical Settings
FAC (Fast Advocacy for Communication) Info Sheet
Investigation of Housing Discrimination of MAT Participants
Recent CREECblog Posts
Disability rights advocates sue Trump Administration for "Migrant Protection Protocols"
CREEC Receives $20,000 Grant from the Denver Foundation
Welcome Kyle!
Civil Rights Advocates Honored for Health Equity Work
Announcing CREEC's First Director of Operations
Categories Select Category Accessibility Americans with Disabilities Act Civil rights Client profiles CREEC news Education and outreach Fair Housing Immigration Immigration detention News Systemic change litigation
Support CREEC
Colorado Office: 1245 E. Colfax Avenue, Suite 400, Denver, CO 80218 303-757-7901
California Offices: 2030 Addison Street, Suite 500, Berkeley, CA 94704 510-431-8484
1825 N. Vermont Avenue, #27916, Los Angeles, CA 90027 805-813-8896
Tennessee Office: 525 Royal Parkway, #293063, Nashville, TN 37229 615-913-5099
Videophone: 720-407-0375
Website Development for Law Firms: Law Firm Web Design


text:
package de.mwvb.zelos.gui.feld;

import de.mwvb.zelos.gui.Dialog;
import de.mwvb.zelos.gui.DialogModel;
import de.mwvb.zelos.model.entity.Feld;
import javafx.stage.Stage;

public class FeldWindow extends Dialog<FeldWindowController, Feld> {

	public FeldWindow(DialogModel<Feld> model) {
		super(model, (model.neu ? "Neues Feld" : ("Feld " + model.e.getName() + " bearbeiten")) + " (Tabelle " + model.parentBez + ")");
	}

	@Override
	protected FeldWindowController createController() {
		return new FeldWindowController();
	}

	@Override
	protected void initWindow(Stage stage) {
		stage.setWidth(700 - 50);
		stage.setHeight(600 -150+70- 50);
		stage.setMinWidth(610 - 50);
		stage.setMinHeight(400 -150+70- 50);

		controller.model2View();
	}
}


text:
thoughts are the shadows of our feelings. ~ nietzsche
The Suitcase Mystery
July 11, 2019	skatoulaki
Murder & MayhemTrue Crime
First things first…I first registered 99shadows.com back in 2005 and, through my own stupidity (and having way too many email addresses to keep track), it expired in 2016 because I missed a payment and by the time I realized it, it was too late to get it back. Imagine my horror when it "reappeared" online as an…eyeshadow blog.
I have spent every June since then hoping and praying that the owner would not renew the domain, and sure enough, that's exactly what happened last month, and I was able to retrieve it through a backorder and an auction (you know, at one point, I even offered the owner a couple hundred bucks for it…I got it back for $29). Woo!
Anyway, I've decided to go in a different direction with the site now. Lately, I've been (obsessively) listening to paranormal and true crime podcasts, so what better topics for a site called 99Shadows than the weird, morbid, and creepy, right?
So…please bear with me as I resuscitate my site (the silly theme is temporary!) and enjoy this true crime story that I wrote in anticipation of being back in the shadows!
I grew up in the small town of East Bridgewater, Massachusetts. About 25 miles south of Boston, it's considered a Boston suburb, but it's very rural to those of us who live there. The neighborhood where I grew up consisted of a lot of smaller homes, most without basements, that had started their lives (as my childhood home had) as summer cottages, several of them occupied only by their Boston area owners during the warmer months.
Across the street from our house (north) was a two-story Cape house and to its east was a one-story ranch. Between those two houses and sort of diagonally across the street from our house was an empty lot. This empty lot went back to a large wooded area that was behind all of the houses on the opposite side of the street from us, all part of a large piece of property belonging to a woman whom we knew as Evelyn Waldorf. Evelyn seemed ancient when I was a kid, and my mother said she was old when she was a kid as well (my mom grew up in the house I grew up in).
The property was known as Robbin's Pond Park Campground, but we all just called it "The Park." The actual campground, and Evelyn's house, were on the other side of the woods and accessible by Pond Street, which wasn't very close to us at all. Hillcrest Road turned into a dirt road across from our house and if you went all the way to the "end," it became a sort of trail that led into the woods, and that's the way most of us kids went into The Park (and got chased out by Evelyn a lot of the time).
Evelyn would occasionally drive down our road and stop her car at the empty lot across the street. This was her way of maintaining "ownership" of it because it really was part of her property, though we had neighbors who seemed think if they mowed the grass there, they'd eventually own it by right somehow.
Anyway, it was mostly a sloping field with some big raspberry bushes in the middle of it, and we kids used to use it for neighborhood games like Red Light/Green Light, Red Rover, and for sledding in the winter.
My mom told me a story once that she'd heard when she was a kid about Evelyn's mother being murdered, but she didn't know all the details, just that she'd been decapitated. She also said that Evelyn's family had changed their last name afterwards to dissociate themselves from the case.
As someone with an inborn fascination with all things weird, I of course needed to know more about Evelyn's mother, but it wasn't until the advent of the internet that I finally got my answers. As it turns out, Evelyn's surname at birth was actually Wolschendorf. Her mother was Alice Mildred (Orcutt) Wolschendorf. I'm not even sure how I first found the story about Alice's death, other than perhaps a simple search for "murder" and "East Bridgewater" and perhaps tossing in "Evelyn"…but eventually I found the story of "The Suitcase Murder."
On September 1, 1923, the headless, dismembered torso of a woman was found floating in a suitcase in the Merrimack River near Tyngsboro, Massachusetts. Two days later, the limbs belonging to that body were discovered in a second suitcase in the river two miles away. Detectives in cities across the state began trying to figure out who the woman was and eventually learned, through a scar on a finger of her right hand identified by her husband George Wolschendorf, that she was his wife Alice, age 43, who had been missing. William Bowen, by whom Alice had been employed as a chauffeur, also identified the body by way of the scar.
From information supplied by the husband and Alice's employer, police began investigating two men – Dr. Dalva H. Swope of Brockton, Massachusetts, and Dr. William H. Robb of Boston, and on September 14, both men were arrested. Dr. Robb was charged with illegal surgery, resulting in death, and Dr. Swope was charged as an accessory (he sent her to Dr. Robb's office), though he (Swope) was never brought to trial and died in January 1926.
In additional confirmation of the story my mother told me is a news article from the Trenton Evening Times (a New Jersey paper) on September 29, 1923, which stated that George Wolschendorf told a reported that he "has taken steps to have his name changed from Wolschendorf to Waldorf. 'I hope in this way I may free myself and my children from association with the suitcase murder some time in the future. The name Wolschendorf has been dragged through the mire.' "
Interestingly, William Bowen attempted suicide by poison and slashing his own throat with a razor on September 16, 1923, apparently despondent over the case (he survived initially, but from the news article below, it appears he died at some point afterwards). Mrs. Wolschendorf was last seen when her son Harold and Mr. Bowen drove her to the vicinity of Dr. Robb's office in Boston on August 27, 1923.
Other news reports covering the case indicate that Dr. Robb told authorities where they could find the missing parts of the body and directed them to a camp in the woods of New Hampshire where the body had been dismembered and where the head and other missing parts were found. Another article said that Alice was the mother of four children with her husband, but that she and George were separated. Her employer, William Bowen, was a real estate developer and the father of seven children.
On December 8, 1923, the following article appeared in The Morning Call (Allentown, Pennsylvania):
CONFESSION CLEARS UP "SUITCASE MYSTERY"
Doctor Dismembered Body After an Illegal Operation
Cambridge, Mass., Dec. 7. (AP)—The solution of the "suitcase mystery," one of the most sensational cases to come before the police of Massachusetts in years, was written today when Dr. William H. Robb, held under an indictment of first degree murder, in connection with the death of Mrs. Alice M. Wolschendorf, of East Bridgewater, pleaded guilty to a charge of illegal surgery in Middlesex Superior Court. Dr. Dalva H. Swope, of Brockton, indicted as accessory before and after the alleged murder, was re-indicted today as an accessory before and after the illegal operation. District Attorney Arthur K. Reading moved for sentence next Tuesday. The murder indictments have not yet been nol prossed.
On the first of September of this year, the headless and dismembered body of a woman was found floating in the Merrimack river near Tyngsboro, Mass. Two days later, the limbs of the body were found in a second suitcase in the river two miles away. State detectives and the police of a dozen cities joined in the unravelling of the mystery. Through a scar on a finger of the right hand, the body was identified by George Wolschendorf as his wife, who was missing. William Bowen, who had employed Mrs. Wolschendorf as a chauffeur, also identified the body by means of the scar.
Through information furnished by the two men, the authorities investigated the movements of Dr. Swope, of Brockton, and Dr. Robb, of Boston. On September 15, Dr. Robb and Dr. Swope were arrested. They protested their innocence.
Two days later, William Bowen, Mrs. Wolschendorf's former employer, committed suicide, although the investigation had never linked his name with the crime.
According to investigators Mrs. Wolschendorf died under ether in the physician's office and then, to avoid identification, the body was dismembered. Portions of the body and the head were never found.
Anyone reading this, especially in the 21st century can pretty much guess what happened. Alice became pregnant and didn't want to be pregnant. Dr. Swope directed her to Dr. Robb for an "illegal operation," and unfortunately, she died during the procedure. We can speculate about who the father of the pregnancy was, but since it was never disclosed, we should probably just leave it to the past.
Evelyn Waldorf (nee Wolschendorf) was born Oct. 6, 1910, so when my mother was growing up in the 1950s, she very well could have seemed "old" to her, and she certainly was old to me growing up in the 70s. She died on August 4 2005. She bequeathed her property to the Full Gospel Tabernacle of Brockton, Mass., but the last I saw it had been sold to a developer and there were issues with the Native American historical significance of the area hindering the development of the land.
Copyright © 2019, . Proudly powered by WordPress. Blackoot design by Iceable Themes.


This white howlite and black agate natural stone bracelet is perfect to add to your collection. If you love black and white you will love this bracelet! Howlite is predominantly a calming stone. It is used when needing to reduce anxiety, tensions and stress. It can also be used to facilitate awareness, encourage emotional expression and assist in the elimination of pain, stress and/or rage. Fits size M-L.