text:
Full Text | PDF
J Cancer 2018; 9(7):1231-1238. doi:10.7150/jca.23714 This issue Cite
Prognostic Value of Bone Marrow FDG Uptake Pattern of PET/CT in Newly Diagnosed Diffuse Large B-cell Lymphoma
Yumei Chen1*, Mingge Zhou1*, Jianjun Liu1✉, Gang Huang1,2,3✉
1. Department of Nuclear Medicine, Ren Ji Hospital, School of Medicine, Shanghai Jiao Tong University, Shanghai, China
2. Department of Cancer Metabolism, Institute of Health Sciences, Chinese Academy of Sciences and Shanghai Jiao Tong University School of Medicine, Shanghai, China
3. Key Lab. For Molecular Biology & Imaging, Shanghai University of Medicine and Health Sciences, Shanghai, China
*contributed equally to this work.
✉ Corresponding author: Gang Huang, 1630 Dongfang Road, Shanghai 200127, China, Tel: +86 21 63867812, 63853125, Fax: +86 21 63842916, E-mail: huang2802com and Jianjun Liu, 1630 Dongfang Road, Shanghai 200127, China, Tel: +86 21 68383530, Fax: +86 21 63842916, E-mail: nuclearjcom More
Chen Y, Zhou M, Liu J, Huang G. Prognostic Value of Bone Marrow FDG Uptake Pattern of PET/CT in Newly Diagnosed Diffuse Large B-cell Lymphoma. J Cancer 2018; 9(7):1231-1238. doi:10.7150/jca.23714. https://www.jcancer.org/v09p1231.htm
Purpose: The value of 18F-fluorodeoxyglucose positron emission tomography /computed tomography (18F-FDG PET/CT) in assessing bone marrow involvement (BMI) of lymphoma remains controversial. The present study aims to evaluate the prognostic meaning of bone marrow FDG uptake pattern in PET/CT of newly diagnosed diffuse large B-cell lymphoma (DLBCL) patients.
Materials and Methods: 193 newly diagnosed DLBCL patients were retrospectively analyzed. All patients received 6-8 cycles of rituximab plus cyclophosphamide, doxorubicin, vincristine and prednisone (R-CHOP). The type of BM FDG uptake pattern was recorded by two blinded reviewers independently. The relationship between clinicopathologic features and BM patterns was analyzed. The prognostic value of different BM patterns was evaluated by Log-rank test and Cox-regression analysis.
Results: Out of 193 patients, 28 (15%) patients had focal BM FDG uptake higher than liver (fPET+), 18 (9%) patients showed diffuse BM uptake higher than liver (dPET+) and 147 (76%) patients had normal BM uptake (lower than liver) (nPET). BMB positive was found in 35.7% (10/28) of fPET+ patients, in 16.7% (3/18) of dPET+ patients and in 0.7% (1/147) of nPET patients. Diffuse BM pattern was associated with lower hemoglobin level and a trend of higher erythrocyte sedimentation rate (ESR). dPET+ patients had similar 3y-progression-free survival (3y-PFS) and 3y-overall survival (3y-OS) compared with nPET patients (80.5% vs 81.5%, p=0.701; 94.1% vs 90.6%, p=0.809, respectively), while fPET+ patients had worse 3y-PFS and 3y-OS compared with fPET- patients (32.7% vs 81.4%, p<0.001; 69.4% vs 90.9%, p=0.003, respectively). Multivariate analysis showed fPET+ (HR=2.270, p=0.025) and stage III/IV (HR=4.909, p=0.026) were independent predictors for PFS, but no factors were independently predictive for OS.
Conclusion: PET/CT-directed BM patterns are meaningful in predicting prognosis of newly diagnosed DLBCL patients. Focal BM pattern is an independent predictor for PFS.
Keywords: DLBCL, PET/CT, bone marrow, FDG uptake pattern, prognosis
Chen, Y., Zhou, M., Liu, J., Huang, G. (2018). Prognostic Value of Bone Marrow FDG Uptake Pattern of PET/CT in Newly Diagnosed Diffuse Large B-cell Lymphoma. Journal of Cancer, 9(7), 1231-1238. https://doi.org/10.7150/jca.23714.
Chen, Y.; Zhou, M.; Liu, J.; Huang, G. Prognostic Value of Bone Marrow FDG Uptake Pattern of PET/CT in Newly Diagnosed Diffuse Large B-cell Lymphoma. J. Cancer 2018, 9 (7), 1231-1238. DOI: 10.7150/jca.23714.
Chen Y, Zhou M, Liu J, Huang G. 2018. Prognostic Value of Bone Marrow FDG Uptake Pattern of PET/CT in Newly Diagnosed Diffuse Large B-cell Lymphoma. J Cancer. 9(7):1231-1238.


text:
Q: SQL Create Script DDL Table from View How do I script a Create Table DDL for a View?
Example View:
create view dbo.CustomerTransaction
as
select
   cust.CustomerId,    -- this is int
   cust.CustomerName,  -- varchar(25)
   tr.PurchaseAmount   -- decimal(10,2)
from dbo.Customer cust
inner join dbo.Transaction tr
   on cust.CustomerId = tr.TransactionId

Expected Result:
create table dbo.CustomerTransaction
(
     CustomerId int,
     CustomerName varchar(25),
     PurchaseAmount decimal(10,2)
)

A: Since your question tag says SQL Server 2016, you could take advantage of sys.dm_exec_describe_first_result_set which became available in SQL Server 2012.

This dynamic management function takes a Transact-SQL statement as a
  parameter and describes the metadata of the first result set for the
  statement.

--Demo set up
drop table if exists dbo.customer
drop table if exists dbo.[transaction]

create table dbo.Customer(CustomerId int, CustomerName varchar(25))
create table dbo.[Transaction](TransactionId int, PurchaseAmount decimal(10,2))
DROP VIEW IF EXISTS CustomerTransaction
GO
create view dbo.CustomerTransaction
as
select
   cust.CustomerId,    -- this is int
   cust.CustomerName,  -- varchar(25)
   tr.PurchaseAmount   -- decimal(10,2)
from dbo.Customer cust
inner join dbo.[Transaction] tr
   on cust.CustomerId = tr.TransactionId
go
-------------------------------
--The solution
SET NOCOUNT ON;

DECLARE @sql NVARCHAR(MAX)
    ,@cols NVARCHAR(MAX) = N'';

SELECT @cols += N',' + NAME + ' ' + system_type_name
FROM sys.dm_exec_describe_first_result_set(N'SELECT * FROM dbo.CustomerTransaction', NULL, 1);

SET @cols = STUFF(@cols, 1, 1, N'');
SET @sql = N'CREATE TABLE #tmp(' + @cols + ');'
SET @sql = replace(@sql,',',',')
print @sql

CREATE TABLE #tmp(CustomerId int,CustomerName varchar(25),PurchaseAmount decimal(10,2));

redpajama_set_name: RedPajamaStackExchange


text:
package com.streamsets.datacollector.validation;

import com.streamsets.pipeline.api.ErrorCode;
import com.streamsets.pipeline.api.impl.ErrorMessage;
import com.streamsets.pipeline.api.impl.LocalizableString;
import com.streamsets.pipeline.api.impl.Utils;
import com.streamsets.pipeline.validation.ValidationIssue;

import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;

public class Issue implements Serializable, ValidationIssue {
  private final String instanceName;
  private final String configGroup;
  private final String configName;
  private long count;
  private final LocalizableString message;
  private Map<String, Object> additionalInfo;

  protected Issue(String instanceName, String configGroup, String configName, ErrorCode error, Object... args) {
    this.instanceName = instanceName;
    this.configGroup = configGroup;
    this.configName = configName;
    this.count = 1;
    message = new ErrorMessage(error, args);
  }

  public void setAdditionalInfo(String key, Object value) {
    if (additionalInfo == null) {
      additionalInfo = new HashMap<>();
    }
    additionalInfo.put(key, value);
  }

  @Override
  public Map getAdditionalInfo() {
    return additionalInfo;
  }

  @Override
  public String getMessage() {
    return message.getLocalized();
  }

  @Override
  public String getErrorCode() {
    return ((ErrorMessage)message).getErrorCode();
  }

  @Override
  public String getInstanceName() {
    return instanceName;
  }

  @Override
  public String getLevel() {
    String level;
    if (instanceName == null) {
      level = (getConfigName() == null) ? "PIPELINE" : "PIPELINE_CONFIG";
    } else {
      level = (getConfigName() == null) ? "STAGE" : "STAGE_CONFIG";
    }
    return level;
  }

  @Override
  public String getConfigGroup() {
    return configGroup;
  }

  @Override
  public String getConfigName() {
    return configName;
  }

  @Override
  public String toString() {
    return Utils.format("Issue[instance='{}' group='{}' config='{}' message='{}']", instanceName, configGroup,
                        configName, message.getNonLocalized());
  }

  public long getCount() {
    return count;
  }

  public void incCount() {
    count++;
  }

}

redpajama_set_name: RedPajamaGithub


text:
Developing trust and managing uncertainty in partially observable sequential decision-making environments
BISHOP-DISSERTATION-2019.pdf (4.622Mb)
Bishop, Robert Reid
This dissertation consists of three distinct, although conceptually related, papers that are unified in their focus on data-driven, stochastic sequential decision-making environments, but differentiated in their respective applications. In Chapter 2, we discuss a special class of partially observable Markov decision processes (POMDPs) in which the sources of uncertainty can be naturally separated into a hierarchy of effects — controllable, completely observable effects and exogenous, partially observable effects. For this class of POMDPs, we provide conditions under which value and policy function structural properties are inherited from an analogous class of MDPs, and discuss specialized solution procedures. In Chapter 3, we discuss an inventory control problem in which actions are time-lagged, and there are three explicit sources of demand uncertainty — the state of the macroeconomy, product-specific demand variability, and information quality. We prove that a base stock policy — defined with respect to pipeline inventory and a Bayesian belief distribution over states of the macroeconomy — is optimal, and demonstrate how to compute these base stock levels efficiently using support vector machines and Monte Carlo simulation. Further, we show how to use these results to determine how best to strategically allocate capital toward a better information infrastructure or a more agile supply chain. Finally, in Chapter 4, we consider how to generate trust in so-called development processes, such as supply chains, certain artificial intelligence systems, and maintenance processes, in which there can be adversarial manipulation and we must hedge against the risk of misapprehension of attacker objectives and resources. We show how to model dynamic agent interaction using a partially-observable Markov game (POMG) framework, and present a heuristic solution procedure, based on self-training concepts, for determining a robust defender policy.
School of Industrial and Systems Engineering Theses and Dissertations [1457]

redpajama_set_name: RedPajamaCommonCrawl


text:
Persistent hole burning of 1,4-disubstituted anthraquinone molecules
Yasuhiro Iino, Toshiro Tani, Makoto Sakuda, Hiroo Nakahara, Kiyoshige Fukuda
1,4-disubstituted anthraquinones with two electron-donating groups, such as hydroxy, amino and stearylamino groups, are investigated on hole burning and its efficiency in polar low-temperature matrices (4.7 K). The efficiency decreased significantly when the two hydroxy groups of quinizarin were substituted by amino or stearylamino group(s). The efficiency of those molecules in which only one hydroxy group was substituted was about two orders of magnitude smaller than that ofquinizarin. These results suggest that the photoproduct of quinizarin is related to light-induced changes in both functional groups which are stabilized through intermolecular hydrogen bonds with the matrix.
Chemical Physics Letters
anthraquinones
hole burning
Functional groups
Hydrogen bonds
1,4-anthraquinone
Atomic and Molecular Physics, and Optics
Iino, Y., Tani, T., Sakuda, M., Nakahara, H., & Fukuda, K. (1987). Persistent hole burning of 1,4-disubstituted anthraquinone molecules. Chemical Physics Letters, 140(1), 76-82. https://doi.org/10.1016/0009-2614(87)80420-7
Persistent hole burning of 1,4-disubstituted anthraquinone molecules. / Iino, Yasuhiro; Tani, Toshiro; Sakuda, Makoto; Nakahara, Hiroo; Fukuda, Kiyoshige.
In: Chemical Physics Letters, Vol. 140, No. 1, 18.09.1987, p. 76-82.
Iino, Y, Tani, T, Sakuda, M, Nakahara, H & Fukuda, K 1987, 'Persistent hole burning of 1,4-disubstituted anthraquinone molecules', Chemical Physics Letters, vol. 140, no. 1, pp. 76-82. https://doi.org/10.1016/0009-2614(87)80420-7
Iino Y, Tani T, Sakuda M, Nakahara H, Fukuda K. Persistent hole burning of 1,4-disubstituted anthraquinone molecules. Chemical Physics Letters. 1987 Sep 18;140(1):76-82. https://doi.org/10.1016/0009-2614(87)80420-7
Iino, Yasuhiro ; Tani, Toshiro ; Sakuda, Makoto ; Nakahara, Hiroo ; Fukuda, Kiyoshige. / Persistent hole burning of 1,4-disubstituted anthraquinone molecules. In: Chemical Physics Letters. 1987 ; Vol. 140, No. 1. pp. 76-82.
@article{3e624ceea8014efeb2d266aaa6d2bee5,
title = "Persistent hole burning of 1,4-disubstituted anthraquinone molecules",
abstract = "1,4-disubstituted anthraquinones with two electron-donating groups, such as hydroxy, amino and stearylamino groups, are investigated on hole burning and its efficiency in polar low-temperature matrices (4.7 K). The efficiency decreased significantly when the two hydroxy groups of quinizarin were substituted by amino or stearylamino group(s). The efficiency of those molecules in which only one hydroxy group was substituted was about two orders of magnitude smaller than that ofquinizarin. These results suggest that the photoproduct of quinizarin is related to light-induced changes in both functional groups which are stabilized through intermolecular hydrogen bonds with the matrix.",
author = "Yasuhiro Iino and Toshiro Tani and Makoto Sakuda and Hiroo Nakahara and Kiyoshige Fukuda",
journal = "Chemical Physics Letters",
T1 - Persistent hole burning of 1,4-disubstituted anthraquinone molecules
AU - Iino, Yasuhiro
AU - Tani, Toshiro
AU - Sakuda, Makoto
AU - Nakahara, Hiroo
AU - Fukuda, Kiyoshige
N2 - 1,4-disubstituted anthraquinones with two electron-donating groups, such as hydroxy, amino and stearylamino groups, are investigated on hole burning and its efficiency in polar low-temperature matrices (4.7 K). The efficiency decreased significantly when the two hydroxy groups of quinizarin were substituted by amino or stearylamino group(s). The efficiency of those molecules in which only one hydroxy group was substituted was about two orders of magnitude smaller than that ofquinizarin. These results suggest that the photoproduct of quinizarin is related to light-induced changes in both functional groups which are stabilized through intermolecular hydrogen bonds with the matrix.
AB - 1,4-disubstituted anthraquinones with two electron-donating groups, such as hydroxy, amino and stearylamino groups, are investigated on hole burning and its efficiency in polar low-temperature matrices (4.7 K). The efficiency decreased significantly when the two hydroxy groups of quinizarin were substituted by amino or stearylamino group(s). The efficiency of those molecules in which only one hydroxy group was substituted was about two orders of magnitude smaller than that ofquinizarin. These results suggest that the photoproduct of quinizarin is related to light-induced changes in both functional groups which are stabilized through intermolecular hydrogen bonds with the matrix.
JO - Chemical Physics Letters
JF - Chemical Physics Letters


text:
"""
    Copyright (c) 2015-2020 Raj Patel(raj454raj@gmail.com), StopStalk

    Permission is hereby granted, free of charge, to any person obtaining a copy
    of this software and associated documentation files (the "Software"), to deal
    in the Software without restriction, including without limitation the rights
    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    copies of the Software, and to permit persons to whom the Software is
    furnished to do so, subject to the following conditions:

    The above copyright notice and this permission notice shall be included in
    all copies or substantial portions of the Software.

    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    THE SOFTWARE.
"""

import os
import socket
import datetime
import copy
import gluon.contenttype
import gluon.fileutils

try:
    import pygraphviz as pgv
except ImportError:
    pgv = None

is_gae = request.env.web2py_runtime_gae or False

# ## critical --- make a copy of the environment

global_env = copy.copy(globals())
global_env['datetime'] = datetime

http_host = request.env.http_host.split(':')[0]
remote_addr = request.env.remote_addr
try:
    hosts = (http_host, socket.gethostname(),
             socket.gethostbyname(http_host),
             '::1', '127.0.0.1', '::ffff:127.0.0.1')
except:
    hosts = (http_host, )

if request.is_https:
    session.secure()
elif (remote_addr not in hosts) and (remote_addr != "127.0.0.1") and \
    (request.function != 'manage'):
    raise HTTP(200, T('appadmin is disabled because insecure channel'))

if request.function == 'manage':
    if not 'auth' in globals() or not request.args:
        redirect(URL(request.controller, 'index'))
    manager_action = auth.settings.manager_actions.get(request.args(0), None)
    if manager_action is None and request.args(0) == 'auth':
        manager_action = dict(role=auth.settings.auth_manager_role,
                              heading=T('Manage Access Control'),
                              tables=[auth.table_user(),
                                      auth.table_group(),
                                      auth.table_permission()])
    manager_role = manager_action.get('role', None) if manager_action else None
    auth.requires_membership(manager_role)(lambda: None)()
    menu = False
elif (request.application == 'admin' and not session.authorized) or \
        (request.application != 'admin' and not gluon.fileutils.check_credentials(request)):
    redirect(URL('admin', 'default', 'index',
                 vars=dict(send=URL(args=request.args, vars=request.vars))))
else:
    response.subtitle = T('Database Administration (appadmin)')
    menu = True

ignore_rw = True
response.view = 'appadmin.html'
# if menu:
#     response.menu = [[T('design'), False, URL('admin', 'default', 'design',
#                  args=[request.application])], [T('db'), False,
#                  URL('index')], [T('state'), False,
#                  URL('state')], [T('cache'), False,
#                  URL('ccache')]]

# ##########################################################
# ## auxiliary functions
# ###########################################################

if False and request.tickets_db:
    from gluon.restricted import TicketStorage
    ts = TicketStorage()
    ts._get_table(request.tickets_db, ts.tablename, request.application)

def get_databases(request):
    dbs = {}
    for (key, value) in global_env.items():
        try:
            cond = isinstance(value, GQLDB)
        except:
            cond = isinstance(value, SQLDB)
        if cond:
            dbs[key] = value
    return dbs

databases = get_databases(None)

def eval_in_global_env(text):
    exec ('_ret=%s' % text, {}, global_env)
    return global_env['_ret']

def get_database(request):
    if request.args and request.args[0] in databases:
        return eval_in_global_env(request.args[0])
    else:
        session.flash = T('invalid request')
        redirect(URL('index'))

def get_table(request):
    db = get_database(request)
    if len(request.args) > 1 and request.args[1] in db.tables:
        return (db, request.args[1])
    else:
        session.flash = T('invalid request')
        redirect(URL('index'))

def get_query(request):
    try:
        return eval_in_global_env(request.vars.query)
    except Exception:
        return None

def query_by_table_type(tablename, db, request=request):
    keyed = hasattr(db[tablename], '_primarykey')
    if keyed:
        firstkey = db[tablename][db[tablename]._primarykey[0]]
        cond = '>0'
        if firstkey.type in ['string', 'text']:
            cond = '!=""'
        qry = '%s.%s.%s%s' % (
            request.args[0], request.args[1], firstkey.name, cond)
    else:
        qry = '%s.%s.id>0' % tuple(request.args[:2])
    return qry

# ##########################################################
# ## list all databases and tables
# ###########################################################
def index():
    return dict(databases=databases,
                disabled_sites=current.REDIS_CLIENT.smembers("disabled_retrieval"))

def disable_site():
    sitename = request.vars.get("sitename", None)
    if request.vars.get("addremove", None) == "on":
        session.flash = "Retrieval enabled for " + sitename
        current.REDIS_CLIENT.srem("disabled_retrieval", sitename)
    else:
        session.flash = "Retrieval disabled for " + sitename
        current.REDIS_CLIENT.sadd("disabled_retrieval", sitename)
    redirect(URL("appadmin", "index"))
    return dict()

# ##########################################################
# ## insert a new record
# ###########################################################

def insert():
    (db, table) = get_table(request)
    form = SQLFORM(db[table], ignore_rw=ignore_rw)
    if form.accepts(request.vars, session):
        response.flash = T('new record inserted')
    return dict(form=form, table=db[table])

# ##########################################################
# ## list all records in table and insert new record
# ###########################################################

def download():
    import os
    db = get_database(request)
    return response.download(request, db)

def csv():
    import gluon.contenttype
    response.headers['Content-Type'] = \
        gluon.contenttype.contenttype('.csv')
    db = get_database(request)
    query = get_query(request)
    if not query:
        return None
    response.headers['Content-disposition'] = 'attachment; filename=%s_%s.csv'\
        % tuple(request.vars.query.split('.')[:2])
    return str(db(query, ignore_common_filters=True).select())

def import_csv(table, file):
    table.import_from_csv_file(file)

def select():
    import re
    db = get_database(request)
    dbname = request.args[0]
    try:
        is_imap = db._uri.startswith("imap://")
    except (KeyError, AttributeError, TypeError):
        is_imap = False
    regex = re.compile('(?P<table>\w+)\.(?P<field>\w+)=(?P<value>\d+)')
    if len(request.args) > 1 and hasattr(db[request.args[1]], '_primarykey'):
        regex = re.compile('(?P<table>\w+)\.(?P<field>\w+)=(?P<value>.+)')
    if request.vars.query:
        match = regex.match(request.vars.query)
        if match:
            request.vars.query = '%s.%s.%s==%s' % (request.args[0],
                                                   match.group('table'), match.group('field'),
                                                   match.group('value'))
    else:
        request.vars.query = session.last_query
    query = get_query(request)
    if request.vars.start:
        start = int(request.vars.start)
    else:
        start = 0
    nrows = 0

    step = 100
    fields = []

    if is_imap:
        step = 3

    stop = start + step

    table = None
    rows = []
    orderby = request.vars.orderby
    if orderby:
        orderby = dbname + '.' + orderby
        if orderby == session.last_orderby:
            if orderby[0] == '~':
                orderby = orderby[1:]
            else:
                orderby = '~' + orderby
    session.last_orderby = orderby
    session.last_query = request.vars.query
    form = FORM(DIV(DIV(INPUT(_style='width:400px',
                              _name='query',
                              _id='query_inp',
                              _value=request.vars.query or '',
                              requires=IS_NOT_EMPTY(
                                    error_message=T("Cannot be empty"))),
                        LABEL("Query:", _for='query_inp'),
                        _class="input-field col offset-s3 s6"),
                    _class="row"),
                DIV(DIV(INPUT(_name='update_check',
                              _id='update_inp',
                              _type='checkbox',
                              value=False),
                        LABEL("Update", _for='update_inp'),
                        _class="col offset-s3 s6"),
                    _class="row"),
                DIV(DIV(INPUT(_style='width:400px',
                              _name='update_fields',
                              _id='update_field_inp',
                              _value=request.vars.update_fields or ''),
                        LABEL("Update Fields:", _for='update_fields_inp'),
                        _class="input-field col offset-s3 s6"),
                    _class="row"),
                DIV(DIV(INPUT(_name='delete_check',
                              _class='delete',
                              _id='delete_inp',
                              _type='checkbox',
                              value=False),
                        LABEL("Delete:", _for='delete_inp'),
                        _class="col offset-s3 s6"),
                    _class="row"),
                DIV(DIV(INPUT(_type='submit',
                              _value=T('submit')),
                        _class="input-field col offset-s3 s6"),
                    _class="row"),
                _action=URL(r=request, args=request.args),
                _class="row col s12")

    tb = None
    if form.accepts(request.vars, formname=None):
        regex = re.compile(request.args[0] + '\.(?P<table>\w+)\..+')
        match = regex.match(form.vars.query.strip())
        if match:
            table = match.group('table')
        try:
            nrows = db(query, ignore_common_filters=True).count()
            if form.vars.update_check and form.vars.update_fields:
                db(query, ignore_common_filters=True).update(
                    **eval_in_global_env('dict(%s)' % form.vars.update_fields))
                response.flash = T('%s %%{row} updated', nrows)
            elif form.vars.delete_check:
                db(query, ignore_common_filters=True).delete()
                response.flash = T('%s %%{row} deleted', nrows)
            nrows = db(query, ignore_common_filters=True).count()

            if is_imap:
                fields = [db[table][name] for name in
                    ("id", "uid", "created", "to",
                     "sender", "subject")]
            if orderby:
                rows = db(query, ignore_common_filters=True).select(
                              *fields, limitby=(start, stop),
                              orderby=eval_in_global_env(orderby))
            else:
                rows = db(query, ignore_common_filters=True).select(
                    *fields, limitby=(start, stop))
        except Exception, e:
            import traceback
            tb = traceback.format_exc()
            (rows, nrows) = ([], 0)
            response.flash = DIV(T('Invalid Query'), PRE(str(e)))
    # begin handle upload csv
    csv_table = table or request.vars.table
    if csv_table:
        formcsv = FORM(DIV(str(T('or import from csv file')) + " ", _class="row"),
                       DIV(DIV(DIV(SPAN("File"),
                                   INPUT(_type='file', _name='csvfile'),
                                         _class="btn"),
                               DIV(INPUT(_class="file-path", _type="text"),
                                   _class="file-path-wrapper"),
                               _class="col offset-s4 s4 file-field input-field"),
                           _class="row"),
                       DIV(DIV(INPUT(_type='hidden', _value=csv_table, _name='table'),
                               INPUT(_type='submit', _value=T('import')),
                               _class="col offset-s4 s4"),
                           _class="row"),
                       _class="row center")
    else:
        formcsv = None
    if formcsv and formcsv.process().accepted:
        try:
            import_csv(db[request.vars.table],
                       request.vars.csvfile.file)
            response.flash = T('data uploaded')
        except Exception, e:
            response.flash = DIV(T('unable to parse csv file'), PRE(str(e)))
    # end handle upload csv

    return dict(
        form=form,
        table=table,
        start=start,
        stop=stop,
        step=step,
        nrows=nrows,
        rows=rows,
        query=request.vars.query,
        formcsv=formcsv,
        tb=tb
    )

# ##########################################################
# ## edit delete one record
# ###########################################################

def update():
    (db, table) = get_table(request)
    keyed = hasattr(db[table], '_primarykey')
    record = None
    db[table]._common_filter = None
    if keyed:
        key = [f for f in request.vars if f in db[table]._primarykey]
        if key:
            record = db(db[table][key[0]] == request.vars[key[
                        0]]).select().first()
    else:
        record = db(db[table].id == request.args(
            2)).select().first()

    if not record:
        qry = query_by_table_type(table, db)
        session.flash = T('record does not exist')
        redirect(URL('select', args=request.args[:1],
                     vars=dict(query=qry)))

    if keyed:
        for k in db[table]._primarykey:
            db[table][k].writable = False

    form = SQLFORM(
        db[table], record, deletable=True, delete_label=T('Check to delete'),
        ignore_rw=ignore_rw and not keyed,
        linkto=URL('select',
                   args=request.args[:1]), upload=URL(r=request,
                                                      f='download', args=request.args[:1]))

    if form.accepts(request.vars, session):
        session.flash = T('Done !!')
        qry = query_by_table_type(table, db)
        redirect(URL('select', args=request.args[:1],
                 vars=dict(query=qry)))
    return dict(form=form, table=db[table])

# ##########################################################
# ## get global variables
# ###########################################################

def state():
    return dict()

def ccache():
    if is_gae:
        form = FORM(
            P(TAG.BUTTON(T("Clear CACHE?"), _type="submit", _name="yes", _value="yes")))
    else:
        cache.ram.initialize()
        cache.disk.initialize()

        form = FORM(
            P(TAG.BUTTON(
                T("Clear CACHE?"), _type="submit", _name="yes", _value="yes")),
            P(TAG.BUTTON(
                T("Clear RAM"), _type="submit", _name="ram", _value="ram")),
            P(TAG.BUTTON(
                T("Clear DISK"), _type="submit", _name="disk", _value="disk")),
        )

    if form.accepts(request.vars, session):
        session.flash = ""
        if is_gae:
            if request.vars.yes:
                cache.ram.clear()
                session.flash += T("Cache Cleared")
        else:
            clear_ram = False
            clear_disk = False
            if request.vars.yes:
                clear_ram = clear_disk = True
            if request.vars.ram:
                clear_ram = True
            if request.vars.disk:
                clear_disk = True
            if clear_ram:
                cache.ram.clear()
                session.flash += T("Ram Cleared")
            if clear_disk:
                cache.disk.clear()
                session.flash += T("Disk Cleared")
        redirect(URL(r=request))

    try:
        from guppy import hpy
        hp = hpy()
    except ImportError:
        hp = False

    import shelve
    import os
    import copy
    import time
    import math
    from gluon import portalocker

    ram = {
        'entries': 0,
        'bytes': 0,
        'objects': 0,
        'hits': 0,
        'misses': 0,
        'ratio': 0,
        'oldest': time.time(),
        'keys': []
    }

    disk = copy.copy(ram)
    total = copy.copy(ram)
    disk['keys'] = []
    total['keys'] = []

    def GetInHMS(seconds):
        hours = math.floor(seconds / 3600)
        seconds -= hours * 3600
        minutes = math.floor(seconds / 60)
        seconds -= minutes * 60
        seconds = math.floor(seconds)

        return (hours, minutes, seconds)

    if is_gae:
        gae_stats = cache.ram.client.get_stats()
        try:
            gae_stats['ratio'] = ((gae_stats['hits'] * 100) /
                (gae_stats['hits'] + gae_stats['misses']))
        except ZeroDivisionError:
            gae_stats['ratio'] = T("?")
        gae_stats['oldest'] = GetInHMS(time.time() - gae_stats['oldest_item_age'])
        total.update(gae_stats)
    else:
        for key, value in cache.ram.storage.iteritems():
            if isinstance(value, dict):
                ram['hits'] = value['hit_total'] - value['misses']
                ram['misses'] = value['misses']
                try:
                    ram['ratio'] = ram['hits'] * 100 / value['hit_total']
                except (KeyError, ZeroDivisionError):
                    ram['ratio'] = 0
            else:
                if hp:
                    ram['bytes'] += hp.iso(value[1]).size
                    ram['objects'] += hp.iso(value[1]).count
                ram['entries'] += 1
                if value[0] < ram['oldest']:
                    ram['oldest'] = value[0]
                ram['keys'].append((key, GetInHMS(time.time() - value[0])))

        for key in cache.disk.storage:
            value = cache.disk.storage[key]
            if isinstance(value, dict):
                disk['hits'] = value['hit_total'] - value['misses']
                disk['misses'] = value['misses']
                try:
                    disk['ratio'] = disk['hits'] * 100 / value['hit_total']
                except (KeyError, ZeroDivisionError):
                    disk['ratio'] = 0
            else:
                if hp:
                    disk['bytes'] += hp.iso(value[1]).size
                    disk['objects'] += hp.iso(value[1]).count
                disk['entries'] += 1
                if value[0] < disk['oldest']:
                    disk['oldest'] = value[0]
                disk['keys'].append((key, GetInHMS(time.time() - value[0])))

        ram_keys = ram.keys() # ['hits', 'objects', 'ratio', 'entries', 'keys', 'oldest', 'bytes', 'misses']
        ram_keys.remove('ratio')
        ram_keys.remove('oldest')
        for key in ram_keys:
            total[key] = ram[key] + disk[key]

        try:
            total['ratio'] = total['hits'] * 100 / (total['hits'] +
                                                total['misses'])
        except (KeyError, ZeroDivisionError):
            total['ratio'] = 0

        if disk['oldest'] < ram['oldest']:
            total['oldest'] = disk['oldest']
        else:
            total['oldest'] = ram['oldest']

        ram['oldest'] = GetInHMS(time.time() - ram['oldest'])
        disk['oldest'] = GetInHMS(time.time() - disk['oldest'])
        total['oldest'] = GetInHMS(time.time() - total['oldest'])

    def key_table(keys):
        return TABLE(
            TR(TD(B(T('Key'))), TD(B(T('Time in Cache (h:m:s)')))),
            *[TR(TD(k[0]), TD('%02d:%02d:%02d' % k[1])) for k in keys],
            **dict(_class='cache-keys',
                   _style="border-collapse: separate; border-spacing: .5em;"))

    if not is_gae:
        ram['keys'] = key_table(ram['keys'])
        disk['keys'] = key_table(disk['keys'])
        total['keys'] = key_table(total['keys'])

    return dict(form=form, total=total,
                ram=ram, disk=disk, object_stats=hp != False)

def table_template(table):
    from gluon.html import TR, TD, TABLE, TAG

    def FONT(*args, **kwargs):
        return TAG.font(*args, **kwargs)

    def types(field):
        f_type = field.type
        if not isinstance(f_type,str):
            return ' '
        elif f_type == 'string':
            return field.length
        elif f_type == 'id':
            return B('pk')
        elif f_type.startswith('reference') or \
                f_type.startswith('list:reference'):
            return B('fk')
        else:
            return ' '

    # This is horribe HTML but the only one graphiz understands
    rows = []
    cellpadding = 4
    color = "#000000"
    bgcolor = "#FFFFFF"
    face = "Helvetica"
    face_bold = "Helvetica Bold"
    border = 0

    rows.append(TR(TD(FONT(table, _face=face_bold, _color=bgcolor),
                           _colspan=3, _cellpadding=cellpadding,
                           _align="center", _bgcolor=color)))
    for row in db[table]:
        rows.append(TR(TD(FONT(row.name, _color=color, _face=face_bold),
                              _align="left", _cellpadding=cellpadding,
                              _border=border),
                       TD(FONT(row.type, _color=color, _face=face),
                               _align="left", _cellpadding=cellpadding,
                               _border=border),
                       TD(FONT(types(row), _color=color, _face=face),
                               _align="center", _cellpadding=cellpadding,
                               _border=border)))
    return "< %s >" % TABLE(*rows, **dict(_bgcolor=bgcolor, _border=1,
                                          _cellborder=0, _cellspacing=0)
                             ).xml()

def bg_graph_model():
    graph = pgv.AGraph(layout='dot',  directed=True,  strict=False,  rankdir='LR')

    subgraphs = dict()
    for tablename in db.tables:
        if hasattr(db[tablename],'_meta_graphmodel'):
            meta_graphmodel = db[tablename]._meta_graphmodel
        else:
            meta_graphmodel = dict(group=request.application, color='#ECECEC')

        group = meta_graphmodel['group'].replace(' ', '')
        if not subgraphs.has_key(group):
            subgraphs[group] = dict(meta=meta_graphmodel, tables=[])
        subgraphs[group]['tables'].append(tablename)

        graph.add_node(tablename, name=tablename, shape='plaintext',
                       label=table_template(tablename))

    for n, key in enumerate(subgraphs.iterkeys()):
        graph.subgraph(nbunch=subgraphs[key]['tables'],
                    name='cluster%d' % n,
                    style='filled',
                    color=subgraphs[key]['meta']['color'],
                    label=subgraphs[key]['meta']['group'])

    for tablename in db.tables:
        for field in db[tablename]:
            f_type = field.type
            if isinstance(f_type,str) and (
                f_type.startswith('reference') or
                f_type.startswith('list:reference')):
                referenced_table = f_type.split()[1].split('.')[0]
                n1 = graph.get_node(tablename)
                n2 = graph.get_node(referenced_table)
                graph.add_edge(n1, n2, color="#4C4C4C", label='')

    graph.layout()
    if not request.args:
        response.headers['Content-Type'] = 'image/png'
        return graph.draw(format='png', prog='dot')
    else:
        response.headers['Content-Disposition']='attachment;filename=graph.%s'%request.args(0)
        if request.args(0) == 'dot':
            return graph.string()
        else:
            return graph.draw(format=request.args(0), prog='dot')

def graph_model():
    return dict(databases=databases, pgv=pgv)

def manage():
    tables = manager_action['tables']
    if isinstance(tables[0], str):
        db = manager_action.get('db', auth.db)
        db = globals()[db] if isinstance(db, str) else db
        tables = [db[table] for table in tables]
    if request.args(0) == 'auth':
        auth.table_user()._plural = T('Users')
        auth.table_group()._plural = T('Roles')
        auth.table_membership()._plural = T('Memberships')
        auth.table_permission()._plural = T('Permissions')
    if request.extension != 'load':
        return dict(heading=manager_action.get('heading',
                    T('Manage %(action)s') % dict(action=request.args(0).replace('_', ' ').title())),
                    tablenames=[table._tablename for table in tables],
                    labels=[table._plural.title() for table in tables])

    table = tables[request.args(1, cast=int)]
    formname = '%s_grid' % table._tablename
    linked_tables = orderby = None
    if request.args(0) == 'auth':
        auth.table_group()._id.readable = \
        auth.table_membership()._id.readable = \
        auth.table_permission()._id.readable = False
        auth.table_membership().user_id.label = T('User')
        auth.table_membership().group_id.label = T('Role')
        auth.table_permission().group_id.label = T('Role')
        auth.table_permission().name.label = T('Permission')
        if table == auth.table_user():
            linked_tables=[auth.settings.table_membership_name]
        elif table == auth.table_group():
            orderby = 'role' if not request.args(3) or '.group_id' not in request.args(3) else None
        elif table == auth.table_permission():
            orderby = 'group_id'
    kwargs = dict(user_signature=True, maxtextlength=1000,
                  orderby=orderby, linked_tables=linked_tables)
    smartgrid_args = manager_action.get('smartgrid_args', {})
    kwargs.update(**smartgrid_args.get('DEFAULT', {}))
    kwargs.update(**smartgrid_args.get(table._tablename, {}))
    grid = SQLFORM.smartgrid(table,
                             args=request.args[:2],
                             formname=formname,
                             **kwargs)
    return grid

def hooks():
    import functools
    import inspect
    list_op=['_%s_%s' %(h,m) for h in ['before', 'after'] for m in ['insert','update','delete']]
    tables=[]
    with_build_it=False
    for db_str in sorted(databases):
        db = databases[db_str]
        for t in db.tables:
            method_hooks=[]
            for op in list_op:
                functions = []
                for f in getattr(db[t], op):
                    if hasattr(f, '__call__'):
                        try:
                            if isinstance(f, (functools.partial)):
                                f = f.func
                            filename = inspect.getsourcefile(f)
                            details = {'funcname':f.__name__,
                                       'filename':filename[len(request.folder):] if request.folder in filename else None,
                                       'lineno': inspect.getsourcelines(f)[1]}
                            if details['filename']: # Built in functions as delete_uploaded_files are not editable
                                details['url'] = URL(a='admin',c='default',f='edit', args=[request['application'], details['filename']],vars={'lineno':details['lineno']})
                            if details['filename'] or with_build_it:
                                functions.append(details)
                        # compiled app and windows build don't support code inspection
                        except:
                            pass
                if len(functions):
                    method_hooks.append({'name':op, 'functions':functions})
            if len(method_hooks):
                tables.append({'name':"%s.%s" % (db_str,t), 'slug': IS_SLUG()("%s.%s" % (db_str,t))[0], 'method_hooks':method_hooks})
    # Render
    ul_main = UL(_class='nav nav-list')
    for t in tables:
        ul_main.append(A(t['name'], _onclick="collapse('a_%s')" % t['slug']))
        ul_t = UL(_class='nav nav-list', _id="a_%s" % t['slug'], _style='display:none')
        for op in t['method_hooks']:
            ul_t.append(LI (op['name']))
            ul_t.append(UL([LI(A(f['funcname'], _class="editor_filelink", _href=f['url']if 'url' in f else None, **{'_data-lineno':f['lineno']-1})) for f in op['functions']]))
        ul_main.append(ul_t)
    return ul_main


Little Creek Hutterite Colony was founded in 2009 as a division from the Waldheim Hutterite Colony. In 2017 the Little Creek Hutterite Colony was a Schmiedeleut Group 1 colony.
Friesen, Bert. "Little Creek Hutterite Colony (Marquette, Manitoba, Canada)." Global Anabaptist Mennonite Encyclopedia Online. May 2018. Web. 23 Apr 2019. http://gameo.org/index.php?title=Little_Creek_Hutterite_Colony_(Marquette,_Manitoba,_Canada)&oldid=160784.
Friesen, Bert. (May 2018). Little Creek Hutterite Colony (Marquette, Manitoba, Canada). Global Anabaptist Mennonite Encyclopedia Online. Retrieved 23 April 2019, from http://gameo.org/index.php?title=Little_Creek_Hutterite_Colony_(Marquette,_Manitoba,_Canada)&oldid=160784.
This page was last modified on 30 May 2018, at 22:27.


Whether you're an aluminium smelter starting up or a continuous consumer of Bath Material, we have the right solution and technical support you need. Within the industry, we have vast experience with assisting smelter startups. Having partnerships with a large community of contracted smelters that provide surplus Bath Material, we can guarantee timely delivery of Bath Material that has been approved by our state-of-the-art quality control process.


Note: A minimum order of 4 units of this item is required for purchase.
The lightweight Petzl OK TRIACT-LOCK aluminum oval carabiner allows optimal loading of devices with a wide cross-section, such as pulleys, rope clamps and mobile fall arresters. Its TRIACT-LOCK Keylock system helps avoid any involuntary snagging of the carabiners. OK can be connected to the CAPTIV bar to favor positioning of the carabiner along the major axis, to limit the risk of it flipping and to keep it integrated with the device.


Qualcomm has built a strong position in developing and manufacturing mobile processors based on the ARM architecture, with its Snapdragon systems-on-chip (SoCs) serving as the heart of a number of leading mobile devices. If you are using a Google Pixel or a Microsoft Lumia smartphone, among many others, then you are using a Qualcomm Snapdragon of one generation or another.
While the next Snapdragon generation is just about confirmed as the Snapdragon 835, the specifics about the new SoC haven't been revealed. On Tuesday, some questionable information leaked from a Chinese website that allegedly provides some new information on Qualcomm's latest SoC, as Neowin reports.
We already know from Qualcomm that the Snapdragon 835, model number MSM8998, will use Samsung's 10nm FinFET fabrication process that should provide unparalleled efficiency by packing more parts into a smaller space. Qualcomm indicates the new SoC should use 40 percent less power than the Snapdragon 820 and 821 that preceded it while providing 27 percent better performance. The Snapdragon 835 will also offer faster Quick Charge 3.0 technology. Otherwise, Qualcomm didn't provide any additional details on the Snapdragon 835's design.
The leaked information, however, if true, fleshes out the specifications for us. If it holds up, then we should expect the Snapdragon 835 to utilize an octa-core Kryo 200 CPU, X16 modem with 1Gbps download speed supporting LTE Cat 13, and a disappointing Adreno 540 GPU. That last part would be a recycling of fifth-generation GPU technology rather than moving on the sixth-generation offering such as the Adreno 630.
Some of the other specifications included in the leak create some questions about the information's accuracy, according to Neowin. For example, the lower-end Snapdragon 660 listed in the leak indicates a higher-performance CPU component than the flagship Snapdragon 835. In addition, the model numbers don't match up well with the components themselves.
In any event, we should not have to wait too long for more reliable specifications. Samsung's Galaxy S8 could use the new Snapdragon 835 SoC and be released at Mobile World Congress 2017 and so all should be revealed then, if not sooner. In the meantime, remember these are all rumors and at the very least, the Snapdragon 835 should represent another step forward in mobile battery life and processing power.


text:
A Sociology Source
John Scott CBE
History of Sociology
A biographical journey
Shaping a Sociological Career
Reflections on Essex Sociology
An Accidental Methodologist
John Scott CBE FBA, FAcSS DU Essex (Hon) is a British sociologist working on issues of economic and political sociology, social stratification, the history of sociology, and social network analysis.
John Scott, Sociologist
I have been Professor of Sociology at the Universities of Plymouth, Leicester, and Essex and have also taught at Strathclyde University. I have held Honorary Professorships at Bergen University, Exeter University, and Copenhagen University, and am currently also a Visiting Professor at Essex University.
I am a Fellow of the British Academy, a Fellow of the Academy of the Social Sciences, and a Fellow of the Royal Society of Arts.
I was awarded a CBE in 2013 for Services to Social Science, the BSA Distinguished Service for Sociology award in 2014, and an Honorary Doctorate of the University of Essex in 2016.
I have very broad interests in sociology, but the core areas in which I have undertaken research can be broadly grouped into four divisions as shown in the panel.
My core areas of research
History of Sociology: The varied national histories of sociology, but especially the history of British sociology.
Social Theory: Understanding the many theoretical approaches to studying social phenomena, especially those developed within sociology.
Social Structure: Substantive issues concerning the constraining structures that influence human activity, especially those relating to economic organisation, social stratification, and power.
Research Methods: Methodology, philosophy of science, and the specific research methods that I have used and worked on in my work.
The Emerald Guide to Talcott Parsons
Bingley, Emerald Publishing, 2020
This book is an introductory guide to the work of Talcott Parsons, designed specifically for students and those new to his work. It offers a comprehensive guide to reading and understanding the development...
Buy online View all books
Latest from The Sociology Post
The Hidden History of British Sociology
The history of British sociology is an underdeveloped area of research, though recent work has begun the task of reconstructing this largely unknown history. Work underway aims to build a history of the...
Continue reading View all posts
© 2021 John Scott CBE, all rights reserved.


text:
description("Tests that when a request is made on a Geolocation object, permission is denied and its Frame is disconnected before a callback is made, no callbacks are made.");

if (!window.testRunner || !window.internals)
    debug('This test can not run without testRunner or internals');

internals.setGeolocationClientMock(document);

// Prime the Geolocation instance by denying permission. This makes sure that we execute the
// same code path for both preemptive and non-preemptive permissions policies.
internals.setGeolocationPermission(document, false);
internals.setGeolocationPosition(document, 51.478, -0.166, 100);

var error;
function onIframeLoaded() {
    iframeGeolocation = iframe.contentWindow.navigator.geolocation;
    iframeGeolocation.getCurrentPosition(function() {
        testFailed('Success callback invoked unexpectedly');
        finishJSTest();
    }, function(e) {
        error = e;
        shouldBe('error.code', 'error.PERMISSION_DENIED');
        shouldBe('error.message', '"User denied Geolocation"');
        debug('');
        iframe.src = 'data:text/html,This frame should be visible when the test completes';
    });
}

function onIframeUnloaded() {
    // Make another request, with permission already denied.
    iframeGeolocation.getCurrentPosition(function () {
        testFailed('Success callback invoked unexpectedly');
        finishJSTest();
    }, function(e) {
        testFailed('Error callback invoked unexpectedly');
        finishJSTest();
    });
    setTimeout(function() {
        testPassed('No callbacks invoked');
        finishJSTest();
    }, 100);
}

var iframe = document.createElement('iframe');
iframe.src = 'resources/disconnected-frame-inner.html';
document.body.appendChild(iframe);

window.jsTestIsAsync = true;


No terminal at T5 5 Screw with Cage Clamps. As the section contaiming internal connections is labeled: ' ' SP1ML OpenPlatform  Optimized use cases' ', I hope it is okay to give out the pin list. STMicroelectronics' SPIRIT1 transceiver is a RF transceiver with low power used for RF wireless applications and can be. Details of the supplier of the safety data sheet Supplier Barrettine Barrettine Works St Ivel Way Warmley Bristol BS30 8TY co. Hope Haven Spirit spirit Lake 1 27th St Spirit Lake IA 51360. Download Datasheet Quick View.
Ask an ST FAE about ' ' SP1ML detailed presentationV2. resonate 480 st safety data sheet page 1 of 6. Please excuse eventual trancription errors. 5/ 25 kHz, complying with the ENstandard. 5V 64 Byte I datasheet ST, spirit E P, SN, SM MF - Industrial ( I) : - 40 Cto + 85 C - Automotive ( E) : - 40° C to + 125° C spirit Name Function CS Chip Select Input SO Serial datasheet Data Output WP Write- Protect VSS Ground SI Serial Data Input SCK Serial Clock Input HOLD Hold Input VCC Supply Voltage CS SO WP VSS 1 2 3. STMicroelectronics SPIRIT1QTR: 794, 733 available from 20 distributors.
Get directions information for Hope Haven Spirit Lake in Spirit Lake, reviews IA. Explore Integrated Circuits ( ICs) on Octopart: the fastest source for datasheets specs , pricing availability. company spirit address: albaugh, llc. ensure high reliability. 5V 64 Byte I E P, ST, SN, SM MF 25AA256 1. Datasheet Photo EDA/ datasheet CAD Models. The air data rate is programmable from 1 to 500 kbps the SPIRIT1 can be used in systems with channel spacing of 12.
Typically measured performance; not a guaranteed or warranted specification. Datasheets: SPIRIT1 spirit Datasheet. Relevant identified uses of the substance mixture , uses advised datasheet against Identified uses For thinning paint, brush maintenance, degreasing etc. Spirit 1 st datasheet. 1N 2N 2SA 2SC 74 AD BA BC BD BF BU CXA HCF IRF KA KIA LA spirit LM MC NE ST STK TDA TL UA LM317 LM339. Spirit 1 st datasheet. com Datasheet ( data sheet) search for integrated circuits ( ic) other electronic components such as resistors, transistors , capacitors, semiconductors diodes. 4mm) TAB ( QC) 4 Screw with Cage Clamps B 5. St Ivel Way Warmley Bristol BS30 8TY.
Spirit 1st spirit reaches its mission through sports and community outreach to datasheet make disciples of Christ that make disciples of Christ. SPIRIT MP3 Encoder supports MPEG 1 2 Audio Layer III datasheet standards their low bit rate extension MPEG 2. carry all the required components to evaluate ST devices and spirit build STM32. SAFETY DATA SHEET White Spirit ( spirit R) Revision date: 24/ 02/ Revision: 1 Supersedes date: 16/ 02/. No terminal at T5 1 Series 2 Circuit 4 Rating 5 Termination 6 Actuator Style 3 Poles ST A 2 E 1 spirit 53 1 SERIES 1 ST Sealed Toggle 6 ACTUATOR STYLE TOGGLE ( SEALED METAL) Without With Panel Toggle. Environmental: RoHS Compliant Non- RoHS Compliant spirit PRODUCTS MANUFACTURERS RESOURCES. Fully automated datasheet beam pointing stability during 24/ 7 operation, computer controlled, Spirit One has exceptional power , resulting in high precision reproducibility for demanding applications. Contents SPIRIT1 2/ 104 DocID0227. ST Microelectronics catalog First Page data sheet, spirit datasheets, datasheet, diodes, triacs, integrated circuits, datasheet search, Semiconductors, Datasheet search site for Electronic Components semiconductors.
Pricing and Availability on millions of electronic components from Digi- Key Electronics. It uses a very small number of discrete external components spirit integrates a configurable baseband modem which supports data spirit management. It can be effectively used in such applications as portable audio systems, wireless. VL53L0CXV0DH/ 1 – Optical Sensor 200cm I²C Output from STMicroelectronics. section 1 - chemical product and company identification. Internet of Things and the ST Portfolio of Wireless Modules. SPIRIT1QTR IC RF TxRx Only General ISM 1GHz 150MHz ~ 174MHz,. The mission datasheet of Spirit 1st Ministries is to KNOW CHRIST, SERVE CHRIST & datasheet MAKE HIM KNOWN. Order today, ships today. Spirit One Beam Profile1 1. SPIRIT1 low power sub- 1GHZ transceiver Components datasheet pdf data sheet FREE from Datasheet4U.
Datasheet SPIRIT1 Product Info. Sub- 1GHZ Transceiver. STMicroelectronics SPIRIT1 is a very low- power RF transceiver intended for RF wireless applications in the sub- 1GHz band. SPIRIT1 is designed to operate both in the license- free ISM and SRD frequency bands at 169, 315, 433, 868, and 915MHz. 1 SAFETY DATA SHEET 1. IDENTIFICATION OF SUBSTANCE/ PREPARATION AND COMPANY PRODUCT NAME: B& Q WHITE SPIRIT CHEMICAL FAMILY: PETROLEUM DISTILLATE SKU,, PRODUCT USES: A highly refined solvent suitable for general degreasing purposes, brush cleaning and paint thinning.
SUPPLIER: Bartoline Limited Barmston close. October DocID0227 1/ 104.
Datasheet - production data Features • Frequency bands: MHz, MHz, MHz, MHz • Modulation schemes: 2- FSK, GFSK, MSK, GMSK, OOK, and ASK • Air data rate from 1 to 500 kbps.


When you're ready to start your next storage project, come see us at Affordable Family Storage. Our Omaha self storage facility is situated at 5646 North 90th Street near First National Bank and McDonald's. We're located near Tranquility Park, Benson Park Plaza, Northwest HIgh School, making us easy to find from any part of Omaha. If you live in Green Meadows, Bennington, Carter Lake, NE or Council Bluffs, IA, we're just a short drive away.


Pricing will be provided by 3 local distributors after completing your shopping list.
Forecast Sales is not affiliated with nor is it endorsed by the above manufacturer(s). The product depicted above is not produced or authorized by the above manufacturer(s), with the exception of Forecast Sales/Pirate Brand, RPB Safety, and Bullard.
NOT ONLY IS X-TREME DUTY™ CONTROL CORD EXTRA DURABLE, IT IS ALSO VERY FLEXIBLE AND EASY TO WORK WITH!


CPAP machines are the usual treatment for sleep apnea. These create a positive pressure that forces air to the lungs, preventing the interruptions of air flow and providing proper blood oxygenation. A recent study has determined that CPAP machines can also be used for patients who have experienced a stroke, and there is disordered breathing due to brain injury. This is similar to a lesser-known of sleep apnea called neurological sleep apnea. In the most common type, obstructive sleep apnea, the airway is obstructed by relaxed tissue at the back of the tongue, a thick neck, among other causes. Neurological sleep apnea occurs when the brain is unable to send the proper signals for continuous breathing. Additional details click here.


text:
Sorceress es el duodécimo álbum de la banda sueca de rock progresivo, Opeth. Lanzado el 30 de septiembre de 2016 bajo su nuevo sello Nuclear Blast Records y Moderbolaget Records.

Lista de canciones

Véase también
 Seventh Sojourn
 «Strange Brew»
 «Voodoo Child (Slight Return)»

Álbumes de 2016
Álbumes de Opeth
Álbumes en inglés
Álbumes producidos por Tom Dalgety
Álbumes de Nuclear Blast Records

redpajama_set_name: RedPajamaWikipedia


Today we are open sourcing Gen: a lightweight wrapper around Swift's randomness API's that makes randomess more composable, transformable and controllable!
We are excited to announce the 0.1.0 release of Gen, a new API for expressing randomness in Swift. Its focus is on composability (combining multiple forms of randomness into new forms of randomness), transformability (applying functions to randomness), and controllability (deterministic pseudo-randomness for times we need it). With these three features you can break down large, complex forms of randomness into smaller, simpler pieces, and you can write tests for it!
Swift's randomness API is powerful and simple to use. It allows us to create random values from many basic types, such as booleans and numeric types, and it allows us to randomly shuffle arrays and pluck random elements from collections.
However, it does not make it easy for us to extend the randomness API. For example, while it may gives us ways of generating random booleans, numeric values, and even ways to shuffle arrays and pluck random elements from arrays, it says nothing about creating random strings, random collections of values, or random values from our own data types.
Further, the API is not very composable, which would allow us to create complex types of randomness from simpler pieces. One primarily uses the API by calling static random functions on types, such as Int.random(in: 0...9), but there is no guidance on how to generate new types of randomness from existing randomness.
Already this is a form of randomness that Swift's API's do not provide out of the box.
Gen provides many operators for generating new types of randomness, such as map, flatMap and zip, as well as helper functions for generating random arrays, sets, dictionaries, string, distributions and more! A random password generator, for example, is just a few operators away.
// Take a generator of random letters and numbers.
// Generate 6-character strings of them.
// Generate 3 segments of these strings.
Gen.int(in: 0...9).run(using: &lcrng) // "8"
Gen.int(in: 0...9).run(using: &lcrng) // "1"
Gen.int(in: 0...9).run(using: &lcrng) // "7"
This means you don't have to sacrifice testability when leveraging randomness in your application.
The Gen type has been explored on Point-Free numerous times. We began by showing that randomness can be made composable by expressiong it as a function. This allowed us to define map, flatMap and zip operations on randomness, which helped us create very complex forms of randomness for just a few small, simple pieces.
In order to show just how powerful composable randomness is, we wrote a blog post demonstrating how to create a Zalgo text generator. This consisted of defining small generators that do a specific thing, such as generating special unicode characters, and the piecing them together to finally give us the generator that allows us to create bizarre strings such as: P̵̙̬̬̝̹̰̜ͧ̿o̎ĩͪͪ͗n͓̪̝̓t̊̏̾̊̆-̦̲̥͉F̠͖͈̮̾́ͨ͐͝r̸͋̆̅̅ͪ̚ë̝͑ͣ̒̏̈́̉e̟̺̪͕̹͆ͩͯ̑ͣ͂̉.
Then we showed how randomness can be made controllable (part 1 and part 2) by slightly tweaking Gen definition so that it took a RandomNumberGenerator, which is the Swift protocol that powers all of Swift's randomness API's. This allowed us to keep all of Gen's nice compositional properties while also allowing us to plug in our own random number generators. In particular, we can use a deterministic, seedable, pseudo-random number generator in tests so that we can still test code that invokes randomness API's.
The official 0.1.0 release of Gen is on GitHub now, and we have more improvements and refinements coming soon. We hope that Gen will help you control the complexity in your applications that arises from randomness, both by making the randomness simpler to understand and easier to test.
Today we're releasing our first minor update to swift-html, a Swift DSL for type-safe, extensible, and transformable HTML documents. In fact, this very page was rendered with it!
We've been battle-testing this library for awhile now, long before its initial release last September. Today's release contains a number of new features and fixes, including several patches from the community!
While we imagined swift-html to be most useful on the server with server-side Swift becoming more and more popular, a pull request let us know that there was interest in using our library on iOS, as well! With the help of the community we now support being embedded in your iOS, tvOS, and watchOS apps. Now you can render HTML in a type-safe manner just about anywhere!
We've also made installing swift-html on these platforms easier than ever by adding support for Carthage and CocoaPods. Check out the installation instructions to get started.
We've added a new debugRender function that will render HTML nodes in a more human-readable format by indenting each node.
//       You've found our site!
While this rendering format is not suitable for the browser (it can introduce additional, unwanted whitespace), it's perfect for reading and snapshot testing.
Speaking of snapshot testing, swift-html now comes with a helper module, HtmlSnapshotTesting!
A couple months ago we had our first official release of SnapshotTesting, a library that lets you snapshot test not only UIViews to images, but any value to any format. We've been snapshot testing the HTML of the Point-Free web site since day one, so we're excited to make this kind of testing easier for everyone.
You can snapshot test swift-html's Node type using the html strategy.
This release also contains a few bug fixes from the community and free rendering performance improvements thanks to a heavy dose of inout.
To give swift-html a try today, check out its GitHub page.
We launched on January 29 of this year, and next month are approaching our one year anniversay. In that time we have released 41 episodes with over 19 hours of video (9 of which are free for all), published 25 blog posts, served over 36,000 unique visitors, and open sourced 8 (!) libraries from the topics covered in our episodes! We're really proud of everything we produced for 2018, so join us for a quick review of some of our favorite highlights.
We produced 41 episodes this year, about one every 1.2 weeks. We covered a broad set of topics, from the foundational ideas that somehow come up again-and-again, to the more practical, down-to-earth ideas that you can immediately bring into your code base today. The balance of these two sides is important because without the practical episodes it is hard to see the forest from the trees, and without the abstract episodes we'd be stuck in an endless loop of adding superficial niceties to our code that don't meaningfully improve it in a significant way.
We ended the year with a bang! We've spent nine whole episodes rethinking the community best-practice of "protocol-oriented programming". We started our series on "protocol witnesses" by showing how many basic protocol features and functionality can be implemented using just concrete data types and functions. We even showed that this translation is completely mechanical: that given any protocol, there is a clear path to defining a data type equivalent (part 1, part 2).
We then dove into some of the more advanced features of protocols (part 1, part 2), some of which we only got recently, like conditional conformance. We saw how these features manifest in the "protocol witness" world as plain ole functions. With witnesses we we didn't have to wait. We were able to take advantage of conditional conformance with the very first version of Swift.
We wrapped things up with four down-to-earth episodes where we tool a real-world library, abstracted it to work with protocols (part 1, part 2), reabstracted it to work with witnesses, and finally fixed a problem with the libary that prevented it from working on asynchronous values.
We spent several episodes diving deep into the zip function. While many of us are aware of zip on arrays and may have even reached for it on occasion, it may be surprising that zip appears on structures almost as often as map! The implications are perhaps even more interesting. We saw that zip on optionals mirrors optional sugar that we're used to with if-let binding. We saw that zip on the result type made us question the structure of the result type itself. And we saw that zip on an asynchronous type was a natural way to think about parallelism.
Zip has popped up in a number of our open source libraries, including swift-overture and swift-validation.
The Tagged type provides a lightweight wrapper around any type so that you can safely distinguish between, say, an Int-based user id and an Int-based blog post id. It uses a phantom generic and some powerful Swift features, like conditional conformance, to make it easy to make your code safer.
In our 3rd of 41 episodes we showed that composition was truly applicable to everyday code. It's still one of our most popular episodes to date!
There are many different ways to combine and reuse styling logic for iOS views, but we showed that plain ole functions are the simplest solution.
Later on in the year we revisited UIKit styling using our swift-overture library, allowing us to introduce the concept of composing styling functions without the need for operators, and with the addition of some expressive setter functions using Swift key paths.
We've had several episodes on managing dependencies using Environment so far and we have more to come. It's one of the easiest ways to understand where dependencies are lurking in your code and make these untestable parts of your code base fully testable.
Stephen further spread the word at a talk this year at NSSpain, which we made available in blog form soonafter.
We knew we wanted to do as much of Point-Free in the open as possible, so this very site has been open source from the very beginning. We built this site from first principles in a functional style, writing each component as open source along the way.
Since our launch, we even open sourced libraries from the content in our episodes: 8 in total! And 4 of these libraries has a home in the official Swift Source Compatibility Suite. Each of these libraries aims to solve a single problem in the simplest way possible in order to minimize the cost of bringing the dependency into your project.
Our open source work has accrued over 3,800 stars on GitHub! We're so thankful that the community has expressed such an interest!
Our most recently open sourced library, swift-snapshot-testing, takes snapshot testing to the next level. It allows you to snapshot test any kind of data type into any kind of format. For example, you can snapshot test UIViews and UIViewControllers into an image format, which is typical of these kinds of libraries, but you can also snapshot those objects into a textual format so that you can see the whole view hierarchy. And this kind of snapshot testing isn't limited to UI! You can snapshot any value into any format using a number of strategies that ship with the library, or you can define new strategies yourself!
Server-side Swift is still in its nascent stages, but there have been some promising developments in the field, such as the Swift NIO project. Currently the most popular way to render HTML pages in server-side Swift is with templating languages, but there are a lot of problems with templates. We open sourced the swift-html library to remedy these problems by providing a first-class data type to represent HTML and a way to render that data to an HTML string that can be sent to the browser. In fact, this library powers the HTML rendering of this very site!
The two most popular server-side Swift frameworks are Kitura and Vapor, but both use templating languages as the default way to render HTML. Luckily each framework provides a way to use your own view layer, and so both swift-html-kitura and swift-html-vapor are small libraries to help you use our swift-html library in either framework.
After covering the Tagged type in an episode, we open sourced swift-tagged to make it easier for everyone to benefit from this powerful type.
Swift error handling is built around Optional, Result, and throws. These constructs allow us to write a sequence of failable instructions to Swift and return nil, failure, or throw an error to short-circuit things and bail out of the happy path.
This correspondence between Optional, Result, and throws is interesting on its own, but we spent several episodes exploring the zip function beyond its usualy definition on arrays, and we discovered something interesting: zip gives us the ability to accumulate multiple errors when more than one input is invalid, a common thing we want with form data, and something that short-circuiting throws can't do.
To make this functionality available to everyone, we open sourced Validated, a Result-like type that can accumulate multiple errors.
Thanks for joining us on the first year of our journey! We have great material for 2019 and hope to see you then.
To end 2018 on a high note we're offering a 30% discount to new subscribers for their first year. Just click through to read the full post below! We hope you'll join us for all of the great material we have planned for 2019.
Today we are open sourcing SnapshotTesting 1.0: a modern, composable snapshot testing library built entirely in Swift!
We've seen that contramap is a powerful operation, but the name isn't fantastic. We propose a much more intuitive name for this operation, and in doing so make our code much easier to read.
APIs that interact with the outside world are unpredictable and make it difficult to test and simulate code paths in our apps. Existing solutions to this problem are verbose and complicated, so let's explore a simpler solution by embracing singletons and global mutation, and rejecting protocol-oriented programming and dependency injection.
Watch episodes in your favorite podcast app!
Follow along with the newest Point-Free episodes using your favorite podcast app. We now support podcast-friendly RSS feeds for viewing all of our videos.
Let's create a random Zalgo text generator using the simple Gen type we defined in this week's episode!
Today we're releasing a Kitura plug-in for rendering type-safe HTML. It provides a Swift compile-time API to HTML that prevents many of the runtime errors and vulnerabilities of traditional templated HTML rendering.
Today we're releasing a Vapor plug-in for rendering type-safe HTML. It provides a Swift compile-time API to HTML that prevents many of the runtime errors and vulnerabilities of traditional templated HTML rendering.
Today we are open sourcing a new library for building HTML documents in Swift. It's extensible, transformable, type-safe, and provides many benefits over templating languages.
Today we are releasing Overture 0.3.0 with a bunch of useful zip functions.
Today we are open sourcing Validated, a tiny functional Swift library for handling multiple errors: functionality that you don't get from throwing functions and the Result type.
Today we solve the exercises to the third and final part of our introductory series on zip.
Today we solve the exercises to the second part of our introductory series on zip.
Today we solve the exercises to the first part of our introductory series on zip.
Get 50% off your Point-Free subscription with proof of enrollment at a university or coding school.
This week marks 6 months since our launch, and we're making one of our most popular episodes free to the public!
What happens when we combine Swift's conditional conformance with codability?
Today we are open sourcing NonEmpty, a Swift library for modeling non-empty collection types. This small library can help make your code safer and more expressive with very little work.
Let's create a type-safe interface for dealing with seconds and milliseconds in our programs. We'll use the `Tagged` type, which allows us to construct all new types in a lightweight way.
Styling with Functions: Free for Everyone!
We are making one of our early episodes, "UIKit Styling with Functions", free to everyone today! It's a seminal episode that sets the foundation for some later work in the Point-Free series.
Announcing Overture 0.2.0! This release is all about setters: functions that allow us to build complex transformations out of smaller units.
This week we solve the exercises from our episode on contravariance, because there were _a lot_ of them!
Let's look at a real world use for algebraic data types. We will refactor a data type that is used in the code on this very site so that the invalid states are unrepresentable by the compiler.
Today we are excited to announcement launch of Point-Free Pointers, a blog to supplement our video series for all the content we couldn't fit in. Expect to find regularly postings here that dive even deeper into functional programming, showing real world use cases and more!


The Lewis Family Probiotic contains 25 billion living organisms per capsule (that's almost 4 times the Earth's population in every dose!), with a wonderful diversity of the most important strains of beneficial probiotic organisms. Read the labels of other products: no other probiotic comes close in quantity and quality!
We've chosen a stable, sturdy capsule delivery system which ensures our probiotic does not break down too soon in the digestive tract, but instead is delivered viably to the correct part of your digestive system. This same sturdy configuration means it also stores well in your fridge.
Probiotic supplements promote proper digestion and are vital to supporting the body's immune system; after all, the digestive system is where our body rids itself of toxins and pathogenic microbes. 70% of our immune cells live here!
As with all our Lewis Family supplements, we chose our probiotic for its outstanding effectiveness, quality, and value. Many companies might have probiotics as part of their supplement line; our manufacturer specializes in probiotics and makes this product to exacting standards. Third-party research verifies what's on the label is what's actually in the capsule.
Of all the supplements in the marketplace, probiotics have the biggest quality gap between commercial grade and professional, physician-grade. Medical-grade probiotics really do differ significantly in quality; many commercial products can't even meet their label claims.
The bottom line: the benefit other probiotics promote is the actual benefit you get with the Lewis Family Probiotic. It's so effective we take it ourselves, and give the child version to our daughter.
Probiotic Blend ...180mg Lactobacillus rhamnosus ...6.0+ billion CFUs Bifidobacterium bifidum ...5.0+ billion CFUs Lactobacillus acidophilus ...3.0+ billion CFUs Lactobacillus casei ...2.5+ billion CFUs Lactobacillus plantarum ...2.0+ billion CFUs Lactobacillus salivarius ...2.0+ billion CFUs Bifidobacterium longum ...1.0+ billion CFUs Streptococcus thermophilus ...1.0+ billion CFUs Lactobacillus bulgaricus ...1.0+ billion CFUs Lactobacillus paracasei ...0.5+ billion CFUs Bifidobacterium infantis ...0.5+ billion CFUs Bifidobacterium breve ...0.5+ billion CFUs Dosage: As a dietary supplement, take one (1) capsule daily or as directed by a physician.


La moncisme es la modo de vive relijial en cual un renunsia a la xasa mundal per dedica se plen a laboras spirital. La vive moncal ave un rol importante en multe eglesas cristian, spesial en la tradisional catolica e ortodox. Formas simil de vive relijial esiste en otra relijios, xef en budisme, ma ance en induisme e jainisme, an si la espresa difere notable. Par contrasta, en otra relijios moncisme no es praticada e an es criticada, como en islam e zoroastrisme o ave un rol marjinal como en iudisme.
Fracchia, Charles. Living Together Alone: The New American Monasticism. Harper & Row, 1979. .
Johnston, William M. (ed.). 2000. Encyclopedia of Monasticism. 2 vols., Chicago: Fitzroy Dearborn Publishers.
Lawrence, C. H. 2001. Medieval Monasticism: Forms of Religious Life in Western Europe in the Middle Ages (3rd Edition). New York: Longmans.
Zarnecki, George. 1985. "The Monastic World: The Contributions of the Orders". Pp. 36–66, in Evans, Joan (ed.). 1985. The Flowering of the Middle Ages. London: Thames and Hudson Ltd.


text:
<?php

namespace YumlPhp\Builder;

use Buzz\Browser;
use Buzz\Message\Response;
use YumlPhp\Request\RequestInterface;

/**
 * common HttpBuilder for API requests.
 *
 * @author Robert Schönthal <seroscho@googlemail.com>
 */
class HttpBuilder extends Builder
{
    /**
     * @var \Buzz\Browser
     */
    private $browser;

    /**
     * injects the http client.
     *
     * @param RequestInterface $request
     * @param Browser          $browser
     * @param string           $type
     */
    public function __construct(RequestInterface $request, Browser $browser, $type)
    {
        $this->browser = $browser;

        parent::__construct($request, $type);
    }

    /**
     * request the diagram from the API.
     *
     * @throws \RuntimeException
     *
     * @return array|string
     */
    public function request(array $request)
    {
        $url = $this->configuration['url'];

        if ($this->configuration['debug']) {
            return implode(',', $request);
        }

        if (!count($request)) {
            throw new \RuntimeException('No Request built for: ' . $this->path);
        }

        $response = $this->browser->post($url, [], 'dsl_text=' . urlencode(implode(',', $request)));

        if ($response instanceof Response && $response->isSuccessful()) {
            $file = $response->getContent();

            return [
                '<info>PNG</info> http://yuml.me/' . $file,
                '<info>URL</info> http://yuml.me/edit/' . str_replace('.png', '', $file),
                '<info>PDF</info> http://yuml.me/' . str_replace('.png', '.pdf', $file),
                '<info>JSON</info> http://yuml.me/' . str_replace('.png', '.json', $file),
                '<info>SVG</info> http://yuml.me/' . str_replace('.png', '.svg', $file),
            ];
        }

        throw new \RuntimeException('API Error for Request: ' . $url . implode(',', $request));
    }
}


text:
#la_banner_box_6002880294eb4 .item--overlay{ background-color: ; } #la_banner_box_6002880294eb4:hover .item--overlay{ background-color: rgba(10,10,10,0.2); }
Barco® Uniforms Partners with National Restaurant Association and ServSafe® to Distribute 20,000 Reusable Masks
Premium Healthcare apparel company donates masks to restaurant operators who have signed up for the ServSafe Commitment; Program outlines best practices to reduce the spread of COVID-19, and protect the health and safety of guests and employees
LOS ANGELES, Dec. 15, 2020 /PRNewswire/ — Barco® Uniforms, a recognized leader of design innovation in the premium Healthcare apparel industry, announced today it has partnered with National Restaurant Association and ServSafe to donate and distribute 20,000 reusable face masks to restaurant operators across the United States.
While Barco has focused on designing and manufacturing premium Healthcare apparel for more than 90 years, it has expanded its product line to support essential workers and everyday heroes who do their part to keep their community safe, including those in the foodservice industry.
Operators who sign up for the ServSafe Dining Commitment demonstrate an ongoing commitment to protecting the health and safety of all guests and employees, in addition to following all federal, state and local guidance or regulations concerning cleaning and sanitation, personal hygiene, social distancing, and health monitoring.
For 30 years, ServSafe has been at the forefront of preparing restaurant and foodservice workers to deliver safe hospitality experiences for their guests, while also keeping themselves safe. ServSafe's safety training and certification program is sponsored by the National Restaurant Association, the leading business association for the restaurant industry, which comprises one million restaurant and foodservice outlets and a workforce of 15.6 million employees.
As restaurants continue the challenging process of reopening their dining rooms following closures due to COVID-19, protecting the health and safety of employees and guests is a priority. Most states require restaurant employees to wear a face covering; they also encourage employers to provide them with masks and other PPE.
"We honor and serve our everyday heroes who selflessly work on the front line each day to serve others," said Barco president/CEO David Murphy. "As businesses begin to open back up and more than 15 million individuals employed in the restaurant industry return to work, everyone needs to do their part to prevent the spread of COVID-19. Masks are the most impactful way to do that, and it's the most visible symbol of a restaurant's commitment to keeping everyone safe and healthy."
"Patron and employee safety have been our focus throughout the pandemic," said Sherman Brown, executive vice president of Training and Certification for the National Restaurant Association. "Masks are the frontline of safety in our operations. This partnership will help ensure that restaurants that have made the ServSafe Dining Commitment have the needed resources to continue to welcome their communities to their tables."


text:
The Chairman
Maulana Muhammad Ibrahim Mirpuri
After completing studies in Pakistan under many teachers including Shaykh Ahmed Ullah (the direct student of the Imam Nadheer Hussain Dehlawi), Maulana Ibrahim became a khateeb in Mirpur and began running the dawah centres there.
After this he travelled to study in Madina in the 1970s, where he benefitted from the daroos of Shaykh Al-Albaani, Shaykh Abdul Ghaffar Hasan, Shaykh Abdul Muhsin Al-Abaad and Shaykh Rabee bin Hadee al-Madhkhali. Unfortunately his mother became ill and he had to return to Pakistan to attend to her, cutting his studies short.
Maulana Ibrahim studied under Shaykh Abdullah Ropuri. He spent many years as a companion of Maulana Muhammad Hussain Sheikhupuri (the student of the Imam SanaUllah Amritsari) where they travelled and gave dawah together.
His vigour in the field of dawah lead him to Dubai, where he was a khateeb in Masjid Imam Malik (UAE) from 1985-1998. In 1994 during a brief visit to the UK,
After much deliberation, Maulana Ibrahim moved to the UK where he became the Imam and leading figure in the community for many years. Upon inception of Islamic Welfare Trust, he was honoured with its Chairmanship. He lives in Birmingham and is a Khateeb and Imam.


Cryptocurrencies have dominated the headlines over the last year, but they have been silently creating a revolution in the world of transactions.
Even though cryptocurrencies have the potential to replace the banking sector in its current form, this industry could be amongst the first to adopt bitcoins on a large scale. Banks would welcome working together with cryptocurrencies as a better option rather than being overpowered by the same. A number of banks have been in discussions to adopt the technology behind cryptocurrencies. Ripple is one of the names creating a major impact in this space, but the popularity surrounding bitcoins make them an ideal option to cut out the middleman in the banking sector.
Hedge funds have long been regarded as the key player in the world business markets, as they control huge sums of money. After trading in markets across the world, the hedge fund industry has been taking a long hard look at the cryptocurrency space with interesting recent years. Bitcoin is the preferred choice for the hedge fund industry to place the initial steps. At the start of 2017, there were less than 50 hedge funds involved in trading on cryptocurrencies. Today, there are more than four times this figure and this industry is expected to meet with a rapid rise going forward. Hedge funds are obviously attracted by the immense returns provided by cryptocurrencies.
Online casino space has been growing a lot in the last couple of years, but the tough regulations in the industry coupled with the threat from hackers mean that there is even bigger space left to exploit. Cryptocurrencies are a way to tap this space, as they are now online casinos to appeal to new players from around the world. They can open their doors to this new audience, who can benefit from the lower transaction costs involved when transferring funds through bitcoin – even after the astronomical rise in price in 2017. It is not just the online casino segment that has benefited from cryptocurrencies, but land-based casinos are also among them. According to a post from BetWay, they have not seen land-based casinos instantly adopt to bitcoins, citing conversion issues with the currency's rapidly fluctuating exchange rates.
The Internet advertising industry has suffered from a lack of protocols. Advertising, though, is a very powerful medium with an Internet and bitcoins can take it to the next level. Rather than just relying upon AdSense, which is effectively a middleman from Google, users can take their advertising potential and revenue to the next level by using bitcoins and associated block chain technology. Apart from taking out the intermediaries, the anonymity of the user is also protected while eliminating the possibility of malware injection.
The growth of Internet has led to the emergence of many entertainment entrepreneurs, as they no longer had to rely on the opportunities provided by a handful of companies. Instead, the Internet provided them with the convenience of a decentralised medium. It helped them to spread their wings and allow their content to be discovered in several parts of the world. Yet, Internet is certainly not decentralised now and there are several restrictions placed in various parts of the world. Bitcoins and block chain technology help overcome the barriers, and can help independent artists receive more for their talent and work. It would not be surprising to see more music right holders switch to bitcoins as the preferred payment option.
Now that the lower transaction costs have gone out of the window, the universally accepted advantage of bitcoin is the security and transparency. The supply chain management could benefit immensely from these attributes. Blockchain technology can create a tamperproof record for the transactions that have been made, while the bitcoin currency can cross borders with ease. According to Coin Central, it can also facilitate in faster transactions, based on two fundamental factors being the amount of network activity and the transaction fees.
It has long been expected that Amazon would accept bitcoin payments. There would be a lot of benefits for e-commerce sites if this expectation turned out to be true. As one of the pioneers of the e-commerce industry, Amazon is involved in billions of transactions around the world. Going down the route of bitcoins can help make the payment process much simpler – especially in the case of a return. It can also help bring more sellers into the platform, thus providing a win-win situation for all sections.


Whatever your feelings about technology, there is no escaping that it has become a vital part of our working lives. Nic Paton explores how the software available to the OH profession can help make the day just that bit easier.
Investing in or upgrading your software is always going to be a big decision. Increasingly, these days, the functionality, versatility, robustness and "reach" of the system you choose – and the provider behind it – can be the difference between an OH consultancy or unit staying ahead of the curve in challenging budgetary times or finding itself coming under an uncomfortable spotlight.
That is why it is all the more surprising to find, more often than not, that among OH software providers there is a consensus that it can be the user of the system – in other words, the individual practitioners – rather than the technology itself that is the weak link in an OH practice or unit.
After something of a slow start, OH practitioners have moved swiftly to embrace innovation in OH technology and software. However, it is often still the case that, perhaps for reasons of lack of time, training or willingness, practitioners can buy in a new system or an upgrade and then, while they still probably find it useful and an improvement, fail to go that extra mile to ensure they are really making full use of everything the technology can offer.
Jo Henderson-Tchertoff, sales manager at provider Medgate, agrees: "Probably the biggest issues with OH and safety software are people not realising its full value, choosing a cheap option or not having comprehensive training.
"People do not realise that a decent OH and safety system is quite a big beast, so it needs to be properly installed and people need to be trained on it. Without proper training or implementation people simply end up paying for a system that they are not using to its full potential.
"So it might be that they are buying a system for health surveillance, for example, but do not know about the diary, medical charts, immunisation or travel medicine functionality and so on that comes with it.
Neil Connor, owner of provider CHI, says that often when customers call in to upgrade their systems, they have to be informed that their existing system already does the things they want an upgraded version to accomplish.
He adds: "Many systems are now all-encompassing, but people want them to work for them instantly – they don't have the time to 'play' on them, but that is really how you get to know your system. But at the same time, for us, it is about always trying to make our software as intuitive and user-friendly as possible.
One of the biggest ongoing trends is one that, at first glance, sounds completely contradictory: giving up control to take control. The rise of web- and cloud-based systems, for example, has meant that OH practitioners are increasingly able to take control of their software by moving systems out from the umbrella (or control) of an in-house or contracted IT department.
As Barton says: "What a lot of OH departments suffer from is IT support that is not as proactive as they would like it to be.
"OH is sometimes perceived as one of those services that does not bring a clear, tangible return to the organisation, and so may not get the same investment as other areas of the business.
He adds: "Where cloud or software as a service can give an OH unit an advantage is that it takes the major investment in IT support away from the parent organisation and puts it with an external software supplier who, obviously, specialises in this, understands the client's objectives and needs and has an interest in providing the best service it can.
It is a similar story when it comes to reporting. This remains a key function of any OH practitioner, of course, but more use of self-reporting and self-service functionality is allowing managers, and even employees, to take greater control and "ownership" of reporting.
"It is about giving employees the control so they can report their own incidents," says Henderson-Tchertoff. "So you can have a self-reporting kiosk, online diary or questionnaire. Managers are also more able to take control and responsibility for their staff because they can produce their own statistics. They are managing it more, rather than someone needing to prompt them. And a lot of it now is also paper free.
In an environment where every penny is coming under close scrutiny, practitioners are recognising the value of software and technology when it comes to justifying or validating their activities to management, argue providers.
Connor says: "It's all about being able to justify the existence of the department, as well as making the business case. But, of course, so much of OH is somebody popping by the department or just making a phone call to check on things.
The near ubiquity of smartphones and tablet computers is driving demand for ever greater and more flexible mobile functionality, says Henderson-Tchertoff: "I think we will see more tablet and iPad apps coming through, and more self-service.
Electronic diaries have been perhaps one of the last things to be taken up, as people have been very reluctant to relinquish their traditional hard-copy diary book that they would pass around, says Barton.
"But the true benefit and improvements in efficiency [of these types of technology] are now being realised by the vast majority of our clients," he adds. "Especially when you have larger clinics or multiple sites where you have a peripatetic workforce, people are now recognising it is so much better.
Connor says that the trend is definitely towards the web: "It's all very much about cloud-based remote access so that people can access records anywhere. There's more focus, too, on mobile functionality – iPads, mobile devices and so on.
Dr John O'Sullivan, an occupational health consultant, recently sold his consultancy business, Ashling Occupational Health in Northwich, after more than 35 years.
In that time he has been through a variety of different IT systems, eventually settling for Warwick International Computing System's Opas system, and remains passionate about the benefits that can come from ensuring practitioners are making full use of the functionality that is available with most modern OH systems.
"With OH software, it is like any other tool – you can have a really big filing cabinet full of information, but the trick of it, the only way to make it useful, is how you analyse and use that information. There is so much more interfacing nowadays. Things have come on in leaps and bounds in the past few years," says O'Sullivan.
"Organisations pay you to provide an OH service but, to be honest, a lot of the time they do not know what they are paying for.
He adds: "It can show trends in regards to, say, stress, back pain, respiratory and so on, on an anonymised basis. It can show that the organisation is getting value for money. You can follow trends in groups of people and see whether this or that cohort is above or below average or whether a specific area needs attention. Some systems are excellent for benchmarking, highlighting data and allowing you to drill down into it.