text:
Kolby Lee
Kolby Lee most recently served as a spokesperson for Senator Bernie Sanders' 2020 presidential campaign. As Southern Press Secretary, he oversaw day-to-day communications operations in 14 states, including Texas, Florida, and the Carolinas. Kolby has also held senior communications roles for former U.S. Representative Beto O'Rourke and MJ Hegar, the current Democratic nominee for U.S. Senate in Texas.
After a brief stint on Capitol Hill, Kolby joined the communications team at STG in Washington, DC — a political and public affairs firm founded by two of Barack Obama's senior campaign architects. At STG, Kolby advised some of the nation's leading advocacy organizations fighting for environmental justice, LGBTQ+ equality, and expanded voting rights.
Kolby started his career as a public elementary school teacher. He's a proud alumnus of The University of Texas at Austin.

redpajama_set_name: RedPajamaCommonCrawl


text:
package dao;

import java.io.File;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Properties;

import vos.Boleta;
import vos.Cliente;
import vos.CompaniaTeatro;
import vos.Espectaculo;
import vos.Funcion;
import vos.Lugar;

public class DAOEspectaculos {

	private Connection conexion;

	private String user;

	private String password;

	private String url;

	private String driver;

	private String conectionData;

	private DAOCondiciones condiciones;

	private DAOFuncion funciones;

	private DAOCategorias categorias;

	public DAOCompanias companias;

	public DAOEspectaculos(String conectionDat)
	{
		initConnectionData(conectionDat);
		conectionData = conectionDat;
		condiciones = new DAOCondiciones(conectionData);
		funciones = new DAOFuncion(conectionData);
		categorias = new DAOCategorias(conectionData);
		companias = new DAOCompanias(conectionData)	;
	}

	private void initConnectionData(String conectionData) {
		try {
			File arch = new File(conectionData);
			Properties prop = new Properties();
			FileInputStream in = new FileInputStream(arch);
			prop.load(in);
			in.close();
			this.url = prop.getProperty("url");
			this.user = prop.getProperty("usuario");
			this.password = prop.getProperty("clave");
			this.driver = prop.getProperty("driver");
			Class.forName(driver);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	private void establecerConexion() throws SQLException {
		System.out.println("Connecting to: " + url + " With user: " + user);
		conexion = DriverManager.getConnection(url, user, password);
	}

	public void closeConnection(Connection connection) throws SQLException {
		try {
			connection.close();
			connection = null;
		} catch (SQLException exception) {
			System.err.println("SQLException in closing Connection:");
			exception.printStackTrace();
			throw exception;
		}
	}

	public ArrayList<Espectaculo> darEspectaculos() throws Exception {
		PreparedStatement prepStmt = null;
		ArrayList<Espectaculo> espectaculos = new ArrayList<Espectaculo>();

		try {
			establecerConexion();
			String sql1 = "SELECT * FROM ESPECRES";
			prepStmt = conexion.prepareStatement(sql1);
			ResultSet rs = prepStmt.executeQuery();
			while (rs.next()) {

				int id = Integer.parseInt(rs.getString("ID"));
				String nombre = rs.getString("NOMBRE");
				int duracion = Integer.parseInt(rs.getString("DURACION"));
				ArrayList<String> requerimientos = condiciones.buscarCondicionesPorEspectaculo(id);
				String idioma = rs.getString("IDIOMA");
				double costoProduccion = Double.parseDouble(rs.getString("COSTO_PRODUCCION"));
				String descripcion = rs.getString("DESCRIPCION");
				ArrayList<CompaniaTeatro> companias = this.companias.buscarCompaniasPorEspectaculo(id);
				String publico = rs.getString("PUBLICO");
				String traduccion = rs.getString("TRADUCCION");
				int tip = Integer.parseInt(rs.getString("TIPO_PARTICIPACION"));
				boolean tipoParticipacion = tip == 1 ? false:true;
				ArrayList<String> categorias = this.categorias.buscarCategoriasPorEspectaculo(id);
				ArrayList<Funcion> funciones = this.funciones.buscarFuncionesPorEspectaculo(id);
				espectaculos.add(new Espectaculo(id, nombre, duracion, requerimientos, idioma, costoProduccion, descripcion, categorias, tipoParticipacion, traduccion, publico, funciones, companias));
			}

		} catch (SQLException e) {
			System.err.println("SQLException in executing:");
			e.printStackTrace();
			throw e;
		} finally {
			if (prepStmt != null) {
				try {
					prepStmt.close();
				} catch (SQLException exception) {
					System.err.println("SQLException in closing Stmt:");
					exception.printStackTrace();
					throw exception;
				}
			}
			if (this.conexion != null)
				closeConnection(this.conexion);
			conexion.close();
		}
		return espectaculos;
	}
	public Espectaculo buscarEspectaculoPorPK(int ide) throws Exception {

		PreparedStatement prepStmt = null;
		Espectaculo es = null;

		try {
			establecerConexion();
			String sql = "SELECT * FROM ESPECTACULOS WHERE ID ='" + ide + "'";
			prepStmt = conexion.prepareStatement(sql);
			ResultSet rs = prepStmt.executeQuery();

			while (rs.next()) {
				int id = Integer.parseInt(rs.getString("ID"));
				String nombre = rs.getString("NOMBRE");
				int duracion = Integer.parseInt(rs.getString("DURACION"));
				ArrayList<String> requerimientos = condiciones.buscarCondicionesPorEspectaculo(id);
				String idioma = rs.getString("IDIOMA");
				double costoProduccion = Double.parseDouble(rs.getString("COSTO_PRODUCCION"));
				String descripcion = rs.getString("DESCRIPCION");
				ArrayList<CompaniaTeatro> companias = this.companias.buscarCompaniasPorEspectaculo(id);
				String publico = rs.getString("PUBLICO");
				String traduccion = rs.getString("TRADUCCION");
				int tip = Integer.parseInt(rs.getString("TIPO_PARTICIPACION"));
				boolean tipoParticipacion = tip == 1 ? false:true;
				ArrayList<String> categorias = this.categorias.buscarCategoriasPorEspectaculo(id);
				ArrayList<Funcion> funciones = this.funciones.buscarFuncionesPorEspectaculo(id);
				es=new Espectaculo(id, nombre, duracion, requerimientos, idioma, costoProduccion, descripcion, categorias, tipoParticipacion, traduccion, publico, funciones, companias);
			}

		} catch (SQLException e) {
			System.err.println("SQLException in executing:");
			e.printStackTrace();
			throw e;
		} finally {
			if (prepStmt != null) {
				try {
					prepStmt.close();
				} catch (SQLException exception) {
					System.err.println("SQLException in closing Stmt:");
					exception.printStackTrace();
					throw exception;
				}
			}
			if (this.conexion != null)
				closeConnection(this.conexion);
			conexion.close();
		}
		return es;
	}
	public ArrayList<Integer> buscarEspectaculosPorCompania(int idc) throws Exception {
		PreparedStatement prepStmt = null;
		ArrayList<Integer> espectaculos = new ArrayList<Integer>();

		try {
			establecerConexion();
			String sql = "SELECT * FROM COMPANIA_ESPECTACULOS WHERE ID_COMPANIA = '"+ idc +"'";
			prepStmt = conexion.prepareStatement(sql);
			ResultSet rs = prepStmt.executeQuery();
			while (rs.next()) {
				espectaculos.add( Integer.parseInt(rs.getString("ID_ESPECTACULO")));
			}

		} catch (SQLException e) {
			System.err.println("SQLException in executing:");
			e.printStackTrace();
			throw e;
		} finally {
			if (prepStmt != null) {
				try {
					prepStmt.close();
				} catch (SQLException exception) {
					System.err.println("SQLException in closing Stmt:");
					exception.printStackTrace();
					throw exception;
				}
			}
			if (this.conexion != null)
				closeConnection(this.conexion);
			conexion.close();
		}
		return espectaculos;
	}

}

redpajama_set_name: RedPajamaGithub


A quick view of the most influential metrics in Central Contra Costa.
View our selection of available properties in the Central Contra Costa area.
Check out the latest demographic information available for Central Contra Costa.
Learn more about schools near Central Contra Costa complete with ratings and contact information.
Browse through the top rated businesses in the most popular categories Central Contra Costa has to offer.


Welcome to the Holiday Inn Express & Suites in Woodstock, ON, conveniently located off Hwy 401 (exit 232) near many local attractions and businesses, and a short drive from Stratford, London, Toronto & Hamilton.
Leisure travelers will enjoy staying at our contemporary Woodstock hotel while they explore beautiful Ontario. The nearby Market Centre, Museum & the Art Gallery offer fun for the whole family, while the Woodstock Slots & Raceway give you a true taste of the Woodstock area. Enjoy the annual Stratford Festival May through Dec . The town's many parks and walking trails are a great place to relax during your stay at our hotel.
With convenient access to companies including Toyota, Penske, Purina, CAMI/GM, Sysco, and the Woodstock General Hospital, our hotel is perfect for business travelers who plan to attend meetings in the area. If you need to host a meeting/event during your stay in Woodstock, we can accommodate up to 100 people in our meeting space. Our 24-hour business center and free high-speed Internet access will assist you as you do business on the road.
During your visit to Woodstock, take some time to relax in our indoor pool and enjoy our water slide open Friday, Saturday, and Sunday for select hours. Check out our Woodstock hotel deals today!
Guests looking for lodging in Woodstock can enjoy a comfortable stay in our hotel rooms which feature 49-inch flat screen televisions. All of our modern rooms include free high-speed Internet access, a refrigerator, microwave and one king or two queen beds outfitted in our plush bedding.
Our hotel offers Complimentary Express Start Hot Breakfast Bar every morning. You can enjoy options including cinnamon rolls, western omelets, bacon and pancakes!. For lunch or dinner, there are a variety of restaurants within walking distance.
The Pool is open daily from 5:30 am to 10:00 pm.The Waterslide is open Fridays from 5:00 pm to 10:00 pm, Saturdays from 9:00 am to 10:00 pm Sundays 9:00 am to 12:00 pm. Riders must be 4 feet tall per TSSA Regulation. Call hotel for details.
Our new guest-only fitness centre is equipped with 2 treadmills, 1 elliptical and 1 bike . Also available to our guests are free weights with bench and a variety of fitness accessories including a balance ball and resistance bands.
We love pets, however we do not permit them in our hotel. Violation of this policy will result in a 500 Dollar room rate increase.


text:
Horacio Sala, father of famous Argentinian soccer player, dies three months after his son was killed
By Jillian Cheney
Horacio Sala, father of Argentine soccer player Emiliano Sala, speaks during an interview outside his home in Progreso, Argentina, in January, a day after his son was killed in a plane crash. (Mauricio Garin/AP)
The father of a star Premier League soccer player died Friday, months after his son was killed in a plane crash.
Horacio Sala, 58, suffered from a heart attack and died on Friday morning, a friend confirmed.
Sala's death comes only months after his son Emiliano was killed in a fatal airplane crash in the English Channel.
Emiliano had just been signed on at Cardiff City in a club record deal worth 15 million pounds — nearly $20 million. He was flying from Nantes, France, on Jan. 21 to start training with the club when the crash occurred.
Since the tragedy, the Air Accidents Investigation Branch has been investigating the crash. One potential issue is that the pilot, David Ibbotson, was not allowed to fly at night because he was colorblind, but the plane took off more than an hour after sunset.
The wreckage of the plane and Emiliano's body were found in early February. The body of the pilot has not yet been found.
Emiliano Sala is seen in Nimes, France, on Jan. 16, five days before his death in a plane crash. (Alexandre Dimou/Icon Sport via Getty Images)
Justice for his son was something that Horacio had been devoted to for the past three months.
He told the BBC two weeks ago he wanted to "continue investigating all the things that we have to know and that we can know."
Horacio was a father of three and a long-distance truck driver.
[More U.S. News] 7/11 baby to receive 7-Eleven promos »
His friend, Daniel Ribero, said he was experiencing heart pain this morning and had called an ambulance, but died before that ambulance arrived.


Vegies are vital for health and wellbeing. They are low in fat and they contain important nutrients like dietary fibre, vitamins, minerals and antioxidants. It is important to vary the types of vegies that you eat to ensure that you receive a wide range of these nutrients.
Health authorities recommend that adults eat at least 5 servings of vegetables every day. Research shows however, that most Australian adults eat an average of only 2 – 3 serves each day – half the amount that is recommended for good health.
Edgell makes it easy for you to include more vegetables in your everyday diet. Edgell vegetables are canned for convenience – they can be stored in the cupboard so you can always have a ready supply at hand.
Vegetables are highly nutritious and should form the basis of your everyday diet. It's important to eat a wide variety and the right amounts of different vegetables as they contain nutrients which may protect against disease.
Dietary fibre is carbohydrate from plant foods that passes through the body undigested and benefits digestive health. The main sources of dietary fibre are cereals, fruits, vegetables and legumes.
A well-balanced vegetarian diet is nutritionally sound and may offer additional health benefits. These benefits are attributed to two factors: the absence of saturated fat from meat and a higher intake of fibre and antioxidants from foods such as fruit, vegetables, nuts, grains and legumes.
Antioxidants in food help destroy free radicals and minimise damage to our cells. Vitamin C, vitamin E, beta-carotene and selenium are just some of the nutrients which have antioxidant activity.
The Glycaemic Index differentiates the effect that carbohydrate-containing foods have on the body. It ranks foods according to how quickly or slowly they release glucose into the blood stream. Slow-release carbohydrate foods may have benefits for weight loss, sports performance energy levels and people with diabetes.
Legumes contain a type of carbohydrate known as a resistant starch which behaves in a similar way to dietary fibre. It avoids digestion and absorption in the small intestine (hence the term 'resistant') and moves onto the large intestine where it is broken down by fermentation. Like regular dietary fibre, resistant starch plays an important role in digestive function.


We offer a 7 day return policy on all our products, so you can return your purchase within 7 days of delivery for a full refund providing the item is in an unused and as-new condition. We do not charge for 'administration' costs, however we cannot refund the postage costs. If you decide to return the item for whatever reason, we strongly advise you to send it recorded delivery. Please contact us before you send the item, we will issue you with a returns (RMA) number that you must clearly state on the outside of the returned package. All returns must be returned in a unused and unopened condition, we may reject items that are not returned in this condition.
Goods with minor defects caused during delivery will not be accepted as our fault, as we do make every effort to ensure the products are packaged well. We will however attempt to replace delivery damaged screen protectors at our discretion.
If your package has been delivered with a fault, please contact us immediately. We cannot deal with items after 28 days from the sale date. We will give you a returns (RMA) number and a postal address.
We can take order over the phone as well as online. If you have a custom request or special requirements we will be happy to assist via email or via our contact form located on our contact us page. To order, simply add the required items to the shopping cart, register your details with us and follow the online instructions to pay with PayPal or Credit/Debit Card.
Our special lifetime replacement warranty means if one of our Expert Shield's gets scratched or damaged while protecting your device we will replace the screen protector. We're so confident our screen protectors are the most durable and scratch free you will find, we know they will protect your device for its' lifetime, or as long as you own it. There is no limit to the amount of times you may need your screen protector replacing, however we'll be surprised if you need it at all!
Product names, logos, brands, and other trademarks featured or referred to within this site are the property of their respective trademark holders. These trademark holders are not affiliated with Expert Shield our products, or our website. They do not sponsor or endorse our materials.


Skedsvold & White, LLC, is an AV-rated* firm formed by its founding members Kevin O. Skedsvold and Craig R. White. The two principals of the firm, Kevin O. Skedsvold and Craig R. White have more than 60 years of combined experience in insurance defense, insurance coverage, civil litigation, workers' compensation litigation, corporate/business practice and related areas.
The attorneys of Skedsvold & White , LLC, are available to be an integral part of your team. We advise you to prepare for claims and lawsuits even before they arise. When a claim or lawsuit does eventually arise, we want you to be fully prepared, strategically advantaged and properly positioned to prevail and achieve your goals in an efficient and effective manner.
Contact us to schedule a consultation and preliminary case evaluation. At Skedsvold & White, LLC, we pledge to provide you with timely and candid communication, excellent judgment and solid professional advice. We pledge to use our best efforts to maximize the strength of your case and to pursue maximum advantage for you.


If you wait until graduation announcements go out to start thinking about ordering commemorative items such as pins and rings, then you'll be swamped trying to rush through the necessary legal processes of procuring bids. Let Choice Partners save you staff time and headache by purchasing a cooperative purchasing contract for graduation and commemorative goods.
Our vendors manufacture and distribute high quality brands of all the items traditionally associated with graduation: high school and college rings, championship rings, pins, commercial insignia, stationery, diplomas, yearbooks and awards. If you're a college, school or other governmental entity, Choice Partners legal, competitively bid contracts are the best way to manage procurement of the things students will carry with them for a lifetime.


text:
Megyn Kelly Moment: Fox's "Rising Star" Invites Anti-LGBT Hate Group Leader To Discuss Same-Sex Marriage Ruling
Special Programs LGBTQ
Written by Thomas Bishop
Megyn Kelly invited anti-LGBT hate group leader Tony Perkins to respond to the Supreme Court's ruling in favor of marriage equality. Kelly's insistence on inviting Perkins highlights the host's cozy relationship with the ardent anti-gay group.
In a 5-4 ruling, the Supreme Court found that the Fourteenth Amendment guarantees the right of same-sex couples to marry. Writing for the majority, Justice Anthony Kennedy contended that "Under the Constitution, same-sex couples seek in marriage the same legal treatment as opposite-sex couples, and it would disparage their choices and diminish their personhood to deny them this right."
On the June 26 edition of her Fox News show, Megyn Kelly invited Family Research Council (FRC) president Tony Perkins to discuss the Court's ruling. Perkins claimed that the "freedom to live your life according to your beliefs" is at stake, specifically for Christians who oppose marriage equality. Perkins later stoked fears that "there will be an effort to force people to conform" by threatening religious institutions like colleges with the loss of their tax-exempt status, unless they fully embrace equality.
PERKINS: Religion is so entwined with who we are as a nation. I mean, that's why we have this nation; it was founded upon that freedom to believe, the freedom to live your life according to your beliefs. That's at stake here. And for Christians, for Evangelicals, those who follow the Bible, this is not an issue that can be negotiated away.
PERKINS: This was going to be an issue for religious institutions like colleges and universities and other religious organizations. Not initally the churches. I think they'll leave them alone; they'll be the last they go after. But they'll take away the tax-exemption, the accreditation, they'll take away grants. There will be an effort to force people to conform. We're seeing it in the corporate world. We'll see it in government, we'll see it in the public square. But I'm just here to say, Megyn, that this is not going to go away. Just as Roe v. Wade did not solve the abortion issue, this is not going to solve the issue of what marriage is.
The Southern Poverty Law Center has billed Tony Perkin's FRC an anti-LGBT hate group whose "real specialty is defaming gays and lesbians." Perkins has called pedophilia "a homosexual problem" and claimed that LGBT advocates target kids "to recruit them into that 'lifestyle.'"
Despite his extremism, Perkins has found a safe place in Kelly's show to spew his anti-gay rhetoric. As Media Matters documented, the hate group leader has appeared on The Kelly File more than any other Fox show combined over a two-year period.
QAnon supporters overjoyed after Trump endorses the unhinged conspiracy theory
Fox Nation's newest show is hosted by a QAnon supporter
Tomi Lahren's appearance in Fox Nation "comedy" special is just a laundry list of right-wing talking points
Video & Audio 06/12/20 5:18 PM EDT


text:
Niue and PiK Coins debut an atmospheric Al Capone silver coin to launch the new 'Gangsters' series
Murder, extortion, bootlegging, prostitution, bribery, and tax evasion – the life of a gangster is a busy one. Nobody epitomises that more than the classic mobster, Alphonse Gabriel Capone, more popularly known as Al. Born in New York City in 1899, Capone joined the Five Points Gang at an early age, working as a bouncer in brothels, but it wasn't long before he headed off to Chicago with a promotion. Becoming the bodyguard to Johnny Torrio, head of a bootlegging syndicate, he was in the perfect position to take over when Torrio retired after a close assassination attempt.
Capone rose to the challenge, expanding the business, and becoming a celebrity in the process, mixing with the politicians and musicians of the time, coming to be seen as a modern-day Robin Hood. Whereas Robin Hood only had to deal with the Sheriff of Nottingham, Al came up with the meanest, nastiest, most powerful opponent of all time – the taxman… Convicted on five counts of tax evasion in 1931, he served eight years, but was already suffering from neurosyphilis on release, and became increasingly debilitated, dying in early 1947.
It's surprising that the world of gangsters and true crime hasn't been more widely used in the modern numismatic world. There was an Al Capone wanted poster coin issued in early 2015 as the start of a 'Public Enemies' series that didn't proceed any further, but in general, very little presence – strange given how popular the genre is in other fields, and how influential Capone has been in popular culture.
Step forward, German-based dealer PiK Coins with a striking first release in a four-coin series called simply, 'Gangsters', and where better to start than the quintessential example of the breed, Al Capone. You'll recognise the classic format from the images. The two-ounce, rimless, antique-finished, ultra-high-relief strike has become the darling of the coin world, having that perfect balance between relative affordability and allowing technical flexibility. It's used to great effect here, with an excellent depiction of the gangster at work in the prohibition-era United States.
It's a great scene with tons of cool touches. The car has nods to Capone's bulletproof 1928 Cadillac V8 Town Car, the henchman carrying the famous Thompson submachine gun, and the bootlegging operation, but it's the smug, swaggering depiction of Capone that lifts it up, complete with holstered revolver. The bullet hole that looks like it has torn through the coin is also a neat touch. A revolver puts in an appearance on the obverse as well, and in some style. Designed to replicate the cylinder from an eight-round gun, it's filled with four gilded 9 mm rounds, and the bullet hole from the reverse is cleverly incorporated into the design as an open chamber. We're not sure what the actual gun is, but no doubt one of our readers will know. It does look great, though.
Packaging looks to have just as much care and attention expended on it. It will be designed to ape the boxes used for smuggling alcohol and weapons during the Prohibition-era, and it will have four slots inside to hold the whole four-coin series, you can see it in the video. We wish more producers would do this. So much neater to have a single high-quality box to hold the entire series, rather than having multiple generic boxes. Each certificate has been themed to look like an appointment letter, so it will be interesting to see that. Available to pre-order shortly, this is a terrific debut for an intriguing new series.
DENOMINATION $5 NZD (Niue)
COMPOSITION 0.999 silver
DIMENSIONS 45.0 mm
FINISH Antique
MODIFICATIONS Ultra high-relief, Gilding
MINTAGE 500
BOX / C.O.A. Yes / Yes
By Mik Woodgate|2021-12-15T12:04:52+00:00December 14th, 2021|Categories: History, Gilded, People, Silver, Niue Island|4 Comments
Christian Rodriguez June 26, 2022 at 23:21 - Reply
When is the next coin in the series coming out? Who is it?
We are on AgAuNEWS :) - Modern numismatic coins online store - PiK Coins September 19, 2022 at 12:15 - Reply
[…] https://agaunews.com/niue-and-pik-coins-debut-an-atmospheric-al-capone-silver-coin-to-launch-the-new… […]
Mark January 26, 2023 at 18:03 - Reply
Any news on this series?
Hoffman Gold and Silver Exchange LLC
Mik Woodgate January 26, 2023 at 18:52 - Reply
https://agaunews.com/pik-coins-returns-to-the-world-of-classic-gangsters-with-the-legendary-outlaw-lovers-bonnie-clyde/


- Once you have completed the installation steps, you'll get a Ubuntu machine, with a //root// and user account (preconfigured to use //sudo//) and lots of pre-installed applications (but no graphics). If you want to open a terminal, just select //Ubuntu// from the Start menu, and you'll get a bash terminal running inside a regular Windows ''cmd'' program + Once you have completed the installation steps, you'll get a Ubuntu machine, with a //root// and user account (preconfigured to use //sudo//) and lots of pre-installed applications (but no graphics).
+ You can install additional //graphical// terminals inside the Linux running in WSL, but you will need to have a running //X server// if you want to open them. In these terminals, the //usual// Linux copy/paste rules will apply!
- Read the detailed [[https://blogs.msdn.microsoft.com/wsl/2016/06/15/wsl-file-system-support/|WSL File System Support]] page if you want to (try to) understand how things work and how both systems can share files. + You can optionally read the detailed [[https://blogs.msdn.microsoft.com/wsl/2016/06/15/wsl-file-system-support/|WSL File System Support]] page if you want to (try to) understand how things work and how both systems can share files.
+ Read the [[#mounting_disks_and_network_drives|Mounting disks and network drives]] section if you want to access remote server disks on your local network, or just wan to access USB disks/sticks on your local computer.
+ The ''Ubuntu **16**.04.3 LTS'' that was initially installed from the //Windows Store// when the test computer was running ''Win 10 1709'' was automatically updated to ''Ubuntu **18**.04.2 LTS'' when the computer was updated to ''Win 10 1809''.
+ No LSB modules are available.
+ * Make sure you also read the [[other:win10wsl#ssh_agent_and_keys_related_questions|ssh, agent and keys related questions]] section!
+ * This will make it easier to start emacs, but since this is a graphical Linux application, you need to have an X server running before you click on the shortcut!
+ By default, the local disks and the external USB disks available (and decrypted!) when the first WSL terminal is opened are automatically available (//mounted//) in ''/mnt'' : the content of ''C:\'' is available in ''/mnt/c'', etc... The list is refreshed when Windows (or just WSL) is rebooted .
+ Extra local disks or //network drives// (what you can access by opening ''\\dfshost\dfs\'' in the file explorer when you are on the LSCE network) can be either mounted on the fly with the ''mount'' command, or automatically by configuring the ''/etc/fstab'' file.
+ <wrap hi>Warning!</wrap> In all cases, the owner, groups and permissions displayed may not be accurate (but the actual access rights will apply).
+ * and then disable WSL???


text:
import { ECDSA, Ecdsa } from '../../../../account-lib/mpc/tss';
import { bigIntToBufferBE } from '../../../../account-lib/mpc/util';
import * as openpgp from 'openpgp';
import { SerializedKeyPair } from 'openpgp';
import { AddKeychainOptions, ApiKeyShare, CreateBackupOptions, Keychain, KeyType } from '../../../keychain';
import ECDSAMethods, { ECDSAMethodTypes } from '../../../tss/ecdsa';
import { IBaseCoin, KeychainsTriplet } from '../../../baseCoin';
import baseTSSUtils from '../baseTSSUtils';
import { DecryptableNShare, KeyShare } from './types';
import {
  BackupKeyShare,
  BitgoHeldBackupKeyShare,
  RequestType,
  TSSParams,
  TxRequest,
  TSSParamsForMessage,
} from '../baseTypes';
import { getTxRequest } from '../../../tss/common';
import { AShare, DShare, EncryptedNShare, SendShareType } from '../../../tss/ecdsa/types';
import { generateGPGKeyPair, getBitgoGpgPubKey } from '../../opengpgUtils';
import { BitGoBase } from '../../../bitgoBase';
import { IWallet } from '../../../wallet';
import assert from 'assert';
import { bip32 } from '@bitgo/utxo-lib';
import { buildNShareFromAPIKeyShare, getParticipantFromIndex } from '../../../tss/ecdsa/ecdsa';

const encryptNShare = ECDSAMethods.encryptNShare;

/** @inheritdoc */
export class EcdsaUtils extends baseTSSUtils<KeyShare> {
  private bitgoPublicGpgKey: openpgp.Key | undefined = undefined;

  constructor(bitgo: BitGoBase, baseCoin: IBaseCoin, wallet?: IWallet) {
    super(bitgo, baseCoin, wallet);
    this.setBitgoGpgPubKey(bitgo);
  }

  private async setBitgoGpgPubKey(bitgo) {
    this.bitgoPublicGpgKey = await getBitgoGpgPubKey(bitgo);
  }

  async getBitgoPublicGpgKey(): Promise<openpgp.Key> {
    if (!this.bitgoPublicGpgKey) {
      // retry getting bitgo's gpg key
      await this.setBitgoGpgPubKey(this.bitgo);
      if (!this.bitgoPublicGpgKey) {
        throw new Error("Failed to get Bitgo's gpg key");
      }
    }

    return this.bitgoPublicGpgKey;
  }

  /**
   * Gets the common public key from commonKeychain.
   *
   * @param {String} commonKeychain common key chain between n parties
   * @returns {string} encoded public key
   */
  static getPublicKeyFromCommonKeychain(commonKeychain: string): string {
    if (commonKeychain.length !== 130) {
      throw new Error(`Invalid commonKeychain length, expected 130, got ${commonKeychain.length}`);
    }
    const commonPubHexStr = commonKeychain.slice(0, 66);
    return commonPubHexStr;
  }

  async finalizeBitgoHeldBackupKeyShare(
    keyId: string,
    commonKeychain: string,
    userKeyShare: KeyShare,
    bitgoKeychain: Keychain
  ): Promise<BitgoHeldBackupKeyShare> {
    const bitgoGpgKey = await this.getBitgoPublicGpgKey();
    const encryptedUserToBackupShare = await encryptNShare(userKeyShare, 2, bitgoGpgKey.armor());
    const bitgoToBackupKeyShare = bitgoKeychain.keyShares?.find(
      (keyShare) => keyShare.from === 'bitgo' && keyShare.to === 'backup'
    );
    const userPublicShare = Buffer.concat([
      Buffer.from(userKeyShare.nShares[2].y, 'hex'),
      Buffer.from(userKeyShare.nShares[2].chaincode, 'hex'),
    ]).toString('hex');
    assert(bitgoToBackupKeyShare);
    const keyResponse = await this.bitgo
      .put(this.baseCoin.url(`/krs/backupkeys/${keyId}`))
      .send({
        commonKeychain,
        keyShares: [
          {
            from: 'user',
            to: 'backup',
            publicShare: userPublicShare,
            privateShare: encryptedUserToBackupShare.encryptedPrivateShare,
          },
          bitgoToBackupKeyShare,
        ],
      })
      .result();
    if (!keyResponse || !keyResponse.commonKeychain) {
      throw new Error('Failed backup key verification.');
    }
    return {
      id: keyResponse.id,
      keyShares: keyResponse.keyShares,
      commonKeychain: keyResponse.commonKeychain,
    };
  }

  /** @inheritdoc */
  async createKeychains(params: {
    passphrase: string;
    enterprise?: string | undefined;
    originalPasscodeEncryptionCode?: string | undefined;
    backupProvider?: string;
  }): Promise<KeychainsTriplet> {
    const MPC = new Ecdsa();
    const m = 2;
    const n = 3;

    const userKeyShare = await MPC.keyShare(1, m, n);
    const userGpgKey = await generateGPGKeyPair('secp256k1');

    const isThirdPartyBackup = this.isValidThirdPartyBackupProvider(params.backupProvider);
    const backupKeyShare = await this.createBackupKeyShares(isThirdPartyBackup, userGpgKey);

    const bitgoKeychain = await this.createBitgoKeychain(
      userGpgKey,
      userKeyShare,
      backupKeyShare,
      params.enterprise,
      isThirdPartyBackup
    );
    const userKeychainPromise = this.createUserKeychain(
      userGpgKey,
      userKeyShare,
      backupKeyShare,
      bitgoKeychain,
      params.passphrase,
      params.originalPasscodeEncryptionCode,
      isThirdPartyBackup
    );
    const backupKeychainPromise = this.createBackupKeychain(
      userGpgKey,
      userKeyShare,
      backupKeyShare,
      bitgoKeychain,
      params.passphrase,
      params.backupProvider
    );

    const [userKeychain, backupKeychain] = await Promise.all([userKeychainPromise, backupKeychainPromise]);

    return {
      userKeychain,
      backupKeychain,
      bitgoKeychain,
    };
  }

  /**
   * If a third party backup is requested, it will create backup shares from
   * a third party (BitGo as of now), otherwise the key shares will be client generated
   */
  async createBackupKeyShares(
    isThirdPartyBackup = false,
    userGpgPubKey: SerializedKeyPair<string>
  ): Promise<BackupKeyShare> {
    let backupKeyShare: BackupKeyShare;
    if (isThirdPartyBackup) {
      const bitgoHeldBackupKeyShares = await this.createBitgoHeldBackupKeyShare(userGpgPubKey);
      backupKeyShare = {
        bitGoHeldKeyShares: bitgoHeldBackupKeyShares,
      };
    } else {
      const MPC = new Ecdsa();
      const m = 2;
      const n = 3;
      backupKeyShare = {
        userHeldKeyShare: await MPC.keyShare(2, m, n),
      };
    }
    return backupKeyShare;
  }

  createUserKeychain(
    userGpgKey: SerializedKeyPair<string>,
    userKeyShare: KeyShare,
    backupKeyShare: BackupKeyShare,
    bitgoKeychain: Keychain,
    passphrase: string,
    originalPasscodeEncryptionCode?: string,
    isThirdPartyBackup = false
  ): Promise<Keychain> {
    if (isThirdPartyBackup && backupKeyShare.bitGoHeldKeyShares?.keyShares) {
      return this.createUserKeychainFromThirdPartyBackup(
        userGpgKey,
        userKeyShare,
        backupKeyShare.bitGoHeldKeyShares.keyShares,
        bitgoKeychain,
        passphrase,
        originalPasscodeEncryptionCode
      );
    }
    assert(backupKeyShare.userHeldKeyShare);
    return this.createParticipantKeychain(
      userGpgKey,
      1,
      userKeyShare,
      backupKeyShare.userHeldKeyShare,
      bitgoKeychain,
      passphrase,
      originalPasscodeEncryptionCode
    );
  }

  async createBackupKeychain(
    userGpgKey: SerializedKeyPair<string>,
    userKeyShare: KeyShare,
    backupKeyShare: BackupKeyShare,
    bitgoKeychain: Keychain,
    passphrase?: string,
    backupProvider?: string
  ): Promise<Keychain> {
    if (this.isValidThirdPartyBackupProvider(backupProvider) && backupKeyShare.bitGoHeldKeyShares?.keyShares) {
      assert(bitgoKeychain.commonKeychain);
      const finalizedBackupKeyShare = await this.finalizeBitgoHeldBackupKeyShare(
        backupKeyShare.bitGoHeldKeyShares.id,
        bitgoKeychain.commonKeychain,
        userKeyShare,
        bitgoKeychain
      );
      if (finalizedBackupKeyShare.commonKeychain !== bitgoKeychain.commonKeychain) {
        throw new Error('Failed to create backup keychain - commonKeychains do not match');
      }
      const backupKeyParams: CreateBackupOptions = {
        source: 'backup',
        keyType: 'tss',
        commonKeychain: finalizedBackupKeyShare.commonKeychain,
        provider: backupProvider ?? 'BitGoKRS',
      };
      return await this.baseCoin.keychains().createBackup(backupKeyParams);
    }
    assert(backupKeyShare.userHeldKeyShare);
    assert(passphrase);
    return this.createParticipantKeychain(
      userGpgKey,
      2,
      userKeyShare,
      backupKeyShare.userHeldKeyShare,
      bitgoKeychain,
      passphrase
    );
  }

  /** @inheritdoc */
  async createBitgoKeychain(
    userGpgKey: SerializedKeyPair<string>,
    userKeyShare: KeyShare,
    backupKeyShare: BackupKeyShare,
    enterprise?: string,
    isThirdPartyBackup = false
  ): Promise<Keychain> {
    const bitgoPublicGpgKey = await this.getBitgoPublicGpgKey();
    const recipientIndex = 3;
    const userToBitgoShare = await encryptNShare(userKeyShare, recipientIndex, bitgoPublicGpgKey.armor());

    const backupToBitgoShare = await this.getBackupEncryptedNShare(
      backupKeyShare,
      recipientIndex,
      bitgoPublicGpgKey.armor(),
      isThirdPartyBackup
    );

    const createBitGoMPCParams: AddKeychainOptions = {
      keyType: 'tss' as KeyType,
      source: 'bitgo',
      keyShares: [
        {
          from: 'user',
          to: 'bitgo',
          publicShare: userToBitgoShare.publicShare,
          privateShare: userToBitgoShare.encryptedPrivateShare,
          n: userToBitgoShare.n,
          vssProof: userToBitgoShare.vssProof,
        },
        {
          from: 'backup',
          to: 'bitgo',
          publicShare: backupToBitgoShare.publicShare,
          privateShare: backupToBitgoShare.encryptedPrivateShare,
          n: backupToBitgoShare.n,
          vssProof: backupToBitgoShare.vssProof,
        },
      ],
      userGPGPublicKey: userGpgKey.publicKey,
      // BitGo is the only supported third party backup as of now, so the
      // backup GPG key is the same as bitgo GPG key. Else user holds backup.
      backupGPGPublicKey: isThirdPartyBackup ? bitgoPublicGpgKey.armor() : userGpgKey.publicKey,
      enterprise: enterprise,
    };

    return await this.baseCoin.keychains().add(createBitGoMPCParams);
  }

  /**
   * This builds the relevant backup encryptedNShare based on whether the
   * backup key is user or third party generated
   * @param backupShare can either have key shares from the user or third party
   * @param recipientIndex index of the party receiving the backup shares
   * @param recipientGpgPublicArmor gpg armor of the party receiving the backup shares
   * @param isThirdPartyBackup whether the backup is generated by third party
   */
  async getBackupEncryptedNShare(
    backupShare: BackupKeyShare,
    recipientIndex: number,
    recipientGpgPublicArmor: string,
    isThirdPartyBackup = false
  ): Promise<EncryptedNShare> {
    let backupToBitgoShare: EncryptedNShare;
    if (isThirdPartyBackup) {
      if (!backupShare.bitGoHeldKeyShares) {
        throw new Error(`Missing third party backup key shares`);
      }
      const backupToOtherApiShare = backupShare.bitGoHeldKeyShares.keyShares.find(
        (keyShare) => keyShare.from === 'backup' && keyShare.to === getParticipantFromIndex(recipientIndex)
      );
      if (!backupToOtherApiShare) {
        throw new Error(`Missing backup to ${getParticipantFromIndex(recipientIndex)} key share`);
      }
      // Since backup is from a third party, it is already encrypted
      backupToBitgoShare = await buildNShareFromAPIKeyShare(backupToOtherApiShare);
    } else {
      assert(backupShare.userHeldKeyShare);
      backupToBitgoShare = await encryptNShare(backupShare.userHeldKeyShare, recipientIndex, recipientGpgPublicArmor);
    }
    return backupToBitgoShare;
  }

  /**
   * This uses the backup key from a third party (bitgo in this case)
   * to create the user keychain via WP.
   */
  async createUserKeychainFromThirdPartyBackup(
    userGpgKey: openpgp.SerializedKeyPair<string>,
    userKeyShare: KeyShare,
    backupKeyShares: ApiKeyShare[],
    bitgoKeychain: Keychain,
    passphrase: string,
    originalPasscodeEncryptionCode?: string
  ): Promise<Keychain> {
    const bitgoKeyShares = bitgoKeychain.keyShares;
    if (!bitgoKeyShares) {
      throw new Error('Missing BitGo key shares');
    }
    if (!bitgoKeychain.commonKeychain) {
      throw new Error(`Missing common key chain: ${bitgoKeychain.commonKeychain}`);
    }

    const bitGoToUserShare = bitgoKeyShares.find((keyShare) => keyShare.from === 'bitgo' && keyShare.to === 'user');
    if (!bitGoToUserShare) {
      throw new Error('Missing BitGo to User key share');
    }

    const backupToUserShare = backupKeyShares.find((keyShare) => keyShare.from === 'backup' && keyShare.to === 'user');
    if (!backupToUserShare) {
      throw new Error('Missing Backup to User key share');
    }

    const bitgoPublicGpgKey = await this.getBitgoPublicGpgKey();

    const backupToUserNShare = await buildNShareFromAPIKeyShare(backupToUserShare);
    const bitGoToUserNShare = await buildNShareFromAPIKeyShare(bitGoToUserShare);
    const encryptedNShares: DecryptableNShare[] = [
      {
        nShare: backupToUserNShare,
        recipientPrivateArmor: userGpgKey.privateKey,
        senderPublicArmor: bitgoPublicGpgKey.armor(), // since bitgo is acting as Backup KRS for now
        isbs58Encoded: false,
      },
      {
        nShare: bitGoToUserNShare,
        recipientPrivateArmor: userGpgKey.privateKey,
        senderPublicArmor: bitgoPublicGpgKey.armor(),
        isbs58Encoded: false,
      },
    ];

    const userCombinedKey = await ECDSAMethods.createCombinedKey(
      userKeyShare,
      encryptedNShares,
      bitgoKeychain.commonKeychain
    );
    if (userCombinedKey.commonKeychain !== bitgoKeychain.commonKeychain) {
      throw new Error('Failed to create user keychain - commonKeychains do not match.');
    }

    const prv = JSON.stringify(userCombinedKey.signingMaterial);
    const userKeychainParams = {
      source: 'user',
      keyType: 'tss' as KeyType,
      commonKeychain: userCombinedKey.commonKeychain,
      prv: prv,
      encryptedPrv: this.bitgo.encrypt({
        input: prv,
        password: passphrase,
      }),
      originalPasscodeEncryptionCode,
    };

    const keychains = this.baseCoin.keychains();
    return await keychains.add(userKeychainParams);
  }

  /** @inheritdoc */
  async createParticipantKeychain(
    userGpgKey: openpgp.SerializedKeyPair<string>,
    recipientIndex: number,
    userKeyShare: KeyShare,
    backupKeyShare: KeyShare,
    bitgoKeychain: Keychain,
    passphrase: string,
    originalPasscodeEncryptionCode?: string
  ): Promise<Keychain> {
    const bitgoKeyShares = bitgoKeychain.keyShares;
    if (!bitgoKeyShares) {
      throw new Error('Missing BitGo key shares');
    }
    if (!bitgoKeychain.commonKeychain) {
      throw new Error(`Missing common key chain: ${bitgoKeychain.commonKeychain}`);
    }

    let recipient: string;
    let keyShare: KeyShare;
    let otherShare: KeyShare;
    if (recipientIndex === 1) {
      keyShare = userKeyShare;
      otherShare = backupKeyShare;
      recipient = 'user';
    } else if (recipientIndex === 2) {
      keyShare = backupKeyShare;
      otherShare = userKeyShare;
      recipient = 'backup';
    } else {
      throw new Error('Invalid user index');
    }

    const bitGoToRecipientShare = bitgoKeyShares.find(
      (keyShare) => keyShare.from === 'bitgo' && keyShare.to === recipient
    );
    if (!bitGoToRecipientShare) {
      throw new Error('Missing BitGo to User key share');
    }

    const bitgoPublicGpgKey = await this.getBitgoPublicGpgKey();

    const backupToUserShare = await encryptNShare(otherShare, recipientIndex, userGpgKey.publicKey);
    const encryptedNShares: DecryptableNShare[] = [
      {
        nShare: backupToUserShare,
        recipientPrivateArmor: userGpgKey.privateKey,
        senderPublicArmor: userGpgKey.publicKey,
      },
      {
        nShare: {
          i: recipientIndex,
          j: 3,
          publicShare: bitGoToRecipientShare.publicShare,
          encryptedPrivateShare: bitGoToRecipientShare.privateShare,
          n: bitGoToRecipientShare.n!,
          vssProof: bitGoToRecipientShare.vssProof,
        },
        recipientPrivateArmor: userGpgKey.privateKey,
        senderPublicArmor: bitgoPublicGpgKey.armor(),
        isbs58Encoded: false,
      },
    ];

    const userCombinedKey = await ECDSAMethods.createCombinedKey(
      keyShare,
      encryptedNShares,
      bitgoKeychain.commonKeychain
    );

    const prv = JSON.stringify(userCombinedKey.signingMaterial);
    const userKeychainParams = {
      source: recipient,
      keyType: 'tss' as KeyType,
      commonKeychain: bitgoKeychain.commonKeychain,
      prv: prv,
      encryptedPrv: this.bitgo.encrypt({
        input: prv,
        password: passphrase,
      }),
      originalPasscodeEncryptionCode,
    };

    const keychains = this.baseCoin.keychains();
    const result =
      recipientIndex === 1 ? await keychains.add(userKeychainParams) : await keychains.createBackup(userKeychainParams);
    return result;
  }

  /**
   * Gets signing key, txRequestResolved and txRequestId
   * @param {string | TxRequest} params.txRequest - transaction request object or id
   * @param {string} params.prv - decrypted private key
   * @param { string} params.reqId - request id
   * @returns {Promise<ECDSASigningRequestBaseResult>}
   */
  private async signRequestBase(params: TSSParams | TSSParamsForMessage, requestType: RequestType): Promise<TxRequest> {
    let txRequestResolved: TxRequest;
    let txRequestId: string;

    const { txRequest, prv } = params;

    if (typeof txRequest === 'string') {
      txRequestResolved = await getTxRequest(this.bitgo, this.wallet.id(), txRequest);
      txRequestId = txRequestResolved.txRequestId;
    } else {
      txRequestResolved = txRequest;
      txRequestId = txRequest.txRequestId;
    }

    const userSigningMaterial: ECDSAMethodTypes.SigningMaterial = JSON.parse(prv);
    if (userSigningMaterial.pShare.i !== 1) {
      throw new Error('Invalid user key');
    }
    if (!userSigningMaterial.backupNShare) {
      throw new Error('Invalid user key - missing backupNShare');
    }

    const MPC = new Ecdsa();
    const signingKey = MPC.keyCombine(userSigningMaterial.pShare, [
      userSigningMaterial.bitgoNShare,
      userSigningMaterial.backupNShare,
    ]);

    const threshold = 2;
    const numShares = 3;
    const uShares = Ecdsa.shamir.split(BigInt(userSigningMaterial.pShare.uu), threshold, numShares);
    const userSignShare = await ECDSAMethods.createUserSignShare(signingKey.xShare, signingKey.yShares[3]);

    const u = bigIntToBufferBE(uShares.shares[3], 32).toString('hex');

    let chaincode = userSigningMaterial.bitgoNShare.chaincode;
    while (chaincode.length < 64) {
      chaincode = '0' + chaincode;
    }
    const signerShare = bip32.fromPrivateKey(Buffer.from(u, 'hex'), Buffer.from(chaincode, 'hex')).toBase58();
    const bitgoGpgKey = await getBitgoGpgPubKey(this.bitgo);
    const encryptedSignerShare = (await openpgp.encrypt({
      message: await openpgp.createMessage({
        text: signerShare,
      }),
      config: {
        rejectCurves: new Set(),
      },
      encryptionKeys: [bitgoGpgKey],
    })) as string;

    const bitgoToUserAShare = (await ECDSAMethods.sendShareToBitgo(
      this.bitgo,
      this.wallet.id(),
      txRequestId,
      requestType,
      SendShareType.KShare,
      userSignShare.kShare,
      encryptedSignerShare
    )) as AShare;

    const userGammaAndMuShares = await ECDSAMethods.createUserGammaAndMuShare(userSignShare.wShare, bitgoToUserAShare);
    const userOmicronAndDeltaShare = await ECDSAMethods.createUserOmicronAndDeltaShare(
      userGammaAndMuShares.gShare as ECDSA.GShare
    );

    const muShare = userGammaAndMuShares.muShare!;
    const dShare = userOmicronAndDeltaShare.dShare;
    const bitgoToUserDShare = (await ECDSAMethods.sendShareToBitgo(
      this.bitgo,
      this.wallet.id(),
      txRequestId,
      requestType,
      SendShareType.MUShare,
      { muShare, dShare, i: muShare.i }
    )) as DShare;

    let signablePayload;

    if (requestType === RequestType.tx) {
      assert(txRequestResolved.transactions, 'Unable to find transactions in txRequest');
      signablePayload = Buffer.from(txRequestResolved.transactions[0].unsignedTx.signableHex, 'hex');
    } else if (requestType === RequestType.message) {
      const finalMessage = (params as TSSParamsForMessage).messageEncoded;
      assert(finalMessage, 'finalMessage is required');
      signablePayload = Buffer.from(finalMessage);
    }
    const userSShare = await ECDSAMethods.createUserSignatureShare(
      userOmicronAndDeltaShare.oShare,
      bitgoToUserDShare,
      signablePayload
    );

    await ECDSAMethods.sendShareToBitgo(
      this.bitgo,
      this.wallet.id(),
      txRequestId,
      requestType,
      SendShareType.SShare,
      userSShare
    );
    return await getTxRequest(this.bitgo, this.wallet.id(), txRequestId);
  }

  /**
   * Signs the transaction associated to the transaction request.
   * @param {string | TxRequest} params.txRequest - transaction request object or id
   * @param {string} params.prv - decrypted private key
   * @param {string} params.reqId - request id
   * @returns {Promise<TxRequest>} fully signed TxRequest object
   */
  async signTxRequest(params: TSSParams): Promise<TxRequest> {
    return this.signRequestBase(params, RequestType.tx);
  }

  /**
   * Signs the message associated to the transaction request.
   * @param {string | TxRequest} params.txRequest - transaction request object or id
   * @param {string} params.prv - decrypted private key
   * @param {string} params.reqId - request id
   * @returns {Promise<TxRequest>} fully signed TxRequest object
   */
  async signTxRequestForMessage(params: TSSParamsForMessage): Promise<TxRequest> {
    if (!params.messageRaw) {
      throw new Error('Raw message required to sign message');
    }
    return this.signRequestBase(params, RequestType.message);
  }
}


At least for me…I got to be Batman. My poor brother always had to be Robin! The point is, in my 6 year old mind, I really WAS Batman! I had a Batmobile with all those cool gadgets on it and I was saving Gotham city from all the bad guys!
I still play make believe.
WHAT?! - Just stay with me here for a minute here.
When you're a grown-up (that part is always questionable too) you call it "creative visualization" (I call it "creative inspiration!) But really – it's playing make believe! And it's fun. It makes you feel good.
And that's the point. When we feel good, we're happy. Here's an interesting fact, our bodies function better when we are happy. We are healthier. Mentally too – we have a better attitude in general, when we practice creative visualization.
Why is that? Because when we play make believe, anything is possible. We have super powers. All our dreams come true!
Here's another interesting fact: your body does not know the difference between make believe and reality. That's right. You understood correctly. That's why stress is so common. When you lose your keys in the morning and you're going to be late for work and run all over the house looking for them, your body thinks you are running away from a lion – it goes into "flight or fight" mode. Your heart rate goes up, you get a hit of adrenalin so you can run faster and you might even start to sweat. Not healthy.
So the next time you lose your keys, just stop for a second, and calmly remind yourself that this is not a real emergency. Then WALK around the house and find your keys.
Now let's get back to playing make believe. What about our minds? On some level, they know the difference between make believe and reality, but we give our minds permission to let the creative side go wild for a certain amount of time. We shut down the analytical, "nay-saying" side of the brain, for that certain amount of time.
After all, it's just make believe!
Our bodies don't know the difference between reality and make believe.
It's to "make (you) believe" that anything is possible!
So, I leave you with this question: Do you wanna play make believe?


Organizing a Lightroom catalog can be a deceptively difficult undertaking.
And, with constant updates (get the latest LR version) being made and applied to the program, it can be difficult for some people to keep up.
Lightroom workflow classes and workshops can cost upwards of hundreds of dollars, but Adobe's all-in-one organizing and editing wunderkind, many feel that understanding the software is a necessity to getting a foot in the door as a photographer.
We aren't arguing the importance of grasping Lightroom as a working professional. However, mastering it doesn't have to come at the sacrifice of your time or money. Here, we've listed some of the major focal points keys to forming an efficient workflow of your own.
So, what are the best ways to chop down your time spent in post-processing?
The answer's not as clear cut as one might expect.
What makes Lightroom so difficult to grasp is that there's no one right or wrong way to approach it. Different Lightroom workflow styles work more or less effectively for different individuals.
What's most important in planning a course of action is ensuring that the plan itself makes sense to YOU, personally. Identify what you're trying to accomplish and where you most commonly get tripped up in the editing process.
One of the most advantageous features of Lightroom is its ability to sort, categorize, and otherwise keep track of files in a number of different ways. Though it may not seem all that glamorous, keeping a tightly organized image catalog can save you some serious time in the long run and make files infinitely easier to access on a moment's notice.
Again, the way in which you choose to organize is entirely up to you and is in part dependent on what your photographic intentions may be.
A fast-paced sports photographer might opt to organize images chronologically, while a traveling landscape artist might want to divide their shots by location.
Neither of those strategies are inherently wrong – it's just a matter of what makes the most sense to the individual in question.
That being said, there are a few tips that just about anyone can pick up that are easy to incorporate into your Lightroom workflow.
Lightroom gives you the opportunity to alter and add metadata directly into your files. Use it to your advantage. Add whatever information you can to your image while it's fresh in your mind. Incorporate tags describing the subject and style of the image for so that you can easily sift through your catalog later.
Quickly cull through your images before diving into a big editing session. If there's something obviously wrong with your photo (i.e. incorrect exposure, it's not in focus), flag it and remove it from your batch. Do not waste your time on shots that you're never going to use.
Lightroom is capable of pulling off a lot. However, just because it can do something doesn't always mean that it's the best tool for the job at hand. It may seem like common sense, but if you're struggling to accomplish something in Lightroom that would take half the time in another program, don't be afraid to switch out to get your image exactly the way you want it in as little time possible.
For instance, over the past several years Lightroom has put a lot of its local, fine-tuned editing tools. Nevertheless, the program doesn't have the intricate masking or brush options that Photoshop some seamlessly incorporates into its interface. Despite the improvements, Lightroom is still quite clumsy compared to its older brother on that particular front.
In this scenario, it's important to recognize the software's strengths and weaknesses. Rather than trying to accomplish all of your edits in Lightroom, a more effective strategy might involve syncing some baseline edits to a batch of images, then outsourcing the strongest shots into a program like Photoshop for some additional fine-tuning.
This may seem obvious, but when a shortcut presents itself, take advantage of it. Although Lightroom can be intimidating at first, there are countless ways in which it can speed up your edits.
Utilize presets whenever possible. There are hundreds of available presets online to download at little to no cost. Alternatively, it's possible to customize and save your own personal presets. Whichever you prefer, using them can get editing basics out of the way in a matter of seconds rather than minutes.
If you have a certain set of adjustments that you'd like to apply to a large group of photographs, it's possible to sync edits. This provides a consistent look between images from a single shooting or setting.
Certain adjustments, such as white balance, can be extremely difficult to eyeball. Luckily, there are tons of little tools scattered throughout that can automate the process. In the case of WB, the eyedropper tool on the side console can a provide an approximate measure with just one click.
4. Back Everything Up. Always.
Last (but certainly not least), be sure to backup your images no matter what. Keeping your catalog up to date and your RAW files secure on a drive is the single best thing you can do to cut down your editing time.
Backing up may seem like an extra step that will only add time to your Lightroom workflow. However, a surefire way to slow down your editing process is by losing your progress. It may take a few minutes to back everything up, but it's always better than the alternative of starting from scratch later down the road.
Forming a Lightroom workflow of your own doesn't happen overnight. No matter how you slice it, it's complex software that takes time to fully master. But with a little bit of reflection on your post-processing strengths and weaknesses, it can really bring the most out of your photographs.
If Lightroom still seems intimidating, take some time out of your day to practice and explore. Look into what others do to save time with the program. See for yourself exactly what Lightroom can or cannot accomplish. Before long, you'll discover what it can do to help you save time and get back behind the camera.


text:
Some children may suffer depression long after being bullied: Stud
Washington D.C. [USA], July 1 (ANI): While bullying affects children in some or the other way, according to a recent study, some young adults, who are bullied as children could have a greater risk of ongoing depression due to a mix of genetic and environmental factors.
Smriti Irani deletes daughter's photo from Instagram after she was
New Delhi (India), June 21 (ANI): Union Minister Smriti Irani has deleted her daughter's selfie from her official Instagram account after she was allegedly mocked for her looks and subjected to bullying in class by a classmate, "who also instigated other class friends to humiliate her for
Growing up in areas with income inequality associated with being b
Washington D.C. [USA], May 14 (ANI): Researchers have found that country-level income inequality during the first four years of a child's life can be associated with later bully victimisation.
Children bullied in schools more prone to mental health issues, cl
Washington D.C. [USA], Apr 18 (ANI): According to recent findings, victims of bullying in secondary school have increased chances of mental health problems and unemployment, later in life.
Being bullied at work can affect your heart
Washington DC, [USA] Nov 19 (ANI): Individuals who are bullied or experience violence at work are at a higher risk of cardiovascular disease, a recent study suggests.
Melania Trump: I'm the most bullied person in world
Washington D.C. [USA], Oct 12 (ANI): Melania Trump feels she is the most bullied person in the world.
Being bullied in school helped Lady Gaga in 'A Star Is Born'
Washington D.C. [USA], Sep 25 (ANI): Lady Gaga has revealed being bullied in high school helped her with the role in the upcoming musical drama 'A Star Is Born'.
Witnessing major violence in high school might be as bad as being
Washington D.C. [USA] Sep 17 (ANI): According to a recent study, students who witness violence in school at the age of 13 are at later risk of psycho-social and academic impairment later in life.
How witnessing violence in school as bad as being bullied
Washington D.C. [USA] Sep 17 (ANI): Turns out, witnessing violence in high school is as bad as being bullied.
Millie Bobby Brown leaves Twitter following cyberbullying
Washington D.C. [U.S.A.] June 15 (ANI): The 'Stranger Things' actress Millie Bobby Brown left Twitter after being bullied by LGBTQ 'in-joke'.
Sam Smith reveals his mother knew he was gay
Washington D.C. [U.S.A.], September 15 (ANI): Not every parent is supportive when their kid comes out as gay, but Sam Smith was lucky that his parents accepted him for what he is.
You can literally lose sleep over being bullied
Washington D.C. [USA], Aug 11 (ANI): A good night's sleep may be hard to come by if you are being bullied, according to a recent study.


text:
Pinguy OS - An Ubuntu Based Linux Distribution on Steroids
January 19, 2011 Posted by Ravi
Ubuntu has helped spawn umpteen Linux distributions. Pinguy OS is yet another Linux distribution based on Ubuntu (version 10.10 to be exact).
Pinguy OS is targeted at lay persons - people who are going to use Linux for the first time, or those who want an out-of-box working OS.
It is currently available to download as a DVD ISO (~1.3 GB size) for the 32 and 64 bit architecture PCs.
I was visibly impressed with the screenshots of Pinguy OS desktop I chanced at various places on the Net that, I decided to download this Linux distribution (essentially built from Ubuntu Minimal CD) and take it for a spin.
I tried out Pinguy OS on my two year old PC which has Intel Core 2 Duo processor, 2 GB RAM, 128 MB onboard Graphics memory, and a 320 GB hard disk.
My Thoughts on Pinguy OS
Put in one word - Fabulous!
The Pinguy OS Desktop is awesome. Clearly, a lot of work has gone into building this distribution. When you first boot into the LiveDVD, you are presented with the super tweaked GNOME desktop in all its glory.
Compiz is the default window manager. However, if your machine is not powerful enough, the Desktop falls back to the fail-safe mode by disabling many special effects.
Software - Lots of it!
Pinguy OS comes with a plethora of software for almost any task you may wish to do using your computer. Each software that is included in Pinguy OS is choosen carefully.
Eye Candy Galore
A lot of software which is aimed to enhance the user experience has made its way into the Pinguy OS distribution. The notable ones being Gloobus Preview, Cover Gloobus, Cover Thumbnailer, Global Menu (which turns the GNOME top panel into a dynamic 'Apple Mac OS X' style menu for applications), Conky (which displays live system stats on the Desktop), Docky (That provides a Mac OS X style panel), and GNOME Do.
Another interesting utility that I found in Pinguy OS is the Webbilder applet. This applet downloads popular photos from online photo sharing sites - Webshots and Flickr; and sets them as the wallpaper on your Desktop.
The Graphics tool collection is quite modest and GIMP hasn't made into the Pinguy OS graphics selection. However, Pinguy OS comes with another graphics editing tool called Pinta which is a decendent of Paint.NET.
There are two tools for photo management namely Rapid Photo Downloader and Shotwell.
And for taking screenshots, you have Shutter which can be favourably compared to the professionally used Techsmith product SnagIT.
Firefox (3.6) - the defacto standard for Web browsing - is the default web browser in Pinguy OS. However, the developers have gone one step further in including over a dozen useful extensions in Firefox - which is really thoughtful.
Other changes compared to Ubuntu are - Bittorent client Deluge replaces Transmission. Email client Thunderbird takes the place of Evolution. XChat is included as well. A notable feature of Pinguy OS is the inclusion of two popular, closed source albeit free software namely - Skype and Dropbox client.
Fostwire which is a peer to peer program used to share files with others has also been included.
Pinguy OS does not ship with any games. However, it comes with a wonderful application (software manager) called "PlayOnLinux". The first time you start "PlayOnLinux", it's wizard will start downloading updates. Once that is done, "PlayOnLinux" will present a collection of games (proprietary and otherwise). The collection is quite good.
On the system side, Oracle VirtualBox is installed. Apart from that, Pinguy OS also comes with a dedicated backup tool in Dejapup; Wine and Winegame for installing Windows software and games; Ubuntu Tweak and Ailurus which allows you to tweak all the aspects of the Desktop and more.
Ubuntu by default ships with a firewall called ufw. However, it is disabled by default. And because it is a command line tool, ordinary users may not be aware of it. Pinguy OS has included a GUI front-end for ufw called Gufw which makes it much easier to enable the ufw firewall and use it.
Then there is Bum (Boot Up Manager) which is a graphical front-end to configure run-levels and start up services, which is also included in Pinguy OS.
Gnome Activity Journal is another software which caught my fancy in Pinguy OS. Gnome Activity Journal is powered by Zeitgeist and provides a time line of all the files you have accessed in the past.
This is another area where Pinguy OS shines quite well. I was able to play music and movies in almost all the audio and video formats.
Anybody with a TV card that wants to watch tv on their PC will be able to do so in Pinguy OS.
Some of the notable software in this section found in Pinguy OS are - Brasero and DeVeDe for burning CDs DVDs and BlueRay disks; HandBrake - a DVD transcoder, MPlayer, VLC Media player, Open Shot video editor which allows you to open and edit movies ... just to name a few.
What I like about Pinguy OS
The amount of finetuning that has gone into this project is quite amazing. For instance, when I press the print screen key, Shutter pops up and takes a screenshot instead of the elementary screenshot tool found in GNOME.
Conky has been spruced up with a custom configuration file which makes it a joy to display on the Desktop. The special effects are vivid without being garish.
All the multimedia codecs are there. So is Oracle Java and Adobe Flash player.
Pinguy OS also helps reduce your carbon footprint because it runs Granola in the background. Granola is a free tool that helps reduce the power consumption of your computer without affecting its performance.
Now for some Critique
Pinguy OS is indeed an amazing work and a true user friendly Linux distribution. But that doesn't mean I didn't find any glitches (minor ones really). And this post won't be a complete review if I didn't write about it.
There was a mismatch in some of keys on my keyboard. For instance, when I pressed the "|" key, I got a tilde (~) on the screen. This is because Pinguy OS uses a default keyboard layout for United Kingdom instead of USA. Changing the keyboard layout to "USA" solved this problem.
Atleast when running the liveDVD, Conky overlaps all opened applications. Restarting Conky solved this problem as well.
There is no e-book reader which could read ePUB and MOBI files. One such as FBReader would have been a nice fit.
I found some applications which were too similar in their purpose. For instance, Shotwell and Rapid Music Downloader are photo management programs and does more or less the same stuff.
I prefer Shotwell over the latter because the latest version 0.8 of Shotwell has support for videos, including uploading videos to social video sites such as YouTube.
Similarly, I found 3 different movie players. I do agree that variety is the spice of life but ... too much variety could overwhelm the users as well.
Call me old fashioned if you will, but I feel GIMP is a superior graphics editor than Pinta. Including GIMP would have made the Graphics package more complete in Pinguy OS.
Of course you can always install GIMP from Synaptic package manager on your own. But then that defeats the USP of Pinguy OS namely - "an out-of-the-box working OS without doing all the tweaks and enhancements".
What does the future hold for Pinguy OS ?
Considering that Ubuntu 11.04 is all set to move towards Unity and GNOME Shell, and because Pinguy OS is based on Ubuntu, one wonders what is in store for this really cool Ubuntu cousin.
Here is what the Pinguy OS developer has to say about this (and I quote) -
I have no plans to use Gnome Shell or Unity for 11.04. Pinguy OS 11.04 desktop will stay mostly unchanged to how it is now.
Pinguy will follow the Ubuntu 6-month release schedule but will be released a few months after the finale release. This will never be more then two months.
One change that is being thought about is replacing Rhythmbox with Clementine. This is all depending on how polished Clementine is by time 11.04 comes out.
In this lengthy review, I have just scratched the surface of what Pinguy OS has to offer. What I really like about Pinguy OS is the amount of work that has gone into making it a truly user friendly Linux experience. Anyone who uses Pinguy OS will fall in love with Linux. Period.
Labels: linux reviews, OS reviews, pinguy os, ubuntu


text:
IGCH
Browse IDs
Inventory of Greek Coin Hoards
The original Inventory of Greek Coin Hoards (IGCH), edited by Margaret Thompson of the ANS, Otto Mørkholm of the Danish cabinet in Copenhagen and Coin Kraay of the Heberden Coin Room in the Ashmolean Museum, Oxford, was published in 1973 by the ANS for the International Numismatic Commission. The work contains inventory listings of 2387 hoards, covering the whole of the ancient Greek numismatic world.
Online IGCH was devised by Sebastian Heath and Andrew Meadows as an attempt to create an open and accessible version of IGCH on the world Wide Web using the principles of Linked Open Data. The test version was housed within the Nomisma.org namespace before its migration to its own domain in February 2015.
Work on the original project was enabled by funding from the American Numismatic Society, Stanford University, and the UK's Arts and Humanities Research Council. Data was contributed by the Nomisma project based at Paris IV Sorbonne. Subsequent work to create the new site has been supported by the International Numismatic Council, under whose auspices the project has now been incorporated. Technical realisation of the new IGCH site is by Ethan Gruber.
The current site is a prototype, and will undergo enhancement through the course of 2015. It is the long-term aim of the project to incorporate all published Greek coin hoards as part of the broader Online Greek Coinage initiative.
Nomisma
Linked Data: VoID RDF/XML
Pelagios Annotations
VoID (RDF): XML
Dump (RDF): XML
The following institutions have contributed data, specialist advice and/or financial support to the IGCH:
Unless specified otherwise, content in Coinhoards.org is licensed under a Creative Commons Attribution 3.0 License.


Winter has been dragging it's feet around here. So when a recent Friday brought temps in the 70's and sunshine. I couldn't get home to our back deck fast enough. I had a stop to make on my way home because I was craving for some tequila. Specifically, my craving was for a spicy cocktail I had sipped on just about a year prior on a girls trip to Brooklyn (a spicy marg) Maybe it was the spice, maybe it was the sun, or maybe it was because I had 10 upcoming consecutive days off in a row…either way it was a fabulous way to kick off the weekend.
A Paloma is a cocktail that is traditionally made with tequila, grapefruit, and lime. Here is my take!
PRO TIP: make your cocktail in a mason jar. Seal up tight with the lid and jostle with a few ice cubes to get the perfectly shaken cocktail. It's a perfect way to pack drinks for the beach or boat too.
Add all ingredients to mason jar (minus the club soda) and shake. Poor in the club soda, add the final lime wedge and viola !
190 calories ! For an even skinnier…or more petite version, use less grapefruit juice and more seltzer water and use pure cane sugar as a sub for agave.


text:
Column by Bess Wills
Contrary to reports, we are not your enemy
Pamplin Media Group
Our work is guided by a set of principles that demand objectivity, independence, open-mindedness and the pursuit of the truth.
We've been complacent.
We thought everybody knew how important a free press was to our world and our communities and that all this talk about us being the enemy of the people would be dismissed for the silliness that it is.
But the attacks have continued.
President Trump isn't the first president to wage a battle with the American news media. And he won't be the last from either major political party.
But when any leader of the free world works to purposefully erode the public's trust in the media, the potential for damage is enormous, both here at home and in our nation's capital.
The United States once set an example of free and open government for the world to follow. Now those who seek to suppress the free flow of information are doing so with impunity. The role journalism plays in our free society is too crucial to allow this degradation to continue.
We aren't the enemy of the people. We are the people. We aren't fake news. We're your news, and we work hard every day to get the facts right.
On rainy January days, we're the people's eyes and ears at Gresham City Council meetings, or at Centennial School Board meetings. We tell the stories of our community — like today's article about the 60th reunion of the first class to attend Reynolds High school, or the winners of the Gresham Area Chamber of Commerce Business Excellence Awards.
We report the highs and lows of local sports teams. And all too often we are called upon to report the despair a family faces when a loved one is killed.
We are always by your side. We shop the same stores, attend the same places of worship and hike the same trails. We struggle with daycare and worry about paying for retirement.
In our work as journalists, our first loyalty is to you. Our work is guided by a set of principles that demand objectivity, independence, open-mindedness and the pursuit of the truth. We make mistakes, we know. There's nothing we hate more than errors, but we acknowledge them, correct them and learn from them.
Our work is a labor of love because we love our country and believe we're playing a vital role in our democracy. Self-governance demands that our citizens be well-informed and that's what we're here to do. We go beyond the government-issued press release or briefing and ask tough questions. We hold people in power accountable for their actions. Some think we're rude to question and challenge. We know it's our obligation.
Thomas Jefferson, who had his run-ins with journalists, nonetheless understood the importance of a free press.
"Were it left to me to decide whether we should have a government without newspapers or newspapers without a government," he wrote, "I should not hesitate a moment to prefer the latter."
People have been criticizing the press for generations. We are not perfect. But we're striving every day to be a better version of ourselves than we were the day before.
That's why we welcome criticism. But unwarranted attacks that undermine your trust in us cannot stand. And that's why newspapers across the nation are speaking out against these attacks in one voice today on their editorial pages.
As women's rights pioneer and investigative journalist Ida B. Wells wrote in 1892: "The people must know before they can act and there is no educator to compare with the press."
Note: This commentary is adapted from an editorial crafted by the New York Press Association, which is working with the Boston Globe and media organizations around the country, including the Oregon Newspaper Publishers Association, to celebrate freedom of the press this week.
There is Hope!
This article brought to you courtesy of Tony Kriss of Advance Firearms Training, Gresham Outlook Insider Firearms expert.
6 THINGS TO PREPARE YOUR AC FOR SUMMER
This article brought to you courtesy of Randy Preston, of Honke Heating and Air Conditioning, Gresham Outlook Heating and Cooling Expert.
Getting America's Favorite Pet to the Vet
This article brought to you courtesy of Karen Sottile, of Nature's Pet Market, Gresham Outlook Pet Care Expert
Keeping your Kia Cool
This article brought to you courtesy of Dan Schofield, of Weston Kia, Gresham Outlook Automotive Expert.
4 Surprising Health Benefits of Furry Friends
Brought to you by Prestige Care Senior Living-Assisted Living at Huntington Terrace - ASSISTED LIVING INSIDER -
Estate Planning ... What to Expect ... Finalizing your Estate Plan
This article brought to you courtesy of Paula Walker of Confluence Law Center, Gresham Outlook Insider Estate Planning Expert.


text:
Community leaders honored with MLK Jr. Drum Major Award
Smallwood Holoman Jr. of Midland.
Submitted photo/Ann Schneider-Branch, SVSUShow MoreShow Less
Angelia Williams of Saginaw.
Pastor Phillip Johnson of Bay City.
Three leaders in the Great Lakes Bay Region will be honored for their commitment to bettering their communities. Smallwood Holoman Jr. of Midland, Pastor Phillip Johnson of Bay City and Angelia Williams of Saginaw will receive the Martin Luther King Jr. Drum Major for Community Service Award during the Martin Luther King Jr. Regional Celebration, which will be held at 7 p.m. on Wednesday, Jan. 18, at Saginaw Valley State University.
Now in its eighth year, the Drum Major for Community Service Award honors people in the Great Lakes Bay Region who perform everyday acts of service with reliability and commitment, but who seldom receive recognition and whose work exemplifies one or more values or beliefs of Dr. King. values or beliefs.
Holoman, Johnson and Williams will each receive a $1,000 award for a charitable organization of their choice.
Holoman, a retired scientist and director for Dow, is a longtime community volunteer serving national, state and local organizations. His community service activities are wide ranging, with particular focus on organizations that serve the youth and elderly in our communities, including the Michigan 4H Foundation, Midland County Council on Aging, Great Lakes Bay Boys & Girls Club, Saginaw County Youth Protection Council and many others.
"I'm humbled to be recognized as an honoree of the MLK Jr. Drum Major award because of its association with Dr. Martin Luther King Jr., my civil rights hero," Holoman said. "The work I do in the Great Lakes Bay region is driven by my personal mantra of being a servant and making a positive difference in the lives of God's people!"
Johnson serves as the lead pastor at Apostolic Life Church of Bay City, a thriving, multiethnic multigenerational congregation, where he prioritizes ministry efforts that are designed to reach the disadvantaged within our region. Johnson has extended his community-focused ministry by serving as the Bay County Sheriff's Office's lead chaplain in the Bay County jail and as chaplain in the Bay County Juvenile Detention Center. In 2019, Johnson was selected to serve as chaplain for the Bay City's public safety officers, including the police force and fire departments.
"I feel a great sense of pride coupled with a sense of responsibility and continued duty," Johnson said of receiving the Drum Major Award. "I am both honored and humbled to be recognized for the important work we do within our community, serving the marginalized and the oft overlooked."
Johnson said he finds motivation in the words of Martin Luther King, Jr.: "Everybody can be great because anybody can serve. You don't need a college degree to serve, you don't need to make your subject agree with your verb to serve. All you need is a heart full of grace and a soul generated by love."
Williams is the senior vice president of Great Lakes Bay Health Centers, a federally qualified health center. A registered nurse and adult nurse practitioner with a health care career spanning 41 years, Williams has demonstrated compassion for those who are underserved and sometimes neglected by the health care system. Williams joined GLBHC in 2012, providing administrative oversight of all HIV prevention and medical services, as well as the day-to-day operations of the school-based health centers. Before that, she spent 10 years as the program coordinator and nurse practitioner for two school-based health centers in Miami, Florida.
Williams is a member of the NAACP, the National Black Nurses Association and the National School-Based Health Alliance. She has received numerous prestigious community and leadership awards at the local, state and national levels for her demonstrated leadership commitment to serving others.
"I am very humbled to accept this esteemed honor that will encourage me to continue doing my best work for the Saginaw and Great Lakes Bay Region," Williams said. "I am very appreciative of the MLK Regional Celebration Committee for selecting me for this recognition. I would like to express my gratitude to Great Lakes Bay Health Centers that continues to support my personal mission, my community endeavors and the outstanding community collaborations we have fostered in efforts to improve health outcomes, especially during COVID-19. The work I do is not related to the number of awards a person can receive, it is about asking myself 'how many lives can I impact?'"
The Drum Major Community Service Award was created by the Great Lakes Bay Regional MLK Celebration event committee. Honorees are selected from Bay, Midland and Saginaw counties. For more information and a list of past honorees, visit svsu.edu/mlk/drummajoraward.
To register for the Martin Luther King Jr. Regional Celebration, visit svsu.edu/mlk.


Exciting changes are coming! | Because two men are better than one!
The Two Men blog is evolving!
The blog is now home to a dozen of your favourite m/m romance authors who will be visiting regularly. You can look forward to exclusive guests posts, exciting news, behind-the-scenes insights, giveaways and much more.


text:
2020: Ceridian - Winnipeg, Manitoba, CANADA
Large scale artwork for Ceridian's new offices located on the third floor of the True North Square building in Winnipeg, Manitoba. In collaboration with LM Architectural Group & Environmental Space Planning and Roger Tessier, a metalsmith from St. Pierre, Manitoba.
Measures: 11' 5" x 9' 4".
2018: Métis Heritage Park, Saint-Boniface, Manitoba, CANADA
On Thursday, June 21, 2018, the St. Boniface Heritage Garden officially opened a recognition space in honour of the Métis Nation. The landscaping and the interpretive panels have been designed by two Métis women: architect Janelle Fillion, and artist Candace Lipischak. The Archdiocese of St. Boniface invites you to come and explore the grounds of the Archbishop's residence that pay homage to those who played an important role in the development of the St. Boniface Mission, including the significant role that the Métis Nation has played in Manitoba's history. His Grace Albert LeGatt, Archbishop of St. Boniface declared: 'As we seek the path of reconciliation, peace and friendship, we hope this space in the St. Boniface Heritage Garden will be one of many gestures on the path to healing where pain or hurt has been brought to others, by asking for forgiveness, and committing ourselves to walking together into the future.'


text:
Pennsylvania Supreme Court rejects Trump campaign's lawsuit
The court ruled 5-2 that observers were able to see that members of the Philadelphia County Board of Elections were performing their duties under the Election Code
© EPA-EFE/Rick D'Elia
NEW YORK, November 18. /TASS/. The Pennsylvania Supreme Court has rejected a lawsuit filed by US President Donald Trump's campaign, which said that election observers had been denied proper access to closely watch ballot counting in Philadelphia.
The court ruled 5-2 that observers were able to see that members of the Philadelphia County Board of Elections were performing their duties under the Election Code.
"We conclude the Board did not act contrary to law in fashioning its regulations governing the positioning of candidate representatives during the pre-canvassing and canvassing process, as the Election Code does not specify minimum distance parameters for the location of such representatives. Critically, we find the Board's regulations as applied herein were reasonable in that they allowed candidate representatives to observe the Board conducting its activities as prescribed under the Election Code," the court pointed out.
On November 3, American citizens headed to the polls to elect 435 representatives to the House, 35 senators out of 100 to the Senate, and the President and Vice President of the United States. In addition, voters decided on 13 US state and territorial governorships, and numerous other local elections were held. The November race for the White House pit Democratic contender Joe Biden and his running mate Kamala Harris against incumbent US President Donald Trump and Vice President Mike Pence of the Republican Party. Though the vote count is still underway, major US media outlets project that the Democratic contender has presumptively won the presidential election. Both Fox News and Associated Press have put Biden over the top, beyond the needed 270 vote threshold. Trump is challenging the current outcome, claiming irregularities in the ballot processing in key swing states, and has filed lawsuits to fight his case in court.
Number of COVID-2019 cases across globe up by over 709,000 in past day
The overall number of such cases exceeding 91.81 million, the World Health Organization said


text:
"Sharers" seek "surban" housing
What was once a golf course 20 miles from Philadelphia has been redeveloped into a surban™ -- a name coined by John Burns Real Estate Consulting to describe urban-like developments in the suburbs that appeal to a demographic that once scoffed at such destinations.
"The same people who drove urban demand from 2005-2015 are about to drive demand for surban housing in inner-ring suburbs, especially those in mature and slower-growing cities," reported Annie Radecki, senior manager at the Burns firm.
In her report about these emerging developments, Radecki cites the Village at Valley Forge as an example of a mixed-use, transit-oriented lifestyle environment that will appeal to a segment the Burns group has dubbed "Sharers" (those born in the 1980s).
Radecki and her colleagues believe various factors will sustain the shift to "surban," including:
1980s Sharers who don't like driving can minimize commutes or be close to transit that doesn't require a car.
Older Main streets offer the authenticity Sharers crave.
High quality grocery stores accommodate Sharers' "thriftiness and foodi-ness."
Better schools.
Yard with room for dogs and/or toddlers.
Located at the confluence of the region's four major highways and adjacent to the iconic King of Prussia Mall, the Village encompasses its own town center with a full calendar of community events. Residents can walk to a 24-hour Wegmans Food Center, REI, several healthy fast casual restaurants, and trails. Bike trails and a new Children's Hospital of Pennsylvania are also part of the amenities that appeal to older millennials.
When built out, the property will have 2,000 residential units, 500,000 square feet of retail with dozens of dining and entertainment options, two hotels and one million square feet of mid-rise office and healthcare space.
Residential choices include luxury apartments, townhomes, condominiums and active adult and senior living residences. Among the builders is Toll Brothers whose brownstone buildings boast "modern open floor plan designs with optional basements and roof terraces" and a private gated dog run onsite.
The Burns group notes builders in Philadelphia successfully sold exurban home to family buyers fleeing the city in the early 2000s. Now, demand for these homes has evaporated, in part because Sharers delayed home purchases and opted to live in "gritty yet trendy" places like Fishtown, a working-class neighborhood described by some as "Philly's truest harbor of artistic, culinary and musical action."
Based on the popularity of the Village at Valley Forge and similar redevelopments, the Burns consultants say successful builders are shifting their focus to suburban infill neighborhoods in the "little towns" of the inner-ring suburbs.
One reason? America's population of twenty-somethings grew by 4.7 million people from 2005-2015 but is projected to decline slightly from 2015-2025. While that cohort is expected to shrink by 0.1 percent in the near future, the empty nester segment (ages 55-65) will experience a net growth of 655,000, for a rate of 1.6 percent during the same 2015-2025 timeframe.


text:
Home > News > WIA-E Director of research Paola Belingheri awarded a grant for a research on Gender Bias
WIA-E Director of research Paola Belingheri awarded a grant for a research on Gender Bias
we're proud to announce that our Board member Paola Belingheri, WIA-E Director of research, has been awarded a grant for a research on Gender Bias.
Paola Belingheri is the Principal Investigator of the research project "Measuring Gender Bias with Semantic Analysis: The Development of an Assessment Tool and its Application in the European Aerospace Industry" which has been awarded a grant by the School of Engineering of the University of Pisa, Italy.
Language can often be considered gender-specific. Adjectives, prefixes and suffixes ascribe certain genders to objects and this in turn causes people to associate them with male or female characteristics, shaping the way we examine and respond to the world around us. Moreover different words are differently interpreted by men and women and, especially in the workplace, this can lead to biases in application and recruitment processes. Although over the years much overt reference to a specific gender has been eliminated from these texts, more subtle nuances persist in the way a company presents itself, as well as the way it writes vacancy notices, which may still influence what type of person responds, including their gender. These biases are often difficult to identify by those who are operating in the field since they can be hidden in the orthographical, grammatical or semantical content of the text. This introduces a barrier for women to access male-dominated industries (e.g., space), and the business context in general. At the same time, the use of a gendered language may negatively affect the firm from a reputational point of view, as well as discourage valuable female candidates from applying for specific jobs. Using methods and tools of Text Mining and Semantic and Social Network Analysis, this research project has the objective to present a novel approach to evaluate and address the above-mentioned problems. The final outcome of the project will be a tool to identify gender bias in text documents.
The grant will be used to coordinate the work of the research team and to create a first prototype of an online gender bias analysis tool.