text:
"""
This module provides a class to sample data along an elliptical path.
"""

import copy

import numpy as np

from photutils.isophote.geometry import EllipseGeometry
from photutils.isophote.integrator import INTEGRATORS

__all__ = ['EllipseSample']

class EllipseSample:
    """
    Class to sample image data along an elliptical path.

    The image intensities along the elliptical path can be extracted
    using a selection of integration algorithms.

    The ``geometry`` attribute describes the geometry of the elliptical
    path.

    Parameters
    ----------
    image : 2D `~numpy.ndarray`
        The input image.
    sma : float
        The semimajor axis length in pixels.
    x0, y0 : float, optional
        The (x, y) coordinate of the ellipse center.
    astep : float, optional
        The step value for growing/shrinking the semimajor axis. It can
        be expressed either in pixels (when ``linear_growth=True``) or
        as a relative value (when ``linear_growth=False``).  The default
        is 0.1.
    eps : float, optional
        The ellipticity of the ellipse.  The default is 0.2.
    pa : float, optional
        The position angle of ellipse in relation to the positive x axis
        of the image array (rotating towards the positive y axis).  The
        default is 0.
    sclip : float, optional
        The sigma-clip sigma value.  The default is 3.0.
    nclip : int, optional
        The number of sigma-clip iterations. Set to zero to skip
        sigma-clipping. The default is 0.
    linear_growth : bool, optional
        The semimajor axis growing/shrinking mode.  The default is
        `False`.
    integrmode : {'bilinear', 'nearest_neighbor', 'mean', 'median'}, optional
        The area integration mode.  The default is 'bilinear'.
    geometry : `~photutils.isophote.EllipseGeometry` instance or `None`
        The geometry that describes the ellipse. This can be used in
        lieu of the explicit specification of parameters ``sma``,
        ``x0``, ``y0``, ``eps``, etc.  In any case, the
        `~photutils.isophote.EllipseGeometry` instance becomes an
        attribute of the `~photutils.isophote.EllipseSample` object.
        The default is `None`.

    Attributes
    ----------
    values : 2D `~numpy.ndarray`
        The sampled values as a 2D array, where the rows contain the
        angles, radii, and extracted intensity values, respectively.
    mean : float
        The mean intensity along the elliptical path.
    geometry : `~photutils.isophote.EllipseGeometry` instance
        The geometry of the elliptical path.
    gradient : float
        The local radial intensity gradient.
    gradient_error : float
        The error associated with the local radial intensity gradient.
    gradient_relative_error : float
        The relative error associated with the local radial intensity
        gradient.
    sector_area : float
        The average area of the sectors along the elliptical path from
        which the sample values were integrated.
    total_points : int
        The total number of sample values that would cover the entire
        elliptical path.
    actual_points : int
        The actual number of sample values that were taken from the
        image. It can be smaller than ``total_points`` when the ellipse
        encompasses regions outside the image, or when sigma-clipping
        removed some of the points.
    """

    def __init__(self, image, sma, x0=None, y0=None, astep=0.1, eps=0.2,
                 position_angle=0., sclip=3., nclip=0, linear_growth=False,
                 integrmode='bilinear', geometry=None):
        self.image = image
        self.integrmode = integrmode

        if geometry:
            # when the geometry is inherited from somewhere else,
            # its sma attribute must be replaced by the value
            # explicitly passed to the constructor.
            self.geometry = copy.deepcopy(geometry)
            self.geometry.sma = sma
        else:
            # if no center was specified, assume it's roughly
            # coincident with the image center
            _x0 = x0
            _y0 = y0
            if not _x0 or not _y0:
                _x0 = image.shape[1] / 2
                _y0 = image.shape[0] / 2

            self.geometry = EllipseGeometry(_x0, _y0, sma, eps,
                                            position_angle, astep,
                                            linear_growth)

        # sigma-clip parameters
        self.sclip = sclip
        self.nclip = nclip

        # extracted values associated with this sample.
        self.values = None
        self.mean = None
        self.gradient = None
        self.gradient_error = None
        self.gradient_relative_error = None
        self.sector_area = None

        # total_points reports the total number of pairs angle-radius that
        # were attempted. actual_points reports the actual number of sampled
        # pairs angle-radius that resulted in valid values.
        self.total_points = 0
        self.actual_points = 0

    def extract(self):
        """
        Extract sample data by scanning an elliptical path over the
        image array.

        Returns
        -------
        result : 2D `~numpy.ndarray`
            The rows of the array contain the angles, radii, and
            extracted intensity values, respectively.
        """
        # the sample values themselves are kept cached to prevent
        # multiple calls to the integrator code.
        if self.values is not None:
            return self.values
        else:
            s = self._extract()
            self.values = s
            return s

    def _extract(self, phi_min=0.05):
        # Here the actual sampling takes place. This is called only once
        # during the life of an EllipseSample instance, because it's an
        # expensive calculation. This method should not be called from
        # external code.
        # If one wants to force it to re-run, then do:
        #
        #   sample.values = None
        #
        # before calling sample.extract()

        # individual extracted sample points will be stored in here
        angles = []
        radii = []
        intensities = []
        sector_areas = []

        # reset counters
        self.total_points = 0
        self.actual_points = 0

        # build integrator
        integrator = INTEGRATORS[self.integrmode](self.image, self.geometry,
                                                  angles, radii, intensities)

        # initialize walk along elliptical path
        radius = self.geometry.initial_polar_radius
        phi = self.geometry.initial_polar_angle

        # In case of an area integrator, ask the integrator to deliver a
        # hint of how much area the sectors will have. In case of too
        # small areas, tests showed that the area integrators (mean,
        # median) won't perform properly. In that case, we override the
        # caller's selection and use the bilinear integrator regardless.
        if integrator.is_area():
            integrator.integrate(radius, phi)
            area = integrator.get_sector_area()
            # this integration that just took place messes up with the
            # storage arrays and the constructors. We have to build a new
            # integrator instance from scratch, even if it is the same
            # kind as originally selected by the caller.
            angles = []
            radii = []
            intensities = []
            if area < 1.0:
                integrator = INTEGRATORS['bilinear'](
                    self.image, self.geometry, angles, radii, intensities)
            else:
                integrator = INTEGRATORS[self.integrmode](self.image,
                                                          self.geometry,
                                                          angles, radii,
                                                          intensities)

        # walk along elliptical path, integrating at specified
        # places defined by polar vector. Need to go a bit beyond
        # full circle to ensure full coverage.
        while phi <= np.pi * 2. + phi_min:
            # do the integration at phi-radius position, and append
            # results to the angles, radii, and intensities lists.
            integrator.integrate(radius, phi)

            # store sector area locally
            sector_areas.append(integrator.get_sector_area())

            # update total number of points
            self.total_points += 1

            # update angle and radius to be used to define
            # next polar vector along the elliptical path
            phistep_ = integrator.get_polar_angle_step()
            phi += min(phistep_, 0.5)
            radius = self.geometry.radius(phi)

        # average sector area is calculated after the integrator had
        # the opportunity to step over the entire elliptical path.
        self.sector_area = np.mean(np.array(sector_areas))

        # apply sigma-clipping.
        angles, radii, intensities = self._sigma_clip(angles, radii,
                                                      intensities)

        # actual number of sampled points, after sigma-clip removed outliers.
        self.actual_points = len(angles)

        # pack results in 2-d array
        result = np.array([np.array(angles), np.array(radii),
                           np.array(intensities)])

        return result

    def _sigma_clip(self, angles, radii, intensities):
        if self.nclip > 0:
            for _ in range(self.nclip):
                # do not use list.copy()! must be python2-compliant.
                angles, radii, intensities = self._iter_sigma_clip(
                    angles[:], radii[:], intensities[:])

        return np.array(angles), np.array(radii), np.array(intensities)

    def _iter_sigma_clip(self, angles, radii, intensities):
        # Can't use scipy or astropy tools because they use masked arrays.
        # Also, they operate on a single array, and we need to operate on
        # three arrays simultaneously. We need something that physically
        # removes the clipped points from the arrays, since that is what
        # the remaining of the `ellipse` code expects.
        r_angles = []
        r_radii = []
        r_intensities = []

        values = np.array(intensities)
        mean = np.mean(values)
        sig = np.std(values)
        lower = mean - self.sclip * sig
        upper = mean + self.sclip * sig

        count = 0
        for k in range(len(intensities)):
            if intensities[k] >= lower and intensities[k] < upper:
                r_angles.append(angles[k])
                r_radii.append(radii[k])
                r_intensities.append(intensities[k])
                count += 1

        return r_angles, r_radii, r_intensities

    def update(self, fixed_parameters=None):
        """
        Update this `~photutils.isophote.EllipseSample` instance.

        This method calls the
        :meth:`~photutils.isophote.EllipseSample.extract` method to get
        the values that match the current ``geometry`` attribute, and
        then computes the the mean intensity, local gradient, and other
        associated quantities.
        """
        if fixed_parameters is None:
            fixed_parameters = np.array([False, False, False, False])
        self.geometry.fix = fixed_parameters

        step = self.geometry.astep

        # Update the mean value first, using extraction from main sample.
        s = self.extract()
        self.mean = np.mean(s[2])

        # Get sample with same geometry but at a different distance from
        # center. Estimate gradient from there.
        gradient, gradient_error = self._get_gradient(step)

        # Check for meaningful gradient. If no meaningful gradient, try
        # another sample, this time using larger radius. Meaningful
        # gradient means something  shallower, but still close to within
        # a factor 3 from previous gradient estimate. If no previous
        # estimate is available, guess it by adding the error to the
        # current gradient.
        previous_gradient = self.gradient
        if not previous_gradient:
            previous_gradient = gradient + gradient_error

            # solution adopted before 08/12/2019
            # previous_gradient = -0.05  # good enough, based on usage

        if gradient >= (previous_gradient / 3.):  # gradient is negative!
            gradient, gradient_error = self._get_gradient(2 * step)

        # If still no meaningful gradient can be measured, try with
        # previous one, slightly shallower. A factor 0.8 is not too far
        # from what is expected from geometrical sampling steps of 10-20%
        # and a deVaucouleurs law or an exponential disk (at least at its
        # inner parts, r <~ 5 req). Gradient error is meaningless in this
        # case.
        if gradient >= (previous_gradient / 3.):
            gradient = previous_gradient * 0.8
            gradient_error = None

        self.gradient = gradient
        self.gradient_error = gradient_error
        if gradient_error and gradient < 0.:
            self.gradient_relative_error = gradient_error / np.abs(gradient)
        else:
            self.gradient_relative_error = None

    def _get_gradient(self, step):
        gradient_sma = (1. + step) * self.geometry.sma

        gradient_sample = EllipseSample(
            self.image, gradient_sma, x0=self.geometry.x0,
            y0=self.geometry.y0, astep=self.geometry.astep, sclip=self.sclip,
            nclip=self.nclip, eps=self.geometry.eps,
            position_angle=self.geometry.pa,
            linear_growth=self.geometry.linear_growth,
            integrmode=self.integrmode)

        sg = gradient_sample.extract()
        mean_g = np.mean(sg[2])
        gradient = (mean_g - self.mean) / self.geometry.sma / step

        s = self.extract()
        sigma = np.std(s[2])
        sigma_g = np.std(sg[2])

        gradient_error = (np.sqrt(sigma**2 / len(s[2])
                                  + sigma_g**2 / len(sg[2]))
                          / self.geometry.sma / step)

        return gradient, gradient_error

    def coordinates(self):
        """
        Return the (x, y) coordinates associated with each sampled
        point.

        Returns
        -------
        x, y : 1D `~numpy.ndarray`
            The x and y coordinate arrays.
        """
        angles = self.values[0]
        radii = self.values[1]
        x = np.zeros(len(angles))
        y = np.zeros(len(angles))

        for i in range(len(x)):
            x[i] = (radii[i] * np.cos(angles[i] + self.geometry.pa)
                    + self.geometry.x0)

            y[i] = (radii[i] * np.sin(angles[i] + self.geometry.pa)
                    + self.geometry.y0)

        return x, y

class CentralEllipseSample(EllipseSample):
    """
    An `~photutils.isophote.EllipseSample` subclass designed to handle
    the special case of the central pixel in the galaxy image.
    """

    def update(self, fixed_parameters):
        """
        Update this `~photutils.isophote.EllipseSample` instance with
        the intensity integrated at the (x0, y0) center position using
        bilinear integration. The local gradient is set to `None`.

        'fixed_parameters' is ignored in this subclass.
        """
        s = self.extract()
        self.mean = s[2][0]

        self.gradient = None
        self.gradient_error = None
        self.gradient_relative_error = None

    def _extract(self):
        angles = []
        radii = []
        intensities = []

        integrator = INTEGRATORS['bilinear'](self.image, self.geometry,
                                             angles, radii, intensities)
        integrator.integrate(0.0, 0.0)

        self.total_points = 1
        self.actual_points = 1

        return np.array([np.array(angles), np.array(radii),
                         np.array(intensities)])


During this workshop you will practice online trading via a demo account by reacting to real market events from our economic calendar and responding to requests coming from other participants.
To get a R250 deposit into a new account, please click here.
Trading CFDs carries considerable risk of capital loss.


The Care Quality Commission upgraded our Trust rating for the quality of mental health and learning disability care we provide from Requires Improvement to Good in October 2017 following an inspection in July 2017 which focused on the Well Led elements of the CQC's five inspection areas.
During this re-inspection the CQC found that from ward to Board there was a good understanding of the challenges facing the Trust, that involvement groups were embedded in our governance arrangements, and that we have a systematic programme of clinical and internal audit which monitors quality and systems to identify where action should be taken.
Fiona Edwards, Chief Executive, said: "Together our senior leaders, managers, and all of our staff have worked hard to embed the lessons we learn from incidents and improve the quality of care we provide.
"This positive feedback from our inspectors about our good practice – such as our projects to improve people's experiences by reducing the use of restraint, and to improve the physical health of people with mental ill health and learning disabilities by supporting better mouth care – is encouraging."


text:
Michael Bennet: The senator joins the race
Editorials Letters to the Editor Editorial Cartoons Opinion Columns
The Colorado senator, with a clean bill of health, makes his presidential bid
Monday, May 13, 2019 5:33 PM
Colorado senators Cory Gardner and Michael Bennet once seemed apt facets of purple politics. Bennet, 54, is a moderate Democrat, a distinction that matters in his party when Sen. Bernie Sanders, the socialist from Vermont, is a strong contender for the 2020 presidential nomination.
Where Sanders and other progressive Democrats want to talk about making higher eduction tuition-free, moving radically to end the use of fossil fuels and socializing health care, Bennet's top issues include education, climate change and immigration – but he champions more incremental improvements. He supported the Keystone XL oil pipeline, for example, and he thinks the Affordable Care Act needs a chance to work.
Bennet also was one of the bipartisan group of senators who crafted an immigration reform bill in 2013 that was rejected by House Republicans who were afraid to give President Barack Obama a victory. Had it passed, President Donald Trump might never have had immigration as an issue to beat like a rented mule in 2016, and there is a good chance immigration would not be a crisis now. Recently, Bennet announced he too is running for president.
Gardner, 44, could have been described as a moderate Republican at one time. He and Bennet have worked together to craft legislation on conservation, immigration and veterans affairs. But there does not seem to be a place for a moderate in his party in the era of Trump. For voters in 2020, when Gardner is up for re-election, what may stand out is that he endorsed Trump's re-election in February of this year.
Bennet is a protégé of former Gov. John Hickenlooper, who is also running for the 2020 Democratic presidential nomination. When Hickenlooper was mayor of Denver, Bennet was his chief of staff and then superintendent of Denver public schools. He is also the older brother of the editorial page editor of The New York Times, James Bennet, which led that paper to announce that James henceforth will recuse himself from any work related to the 2020 presidential election. Now that is brotherly love.
Another Hickenlooper protégé, Dan Baer, announced several weeks ago that he will join the Democratic primary race to take on Gardner. Baer, 42, was the U.S. ambassador for the Organization for Security and Co-operation in Europe under Obama. After Trump's ascension, Hickenlooper made him executive director of Colorado's Department of Higher Education. Baer stopped in the for with us the other week. He was getting a look at Southwest Colorado, which we recommend for all statewide office-seekers. We have said before that we admire Hickenlooper's executive style. We also admire the way he gives a leg up to promising politicians. Baer is impressive.
Colorado's Democratic primaries will not take place until March of 2020, however, almost a year away, which gives Baer and others gunning for Gardner plenty of time to stake out ground on issues Coloradans care about. We look forward to that digestible unfolding.
The first debate in the Democratic presidential primary will be at the end of June, less than two months away. Sixteen candidates have qualified for it by getting 1 percent or more in three polls or by having at least 65,000 unique donors.
Bennet will need to be aggressive to make that first hurdle, which has not always been his style. He is thoughtful, a quality we find lacking in many other politicians, but it may be lacking for good electoral reasons in our ever-expanding political cycles.
Bennet seems ready. "When campaigning never stops, governing never begins," he said in his launch video.
"You probably don't know me because I don't go on cable news every night," he explained. "I didn't go to Washington to get attention, I went to pay attention, to what would help the people who sent me there make their lives better."
It is a fine beginning.
The past alive
Democratic candidates talk – and talk – about climate change
Send in the clown: When Germany gobbled Austria, there was more than one villain

redpajama_set_name: RedPajamaCommonCrawl


Saved By Grace - Duration: 1 hour, 17 minutes.
The Lord and His Vineyard - Duration: 57 minutes.
Speaking With Grace - Duration: 1 hour, 2 minutes.
Speaking With Grace - Duration: 56 minutes.
Trees of Righteousness - Duration: 1 hour, 19 minutes.
Grace To You, Grace Though You - Duration: 24 minutes.
Grace To You, Grace Though You - Duration: 1 hour, 12 minutes.
Grace To You, Grace Though You - Duration: 1 hour, 9 minutes.
The Garden God Planted - Duration: 1 hour, 11 minutes.
Amos: The False Peace of Israel - Duration: 34 minutes.
Amos: The False Peace of Israel - Duration: 68 seconds.
The Man Who Lost Control - Duration: 1 hour, 6 minutes.


text:
Q: PyOpenGL. glVertexPointer loads RAM to infinity All works, but RAM loads very fast, i think  its glVertexPointer in cycle.
Here is my simplified code
...
pygame.init()
display = (800, 600)
screen = pygame.display.set_mode(display, DOUBLEBUF|OPENGL)
glClearColor(4/255, 4/255, 22/255, 1)
glEnableClientState(GL_VERTEX_ARRAY)
VBO = glGenBuffers(1)
...

while True:
    ....

    vertices = vertices @ A           # A = np.array((3, 3)), vertices = np.array((N, 3)), N~2000
    vertices1 = np.ravel(vertices)
    glBindBuffer(GL_ARRAY_BUFFER, VBO)
    glVertexPointer(3, GL_FLOAT, 0, vertices1)
    # glBufferSubData(GL_ARRAY_BUFFER, 0, vertices1.nbytes, vertices1)
    glDrawArrays(GL_LINES, 0, l_v)
...

if comment this, RAM not loads:
# glVertexPointer(3, GL_FLOAT, 0, vertices1)

i'm new one in OpenGL, and don't know right ways to do what i want. I want to manipulate with vertices dynamically in time. And it so happened that my computer is old, and installed OpenGL 2.0. Help me please

A: this is solved my problem with RAM
import array
vertices1 = array.array('f', vertices1)
glVertexPointer(3, GL_FLOAT, 0, vertices1.tobytes() )

but converting lowered fps from 100 to 30, i use two converting for a cycle
upd.
this works ideal
vertices1 = np.ravel(vertices)
vertices1 = np.array(vertices1, dtype='f')
glVertexPointer(3, GL_FLOAT, 0, vertices1.tobytes() )

redpajama_set_name: RedPajamaStackExchange


Countdown to the Oscars: Oscar Trivia!
February 21, 2014 Stacey Harrison Awards Shows, Movies, TV News & Program Updates Comments Off on Countdown to the Oscars: Oscar Trivia!
Countdown to the Oscars: Oscar Trivia! The Academy Awards have been around for 86 years, plenty of time to develop all sorts of weird facts and historical precedents. Take our PopQuiz to see how your knowledge stacks up. Check back each day through March 2 for a new Oscar question and answer. And remember, NO CHEATING!!!
Oscars 2014 date, time, TV channel, preview and more!
Check back each day through Oscar Sunday, March 2, as a new question and answer are revealed.
1. Sequels rarely get much recognition when it comes to the Oscars, but there was one Part 3 that not only won the biggest prize, it went an incredible 11-for-11 in its nominations. Name the film.
2. Citizen Kane is widely regarded as the best film ever made, but it did not win Best Picture in 1942. Which film beat it out?
3. True or False: Richard Burton never won an Academy Award.
5. Name two actors who were awarded their Academy Awards posthumously.
6. What was the first color film to win Best Picture?
7. Al Pacino finally won an Academy Award in 1993 for his role in Scent of a Woman, but he was actually up for two Oscars that year. Name the other film that earned him a nomination.
8. It has happened twice in Academy Awards history that two people were nominated for playing the same role in the same film. One actress has been involved in both instances. Name her.
9. Who holds the record for most nominations for Best Director?
10. Which Best Picture winner only received one nomination?
1-4 — Cut his mic!


text:
Teleport Access Platform protocols
SSHSSH securely into Linux servers and smart devices with a complete audit trail
KubernetesAccess Kubernetes clusters securely with complete visibility to access and behavior
DatabasesFor SQL and NoSQL databases across multi-environments
ApplicationsAccess web applications running behind NAT and firewalls with security and compliance
WindowsSecurely access Windows servers and desktops in multiple environments.
Teleport FeaturesAn overview of Teleport Access Plane features, capabilities and more...
Teleport Solutions
Financial ServicesLearn how Financial Services companies use Teleport
Software-as-a-service (SaaS) ProvidersLearn how SaaS providers use Teleport
E-commerce & EntertainmentLearn how E-commerce & Entertainment companies use Teleport
Infrastructure Access for AWSEasily control who can provision and access your critical AWS resources
Privileged Access ManagementSecure your critical infrastructure without slowing developers down
Machine-to-Machine AccessMachine ID delivers automated, identity-based access for your services
Developer-friendly browserTeleport Connect improves UX and identity-based access for the cloud
Passwordless Infrastructure AccessInstantly login to all your computing infrastructure using Passwordless
Teleport Documentation
DocumentationInstallation and Teleport user guides
Teleport ClientsLearn how to connect to Teleport-protected services
How It WorksLearn the fundamentals of how Teleport works
Teleport LabsGet hands on experience with Teleport
Teleport CommunityAsk us a setup question, post your tutorial, feedback or idea on our forum
Teleport Slack ChannelNeed help with set-up? Ping us in Slack channel
GitHubView the open source repository on GitHub
Learn More About Teleport
The BlogTechnical articles, news, and product announcements
Our CustomersLearn how companies use Teleport to secure their environments
ResourcesA collection of whitepapers, webinars, demos, and more...
LearnTutorials, how-tos and a glossary for all things infrastructure access
EventsView our upcoming events
About UsOur missions and vision for the future
CareersView our available career opportunities
NewsFeatured publication from around the web
Sign in to Teleport
Teleport Cloud LoginLogin to your Teleport Account
Dashboard LoginLegacy Login & Teleport Enterprise Downloads
Platform for HyperGrowth - Overview
Key topics on creating a Platform for HyperGrowth
For this 16th episode of Access Control Podcast, a podcast providing practical security advice for startups, Developer Relations Engineer at Teleport Ben Arent chats with Lukáš Hrachovina. Lukas is an Engineering Manager for the Cloud Engineering team at Productboard. ProductBoard was founded in 2014, and is a product management system that helps organizations get the right products to market faster. Lukas has been at the company 2 years and has helped keep systems stable as ProductBoard has entered into hypergrowth. This episode dives into how to plan, build and execute a platform team to help support a growing organization while keeping systems as secure as possible.
Key topics on Access Control Podcast: Episode 16 - Platform for HyperGrowth
Productboard is a product management system that lets organizations get the right products to market faster.
Productboard is transitioning to Backstage, a tool from Spotify, to build a developer portal, and has moved its documentation there as well.
To securely offboard engineers, Productboard uses a variety of tools including Okta and Vault.
Productboard chose Teleport to improve their security as the number of engineers grew and since the company works with customer data, so it's critical to protect that data and prevent any possible leaks.
Expanding your knowledge on Access Control Podcast: Episode 16 - Platform for HyperGrowth
Teleport Kubernetes Access
Kubernetes API Access Hardening
Spotify Backstage
Ben: 00:00:00.266 Welcome to Access Control, a podcast providing practical security advice for start-ups. Advice from people who've been there. Each episode, we'll interview a leader in their field and learn best practices and practical tips for securing your org. Lukas is an engineering manager for the cloud engineering team at Productboard. Productboard was founded in 2014 and is a product management system that lets organizations get the right products to market faster. Lukas has been at the company two years and helps to keep systems stable as Productboard has entered hyper-growth. Today we'll dive in how to plan, build, and execute a platform team to help support a growing organization while keeping your systems as secure as possible. Lukas, thanks for joining today.
Lukas: 00:00:42.002 Happy to be here.
Introducing Productboard
Ben: 00:00:43.049 So to start, can you tell me a little bit about what Productboard is?
Lukas: 00:00:46.339 As you said, Productboard is a tool. It's a product management platform. It helps get the right product to market faster by understanding what your customers need and prioritizing off of that, basically. And you can also align everyone within your organization around a road map, basically, built off those features that are requested by your customers. So basically, it provides you with one sort of tool where you can aggregate feedback from all the different sort of sources, prioritize what's important, and create a road map, basically, off of those priorities. That's pretty much it.
Ben: 00:01:32.032 And is it targeted for start-ups or enterprises or mid-sized companies?
Lukas: 00:01:36.025 All of the above, really. Basically, we have sort of different plans, some targeted at start-ups, all the way up to, basically, enterprise-level customers.
Ben: 00:01:46.043 And it's offered as software as a service?
Lukas: 00:01:48.527 Yes, it's software as a service. Yes, that's correct.
Ben: 00:01:52.236 And so I think today we dive into sort of your platform team. You're obviously in charge of running that software as a service platform for Productboard.
Lukas: 00:02:00.885 I'm part of the cloud engineering team, which is, in turn, part of a platform tribe. So a tribe sort of is an overreaching, I guess organizational unit, where all the misfits go to. Basically, all the misfit teams that don't directly impact the product. They don't work directly on the product but we sort of — our customers are engineers, so to speak.
Ben: 00:02:33.254 Yeah. Your internal teams.
Lukas: 00:02:34.910 Yes, that's right.
The history of engineering at Productboard
Ben: 00:02:35.945 The company's been around for about eight years. Can you tell me a little bit about the history of the engineering before and during your time there?
Lukas: 00:02:43.233 So I can't speak too much on the before but basically, from what I've been told, the company group grew at a slow and steady pace from 2014, all the way until 2016, '17, where the growth really started to kick off. So basically, I joined in a very, very good time, halfway through 2020. So I've been with Productboard for two years. That was after our series B, where we basically started the hyper-growth phase or entered the hyper-growth phase. Just started shortly before that, then COVID came, and everybody sort of froze in their tracks and then it sort of kicked up again. To give it some context, I think my employee number is 220-something. So at the time I joined, there were like 150 people in the company. At this point, there is more than 500 of us, basically, our engineering group, in proportion to the rest of the company.
Ben: 00:03:44.675 I'm guessing too, Productboard really probably helps with people who have gone from work from home during COVID, to sort of organize and help keep companies and organizations sort of on a clear trajectory regarding their road map.
Lukas: 00:03:56.396 Yes, actually. As you rightly pointed out, COVID and working from home didn't really have a bad impact on our business. Maybe slightly the other way. Not obviously the likes of Zoom and others, but it didn't impact our business too harshly.
Ben: 00:04:13.531 So as part of scale, it's mostly around just keeping up time and availability, is sort of one of the most important parts of your company.
Lukas: 00:04:21.211 Yes. Also, with our engineering group, our engineering organization, we're basically maintaining our own CI. We run our own CI on-premise, so to speak, and in the cloud obviously. But we run it ourselves. This also becomes a problem at scale at some point when your repositories get really big, your automated test suites start using more and more resources, basically. And so and so forth. So the scale problem is manyfold.
Ben: 00:04:59.086 It's kind of keeping people's developer velocity going. I guess as you have more engineers join, more tests, more PRs, there's more tests running so you need to keep everything churning along quickly.
Lukas: 00:05:08.481 That's correct. Yes. Also, one other fairly recent changes to our organization was basically — I think it was around a year ago when we decided that we want to create an engineering presence in North America. Up to that point, Productboard had engineers in Europe, predominantly, but we already had an office in Vancouver, mostly people from customer success and sales, and we decided that it'd be a good idea to basically have some engineering presence in Vancouver as well. This obviously created a whole lot of different problems because suddenly, there is a nine-hour time difference between the Czech Republic where most of our engineers are and the Pacific Coast. Also, you have to invest into knowledge sharing, which is something I think we'll get to later down the line. But yeah, that was one of the scaling problems as well.
Ben: 00:06:04.476 And are you in Canada or are you in the Czech Republic?
Lukas: 00:06:07.274 Funnily enough, I'm Czech. I was born in Prague but I've been in Canada for the past couple of months.
Ben: 00:06:13.352 Okay. So you got to see a bit of both offices, I guess, and different cultures.
Lukas: 00:06:16.349 Yes, that's correct. Yes.
Migrating from a self-managed kOps installation to EKS
Ben: 00:06:17.929 Back in March, I think, on your engineering blog, you mentioned that the infrastructure was responsible for migrating of managed Kubernetes installation to EKS as sort of part of your, I guess, developer velocity. Can you tell me a few reasons why you made this migration?
Lukas: 00:06:32.073 Well, if you go and read the blog, there is this little section titled The Outage, which is exactly what you'd think it is. Maybe a little bit of a backstory. Originally, it was long before my time, Productboard ran off of Heroku, a platform as a service, and at some point, it was no longer fitting our needs very well, so it was decided that we would migrate to Kubernetes. And back in the day, I think EKS was still — it was in its infancy, I guess. It was recently released to the public. It was decided that we would go with Kops. Kops is a self-managed solution for running Kubernetes. It ran fairly smoothly for a long time, but along the way, we sort of lost some of our colleagues who were part of the original team that set up our Kops deployment. At some point, we were left with basically, your platform that you don't really want to touch because you don't really know exactly know how it works. As such, we were already planning to migrate to EKS in the future because it seemed a logical choice because all of the problems that we've had with EKS were no longer there. It was running a new version of Kubernetes. It was more stable, and so and so forth. We experienced this outage in September 2021. We had a downtime of approximately five hours across the whole production, and I think that was the last straw that broke the camel's back, I guess, and we decided to fast-track our transition to EKS.
Ben: 00:08:24.847 Yeah. And sort of as a team, what's your thoughts on the building itself? You buy the solution. How do you find the difference between a managed Kubernetes service and kOps?
Lukas: 00:08:34.708 I think Kubernetes is hard enough so you don't have to feel, I guess, inferior when you decide not to manage it yourself. I think a lot of the complexity comes elsewhere. It comes with scaling it. Well, it comes with how do you deploy your resources, and so on and so forth. And those are the things that I think have a direct impact on your experience. On your stability. On developer experience. And they don't necessarily have anything to do with whether you manage your control plane or not. From our perspective, it was logical and I would dare say, the correct decision to move to a managed Kubernetes platform.
Ben: 00:09:23.321 And there's still, obviously, a lot of day-to-day support that you need to do to make sure that it fits well within your organization. I think you mentioned you have your own CI/CD. Can you just touch a little about you how you deploy at Productboard?
Lukas: 00:09:37.076 Our applications are deployed using Argo CD. We're currently undergoing a migration from basically self-hosted GitHub runners to self-hosted GitHub actions, but the principle is still the same, basically. So we're running different classes of runners, which are spin up, according to our needs, basically. It's all webhook-based, basically. So a pull request comes. A runner of the predefined instance or port size is spun up. Basically, executes the job. Returns the output. That's pretty much it.
Improving engineer performance
Ben: 00:10:17.069 So as you sort of go on to more managed solutions, your team is available to work on more higher-level problems. Can you talk about how the platform team has really helped to increase the output performance of sort of your end engineers at Productboard?
Lukas: 00:10:33.266 The fact that we got rid of kOps, was that we're using Terraform to manage our cloud resources. kOps generates Terraform code for you as well, to create, basically, cloud resources like security routes, networking, and so on and so forth. So up to that point, we kept it in a separate repository. So since we no longer use kOps, we're able to merge it. Sometime further down the line, we added, basically, a permissions management into a single repository. So right now, we have only one repository where all our Terraform code pretty much resides, which has improved the flow, really, It's only one place you have to look for requests, do PR reviews, and so on and so forth. So that's one thing. Since our cloud team is fairly small, currently, there is four of us, soon to be five, and we have around 100 engineers in Productboard, so we're really big on, basically, developer enablement, on enabling our devs to do as much themselves as they can. Someone wants to create a new microservice, and that they would submit a ticket to us saying, "Hey, we need this RDS database or this Aurora database created and we need to have this access, and so on and so forth. Basically, here's your Terraform repository. This is the module you're supposed to use. Here is an example. Do it. Submit a PR. I will have a look at it. If it all checks out, we'll just approve it," and that's it. I think that's one of the things that improved.
Lukas: 00:12:14.766 Also, since we were the ones who built this solution, we were able to focus on, I guess, disaster recovery. Naturally, coming off an outage like that, we invested pretty heavily into that. So at this point, we know pretty well how things work and we're able to focus on improving our time to recovery. Basically, at this point, our entire Kubernetes cluster is very well documented. It's defined almost 100%, I would say like 98% in code. There are very few manual steps. So getting from nothing to a working Kubernetes cluster where you're able to deploy applications to, this time has improved drastically.
Ben: 00:13:07.344 And probably, I guess, EKS probably helps for that too. As long as you have the right resources, it's easier not to worry about the underlying management plane. Other nodes.
Gotchas of the EKS stack learned along the way
Lukas: 00:13:15.580 Yes, that's correct. You don't have to worry about doing cluster nodes and so on and so forth. There are some gotchas that you learn along the way, but other than that, it's loads better in terms of experience managing it.
Ben: 00:13:31.158 Can you give an example gotcha?
Lukas: 00:13:33.292 Basically, EKS comes with sort of two nodes. You can have self-managed nodes or managed nodes. The difference is fairly subtle. But we're using managed nodes. That means that you are allowed to use only Amazon, Linux, and there are a handful of other sort of requirements. You can give them an instance profile that the node assumes, but it's all a bit finicky. Also, quite honestly, the official Terraform module isn't the best so we really had to learn our way the hard way, I guess.
Ben: 00:14:12.643 Yeah. I can imagine. It can be sometimes hard to know with the different machine types and what's supported and especially, which region, too. They can be different as well. And I think one thing you mentioned is that you moved to a monorepo setup. Can you talk a little bit about why a monorepo and how that's helped your team?
Lukas: 00:14:28.281 Well, it's a monorepo in terms of the infrastructure only, really. Basically, in the past, we had three repositories. One, basically, where all the kOps or Kops stuff was and the one where everything else Terraform-related was. And we used a tool called [IAME?] for our IM management. Basically, along the way, we felt it's only natural to sort of merge these into one because our Terraform, I guess, platform is fairly robust. We're using Terragrunt. We're using Atlantis, which is a tool that basically allows you to run Terraform from your GitHub pull request, I guess, window, which is fairly handy because it removes the need to submit multiple pull requests when your Terraform run fails, and so on and so forth. Basically, since we have this fairly robust ecosystem built on top of our Terraform repository, it's only natural to sort of merge it all in one.
Storing institutional knowledge
Ben: 00:15:30.709 Yeah. And I think as far as consolidation goes, I think another thing that you mentioned in your blog post was after the sort of main lead had left the company, that institutional knowledge had been left. In a similar way in which you've created the monorepo, how do you think about storing institutional knowledge now within the team?
Lukas: 00:15:47.899 Really good question. So I think we sort of matured in this regard over the years. And I think it starts all the way at the planning level. Maybe to give some context, our platform tribe — our quarterly planning, basically, shifted one month behind our product teams, so that we're able to react to their needs better. So basically, our T1 starts not in January, but in February, and so on and so forth. These, basically, are building blocks for our, I guess, quarterly planning objectives, which are fairly well-defined. They're agreed upon across the whole platform tribe. They always have a DRI, a directly responsible individual, who's not expected to be the one necessarily delivering the entirety of the objective. He's the person in charge of knowing where do we move next. If we're stuck, how are we going to circumnavigate our problems, and so on and so forth? And this DRI is different for different objectives, so it prevents knowledge silos. I think with our team becoming more senior, more mature, this has had a very positive impact on knowledge sharing. Also, these days, we started to run game days, which is this tiny little D&D simulation, where someone is the game master who comes up with the scenario. It's usually some kind of problem that we have to solve. They are preselected roles which I think facilitates a real-life response to an emergency.
Ben: 00:17:36.233 Are they a couple of hours, half-day, how do you sort of structure them?
Lukas: 00:17:40.298 A couple of hours. We try to keep it within reasonable bounds. You introduce the problem. Roles are assigned. Then the actual problem-solving happens. You time-box it. Because if you're not able to solve it within the predefined amount of time, people obviously are lacking the knowledge and the resources and there is no point in continuing any further. That's the general plan. And then there's always some retrospective basically saying, "Hey, these are the lessons learned."
Ben: 00:18:14.478 Can you give an example topic for a recent game day?
Lukas: 00:18:17.572 We are running HashiCorp's Vault for storing our secrets, application secrets, for the most part. And we simulated our vault cluster outage. We found out that while our documentation is pretty good, one thing that we're lacking is — you have these different, I guess, recovery scenarios. Basically, your [inaudible] cluster failed or you lost your KMS key, so your vault cluster cannot unseal itself. One thing that we were missing is basically symptoms, like these key symptoms that can help you easily when you're under stress, differentiate between, I guess, different problems saying, "Hey, this is certainly this case and I don't have to worry about any of the others." So maybe that's one of the lessons learnt from the last time, and we added it to our documentation.
Ben: 00:19:18.631 And I guess there's a [inaudible] stage prior to a runbook. I guess it's like if — get to work in about 3:00 in the morning, you see this outage, check for these things first because it may not be this one thing you're trying to fix.
Lukas: 00:19:29.078 That's correct, yes. Exactly.
Ben: 00:19:30.708 And then what do you in regards as to documentation? Do you have a wiki or runbooks, or do you have it in GitHub? How do you think about organizing and structuring that?
Lukas: 00:19:41.207 It started off in GitHub. It didn't really work out, so later we transitioned into InfraDocs. Basically, MKDocs built off a GitHub repository. And these days, our entire organization is transitioning to Backstage, which is a tool from Spotify, I believe. What we're basically building is a developer portal. Basically, a single source of truth, where you have various integrations, and that's where we moved our documentation as well. For a very long time, we were in this sort of hellish state where some things were in Notion, which is something hated with passion by all engineers, but it was there for some reasons. Some things were in MKDocs and in GitHub and so and so forth. I think at this point, I can say with a clear conscience that everything is in Backstage in one place.
How to securely offboard engineers
Ben: 00:20:39.288 Nice. I'll definitely have to check it out in the show notes. Just to close out this story, as people leave, you also lose institutional knowledge. It also comes up with another problem with hyper-growth companies is you're bringing on lots of new engineers but you're also offboarding them and often they have access to secrets. API keys. Maybe SSH keys on production hosts. There's all this onboarding procedure but there's also off-boarding. What do you do to sort of clear up these secrets or credentials from previously employed people?
Lukas: 00:21:09.598 While our churn has been very, very low in terms of employees, we obviously have to deal with these things as well. And I think our setup is pretty good. We're using Okta as our main auth provider. Our main SSO. All of our resources are behind a VPN, which you can get through using your Okta sign-in. So that covers most things. We're using Vault to store application tokens and all these sensitive information. So the amount of, I would say, directly shared passwords and SSH keys is virtually none. There are some shared password vaults, but it's mostly very, very low-impact stuff that either wouldn't work without a VPN or is just totally safe stuff. We don't really do SSH anywhere, so that's a big help. We don't have to worry about it. In terms of all the other software that we use, software as a service, Datadog and so on and so forth, basically, places that you can get to without a VPN, it's mostly Okta. Our IT team has this tool, which is called Torii, and it basically tracks all the online accounts that we have in our company, which people have access, where once someone leaves, there is a person responsible for different accounts and they get notified saying, "Hey, we need you to remove this person from this account," say, Datadog.
Ben: 00:22:51.570 It's like sometimes there's a manual clean-up, yeah, of accounts.
Lukas: 00:22:54.456 Yes. Yes. But it's only usually one or two items per person that you have to clean up yourself manually. Other than that, it's mostly, as I said. So it's manageable. It's valuable management.
Why Productboard chose Teleport
Ben: 00:23:07.815 And this is a unique thing since Access Control is run by Teleport, you guys are also in the unique position of being a recent Teleport customer. What was the reasons of picking Teleport for accessing your infrastructure?
Lukas: 00:23:22.293 So basically, as our engineering grew and since we work with customer data, it's a paramount priority to protect it and prevent any possible leaks, and so on and so forth. Everyone who has access to production is obviously under an NDA and has gone through a background check. So on and so forth. But we felt that it's necessary to add another layer to have a proper audit possibility and preferably a session recording for basically anyone who would access our production environment manually, without a second pair of eyes, so to speak. Because most of our changes are done through automated steps, though CI, through pull requests, which are approved naturally, and so on and so forth. But there are use cases. It can either be responding to an emergency or hot fixing something which are rare, but we're in IT; they do happen. So for those reasons, as the number of our engineers grew, we felt it's really important to have a tool like Teleport in place, to basically improve our security.
Ben: 00:24:37.434 And you're using this primarily for, basically, Kubernetes access for short-lived kubeconfigs?
Lukas: 00:24:42.537 That's correct. For Kubernetes access and for database access as well.
Ben: 00:24:48.239 Teleport can help with your mapping of users. How do you think about the internal mapping of Kubernetes's internal users? Do you define different roles and users, or? I'm assuming everyone in your team is almost like a system master's level user, or do you sort of splice-and-dice roles in a much finer level of layer?
Lukas: 00:25:07.977 Since basically, anyone who has access to production has a business justification for it, we don't have to do that fine of a differentiation between our engineers. There are people who have read-only access, so that's one group. There are people who have very, very privileged access, usually administrators. Then there's everyone in between who has basically read-write access, that's pretty much it in our use case.
Ben: 00:25:38.351 And so I think you sort of touched on this a bit. All of these sort of auditing tools are always important for certain compliance regimes, like SOC 2. I think Productboard were certified in 2020. Can you tell me about how things have changed in the last two years and sort of how your team stays in compliance?
Lukas: 00:25:56.773 How things changed? Basically, we were continuously responding to the feedback from the reviewers of our SOC 2 compliance and were gradually implementing changes along the way. And it sort of forces you to because imagine you're supposed to rotate your SSH keys every three months and then you realize you don't really have to do SSH anymore, so you just get rid of it and then it's one less thing to worry about. In terms of how the process works, we do our internal quarterly reviews in collaboration with our other engineering teams and especially with our security team, where we basically provide the required information in terms of capacity planning in terms of how our infrastructure changed, and so on and so forth. We use tools like AWS Security Hub, we run on AWS. I guess that's worth mentioning. GuardDuty. Lacework. We scan our images before they're uploaded to ECR. And obviously, the process is that we talked about earlier, like those game days, basically BCDR exercises and documentation. So and so forth. So all these, I guess, help us stay secure and, I guess, improve.
Ben: 00:27:19.815 Yeah, the controls. For AWS, specifically, do you do anything for IAM roles to monitor people accessing AWS management console?
Lukas: 00:27:28.573 There are very, very few people who access the AWS console properly. But we use AWS to authenticate our users through IAM to Kubernetes. That's, I guess, fairly standard with EKS. And we do have monitoring. We have, obviously, monitoring on our root accounts, which should almost never be used unless you're dealing with billing, and so on and so forth. But basically, they should never be used for operational purpose. We are currently onboarding to use Teleport for AWS console access. AWS CLI, for the most part. I think that's it. All our roles are managed in our Terraform code.
Ben: 00:28:13.710 Yeah. I guess having infrastructure as code for IAM really helps because you've tested it, linked it, not have worry about someone creating one in the UI and giving a star, star to the wrong database, which could easily happen.
Lukas: 00:28:26.791 Exactly. Basically, nobody in the whole organization has permissions to do this directly without a second pair of eyes. So basically, there's no way to circumnavigate the restrictions in place.
Security issues faced and how they're resolved
Ben: 00:28:39.116 And with all of this in place, you have good flexibility, I guess, into what's possibly happening if there's any possible security issues. If there is any security issues, what sort of things keep you up at night and how do you plan on resolving them?
Lukas: 00:28:53.059 I don't think that there is anything serious keeping as at night. Out of those things that we're aware of, we're actively trying to resolve them. It's probably not really a good idea to disclose them publicly. Maybe one of the security issues we're facing right now, I guess, is making the experience as smooth as possible. Because I think part of the journey of adopting Teleport into your engineers' lives — because I think for Infra people, it's just another tool and we're fairly used to it and it's easily digestible, I guess. It may not be like that for everyone. So one thing that we're working on is providing a layer of abstraction on top of our current tooling, on top of Teleport. On top of Vault, which is something that we call a PBCTL or a PB "cuttle", that would be a CLI abstraction on top of these tools. So suppose you're a back-end engineer and you want to check some database. So at this point, you have to be well aware of what environment the database runs in, whether it's production, and that it means you have to use Teleport to get there. Or if it's in staging, that means you have to go through Vault, through Vault for ephemeral access. And it's all a bit much, so I think one of the ways to improve the adoption and to make everyone's lives easier is to build some clear guidance and some abstraction on top of it.
Ben: 00:30:30.815 Yes, really not get in the way of developers' productivity if they can just use the terminal for their tooling. They much prefer that to having to dive into an Okta, SSO page, to your various tools.
Lukas: 00:30:41.930 Exactly.
How Productboard works with other developers and orgs
Ben: 00:30:42.639 And then as a platform team, can you tell me how you work with the other developers and organizations? I think that was a great example of the internal tool building. And you sort of mentioned you build it one month out. What are some other initiatives that have been successful?
Lukas: 00:30:56.727 I think working with Kubernetes resources is something that's notoriously difficult for people who don't have sufficient knowledge, I would say. This came originally as a request from our own engineers saying, "Hey, basically, we need your help working with helm charts." And we thought, "Hey, this is a really good point, so let's set up some clear guidance, some, I guess, blueprints for our two major platforms, which is Kotlin services and Ruby services. And plan how can we improve this in the future?" The holy grail would be to have everything in Backstage, where basically since it's a developer portal, a developer would come and create all the necessary infrastructure for that service from there, much like a lightweight Heroku or any other platform as a service. So basically, building a platform for our own developers, I think in the future, that's what's in store for us. Something that we're actively working on.
Ben: 00:32:08.946 Since you kind of grow your engineering team or keep on expanding, you sort of build tools that you can sort of really empower them to get their job done. That's the platform for hyper-growth.
Advice for developing a platform team to support hypergrowth
Ben: 00:32:19.762 As we wrap things up here, what would be your advice for teams considering developing a platform team to do the same thing as yourself as Productboard?
Lukas: 00:32:28.395 I reckon at some point, you can spot the signs where there are huge bottlenecks where knowledge is pooled in very small circles. And I think that's the right time to sort of start thinking about whether there is some space to create the platform team or tribe or whatever that would basically work for the company itself, not necessarily create any value themselves, but in turn, empower. For us, this mark came around, I guess, 50 engineers. That's where I think it starts to really become a need.
Ben: 00:33:05.821 Yeah, definitely. Wherever I worked, CI/CD always breaks at like 20, 50, 100 people and you have to rebuild it. Same with deployment pipelines. Everything, I guess, gets more advanced. Do you have any tips for sort of when to optimize for different stages?
Lukas: 00:33:18.498 Actually, I think the idea of platform came way back when it was only one team, it was called front-end platform. And since Productboard is fairly front-end-heavy, we came up with this idea of sharing resources across all the front-end teams. I'm not a front-end developer myself, so take it with a grain of salt, but basically, there were libraries to be shared and basically some sort of predefined components that it was a good idea to basically just maintain and buy a dedicated team in a single repository in a single space. I think since this approach was very successful, I think that's what sort of sparked the idea of creating a platform tribe that would encompass this whole philosophy. So right now, not only do we have something resembling a front-end platform — we have a dedicated developer experience team, and so on and so forth. In terms of when to stop optimizing, that was your question, wasn't it?
Ben: 00:34:23.600 I guess, do you want to early optimize? I guess at different stages, there's different problems to solve for. Maybe I actually don't know what my closing question is.
Lukas: 00:34:31.920 Yeah. Does anyone ever preemptively optimize? I think that's actually — I think it's a pitfall. You should not look into the future, but not somewhere where you're not even heading, I guess. It's good to have a pretty clear outlook. Two to four quarters ahead of where you want to be. That's typically how our planning go. We try to plan for the next three to four quarters in advance. I think it's not actually about being certain that this will happen in Q4, 2023, because you obviously have no idea what's going to happen. But I think in terms of knowing what resources, in terms of team staffing and basically where you want to go, that's pretty advantageous.
Ben: 00:35:20.148 I think that's a great way to wrap it up. I really enjoyed this conversation. I think it's great everything is all so very self-service. And I guess in many ways, you kind of get out of the way of the developers and so it's almost like you're not even there, but they almost have the platform super power to sort of keep on growing in the organization. So thanks, Lukas. Do you have any last closing thoughts?
Lukas: 00:35:41.045 Yeah, I think it's a very typical thought that you're doing your job right as an Infra engineer when basically nobody needs you ever.
Ben: 00:35:52.104 Yes. Perfect. I think it's a great way to end. [music] This podcast is brought to you by Teleport. Teleport is the easiest, most secure way to access all your infrastructure. The open-source Teleport access planes consolidates connectivity, authentication, authorization, and auditing into a single platform by consolidating all aspects of infrastructure access. Teleport reduces attack surface area, cuts operational overhead, easily enforces compliance, and improves engineering productivity. Learn more at goteleport.com or find us on GitHub, github.com/gravitational/teleport.
Try Teleport today
In the cloud, self-hosted, or open source
Get StartedView developer docs
Get the latest product updates and engineering blog posts
Teleport Overview
Teleport Features
Teleport Pricing
How Teleport works
Why Teleport?
What is SSH?
What is a Kubernetes cluster?
Teleport Community
© 2023 Gravitational Inc.; all rights reserved.


If you do not wish to refer your complaint to that person, or you are not satisfied with that person's response to your complaint, you may refer your complaint to Nikki Burley, Partner.
by telephoning her at (07) 928 9000 or DDI (07) 927 7480.
If you do not wish to refer your complaint to Nikki Burley, or you are not satisfied with her response to your complaint, you may refer your complaint to JK (Max) Hamilton, Lawyer, JK Hamilton, Harrington House, Harington Street, Tauranga.
by telephoning him at (07) 578 0125.
The Law Society also maintains a complaints service and you are able to make a complaint to that service. To do so you should contact the New Zealand Law Society, PO Box 5041, Lambton Quay, Wellington 6145, Ph 0800 261 801.


On 11 December 2018, the Fair Work Amendment (Repeal of 4 Yearly Review and Other Measures) Act 2018 received Royal Assent. On 12 December 2018 the amendments in Schedule 2 regarding procedural requirements in enterprise bargaining commenced.
The Amending Act amends, among others, section 188 of the Fair Work Act 2009, to confer discretion on the Fair Work Commission to approve an enterprise agreement despite minor procedural or technical errors.
In order to provide some early clarity around the operation of the new section 188(2), the President of the Commission has referred a small number of matters currently before the Commission to a Full Bench for hearing on 21 December 2018.


text:
Home > Articles > Operating Systems, Server > Microsoft Servers
Introducing Microsoft ISA Server 2000
By Curt Simmons
Internet Acceleration
Multi-Layered Firewall
Policy-Based Management
Microsoft product expert Curt Simmons introduces you to ISA Server 2000, Microsoft's new Internet acceleration and security product.
Creating Active Directory Infrastructures
Microsoft Internet Security and Acceleration (ISA) Server 2000 has received a lot of attention during its beta development and recent release into the marketplace—and rightly so. ISA Server is a powerful product that is easy to use, yet highly versatile and scalable. In networking environments, the need to provide clients with Internet access while protecting the private network from security threats from the Internet has been a growing problem during the past decade. In today's e-commerce environment, connectivity with the Internet is often seen as essential for many businesses. But that connectivity often comes with a price and its own set of problems.
ISA Server is Microsoft's first server product that combines smart-caching features for Internet acceleration with multilayered IP firewall protection. Using this product, Windows 2000 networks can leverage the power of the Internet while protecting the network from potential intruders and threats. If you're considering deploying Microsoft ISA Server in your environment, you need to study its features and usage. For now, however, let's begin with an overview of ISA Server.
ISA Server is a combination product that provides acceleration and security. The acceleration feature of ISA Server simply means that ISA Server uses advanced caching of Internet objects, URLs, pages, and so on in order to speed client access to the Internet. The ISA Server resides between the private network and the Internet so that clients never directly access the Internet, but all traffic flows through the ISA Server. Using caching, ISA Server can store Internet objects on its local hard drive and return those objects directly from the cache.
Let's consider an example. Let's say that Client A wants to access the http://www.isanexample.com Web site. The client's browser makes this request to the ISA Server. ISA Server checks its cache, and if a valid version of the Web page resides in the cache, ISA Server provides Client A with that cached data. To the user on Client A, it appears as if the information has quickly returned from the Internet. http://www.isanexample.com is not found in the cache, ISA Server retrieves it from the Internet, caches it, and returns it to the client. When the next request for http://www.isanexample.com is made, it can be served directly from the cache. This caching process speeds client browsing because popular Web pages can be serviced from the cache instead of having to retrieve them from the Internet each time they are needed. Likewise, caching reduces traffic on the Internet link as well.
ISA Server includes a number of caching features that you can manage as an ISA Server administrator. You can choose to use Active Caching, in which ISA server actively reaches popular Web objects before they expire so that items are always current in the cache. You can also manage time-to-live values for HTTP and FTP content so that you have control over the way caching functions in your network. If your environment provides a Web server to the Internet, ISA Server can work with that Web server and provide reverse caching to Internet clients, which speeds access and reduces the burden on the Web server. Finally, ISA Server also supports hierarchical caching features, in which multiple ISA Servers or ISA server arrays can be "chained together" in a number of different ways. As you can see, ISA Server provides many caching features that provide service to all kinds of network implementation scenarios.
System Center Configuration Manager Current Branch Unleashed
By Kerrie Meyler, Gerry Hampson, Saud Al-Mishari, Greg Ramsey, Kenneth van Surksum, Michael Wiles
Windows 2000 System Administration Handbook
By Will Willis, David Watts, Tillman Strahan
Developing Solutions with Office 2000 Components and VBA
By AITKEN


It's finally finished! I am so proud of it. I have to admit, when I started this, what 4 weeks ago I believe, I wasn't sure I could finish it. I thought I might just get bored. But hour after hour for weeks on end, I stitched and could no stop. Watching the colors pop off the plain white fabric and turn into a beautiful picture that just pops, well, I loved every minute of it. I put in the last cross stitch last night and I spent today cutting and ironing and manged to get it quilted together. I am very proud of it and am excited to start my next project.


text:
London - Daily News Egypt
Shoukry in London to discuss Libya, as retrictions on illgal travelling continue
Foreign affairs ministers of United States (US), France, Italy, and United Arab of Emirates (UAE) will attend the meeting
Ministry of Antiquities continues attempts to save lost heritage
DNE Break
Rare historical manuscript retrieved from London
Never mind Brexit, hot London property market takes off as Middle East Investors attracted to solid fundamentals
Just as important, activity is being driven by pent-up demand and rock bottom interest rates.
Just as important, activity is being driven by pent-up demand and rock bottom interest rates
London stabbing preparator was convicted in 2012 for terrorism offences
Egypt's Observatory of Monitoring Takfiri Fatwas, Dar Al-Iftaa condemned the terrorist attack
Omnia Rizk
Curtain rises on London's Tutankhamun exhibition on 1 November
Exhibition comes 12 years since young king's treasures' last visit to the British capital
Nada Deyaa'
History of Water in the Middle East on Stage in London
In fact, the Middle East is considered the most water scarce region in the world. The Middle East/North Africa (MENA) region has only 1,100 m3 of renewable water per capita per year. For comparison, Western Europe has 5,400 m3 and North America 20,300 m31.
Marwa El- Shinawy
"Sale of Amun's head in London is theft of Egypt's identity": Sahar Talaat Mostafa
Auctions on Egyptian artefacts in Europe must end
Taha Sakr
London rejects tanker exchange with Tehran
South Korea to join European mission in Strait of Hormuz
Egypt participates in Global Coalition Against Daesh's meeting in London
FM asserted Egypt's commitment to combat terrorism
Stolen Karnak temple relief returns to Egypt from London
Relic depicts cartouche of King Amonhotep I, was found while being auctioned
Obey: London's disenfranchised youths' road to social unrest
The film takes place against the backdrop of East London, where Leon (Marcus Rutherford) is a 19-year-old boy with an alcoholic mother. Chelsea is going through two fights.
Manuscript was lost in 1970s, was found while being auctioned
Limestone featuring Hatshepsut found in London
An ancient Egyptian depiction with carvings featuring female Pharaoh Hatshepsut was discovered by Kenneth Griffin, an Egyptology lecturer at Swansea University in the United Kingdom, the university said in a statement. The discovery came as the limestone was selected from the university's Egypt Centre stored collection to be used in an object handling session. The …
Egyptian parliamentary delegation meets with Mariam Moustafa's family in London
18-year-old Egyptian national was born in Rome, died from sustained injuries
Omar Khairat to support Egyptian street children in London
Aiming to raise awareness towards the cause of street children and orphans in Egypt, prominent musician Omar Khairat will perform a live music concert in St John's Smith Square in London next month, a state media outlet reported. The concert's income aims to support street children and orphans adopted by FACE, a non-profit organisation that …
Egyptian tourism sector prepares to participate in WTM in November
Number of British tourists coming to Egypt during the first half of this year amounted to 147,000, up by 26%
Abdel Razek Al-Shuwekhi
Sarah El-Sheikh
Finding good restaurants while travelling in London
Good food always makes great memories! It is especially true when you are visiting a new city. Exploring the culture of the place through its food is surely a memorable experience. However, locating an ideal restaurant in an unfamiliar place may be a tricky affair. London, for example, is a hub for food lovers, and …
Mandy Bular
Egypt condemns London mosque attack
Grand Imam of Al-Azhar denounces the incident, calling for decrease of Islamophobia
Deutsche Bank picks news London headquarters
El-Garhy meeting with IMF in London to review Egypt's economic performance
Proposed stamp duty to be reviewed by the Economic Affairs Committee within two weeks
Banks could pull staff out of London post-Brexit
Ambassador to London refutes Guardian claims on Egypt's vote in UN security council
In a letter to the newspaper, Kamal said that Egypt did not block the French resolution
Toqa Ezzidin
EFG Hermes hosts London conference for MENA investment
Global investors target new opportunities at sixth annual EFG Hermes London MENA and Frontier Conference
Nicholas Mehling
UK's May takes center stage in turbulent times
Theresa May, the longest-serving home secretary of recent times, has been known as a modernizer, an authoritarian – and above all, a pragmatist. Samira Shackle reports from London on Britain's new prime minister.
Hurst 1966 World Cup shirt falls short of auction goal
The most iconic England football shirt in history has failed to find a buyer at auction. The jersey was worn by Geoff Hurst when he scored a hat-trick in the 1966 World Cup final against West Germany.
Brexit strains London's 'golden' ties with Beijing
The UK has tried hard to strengthen its already robust economic relationship with Chinese politicians and businessmen. But many now question Britain's future as an investment destination – and a gateway to the EU.
'As a Black person in a white society, I can have an impact,' says author Sharon Dodua Otoo
British writer Sharon Dodua Otoo just won the prestigious Bachmann Prize for a story she'd "accidentally" written in German. DW spoke with her about Brexit, xenophobia and life as a Black person in Berlin.
UK went to war in Iraq before diplomatic options were exhausted, says inquiry head John Chilcot
A seven-year inquiry into the UK's involvement has concluded that London failed to exhaust all peaceful options. Ex-premier Tony Blair said he assumes "full responsibility" for any mistakes that arose from the conflict.
LSE shareholders approve merger with Deutsche Börse
Shareholders in the London Stock Exchange Group (LSEG) have voted overwhelmingly for a merger with Deusche Börse despite post-Brexit concerns voiced by German regulators about the new entity being domiciled in London.
Israel's Livni summoned by London police for 'war crimes'
Israel said it expected "different behavior" from a key ally, after opposition lawmaker Tzipi Livni was summoned for an interview with UK police. Livni was Israel's foreign minister during a deadly conflict in Gaza.
Singapore bank stops lending for London properties after Brexit
United Overseas Bank (UOB) has suspended loans to anyone wanting to buy property in London. Singapore's third largest lender says uncertainty from Britain's vote to leave the EU should make investors cautious.
June 30, 2016 Breaking News


text:
Night temp continues to dip in J-K, Ladakh; Drass coldest at -25.4 °C
JAMMU: The night temperature continued to trend downward in Union Territories of Jammu and Kashmir, and Ladakh as Drass remained the coldest place in the region recording minus 25.4 degrees Celsius, a Meteorological Department official said on Saturday.
Posted: Dec 07, 2019 07:26 PM Updated: 1 month ago
The MeT official said the night temperature is likely to improve in the coming days. Tribune file
Jammu, December 7
The night temperature continued to trend downward in Union Territories of Jammu and Kashmir, and Ladakh as Drass remained the coldest place in the region recording minus 25.4 degrees Celsius, a Meteorological Department official said on Saturday.
Srinagar experienced its coldest night in the season so far with the mercury falling 0.6 degree Celsius to settle at a low of minus 3.6 degrees Celsius, three notches below the normal.
The MeT official said the night temperature is likely to improve in the coming days due to a western disturbance which is likely to hit the two Union Territories on Wednesday, bringing another spell of snow and rains.
He said Drass in Kargil district of Ladakh was the coldest recorded place in the region with a night temperature of minus 25.4 degrees Celsius against the previous night's 24.3 degrees Celsius.
Leh town, also in Ladakh, was reeling at a minimum of 15.9 degrees Celsius, the official added.
Foggy conditions engulfed most parts of Kashmir, including Srinagar, as the Sun remained hidden behind the clouds in the morning, the official said.
He said the minimum temperature in Jammu and Kashmir's winter capital Jammu marked a slight dip and settled at 8.5 degrees Celsius, two notches below season's average.
Pahalgam hill resort in south Kashmir was the coldest recorded place in the Valley with a low of minus 5.9 degrees Celsius followed by the famous ski resort of Gulmarg in north Kashmir at minus 5.6 degrees Celsius, the official said.
Katra, which serves as the base camp for the pilgrims visiting Vaishno Devi shrine in Reasi district of Jammu region, recorded a low of 8.7 degrees Celsius, the official said, adding Bhadarwah township of Doda district was, however, the coldest recorded place in the region with a minimum of 1.4 degrees Celsius.
Director of the Meteorological Department, Sonam Lotus said the night temperature is expected to improve from Monday night ahead of a fresh spell of widespread moderate snow or rain in the plains of Jammu and Kashmir and Kargil district of Ladakh from December 11 to 13 with main activity on December 12.
However, there will be a dip in the day temperature during the wet spell which is also likely to impact surface and air transportation on Thursday in view of heavy to very heavy snow in the higher reaches of Pirpanjal, Zojilla Pass, Zanskar, Banihal top and Mughal road, he said. PTI


When we're serving, it can be easy to spread ourselves thin trying to do all that needs to be done. Here is part 2 with 5 additional tips can help you refocus and keep stress at a manageable level.
1. Stay flexible. Remember your to do list is a "suggestion" and not a "law." To do lists are meant to be helpful, to help us organize our days. When our to-do lists become a ball and chain or a reminder of the ways in which we fall short of perfection - that is when it is time to simplify our to-do list into what is humanly possible to do in one day and remind ourselves that our to-do list is there to serve us, not the other way around. On the field, it is easy to have a plan for the day and have that plan be scrapped the instant we wake up because of a more pressing need. Remember to give yourself grace to be flexible and change your to-do list as your circumstances change.
2. Keep an eye out for the Creator at work in the little things and for the little glimpses of beauty and good that He has placed all around us. Sometimes we can become so stressed and busy that we get tunnel vision and miss out on the little reminders our Creator has placed around us that show His love for us and control over every aspect of our lives. Plus, a walk in nature can break us out of a rut and help us look at things from a new perspective.
3. Be patient with yourself. Learning takes time (often more time than we would like), and you only truly fail when you refuse get back up and try again. Life on the field can be stretching to say the least. Giving yourself grace is like giving yourself elastic during those tough times to help ensure you stretch and don't break. When we find we continue to forget to give ourselves patience, sometimes a visual reminder can help. Put post-it notes where you can see them with verses or reminders to give yourself patience and grace throughout the day.
4. Realize that rest is not optional. It is essential. It is easy to sometimes think of rest as the one truly flexible slot of time in our day, and to shave off hours of sleep or rest when the to-do list seems too long. But if we continue to ignore our need for rest, we will not get as much done with the time we do spend. When we are low on rest we tend to have trouble focusing on tasks and problem-solving becomes extremely difficult. We may also find even the smallest task seems overwhelming or that we seem to snap more easily at those around us. One good way to test if you are getting enough rest is to examine how often you end up getting sick when you do end up taking a break. If vacations are mostly spent getting and getting over being sick, your body may be trying to communicate that it needs more rest more frequently in order to keep running without breaking down the moment you take a break.
5. Plan "Decompress" time. This is a time in between serving to momentarily unwind, relax, and transition to the next thing. Transition or decompress time can be as simple as staying in your car to listen to a whole song before heading to your next meeting, pausing midday for a tea/coffee break, or planning a sightseeing stop on the way to your next task. These mini breaks help our brains to switch more easily from task to task and give us a small bit of refreshment that can help re energize us and help us focus more easily on the next task.


Olivia Celest was born in Nice (South of France) in 1961. After studying in the Decorative arts at Nice, she chose to study Graphic arts in Paris and graduated from the E.S.A.G school in 1986. From 1986 to 1988 she explored graphic computers then went back to the more traditionnal forms of art in 1989 creating murals and " trompe l'œil " untill 1993. At the same time she carried out personnal research which led her to an exhibition at the " Salon d'automne " of Paris in 1993. She awarded a bronze medal at the " salon international d'arts plastiques " at Béziers and competed also in the international price of contemporary art in Monte Carlo and different groups exhibitions.


text:
#include "ace/Active_Map_Manager.h"

#if !defined (__ACE_INLINE__)
#include "ace/Active_Map_Manager.inl"
#endif /* __ACE_INLINE__ */

redpajama_set_name: RedPajamaGithub


text:
all under heaven
All Under Heaven: Cerulean
Featuring members from the New Jersey hardcore band, Shackled, new act, All Under Heaven, emerge with a grunge-oriented shoegaze and slowcore sound with an detectable proclivity toward post rock territories.
Cerulean is All Under Heaven's mesmerizing first single off their upcoming EP, Collider, and it comes evincive of both the band's more tuneful and heavier aspects in an overall notably emotive and gazey outcome.
All Under Heaven were created by songwriter Nick DeFabritus in Freehold, New Jersey in 2017, and were set aside for a bit after releasing an early demo, while DeFabritus focused on Shackled. The band was revived in 2020 with the help of Michael Cucci, also of Shackled, and put out a new track as part of a compilation sampler by Sunday Drive Records.
Collider is expected out on February 26th, 2021 through Sunday Drive Records.
Promo 2021 by all under heaven
all under heaven music shoegaze slowcore zr


My dear friends Lisa and Rebecca over at We Are Scout are giving away this gorgeous faceted gem colouring page that Lisa designed - for free! Head over to download the image, and let your kids go to town; instant modern kids' art that you'll want to hang on the walls.
Try framing three together, or simply pop one up on the wall with washi tape. It's a great way to keep kids busy when the weather's not great.
Thanks Lisa and Rebecca! Head here to download your sheet.


text:
Zachery Lashway, Reporter/anchor
Roxy Tyler, Web producer
Published: September 23, 2018, 7:47 pm
Tags: News, Jaguars, Jacksonville
Toon Town gives Jaguars fans new place to tailgate
Former abandoned building becomes fan favorite in Tallyrand
JACKSONVILLE, Fla. – Many Jaguars fans have found a new spot to tailgate and shop : Toon Town.
The cartoon art-covered building in the Tallyrand area of downtown is becoming one of the hottest places in Jacksonville to take photos, hang out and shop, especially on game day.
"(It's) a home of artists at the moment, different producers, tattooers, a barber," said artists and manager Kyle Monteiro. It's become a big draw, "because there isn't a place to go around town," said Monteiro.
He painted the entire outside of Toon Town a year ago. "It took a month," said Monteiro.
You can see classic cartoon characters. There are also images of Jaguars players, team officials and even the team's owner adorning the walls inside of what used to be an abandoned building.
"It was a complete wreck, garbage piled from floor to ceiling," said Toon Town owner-manager Chance Gerisch. "When we finally got it all cleaned out, the walls were all disgusting. And I was down at the beach and I saw some kids doing some graffiti. So I said 'Hey guys, why don't you come over to the warehouse? I will buy some pizza and soda and put some colors on the walls.'"
Since then the 28,000 square foot facility continues to grow and evolve
"Our goal is to eventually have it as an event place;. concerts, weddings, whatever the person wants to do," said Gerisch.
He considers it a work in progress.
"It's pretty cool, the people who corral around here, and the vibe it is creating," said Gerisch. "Cater to the art kids and have a place the kids can put stuff on the walls without getting into trouble."
Many people said Toon Town is slowly becoming a Jacksonville landmark.
Zachery Lashway
An Emmy-nominated TV reporter and weekend anchor.


text:
Silk Duvets
Silk-Filled Pillows
Silk-Filled Mattress Toppers
Silk Bedspreads
Silk Bedding Sets
Ladies' Silk Nightwear
Men's Silk Nightwear
Ladies' Silk Underwear
Men's Silk Underwear
Silk Clothing
Silk Gloves, Socks & Balaclavas
Silk Beauty Products
Cashmere Gloves & Socks
Silk Sleeping Caps
Silk & Bamboo Hairbands
Gift Bag and Box
Men's Modal Thermal T-Shirt - Black
Select an option below...
Men's Thermal Size
Add this product to your basket
Jasmine Silk offers men's modal thermal black t-shirt. They are made from mixture fabrics to guarantee long-lasting high-quality products. The new improved round neck and fit style presents a flattering shape with extra cosiness. Wear it underneath your garments in cooler days or on its own when the climate's warm.
Lightweight stretchy modal blend
Fixed styling, round neck, short sleeves
94% modal and 6% elastane
This product qualifies for:
UK Standard Delivery FREE
Standard UK delivery 1 to 2 working days for FREE!
Delivery Monday - Friday
Order must be placed before 2:00pm
Saturday Delivery £25.95
Order must be placed before 2:00pm on Friday
Delivery on Saturday
To read our full international delivery information, please click here.
BED SIZE DUVET TOPPER FITTED SHEET FLAT SHEET DUVET COVER
(3' x 6'3")
(4'6'' x 6'6'')
90x 190cm
(3' x 6'3'')
90 x 190 + 26cm
(3' x 6'3'' + 9'')
(6' x 9')
140 x 190 + 26cm
( 4'6'' x 6'3'' + 9'')
(7'6'' x 9')
(5' x 6'6'' + 9")
(7'2''x 7'4'')
180 x 200 +26cm
UK SIZE 8 10 12 14 16 18 20 22
EUR SIZE 34 36 38 40 42 44 46 48
US SIZE 4 6 8 10 12 14 16 18
BUST (CM) 80 84 88 92 96 100 104 108
BUST (INCHES) 31½ 33 34½ 36½ 37¾ 39½ 41 43¼
WAIST (INCHES) 25¼ 26¾ 28½ 30 31½ 33 34½ 37
HIP (CM) 88 92 96 100 104 108 112 117
HIP (INCHES) 34½ 36¼ 37¾ 39½ 41 42½ 44 46
INSIDE LEG (CM) 79 79 79 79 79 79 79 79
UK SIZE 34 36 38 40 42 44 46 48
US SIZE 34 36 38 40 42 44 46 48
CHEST (CM) 88 92 96 100 104 108 112 116
CHEST (INCH) 34½ 36¼ 37¾ 39½ 41 42½ 44 45½
WAIST (CM) 76 80 84 88 92 96 100 104
WAIST (INCH) 30 31½ 33 34½ 36¼ 37¾ 39½ 41
HIP (CM) 92 96 100 104 108 112 116 120
HIP (INCH) 36¼ 37¾ 39½ 41 42½ 44 45½ 47¼
INSIDE LEG (INCH) 31½ 32 32¼ 32¾ 33 33½ 34 34¼
Nobody has asked a question about this product yet
Security &Privacy
Silk Guides
About Silk
Silk History
Benefits of Silk
Silk Care
Mulberry vs Charmeuse
Jasmine Silk, Unit H2 Ascot Business Park, Lyndhurst Rd, Ascot, Surrey, SL5 9FE, England 2.86128884294634
Registered in England No. 06737993 VAT Reg No. GB 982 0826 04


Along the way we came across these different drive units that may be of use.
We also had a good deal of discussion about the size of boat that we need to fulfil STAGE 1. A small, 3D printed boat was suggested however we agreed that it might not cope with rough water when we get to STAGE 2 — meaning we'll have to start again.
A hull would be researched, seeking the advise of a local model boating expert as to the size of motor and prop that we will need to achieve 5-10mph cruise speed.
We had a guest with us today… Jim Wilkinson, designer, inventor & builder of a wind turbine powered boat. It was such a privilege to have him join us and add his experience to our project.
We discussed at length the challenges he faced in designing 'Revelation II'. He explained that it no longer existed but he had answered the questions that he had set out with.
We also started to set out our road map — breaking down the challenge into manageable chunks and discussing the saying: "There's no such thing as a big problem."


Perry Teri Toys LLC is based in Sunny Florida. We love to design toys, discover new ways to play and see parents and children enjoy playing with our works. And we're exceptionally good at bringing new innovations to life; see our Awards page.
Our State Side facilities are brimming with advanced state of the art machinery including 3D SLA and FDM Printers, CNC Mills and CNC Lathes, Plastic Injection Molding Machines, Thermoform Machines and a full prototyping shop. Plus we've developed proprietary innovation strategies that empower us to use our R&D lab to create, build, research and deploy. Our nearly 3500 square foot facility enables us to quickly test our ideas right here in the USA and our partnership with factories in Asia let us manufacturing to high standards.
If you want innovation, let's talk. Contact Us!


text:
Most Famous tourist attraction on 'Delhi Darshan'
A political hub since time immemorial, Delhi has been in the focus of the world for centuries. The ancient city is a blend of old and new. From the narrow streets of Old Delhi to the neatly tree-lined roads of Lutyen's Delhi, you will be astonished by the various contrasts of Delhi. The city has been the seat of power for many years and it has witnessed the rise and fall of many emperors and kings down the history. It is the melting pot of all the major cultures, traditions, ethnicities and religions of India. So a visit to Delhi gives you a chance to see and experience the rich culture and heritage of India.
Here is the list of main attractions of the city that you must visit while on your Delhi tour.
It was Built by Shah Jahan when he moved his capital city to Shahjahanabad from Agra. Red fort symbolizes the grandeur of Mughals and shows their system of governance. Different halls meant for royal meetings with public and nobility known as Diwan-e-Aam and Diwan-e-Khas, could be seen here. Rang Mahal is another attraction of the fort which is popular for its numerous lotus-shaped fountains. Red fort is also the venue for independence celebration of India and on every 15th August. Indian flag is hoisted by the prime minister.
Humayun's Tomb
It was built wife of Mughal emperor Humayun, Haji Begum in his memory during the reign of Akbar. Humayun's tomb is supposedly the first architectural construction of that era. One of its kind during that time, the garden tomb was built on the banks of river Yamuna and next to the shrine of saint Nizamuddin Auliya. It is known for inspiring the architecture of Taj Mahal. It exhibits Persian architecture and has inspired the architectural style of many structures of Mughal era. Humayun's tomb is listed as UNESCO world heritage site.
It is the highest brick minaret in the world and constructed entirely in red sandstone. The construction of Qutub Minar was started by Qutub-ud-din Aibak but completed by his successor Iltutmish. The minaret is filled with intricate carvings and Quranic verses. It is believed that minaret used to serve to the mosque next to it and used by muezzin to call for prayers. Qutub Minar is also a world heritage site.
Jama Masjid is the largest mosque in India and built during the reign of Mughal emperor Shah Jahan. It was named after the Friday prayer, Jummah which was done here. The courtyard of the mosque can hold up to 25000 people at a time. It has three huge gates which lead to the courtyard. The north gate houses numerous sacred relic including an antique copy of Quran with deer skin.
A Bahai' house of worship, Lotus temple was completed in the year 1986 and notable for its flower-like shape. Like all the other Bahai' temple, it is open to people from all religions. It is also listed as a UNESCO world heritage site.
Who Does Wicked Better?
Some People Come To St Albans
St Albans to PhuketFit in Thailand: ...
Experience Glorious Autumn Colours at West Lodge Park
5 Tips for an Easier Travel Experience this Summer
Best places to visit in Patagonia, Argentina
Top 10 Things To Do In South Africa
Uncover the most exclusive places to Swim with Dolphins in Cancún and Riviera Maya
Moustrap Theatre Projects – Our 2020 Christmas Charity
Les Miserables The Staged Concert 2020
Coronavirus and London's Theatreland
St Albans Council
Love your town?
Create a mini-travel guide to your city!
St Albans Travel Service Copyright © 2021.


By Jocelyn Chauveau. Bedrooms Design. Published at Monday, February 11th, 2019 08:38:31 AM.
By Jocelyn Chauveau. Kitchen Design. Published at Monday, February 11th, 2019 08:38:33 AM.
By Jocelyn Chauveau. Kitchen Design. Published at Monday, February 11th, 2019 08:38:34 AM.
By Jocelyn Chauveau. Kitchen Design. Published at Friday, February 15th, 2019 11:11:14 AM.
By Jocelyn Chauveau. Kitchen Design. Published at Friday, February 15th, 2019 11:11:12 AM.
By Jocelyn Chauveau. Kitchen Design. Published at Friday, February 15th, 2019 11:11:10 AM.
By Jocelyn Chauveau. Kitchen Design. Published at Thursday, February 14th, 2019 08:51:49 AM.
By Jocelyn Chauveau. Kitchen Design. Published at Friday, February 15th, 2019 11:11:13 AM.
By Jocelyn Chauveau. Kitchen Design. Published at Friday, February 15th, 2019 11:11:11 AM.
By Jocelyn Chauveau. Kitchen Design. Published at Friday, February 15th, 2019 11:11:09 AM.


Cloud Notions offers custom and configurable software solutions, especially in the project management space. We adapt open-source or commercial tools to fit your methodologies, automating things you never thought possible.
Large enterprises have a problem today. The project planning and governance process consumes almost as much time as the projects themselves. Executives, PMO staff, resource managers and other stakeholders are engaged in an endless exchange of emails, spreadsheets, project charters, and other documents. And all too often, the only way to get an urgent project started is to print a document and "walk it through" the various executive approvals. There has to be a better way.
Cloud Notions is currently developing solutions to help solve these problems. Our software, built 100% on the robust Salesforce.com platform, will eliminate the pain points mentioned above. For project governance planners, our Salesforce.com AppExchange package provides easy project planning, budgeting, and approval. Unlike other Project and Portfolio Management (PPM) tools, our offering focuses on annual planning and executive analysis. It does not seek to cover every aspect of execution and deployment.
FlightPlan is our initial offering in the PPM space. It provides easy tools to align the portfolio with business strategy, architectural goals, budget constraints and business need timelines. Please contact us for more information.
Custom screen showing a Gantt-style timeline. This uses HTML5, Visualforce, and custom Apex controllers.
This is a bubble chart screen that allows you visualize your projects by strategic value, architectural difficulty, cost, or all three. It uses HTML5 and Visualforce.
Visualforce page with data grids.
The Salesforce Ideas module is used to capture ideas and associate them back to projects.
Custom page that allows multiple data views of organizational strategy, using HTML5 and Visualforce.
We are constantly "tinkering" in our laboratory. Check back for more info on Cloud Notions software, or contact us.