text:
package org.apache.cassandra.cql3.statements;

import java.nio.ByteBuffer;
import java.util.*;
import java.util.concurrent.TimeUnit;

import com.google.common.collect.Iterables;
import com.google.common.collect.Maps;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.helpers.MessageFormatter;

import org.apache.cassandra.audit.AuditLogContext;
import org.apache.cassandra.audit.AuditLogEntryType;
import org.apache.cassandra.schema.TableId;
import org.apache.cassandra.schema.TableMetadata;
import org.apache.cassandra.schema.ColumnMetadata;
import org.apache.cassandra.config.DatabaseDescriptor;
import org.apache.cassandra.cql3.*;
import org.apache.cassandra.db.*;
import org.apache.cassandra.db.partitions.PartitionUpdate;
import org.apache.cassandra.db.rows.RowIterator;
import org.apache.cassandra.exceptions.*;
import org.apache.cassandra.metrics.BatchMetrics;
import org.apache.cassandra.service.*;
import org.apache.cassandra.tracing.Tracing;
import org.apache.cassandra.transport.messages.ResultMessage;
import org.apache.cassandra.utils.FBUtilities;
import org.apache.cassandra.utils.NoSpamLogger;
import org.apache.cassandra.utils.Pair;

import static java.util.function.Predicate.isEqual;

import static org.apache.cassandra.cql3.statements.RequestValidations.checkFalse;

/**
 * A BATCH statement parsed from a CQL query.
 */
public class BatchStatement implements CQLStatement
{
    public enum Type
    {
        LOGGED, UNLOGGED, COUNTER
    }

    public final Type type;
    private final VariableSpecifications bindVariables;
    private final List<ModificationStatement> statements;

    // Columns modified for each table (keyed by the table ID)
    private final Map<TableId, RegularAndStaticColumns> updatedColumns;
    // Columns on which there is conditions. Note that if there is any, then the batch can only be on a single partition (and thus table).
    private final RegularAndStaticColumns conditionColumns;

    private final boolean updatesRegularRows;
    private final boolean updatesStaticRow;
    private final Attributes attrs;
    private final boolean hasConditions;
    private final boolean updatesVirtualTables;

    private static final Logger logger = LoggerFactory.getLogger(BatchStatement.class);

    private static final String UNLOGGED_BATCH_WARNING = "Unlogged batch covering {} partitions detected " +
                                                         "against table{} {}. You should use a logged batch for " +
                                                         "atomicity, or asynchronous writes for performance.";

    private static final String LOGGED_BATCH_LOW_GCGS_WARNING = "Executing a LOGGED BATCH on table{} {}, configured with a " +
                                                                "gc_grace_seconds of 0. The gc_grace_seconds is used to TTL " +
                                                                "batchlog entries, so setting gc_grace_seconds too low on " +
                                                                "tables involved in an atomic batch might cause batchlog " +
                                                                "entries to expire before being replayed.";

    public static final BatchMetrics metrics = new BatchMetrics();

    /**
     * Creates a new BatchStatement.
     *
     * @param type       type of the batch
     * @param statements the list of statements in the batch
     * @param attrs      additional attributes for statement (CL, timestamp, timeToLive)
     */
    public BatchStatement(Type type, VariableSpecifications bindVariables, List<ModificationStatement> statements, Attributes attrs)
    {
        this.type = type;
        this.bindVariables = bindVariables;
        this.statements = statements;
        this.attrs = attrs;

        boolean hasConditions = false;
        MultiTableColumnsBuilder regularBuilder = new MultiTableColumnsBuilder();
        RegularAndStaticColumns.Builder conditionBuilder = RegularAndStaticColumns.builder();
        boolean updateRegular = false;
        boolean updateStatic = false;
        boolean updatesVirtualTables = false;

        for (ModificationStatement stmt : statements)
        {
            regularBuilder.addAll(stmt.metadata(), stmt.updatedColumns());
            updateRegular |= stmt.updatesRegularRows();
            updatesVirtualTables |= stmt.isVirtual();
            if (stmt.hasConditions())
            {
                hasConditions = true;
                conditionBuilder.addAll(stmt.conditionColumns());
                updateStatic |= stmt.updatesStaticRow();
            }
        }

        this.updatedColumns = regularBuilder.build();
        this.conditionColumns = conditionBuilder.build();
        this.updatesRegularRows = updateRegular;
        this.updatesStaticRow = updateStatic;
        this.hasConditions = hasConditions;
        this.updatesVirtualTables = updatesVirtualTables;
    }

    @Override
    public List<ColumnSpecification> getBindVariables()
    {
        return bindVariables.getBindVariables();
    }

    @Override
    public short[] getPartitionKeyBindVariableIndexes()
    {
        boolean affectsMultipleTables =
            !statements.isEmpty() && !statements.stream().map(s -> s.metadata().id).allMatch(isEqual(statements.get(0).metadata().id));

        // Use the TableMetadata of the first statement for partition key bind indexes.  If the statements affect
        // multiple tables, we won't send partition key bind indexes.
        return (affectsMultipleTables || statements.isEmpty())
             ? null
             : bindVariables.getPartitionKeyBindVariableIndexes(statements.get(0).metadata());
    }

    @Override
    public Iterable<org.apache.cassandra.cql3.functions.Function> getFunctions()
    {
        List<org.apache.cassandra.cql3.functions.Function> functions = new ArrayList<>();
        for (ModificationStatement statement : statements)
            statement.addFunctionsTo(functions);
        return functions;
    }

    public void authorize(ClientState state) throws InvalidRequestException, UnauthorizedException
    {
        for (ModificationStatement statement : statements)
            statement.authorize(state);
    }

    // Validates a prepared batch statement without validating its nested statements.
    public void validate() throws InvalidRequestException
    {
        if (attrs.isTimeToLiveSet())
            throw new InvalidRequestException("Global TTL on the BATCH statement is not supported.");

        boolean timestampSet = attrs.isTimestampSet();
        if (timestampSet)
        {
            if (hasConditions)
                throw new InvalidRequestException("Cannot provide custom timestamp for conditional BATCH");

            if (isCounter())
                throw new InvalidRequestException("Cannot provide custom timestamp for counter BATCH");
        }

        boolean hasCounters = false;
        boolean hasNonCounters = false;

        boolean hasVirtualTables = false;
        boolean hasRegularTables = false;

        for (ModificationStatement statement : statements)
        {
            if (timestampSet && statement.isTimestampSet())
                throw new InvalidRequestException("Timestamp must be set either on BATCH or individual statements");

            if (statement.isCounter())
                hasCounters = true;
            else
                hasNonCounters = true;

            if (statement.isVirtual())
                hasVirtualTables = true;
            else
                hasRegularTables = true;
        }

        if (timestampSet && hasCounters)
            throw new InvalidRequestException("Cannot provide custom timestamp for a BATCH containing counters");

        if (isCounter() && hasNonCounters)
            throw new InvalidRequestException("Cannot include non-counter statement in a counter batch");

        if (hasCounters && hasNonCounters)
            throw new InvalidRequestException("Counter and non-counter mutations cannot exist in the same batch");

        if (isLogged() && hasCounters)
            throw new InvalidRequestException("Cannot include a counter statement in a logged batch");

        if (isLogged() && hasVirtualTables)
            throw new InvalidRequestException("Cannot include a virtual table statement in a logged batch");

        if (hasVirtualTables && hasRegularTables)
            throw new InvalidRequestException("Mutations for virtual and regular tables cannot exist in the same batch");

        if (hasConditions && hasVirtualTables)
            throw new InvalidRequestException("Conditional BATCH statements cannot include mutations for virtual tables");

        if (hasConditions)
        {
            String ksName = null;
            String cfName = null;
            for (ModificationStatement stmt : statements)
            {
                if (ksName != null && (!stmt.keyspace().equals(ksName) || !stmt.columnFamily().equals(cfName)))
                    throw new InvalidRequestException("Batch with conditions cannot span multiple tables");
                ksName = stmt.keyspace();
                cfName = stmt.columnFamily();
            }
        }
    }

    private boolean isCounter()
    {
        return type == Type.COUNTER;
    }

    private boolean isLogged()
    {
        return type == Type.LOGGED;
    }

    // The batch itself will be validated in either Parsed#prepare() - for regular CQL3 batches,
    //   or in QueryProcessor.processBatch() - for native protocol batches.
    public void validate(ClientState state) throws InvalidRequestException
    {
        for (ModificationStatement statement : statements)
            statement.validate(state);
    }

    public List<ModificationStatement> getStatements()
    {
        return statements;
    }

    private List<? extends IMutation> getMutations(BatchQueryOptions options,
                                                         boolean local,
                                                         long batchTimestamp,
                                                         int nowInSeconds,
                                                         long queryStartNanoTime)
    {
        Set<String> tablesWithZeroGcGs = null;
        BatchUpdatesCollector collector = new BatchUpdatesCollector(updatedColumns, updatedRows());
        for (int i = 0; i < statements.size(); i++)
        {
            ModificationStatement statement = statements.get(i);
            if (isLogged() && statement.metadata().params.gcGraceSeconds == 0)
            {
                if (tablesWithZeroGcGs == null)
                    tablesWithZeroGcGs = new HashSet<>();
                tablesWithZeroGcGs.add(statement.metadata.toString());
            }
            QueryOptions statementOptions = options.forStatement(i);
            long timestamp = attrs.getTimestamp(batchTimestamp, statementOptions);
            statement.addUpdates(collector, statementOptions, local, timestamp, nowInSeconds, queryStartNanoTime);
        }

        if (tablesWithZeroGcGs != null)
        {
            String suffix = tablesWithZeroGcGs.size() == 1 ? "" : "s";
            NoSpamLogger.log(logger, NoSpamLogger.Level.WARN, 1, TimeUnit.MINUTES, LOGGED_BATCH_LOW_GCGS_WARNING,
                             suffix, tablesWithZeroGcGs);
            ClientWarn.instance.warn(MessageFormatter.arrayFormat(LOGGED_BATCH_LOW_GCGS_WARNING, new Object[] { suffix, tablesWithZeroGcGs })
                                                     .getMessage());
        }
        return collector.toMutations();
    }

    private int updatedRows()
    {
        // Note: it's possible for 2 statements to actually apply to the same row, but that's just an estimation
        // for sizing our PartitionUpdate backing array, so it's good enough.
        return statements.size();
    }

    /**
     * Checks batch size to ensure threshold is met. If not, a warning is logged.
     *
     * @param mutations - the batch mutations.
     */
    private static void verifyBatchSize(Collection<? extends IMutation> mutations) throws InvalidRequestException
    {
        // We only warn for batch spanning multiple mutations (#10876)
        if (mutations.size() <= 1)
            return;

        long warnThreshold = DatabaseDescriptor.getBatchSizeWarnThreshold();
        long size = IMutation.dataSize(mutations);

        if (size > warnThreshold)
        {
            Set<String> tableNames = new HashSet<>();
            for (IMutation mutation : mutations)
            {
                for (PartitionUpdate update : mutation.getPartitionUpdates())
                    tableNames.add(update.metadata().toString());
            }

            long failThreshold = DatabaseDescriptor.getBatchSizeFailThreshold();

            String format = "Batch for {} is of size {}, exceeding specified threshold of {} by {}.{}";
            if (size > failThreshold)
            {
                Tracing.trace(format, tableNames, FBUtilities.prettyPrintMemory(size), FBUtilities.prettyPrintMemory(failThreshold),
                              FBUtilities.prettyPrintMemory(size - failThreshold), " (see batch_size_fail_threshold_in_kb)");
                logger.error(format, tableNames, FBUtilities.prettyPrintMemory(size), FBUtilities.prettyPrintMemory(failThreshold),
                             FBUtilities.prettyPrintMemory(size - failThreshold), " (see batch_size_fail_threshold_in_kb)");
                throw new InvalidRequestException("Batch too large");
            }
            else if (logger.isWarnEnabled())
            {
                logger.warn(format, tableNames, FBUtilities.prettyPrintMemory(size), FBUtilities.prettyPrintMemory(warnThreshold),
                            FBUtilities.prettyPrintMemory(size - warnThreshold), "");
            }
            ClientWarn.instance.warn(MessageFormatter.arrayFormat(format, new Object[] {tableNames, size, warnThreshold, size - warnThreshold, ""}).getMessage());
        }
    }

    private void verifyBatchType(Collection<? extends IMutation> mutations)
    {
        if (!isLogged() && mutations.size() > 1)
        {
            Set<DecoratedKey> keySet = new HashSet<>();
            Set<String> tableNames = new HashSet<>();

            for (IMutation mutation : mutations)
            {
                for (PartitionUpdate update : mutation.getPartitionUpdates())
                {
                    keySet.add(update.partitionKey());

                    tableNames.add(update.metadata().toString());
                }
            }

            // CASSANDRA-11529: log only if we have more than a threshold of keys, this was also suggested in the
            // original ticket that introduced this warning, CASSANDRA-9282
            if (keySet.size() > DatabaseDescriptor.getUnloggedBatchAcrossPartitionsWarnThreshold())
            {
                NoSpamLogger.log(logger, NoSpamLogger.Level.WARN, 1, TimeUnit.MINUTES, UNLOGGED_BATCH_WARNING,
                                 keySet.size(), tableNames.size() == 1 ? "" : "s", tableNames);

                ClientWarn.instance.warn(MessageFormatter.arrayFormat(UNLOGGED_BATCH_WARNING, new Object[]{keySet.size(),
                                                    tableNames.size() == 1 ? "" : "s", tableNames}).getMessage());
            }
        }
    }

    public ResultMessage execute(QueryState queryState, QueryOptions options, long queryStartNanoTime)
    {
        return execute(queryState, BatchQueryOptions.withoutPerStatementVariables(options), queryStartNanoTime);
    }

    public ResultMessage execute(QueryState queryState, BatchQueryOptions options, long queryStartNanoTime)
    {
        long timestamp = options.getTimestamp(queryState);
        int nowInSeconds = options.getNowInSeconds(queryState);

        if (options.getConsistency() == null)
            throw new InvalidRequestException("Invalid empty consistency level");
        if (options.getSerialConsistency() == null)
            throw new InvalidRequestException("Invalid empty serial consistency level");

        if (hasConditions)
            return executeWithConditions(options, queryState, queryStartNanoTime);

        if (updatesVirtualTables)
            executeInternalWithoutCondition(queryState, options, queryStartNanoTime);
        else
            executeWithoutConditions(getMutations(options, false, timestamp, nowInSeconds, queryStartNanoTime), options.getConsistency(), queryStartNanoTime);

        return new ResultMessage.Void();
    }

    private void executeWithoutConditions(List<? extends IMutation> mutations, ConsistencyLevel cl, long queryStartNanoTime) throws RequestExecutionException, RequestValidationException
    {
        if (mutations.isEmpty())
            return;

        verifyBatchSize(mutations);
        verifyBatchType(mutations);

        updatePartitionsPerBatchMetrics(mutations.size());

        boolean mutateAtomic = (isLogged() && mutations.size() > 1);
        StorageProxy.mutateWithTriggers(mutations, cl, mutateAtomic, queryStartNanoTime);
    }

    private void updatePartitionsPerBatchMetrics(int updatedPartitions)
    {
        if (isLogged()) {
            metrics.partitionsPerLoggedBatch.update(updatedPartitions);
        } else if (isCounter()) {
            metrics.partitionsPerCounterBatch.update(updatedPartitions);
        } else {
            metrics.partitionsPerUnloggedBatch.update(updatedPartitions);
        }
    }

    private ResultMessage executeWithConditions(BatchQueryOptions options, QueryState state, long queryStartNanoTime)
    {
        Pair<CQL3CasRequest, Set<ColumnMetadata>> p = makeCasRequest(options, state);
        CQL3CasRequest casRequest = p.left;
        Set<ColumnMetadata> columnsWithConditions = p.right;

        String ksName = casRequest.metadata.keyspace;
        String tableName = casRequest.metadata.name;

        try (RowIterator result = StorageProxy.cas(ksName,
                                                   tableName,
                                                   casRequest.key,
                                                   casRequest,
                                                   options.getSerialConsistency(),
                                                   options.getConsistency(),
                                                   state.getClientState(),
                                                   options.getNowInSeconds(state),
                                                   queryStartNanoTime))
        {
            return new ResultMessage.Rows(ModificationStatement.buildCasResultSet(ksName,
                                                                                tableName,
                                                                                result,
                                                                                columnsWithConditions,
                                                                                true,
                                                                                state,
                                                                                options.forStatement(0)));
        }
    }

    private Pair<CQL3CasRequest,Set<ColumnMetadata>> makeCasRequest(BatchQueryOptions options, QueryState state)
    {
        long batchTimestamp = options.getTimestamp(state);
        int nowInSeconds = options.getNowInSeconds(state);
        DecoratedKey key = null;
        CQL3CasRequest casRequest = null;
        Set<ColumnMetadata> columnsWithConditions = new LinkedHashSet<>();

        for (int i = 0; i < statements.size(); i++)
        {
            ModificationStatement statement = statements.get(i);
            QueryOptions statementOptions = options.forStatement(i);
            long timestamp = attrs.getTimestamp(batchTimestamp, statementOptions);
            List<ByteBuffer> pks = statement.buildPartitionKeyNames(statementOptions);
            if (statement.getRestrictions().keyIsInRelation())
                throw new IllegalArgumentException("Batch with conditions cannot span multiple partitions (you cannot use IN on the partition key)");
            if (key == null)
            {
                key = statement.metadata().partitioner.decorateKey(pks.get(0));
                casRequest = new CQL3CasRequest(statement.metadata(), key, conditionColumns, updatesRegularRows, updatesStaticRow);
            }
            else if (!key.getKey().equals(pks.get(0)))
            {
                throw new InvalidRequestException("Batch with conditions cannot span multiple partitions");
            }

            checkFalse(statement.getRestrictions().clusteringKeyRestrictionsHasIN(),
                       "IN on the clustering key columns is not supported with conditional %s",
                       statement.type.isUpdate()? "updates" : "deletions");

            if (statement.hasSlices())
            {
                // All of the conditions require meaningful Clustering, not Slices
                assert !statement.hasConditions();

                Slices slices = statement.createSlices(statementOptions);
                // If all the ranges were invalid we do not need to do anything.
                if (slices.isEmpty())
                    continue;

                for (Slice slice : slices)
                {
                    casRequest.addRangeDeletion(slice, statement, statementOptions, timestamp, nowInSeconds);
                }

            }
            else
            {
                Clustering clustering = Iterables.getOnlyElement(statement.createClustering(statementOptions));
                if (statement.hasConditions())
                {
                    statement.addConditions(clustering, casRequest, statementOptions);
                    // As soon as we have a ifNotExists, we set columnsWithConditions to null so that everything is in the resultSet
                    if (statement.hasIfNotExistCondition() || statement.hasIfExistCondition())
                        columnsWithConditions = null;
                    else if (columnsWithConditions != null)
                        Iterables.addAll(columnsWithConditions, statement.getColumnsWithConditions());
                }
                casRequest.addRowUpdate(clustering, statement, statementOptions, timestamp, nowInSeconds);
            }
        }

        return Pair.create(casRequest, columnsWithConditions);
    }

    public boolean hasConditions()
    {
        return hasConditions;
    }

    public ResultMessage executeLocally(QueryState queryState, QueryOptions options) throws RequestValidationException, RequestExecutionException
    {
        BatchQueryOptions batchOptions = BatchQueryOptions.withoutPerStatementVariables(options);

        if (hasConditions)
            return executeInternalWithConditions(batchOptions, queryState);

        executeInternalWithoutCondition(queryState, batchOptions, System.nanoTime());
        return new ResultMessage.Void();
    }

    private ResultMessage executeInternalWithoutCondition(QueryState queryState, BatchQueryOptions batchOptions, long queryStartNanoTime)
    {
        long timestamp = batchOptions.getTimestamp(queryState);
        int nowInSeconds = batchOptions.getNowInSeconds(queryState);

        for (IMutation mutation : getMutations(batchOptions, true, timestamp, nowInSeconds, queryStartNanoTime))
            mutation.apply();
        return null;
    }

    private ResultMessage executeInternalWithConditions(BatchQueryOptions options, QueryState state)
    {
        Pair<CQL3CasRequest, Set<ColumnMetadata>> p = makeCasRequest(options, state);
        CQL3CasRequest request = p.left;
        Set<ColumnMetadata> columnsWithConditions = p.right;

        String ksName = request.metadata.keyspace;
        String tableName = request.metadata.name;

        long timestamp = options.getTimestamp(state);
        int nowInSeconds = options.getNowInSeconds(state);

        try (RowIterator result = ModificationStatement.casInternal(request, timestamp, nowInSeconds))
        {
            ResultSet resultSet =
                ModificationStatement.buildCasResultSet(ksName,
                                                        tableName,
                                                        result,
                                                        columnsWithConditions,
                                                        true,
                                                        state,
                                                        options.forStatement(0));
            return new ResultMessage.Rows(resultSet);
        }
    }

    public String toString()
    {
        return String.format("BatchStatement(type=%s, statements=%s)", type, statements);
    }

    public static class Parsed extends QualifiedStatement
    {
        private final Type type;
        private final Attributes.Raw attrs;
        private final List<ModificationStatement.Parsed> parsedStatements;

        public Parsed(Type type, Attributes.Raw attrs, List<ModificationStatement.Parsed> parsedStatements)
        {
            super(null);
            this.type = type;
            this.attrs = attrs;
            this.parsedStatements = parsedStatements;
        }

        @Override
        public void setKeyspace(ClientState state) throws InvalidRequestException
        {
            for (ModificationStatement.Parsed statement : parsedStatements)
                statement.setKeyspace(state);
        }

        public BatchStatement prepare(ClientState state)
        {
            List<ModificationStatement> statements = new ArrayList<>(parsedStatements.size());
            parsedStatements.forEach(s -> statements.add(s.prepare(bindVariables)));

            Attributes prepAttrs = attrs.prepare("[batch]", "[batch]");
            prepAttrs.collectMarkerSpecification(bindVariables);

            BatchStatement batchStatement = new BatchStatement(type, bindVariables, statements, prepAttrs);
            batchStatement.validate();

            return batchStatement;
        }
    }

    private static class MultiTableColumnsBuilder
    {
        private final Map<TableId, RegularAndStaticColumns.Builder> perTableBuilders = new HashMap<>();

        public void addAll(TableMetadata table, RegularAndStaticColumns columns)
        {
            RegularAndStaticColumns.Builder builder = perTableBuilders.get(table.id);
            if (builder == null)
            {
                builder = RegularAndStaticColumns.builder();
                perTableBuilders.put(table.id, builder);
            }
            builder.addAll(columns);
        }

        public Map<TableId, RegularAndStaticColumns> build()
        {
            Map<TableId, RegularAndStaticColumns> m = Maps.newHashMapWithExpectedSize(perTableBuilders.size());
            for (Map.Entry<TableId, RegularAndStaticColumns.Builder> p : perTableBuilders.entrySet())
                m.put(p.getKey(), p.getValue().build());
            return m;
        }
    }

    @Override
    public AuditLogContext getAuditLogContext()
    {
        return new AuditLogContext(AuditLogEntryType.BATCH);
    }
}

redpajama_set_name: RedPajamaGithub


text:
En huvudritning är en handling som upprättas i samband med ny- eller ombyggnad av byggnader och är en del av underlaget vid ansökan om bygglov.

En huvudritning är en eller flera ritningar som i huvuddrag skall redovisa en planerad byggnads funktionella och arkitektoniska utformning samt dess anslutning till marken. Huvudritningen visar i regel byggnadens planer, sektioner och fasader samt huvudmåtten som längd x bredd och höjd. Ritningen kan i enkla fall upprättas av byggherren själv och skall då vara fackmannamässigt utförd. Vid större projekt är der i regel byggherrens arkitekt som står för huvudritningen. Huvudritningar upprättas vanligtvis i skala 1:100.

Källor
 Plan- och byggtermer 1989, Tekniska nomenklaturcentralen publikation nr 89

Se även
 Situationsplan
 Nybyggnadskarta

Begrepp inom arkitektur
Byggteknik

redpajama_set_name: RedPajamaWikipedia


text:
Apple might've let "MacOS" rebranding for OS X slip out
April 15, 2016 - Uncategorized
Evidence that Apple will rebrand OS X to MacOS is starting to pile up, with the new name appearing briefly on Apple's own website.
As spotted by 9to5Mac, Apple's Environment page got an update on Thursday, and for a short time it included a reference to MacOS. "Years of use, which are based on first owners, are assumed to be four years for MacOS and tvOS devices and three years for iOS and watchOS devices," the page said. (Apple has since reverted the name to OS X.)
This isn't the first time the potential name change has slipped out. Last month, an Interface Builder document inside the OS X system folder included a file named "FUFlightViewController_macOS.nib" (emphasis ours). Still, 9to5Mac noted that the name could have been included for the sake of convenience, as developers sometimes prefer the symmetry of iOS and macOS suffixes together. The name's appearance on an official webpage seems like strong evidence.

redpajama_set_name: RedPajamaCommonCrawl


text:
Q: Programmatically Passing Variables Through View Controllers in Swift Without StoryBoards I am creating an iOS application and my question should be simple.
If in View Controller 1 I have a simple string variable called "name" how do I then pass the value of "name" to View Controller 2.
I realize this question has been asked many times before, however all the answers I can find have had responses pertaining to storyboards and segues. I am not using Story Boards so I am wondering if there is a way to do this without them.
Many Thanks

A: You do this the same way in Swift as you do in Objective-C.
Write VC2 with a property to hold the value you want to pass it.
Create an instance of VC2 from VC1
Set the property on VC2 with the value from VC1.
Display the view of VC2.

A: So simply you have to do something like:
class ViewController: UIViewController {
     var secondVC: VC2!

 override func viewDidLoad() {
    secondVC = VC()

    secondVC.someProperty = "Some Value"
  }
}

So your VC2 should have such property as someProperty

redpajama_set_name: RedPajamaStackExchange


This area gives you access to load a texture file from disk in any of the supported bitmap formats (Png, Tga, Jpg, Tiff, Exr, Hdr, Jpg2000, Bmp).
Load texture: To choose a texture, click on the Load button or drag & drop a texture from any Explorer or desktop window into the main frame. You can drag & drop multiple textures at once. The textures will become available for selection in the dropdown menu.
Unload texture: Select a previously loaded texture from the dropdown menu and click the Unload button to remove it from the scene. This will free up some memory.
Full View: View a texture in full size. You can also use the image control sliders in the full view window, although the texture will not update in real time. It will update after you have made a change.
Switch Display Size: Switch the thumbnail texture view to a small or a large preview for easier viewing of texture changes.
This area allows you to create and adjust procedural textures and arrange them in the procedurals stack. When a procedural texture is selected, its parameters panel pops up at the margin of the Texture Picker. You can apply several procedurals which are evaluated from bottom to top (just like Photoshop layers). Procedurals are useful because they are fully customizable and present infinite detail independent to the resolution, but they are a bit slower to render compared to bitmaps. This is why Maxwell offers the option to bake any procedural to a bitmap file to be used instead.
New: Creates a new procedural from the list of supported procedurals.
Remove: Removes the selected procedural from the stack.
Arrows Up and Down: Moves the selected procedural up and down in the stack. The procedurals are evaluated from bottom to top (just like Photoshop layers) so this allows you to control their order to get the look you want.
Save to disk: Allows you to bake the selected procedural to a bitmap file at the given image resolution and replaces the procedural with its corresponding baked bitmap version if you choose so. Please note that if you try to bake a very detailed procedural texture to a small resolution file, the resulting bitmap file will not look the same as the procedural. This is because there are not enough pixels in that small bitmap file to describe accurately what the procedural looked like. In this case you should bake the procedural to a larger size bitmap file.
These parameters control the placement and tiling of a texture on the object.
Method: Tiles your texture in X axis, Y axis, both the X and Y axis, or turns off tiling (no repeat).
Relative/Meters: The amount of tiling for a texture can be set in the texture coordinates (Relative), or in real scale in meters (Meters). Maxwell Render will use a 1m x 1m x 1m UV set for the texture when the Meters option is selected, regardless of the actual size of the object and what other UV sets may be applied to the object. This is very useful to create re-usable materials which can simply be dragged & dropped on an object of any size. For example, if you want to create a material with 25cm tiles, check the Meters mode, and set the tiling for both X and Y axis to 0.25. Now you can drop this material on a floor of any size and your tiles will always be 25cm. For more detailed info see the page Working with UV sets and textures in Studio.
Repeat: Specifies the tiling amount (number of repetitions of the texture) in the desired axis.
Mirror Y and Mirror Y: Uses the texture rmirrored in the X or Y axis (or both).
Offset: Selects the amount of offset for the X, Y axis.
Rotation: Rotates the texture the given angle in degrees in its own UV space.
Invert: Inverts the loaded texture. This is useful for black & white textures used as a weightmap or mask.
Alpha Only: On RGBA images (images that contain its Alpha channel embedded), this option considers only the Alpha channel, mainly for masking purposes.
Interpolation: Turning this option on applies filtering to a texture, which may be useful to avoid pixelization when rendering close-ups of smaller textures. Filtering is useful mostly for displacement textures – to smooth out the displaced surface – especially when using 8bit textures. It is recommended to keep this option turned off for regular textures (color, bump, weightmaps, etc.) to avoid blurring them.
Brightness/Contrast/Saturation/Hue: Common image editing options useful for fine-tuning a texture without having to use an external image editing application.
RGB Clamp: Adjust the levels of your image. This function enables you to specify the maximum darkest or brightest values in the texture. For example, if you change the min Clamp from 0 to 30, any value in the texture darker than RGB 30 will be set to 30.


text:
Home News Morocco Moroccan Nurse Suspended after Refusing to Give Expired Vaccines to Children
Moroccan Nurse Suspended after Refusing to Give Expired Vaccines to Children
By Rim Elbelkacemi
Rabat –A Moroccan nurse was suspended after she refused to give expired vaccines to children.
Azzahra Al Fiafi, a nurse operating at Rural Health Center in Al Hoceima in northern Morocco was suspended from work and also required to appear before a disciplinary committee after refusing to administer expired insulin injections to children.
It was reported that the shots in question were stored in an unsuitable environment, causing them to overheat. Temperatures of the vaccines have reached 18 °C, which is 10 degrees above the legal limit.
Al Massae newspaper reported that the nurse had sent two letters to public officials on June 16 and June 20, asking them to dispose of the contaminated vaccines. The letters, however, remained unanswered.
Ms. Al Fiafi had received verbal orders from her supervisors to use the vaccines, despite her concerns regarding the issue. However, she abstained, as she feared she could cause further medical complication for the children.
Al Fiafi was shortly suspended from her position thereafter. She has also been accused of disclosing confidential professional information, which is punishable by law under article 73 of the Public Service Act.


Kobe Bryant's basketball career ended with a wildly entertaining 60-point effort on Wednesday night. Before the game tipped off, there were a number of things on the Internet paying homage to Bryant's basketball career, including this video testimony from Nike athletes—a pair of Penn Staters among them.
Former Nittany Lion greats NaVorro Bowman '09 (above) and Ali Krieger '07 are part of the parade of athletes who discussed the respect that they have for the NBA legend. They're only onscreen briefly, but watching them discuss one of the best basketball players of all time is really cool. Fair warning: This video is slightly NSFW due to a bleeped-out word at the end.
Entry filed under: Athletics. Tags: Ali Krieger, Kobe Bryant, Navorro Bowman, Nike.


text:
documenting & discovering joyful things
Camping People
Do you ever go camping?
I need to preface this blog post with the confession that we are not Camping People.
This makes me a little bit sad, because I really want to think of myself as a Camping Person. In my head, Camping People are super-evolved. They know how to pare back their living requirements to the bare minimum, ridding themselves of the clutter that threatens to overwhelm the rest of us on any given day, and bringing only what they can carry, leaving behind only footprints in the sand.
Camping People cook delicious one-pot meals in cast iron… (pots? Dutch ovens? What are those things called?) over picturesque fires, with mushrooms and fennel they foraged in nearby pine forests, or mussels they pulled from rocks on pristine beaches. For breakfast they eat bircher muesli they had pre-made in individual mason jars, which they kept cool overnight by submerging them in an alpine-fed stream, Famous Five style. After dinner they uncork the wine, and tell hilarious stories to one another in the glow of the fire. They drape hand-woven rugs around their shoulders as the chill draws in, and they look good in beanies.
We are not those people.
We tried camping, one time. I won a beautiful, canvas tent in a competition, and off we raced to a campsite among the trees in the mountains. I remember it had been a lean week, so I only had $90 in the budget with which to purchase four inflatable beds, one pump, four sleeping bags, two lanterns and four little folding deck chairs, all from K-mart.
Let's just say you get what you pay for. The pump didn't work so we had to blow up the beds by mouth, and they deflated during the night to leave us sleeping on cold rocks. Only one of the two lanterns worked. The sleeping bags made up in bulk for what they lacked in actual warmth, and we froze, huddled together on the deflating beds in our winter coats, through the long, six-degree Celsius night.
I had forgotten to bring the instructions for pitching the tent, so we had attempted it earlier that day amid dust and wasps, tripping over pegs and ropes and arguing pointlessly, while a motorhome the size of our home in Melbourne rolled up and parked within touching distance of our tent (we couldn't even stretch the ropes out fully or we'd have had to peg them into the side of the motorhome). A marathon runner pitched his one-person tent in front of our car, climbed inside at around seven at night, and commenced a rumbling, avalanche-causing snore that continued with impressive consistency until sunrise the next day.
I couldn't get the kindling in the brazier we'd hired from the campsite ranger to catch alight, despite or perhaps because of the well-meaning aid of the children who plied it with green wood and leaves, but it didn't really matter anyway because my K-mart budget hadn't stretched to anything with which to actually cook a meal.
(On the other side of the camping ground, actual Camping People were stirring paella on a little gas cooker, while a teapot suspended over a neat little campfire and children roasted marshmallows on sticks. Later they pulled out camp-chairs that looked like armchairs, and drank wine out of enamel cups. I watched them from the shade of my lopsided tent, through narrowed eyes.)
Because it turns out that, at least for most of us, the amount of stuff needed to actually feed, clothe, shelter and maintain basic hygiene for a family of four is actually a LOT. I mean seriously, there's so much stuff in camping! Definitely more than we could fit into our tiny Toyota Corolla, even if the budget had allowed me to fully prepare. (The tent alone weighed more than 44 kilograms and filled the entire boot of the car. What's even up with that!?)
After that one night we hurried back home: filthy, freezing and forlorn. My husband called some friends that same afternoon and gave the tent away, and I donated the sleeping-bags to charity (with a note attached that said "for summer"). We swore we'd never go camping again.
And then we did.
One of the lessons we learned as a family, while we were in France last year, was the importance of taking time out, and switching off, together.
So we cleared the calendar for three nights over Easter. The budget didn't stretch to much (thanks in part the the aforementioned stay in France) and so, with some trepidation, we decided to try camping again.
It was definitely easier. Not perfect, but easier.
We took the 'glamping' route, the best part of which involved someone else pitching the tent, and packing it up afterwards. Oh and floorboards, pre-made beds (with doonas and blankets), a little bar-fridge to keep the milk cool in the absence of any alpine-fed springs, and even a heater!
Of course, we were still covered in dirt most of the time, the campsite showers had scary creatures on the walls, and the campsite 'kitchen' was so rusted over I couldn't even boil water, let alone cook paella. We ate a lot of dim sims from the local take away shop.
And fish 'n chips on the beach, under a high, full moon.
Actually, it wasn't that bad.
The children splashed in the icy sea-water, building sandcastles and a conical abbey of sand that they called le Mont Saint Michel. We explored seaside villages and manicured gardens. Old-fashioned hedge-mazes and sun drenched pathways to remote lighthouses.
In the evenings, we read our books and drank hot tea - and later red wine - wrapped in soft blankets. When it was time to turn off the lantern, the moon painted Chinese calligraphy in the leaves and branches of nearby trees on the canvas walls.
I could hear the soft breathing of my family, all asleep but me. Distant waves kissing sand. Night birds. And, on the final night, the winds of a gathering storm.
Maybe this is how Camping People feel.
Tagged: adventure, australia, children, camping, family
Those were golden days.
When we arrived in Dinan, our park was a rainbow cacophony of flowers in bloom, but in the weeks that followed we watched the flowers fade, and the chestnuts begin to drop. The path we walked to get to the playground (the path you see in the picture above above) was like being inside the colour green. The air itself felt green, and the still-warm afternoons were soft, like a hug from nature.
But then, while our backs were turned, everything changed.
The temperatures dropped, and we returned to the playground after a week doing other things to discover green had receded, in the most magnificent of fashions. The park was now shocking, and glorious, and unabashedly golden.
I like to think there is a metaphor in this park for the gold-tinted nostalgia I know I will feel for our sojourn in France in the months and years to come.
There are some things I won't miss, of course. Being apart from the children's father for so long tops that list, but I also won't miss dodging dog-poo on the footpaths, the oven that burned everything, the ever-present smell of cigarette-smoke in the hallway that filtered through to the bathroom and bedrooms, and the incredibly uncomfortable mattresses. The unreliable buses, the way our apartment never felt properly clean… and it will be a long time before I ever want to eat another galette blé noir.
But this park, these children, those are the gold-tinted memories I will carry with me in the years to come. Memories that will turn into nostalgia, long after I have forgotten the grumpy British man downstairs, who liked to complain about the thumps my children made on the floor when they got up in the morning. (It must have been annoying, but there wasn't much I could do: they haven't yet learned how to levitate).
Nine hundred kilometres. That's how far (actually it was a bit further) my children walked during our three months in France. These are the same little legs that were apparently "too tired" to walk the 15 minutes it took to take Scout to school every day last year. Or the three-block stroll to the park.
In France, they would walk, and walk, and walk. And when we stopped walking, they would run, and leap, and dance. I know how far they walked because of the little 'steps' app on my 'phone, by which I kept a tally because the children were so proud of themselves, discovering stamina and resilience they didn't know they had.
Pepper. That's how Ralph likes to season his food now. Scout likes her mayonnaise homemade, with enough mustard to give it tang. They eat 'real' sushi, tuna salads, vegetable soups, seared steak and soft cheese. They crack their own walnuts and eat them out of the shell. They devour giant bowls of moules marinières (avec frites), homemade muesli, and milk-jelly made using a recipe from Henry VIII's kitchen. In short, they developed palates in France. And better still, they gained a sense of culinary adventure. Gone are the days of plain pasta and never-ending towers of ham-and-cheese toasties, and chicken nuggets at cafes. Now, they eat what we eat.
When Scout left for Australia she was afraid of all animals. By the time she returned, she was able to play with dogs, ride horses, and care for our baby bunny. At some point in November, while tucked up in bed in our chilly apartment in Dinan, Scout also discovered she could tell stories, and began spinning fabulous and fantastical yarns about faraway adventures, when previously she'd only understood narrative recall.
Ralph began using French words instead of English ones in conversation, without realising he was doing it (and still insisting he couldn't understand French). He also found the language he needed to describe his emotions, which sometimes threatened to overwhelm him (and then us) when he was tired. He invented phrases like "letting the wolf out" to describe that feeling when anger and frustration took over, so he could tell us what was happening on the inside, before the situation escalated on the outside.
Ralph grappled languages and feelings and currencies and public transport and dropped day-naps with the kind of resilience none of us could have imagined before we left Australia.
But perhaps the most beautiful change I saw - even more beautiful than the foliage change from summer to autumn in our playground - was in their relationship. The children have always been close, a happy side-effect of being born so close together (only 17 months apart), and of sharing a bedroom.
But I watched their friendship blossom in France, alongside their shared experiences and, despite the inevitable arguments, they became a true unit. It wasn't just friendship: it was trust, reliance, comfort, compassion, and support. The word that comes to me is "tribe." They became one another's tribe, and gave one another a sense of belonging that kept them feeling secure despite all the changes and new experiences. It's something I hope and pray will stay with them throughout their lives.
Because it is golden.
Tagged: nature, parenting, childhood, travel, France
The wuthering north
We drove into Cumbria after dark, just as the winds were picking up. Outside it was right on zero degrees, although the little weather app on my iPhone said, helpfully, "feels like -6". It did.
The journey had been almost twice as long as we'd anticipated, an unlucky accumulation of London traffic that had continued for three hours outside London; a sun that set at half-past-three in the afternoon, leaving us to navigate our oversized hire-car through steep and winding country roads after dark; and, speaking of navigation, numerous opportunities to take wrong turns and get lost, which we did (there were even road-signs saying "don't trust the sat-nav").
From bed that night I could just see the soft, watery light of the crescent moon behind the still-gathering clouds, filtering and refracting through diamond-paned windows that had filtered and refracted moonlight into this room for 500 years, exaggerating the shadows of the beams in our ceiling. The wind was picking up, battering around the ancient walls of our gatehouse in a beautiful fury.
"I love it here," I whispered to my husband, although he might already have been asleep. "I can't even tell you. I really love it here!"
The moon was long gone by morning, and the sun was doing its best job of hiding, too, but the grey dawn revealed bare trees and stone walls and crumbling ruins and bracken-covered hills as far as the eye could see. I ran outside in my slippers, hugging my pyjamas close, and drew in the wild view like oxygen.
Back inside, I put on the kettle and made eggs on toast for my family, while the wind positively howled. "Wow!" said the children (about the weather, not my eggs). And as we sat down at the farmhouse table under a window, beside a cast-iron fire that was cracking and popping and spreading warmth, I thought, "We are inside Wuthering Heights."
Naturally, there was a pretty village nearby, where one could find welcoming locals with musical accents and a cafe with cockle-warming, home-cooked meals. Also naturally, there was a castle ruin, a 900-year-old edifice on an ancient mound that was once settled by Danes and was still part of Scotland until a thousand years ago or so.
I climbed the hill to the ruins alone, while the rest of my family went to find somewhere to buy groceries. The promised "ice rain" had begun, and I have honestly never felt as cold as I did atop that wild and windswept hill, not even on the January night I walked home beside the Hudson River in New York with my friend, and we learned later that it had been -18 degrees.
It was the wind. The wind that burned my ears with cold like razors, stung my eyes with dry tears, tipped me sideways, and genuinely sucked the breath from my lungs whenever I faced into it. Literally breathtaking.
How is it that this world is so full of so many beautiful places? How can we bear it, in our hearts? We only stayed in this ancient gatehouse, perched on the edge of lovely emptiness, for two nights, but I cried for the beauty of it all three times.
I didn't want to leave. But then, that's also how I'd felt when first we climbed the steep, cobblestoned streets of Dinan, when we made our picnic under the trees at the castle ruins of Lehon, when we lay down in sunshine among fields of wildflowers in the grounds of Hever Castle, and when we lost ourselves inside the ancient, golden-hued forest of Broceliande. I know I've talked about this on my blog before, the twin concepts of home and belonging.
When I married my husband, we made the song Home is wherever I'm with you by Edward Sharpe and the Magnetic Zeroes the unofficial theme-song of our marriage, a testament to where we'd been and where we were going, after I'd left New York to live with him. Every time we moved to a new city, I sought out ways to make it feel like home. I enrolled in a Master's Degree when we moved to Queensland. I planted a garden when we moved to Sydney. I volunteered when we moved to Adelaide. When we moved to Melbourne, I was already pregnant with my daughter, so new mothers became my community.
I don't quite know when I started growing restless again. Partly, I think it had to do with having children. The day you hold that new baby in your arms, your world instantly unfolds like a meadow of night-blooming cereus: dazzling flowers, hypnotically-scented, and all opening en masse in one, magic night. But parenthood can also draw your world inside (like the night-blooming cereus closing at dawn, maybe?), and even if you don't have kids, you've heard enough stories from friends and siblings and aunties and grandparents… or read enough mummy-blogs… that you don't need me to talk about that odd and disorienting and beautiful and isolating parenthood bubble right now.
My point is that becoming a mother, while undeniably the best decision I ever made and the best thing I will ever do, also taught me to see my home-town in a different way. The exciting cafes and galleries and festivals and street-art and food trucks and pop-up events that once helped me fall in love with my city became, almost overnight, all-but lost to me, sitting at home with sleeping (or not-sleeping) babies while my husband worked 100 hours a week.
I have watched the world go on without me, from the distance of the Internet.
And when you take away all the wonderful things about life in the city, you start to notice the restrictive things. The lack of fresh air, open spaces, and trees. The reliance on other things (shops, cars, telephones) for even the most basic necessities of life. With a fidgeting toddler in one arm and a hungry baby in the other, the world feels as though it doesn't belong to you any more, and for those of us used to being "in control" in the workplace, this new workplace feels about as out of control as workplaces come.
So, as I stood alone on that ancient hilltop in the breath-stealing wind, these were some of the thoughts that were going through my mind. I wanted to live in this place more than I'd wanted to live anywhere, ever. I sort-of cried, again, but I didn't truly cry, because the wind stung my eyes and dried my tears before they could fall.
We won't be moving to Cumbria any time soon, no matter how badly I want it. And the truth is that even more than I want that open-fielded life, I want to stay with the people who fill my life right now. They are my home, wherever I go (Home is wherever I'm with you).
After I climbed down from the castle ruins, I found my family in a little second-hand shop on the high street, deep in conversation with three locals who had each lived in this village and known one another for eight decades, or more. They recommended the fish and chips shop for lunch and, an hour or so later when we bustled in from the rain and found somewhere to sit, our new friends were already ensconced around a table at the back.
As we left, my husband secretly paid for their lunch and another round of their coffees, and it's times like this that I remember why I first made him my home.
Tagged: history, family, parenthood, travel, england, nature
The truth about what happens on our walks
Chevalier Ralph clambered up onto the rocks by the path, to his look-out. "Can you see the advance guard?" the Warrior Queen Scout called up to him, "Are they close yet?"
We all peered through the forest trees and across the canal, to the hiking trail on the other side. Two retirees carrying trekking poles were striding along the path. "I see them!" yelled Chevalier Ralph. "They're almost ahead of us!"
And then at the same time, both children looked further into the distance, and stiffened. A walking group of about 20 more retirees had rounded the corner of the path across the river, behind their two 'advance guard' friends.
"The pack! The pack of oldie chevaliers!" the children yelled, in mock terror. "Run!" And so we ran, a mad race to the old castle ruin, us on one side of the river and our unwitting enemies on the other.
We were two chevaliers and one warrior queen, you see, and we alone knew of a plan by our arch enemies to attack our castle. They intended to sneak up on the castle, cunningly disguised as an innocent-looking walking-party of octogenarians, then storm our walls and take the kingdom.
Luckily, we happened upon them during our walk. Now it was up to us to get to the castle before them, and save the day.
We raced along the forest path, past the ancient abbey with scarcely a glance, and scrambled up the steep hill to our fortress, all the while listening for the sound of deceptively-benign conversations about chestnuts and knitting and grandchildren.
Once there, we pulled up the imaginary draw-bridge, locked the non-existent gates, and armed the crumbling battlements. Hastily (there was no time to lose!), we reached into my backpack and added to our number: the castle was now under the protection of Chevalier Ralph, Chevalier Mummy and the Warrior Queen, as well as a soft toy Lightning McQueen, another soft toy Harry Potter, and a little plastic dog from Paw Patrol, called Chase.
The toy chevaliers protected the most vulnerable aspect of the walls, overlooking the valley, while the three of us checked every other side, craning our necks for enemies disguised as grandparents. We sent messages via carrier pigeon to the next town over, warning them of imminent attack.
At this point the Warrior Queen decided she was no warrior after all, but just a plain old queen who needed protecting. After about five minutes of that she found that being helpless was boring, and so miraculously developed the powers of flight. A man yielding a leaf-blower in the village below was actually a dragon, roaring with fury and spewing dust and leaves.
Chevalier Ralph stopped bing a chevalier and became instead a superhero, by the name of SuperBoy. As we headed to the neighbouring village, we had to stop multiple times for SuperBoy to throw stones into the canal, as this was the only way to recharge his waning superpowers.
Soon after this, the adventure grew so complex that it is impossible to explain. Suffice to say we won the day, both sides of the war agreed to make friends, and we celebrated with chocolate eclairs and raspberry tarts on the way home.
Tagged: travel, adventure, imagination, parenting, france
The day started at 2:42am, with a blood-curdling scream issuing from the children's room. I barrelled in, stubbing my toe on the dressing table then tripping over the low bed they share, to discover Ralph sitting bolt upright, in the aftermath of a particularly bad dream. He was trembling, so I held him and kissed him until he calmed down.
When at last he lay back down on the pillow, he fell instantly back to sleep. Scout rolled over, kissed the back of his head, and wrapped her arms around her little brother to keep him secure. "Ralph, you are lucky to have such a loving sister," I said. Scout whispered into his curls, which were still damp with perspiration from the nightmare, "I am lucky to have him." And then she, too, sank back into sleep.
By the time I made it back to my own bed, I was so full of adrenalin it took forever before I found my own way back into slumber, and it felt like only minutes before the charms of my alarm woke me again at 5:30am. I groped through the dark a second time, this time on tip-toe, to put the kettle on in the kitchen, prepare breakfast for the children, and pack a lunch for the day ahead.
An hour later, the three of us were creeping through the still-dark village, whispering so-as not to wake the locals. It was like a magical other-world in that pre-dawn dark: cobblestones shining under the orange lantern-light, a fresh breeze, and not even a whisper of a breeze. It felt, truly, as though we had stepped back in time. I was thinking this to myself as we tip-toed toward the bus-stop, and then Scout said to us, "This morning, the town belongs to us." So I guess she felt some of the magic, too.
We made it to the bus-stop five minutes early. And stood there shivering in the dark. I put my arms around the children and Ralph said, "You are our mother-hen."
Time for the bus, but no Line 10 to be seen. We waited a little longer in the dark, watched other buses come and go, shivered a little more, cuddled a little more. I pulled the timetable out of my bag and checked again: yep, I had the days right, and the times. We wandered over to the bus-shelter at the other side, to read the same timetables that were pinned to the wall…
… only, it turned out they weren't the same timetables. I looked up at the wall again. Turns out, the bus-times changed when the calendar changed, and our bus had rolled away five minutes before we had arrived (probably right about the time Scout had said, "the town belongs to us").
"There's another bus in two hours," I told the children. "We could take that? It won't get us all the way but we could at least go to the beach." They took it well, the excitement of the early morning and the walk in the dark still pumping in their veins, and didn't even want to go home in the meantime. "Let's just wander around," Scout pleaded, but even I have my adventure limits, so we turned for home to pass the time until daylight.
(We had a win on the way back: our boulanger was open. By way of compensation, I bought them each a pain au chocolat, still warm from the oven, and picked up a baguette to add to our picnic later on.)
Using the Internet back home I discovered we could cobble together trains and buses and make it to our original destination only an hour later than planned, so out we trundled again an hour after that, ready at long last to begin our pilgrimage.
Walk. Train. Wait. Bus. Walk. And then another walk, a long walk, in the sun. The children were disappointed: they had hoped to risk the tides and wade through silt and sand to reach the island, but it turned out that a perfectly crafted boardwalk unfolded ahead of us, and our pilgrimage felt a lot easier, and more sanitised, than we had envisioned.
But the heat had become searing, and a long walk, when you are only four years old and had an early morning with multiple mishaps and the sun is bearing down on you, can quickly become arduous. We tramped on, at what felt like a snail's pace (aka Ralph's pace), feeling as though we were making more authentic, pilgrim-esque, effort with every step.
And then, carrying softly across the sand amid the chatter of thousands of other wayfarers, the noon-day church bells began to ring. So we marched onwards with renewed vigour, following the call.
Inside, I had been hoping to find ghosts. I'm good at finding ghosts. I can find the magic in even the most touristy of places, if once there was true magic. (Like Notre Dame, for example, where I once filed in with a million other tourists but still managed to still my soul and feel the prayers, hundreds of years of prayers, fluttering toward the cathedral ceiling like a million butterflies.)
But as we strode over the drawbridge and under the portcullis and filed into the medieval village, packed shoulder-to-shoulder with what felt like every other tourist in France, the ghosts were silent. Scout and I shared a big bowl of moules frites (Ralph had pizza), and then we rejoined the throng on the climb up the hill to the abbey. Poor Ralph tripped over on the pavement and almost got trampled by a German tourist and his dog. We dusted him off, dried his tears, and carried on. A few minutes later, he bashed his head on a flying buttress. We crammed against a wall and tended to him again, kissing the forehead where a lump was rapidly rising, but my little champion rallied and we resumed our climb. Several flights of stairs - me holding tight to Ralph's hand to stop him stumbling - and we made it to the top mercifully without incident.
There, at last, the crowd thinned. We all three took a breath, opened our arms to the breeze, and discovered that we were, in fact, on top of the world.
I had been hoping for the ghosts of the past but what I found instead were spirits. Soaring, swooping, invisible and yet profoundly present. Open-armed, open-hearted, open-minded.
On our way inside the abbey, Ralph fell in the gravel and skinned his elbow and both knees. But he got up, and carried on. Heading home, now in searing heat, we discovered the lines for the horse-drawn carriage I had promised them, and also the more mundane but infinitely more practical buses, were so long, we'd never make it back to our bus and the last train on time.
I looked at that boardwalk, stretching out in front of us, and then I looked at my beautiful children, already drooping and exhausted. I didn't know what to do. "I don't know what to do," I said. The words escaped me before I could stop them.
"We can walk Mum," my little champions assured me. "Don't worry!" I grasped both of their hands and began to power-walk, the two of them trotting along either side of me. Stress prickled me on the inside. The signpost said the walk should take 45 minutes: at Ralph pace, that meant at least an hour and a half. We had half an hour.
I'm not going to lie, that was a rough half hour. When Ralph fell yet again, I almost thought we were done-for. But those valiant children carried on. We made it to the bus with less than a minute to spare (I'm not kidding: the bus-driver was closing the doors as we stumbled up, sweating and panting and pleading), and both children wilted like flowers into their seats.
In all, they walked 14 kilometres in aching heat, and 14 kilometres in the heat is a long, long walk for two little children, not to mention the numerous bumps, bruises and grazes picked up by Ralph along the way. My heart swelled for them. Pride, joy, mother-guilt and love all mingled together at the way they had carried on forward, not complaining, in all that difficulty.
And then I thought about the air at the top of that abbey, and the way the wind had unravelled across the sandy flats to the sea with heart-stopping freedom, and how those same weary children had opened themselves to the wind with such enthusiasm that it was infectious, their evident joy and laughter spreading to the other tourists around them in smiles and giggles and sighs.
And then I thought about spirits, soaring.
Tagged: france, parenting
Inside camping
Get ready kids, we are going camping!
First, pitch the tent. We'll need damper, can somebody rub butter into flour? Light the campfire.
All set? Let's play some card-games on the picnic rug. Snap. Go Fish. Close your eyes and guess what food I'm putting into your mouth. Oh no! Who could have predicted that game would end in tears? Shall we snuggle inside the tent for a little while, and tell spooky stories?
Dinner time! Who wants another sausage? Can you pass the damper? Cocky's joy, anyone? I have a great idea: let's roast marshmallows!
WHAT a sky! The rainbow lorikeets are loving it, too, they are making quite the racket. I think it has stopped raining.
But brr, it's getting cold, and almost dark. I have hot milo in the thermos. Come on, let's cuddle next to the fire and look for pictures in the flames until we fall asleep.
Have you ever tried inside camping? It's a fantastic rainy-day activity, and has the benefits of being warm, cosy, and completely screen-free!
I've made you a handy guide to inside-camping set-ups, games and food (including a damper recipe that can be adapted for cooking in a campfire or in the oven). You can download that here, and of course don't forget you can always pin it for later. x
Dispatch from captivity
Captain's log: Day Eight of captivity
Our entire family continues as prisoners of a criminal gang known as The Flu. The gang took Ralph first and, while I was trying to rescue him, they nabbed me too. We were dismayed but not surprised to see Mr B and Scout join us two days later.
Initially I thought Fever and Sore Throat were the gang leaders, although Fever hasn't been seen for about 24 hours, which is a small relief. He has left us in the unfortunately very capable hands of Cough, Congestion, Headache, Nausea and Fatigue, and they seem to take great delight in torturing us by turns.
Early on in my captivity I tried escaping via hot drinks made with turmeric, ginger, citrus and raw honey, but Nausea uncovered my plan, and punished me with severity.
At about Day Three I tried opening all the doors and windows to let fresh air back into the house, in the hopes that it might even blow some of the gang members away. In retaliation, Cough viciously set upon my children, and Sore Throat held a blow-torch to my larynx.
The continued captivity is weakening my mind along with my body. I spent a week texting my father to see if his birthday present had arrived, only to discover it sitting still-unsent on my work-bench. I tried to do some drawing for my clients, but could not remain upright or hold a pencil for more than 10 minutes at a time.
When the gang members work together to torment us, it is worst of all. They force us to lie down on couches under blankets, and watch endless back-to-back episodes of My Little Pony on Netflix. The makers of My Little Pony scoured the globe for the world's most boring pre-teen girl, then stole her diary and used it to make a TV show about multi-coloured horses with enormous bug eyes. Watching it is the most appalling form of torture.
I have been informed by the grocery delivery-man that the apocalypse hasn't happened yet and that the world is still turning outside the four walls of our captivity, but only time will tell if we ever get to see it again for ourselves.
If you find this, tell my mother I love her.
I wasn't ready
Scout turned five last month, and I didn't see the milestone until I almost tripped over it. Rubbing my emotional stubbed toe, I tried to take it all in. She is not a toddler any more. Five is, well, five is a kid. She laughs, she dances, she tells jokes, she writes her name on pieces of paper and leaves them all over the house. She turns on lights and opens doors without asking for help. She listens to reason (most days.)
I didn't notice the growing-up coming until two weeks before her birthday, when she announced one morning that she was ready to have her ears pierced. "Okay," I said, "let's do it. We'll go tomorrow." She spent the next 24 hours literally vibrating with excitement. "I can't believe this is really happening!" she whispered to me at bed-time. "It is actually happening!"
The next morning - after an agonisingly long time spent deciding on which surgical-steel earrings would be used for the piercing (she eventually chose gold studs with pink stones) - we sat together in a tiny clinical room, ready to go. I was more nervous than Scout was, my nerves somewhat exacerbated by the eccentric pharmacist who was doing the piercing. He insisted on following a checklist of warnings and health-risks, reiterating worst-case scenarios in graphic detail, and even interviewed my still-four year old daughter about pre-existing piercings and tattoos, then double-checked: "Have you been drinking alcohol today?" (I only just resisted the urge to ask him, "Have you?!")
Afterwards, over celebratory hot drinks at the local deli, I felt a kind of grief. Scout just looked so grown-up with those earrings shining from her still-red lobes. But it wasn't only about her appearance, it was also about what the earrings now symbolised. My little girl had voluntarily agreed to have holes put in her ears. And let's not sugar-coat it, they hurt, going in. I had warned her that they would hurt but she choose to go ahead anyway. After the first ear was pierced there were some tears, but she still chose to continue. She straightened her back and squeezed my hand just a little tighter, ready to go.
It was her decision to endure the bad thing to get to the good thing that had me swallowing sobs along with my coffee. There was only one way to describe what was going on with that kind of thinking: maturity.
Twice a week I pack a lunch-box and Scout goes off to kinder. The packing of that lunch box is one of the highlights of her week, and many an ernest discussion is had over its contents (including one time when I ruined an entire 500-gram block of tasty cheese by carving out three long tubes with an apple-corer, so that she could have "cheese fingers" like the pre-pacakged ones her friends had).
She speaks with a little lisp, slightly more pronounced right now because yesterday, just after breakfast, she lost her first tooth. There it was: a tiny, tangible, undeniable symbol of the relentless forward-rush of time. She held it in her hand and stared at it with a mixture of surprise, wonder, fear and pride washing over her face like a silent movie.
Next year, Scout will go to school, and I will be packing her lunch-box five days a week. The following year I'll be packing a lunch-box for Ralph five days a week too.
And what then? I am not ready.
Teaching children a second language
Do you / did you teach your children a second language? Did you learn another language when you were little? How did you do it? I'd love your tips and advice!
When my father was growing up, French was the only language spoken inside the home. Then he'd go to school in Australia and speak only English all day with his friends and teachers. The result was that he grew up fully bilingual (albeit with apparently the most appalling Australian accent to his French you could ever imagine).
Sadly, my father didn't do the same thing at home when I was growing up. By the time I was 11 and about to travel by myself to New Caledonia to visit relatives, the sum total of my French was to be able to say "Oui," "Non," count to ten, and to say the word for toilet (taught to me as "cabinet," which I learned when I got over there was hopelessly out-of-date. When I asked for the "cabinet," everybody just shrugged).
Now, I'm trying to do for my children what I wish my parents had done from me, and introduce a second language into their lives before it starts to feel like "learning." It's important to me that they learn their family's language. Even though we live in Australia, most of my dad's side of the family are still in French-speaking countries, and that's a big part of my children's heritage.
The trouble is, of course, my aforementioned dearth of French-language skills. I've improved since my "cabinet" days, and can count past 10, but it's not ideal. French people understand me when I speak, but they also laugh. Attempting the whole "speak French to them at home all the time" thing with my kids would probably be doing them a great disservice.
We are planning an extended trip to France next year (I'll share more about that soon), so I've decided to get more strategic about this whole 'language acquisition' agenda I have for my family. A lovely French girl called Cecce visits us once a week to help teach the children. Throughout the week, we also listen to French songs, choose French language on our favourite DVDs if it's available, watch French kids' shows on YouTube (my guys are addicted to a cartoon called PJ Mask), and we have a big French vocabulary book (that is unfortunately spurned by my kids).
Where possible, I incorporate French words into our day-to-day lives. I encourage them to say hello, goodbye and thank-you in French instead of English (we sound like such tossers when out and about doing this, but I persist, blushing like crazy, because I am determined that we'll be ready for France next year). We count stairs / birthdays / dried apricots in French, and we identify the names of things and colours of things in French as we walk down the street.
I've tried to find some more narrative-style books in French, without much luck. A while back somebody recommended a little French magazine called Pomme d'Api for small children, but getting hold of it in Australia was fabulously expensive. Like, remortgage-your-house-level expensive.
And then last month, out of the blue, the publishers of Pomme d'Api, Bayard Milan, contacted me to let me know that a number of their children's book and magazine titles are now available in Australia, in the English language. They offered to send my children some of the magazines to try, to which I breathlessly replied, "Will the French-language titles be available in Australia too?" The answer is yes, so AT LAST we have some stories, games and activities to help my children learn French (and we get to keep our house).
For example, the little French stories in Histories pour les petits are great to read to the children, because the language is simple enough for me to understand and therefore explain if I need to, but mostly they can follow along by looking at the pictures, and listening for words they already know. My children love activities in magazines, like mazes, spot-the-difference, and find-hidden-objects, so they enjoyed the magazine Toupie, pitched at children three-to-six years old. In English, we particularly loved one of the magazines called Story Box, which was filled with fictional stories as well as fun science explanations such as "why we breathe" and animal information.
We will keep on reading but in the meantime, I'd love to know your tips. What are some fun ways to teach language to children (if you're not super-fluent in that language yourself)?
This post was not sponsored, however, these magazines were sent as a gift to my children. If you like the look of them, they are now available in Australia in English, Spanish, German and French. To order, visit www.bayard-presse.com.au, and use the code E20 for a discount.
Tagged: French, parenting, books, learning
Ralph says, Scout says
Conversations with my children, aged three and four...
Scout [touching my acceptance ring]: Are you wearing that so I can marry a girl? Me: Sort of, yes. I'm wearing it until Australia changes the law, because I think you and Ralph and anybody else should be able to marry whoever you love, no matter whether they are a boy or a girl. Do you think that's right? Scout: Yes! [shrugs her shoulders] Maybe I will love a girl, maybe I will love a boy. You never know. Me again [inside my head]: I am winning at parenting Ralph: Then I will marry Scout!
Ralph begs me to tie a ribbon around his head like a flapper headband. Me [tying it on]: Why do you want to wear this? Ralph: It makes me more super-y. Now I can save the day!
Scout [to Ralph]: I don't want you on my bed, you poo poo bum bum. You're spoilt Ralph: Well you're spoilter!
Scout: What is bigger, Jupiter or the sun? Me: The sun [finding a picture to show her]. See how Earth looks teeny and Jupiter looks enormous? The sun is even bigger than that Scout: Woah! Ralph: But Jupiter isn't jealous, because it has lots of moons Me: Yes! Where did you learn that? Ralph: From Jet Revolting (I don't even know what this is supposed to be, other than a TV show. But it is clear that not only am I allowing my children to watch TV unsupervised, but also that I am allowing TV to educate said children. #parentoftheyear)
Ralph: I am an expert at doing things just a little bit naughty
Me: Would you like some meat Scout? Scout: No, I'm like totally cool without
Scout: Ralph, let's play a game. You are my baby Ralph: No! Scout: Alright, not a baby. You can be a toddler Ralph: I am not a toddler. I am a CAR Scout: Well, "toddler" is actually the French word for "car" Ralph: OK then
Scout: Mummy says we have to get dressed, Ralph. It's the LAW
Me: Ralph, that was a bit naughty when you threw that cup at me. Do you think you have calmed down now? Ralph [looking up with a grin]: Well, I'm still a liiiii-tle bit curious of how cross you can be
I'll let Scout have the last word, in this poster I saw hanging up at her daycare last week. Could my heart swell any further?


text:
Land lost to unauthorised occupants being taken back after SC orders
ISLAMABAD: The Capital Development Authority (CDA) have recovered 7,170 kanals from land-grabbers in Islamabad. This was said in a report submitted to a three-member bench of the Supreme Court on Saturday. Chief Justice Iftikhar Muhammad Chaudhry headed the bench.
The Supreme Court had directed CDA to get the land back without offering any concessions or compromises to the encroachers. CDA was told: "Money for it (the land) was paid out of public exchequer therefore it should be taken back."
The court stated that the previous owners had no claim over the land anymore. The court had asked CDA chairperson to submit a fortnightly progress report on the matter. "A fortnightly progress report should also be sent to the registrar for perusal of the court until the whole property owned by CDA, and presently in possession of unauthorised occupants, is recovered," the court had said in its ruling.
The report said that 250 kanals were repossessed at Malpur Village on January 12 and pickets had been put up over there to discourage further encroachments. "Possession of another 10 kanals in the same village was taken on January 18," said a CDA official.
The report further revealed that new construction was stopped in Village Lakhwal and pickets were placed to stop further encroachments. "Operations have also been carried out by the Enforcement Directorate and possession of approximately 1,400 kanals in Chak Bhera Singh, Dhok Jeejan and Village Lakhwal were reclaimed on February 14," it added. The report said possession of another piece of prime land measuring 10 kanals at Malpur, close to Chinese Embassy, had also been taken on February 15.


text:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace GNF.Domain.UnitOfWork
{
    public enum ConnectionConfigType
    {
        AppSettings,
        ConnectionStrings
    }
}


This is a Canadian company that best sells coffees and doughnuts. It is globally known as Tim Horton's Cafe and Bakeshop, Inc.
People would love this prestigious café because of the richness of the fresh coffee they brew and serve to each of the customers. Their freshly-baked donuts are incredible.
Tim Horton, a legend of hockey together with Jim Charade, a businessman founded Tim Horton's in 1964. The first franchise store was in Hamilton, Ontario, Canada in April of 1964.
There are roughly 4,748 store locations worldwide. It is said to be known as the leading food chain in Canada.
Most of the store is designed to have a modern architectural style with a touch of classic. The dining area can accommodate groups of coffee drinkers.
The foods that they served are worth your money. The doughnuts have a balance in taste and form. It blends well in your taste buds.
Coffees and cold beverages are delicately handcrafted that you'll be in so much awe for its taste. The coffee and other drinks are blended perfectly.
There are times you'll have to wait a little longer for their service due to long lines of customers. Staffs are accommodating and honest.


text:
Place names unlock the secrets of the past
What's in a name? When it comes to the place names of Deeside and the North East of Scotland the answer is a fascinating window on history!
The Cairngorms National Park Authority (CNPA) and Birse Community Trust (BCT) welcomed leading experts to Finzean Village Hall on Wednesday 11 March to shed light on the origins of place names and the intriguing stories behind some of them. The talks focussed on the rich cultural landscape of Birse, Deeside and the wider North East, where the influences of Gaelic, Scots and Pictish language can all be found in traditional local place names.
The event, for local residents and others from across Deeside, was designed to raise awareness of local place names and encourage on-going interest in them. It was also aimed at increasing people's confidence so they feel more comfortable using Gaelic/Scots names.
CNPA Land Management Officer, Penny Lawson, explains "Place names all around us tell of the rich heritage of our land and it was great to find out more from the experts. Many of the countryside rangers who attended said they had learned some fascinating facts that they could now pass on to locals and visitors in the course of their work."
Roddy Maclean was one of the speakers on the day, his talk concentrated on elements of the Gaelic nomenclature in upper Deeside. He said, "It was a really terrific event. I myself learned a lot from the other speakers, and the knowledgeable audience, about the fascinating place names of the area– coined in languages both present and past . The CNPA and BCT are to be congratulated for organising the day, and I hope its success will encourage many more events that celebrate the rich linguistic and cultural heritage of the National Park and its hinterland."
Robin Callander of BCT commented "The meeting was a great success, with excellent presentations and interesting discussion. BCT will now be doing more to try to help ensure traditional local paces names in Birse parish are not lost with passing generations."


text:
John Scarlett, (born 1948) was Director General of the British Secret Intelligence Service.

John Scarlett or Scarlet may also refer to:

John Scarlet, Indonesian footballer
John Scarlet (MP) for Southampton (UK Parliament constituency)
John Scarlett (footballer), (born 1947) former Australian rules footballer
John Scarlett (Toronto), (1777–1865) Canadian merchant-miller, and pioneer

See also


Lawren Harris was born in Brantford, Ontario October 23 1885; died January 29 1970.
Harris' technique and subject matter changed radically after a trip in 1918 to northern Ontario.
He painted the rugged landscape while traveling in a railroad boxcar.
In later trips he sketched the north shore of Lake Superior, the Rockies, and the Canadian Arctic.
He captured the stark landscape of these regions using a more simplified, powerful technique.


We are Southern California's premiere DJ and Entertainment company, providing the industry's best DJs and Entertainers for your wedding. Our DJs have bring experience spinning at clubs & Corporate, Fashion, Film and private events to your wedding, making sure that your soundscape uniquely tells your story as a couple, and ensure that everyone from Grandma to the littlest ones have a great time on the dance floor! We also provide ceremony and reception musicians. Check out our website and give us a call so we can help you create a unique soundscape that will add to the fun and magic of your wedding day! We also travel for destination weddings!


AllianceBernstein: Should equity investors lose sleep over the yield curve?
What investors really worry about is the yield curve going beyond flat to inverted, with short-term rates higher than long-term rates. It hasn't been lost on investors that inverted curves have correctly signalled the past seven US recessions.
In our view, the Fed isn't trying to throw water on runaway growth—it's taking advantage of a strong economy to return the fed funds rate to a more typical pre-crisis level.
That isn't what's happening this time. Sure, growth is strong and even topped 4% in the second quarter. But even though inflation is slowly rising, it doesn't point to an overheated economy.
Finally, even if the worst comes to pass and the curve rolls over, history shows that stocks can perform quite well for quite some time after this flip happens. During five mild inversions between 1986 and 2001, the stock market returned an average of 15% in the three years following the flip, starting the month the inversion occurred (Display).
This information is delivered to you by AllianceBernstein Limited, 50 Berkeley Street, London W1J 8HA, a company registered in England under company number 2551144. AllianceBernstein Limited is authorised and regulated in the UK by the Financial Conduct Authority (FCA – Reference Number 147956). This information is directed at Professional Clients only. It is provided for informational purposes only and does not constitute investment advice or an invitation to purchase any security or other investment. The views and opinions expressed are based on our internal forecasts and should not be relied upon as an indication of future market performance. Past performance is no guarantee of future returns. The information contained is not intended for public use.


text:
In DepthEarth Science
New geological age comes under fire
Paul Voosen
In July, the International Commission on Stratigraphy (ICS), the bureaucracy that governs geological time, declared we are living in a new geological age called the Meghalayan, based on signs in the rock record of a global drought that began about 4200 years ago. It is one of three newly named subdivisions of the Holocene, the geological epoch that began 11,700 years ago with the retreat of ice age glaciers. Although the name will now filter its way into textbooks, many scientists say that the "4.2-kiloyear" drought event was neither global nor fixed to that moment in time. Replications of the exemplar rock sample from a cave in northeastern India have been inexact, and an unpublished broad-scale analysis failed to find an event of climatic significance around the same time period. All debate over the division will have to wait a decade, however, as ICS limits debates to prevent continual squabbles.
You are going to email the following New geological age comes under fire
By Paul Voosen
Timing and extent of ancient drought used to define the Meghalayan are uncertain.
PODCAST Doubts about the drought that kicked off our latest geological age, and a faceoff between stink bugs with samurai wasps


text:
Miami-Dade - 786-LAW-FIRM
Broward - 954-LAW-FIRM
Monica Benitez
Monica Benitez, Esq.
Address: 2901 SW 8th Street, Suite 205, Miami, FL 33135
Phone: 786-LAW-FIRM (786-529-3476) (MIAMI)
954-LAW-FIRM (954-529-3476) (BROWARD)
1-888-MY-TICKET (888-698-4253) (TOLL FREE)
Email: info@theticketjoint.com
Monica Benitez, Esq. is a Criminal Defense Attorney and former Prosecutor for the State of Florida.
Ms. Monica Benitez, a Miami native, is the founding member and CEO of Monica Benitez Law, A Criminal & Traffic Defense Law Firm. Ms. Benitez is well-known for providing aggressive legal representation to all of her clients throughout Florida who are charged with Traffic Offenses, DUI, Drug Charges, Violent Felonies, Misdemeanors and all State/Federal Crimes.
Ms. Benitez is a Former Prosecutor, where she served for 5 years with the State of Florida after obtaining her law degree in 2007 from Nova Southeastern University School of Law. She subsequently became a partner and owner at a criminal defense law firm where she defended clients on both the State and Federal level. As such, she has the unique experience of handling both misdemeanor and felony cases on both sides of the judicial system. Such unique experience has equipped her with the skill set and knowledge necessary in order to assert the "very best" defense possible in every case she handles with the mindset of having her client's cases dismissed and their reputations restored.
Florida, 2007
S. District Court Southern District of Florida, 2012
Nova Southeastern University, School of Law – J.D, Juris Doctor – 2007
University of Central Florida – B.A, Bachelor of Arts – 2002
Nation's Top One Percent by the National Association of Distinguished Counsel, 2015
10 Best in Client Satisfaction by the American Institute of Criminal Law Attorneys, 2015
Dade County Bar Association
Florida Association of Criminal Defense Lawyers
A Former Prosecutor, who served the State of Florida for 5 years.
© 2015 Monica Benitez Law, All Rights Reserved. Website by Corey Consulting
Lawyer Monica Benitez | Lawyer Criminal Defense
Lawyer Monica Benitez | Featured Attorney Criminal Defense
Enter your keyword:


In Dagestan one may find such a wonder – a shaft-sinking and tunnelling complex Robbins (USA) that overcame 5 km in the mountains?!
It used to be a diversion tunnel 5,2 km long from the dam to the station. Water went through the generator producing electricity. It was done for elevation changes for bigger station power. The first machine of such type in Russia was exactly here, at Irganaiskaya hydrostation.
James Robbins made its first drilling machine in 1950. He designed the equipment with rotary heads and saws, the technologies that exist today too. Tunneling machines are faster and safer for making tunnels than those that had been used before.
Here's how it looks when it's moving.


Sizzling Hot Deluxe casino slot game is a perfect example of the fruit slot genre. Novomatic online slots are known for their classic slot series, and it doesn't get any more classic than the Sizzling Hot Deluxe. If you like to play casino slots online with simple rules and high payouts, this is your lucky day. "Simplicity" is the keyword for the game; graphics are simple, rules are simple but the pace of the game is quite high. This is a high variance slot game, costs per spin are low but the winnings are not – and they trigger more than often. Sizzling Hot Deluxe has 5 reels, 3 slots and 5 pay lines.
As you can guess by the category name, all of the symbols are represented by fruit pictures. Sizzling Hot Deluxe online slot game by Novomatic has six symbols in total and all of them contain high payout values; between 1.000 and 100.000 coins. The most valued symbol in the game is the "7" sign; it pays 1.000.000 coins if you manage to receive five of them. Scatter is the only special symbol in the game and it is shown with a simple "scatter" sign. Scatter symbol has a payout of 50.000 coins and landing it anywhere on reels is enough to get paid. In other words, you are awarded just by receiving them; landing on a pay line is not needed. And that's it – there are no wild symbols, free spins and/or bonus rounds in the game. This may seem like a disadvantage but it is not; fruit slot games don't have special symbols and bonus rounds in general. They are known for their high (and frequent) payments, not for "fancy" features. This is the case for Sizzling Hot Deluxe too, landing winning combinations on reels happen more than often.
You can bet between 1.00 and 200 coins per line and you are advised to play with maximum values. The payouts of the symbols change according to your bet, so always bet on maximum. You can also try the free slots no download version if you play at Casino Avenue but beware; the sum of demo credits are equal to maximum bet values. In other words, you can blow them all with one spin.


text:
Netflix launches its own content delivery network
Netflix is launching Open Connect, its own content delivery network. The new strategy allows the online video service, for the first time, to deliver its own content to Internet service providers in addition to using the commercial content delivery (CDN) networks it now employs.
Netflix now streams nearly one billion hours of video monthly over the Internet, using commercial CDN providers. The largest is Level 3 Communications. By owning its own CDN, Netflix will provide streaming video at no cost at locations selected by ISPs or through common Internet peering exchanges, wrote Ken Florance, Netflix's vice president of content delivery, in a blog this week.
Florance noted that Google's YouTube, the largest video service on the Internet, has long operated its own CDN. "Given our size and growth, it now makes economic sense for Netflix to have one as well," he said.
Open Connect, according to Florance, is already serving about five percent of Netflix data. Netflix will continue to work with its commercial CDN partners for the next few years, he added, "but eventually most of our data will be served by Open Connect."
As part of Open Connect, Netflix is also sharing its hardware design and the open source software components of the server. These cost-efficient designs are suitable for any high-volume provider of large media files. "We welcome commentary and improvements, which will be shared with the community with the goal of a faster, less expensive Internet for all," Florance said.
The Netflix CDN may help solve future problems for the online video distributor. In North America, Netflix's streaming video traffic already represents 33 percent of all peak hour downstream bandwidth over wireline broadband networks, said Sandvine, a provider of bandwidth management equipment, in a study released last April.
Last year, Level 3, which is Netflix's primary CDN provider, accused Comcast Cable of violating the FCC's network neutrality principles because the operator was charging interconnection fees. Comcast said that Level 3 was trying to avoid paying standard CDN fees.
Using Open Connect, Netflix said it now offers settlement-free peering connections in seven U.S. cities: New York (Equinix Internet Exchange, Telx Internet Exchange and NYIIX); Los Angeles (Any2 Internet Exchange); Chicago (Equinix); Ashburn, Va. (Equinix); Atlanta (Telx); Miami (NAP Of The Americas) and San Jose, California. (Equinix). Netflix also has a presence in London's LINX and LONAP exchanges.
Netflix, which has also developed Open Connect Appliance Hardware, has published more info on the Open Connect initiative online.
Scripps Moving Multicast Networks onto Ion TV Stations
New ATSC 3.0 Sets, Devices Launch at CES 2021
Achieving Quality With LED Arrays
Grass Valley Puts Focus on Cloud With New Business Strategy