text:
Q: How can I add new attributes to my rails models? I created a model using: rails g model category
Now I want to add some attributes to that model like a name
so I went to the model and added the line attribute :name
class Category < ApplicationRecord
  attribute :name
  #has_many :posts
end

This is how my Controller looks like:
class CategoriesController < ApplicationController

  #def permitted_params
   # params.require(:category).permit(:name)
  #end

  def index

  end

  def new
  end

  def create
    #category.create(permitted_params)
  end

  def edit
  end

  def update
  end

  def show
  end

  def destroy
  end
end

Then I run the command : rails db:migrate and I wanted to add some stuff to my database to test it out.
I used the rails console and tryed to add a category:

What do I need to do to write the name into the database?

A: The attribute you're defining in your model is a virtual attribute and will not write anything to the database.
you'll have to define a migration to add columns/attributes to the database.
steps:
1. remove the attribute :name from category.rb

*create a rails migration rails g migration add_fields_to_categories name:string attribute2:type attribute3:type

*run rails db:migrate

*reopen the console and create a new category with name attributes.

*Now check

A: To add attribute to Model you should use this command:
rails g migration AddNameToCategory name:string
rails db:migrate

A: While the rails generator is already creating a database-migration for the attributes you specified, you will need to create a new migration for adding new attributes / database columns. Check out the migration guide:
https://edgeguides.rubyonrails.org/active_record_migrations.html
For creating a new migration you can run:
rails g migration add_categories_name
inside the migrations change method:
add_column :categories, :name, :string
then run rake db:migrate again.
Also remove the call to attributes from your model.


text:
package com.sudwood.advancedutilities.tileentity;

import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.ISidedInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.NetworkManager;
import net.minecraft.network.Packet;
import net.minecraft.network.play.server.S35PacketUpdateTileEntity;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.FluidTankInfo;
import net.minecraftforge.fluids.IFluidHandler;

public class TileEntitySteelOven extends TileEntity implements ISidedInventory, IFluidHandler
{
	private int piece;

	@Override
	public void readFromNBT(NBTTagCompound tag)
    {
        super.readFromNBT(tag);
       piece = tag.getInteger("piece");
    }
	@Override
    public void writeToNBT(NBTTagCompound tag)
    {
        super.writeToNBT(tag);

        tag.setInteger("piece", piece);
    }

	public void setPiece(int num)
	{
		this.piece = num;
		worldObj.markBlockForUpdate(xCoord, yCoord, zCoord);
		this.markDirty();
	}
	public int getPiece()
	{
		return this.piece;
	}

	@Override
	public int fill(ForgeDirection from, FluidStack resource, boolean doFill) {
		// TODO Auto-generated method stub
		return this.getTileForNum().fill(from, resource, doFill);
	}

	@Override
	public FluidStack drain(ForgeDirection from, FluidStack resource, boolean doDrain) {
		// TODO Auto-generated method stub
		return this.getTileForNum().drain(from, resource, doDrain);
	}

	@Override
	public FluidStack drain(ForgeDirection from, int maxDrain, boolean doDrain) {
		// TODO Auto-generated method stub
		return this.getTileForNum().drain(from, maxDrain, doDrain);
	}

	@Override
	public boolean canFill(ForgeDirection from, Fluid fluid) {
		// TODO Auto-generated method stub
		return this.getTileForNum().canFill(from, fluid);
	}

	@Override
	public boolean canDrain(ForgeDirection from, Fluid fluid) {
		// TODO Auto-generated method stub
		return this.getTileForNum().canDrain(from, fluid);
	}

	@Override
	public FluidTankInfo[] getTankInfo(ForgeDirection from) {
		// TODO Auto-generated method stub
		return this.getTileForNum().getTankInfo(from);
	}

	@Override
	public int getSizeInventory() {
		// TODO Auto-generated method stub
		if(this.getTileForNum() != null)
		return this.getTileForNum().getSizeInventory();
		else return 0;
	}

	@Override
	public ItemStack getStackInSlot(int slot) {
		// TODO Auto-generated method stub
		if(this.getTileForNum() != null)
		return this.getTileForNum().getStackInSlot(slot);
		else return null;
	}

	@Override
	public ItemStack decrStackSize(int p_70298_1_, int p_70298_2_) {
		// TODO Auto-generated method stub
		if(this.getTileForNum() != null)
		return this.getTileForNum().decrStackSize(p_70298_1_, p_70298_2_);
		else return null;
	}

	@Override
	public ItemStack getStackInSlotOnClosing(int p_70304_1_) {
		// TODO Auto-generated method stub
		if(this.getTileForNum() != null)
		return this.getTileForNum().getStackInSlotOnClosing(p_70304_1_);
		else return null;
	}

	@Override
	public void setInventorySlotContents(int p_70299_1_, ItemStack p_70299_2_) {
		// TODO Auto-generated method stub
		if(this.getTileForNum() != null)
		this.getTileForNum().setInventorySlotContents(p_70299_1_, p_70299_2_);
	}

	@Override
	public String getInventoryName() {
		// TODO Auto-generated method stub
		if(this.getTileForNum() != null)
		return this.getTileForNum().getInventoryName();
		else return "";
	}

	@Override
	public boolean hasCustomInventoryName() {
		// TODO Auto-generated method stub
		if(this.getTileForNum() != null)
		return this.getTileForNum().hasCustomInventoryName();
		else return false;
	}

	@Override
	public int getInventoryStackLimit() {
		// TODO Auto-generated method stub
		if(this.getTileForNum() != null)
		return this.getTileForNum().getInventoryStackLimit();
		else return 0;
	}

	@Override
	public boolean isUseableByPlayer(EntityPlayer p_70300_1_) {
		// TODO Auto-generated method stub
		if(this.getTileForNum() != null)
		return this.getTileForNum().isUseableByPlayer(p_70300_1_);
		else return false;
	}

	@Override
	public void openInventory() {
		// TODO Auto-generated method stub

	}

	@Override
	public void closeInventory() {
		// TODO Auto-generated method stub

	}

	public void breakBlock()
	{
		if(this.getTileForNum() != null)
			this.getTileForNum().updateBreak(this.piece);
	}

	@Override
	public boolean isItemValidForSlot(int p_94041_1_, ItemStack p_94041_2_) {
		// TODO Auto-generated method stub
		if(this.getTileForNum() != null)
		return this.getTileForNum().isItemValidForSlot(p_94041_1_, p_94041_2_);
		else return false;
	}
   @Override
   public Packet getDescriptionPacket()
   {
	   super.getDescriptionPacket();
       NBTTagCompound syncData = new NBTTagCompound();
       this.writeSyncableDataToNBT(syncData);
       return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, 1, syncData);
   }
   public void writeSyncableDataToNBT(NBTTagCompound tag)
   {
	   tag.setInteger("piece", piece);
   }
   public void readSyncableDataFromNBT(NBTTagCompound tag)
   {
	   piece = tag.getInteger("piece");
   }
   @Override
   public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt)
   {
	   super.onDataPacket(net, pkt);
       readSyncableDataFromNBT(pkt.func_148857_g());
   }

   public int[] getCoordsForNum()
   {
	   int[] temp = new int[3];
	   switch(piece)
	   {
		 case 1:
			temp[0] = xCoord-1;
			temp[1] = yCoord-1;
			temp[2] = zCoord-1;
			break;
		 case 2:
			temp[0] = xCoord-1;
			temp[1] = yCoord-1;
			temp[2] = zCoord;
			break;
		 case 3:
			temp[0] = xCoord-1;
			temp[1] = yCoord-1;
			temp[2] = zCoord+1;
			break;
		 case 4:
			temp[0] = xCoord;
			temp[1] = yCoord-1;
			temp[2] = zCoord-1;
			break;
		 case 5:
			temp[0] = xCoord;
			temp[1] = yCoord-1;
			temp[2] = zCoord;
			break;
		 case 6:
			temp[0] = xCoord;
			temp[1] = yCoord-1;
			temp[2] = zCoord+1;
			break;
		 case 7:
			temp[0] = xCoord+1;
			temp[1] = yCoord-1;
			temp[2] = zCoord-1;
			break;
		 case 8:
			temp[0] = xCoord+1;
			temp[1] = yCoord-1;
			temp[2] = zCoord;
			break;
		 case 9:
			temp[0] = xCoord+1;
			temp[1] = yCoord-1;
			temp[2] = zCoord+1;
			break;
		 case 10:
			temp[0] = xCoord-1;
			temp[1] = yCoord;
			temp[2] = zCoord-1;
			break;
		 case 11:
			temp[0] = xCoord-1;
			temp[1] = yCoord;
			temp[2] = zCoord;
			break;
		 case 12:
			temp[0] = xCoord-1;
			temp[1] = yCoord;
			temp[2] = zCoord+1;
			break;
		 case 13:
			temp[0] = xCoord;
			temp[1] = yCoord;
			temp[2] = zCoord-1;
			break;
		 case 14:
			temp[0] = xCoord;
			temp[1] = yCoord;
			temp[2] = zCoord+1;
			break;
		 case 15:
			temp[0] = xCoord+1;
			temp[1] = yCoord;
			temp[2] = zCoord-1;
			break;
		 case 16:
			temp[0] = xCoord+1;
			temp[1] = yCoord;
			temp[2] = zCoord;
			break;
		 case 17:
			temp[0] = xCoord+1;
			temp[1] = yCoord;
			temp[2] = zCoord+1;
			break;
		 case 18:
			temp[0] = xCoord-1;
			temp[1] = yCoord+1;
			temp[2] = zCoord-1;
			break;
		 case 19:
			temp[0] = xCoord-1;
			temp[1] = yCoord+1;
			temp[2] = zCoord;
			break;
		 case 20:
			temp[0] = xCoord-1;
			temp[1] = yCoord+1;
			temp[2] = zCoord+1;
			break;
		 case 21:
			temp[0] = xCoord;
			temp[1] = yCoord+1;
			temp[2] = zCoord-1;
			break;
		 case 22:
			temp[0] = xCoord;
			temp[1] = yCoord+1;
			temp[2] = zCoord;
			break;
		 case 23:
			temp[0] = xCoord;
			temp[1] = yCoord+1;
			temp[2] = zCoord+1;
			break;
		 case 24:
			temp[0] = xCoord+1;
			temp[1] = yCoord+1;
			temp[2] = zCoord-1;
			break;
		 case 25:
			temp[0] = xCoord+1;
			temp[1] = yCoord+1;
			temp[2] = zCoord;
			break;
		 case 26:
			temp[0] = xCoord+1;
			temp[1] = yCoord+1;
			temp[2] = zCoord+1;
			break;
	   }
	   return temp;
   }

   public TileEntitySteelController getTileForNum()
   {
	   switch(piece)
	   {
		 case 1:
			return (TileEntitySteelController) worldObj.getTileEntity(xCoord-1, yCoord-1, zCoord-1);
		 case 2:
			 return (TileEntitySteelController) worldObj.getTileEntity(xCoord-1, yCoord-1, zCoord);
		 case 3:
			 return (TileEntitySteelController) worldObj.getTileEntity(xCoord-1, yCoord-1, zCoord+1);
		 case 4:
			 return (TileEntitySteelController) worldObj.getTileEntity(xCoord, yCoord-1, zCoord-1);
		 case 5:
			 return (TileEntitySteelController) worldObj.getTileEntity(xCoord, yCoord-1, zCoord);
		 case 6:
			 return (TileEntitySteelController) worldObj.getTileEntity(xCoord, yCoord-1, zCoord+1);
		 case 7:
			 return (TileEntitySteelController) worldObj.getTileEntity(xCoord+1, yCoord-1, zCoord-1);
		 case 8:
			 return (TileEntitySteelController) worldObj.getTileEntity(xCoord+1, yCoord-1, zCoord);
		 case 9:
			 return (TileEntitySteelController) worldObj.getTileEntity(xCoord+1, yCoord-1, zCoord+1);
		 case 10:
			 return (TileEntitySteelController) worldObj.getTileEntity(xCoord-1, yCoord, zCoord-1);
		 case 11:
			 return (TileEntitySteelController) worldObj.getTileEntity(xCoord-1, yCoord, zCoord);
		 case 12:
			 return (TileEntitySteelController) worldObj.getTileEntity(xCoord-1, yCoord, zCoord+1);
		 case 13:
			 return (TileEntitySteelController) worldObj.getTileEntity(xCoord, yCoord, zCoord-1);
		 case 14:
			 return (TileEntitySteelController) worldObj.getTileEntity(xCoord, yCoord, zCoord+1);
		 case 15:
			 return (TileEntitySteelController) worldObj.getTileEntity(xCoord+1, yCoord, zCoord-1);
		 case 16:
			 return (TileEntitySteelController) worldObj.getTileEntity(xCoord+1, yCoord, zCoord);
		 case 17:
			 return (TileEntitySteelController) worldObj.getTileEntity(xCoord+1, yCoord, zCoord+1);
		 case 18:
			 return (TileEntitySteelController) worldObj.getTileEntity(xCoord-1, yCoord+1, zCoord-1);
		 case 19:
			 return (TileEntitySteelController) worldObj.getTileEntity(xCoord-1, yCoord+1, zCoord);
		 case 20:
			 return (TileEntitySteelController) worldObj.getTileEntity(xCoord-1, yCoord+1, zCoord+1);
		 case 21:
			 return (TileEntitySteelController) worldObj.getTileEntity(xCoord, yCoord+1, zCoord-1);
		 case 22:
			 return (TileEntitySteelController) worldObj.getTileEntity(xCoord, yCoord+1, zCoord);
		 case 23:
			 return (TileEntitySteelController) worldObj.getTileEntity(xCoord, yCoord+1, zCoord+1);
		 case 24:
			 return (TileEntitySteelController) worldObj.getTileEntity(xCoord+1, yCoord+1, zCoord-1);
		 case 25:
			 return (TileEntitySteelController) worldObj.getTileEntity(xCoord+1, yCoord+1, zCoord);
		 case 26:
			 return (TileEntitySteelController) worldObj.getTileEntity(xCoord+1, yCoord+1, zCoord+1);
	   }
	   return null;
   }
	@Override
	public int[] getAccessibleSlotsFromSide(int p_94128_1_) {
		// TODO Auto-generated method stub
		if(this.getTileForNum()!= null)
		return this.getTileForNum().getAccessibleSlotsFromSide(p_94128_1_);
		else return new int[]{};
	}
	@Override
	public boolean canInsertItem(int par1, ItemStack par2ItemStack, int par3)
	{
		if(this.getTileForNum()!= null)
		return this.getTileForNum().canInsertItem(par1, par2ItemStack, par3);
		else return false;
	}
	@Override
	public boolean canExtractItem(int par1, ItemStack par2ItemStack, int par3)
	{
		if(this.getTileForNum()!= null)
		return this.getTileForNum().canExtractItem(par1, par2ItemStack, par3);
		else return false;
	}
}

redpajama_set_name: RedPajamaGithub


text:
Q: Isolate two networks in one switch (Cisco SGE2000) I have a small lab, which has 15 systems for development environment and 5 systems for Testing environment. I have only one Cisco SGE2000 (24-port) Ethernet switch.
Currently all on 192.168.3.0/24 network.
But I want to divide Development and Testing Environment.
That is:
for development 192.168.3.0/24
and for testing 192.168.4.0/24.
If I directly assign the address, then some issues like port conflict and network traffic arises,
So how do I configure isolated environments for Development and Testing? Is routing possible between those networks? I have never configured such thing so be kind, I have also gone through the manual of SGE2000 but I messed up by trying Full day. Please provide some solution and/or document.

A: Your switch supports VLANs, so you should easily be able to accompish what your trying to do by simply setting them up properly. You'll want to put your router on 192.168.1.1 in the default VLAN(or wherever you want it to be). Then create two new VLAN, (3)192.168.3.0/24 and (4)192.168.4.0/24.
Once you've done this, you'll need to "tag" the ports and place them into the desired VLAN for that device. After you've done this, you'll need to setup a route within the Cisco switch so the two segments can communicate with each other. All of this is available on your switch per this doc, as well as instructions on how to actually do it:
http://www.cisco.com/en/US/docs/switches/lan/csbms/sge2000/reference/guide/sge_refguide.pdf
Don't forget to setup DHCP within the switch, unless you like manually assigning IP addresses. Also, make sure the default gate of DCHP points to the switch. It can appear a bit hariy at first, but it's not difficult once you grasp the concept.
EDIT There will be a disruption is service when you initally add move the ports to a new VLAN. I would recommend setting up your routes first if possible to reduce downtime. If you do this, it should be less than 5 minutes.
This only happens the first time you add a port to a non-default VLAN. The best practice for this is to tag all ports to a high number VLAN the first time you turn it on(say 4000). By doing this, you can then freely change VLANs without causing a disruption in the future. This is especially important on trunk lines between switches.

A: A VLAN will allow you to isolate the two networks.  There is a PDF Manual you can download with details

redpajama_set_name: RedPajamaStackExchange


text:
Le 3 décembre ( jour de l'année ou  en cas d'année bissextile) en sport.

 2 décembre en sport -  en sport - 4 décembre en sport

Événements

: 1901-1950

: 1951-2000

2006 :
 (Tennis) : la Russie remporte sa deuxième Coupe Davis en battant l'Argentine 3-2.
 2016 :
 (Football /Mondial féminin des moins de 20 ans) : à Port Moresby, en Papouasie-Nouvelle-Guinée, victoire de la Corée du Nord qui s'impose en finale face à la France 3-1 et devient championne du monde.
 (Rugby à XV /Fédération française de rugby) : l'ancien sélectionneur du XV de France, Bernard Laporte est officiellement le nouveau président de la FFR. Il succède à Pierre Camou.
 2018 :
 (Football /Ballon d'or) : vainqueur de la Ligue des champions et finaliste de la Coupe du monde 2018, le Croate Luka Modric remporte le Ballon d'or. Le Portugais Cristiano Ronaldo et le Français Antoine Griezmann complètent le podium. Pour la  un Ballon d'or féminin est décerné et c'est la Norvégienne Ada Hegerberg qui est désignée devant l'Anglaise Lucy Bronze et l'Allemande Pernille Harder. Le Trophée Kopa qui récompense le meilleur joueur des -21 ans est obtenu par le Français Kylian Mbappé.
 2020 :
 (Handball /Euro féminin) : début de la  du championnat d'Europe féminin de handball qui se déroule jusqu'au  au Danemark dans les villes de Herning et Kolding. Initialement, la compétition devait se dérouler également en Norvège, mais moins de deux semaines avant le début de la compétition, la Fédération norvégienne a informé l'EHF qu'elle n'était finalement pas en mesure d'accueillir des matchs à cause de la pandémie de Covid-19.

Naissances

1872 :
 Maurice Larrouy, tireur français. Champion olympique du 25m pistolet feu rapide 60 coups aux Jeux de Paris 1900. († ?).
 1875 :
 Émile Delchambre, rameur français. Champion olympique en quatre avec barreur aux Jeux de Paris 1900. († 8 septembre 1958).
 1880 :
 Alexander Hall, footballeur canadien. Champion olympique aux Jeux de Saint-Louis 1904. († 25 septembre 1943).
 1882 :
 Giovanni Rossignoli, cycliste sur route italien. († 27 juin 1954).
 1884 :
 Tibby Cotter, joueur de cricket australien. (21 sélections en Test cricket). († 31 octobre 1917).
 1888 :
 Algernon Kingscote, joueur de tennis britannique. Vainqueur de l'Open d'Australie 1919. († 21 décembre 1964).

: 1901-1950
 1901 :
 Glenn Hartranft, athlète de lancers de poids et de disque américain. Médaillé d'argent du poids aux Jeux de Paris 1924. († 12 août 1970).
 1904 :
 Edgar Moon, joueur de tennis américain. Vainqueur de l'Open d'Australie 1930. († 26 mai 1976).
 1909 :
 Arne Berg, cycliste sur route suédois. Médaillé de bronze de la course par équipes aux Jeux de Los Angeles 1932. († 15 février 1997).
 1915 :
 Ernst van den Berg, hockeyeur sur gazon néerlandais. Médaillé de bronze aux Jeux de Berlin 1936. († 19 août 1989).
 1920 :
 René Alpsteg, footballeur français. (12 sélections en équipe de France). († 24 décembre 2001).
 1924 :
 Wiel Coerver, footballeur et entraîneur néerlandais. Vainqueur de la Coupe UEFA 1974. Sélectionneur de l'Équipe d'Indonésie de 1975 à 1976. († 22 avril 2011).
 Roberto Mieres, pilote de F1 argentin. († 26 janvier 2012).
 1932 :
 Gaetano Starrabba, pilote de courses automobile italien.
 1938 :
 Tibor Csernai, footballeur hongrois. Champion olympique aux Jeux de Tokyo 1964. († 11 septembre 2012).
 1940 :
 Georges Mauduit, skieur alpin français. Médaillé d'argent du géant aux Mondiaux de ski alpin 1966.
 1946 :
 Joop Zoetemelk, cycliste sur route néerlandais. Champion du monde de cyclisme sur route 1985. Vainqueur du Tour d'Espagne 1979, du Tour de France 1980, de la Flèche wallonne 1976 et de l'Amstel Gold Race 1987.
 1949 :
 John Akii-Bua, athlète de haies ougandais. Champion olympique du 400 m haies aux Jeux de Munich 1972. Détenteur du Record du monde du 400 mètres haies du  au . († 20 juin 1997).
 1950 :
 Alberto Juantorena, athlète de sprint et de demi-fond cubain. Champion olympique du 400 m et du 800 m aux Jeux de Montréal 1976.

: 1951-2000
 1951 :
 Rick Mears, pilote de courses automobile américain.
 1953 :
 Franz Klammer, skieur alpin autrichien. Champion olympique de la descente aux jeux d'Innsbruck 1976. Champion du monde de ski alpin du combiné et médaillé d'argent de la descente 1974.
 1955 :
 Brigitte Cuypers, joueuse de tennis sud-africaine.
 Alberto Tarantini, footballeur argentin. Champion du monde de football 1978. Vainqueur de la Copa Libertadores 1977. (61 sélections en équipe nationale).
 1957 :
 Jan Bogaert, cycliste sur route belge.
 1960 :
 Igor Larionov, hockeyeur sur glace soviétique puis russe. Champion olympique aux Jeux de Sarajevo 1984 et aux Jeux de Calgary 1988 puis médaillé de bronze aux Jeux de Salt Lake City 2002. Champion du monde de hockey sur glace 1982, 1983, 1986 et 1989. Vainqueur des Coupe d'Europe de hockey sur glace 1981-1982, 1982-1983, 1983-1984, 1984-1985, 1985-1986, 1986-1987, 1987-1988 et 1988-1989.
 Mike Ramsey, hockeyeur sur glace américain. Champion olympique aux Jeux Lake Placid 1980.
 1963 :
 Isabelle Gautheron, cycliste sur piste française.
 1965 :
 Katarina Witt, patineuse artistique dames est-allemande puis allemande. Championne olympique aux Jeux de Sarajevo 1984 et aux Jeux de Calgary 1988. Championne du monde patinage artistique dames 1984, 1985, 1987 et 1988. Championne d'Europe de patinage artistique dames 1983, 1984, 1985, 1986, 1987 et 1988.
 1968 :
 Manabu Orido, pilote de courses automobile d'endurance japonais.
 1970 :
 Christian Karembeu, footballeur français. Champion du monde de football 1998. Champion d'Europe de football 2000. Vainqueur des Ligue des champions 1998 et 2000. (53 sélections en équipe de France).
 Lindsay Hunter, basketteur américain double champion en NBA
 1971 :
 Frank Sinclair, footballeur anglo-jamaïcain. Vainqueur de la Coupe d'Europe des vainqueurs de coupe 1998. (43 sélections avec l'équipe de Jamaïque).
 1974 :
 Ľuboš Reiter, footballeur slovaque. (28 sélections en équipe nationale).
 1976 :
 Byron Kelleher, joueur de rugby néo-zélandais. Vainqueur des Tri-nations 2002, 2005, 2006 et 2007, de la Coupe d'Europe de rugby à XV 2010. (57 sélections en équipe nationale).
 1977 :
 Adam Małysz, sauteur à ski polonais. Médaillé d'argent au grand tremplin et médaillé de bronze au petit tremplin aux Jeux de Salt Lake City 2002, et médaillé d'argent du grand et du petit tremplin aux Jeux de Vancouver 2010. Champion du monde de saut à ski au petit tremplin 2001 et 2007 puis champion du monde de saut à ski du grand et petit tremplin 2003.
 Yelena Zadorozhnaya, athlète de demi fond et de fond russe.
 1978 :
 Bram Tankink, cycliste sur route néerlandais.
 1981 :
 Ioánnis Amanatídis, footballeur grec.
 Geoffroy Krantz, handballeur français. Champion d'Europe 2006. Vainqueur de la Ligue des champions 2003, de la Coupe EHF 2009 puis des Coupe d'Europe des vainqueurs de coupe 2010 et 2011. (29 sélections en équipe de France).
 David Villa, footballeur espagnol. Champion du monde de football 2010. Champion d'Europe de football 2008. Vainqueur de la Ligue des champions 2011. (97 sélections en équipe nationale).
 1983 :
 Stephen Donald, joueur de rugby à XV néo-zélandais. Champion du monde de rugby à XV 2011. (23 sélections en équipe nationale).
 Aleksey Drozdov, athlète d'épreuves combinées russe.
 1984 :
 Cosmin Moți, footballeur roumain. (9 sélections en équipe nationale).
 Emmanuelle Mouké, basketteuse ivoirienne.
 1985 :
 László Cseh, nageur hongrois. Médaillé de bronze du 400 m 4 nages aux Jeux d'Athènes 2004, médaillé d'argent du 200 m papillon, du 200 m 4 nages et du 400 m 4 nages aux Jeux de Pékin 2008, médaillé de bronze du 200 m 4 nages aux Jeux de Londres 2012 puis médaillé d'argent du 200 m papillon aux Jeux de Rio 2016. Champion du monde de natation du 400 m 4 nages 2005 champion du monde de natation du 200 m papillon 2015. Champion d'Europe de natation du 100 m dos et du 400 m 4 nages 2004, champion d'Europe de natation du 200 m 4 nages et du 400 m 4 nages 2006, 2008, 2010, champion d'Europe de natation du 200 m papillon, du 200 m 4 nages et du 400 m 4 nages 2012, champion d'Europe de natation du 200 m 4 nages 2014 puis champion d'Europe de natation du 100 et 200 m papillon 2016.
 Josep Antonio Gómes, footballeur andorran. (55 sélections en équipe nationale).
 Brian Roberts, basketteur américain.
 1986 :
 Davit Kubriashvili, joueur de rugby à XV géorgien. Vainqueur de la Coupe d'Europe de rugby 2013 et du Challenge européen 2016. (47 sélections en équipe nationale).
 1987 :
 Mats Solheim, footballeur norvégien.
 1990 :
 Christian Benteke, footballeur belge. (38 sélections en équipe nationale).
 1991 :
 Torgeir Børven, footballeur norvégien.
 Simon Desthieux, biathlète français. Champion olympique du relais mixte aux Jeux de Pyeongchang 2018. Médaillé d'argent du relais 4 × 7,5 km aux Mondiaux de biathlon 2017 et champion du monde de biathlon du relais 4×7,5km 2020.
 Aaron Thomas, basketteur américain.
 1992 :
 Ayanleh Souleiman, athlète de demi fond djiboutien.
 1993 :
 Nirra Fields, basketteuse canadienne. (30 sélections ne équipe nationale).
 1994 :
 Antonín Barák, footballeur tchèque.
 Bernarda Pera, joueuse de tennis américaine.
 Matthieu Vaxiviere, pilote de courses automobile d'endurance français.
 1995 :
 Séraphine Okemba, joueuse de rugby à XV et à sept française. Médaillée d'argent aux Jeux de Tokyo 2020.
 2000 :
 César Huerta, footballeur mexicain.

2001 :
 Lorette Charpy, gymnaste française. Médaillée de bronze de la poutre aux CE de gymnastique artistique 2019.

Décès

: 1901-1950
 1904 :
 David Bratton, 35 ans, joueur de water-polo américain. Champion olympique lors des Jeux olympiques de Saint-Louis 1904. (° ? 1869).
 1915 :
 Benjamin Jamieson, 41 ans, joueur de crosse canadien. Champion olympique aux Jeux de Saint-Louis 1904. (° 15 mars 1874).
 1917 :
 Jack Reynolds, 48 ans, footballeur irlando-anglais. (5 sélections avec l'équipe d'Irlande et 8 avec celle d'Angleterre). (° 21 février 1869).
 1928 :
 Johan Olin, 45 ans, lutteur de gréco-romaine finlandais. Médaillé d'argent des poids lourds aux Jeux de Stockholm 1912. (° 30 juin 1883).

: 1951-2000
 1955 :
 Maurice Archambaud, 49 ans, cycliste sur route français. Vainqueur des Paris-Nice 1936 et 1939. (° 30 août 1906).
 1977 :
 Jack Beresford, 78 ans, rameur britannique. Médaillé d'argent en skiff aux Jeux d'Anvers 1920, champion olympique en skiff aux Jeux de Paris 1924, médaillé d'argent en huit aux Jeux d'Amsterdam 1928, champion olympique en quatre sans barreur aux Jeux de Los Angeles 1932 et en deux de couple aux Jeux de Berlin 1936. (°  janvier 1899).
 1979 :
 Dhyan Chand, 74 ans, hockeyeur sur gazon indien. Champion olympique lors des Jeux d'Amsterdam 1928, des Jeux de Los Angeles 1932 et des Jeux de Berlin 1936. (° 29 août 1905).
 2000 :
 Miklós Szabó, 91 ans, athlète de demi-fond hongrois. Champion d'Europe d'athlétisme du 800m et médaillé d'argent du 1 500m 1934. (° 6 décembre 1908).

2010 :
 Ron Santo, 70 ans, joueur de baseball américain. (° 25 février 1940).
 2018 :
 Markus Beyer, 47 ans, boxeur allemand. Champion du monde poids super-moyens de boxe à 3 reprises. (° 28 avril 1971).

Notes et références

Articles connexes
 Le 3 décembre dans tous les domaines.

Decembre 03

redpajama_set_name: RedPajamaWikipedia


We are a USDA licensed ranch! We breed, buy and sell both domestic and exotic animals. If we don't have what you are looking for; we can get it for you!! Our animals are well loved and well cared for here. Their "job" in life is to be friendly!! Our aim when we sell an animal is to match the new owner with a pet/livestock animal that will be a long term happy home! Buyer is responsible for knowing and following their state & local laws regarding animal ownership.
We are available for support before, during and after the sale. We want the animal to be safe and well cared for and the customer to feel that we are a good resource!
COMING SOON!! AFRICAN PIED CROWS!! LEGAL crows in the USA, VERY intelligent, can be trained even as service birds. Hand raised & bonded.
Rabbits!! Social, sweet bunnies for pets. Can be litter trained & learn to walk on a halter! $25 w/o papers..
We will have a variety of baby goats this spring!!!
All our "kids" are disbudded, bottle fed & vaccinated!!


text:
Film Fridays – NBC Announces the 2022 Golden Globes are Cancelled
•Artists, Attorney, beauty, Blog, Box Office, Business Legal, Business Manager, Casting, Clearance, Client News, comics, Copyright, Digital, Distribution, Documentary, Employment, Entertainment Attorney, Entertainment Legal, Entertainment News, Entertainment Review, Film, Film Attorney, Financing, Foreign, Independent Filmmakers, Industry / Client News, Infringement, instagram, Investor, Legal, License, Licensing, Life Story, LLC, Manager, Music, Music Attorney, New Media, Ownership, Pay, Personal Legal, Production, Publishing, Rights, Screenplay, Script, Snapchat, songwriter, Story, Talent, Television, Television Attorney, Trademark, Uncategorized, Video, YouTube
The Golden Globes will not air in 2022, according to NBC, after years of controversy and a recent L.A. Times investigation into the Hollywood Foreign Press Association's membership and financial and ethical practices. This year the show saw a 60% drop in viewership over 2020 and provide a $20-million rebate to NBC to alleviate the loss.
"If they go away, I don't think anybody's going to lament that," two-time Globe winner Matt Damon told the "Today" show Thursday. "I don't think the world needs to mourn the death of an awards show."
"I'm hard-pressed to envision any winners as a result of the Golden Globes' demise," said veteran publicist Tony Angellotti, who has worked on numerous Globes campaigns as an awards consultant for decades.
"It doesn't necessarily signal higher ratings for other awards shows. Marketers of movies and broadcast shows lose. Potential nominees lose. Ancillary businesses lose, including media. The city of Los Angeles loses."
"The HFPA cannot accurately reflect the best of our industry until your membership expands to reflect more of the social, cultural, and ethnic diversity that exists in the stories we tell and the creators with whom we work," WarnerMedia executives wrote in a letter to HFPA President Ali Sar on Sunday, one day before NBC pulled the plug on the Globes for 2022. The letter went on, "For far too long, demands for perks, special favors, and unprofessional requests have been made to our teams and others across the industry [by the HFPA]. We regret that as an industry, we have complained but largely tolerated this behavior until now."
"This is a defining moment for Hollywood," said Tina Tchen, president of Time's Up. "Today, we have the opportunity to recognize that, by speaking up against one powerful but deeply flawed awards system, we can begin to reimagine a more equitable industry."
– Excerpt from an article for The LA Times by Josh Rottenbery. Read the full article here.
Previous PostYou Deserve Strong Legal Representation From an Entertainment LawyerNext PostMusic Monday: EU Regulators Charge Apple With Antitrust Violation Over Music Streaming

redpajama_set_name: RedPajamaCommonCrawl


Sorry it has been a while, but life intrudes sometimes, however, there have been many outrages in the past while. Our most recent, is the election we're holding in Ontario right now.
We prefer when it comes to exercising our franchise, to vote for things. For a particular party, their leader, a platform, a series of promises, or reforms. In this iteration of the Ontario Legislature, we don't necessarily get that option, voting for something.
The Conservatives are saddled with a leader, Tim Hudak and a platform that includes invading Poland in September, to obtain Lebensraum for Ontario. Hudak's other big platform plank includes creating more jobs by firing 100,000 civil servants. This is the intellectual equivalent of determining that dogs are deaf when you cut off all their legs, because they won't respond to "Come" Hudak is one of those bug-eyed people who look like his self-importance was inflated to 45 psi over the placarded pressure when the election writ was dropped.
The Ontario New Democratic Party leader, Andrea Horvath suffers from an image problem. Everyone of a certain age in Ontario remembers what were called "Rae Days" in 1993, when the then-NDP leader, Bob Rae scared himself and the NDP shitless and wound up in the Big Chair at Queen's Park. He gave all of Ontario's public servants twelve unpaid days of leave to reduce a $2 billion dollar deficit. We long for the days of a $2 billion shortfall now. Leading the NDP means Big Labour actively hates you, especially since Andrea Horvath's party pulled the plug on the Liberal Minority government and forced the election.
Locally, in Ottawa South, which was Dalton McGuinty's old riding, we've got his Executive Assistant running as an incumbent candidate and proving that there is no shame in politics, even if you are caught on video up to the bristles in a Berkshire sow. A Conservative, Matt Young, who says "What Tim says, yep!" and an NDP Candidate, Bronwyn Funiciello, who is personable in a Mary-Kay Distributor way, but knows her chance in this riding is on par with the other five fringe candidates, Libertarian, Green, Special Needs, Freedom and Communist. It's really down to two, Liberal or Conservatives here.
Which is where our conundrum sits. We can't vote for the Liberals, as their granitic inaction and mind-warping stupidity means another four years of no hope no progress and no money as the last jobs left in manufacturing get sent to Guatemala or Michigan. Or,vote for a party that promises like their forebears, to gut everything they can get their hands on, including health care, schools, policing, fire services, and the bureaucracy, then private-sector it to their buddies as rapidly as possible under the guise of 'getting value for the tax payer'. It would be Mike Harris the Reboot, or Ernie Eaves Mark II. Plus the whole one-armed saluting of the Conservatives gives us shivers of annexing the Sudetenland flashbacks that we can't shake.
We can't get drunk enough to vote for the NDP or any of the other fringe parties, unless the Rhino Party comes back from the dead and offers to build a bridge along the St Lawrence Seaway as a Public Service Project. Except they want to build it lengthwise, not across.
That kind of stupid, we can get behind as a voter.


text:
Václav Eusebius Popel z Lobkowicz, zjednodušeným pravopisem z Lobkovic ( Wenzel Eusebius Popel von Lobkowitz; 20. ledna 1609 Praha – 22. dubna 1677 Roudnice nad Labem) byl český šlechtic, druhý panující kníže z Lobkovic a od roku 1646 vévoda zaháňský. Působil jako císařský politik a vojevůdce.

Kariéra

Byl jediným synem Zdeňka Vojtěcha z Lobkovic (1568–1628) a Polyxeny z Pernštejna (1566–1642).

Po skončení studií se věnoval vojenské službě. V roce 1631 byl jmenován plukovníkem, od roku 1636 velel vojenskému oddílu a v roce 1646 stal se vrchním velitelem říšské armády. V roce 1636 byl jmenován dvorským válečným radou, v roce 1640 polním podmaršálem, v roce 1647 vrchním polním maršálem a v roce 1652 se stal prezidentem dvorské válečné rady.

V roce 1658 byl přítomen zvolení a korunovaci Leopolda I. na římského císaře ve Frankfurtu nad Mohanem.

Od roku 1665 zastával úřad nejvyššího císařského hofmistra a v roce 1669 jej císař jmenoval prvním ministrem habsburské říše. V této funkci mimo jiné s ostatními členy státní rady potrestal účastníky Wesselényiho spiknutí chorvatské a uherské šlechty proti císaři.

Vládl téměř neomezeně a snažil se o spojenectví s Francií. V roce 1674 přivodila španělská strana jeho pád, 19. října 1674 byl zatčen a vykázán do domácího vězení na roudnickém zámku.

Václav Eusebius kníže Popel z Lobkovic zemřel 22. dubna 1677 na zámku v Roudnici nad Labem. Pohřben byl v kapucínském klášterním kostele sv. Václava v Roudnici nad Labem.

Tituly
V roce 1644 byl přijat mezi rytíře Řádu Zlatého rouna. Císař v roce 1641 povýšil jeho říšské panství Neustadt a. d. W. a Störnstein na okněžněné hrabství Sternstein (Sterneck) a v roce 1653 jej uvedl do kolegia říšských knížat (říšská knížecí rada). V roce 1646 získal knížectví Zaháňské a s ním i vévodský titul.

Majetek
Roudnice nad Labem, Chlumec, Litomyšl, Lobkovice, Waldthurn, Schönsee

Manželství a rodina
Václav Eusebisu byl dvakrát ženatý. Jeho první manželkou se 3. listopadu 1638 stala Johana hraběnka Myškovna ze Žlunic (1600 – 17. ledna 1650, pohřbena v kapucínském kostele sv. Václava v Roudnici nad Labem), dcera Karla Častovce Myšky ze Žlunic († 1602) a Magdaleny Kaplířové ze Sulevic († 1617), vdova po Václavu Štastném Pětipeském z Chýš († 1638). Manželství zůstalo bezdětné.

Jeho druhou manželkou se 20. ledna 1653 stala evangelička Augusta Žofie falckraběnka na Rýně ze Sulzbachu (22. listopadu 1624 – 30. dubna 1682 Norimberk), dcera Augusta Bavorského (1582–1632), falckraběte rýnského ze Sulzbachu, a Hedviky princezny z Holštýnsko-Gottorpské (1603–1657). Narodilo se jim pět dětí:
 1. syn (*/† 31. ledna 1654)
 2. Ferdinand August Leopold (7. září 1655, Neustadt an der Waldnaab – 3. října 1715, Vídeň), vévoda zaháňský, 3. kníže z Lobkovic, nejvyšší hofmistr císařovny Amálie Vilemíny Brunšvicko-Lüneburské 1699–1708, I. manželka 1677 Klaudie Františka z Nassau-Hadamaru (6. června 1660 – 6. března 1680), II. manželka 1680 Marie Anna Vilemína z Baden-Badenu (1655–1701), III. manželka 1703 Marie Filipína z Althannu (1670–1706), IV. manželka 1707 Marie Johana ze Schwarzenbergu
 3. Filip Ferdinand Adalbert (12. září 1656 – 2. ledna 1659)
 4. Marie Hedvika Žofie (30. dubna 1658 – 24. března 1660)
 5. František Vilém Ignác (15. září 1659 – 6. ledna 1698)

Mezi přímé potomky Václava Eusebia z Lobkovic patří např. ruský car Mikuláš I., ale také anglický král Jiří VI. (a tedy i jeho dcera Alžběta) anebo princ Filip, vévoda z Edinburghu. Současný britský král Karel III. je tedy přímým potomkem Václava Eusebia ze strany obou rodičů.

Galerie

Odkazy

Reference

Literatura

Externí odkazy

 www.libri.cz
 rodokmen na str. genealogy.euweb.cz

Václav Eusebius
Čeští šlechtici
Rytíři Řádu zlatého rouna
Zaháňská knížata
Čeští hofmistři
Prezidenti dvorské válečné rady
Narození 20. ledna
Narození v roce 1609
Narození v Praze
Úmrtí 22. dubna
Úmrtí v roce 1677
Úmrtí v Roudnici nad Labem
Pohřbení v Roudnici nad Labem
Muži
Působící v Litomyšli
Majitelé zámku v Litomyšli
Osobnosti třicetileté války


The government is not about to get rid of Head of Customs Anti-Narcotics Unit (CANU), James Singh who has been asked to proceed on leave, Public Security Minister Khemraj Ramjattan said Wednesday.
"No, not as far as I know. He is on leave. Everybody is entitled to his leave," Ramjattan told Demerara Waves Online News when asked whether Singh's engagement with the security sector was about to end. He added that Singh would be returning as Head of CANU at the end of his one or two-month leave.
He said Singh would be returning to head that anti-drug agency which falls under the responsibility of the Ministry of Public Security, previously the Ministry of Home Affairs.
Acting for Singh is retired Brigadier, Michael Atherly who is tipped to head the National Anti-Narcotics Agency (NANA), an umbrella body of all agencies that are involved in the fight against drug trafficking.
The Ministry of the Presidency later said in a statement that in line with Government's policy to ensure that officers do not accumulate annual leave and in turn request pay in lieu of such, the CANU Head has been asked to proceed on leave effective today.
"This is the practice that we have embraced since we came into office and, therefore, Mr. Singh, who had some leave accumulated, has been asked to go on leave with effect from today and Major General Michael Atherly will be heading CANU. This has been communicated to the Minister of Public Security, who is the person responsible for CANU, but public officers have always been encouraged to take their leave and we want to discourage this practice of accumulating large amounts of leave and then asking for payment in lieu. So we are trying to ensure that all public officers get their leave during that year," Minister Harmon was quoted as saying in the Ministry of the Presidency statement.
Major General (ret'd) Atherly was responsible for leading the review of the National Drug Strategy Master Plan 2014-2018. This review led to the development of the National Drug Strategy Master Plan 2016-2020, which was launched last December.
Demerara Waves Online News has been told that one of the major constraints facing the establishment of NANA is finding an appropriate building. Highly placed sources had declined to comment on whether the heads of all the related agencies would be retained when NANA is fully established.
A recent Commission of Inquiry into allegations against CANU by now convicted drug lord Barry Dataram had made quite an unflattering conclusion about that agency.
That inquiry had been conducted by retired Brigadier of the Guyana Defence Force, Bruce Lovell.


text:
Q: $2^{5-2}$ Design : Alias Structure $2^{5-2}$ Design
Design Generators: $D=AB\quad E=AC$
Defining Relation: $I=ABD=ACE=BCDE$
$$\text{Aliases}$$
$$A=BD=CE=ABDE$$
$$B=AD=ABCE=CDE$$
$$C=ABCD=AE=BDE$$
$$D=AB=ACDE=BCE$$
$$E=ABDE=AC=BCD$$
$$BC=ACD=ABE=DE$$
$$CD=ABC=ADE=BE$$
  But the alias structure in the book Design and Analysis of Experiments by Douglas C. Montgomery [Appendix XII (c)] is as following:
$$\text{Aliases}$$
$$A=BD=CE$$
$$B=AD=CDE$$
$$C=AE=BDE$$
$$D=AB=BCE$$
$$E=AC=BCD$$
$$BC=DE=ACD=ABE$$
$$CD=BE=ABC=ADE$$
Instead of $A+BD+CE+ABDE$, this is $A+BD+CE$ in the book and so on.

*

*Why ?

A: I think he's just not showing the 4- and 5-way interactions, for brevity and assuming people won't be too concerned about them

A: Interaction of order IV or higher are not written because they are usually not significant. This principle is called "sparsity-of-effects principle" and it is explained in Design and Analysis of Experiments by Douglas C. Montgomery.


text:
Archive | 2020 RSS feed for this section
Fiftieth anniversary of the 1964 Tokyo Olympics
Today (2014 October 10th) is the 50th anniversary of the 1964 Summer Olympics that were hosted by Tokyo.
This was the first time the Olympics was hosted by an Asian country.
The Tokyo government had new stadiums built (which are still in use today) and the world's first 新幹線 (bullet train) was built by Japan Railways (called "Japan National Railways" back then). The bullet train connected Tokyo to Osaka, and it's service commenced on October 1st, 1964…so, nine days ago was the 50th birthday of the world's first bullet train.
Since Tokyo hosted the Summer Olympics fifty years ago, Japan has hosted the Olympics two more times: the 1972 Winter Olympics were hosted by Sapporo, Japan and the 1998 Winter Olympics were hosted by Nagano, Japan.
A new bullet-train service was also started in 1998 to connect Tokyo to Nagano for the '98 Games. My wife and I took that bullet train to see the Nagano Olympics atmosphere.
Tokyo put a bid in to host the 2016 Olympics, but lost. (I wrote a post about Tokyo's 2016 bid and also my trip to Nagano in '98…here).
Tokyo's bid to host the 2020 Summer Olympics was successful though. In July 2020, Tokyo will not only be the first Asian city to host an Olympics Games…but also the first Asian city to host the Games twice!
(I wrote a post about the 2020 Tokyo Olympics here).
Both the 1964 Tokyo Olympics logo and the 2020 Tokyo Olympics logo.
The 1964 Tokyo Olympics commenced on 1964 October 10th. October isn't summer…it's autumn. The reason that the Games were in October is because summer is extremely hot and humid in Tokyo. The weather in October (now) is much more comfortable.
After the 1964 Olympics, October 10th became a holiday in Japan: 体育の日 ("Fitness Day"). The date of the holiday was changed in the year 2000 to 'the second Monday in October'. So, 体育の日 (Fitness Day) isn't today…next Monday (October 13th, 2014) is the holiday.
The IOC (International Olympic Committee) changed the rules and now the Summer Olympics must be played in July. So, the 2020 Tokyo Olympics will be in July. It's gonna be hot!
Tags: 1964, 1964 Olympics, 1964 Summer Olympics, 1964 Tokyo Olympics, 1972, 1998, 2020, 2020 Olympics, 2020 Tokyo Olympics, Japan, Nagano, Olympic Games, Olympics, sapporo, Summer Olympics, Tokyo, Tokyo Olympics, Winter Olympics
Categories 1960's, 2020, Japan, Nagano, Olympics, sports, Tokyo, winter
2013 in 98 seconds
Here is the biggest news stories of 2013 for those of us in Japan:
Were all of these news stories in your country? What was the biggest news of 2013 where you live?
Tags: 2013, biggest news of 2013, Japan, Japanese, News, Olympics, Tokyo, top news of 2013, zeitgeist
Categories 2013, 2020, Celebrities, Events, Japan, new years, News, Olympics, Tokyo
2013's "kanji"
Every December, a Japanese kanji character is chosen as 「今年の漢字」 ("the kanji of the year").
You can click here to read my post about last year's (2012) kanji of the year,
click here for 2011's,
and click here for 2008's.
This year's (2013) Kanji of the Year was just chosen.
It's 「輪」 (りん("rin")).
It means "ring" and was chosen in honor of the Olympics rings because of Tokyo's successful bid to host the 2020 summer Olympics.
Tags: 2013, Japan, kanji, kanji of the year, kyoto, Olympics, rin, Ring, Tokyo, 今年の漢字
Categories 2020, Japan, kyoto, Olympics, Tokyo
Japanese anime predicted the future
The Japanese anime "Akira" predicted over 30 years ago that the 2020 Olympics would be hosted by Tokyo!
http://junkee.com/akira-predicted-the-2020-tokyo-olympic-games-way-back-in-1982
Tags: 1982, 1988, 2020, Akira, anime, Japan, Japanese, manga, Olympics, Tokyo, Tokyo Olympics
Categories 1980s, 2020, anime, Japan, Olympics, Tokyo
Tokyo has been chosen to host the 2020 Summer Olympics!
The last time Tokyo hosted the Olympics was in 1964.
That Olympics was considered a big success. And a lot of changes were made to the city prior to the Games then.
I look forward to seeing what changes are made to Tokyo again now that we will be hosting the Olympics again in seven years.
Have you ever lived in a city that hosted the Olmpics?
What were the pros? And the cons?
Would you consider hosting the Olympics are benefit to the city?
Are you gonna come to Tokyo for the 2020 Olympics?
Tags: 1964, 2020, Japan, Olympics, Summer Olympics, Tokyo
Categories 2020, Japan, Olympics, sports, Tokyo
No more Golden-gai
On Saturday (2013 September 7th), the IOC (International Olympic Committee) will decide which city will host the 2020 Olympics.
Tokyo, Madrid and Istanbul are the three candidate cities.
If Tokyo is chosen, the famous 「新宿ゴールデン街」 ("Shinjuku Golden-gai") might torn down and renovated.
If it does, that would be unfortunate. Golden-gai is a unique, well-known section of downtown Tokyo that consists of hundreds of very small restaurants and bars all with a small section of back alleys.
Very "Tokyo".
Tags: 2020, 2020 Olympics, ゴールデン街, Golden Gai, Olympics, shinjuku, Shinjuku Golden Gai, Tokyo, Tokyo Olymics, 新宿, 新宿ゴールデン街
Categories 2020, Japan, Olympics, shinjuku, Tokyo
All in one weekend
I had a busy couple of days this past weekend.
First of all, my family and I went to Tokyo Disneyland together. My kids like the Disney Halloween that is done during the month of October at Tokyo Disneyland.
I also got my driver's license renewed since it was going to expire next month.
When I was a teenager in Florida I had a U.S. (Florida) driver's license but I didn't live in America long enough to need to have it renewed…so I'm not sure where it is easier, America or Japan, to renew a license.
And, actually, my Florida driver license has expired years ago…I have had a Japanese driver's license for many years but not a U.S. one!
Anyways, I have a "gold license"…so it is the easiest (and least expensive) of the Japanese driver's licenses to renew.
"What is a gold license", you ask?
In Japan, driver's licenses have a stripe that is one of three colors…either green, blue or gold.
A "green license" is a "beginner driver". These drivers must have a special decal on their car that identifies them as a beginner driver. This license is valid of three years (my oldest daughter has this one now).
A "blue license" is a regular "operator's license".
And a "gold license" is a "safe driver". This license, as I mentioned, is the quickest, easiest and least expensive to renew. It only takes about one hour from the time I walk in the driver license office til I exit with my renewed license.
Also, a "gold driver" pays less for automobile insurance.
As a sidenote, in Japan, if you take a driver license exam with an automatic-transmission car, then that's the only type you'll be licensed to drive.
I took my exam years ago with a standard transmission ("stick shift") car…so I can legally drive both a manual transmission or an automatic. My license also allows me to drive an eight-ton truck.
While I was in the driver's license office I noticed a poster advertising Tokyo's bid for the 2020 Olympics.
It says "The 2020 Olympics / Paralympics in Japan!"
I wrote a post about Tokyo's bid for the 2016 Olympics (that was ultimately unsuccessful).
Click here to read it…it has the official promotion video for the bid campaign.
And finally, my wife and I went to a festival.
There were lumberjacks at this festival that put on a log-rolling show.
Very entertaining!
They also put on a "strong man demonstration".
At one point they put heavy hay stacks, barrels and a small boat on a man's chest…and then three other men climbed onto the boat while it was on the man's chest!
Ultraman was there too!
Tags: disney, Disneyland, disneysea, driver, driver license, drivers license, festival, Japan, log-rolling, Olympics, Tokyo, Tokyo Disney Resort, Tokyo Disneyland, Tokyo DisneySea
Categories 2016, 2020, Events, festivals, Japan
Hiroshima and Nagasaki
The day before yesterday (Monday, 12 October) was a Japanese holiday…「体育の日」 ("Sports Day").
Click here to read my short FAQ about it.
Every year on this day, 靖国神社 (Yasukuni Shrine) has an archery ceremony called 「草鹿式」 ("Kusa-jishi-shiki").
靖国神社の「草鹿式」
My wife and I watched this ceremony last year and I wrote a post about it.
This year, a French couple who visited and commented on my blog many times are in Tokyo until next week.
This is their first visit to Japan, so I met up with them and took them to watch the 「草鹿式」 (archery ceremony) at 靖国神社 (Yasukuni Shrine).
I didn't take many photos of it this year, but please read my post about last year's ceremony. On that post, there are photos and videos that I took (click here to read it).
As I wrote in an earlier post (click here), Tokyo was a candidate city to host the 2016 Olympic Games but lost out to Rio De Janeiro.
Well, it has been announced that Tokyo plans to submit a bid to host the 2020 Olympic Games!
But Tokyo isn't the only Japanese city that wants to host the 2020 games.
Hiroshima and Nagasaki have announced their plan to submit a bid to co-host the 2020 Summer Olympics!
Other cities that have expressed interest in hosting the 2020 games are South Africa, Busan (Korea), Delhi (India), Rome (Italy), St. Petersburg (Russia), Warsaw (Poland), Toronto (Canada), Boston (America), and a number of others.
The candidate cities for the 2020 Olympics will be decided next year and the host city will be chosen in 2013.
Speaking of 「広島」 (Hiroshima, Japan) and 「長崎」 (Nagasaki, Japan), the city council of Rome, Italy announced their plan to rename a street in their city "Hiroshima Nagasaki Street"!
Their reason is because a 78-year old Japanese man named Hiroshi Nishioka gave a speech in Rome recently that left much of the audience in tears.
Mr. Nishioka is a survivor of the 1945 atomic bombing of Nagasaki. He was only fourteen at the time of the bombing and in his recent speech in Italy he recalled how he refused to share the water in his canteen with any of the dying people in the streets of Nagasaki for fear that he wouldn't have enough left for himself.
Even now, the memory of that, he said in his speech, is "like a splinter in my heart."
Tags: 1945, 2016, 2016 Olympics, 2020, 2020 Olympics, archery, archery ceremony, archery festival, archery show, atomic bomb, オリムピック, 草鹿式, 長崎, 靖国神社, Hiroshi Nishioka, hiroshima, Hiroshima Nagasaki Street, Italy, Japan, Japanese, Japanese archery, Kusa-jishi-shiki, Kusajishishiki, nagasaki, Olympics, Roma, Tokyo, yasukuni, yasukuni jinja, yasukuni shrine, 広島, 東京
Categories 2016, 2020, Events, festivals, Japan, News, Olympics, photos, Places to go, Tokyo


text:
Liongate Capital Management was a global investment management firm, focused on creating and managing fund of hedge fund investments for institutional and private investors. Liongate, founded in 2003 by Jeff Holland, Ben Funk and Randall Dillard, managed a range of funds of hedge funds in both commingled funds and tailored, single client portfolios.  The firm, which at it peak managed over USD 3 billion with an additional USD 4 billion in assets under advisory, had a global reach with offices in London, New York, Zurich, Dubai, Malta and Mumbai. The Liongate partners sold the firm to Principal Financial Group in 2013 as the large US insurer and asset manager wanted a hedge fund research platform in order to quickly ramp up retail hedge fund distribution in the US.

The firm's flagship Liongate Multi-Strategy Fund, launched in April 2004, was a diversified fund of hedge funds that aimed to deliver a consistent annual return to investors within a targeted annualised standard deviation of 4-6%. The Liongate Commodities Fund was launched in January 2008. Randall Dillard was the lead portfolio manager of the funds and the firm's Chief Investment Officer.

The firm and its people won numerous industry awards. The flagship fund was awarded Best Multi-Strategy Fund of Hedge Funds by Institutional Investor.  The flagship fund was also named Best Diversified Fund of Hedge Funds by Hedgeweek.  Financial News named Jeff Holland one of the top 40 Under 40 in hedge funds.   Jeff Holland was named a Rising Star of Hedge Funds by Institutional Investor.

Liongate Capital Management was authorized and regulated by the Financial Services Authority (FSA) in the UK and was a registered investment advisor with the Securities and Exchange Commission (SEC) in the US.

Principal Financial Group (US:PFG) acquired 55% of Liongate in 2013 to expand in hedge funds and meet demand for alternative investments. By the time Principal purchased Liongate, assets under management had declined from its peak of USD 3 billion to USD 1.4 billion. As investors increasingly began to favour direct allocations to hedge funds rather than investing in funds of hedge funds, investors continued to withdraw from funds of hedge funds or demand lower fees to reduce total fees.   PFG transferred the firm's team, proprietary systems and offices in house to focus solely on the US retail market. Jeff Holland and Randall Dillard retired from Liongate in 2015 and PFG returned remaining assets to institutional investors and closed Liongate as a standalone business.

See also
Hedge fund
Fund of hedge funds

References

Investment management companies of the United Kingdom
Hedge fund firms in the United Kingdom
Privately held companies of the United Kingdom


The endocrinologist deals with the diagnosis and treatment of all endocrine glands diseases: diseases of thyroid, parathyroid, hypothalamus, pituitary and adrenal glands. They also deal with malfunctions of testes and ovaries, which can manifest as menstrual disorders and/or infertility.
At Swiss Medicus MC we offer you consultation with our endocrinologist who has many years of experience and expertise. Ultrasound of thyroid and parathyroid is also available.


Tickets go on sale this week for Final Battle, Ring of Honor's huge, annual pay-per-view extravaganza, which again takes place at the historic Manhattan Center's Hammerstein Ballroom in New York City on Friday, Dec. 14.
Tickets go on sale this Wednesday, Sept. 12 at 10 a.m. ET for HonorClub members and Friday, Sept. 14 at 10 a.m. ET for the general public. Final Battle sells out quickly every year, so do not delay in purchasing your tickets. The surest way to guarantee the best seats is to sign up for HonorClub.
All roads lead to the G1 Supercard, co-promoted by ROH and New Japan Pro-Wrestling, at sold-out Madison Square Garden on April 6, 2019, and the results at Final Battle undoubtedly will have an impact on the historic show.
Final Battle has been the site of some of ROH's most memorable matches, including Dalton Castle's win over Cody last year to become ROH World Champion. Other bouts at Final Battle that are still talked about today include: Austin Aries ending Samoa Joe's record 645-day reign as ROH World Champion in 2004; Bryan Danielson's gritty win over Takeshi Morishima in a Fight Without Honor in 2008; brutal battles between Kevin Steen and El Generico in 2010 (Fight Without Honor) and 2012 (Ladder War); and Jay Lethal's successful defense of the ROH World Title against AJ Styles in 2015.
Don't miss your chance to witness history by joining us live in New York City for Final Battle!


Shakespeare's most terrifying tragedy, from the National Theatre's 2018 season of live recordings direct from the London stage.
Screenings;Thurs 30the August @ 2pm. Sunday 2nd September @ 5pm.
Tickets; $25 for Non-members, $20 for seniors and members and students.


text:
Tuesday, January 19, 2021|Today's Paper
Inquirer Store
Rally High School Sports
PhillyDeals
Philly Tips
Things To Do at the Shore
El Inquirer
Lisa Marino, 40, Rothman doctor
by Walter F. Naedele, Inquirer Staff Writer, Posted: April 16, 2015
Lisa Marino
Even in kindergarten, Lisa Marino knew how to deal with her cystic fibrosis, said Danielle Westfall, her friend for 35 years.
"From the time she was 5, 6 years old, she knew when to take her medicine," Westfall said, and together in school, "we would walk down to the nurse."
Walking down the corridor, she seemed like anyone else.
But through the years, Westfall said, "she knew when she was getting rundown. She would say, 'It's time for me to go see my doctors.' "
The condition, Westfall said, "never defined her. It was something she dealt with every day, like brushing her teeth."
On Monday, April 13, Dr. Marino, 40, of Southampton, Burlington County, a physician at the Rothman Institute since 2009, died of complications from cystic fibrosis at the Hospital of the University of Pennsylvania.
Inquirer Morning Headlines Newsletter
Get the news you need to start your day
Though born with cystic fibrosis, Dr. Marino "had never been in serious condition until her hospitalization in January," her husband, Sean Sanford, said.
"They found she had an infection which had seriously damaged her lungs" as a result of the cystic fibrosis, he said.
"She worked very hard to take care of herself, from a very young age," Sanford said. "It was something that she had to manage every day."
From 30 to 45 minutes every morning and evening, she had to undergo rigorous physical therapy at home. "She was diligent," he said, "and had very good doctors."
Born in Bethpage, N.Y., Dr. Marino earned a bachelor's degree in chemistry at St. Joseph's University in 1997.
She was a chemist at Rohm & Haas Co. from 1997 to 1999 before earning a doctorate at the Philadelphia College of Osteopathy in 2003.
She was an intern at what is now the Frankford campus of Aria Health in 2003-04, and a resident and then chief resident in physical medicine and rehabilitation at the Hospital of the University of Pennsylvania before working on a fellowship there in spinal intervention and spine pain management in 2007-08.
In July 2014, the couple bought a 16-acre spread, Two Hawks Farm, in Southampton.
"We have started to grow organic vegetables" on five of the acres, her husband said, and they were beginning to manage two hives of honeybees.
Besides her husband, Dr. Marino is survived by her parents, Ellen and Albert Marino, and a sister, Lori.
A wake was set from 7 to 9 p.m. Friday, April 17, at the Church of St. Charles Borromeo, 47 Skillman Rd., Skillman, N.J., with a Funeral Mass there at 10:30 a.m. Saturday, April 18.
Donations may be sent to www.twohawksfoundation.com.
Condolences may be offered to the family at www.hillsboroughfuneralhome.com.
wnaedele@phillynews.com
610-313-8134 @WNaedele
Posted: April 16, 2015 - 3:01 AM
Walter F. Naedele, Inquirer Staff Writer
Biden taps Pennsylvania's health secretary for new administration; Pa. woman accused of trying to sell Pelosi's laptop to Russia
Rob Tornoe
Bidens mark MLK Day by volunteering in South Philly | Morning Newsletter
Josh Rosenblat
QAnon adherents discussed posing as troops to infiltrate inauguration, FBI briefing says
Carol D. Leonnig and Matt Zapotosky, The Washington Post
'The sun is shining' at Philly Shipyard as hundreds of jobs return this year, CEO says
Catherine Dunn
Unemployed renters ride the uncertain tide of fluctuating aid
Michaelle Bond
Camden's beloved Bell Pharmacy celebrates its 90th anniversary
Brandon T. Harden
About The Philadelphia Inquirer
Inquirer Events
Acel Moore Workshops
Inquirer News
Philly Sports Now
© 2021 The Philadelphia Inquirer, LLC Terms of Use/Privacy Policy/California Notice
California residents do not sell my data request


Just got my .25 41gr mould Saturday.Going to cast some today.I also have the adjustable sizer with 3 different size bushings from NOE.
Just cast around a couple hundred of the .25 41gr and they came out great.Sized a few of them to a .254 and they cycled in the Hatsan AT44 just fine.
Nice. How do they shoot out of your AT-44?
Haven't shot at any targets it's really cold and windy today.Maybe shoot at some targets tomorrow.
I just cast 50 of the 250-41-FN and they came out .254, I tried them in a marauder and they chambered very hard, I got them loaded but took a lot of effort to do so, I would like to know what size sizer to buy to make these easier to chamber in the marauder, I shot 2 out of curiosity and they shot right on at 30 yards. I did not shoot any more because of the cold weather.
well I just got my mold and sizers for the NOE .25-41gr. boolit, I molded up about 200 and found out that the only size that was accurate in the marauder gen.1 with war valve, and war nbh and a 12.5 lb spring, was the .250 ones, they chambered easily and at 40 yards 8 shot group could be covered with a quarter. The best velocity I could get was 854fps at the peak. The .252 and the .251 ones just would not shoot accurately in the marauder and they were harder to chamber in the gun. I am caster for 20 years and powder coat my powder boolits and thought to try and powder coat these airgun boolits, I found that the powder coated ones were faster and more accurate than the lead ones. One other thing to watch for is these boolits will ricochet more than a standard pellet. I usually shoot into a bullet trap but did shoot 3 times at a can and all 3 ricocheted something I don't like. I don't know what they will do at more than 40 yards but at 40 yards they did OK. If I had the room I would try longer distance but I don't and most of my shooting is 50 yards and closer. these do hit hard and rock my pellet trap when the hit.
Thanks for the report.... much appreciated.... 66 FPE in an MRod is pretty stout !


text:
Book of Boba Fett Star Temuera Morrison Confirms Change to Iconic Ship's Name
Patricia Cornwell Jan 12, 2022 0
Boba Fett's iconic starship hasn't featured in The Book of Boba Fett yet, but it seems it will without its former name. Last year, Star Wars riled some fans when Lego…
Newspaper founder's name stripped from library for support of massacre
Cao Xueqin Nov 15, 2021 0
Rocky Mountain News founder William Byers' name was stripped from a branch of the Denver Public Library last month over his support for the 1864 Sand Creek Massacre, and the branch was…
What links snooker players, race walkers and flamingos? The…


Congratulations to Dr Sue Wareham on her thoughtful commentary about promotions for military weapons at Canberra Airport ("Lest we forget: weapons are not just a product", Comment, July 25, p15). I agree that advertising instruments of mass death is a most inappropriate way to welcome visitors to the national capital. This just adds to the obscenity of spending around $100 billion on unnecessary submarines of unproven design together with joint strike fighter planes, the proto-types of which seem to specialise in falling out of the sky. This gross unwarranted expenditure on aggressive military hardware comes at a time when our government has made record cuts to peace-promoting overseas development assistance. Dr Wareham is right - advertising and accumulating lethal military weaponry will never lead the world to peace, but will rather heighten the risks of regional or global conflicts.


text:
Enjoy these fabulous typography creations supporting IWD Day 2021
It is thrilling to enjoy three of the best IWD 2021 Typography creations from collaboration with the Typism community.
Each year, the International Women's Day Women Creatives Mission sees women typographers from around the wide create exciting themed creations they share across social media. Their efforts help raise awareness about women's equality while also providing an important opportunity for leveraging visibility of their work and talent for commercial commissions.
Stay tuned as soon we'll be featuring further information below about what inspired the creativity of thesethree wpomen and what the #ChooseToChallenge means to them.
Alison Evans says every day should be women's day
@artsyalisondesigns
Alison Evans is from Sacramento in California, USA and her design focuses on challenging and calling out gender bias and inequity. " I love the empowerment in the message and knew I had to create something that not only celebrates the day, but shows solidarity with the mission," she says.
"I like to serve up positive, uplifting art with a side of feminism and pop culture. The main focus of my work is based on my own personal experiences with mental health, feminism and being raised by the television screen. While most of my work is focused on illustration, my main inspiration and motivation is typography, lettering and calligraphy."
"My concept behind my IWD design is that I really wanted to embody the celebration of women's achievements and promote a sense of inclusion and togetherness. Hands are something I gravitate towards illustrating, so I thought that holding hands would be a perfect depiction of that idea. I also wanted to incorporate the international symbol for women, and decided to include that with the background pattern."
"For the process, the program I use for all of my lettering/typography/illustration is Procreate. I started with the message: 'Happy International Women's Day' and decided I wanted to have that as the biggest element in the design. I sketched the lettering out first and realized that I had a blank spot underneath the lettering portion. As mentioned, I enjoy drawing hands so I thought this would be a perfect addition to the design at the bottom. I sketched those until they fit how I wanted them to, then went back and lettered the writing, and designed the ribbon-like texture to it. After that, I finalized the hands and colored them in. I always have a problem selecting colors, so that part took a long time, but I finally settled on a darker background so that the messaging popped."
"When it comes to IWD, I believe that as a society we need to celebrate women's successes and stand up for gender parity in every aspect of life. Although I would love if everyday could be International Women's Day, it is nice that we can set aside one day where we can focus our efforts on raising awareness about equality and come together for a common cause to celebrate the achievements the world has made in the goal of gender equity and inclusion."
Anne's work focuses on humanity
@lettersbyanne
Anne Gvozdjak is a high school senior student from the USA with academic interests spanning mathematics, biology, and computing who enjoys poetry and hand lettering in her free time. She is a humanities-loving stem student who also enjoys blogging about happiness, boredom, and adaptability - addressing these elements via her writing, designs, and thoughts. She has a love for unique stories, quirky word patterns, and lowercase letters and has been lettering as a hobby for many years and one day hopes to turn her talent into a freelance project of her own.
"My design was inspired by the idea that the queen is the most powerful piece on the chessboard. However, rather than pitting queens against one another in black and white, I wanted to emphasize a nature of collaboration and collective empowerment: thus, while the grayscale pattern of the looping letters reflects the chess theme, all the queens are the same deep, red color. I start all my designs with a pencil sketch. When I'm finished making adjustments, I scan the image and do my digital lettering in Autodesk Sketchbook and Adobe Photoshop."
"I think it is incredible to watch individuals break gender stereotypes in lettering style and color palette. Typography's subtle but ubiquitous presence in the world makes it all the more important for women to take on great projects and be confident in the value of their work. To me, International Women's Day is a day to celebrate obstacles women have overcome and mark the achievements they have dedicated their lives to. It reminds me of the beautiful community I'm part of, from members of my family to heroes in history."
Magali's birthday falls on IWD
@onirographica
Magali is keen to celebrate women's achievements and raise awareness about equality through supporting International Women's Day - especially as the day is twice as important for her because it coincides with her birthday - the day she was born a feminist!
Magali is a self-taught French artist in Luxembourg specializing in drawing letters and making compositions by mixing lettering and illustration to decorate slates and easels, windows, walls, cards, and more. She likes to draw letters that convey positivity and inspiration. her work usually includes intricate patterns, delicate curvy lines and dream-like elements - ranging from embellishing chalkboards for cafes and restaurants, decorating shop windows or painting murals to graphic design commissions where lettering and illustration are key.
"I wanted this piece to be both refined and strong in order to reflect the complexity of what women can be. That is why I created contrast between bold serif letters and delicate flourishes, between textured shadowed letters and raw sketchy background. The yellow petals surrounding the flowers on the pattern can be seen as flames that underline the power of the feminine. My process was a little bit different than usual for this piece. I started by putting together the color palette and background pattern, which I had created for a past artwork as part of the #100daysoflettering challenge. Once I had an overall frame for the lettering, I made a lot of sketches, aiming at finding a simple composition that would nicely fill the space and make the word women being the center of attention. I drew the letterforms so they would be easily readable yet ornate and added textures and shadows to make the letters pop."
"International Women's Day is one of these celebrations that I would love to be unnecessary in our times. But as long as one of our sisters is denied any opportunity or right just because she was born a woman, this day will be of utmost importance. It is very delightful to see so many women making it in lettering and art in general. My inspirations include many female artists like Lauren Hom, Gemma O'Brien, Martina Flor or Lisa Quine, only to name a few. Seeing more women thriving in this artform is very empowering."
When Magali is not drawing you can find her at home in front of the screen translating or writing, in the kitchen concocting vegetarian recipes with a glass of wine, or playing sports or getting lost in nature with her backpack and camera.
Read about the IWD Women Creatives mission


text:
package podautoscaler

import (
	"encoding/json"
	"fmt"
	"math"
	"time"

	"github.com/golang/glog"
	"k8s.io/apimachinery/pkg/api/resource"
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
	utilruntime "k8s.io/apimachinery/pkg/util/runtime"
	v1core "k8s.io/client-go/kubernetes/typed/core/v1"
	clientv1 "k8s.io/client-go/pkg/api/v1"
	"k8s.io/client-go/tools/cache"
	"k8s.io/client-go/tools/record"
	"k8s.io/kubernetes/pkg/api"
	"k8s.io/kubernetes/pkg/api/v1"
	autoscaling "k8s.io/kubernetes/pkg/apis/autoscaling/v1"
	extensionsv1beta1 "k8s.io/kubernetes/pkg/apis/extensions/v1beta1"
	unversionedautoscaling "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/typed/autoscaling/v1"
	unversionedextensions "k8s.io/kubernetes/pkg/client/clientset_generated/clientset/typed/extensions/v1beta1"
	autoscalinginformers "k8s.io/kubernetes/pkg/client/informers/informers_generated/autoscaling/v1"
	autoscalinglisters "k8s.io/kubernetes/pkg/client/listers/autoscaling/v1"
)

const (
	// Usage shoud exceed the tolerance before we start downscale or upscale the pods.
	// TODO: make it a flag or HPA spec element.
	tolerance = 0.1

	defaultTargetCPUUtilizationPercentage = 80

	HpaCustomMetricsTargetAnnotationName = "alpha/target.custom-metrics.podautoscaler.kubernetes.io"
	HpaCustomMetricsStatusAnnotationName = "alpha/status.custom-metrics.podautoscaler.kubernetes.io"

	scaleUpLimitFactor  = 2
	scaleUpLimitMinimum = 4
)

func calculateScaleUpLimit(currentReplicas int32) int32 {
	return int32(math.Max(scaleUpLimitFactor*float64(currentReplicas), scaleUpLimitMinimum))
}

type HorizontalController struct {
	scaleNamespacer unversionedextensions.ScalesGetter
	hpaNamespacer   unversionedautoscaling.HorizontalPodAutoscalersGetter

	replicaCalc   *ReplicaCalculator
	eventRecorder record.EventRecorder

	// hpaLister is able to list/get HPAs from the shared cache from the informer passed in to
	// NewHorizontalController.
	hpaLister       autoscalinglisters.HorizontalPodAutoscalerLister
	hpaListerSynced cache.InformerSynced
}

var downscaleForbiddenWindow = 5 * time.Minute
var upscaleForbiddenWindow = 3 * time.Minute

func NewHorizontalController(
	evtNamespacer v1core.EventsGetter,
	scaleNamespacer unversionedextensions.ScalesGetter,
	hpaNamespacer unversionedautoscaling.HorizontalPodAutoscalersGetter,
	replicaCalc *ReplicaCalculator,
	hpaInformer autoscalinginformers.HorizontalPodAutoscalerInformer,
	resyncPeriod time.Duration,
) *HorizontalController {
	broadcaster := record.NewBroadcaster()
	// TODO: remove the wrapper when every clients have moved to use the clientset.
	broadcaster.StartRecordingToSink(&v1core.EventSinkImpl{Interface: evtNamespacer.Events("")})
	recorder := broadcaster.NewRecorder(api.Scheme, clientv1.EventSource{Component: "horizontal-pod-autoscaler"})

	controller := &HorizontalController{
		replicaCalc:     replicaCalc,
		eventRecorder:   recorder,
		scaleNamespacer: scaleNamespacer,
		hpaNamespacer:   hpaNamespacer,
	}

	hpaInformer.Informer().AddEventHandlerWithResyncPeriod(
		cache.ResourceEventHandlerFuncs{
			AddFunc: func(obj interface{}) {
				hpa := obj.(*autoscaling.HorizontalPodAutoscaler)
				hasCPUPolicy := hpa.Spec.TargetCPUUtilizationPercentage != nil
				_, hasCustomMetricsPolicy := hpa.Annotations[HpaCustomMetricsTargetAnnotationName]
				if !hasCPUPolicy && !hasCustomMetricsPolicy {
					controller.eventRecorder.Event(hpa, v1.EventTypeNormal, "DefaultPolicy", "No scaling policy specified - will use default one. See documentation for details")
				}
				err := controller.reconcileAutoscaler(hpa)
				if err != nil {
					glog.Warningf("Failed to reconcile %s: %v", hpa.Name, err)
				}
			},
			UpdateFunc: func(old, cur interface{}) {
				hpa := cur.(*autoscaling.HorizontalPodAutoscaler)
				err := controller.reconcileAutoscaler(hpa)
				if err != nil {
					glog.Warningf("Failed to reconcile %s: %v", hpa.Name, err)
				}
			},
			// We are not interested in deletions.
		},
		resyncPeriod,
	)
	controller.hpaLister = hpaInformer.Lister()
	controller.hpaListerSynced = hpaInformer.Informer().HasSynced

	return controller
}

func (a *HorizontalController) Run(stopCh <-chan struct{}) {
	defer utilruntime.HandleCrash()

	glog.Infof("Starting HPA Controller")

	if !cache.WaitForCacheSync(stopCh, a.hpaListerSynced) {
		utilruntime.HandleError(fmt.Errorf("timed out waiting for caches to sync"))
		return
	}

	<-stopCh
	glog.Infof("Shutting down HPA Controller")
}

// getLastScaleTime returns the hpa's last scale time or the hpa's creation time if the last scale time is nil.
func getLastScaleTime(hpa *autoscaling.HorizontalPodAutoscaler) time.Time {
	lastScaleTime := hpa.Status.LastScaleTime
	if lastScaleTime == nil {
		lastScaleTime = &hpa.CreationTimestamp
	}
	return lastScaleTime.Time
}

func (a *HorizontalController) computeReplicasForCPUUtilization(hpa *autoscaling.HorizontalPodAutoscaler, scale *extensionsv1beta1.Scale) (int32, *int32, time.Time, error) {
	targetUtilization := int32(defaultTargetCPUUtilizationPercentage)
	if hpa.Spec.TargetCPUUtilizationPercentage != nil {
		targetUtilization = *hpa.Spec.TargetCPUUtilizationPercentage
	}
	currentReplicas := scale.Status.Replicas

	if scale.Status.Selector == nil {
		errMsg := "selector is required"
		a.eventRecorder.Event(hpa, v1.EventTypeWarning, "SelectorRequired", errMsg)
		return 0, nil, time.Time{}, fmt.Errorf(errMsg)
	}

	selector, err := metav1.LabelSelectorAsSelector(&metav1.LabelSelector{MatchLabels: scale.Status.Selector})
	if err != nil {
		errMsg := fmt.Sprintf("couldn't convert selector string to a corresponding selector object: %v", err)
		a.eventRecorder.Event(hpa, v1.EventTypeWarning, "InvalidSelector", errMsg)
		return 0, nil, time.Time{}, fmt.Errorf(errMsg)
	}

	desiredReplicas, utilization, timestamp, err := a.replicaCalc.GetResourceReplicas(currentReplicas, targetUtilization, v1.ResourceCPU, hpa.Namespace, selector)
	if err != nil {
		lastScaleTime := getLastScaleTime(hpa)
		if time.Now().After(lastScaleTime.Add(upscaleForbiddenWindow)) {
			a.eventRecorder.Event(hpa, v1.EventTypeWarning, "FailedGetMetrics", err.Error())
		} else {
			a.eventRecorder.Event(hpa, v1.EventTypeNormal, "MetricsNotAvailableYet", err.Error())
		}

		return 0, nil, time.Time{}, fmt.Errorf("failed to get CPU utilization: %v", err)
	}

	if desiredReplicas != currentReplicas {
		a.eventRecorder.Eventf(hpa, v1.EventTypeNormal, "DesiredReplicasComputed",
			"Computed the desired num of replicas: %d (avgCPUutil: %d, current replicas: %d)",
			desiredReplicas, utilization, scale.Status.Replicas)
	}

	return desiredReplicas, &utilization, timestamp, nil
}

// computeReplicasForCustomMetrics computes the desired number of replicas based on the CustomMetrics passed in cmAnnotation
// as json-serialized extensions.CustomMetricsTargetList.
// Returns number of replicas, metric which required highest number of replicas,
// status string (also json-serialized extensions.CustomMetricsCurrentStatusList),
// last timestamp of the metrics involved in computations or error, if occurred.
func (a *HorizontalController) computeReplicasForCustomMetrics(hpa *autoscaling.HorizontalPodAutoscaler, scale *extensionsv1beta1.Scale,
	cmAnnotation string) (replicas int32, metric string, status string, timestamp time.Time, err error) {

	if cmAnnotation == "" {
		return
	}

	currentReplicas := scale.Status.Replicas

	var targetList extensionsv1beta1.CustomMetricTargetList
	if err := json.Unmarshal([]byte(cmAnnotation), &targetList); err != nil {
		a.eventRecorder.Event(hpa, v1.EventTypeWarning, "FailedParseCustomMetricsAnnotation", err.Error())
		return 0, "", "", time.Time{}, fmt.Errorf("failed to parse custom metrics annotation: %v", err)
	}
	if len(targetList.Items) == 0 {
		a.eventRecorder.Event(hpa, v1.EventTypeWarning, "NoCustomMetricsInAnnotation", err.Error())
		return 0, "", "", time.Time{}, fmt.Errorf("no custom metrics in annotation")
	}

	statusList := extensionsv1beta1.CustomMetricCurrentStatusList{
		Items: make([]extensionsv1beta1.CustomMetricCurrentStatus, 0),
	}

	for _, customMetricTarget := range targetList.Items {
		if scale.Status.Selector == nil {
			errMsg := "selector is required"
			a.eventRecorder.Event(hpa, v1.EventTypeWarning, "SelectorRequired", errMsg)
			return 0, "", "", time.Time{}, fmt.Errorf("selector is required")
		}

		selector, err := metav1.LabelSelectorAsSelector(&metav1.LabelSelector{MatchLabels: scale.Status.Selector})
		if err != nil {
			errMsg := fmt.Sprintf("couldn't convert selector string to a corresponding selector object: %v", err)
			a.eventRecorder.Event(hpa, v1.EventTypeWarning, "InvalidSelector", errMsg)
			return 0, "", "", time.Time{}, fmt.Errorf("couldn't convert selector string to a corresponding selector object: %v", err)
		}
		floatTarget := float64(customMetricTarget.TargetValue.MilliValue()) / 1000.0
		replicaCountProposal, utilizationProposal, timestampProposal, err := a.replicaCalc.GetMetricReplicas(currentReplicas, floatTarget, fmt.Sprintf("custom/%s", customMetricTarget.Name), hpa.Namespace, selector)
		if err != nil {
			lastScaleTime := getLastScaleTime(hpa)
			if time.Now().After(lastScaleTime.Add(upscaleForbiddenWindow)) {
				a.eventRecorder.Event(hpa, v1.EventTypeWarning, "FailedGetCustomMetrics", err.Error())
			} else {
				a.eventRecorder.Event(hpa, v1.EventTypeNormal, "CustomMetricsNotAvailableYet", err.Error())
			}

			return 0, "", "", time.Time{}, fmt.Errorf("failed to get custom metric value: %v", err)
		}

		if replicaCountProposal > replicas {
			timestamp = timestampProposal
			replicas = replicaCountProposal
			metric = fmt.Sprintf("Custom metric %s", customMetricTarget.Name)
		}
		quantity, err := resource.ParseQuantity(fmt.Sprintf("%.3f", utilizationProposal))
		if err != nil {
			a.eventRecorder.Event(hpa, v1.EventTypeWarning, "FailedSetCustomMetrics", err.Error())
			return 0, "", "", time.Time{}, fmt.Errorf("failed to set custom metric value: %v", err)
		}
		statusList.Items = append(statusList.Items, extensionsv1beta1.CustomMetricCurrentStatus{
			Name:         customMetricTarget.Name,
			CurrentValue: quantity,
		})
	}
	byteStatusList, err := json.Marshal(statusList)
	if err != nil {
		a.eventRecorder.Event(hpa, v1.EventTypeWarning, "FailedSerializeCustomMetrics", err.Error())
		return 0, "", "", time.Time{}, fmt.Errorf("failed to serialize custom metric status: %v", err)
	}

	if replicas != currentReplicas {
		a.eventRecorder.Eventf(hpa, v1.EventTypeNormal, "DesiredReplicasComputedCustomMetric",
			"Computed the desired num of replicas: %d, metric: %s, current replicas: %d",
			func() *int32 { i := int32(replicas); return &i }(), metric, scale.Status.Replicas)
	}

	return replicas, metric, string(byteStatusList), timestamp, nil
}

func (a *HorizontalController) reconcileAutoscaler(hpa *autoscaling.HorizontalPodAutoscaler) error {
	reference := fmt.Sprintf("%s/%s/%s", hpa.Spec.ScaleTargetRef.Kind, hpa.Namespace, hpa.Spec.ScaleTargetRef.Name)

	scale, err := a.scaleNamespacer.Scales(hpa.Namespace).Get(hpa.Spec.ScaleTargetRef.Kind, hpa.Spec.ScaleTargetRef.Name)
	if err != nil {
		a.eventRecorder.Event(hpa, v1.EventTypeWarning, "FailedGetScale", err.Error())
		return fmt.Errorf("failed to query scale subresource for %s: %v", reference, err)
	}
	currentReplicas := scale.Status.Replicas

	cpuDesiredReplicas := int32(0)
	cpuCurrentUtilization := new(int32)
	cpuTimestamp := time.Time{}

	cmDesiredReplicas := int32(0)
	cmMetric := ""
	cmStatus := ""
	cmTimestamp := time.Time{}

	desiredReplicas := int32(0)
	rescaleReason := ""
	timestamp := time.Now()

	rescale := true

	if scale.Spec.Replicas == 0 {
		// Autoscaling is disabled for this resource
		desiredReplicas = 0
		rescale = false
	} else if currentReplicas > hpa.Spec.MaxReplicas {
		rescaleReason = "Current number of replicas above Spec.MaxReplicas"
		desiredReplicas = hpa.Spec.MaxReplicas
	} else if hpa.Spec.MinReplicas != nil && currentReplicas < *hpa.Spec.MinReplicas {
		rescaleReason = "Current number of replicas below Spec.MinReplicas"
		desiredReplicas = *hpa.Spec.MinReplicas
	} else if currentReplicas == 0 {
		rescaleReason = "Current number of replicas must be greater than 0"
		desiredReplicas = 1
	} else {
		// All basic scenarios covered, the state should be sane, lets use metrics.
		cmAnnotation, cmAnnotationFound := hpa.Annotations[HpaCustomMetricsTargetAnnotationName]

		if hpa.Spec.TargetCPUUtilizationPercentage != nil || !cmAnnotationFound {
			cpuDesiredReplicas, cpuCurrentUtilization, cpuTimestamp, err = a.computeReplicasForCPUUtilization(hpa, scale)
			if err != nil {
				a.updateCurrentReplicasInStatus(hpa, currentReplicas)
				return fmt.Errorf("failed to compute desired number of replicas based on CPU utilization for %s: %v", reference, err)
			}
		}

		if cmAnnotationFound {
			cmDesiredReplicas, cmMetric, cmStatus, cmTimestamp, err = a.computeReplicasForCustomMetrics(hpa, scale, cmAnnotation)
			if err != nil {
				a.updateCurrentReplicasInStatus(hpa, currentReplicas)
				return fmt.Errorf("failed to compute desired number of replicas based on Custom Metrics for %s: %v", reference, err)
			}
		}

		rescaleMetric := ""
		if cpuDesiredReplicas > desiredReplicas {
			desiredReplicas = cpuDesiredReplicas
			timestamp = cpuTimestamp
			rescaleMetric = "CPU utilization"
		}
		if cmDesiredReplicas > desiredReplicas {
			desiredReplicas = cmDesiredReplicas
			timestamp = cmTimestamp
			rescaleMetric = cmMetric
		}
		if desiredReplicas > currentReplicas {
			rescaleReason = fmt.Sprintf("%s above target", rescaleMetric)
		}
		if desiredReplicas < currentReplicas {
			rescaleReason = "All metrics below target"
		}

		if hpa.Spec.MinReplicas != nil && desiredReplicas < *hpa.Spec.MinReplicas {
			desiredReplicas = *hpa.Spec.MinReplicas
		}

		//  never scale down to 0, reserved for disabling autoscaling
		if desiredReplicas == 0 {
			desiredReplicas = 1
		}

		if desiredReplicas > hpa.Spec.MaxReplicas {
			desiredReplicas = hpa.Spec.MaxReplicas
		}

		// Do not upscale too much to prevent incorrect rapid increase of the number of master replicas caused by
		// bogus CPU usage report from heapster/kubelet (like in issue #32304).
		if desiredReplicas > calculateScaleUpLimit(currentReplicas) {
			desiredReplicas = calculateScaleUpLimit(currentReplicas)
		}

		rescale = shouldScale(hpa, currentReplicas, desiredReplicas, timestamp)
	}

	if rescale {
		scale.Spec.Replicas = desiredReplicas
		_, err = a.scaleNamespacer.Scales(hpa.Namespace).Update(hpa.Spec.ScaleTargetRef.Kind, scale)
		if err != nil {
			a.eventRecorder.Eventf(hpa, v1.EventTypeWarning, "FailedRescale", "New size: %d; reason: %s; error: %v", desiredReplicas, rescaleReason, err.Error())
			return fmt.Errorf("failed to rescale %s: %v", reference, err)
		}
		a.eventRecorder.Eventf(hpa, v1.EventTypeNormal, "SuccessfulRescale", "New size: %d; reason: %s", desiredReplicas, rescaleReason)
		glog.Infof("Successfull rescale of %s, old size: %d, new size: %d, reason: %s",
			hpa.Name, currentReplicas, desiredReplicas, rescaleReason)
	} else {
		desiredReplicas = currentReplicas
	}

	return a.updateStatus(hpa, currentReplicas, desiredReplicas, cpuCurrentUtilization, cmStatus, rescale)
}

func shouldScale(hpa *autoscaling.HorizontalPodAutoscaler, currentReplicas, desiredReplicas int32, timestamp time.Time) bool {
	if desiredReplicas == currentReplicas {
		return false
	}

	if hpa.Status.LastScaleTime == nil {
		return true
	}

	// Going down only if the usageRatio dropped significantly below the target
	// and there was no rescaling in the last downscaleForbiddenWindow.
	if desiredReplicas < currentReplicas && hpa.Status.LastScaleTime.Add(downscaleForbiddenWindow).Before(timestamp) {
		return true
	}

	// Going up only if the usage ratio increased significantly above the target
	// and there was no rescaling in the last upscaleForbiddenWindow.
	if desiredReplicas > currentReplicas && hpa.Status.LastScaleTime.Add(upscaleForbiddenWindow).Before(timestamp) {
		return true
	}
	return false
}

func (a *HorizontalController) updateCurrentReplicasInStatus(hpa *autoscaling.HorizontalPodAutoscaler, currentReplicas int32) {
	err := a.updateStatus(hpa, currentReplicas, hpa.Status.DesiredReplicas, hpa.Status.CurrentCPUUtilizationPercentage, hpa.Annotations[HpaCustomMetricsStatusAnnotationName], false)
	if err != nil {
		utilruntime.HandleError(err)
	}
}

func (a *HorizontalController) updateStatus(hpa *autoscaling.HorizontalPodAutoscaler, currentReplicas, desiredReplicas int32, cpuCurrentUtilization *int32, cmStatus string, rescale bool) error {
	// Make a copy so we don't mutate the object in the shared cache
	copy, err := api.Scheme.DeepCopy(hpa)
	if err != nil {
		return nil
	}
	hpa = copy.(*autoscaling.HorizontalPodAutoscaler)

	hpa.Status = autoscaling.HorizontalPodAutoscalerStatus{
		CurrentReplicas:                 currentReplicas,
		DesiredReplicas:                 desiredReplicas,
		CurrentCPUUtilizationPercentage: cpuCurrentUtilization,
		LastScaleTime:                   hpa.Status.LastScaleTime,
	}
	if cmStatus != "" {
		hpa.Annotations[HpaCustomMetricsStatusAnnotationName] = cmStatus
	}

	if rescale {
		now := metav1.NewTime(time.Now())
		hpa.Status.LastScaleTime = &now
	}

	_, err = a.hpaNamespacer.HorizontalPodAutoscalers(hpa.Namespace).UpdateStatus(hpa)
	if err != nil {
		a.eventRecorder.Event(hpa, v1.EventTypeWarning, "FailedUpdateStatus", err.Error())
		return fmt.Errorf("failed to update status for %s: %v", hpa.Name, err)
	}
	glog.V(2).Infof("Successfully updated status for %s", hpa.Name)
	return nil
}


KFarmhouse is a home for loot farmers that enjoy beating up on war clans. We war 3 times a week and strive to keep it lighthearted.
Active, adult players (main accounts preferred) that are a NON-RUSHED Town Hall 9 and above.
WARS: Your use of warmatch.us to call bases and log attacks is required. You have the ability to choose if you want to war or not. However, if you're OPTED IN for war you MUST use both attacks. If you do not you get 1 warning and after that it's an automatic boot.


A large arch dominates this site which sits directly out from the Beach House restaurant. Two fingers of lava run side by side with the arch connecting them together. A large school of Blue stripped grunts lives under the arch along with Turtles and Tang. Helmet conch cruise the sandy spots looking for the burrowing sea urchins that they love to eat. The top of the reef is around 65 feet so not a lot of shallow spots to hang on , but other then that a great site. Look on the west side of the fingers for a small cave filled with different bottom fish.


text:
You are here: Home - Mortgages - Remortgage - News -
Choose your mortgage lender carefully to double your buying power
Written by: Christina Hoghton
Picking a lender that will offer you a larger mortgage could make a huge difference to your buying power.
Choosing the right lender can make the difference between securing a detached house over a semi-detached property for home movers, according to MBT (Mortgage Broker Tools).
The business – which provides technology to mortgage advisers – found that the average maximum mortgage loan available to home movers was £318,571 in October.
But it said the average minimum available loan offered to home movers was £157,000 – a staggering difference of £161,571.
First-time buyers could borrow an average maximum loan available of £274,500 in October, while the average minimum available loan was £140,828, according to MBT's affordability index.
That's a difference of £133,672, which could be enough to upgrade from a flat to a semi-detached house. According to the Office for National Statistics, the average price of a flat or maisonette in the UK is £203,708, while the average cost of a semi-detached house is £230,455.
Tanya Toumadj, CEO at Mortgage Broker Tools, said: "There's a huge disparity in the amount that different lenders are prepared to lend based on the same set of customer circumstances, and this could prove to be the difference in a home buyer being able to afford a bigger property or more desirable location.
"We know from reports from estate agents that larger properties and those with more outside space are in greater demand as a result of the pandemic and shopping around to achieve the best affordability calculation could help customers to achieve this.
"There are considerations in taking on a larger loan size but being able to upgrade the property they buy now, may save customers from making multiple home moves in the future and could ultimately save them money in the long-term."
NatWest stops new lending to European customers without confirmed settlement status
'No surprise if stamp duty cut extended' amid third national lockdown
Buyers hunt 'no chain' properties to beat stamp duty holiday deadline
Record number of house hunters on estate agent books
Tagged: Buying A Home Buying A House buying a property Mortgage Application
By Christina Hoghton
Back to Remortgage
Generation Home launches with mission to help people buy together
The start-up mortgage lender received £500m-worth of initial mortgage enquiries from first-time buyers within days of its Insta launch.


text:
All that live must die Passing through nature to eternity.
-Hamlet 1.2
GreenCasket.net - You do not need to spend a lot of money to meaningfully honor the life of a loved one. At the Green Casket Company we offer a simple and natural casket and we work with other local businesses who support green burial and end of life choices.
Shine on Brightly - Decorative Cremation Urns and Memorial Objects
Funerals.org This is the page for the Funeral Consumers Alliance. Lots of great information for those considering planning their funerals. Better information on financial issues than on green issues, but worth the surf over.
Crossings.net - Crossings works to integrate dying and after-death care back into our family and community life. We work to remove the barriers that keep you locked into few alternatives after the death of a loved one. We create opportunities for families to complement the loss and grief of death with healing and love.
Final Passages This is an organization dedicated to bringing back the home funeral-not unlike the hospice movement in the 1970's that brought dying back home.
Jewish-Funerals.org This page promotes traditional Jewish Funerals. It is interesting that traditional, community-run (and very green) funerals never went out of style -as the pages devoted to Chevra Kadisha groups demonstrates:
"Throughout the United States and Canada , in rural and urban areas, large synagogues and small, are heeding the call to full participation in Jewish funeral practices and return of control to the community. A modern Chevrah Kadisha may provide pre-need education and negotiate funeral and burial agreements. In some larger congregations, 50-75 people may participate as chaverim who work directly with the bereaved and mediate between them and the funeral and burial providers, or perform the washing (tahara) ritual, or guard the body until it is buried (shmira), or provide a meal of condolence, or set up and lead shiva, or stay in touch with the bereaved for some period after death."
UpstateForever.org - Upstate Forever promotes sensible growth and the protection of special places in the Upstate region of South Carolina. The membership-based, nonprofit organization covers nine counties (Anderson, Cherokee, Greenville, Greenwood, Laurens, Oconee, Pickens, Spartanburg, and Union), and we have three main programs: Land Trust, Sustainable Communities, and Clean Air and Water.
GreenBurialCouncil.org - The GBC was founded by Joe Sehee and works to promulgate standards for conservation burial that are based largely on the Campbell Principles. The Council is doing work absolutely essential for ensuring that natural burial becomes a potent land protecting tool.
http://www.globalideasbank.org/ndw/ndwcontent.html The idea for Memorial Ecosystems date to before the late Nicholas Aubrey created the Natural Death Care Centre (link to the old newsletter article from Katuah-I will forward that in a separate letter). The group initially was less green than focused on simplicity and home funerals. That is changing now. England now boasts over 180 woodland burial sites, though most are small (less than 5 acres), and of questionable conservation value.
Glendale Natural Preserve This is another sister preserve in the Florida Panhandle. A beautiful site with long leaf pine and wetlands.
South Carolina Native Plant Society - The South Carolina Native Plant Society is a non-profit organization committed to the preservation and protection of native plant communities in South Carolina.
CarolinaWild.com - Carolina Wild strives to be the premier source for nursery propagated native plants in the upstate region of South Carolina. We are a family-operated business with 30+ combined years of experience in the greenhouse and nursery industry, with more than 6 years' experience working with native plant materials. We serve southwestern North Carolina and northeastern Georgia in addition to the upstate area.
Home | About Us | Conservation Burial | News | Other Links | F.A.Q.s | Consulting Services | Contact Us