text:
package org.apache.cassandra.config;

import java.io.*;
import java.lang.reflect.Field;
import java.net.InetAddress;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.UnknownHostException;
import java.util.*;

import org.apache.cassandra.io.sstable.Descriptor;
import org.apache.cassandra.locator.DynamicEndpointSnitch;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import org.apache.cassandra.auth.*;
import org.apache.cassandra.config.Config.RequestSchedulerId;
import org.apache.cassandra.db.ClockType;
import org.apache.cassandra.db.ColumnFamilyType;
import org.apache.cassandra.db.DefsTable;
import org.apache.cassandra.db.Table;
import org.apache.cassandra.db.clock.AbstractReconciler;
import org.apache.cassandra.db.clock.TimestampReconciler;
import org.apache.cassandra.db.commitlog.CommitLog;
import org.apache.cassandra.db.marshal.AbstractType;
import org.apache.cassandra.db.migration.Migration;
import org.apache.cassandra.dht.IPartitioner;
import org.apache.cassandra.io.util.FileUtils;
import org.apache.cassandra.locator.AbstractReplicationStrategy;
import org.apache.cassandra.locator.LocalStrategy;
import org.apache.cassandra.locator.IEndpointSnitch;
import org.apache.cassandra.scheduler.IRequestScheduler;
import org.apache.cassandra.scheduler.NoScheduler;
import org.apache.cassandra.service.StorageService;
import org.apache.cassandra.utils.FBUtilities;
import org.apache.cassandra.utils.Pair;
import org.yaml.snakeyaml.Loader;
import org.yaml.snakeyaml.TypeDescription;
import org.yaml.snakeyaml.Yaml;
import org.yaml.snakeyaml.error.YAMLException;

public class DatabaseDescriptor
{
    private static Logger logger = LoggerFactory.getLogger(DatabaseDescriptor.class);

    private static IEndpointSnitch snitch;
    private static InetAddress listenAddress; // leave null so we can fall through to getLocalHost
    private static InetAddress rpcAddress;
    private static Set<InetAddress> seeds = new HashSet<InetAddress>();
    /* Current index into the above list of directories */
    private static int currentIndex = 0;
    private static int consistencyThreads = 4; // not configurable

    static Map<String, KSMetaData> tables = new HashMap<String, KSMetaData>();

    /* Hashing strategy Random or OPHF */
    private static IPartitioner partitioner;

    private static Config.DiskAccessMode indexAccessMode;

    private static Config conf;

    private static IAuthenticator authenticator = new AllowAllAuthenticator();
    private static IAuthority authority = new AllowAllAuthority();

    private final static String DEFAULT_CONFIGURATION = "cassandra.yaml";

    private static IRequestScheduler requestScheduler;
    private static RequestSchedulerId requestSchedulerId;
    private static RequestSchedulerOptions requestSchedulerOptions;

    public static final UUID INITIAL_VERSION = new UUID(4096, 0); // has type nibble set to 1, everything else to zero.
    private static UUID defsVersion = INITIAL_VERSION;

    /**
     * Inspect the classpath to find storage configuration file
     */
    static URL getStorageConfigURL() throws ConfigurationException
    {
        String configUrl = System.getProperty("cassandra.config");
        if (configUrl == null)
            configUrl = DEFAULT_CONFIGURATION;

        URL url;
        try
        {
            url = new URL(configUrl);
        }
        catch (MalformedURLException e)
        {
            ClassLoader loader = DatabaseDescriptor.class.getClassLoader();
            url = loader.getResource(configUrl);
            if (url == null)
                throw new ConfigurationException("Cannot locate " + configUrl);
        }

        return url;
    }

    static
    {
        try
        {
            URL url = getStorageConfigURL();
            if (logger.isDebugEnabled())
                logger.info("Loading settings from " + url);

            InputStream input = url.openStream();
            org.yaml.snakeyaml.constructor.Constructor constructor = new org.yaml.snakeyaml.constructor.Constructor(Config.class);
            TypeDescription desc = new TypeDescription(Config.class);
            desc.putListPropertyType("keyspaces", RawKeyspace.class);
            TypeDescription ksDesc = new TypeDescription(RawKeyspace.class);
            ksDesc.putListPropertyType("column_families", RawColumnFamily.class);
            TypeDescription cfDesc = new TypeDescription(RawColumnFamily.class);
            cfDesc.putListPropertyType("column_metadata", RawColumnDefinition.class);
            constructor.addTypeDescription(desc);
            constructor.addTypeDescription(ksDesc);
            constructor.addTypeDescription(cfDesc);
            Yaml yaml = new Yaml(new Loader(constructor));
            conf = (Config)yaml.load(input);

            if (conf.commitlog_sync == null)
            {
                throw new ConfigurationException("Missing required directive CommitLogSync");
            }

            if (conf.commitlog_sync == Config.CommitLogSync.batch)
            {
                if (conf.commitlog_sync_batch_window_in_ms == null)
                {
                    throw new ConfigurationException("Missing value for commitlog_sync_batch_window_in_ms: Double expected.");
                }
                else if (conf.commitlog_sync_period_in_ms != null)
                {
                    throw new ConfigurationException("Batch sync specified, but commitlog_sync_period_in_ms found. Only specify commitlog_sync_batch_window_in_ms when using batch sync");
                }
                logger.debug("Syncing log with a batch window of " + conf.commitlog_sync_batch_window_in_ms);
            }
            else
            {
                if (conf.commitlog_sync_period_in_ms == null)
                {
                    throw new ConfigurationException("Missing value for commitlog_sync_period_in_ms: Integer expected");
                }
                else if (conf.commitlog_sync_batch_window_in_ms != null)
                {
                    throw new ConfigurationException("commitlog_sync_period_in_ms specified, but commitlog_sync_batch_window_in_ms found.  Only specify commitlog_sync_period_in_ms when using periodic sync.");
                }
                logger.debug("Syncing log with a period of " + conf.commitlog_sync_period_in_ms);
            }

            /* evaluate the DiskAccessMode Config directive, which also affects indexAccessMode selection */
            if (conf.disk_access_mode == Config.DiskAccessMode.auto)
            {
                conf.disk_access_mode = System.getProperty("os.arch").contains("64") ? Config.DiskAccessMode.mmap : Config.DiskAccessMode.standard;
                indexAccessMode = conf.disk_access_mode;
                logger.info("DiskAccessMode 'auto' determined to be " + conf.disk_access_mode + ", indexAccessMode is " + indexAccessMode );
            }
            else if (conf.disk_access_mode == Config.DiskAccessMode.mmap_index_only)
            {
                conf.disk_access_mode = Config.DiskAccessMode.standard;
                indexAccessMode = Config.DiskAccessMode.mmap;
                logger.info("DiskAccessMode is" + conf.disk_access_mode + ", indexAccessMode is " + indexAccessMode );
            }
            else
            {
                indexAccessMode = conf.disk_access_mode;
                logger.info("DiskAccessMode is" + conf.disk_access_mode + ", indexAccessMode is " + indexAccessMode );
            }

            /* Authentication and authorization backend, implementing IAuthenticator and IAuthority */
            if (conf.authenticator != null)
                authenticator = FBUtilities.<IAuthenticator>construct(conf.authenticator, "authenticator");
            if (conf.authority != null)
                authority = FBUtilities.<IAuthority>construct(conf.authority, "authority");
            authenticator.validateConfiguration();
            authority.validateConfiguration();

            /* Hashing strategy */
            if (conf.partitioner == null)
            {
                throw new ConfigurationException("Missing directive: partitioner");
            }
            try
            {
                partitioner = FBUtilities.newPartitioner(conf.partitioner);
            }
            catch (Exception e)
            {
                throw new ConfigurationException("Invalid partitioner class " + conf.partitioner);
            }

            /* phi convict threshold for FailureDetector */
            if (conf.phi_convict_threshold < 5 || conf.phi_convict_threshold > 16)
            {
                throw new ConfigurationException("phi_convict_threshold must be between 5 and 16");
            }

            /* Thread per pool */
            if (conf.concurrent_reads != null && conf.concurrent_reads < 2)
            {
                throw new ConfigurationException("concurrent_reads must be at least 2");
            }

            if (conf.concurrent_writes != null && conf.concurrent_writes < 2)
            {
                throw new ConfigurationException("concurrent_writes must be at least 2");
            }

            /* Memtable flush writer threads */
            if (conf.memtable_flush_writers != null && conf.memtable_flush_writers < 1)
            {
                throw new ConfigurationException("memtable_flush_writers must be at least 1");
            }
            else if (conf.memtable_flush_writers == null)
            {
                conf.memtable_flush_writers = conf.data_file_directories.length;
            }

            /* Local IP or hostname to bind services to */
            if (conf.listen_address != null)
            {
                if (conf.listen_address.equals("0.0.0.0"))
                {
                    throw new ConfigurationException("listen_address must be a single interface.  See http://wiki.apache.org/cassandra/FAQ#cant_listen_on_ip_any");
                }

                try
                {
                    listenAddress = InetAddress.getByName(conf.listen_address);
                }
                catch (UnknownHostException e)
                {
                    throw new ConfigurationException("Unknown listen_address '" + conf.listen_address + "'");
                }
            }

            /* Local IP or hostname to bind RPC server to */
            if (conf.rpc_address != null)
                rpcAddress = InetAddress.getByName(conf.rpc_address);

            if (conf.thrift_framed_transport_size_in_mb > 0 && conf.thrift_max_message_length_in_mb < conf.thrift_framed_transport_size_in_mb)
            {
                throw new ConfigurationException("thrift_max_message_length_in_mb must be greater than thrift_framed_transport_size_in_mb when using TFramedTransport");
            }

            /* compaction thread priority */
            if (conf.compaction_thread_priority < Thread.MIN_PRIORITY || conf.compaction_thread_priority > Thread.NORM_PRIORITY)
            {
                throw new ConfigurationException("compaction_thread_priority must be between 1 and 5");
            }

            /* end point snitch */
            if (conf.endpoint_snitch == null)
            {
                throw new ConfigurationException("Missing endpoint_snitch directive");
            }
            snitch = createEndpointSnitch(conf.endpoint_snitch);

            /* Request Scheduler setup */
            requestSchedulerOptions = conf.request_scheduler_options;
            if (conf.request_scheduler != null)
            {
                try
                {
                    if (requestSchedulerOptions == null)
                    {
                        requestSchedulerOptions = new RequestSchedulerOptions();
                    }
                    Class cls = Class.forName(conf.request_scheduler);
                    requestScheduler = (IRequestScheduler) cls.getConstructor(RequestSchedulerOptions.class).newInstance(requestSchedulerOptions);
                }
                catch (ClassNotFoundException e)
                {
                    throw new ConfigurationException("Invalid Request Scheduler class " + conf.request_scheduler);
                }
            }
            else
            {
                requestScheduler = new NoScheduler();
            }

            if (conf.request_scheduler_id == RequestSchedulerId.keyspace)
            {
                requestSchedulerId = conf.request_scheduler_id;
            }
            else
            {
                // Default to Keyspace
                requestSchedulerId = RequestSchedulerId.keyspace;
            }

            if (logger.isDebugEnabled() && conf.auto_bootstrap != null)
            {
                logger.debug("setting auto_bootstrap to " + conf.auto_bootstrap);
            }

            /* Number of objects in millions in the memtable before it is dumped */
            if (conf.memtable_operations_in_millions != null && conf.memtable_operations_in_millions <= 0)
            {
                throw new ConfigurationException("memtable_operations_in_millions must be a positive double");
            }

            if (conf.in_memory_compaction_limit_in_mb != null && conf.in_memory_compaction_limit_in_mb <= 0)
            {
                throw new ConfigurationException("in_memory_compaction_limit_in_mb must be a positive integer");
            }

            /* data file and commit log directories. they get created later, when they're needed. */
            if (conf.commitlog_directory != null && conf.data_file_directories != null)
            {
                for (String datadir : conf.data_file_directories)
                {
                    if (datadir.equals(conf.commitlog_directory))
                        throw new ConfigurationException("commitlog_directory must not be the same as any data_file_directories");
                }
            }
            else
            {
                if (conf.commitlog_directory == null)
                    throw new ConfigurationException("commitlog_directory missing");
                if (conf.data_file_directories == null)
                    throw new ConfigurationException("data_file_directories missing; at least one data directory must be specified");
            }

            /* threshold after which commit log should be rotated. */
            if (conf.commitlog_rotation_threshold_in_mb != null)
                CommitLog.setSegmentSize(conf.commitlog_rotation_threshold_in_mb * 1024 * 1024);

            // Hardcoded system tables
            KSMetaData systemMeta = new KSMetaData(Table.SYSTEM_TABLE,
                                                   LocalStrategy.class,
                                                   null,
                                                   1,
                                                   new CFMetaData[]{CFMetaData.StatusCf,
                                                                    CFMetaData.HintsCf,
                                                                    CFMetaData.MigrationsCf,
                                                                    CFMetaData.SchemaCf,
            });
            CFMetaData.map(CFMetaData.StatusCf);
            CFMetaData.map(CFMetaData.HintsCf);
            CFMetaData.map(CFMetaData.MigrationsCf);
            CFMetaData.map(CFMetaData.SchemaCf);
            tables.put(Table.SYSTEM_TABLE, systemMeta);

            /* Load the seeds for node contact points */
            if (conf.seeds == null || conf.seeds.length <= 0)
            {
                throw new ConfigurationException("seeds missing; a minimum of one seed is required.");
            }
            for( int i = 0; i < conf.seeds.length; ++i )
            {
                seeds.add(InetAddress.getByName(conf.seeds[i]));
            }
        }
        catch (ConfigurationException e)
        {
            logger.error("Fatal error: " + e.getMessage());
            System.err.println("Bad configuration; unable to start server");
            System.exit(1);
        }
        catch (YAMLException e)
        {
            logger.error("Fatal error: " + e.getMessage());
            System.err.println("Bad configuration; unable to start server");
            System.exit(1);
        }
        catch (Exception e)
        {
            throw new RuntimeException(e);
        }
    }

    private static IEndpointSnitch createEndpointSnitch(String endpointSnitchClassName) throws ConfigurationException
    {
        IEndpointSnitch snitch = FBUtilities.<IEndpointSnitch>construct(endpointSnitchClassName, "snitch");
        return conf.dynamic_snitch ? new DynamicEndpointSnitch(snitch) : snitch;
    }

    public static void loadSchemas() throws IOException
    {
        // we can load tables from local storage if a version is set in the system table and that acutally maps to
        // real data in the definitions table.  If we do end up loading from xml, store the defintions so that we
        // don't load from xml anymore.
        UUID uuid = Migration.getLastMigrationId();
        if (uuid == null)
        {
            logger.info("Couldn't detect any schema definitions in local storage.");
            // peek around the data directories to see if anything is there.
            boolean hasExistingTables = false;
            for (String dataDir : DatabaseDescriptor.getAllDataFileLocations())
            {
                File dataPath = new File(dataDir);
                if (dataPath.exists() && dataPath.isDirectory())
                {
                    // see if there are other directories present.
                    int dirCount = dataPath.listFiles(new FileFilter()
                    {
                        public boolean accept(File pathname)
                        {
                            return pathname.isDirectory();
                        }
                    }).length;
                    if (dirCount > 0)
                        hasExistingTables = true;
                }
                if (hasExistingTables)
                {
                    break;
                }
            }

            if (hasExistingTables)
                logger.info("Found table data in data directories. Consider using JMX to call org.apache.cassandra.service.StorageService.loadSchemaFromYaml().");
            else
                logger.info("Consider using JMX to org.apache.cassandra.service.StorageService.loadSchemaFromYaml() or set up a schema using the system_* calls provided via thrift.");

        }
        else
        {
            logger.info("Loading schema version " + uuid.toString());
            Collection<KSMetaData> tableDefs = DefsTable.loadFromStorage(uuid);
            for (KSMetaData def : tableDefs)
            {
                if (!def.name.matches(Migration.NAME_VALIDATOR_REGEX))
                    throw new RuntimeException("invalid keyspace name: " + def.name);
                for (CFMetaData cfm : def.cfMetaData().values())
                {
                    if (!cfm.cfName.matches(Migration.NAME_VALIDATOR_REGEX))
                        throw new RuntimeException("invalid column family name: " + cfm.cfName);
                    try
                    {
                        CFMetaData.map(cfm);
                    }
                    catch (ConfigurationException ex)
                    {
                        throw new IOError(ex);
                    }
                }
                DatabaseDescriptor.setTableDefinition(def, uuid);
                // this part creates storage and jmx objects.
                Table.open(def.name);
            }

            // happens when someone manually deletes all tables and restarts.
            if (tableDefs.size() == 0)
            {
                logger.warn("No schema definitions were found in local storage.");
                // set defsVersion so that migrations leading up to emptiness aren't replayed.
                defsVersion = uuid;
            }

            // since we loaded definitions from local storage, log a warning if definitions exist in yaml.
            if (conf.keyspaces != null && conf.keyspaces.size() > 0)
                logger.warn("Schema definitions were defined both locally and in " + DEFAULT_CONFIGURATION +
                    ". Definitions in " + DEFAULT_CONFIGURATION + " were ignored.");

        }
        CFMetaData.fixMaxId();
    }

    /** reads xml. doesn't populate any internal structures. */
    public static Collection<KSMetaData> readTablesFromYaml() throws ConfigurationException
    {
        List<KSMetaData> defs = new ArrayList<KSMetaData>();

        /* Read the table related stuff from config */
        for (RawKeyspace keyspace : conf.keyspaces)
        {
            /* parsing out the table name */
            if (keyspace.name == null)
            {
                throw new ConfigurationException("Keyspace name attribute is required");
            }

            if (keyspace.name.equalsIgnoreCase(Table.SYSTEM_TABLE))
            {
                throw new ConfigurationException("'system' is a reserved table name for Cassandra internals");
            }

            /* See which replica placement strategy to use */
            if (keyspace.replica_placement_strategy == null)
            {
                throw new ConfigurationException("Missing replica_placement_strategy directive for " + keyspace.name);
            }
            String strategyClassName = keyspace.replica_placement_strategy.replace("RackUnawareStrategy", "SimpleStrategy")
                                                                          .replace("RackAwareStrategy", "OldNetworkTopologyStrategy");
            Class<AbstractReplicationStrategy> strategyClass = FBUtilities.<AbstractReplicationStrategy>classForName(strategyClassName, "replication-strategy");

            /* Data replication factor */
            if (keyspace.replication_factor == null)
            {
                throw new ConfigurationException("Missing replication_factor directory for keyspace " + keyspace.name);
            }

            int size2 = keyspace.column_families.length;
            CFMetaData[] cfDefs = new CFMetaData[size2];
            int j = 0;
            for (RawColumnFamily cf : keyspace.column_families)
            {
                if (cf.name == null)
                {
                    throw new ConfigurationException("ColumnFamily name attribute is required");
                }
                if (!cf.name.matches(Migration.NAME_VALIDATOR_REGEX))
                {
                    throw new ConfigurationException("ColumnFamily name contains invalid characters.");
                }

                // Parse out the column comparators and validators
                AbstractType comparator = getComparator(cf.compare_with);
                AbstractType subcolumnComparator = null;
                AbstractType default_validator = getComparator(cf.default_validation_class);

                ColumnFamilyType cfType = cf.column_type == null ? ColumnFamilyType.Standard : cf.column_type;
                if (cfType == ColumnFamilyType.Super)
                {
                    subcolumnComparator = getComparator(cf.compare_subcolumns_with);
                }
                else if (cf.compare_subcolumns_with != null)
                {
                    throw new ConfigurationException("compare_subcolumns_with is only a valid attribute on super columnfamilies (not regular columnfamily " + cf.name + ")");
                }

                if (cf.clock_type == null)
                    cf.clock_type = ClockType.Timestamp; // default

                AbstractReconciler reconciler = getReconciler(cf.reconciler);
                if (reconciler == null)
                {
                    if (cf.clock_type == ClockType.Timestamp)
                        reconciler = TimestampReconciler.instance; // default
                    else
                        throw new ConfigurationException("No reconciler specified for column family " + cf.name);
                }
                if (cf.read_repair_chance < 0.0 || cf.read_repair_chance > 1.0)
                {
                    throw new ConfigurationException("read_repair_chance must be between 0.0 and 1.0");
                }

                Map<byte[], ColumnDefinition> metadata = new TreeMap<byte[], ColumnDefinition>(FBUtilities.byteArrayComparator);
                for (RawColumnDefinition rcd : cf.column_metadata)
                {
                    try
                    {
                        byte[] columnName = rcd.name.getBytes("UTF-8");
                        metadata.put(columnName, new ColumnDefinition(columnName, rcd.validator_class, rcd.index_type, rcd.index_name));
                    }
                    catch (UnsupportedEncodingException e)
                    {
                        throw new AssertionError(e);
                    }
                }

                cfDefs[j++] = new CFMetaData(keyspace.name,
                                             cf.name,
                                             cfType,
                                             cf.clock_type,
                                             comparator,
                                             subcolumnComparator,
                                             reconciler,
                                             cf.comment,
                                             cf.rows_cached,
                                             cf.preload_row_cache,
                                             cf.keys_cached,
                                             cf.read_repair_chance,
                                             cf.gc_grace_seconds,
                                             default_validator,
                                             metadata);
            }
            defs.add(new KSMetaData(keyspace.name,
                                    strategyClass,
                                    keyspace.strategy_options,
                                    keyspace.replication_factor,
                                    cfDefs));
        }

        return defs;
    }

    public static IAuthenticator getAuthenticator()
    {
        return authenticator;
    }

    public static IAuthority getAuthority()
    {
        return authority;
    }

    public static boolean isThriftFramed()
    {
        return conf.thrift_framed_transport_size_in_mb > 0;
    }

    public static int getThriftMaxMessageLength()
    {
        return conf.thrift_max_message_length_in_mb * 1024 * 1024;
    }

    public static int getThriftFramedTransportSize()
    {
        return conf.thrift_framed_transport_size_in_mb * 1024 * 1024;
    }

    public static AbstractType getComparator(String compareWith) throws ConfigurationException
    {
        if (compareWith == null)
            compareWith = "BytesType";

        return FBUtilities.getComparator(compareWith);
    }

    public static AbstractReconciler getReconciler(String reconcileWith) throws ConfigurationException
    {
        if (reconcileWith == null || reconcileWith.length() == 0)
        {
            return null;
        }

        String className = reconcileWith.indexOf('.') >= 0 ? reconcileWith : TimestampReconciler.class.getPackage().getName() + '.' + reconcileWith;
        Class<? extends AbstractReconciler> reconcilerClass = FBUtilities.<AbstractReconciler>classForName(className, "reconciler");
        try
        {
            Field field = reconcilerClass.getDeclaredField("instance");
            return (AbstractReconciler) field.get(null);
        }
        catch (NoSuchFieldException e)
        {
            throw new ConfigurationException("Invalid reconciler: must define a public static instance field.", e);
        }
        catch (IllegalAccessException e)
        {
            throw new ConfigurationException("Invalid reconciler: must define a public static instance field.", e);
        }
    }

    /**
     * Creates all storage-related directories.
     * @throws IOException when a disk problem is encountered.
     */
    public static void createAllDirectories() throws IOException
    {
        try {
            if (conf.data_file_directories.length == 0)
            {
                throw new ConfigurationException("At least one DataFileDirectory must be specified");
            }
            for ( String dataFileDirectory : conf.data_file_directories )
                FileUtils.createDirectory(dataFileDirectory);
            if (conf.commitlog_directory == null)
            {
                throw new ConfigurationException("commitlog_directory must be specified");
            }
            FileUtils.createDirectory(conf.commitlog_directory);
        }
        catch (ConfigurationException ex) {
            logger.error("Fatal error: " + ex.getMessage());
            System.err.println("Bad configuration; unable to start server");
            System.exit(1);
        }
    }

    public static IPartitioner getPartitioner()
    {
        return partitioner;
    }

    public static IEndpointSnitch getEndpointSnitch()
    {
        return snitch;
    }

    public static IRequestScheduler getRequestScheduler()
    {
        return requestScheduler;
    }

    public static RequestSchedulerOptions getRequestSchedulerOptions()
    {
        return requestSchedulerOptions;
    }

    public static RequestSchedulerId getRequestSchedulerId()
    {
        return requestSchedulerId;
    }

    public static Class<? extends AbstractReplicationStrategy> getReplicaPlacementStrategyClass(String table)
    {
    	KSMetaData meta = tables.get(table);
    	if (meta == null)
            throw new RuntimeException(table + " not found. Failure to call loadSchemas() perhaps?");
        return meta.strategyClass;
    }

    public static KSMetaData getKSMetaData(String table)
    {
        assert table != null;
        return tables.get(table);
    }

    public static String getJobTrackerAddress()
    {
        return conf.job_tracker_host;
    }

    public static int getColumnIndexSize()
    {
    	return conf.column_index_size_in_kb * 1024;
    }

    public static int getMemtableLifetimeMS()
    {
      return conf.memtable_flush_after_mins * 60 * 1000;
    }

    public static String getInitialToken()
    {
      return conf.initial_token;
    }

    public static int getMemtableThroughput()
    {
      return conf.memtable_throughput_in_mb;
    }

    public static double getMemtableOperations()
    {
      return conf.memtable_operations_in_millions;
    }

    public static String getClusterName()
    {
        return conf.cluster_name;
    }

    public static String getJobJarLocation()
    {
        return conf.job_jar_file_location;
    }

    public static Map<String, CFMetaData> getTableMetaData(String tableName)
    {
        assert tableName != null;
        KSMetaData ksm = tables.get(tableName);
        assert ksm != null;
        return ksm.cfMetaData();
    }

    /*
     * Given a table name & column family name, get the column family
     * meta data. If the table name or column family name is not valid
     * this function returns null.
     */
    public static CFMetaData getCFMetaData(String tableName, String cfName)
    {
        assert tableName != null;
        KSMetaData ksm = tables.get(tableName);
        if (ksm == null)
            return null;
        return ksm.cfMetaData().get(cfName);
    }

    public static CFMetaData getCFMetaData(Integer cfId)
    {
        Pair<String,String> cf = CFMetaData.getCF(cfId);
        if (cf == null)
            return null;
        return getCFMetaData(cf.left, cf.right);
    }

    public static ColumnFamilyType getColumnFamilyType(String tableName, String cfName)
    {
        assert tableName != null && cfName != null;
        CFMetaData cfMetaData = getCFMetaData(tableName, cfName);

        if (cfMetaData == null)
            return null;
        return cfMetaData.cfType;
    }

    public static ClockType getClockType(String tableName, String cfName)
    {
        assert tableName != null && cfName != null;
        CFMetaData cfMetaData = getCFMetaData(tableName, cfName);

        if (cfMetaData == null)
            return null;
        return cfMetaData.clockType;
    }

    public static Set<String> getTables()
    {
        return tables.keySet();
    }

    public static List<String> getNonSystemTables()
    {
        List<String> tableslist = new ArrayList<String>(tables.keySet());
        tableslist.remove(Table.SYSTEM_TABLE);
        return Collections.unmodifiableList(tableslist);
    }

    public static int getStoragePort()
    {
        return conf.storage_port;
    }

    public static int getRpcPort()
    {
        return conf.rpc_port;
    }

    public static int getReplicationFactor(String table)
    {
        return tables.get(table).replicationFactor;
    }

    public static long getRpcTimeout()
    {
        return conf.rpc_timeout_in_ms;
    }

    public static int getPhiConvictThreshold()
    {
        return conf.phi_convict_threshold;
    }

    public static int getConsistencyThreads()
    {
        return consistencyThreads;
    }

    public static int getConcurrentReaders()
    {
        return conf.concurrent_reads;
    }

    public static int getConcurrentWriters()
    {
        return conf.concurrent_writes;
    }

    public static int getFlushWriters()
    {
            return conf.memtable_flush_writers;
    }

    public static int getInMemoryCompactionLimit()
    {
        return conf.in_memory_compaction_limit_in_mb * 1024 * 1024;
    }

    public static String[] getAllDataFileLocations()
    {
        return conf.data_file_directories;
    }

    /**
     * Get a list of data directories for a given table
     *
     * @param table name of the table.
     *
     * @return an array of path to the data directories.
     */
    public static String[] getAllDataFileLocationsForTable(String table)
    {
        String[] tableLocations = new String[conf.data_file_directories.length];

        for (int i = 0; i < conf.data_file_directories.length; i++)
        {
            tableLocations[i] = conf.data_file_directories[i] + File.separator + table;
        }

        return tableLocations;
    }

    public synchronized static String getNextAvailableDataLocation()
    {
        String dataFileDirectory = conf.data_file_directories[currentIndex];
        currentIndex = (currentIndex + 1) % conf.data_file_directories.length;
        return dataFileDirectory;
    }

    public static String getCommitLogLocation()
    {
        return conf.commitlog_directory;
    }

    public static Set<InetAddress> getSeeds()
    {
        return seeds;
    }

    /*
     * Loop through all the disks to see which disk has the max free space
     * return the disk with max free space for compactions. If the size of the expected
     * compacted file is greater than the max disk space available return null, we cannot
     * do compaction in this case.
     */
    public static String getDataFileLocationForTable(String table, long expectedCompactedFileSize)
    {
      long maxFreeDisk = 0;
      int maxDiskIndex = 0;
      String dataFileDirectory = null;
      String[] dataDirectoryForTable = getAllDataFileLocationsForTable(table);

      for ( int i = 0 ; i < dataDirectoryForTable.length ; i++ )
      {
        File f = new File(dataDirectoryForTable[i]);
        if( maxFreeDisk < f.getUsableSpace())
        {
          maxFreeDisk = f.getUsableSpace();
          maxDiskIndex = i;
        }
      }
      // Load factor of 0.9 we do not want to use the entire disk that is too risky.
      maxFreeDisk = (long)(0.9 * maxFreeDisk);
      if( expectedCompactedFileSize < maxFreeDisk )
      {
        dataFileDirectory = dataDirectoryForTable[maxDiskIndex];
        currentIndex = (maxDiskIndex + 1 )%dataDirectoryForTable.length ;
      }
      else
      {
        currentIndex = maxDiskIndex;
      }
        return dataFileDirectory;
    }

    public static AbstractType getComparator(String tableName, String cfName)
    {
        assert tableName != null;
        CFMetaData cfmd = getCFMetaData(tableName, cfName);
        if (cfmd == null)
            throw new IllegalArgumentException("Unknown ColumnFamily " + cfName + " in keyspace " + tableName);
        return cfmd.comparator;
    }

    public static AbstractType getSubComparator(String tableName, String cfName)
    {
        assert tableName != null;
        return getCFMetaData(tableName, cfName).subcolumnComparator;
    }

    public static AbstractReconciler getReconciler(String tableName, String cfName)
    {
        assert tableName != null;
        CFMetaData cfmd = getCFMetaData(tableName, cfName);
        if (cfmd == null)
            throw new NullPointerException("Unknown ColumnFamily " + cfName + " in keyspace " + tableName);
        return cfmd.reconciler;
    }

    /**
     * @return The absolute number of keys that should be cached per table.
     */
    public static int getKeysCachedFor(String tableName, String columnFamilyName, long expectedKeys)
    {
        CFMetaData cfm = getCFMetaData(tableName, columnFamilyName);
        double v = (cfm == null) ? CFMetaData.DEFAULT_KEY_CACHE_SIZE : cfm.keyCacheSize;
        return (int)Math.min(FBUtilities.absoluteFromFraction(v, expectedKeys), Integer.MAX_VALUE);
    }

    /**
     * @return The absolute number of rows that should be cached for the columnfamily.
     */
    public static int getRowsCachedFor(String tableName, String columnFamilyName, long expectedRows)
    {
        CFMetaData cfm = getCFMetaData(tableName, columnFamilyName);
        double v = (cfm == null) ? CFMetaData.DEFAULT_ROW_CACHE_SIZE : cfm.rowCacheSize;
        return (int)Math.min(FBUtilities.absoluteFromFraction(v, expectedRows), Integer.MAX_VALUE);
    }

    public static KSMetaData getTableDefinition(String table)
    {
        return tables.get(table);
    }

    // todo: this is wrong. the definitions need to be moved into their own class that can only be updated by the
    // process of mutating an individual keyspace, rather than setting manually here.
    public static void setTableDefinition(KSMetaData ksm, UUID newVersion)
    {
        tables.put(ksm.name, ksm);
        DatabaseDescriptor.defsVersion = newVersion;
        StorageService.instance.initReplicationStrategy(ksm.name);
    }

    public static void clearTableDefinition(KSMetaData ksm, UUID newVersion)
    {
        tables.remove(ksm.name);
        StorageService.instance.clearReplicationStrategy(ksm.name);
        DatabaseDescriptor.defsVersion = newVersion;
    }

    public static UUID getDefsVersion()
    {
        return defsVersion;
    }

    public static InetAddress getListenAddress()
    {
        return listenAddress;
    }

    public static InetAddress getRpcAddress()
    {
        return rpcAddress;
    }

    public static double getCommitLogSyncBatchWindow()
    {
        return conf.commitlog_sync_batch_window_in_ms;
    }

    public static int getCommitLogSyncPeriod() {
        return conf.commitlog_sync_period_in_ms;
    }

    public static Config.CommitLogSync getCommitLogSync()
    {
        return conf.commitlog_sync;
    }

    public static Config.DiskAccessMode getDiskAccessMode()
    {
        return conf.disk_access_mode;
    }

    public static Config.DiskAccessMode getIndexAccessMode()
    {
        return indexAccessMode;
    }

    public static int getIndexedReadBufferSizeInKB()
    {
        return conf.column_index_size_in_kb;
    }

    public static int getSlicedReadBufferSizeInKB()
    {
        return conf.sliced_buffer_size_in_kb;
    }

    public static int getBMTThreshold()
    {
        return conf.binary_memtable_throughput_in_mb;
    }

    public static int getCompactionThreadPriority()
    {
        return conf.compaction_thread_priority;
    }

    public static boolean isSnapshotBeforeCompaction()
    {
        return conf.snapshot_before_compaction;
    }

    public static boolean isAutoBootstrap()
    {
        return conf.auto_bootstrap;
    }

    public static boolean hintedHandoffEnabled()
    {
        return conf.hinted_handoff_enabled;
    }

    public static AbstractType getValueValidator(String keyspace, String cf, byte[] column)
    {
        return getCFMetaData(keyspace, cf).getValueValidator(column);
    }

    public static CFMetaData getCFMetaData(Descriptor desc)
    {
        return getCFMetaData(desc.ksname, desc.cfname);
    }
}

redpajama_set_name: RedPajamaGithub


To help university landscape architecture programs integrate landscape performance into their curriculum, LAF's Landscape Performance Education Grants allow select university faculty to develop and test new approaches for standard courses. Their teaching materials and reflections are then shared through the Resources for Educators section of LAF's LandscapePerformance.org.
Landscape performance is part of the revised LAAB Accreditation Standards, which take effect starting with landscape architecture programs scheduled for accreditation reviews this fall. Students must learn the necessary skills to predict outcomes, assess alternatives, defend design proposals, and evaluate the environmental, social, and economic performance of landscape projects.
This discussion-focused seminar will introduce students in their final year to landscape theory with a focus on integrating performance. Students will study the Landscape Performance Series Case Study Briefs and Benefits Toolkit. This is the only seminar course that allows students to be fully engaged in readings, writings, and discussions on designed and built landscapes. Students will also learn to measure campus landscapes with the physical tools needed to evaluate performance.
This course, the first of three courses in a construction sequence, introduces sophomores to AutoCAD and detailing as well as the materials and assemblies used in landscape architecture with a focus on material lifecycles and performance capabilities. Students will be exposed to the larger implications of their material choices and design decisions by viewing materials through the lens of lifecycle analysis and performance. This seminar will use illustrated lectures, readings, class discussions, model-making, assignments, field trips, analysis, computer drafting, design development, experimentation, and evaluation to explore materials with a performance lens.
This lecture and studio combination course focuses on plant ecology, plant identification, and planting design. Beginning with a landscape performance framework, the course will implement an active learning model, requiring students to collect plant specimens for identification, sample areas for biodiversity, and take soil samples. Rain gardens will be used during plant identification and planting design segments to measure ecological, economic, public health, social, and aesthetic performance. Visits to greenhouses and campus gardens will be used to evaluate the many ways in which plants interact with their environment.
This 4th-year studio course will focus on the context of the Las Vegas Valley and its unique challenges. Students will examine the global, regional, and local scale of environmental systems, analyze master plans and green infrastructure guidelines for developments adjacent to valley water networks, and conduct comprehensive analysis, synthesis, programming, and design for landscape performance. Through parametric modeling and GIS mapping, students will assess the performance of existing conditions within the Las Vegas valley in order to outline green infrastructure guidelines for the water network.


text:
Attorney General Ashley Moody just dropped the hammer on Karine Jean-Pierre for lying to the American people about Biden's border crisis
Ron DeSantis recently declared a state of emergency and activated the National Guard to help with the "alarming influx" of illegal aliens invading the Florida keys.
White House Press Secretary Karine Jean-Pierre attacked DeSantis for calling up the National Guard.
And Florida Attorney General Ashley Moody just dropped the hammer on Karine Jean-Pierre for lying to the American people about Biden's border crisis.
After two years of ignoring the crisis, Joe Biden is suddenly pretending to care about the millions of illegal aliens invading the country under his watch.
Biden recently even visited the border for the first time in his more than 40 years in office.
Of course, Joe Biden doesn't really care about securing the border and stopping the flow of illegal aliens into the country.
Biden just realizes that with the GOP in charge of the House of Representatives, the border crisis will be front and center since Republicans are planning to investigate Homeland Security Secretary Alejandro Mayorkas over his refusal to enforce immigration laws.
The reality is that the border crisis is worse than ever.
Governor Ron DeSantis just declared a state of emergency and activated the National Guard to help with the crisis after 1,500 illegal aliens landed in the Florida Keys over New Year's weekend.
Even though the National Guard requested assistance, Karine Jean-Pierre attacked DeSantis during a recent press conference and accused him of using illegal aliens as political "pawns."
After attacking DeSantis, she then claimed that Joe Biden has done "more than any prior President" to secure the border.
"Look, the President is doing the work and if you think about the record funding, he has done more than any prior president to secure the border and build a safe, orderly and humane immigration system and that's what the president has been able to do," Jean-Pierre claimed.
Florida Attorney General Ashley Moody is involved in several lawsuits against the Biden administration over his refusal to enforce immigration laws.
And in a post on social media, Moody called out Jean-Pierre for lying about Biden's border crisis.
"KJP just said @JoeBiden 'has done more than any prior President to secure the border,'" Moody's tweet began.
She then laid out the facts that prove Jean-Pierre was lying about Biden.
"Here are the facts: RECORD number of illegal immigrants encountered by border patrol, RECORD number of suspected terrorists trying to cross the border, RECORD number of fentanyl deaths," Moody wrote.
KJP just said @JoeBiden "has done more than any prior president to secure the border."
Here are the facts:
RECORD number of illegal immigrants encountered by border patrol.
RECORD number of suspected terrorists trying to cross the border.
RECORD number of fentanyl deaths. pic.twitter.com/9c9OgsrlwV
— AG Ashley Moody (@AGAshleyMoody) January 11, 2023
Joe Biden, Karine Jean-Pierre, and the left-wing media are trying to convince the American people that the current administration takes the border crisis seriously and is working hard on finding a solution.
But as Ashley Moody showed, the facts clearly prove otherwise.
Ashley Moody border crisis Joe Biden Karine Jean-Pierre
← Ron DeSantis took the gloves off and hit Joe Biden with one stern warning about treading on Florida Ron DeSantis just banned one thing that will send Joe Biden into a fit of rage →
Ron DeSantis just issued a stern warning to illegal aliens…
A grand jury just issued a decision that will help Ron…
Ron DeSantis went on Fox News and dropped the hammer on…

redpajama_set_name: RedPajamaCommonCrawl


text:
Arcade Reviews
SG-1000 Reviews
Master System Reviews
Game Gear Reviews
Genesis Reviews
Sega CD Reviews
32X Reviews
Saturn Reviews
Dreamcast Reviews
Review Manifest
Virtual Hydlide
Sebastian Sponsel
Platform: Sega Saturn Genre: RPG Developer: T&E Software Publisher: Atlus Players: 1 Released: 1995
A procedurally generated RPG adventure in a 3D environment. Did that grab your attention? Oh, you want more? How does this sound: an open world to explore, including dungeons AND an overworld with variations in scenery and environmental hazards? An old school dungeon-crawling experience in the tradition of an established series that is published by Atlus, kings of the Persona franchise? And any weapon or armor you equip will be proudly displayed not just in the inventory, but directly on your in-game character.
Sounds swell, doesn't it? Good! Now, take any expectations you might have and toss them in the trash, because what Virtual Hydlide actually delivers is only so much garbage!
Okay, this accusation might be a bit harsh. After all, there really weren't many games in 1995 that attempted something of that scope. On the other hand, Virtual Hydlide, the fourth and to date final entry in the Hydlide series of RPGs, not only tried to pull it off on a console but exclusively on the Sega Saturn, no less – a machine that wasn't exactly known for its 3D capabilities. In fact, it was one of the earliest games released for that console as well, hitting Japanese store shelves on April 22, 1995, shortly before the console's U.S. release. For what it's worth, Virtual Hydlide was at the very least an ambitious endeavor, one that hadn't really been tried in that scope on a console before, even if the experience certainly hasn't aged well. When the game was released, the idea of a free-roaming, randomly-generated 3D-Action-RPG certainly was fresh and new.
Also, Hydlide had always been a very divisive game series. Yes, it has been categorized as an RPG, and it originated in Japan, but Virtual Hydlide has only very little in common with what modern gamers usually associate with JRPGs – games like Lunar: Eternal Blue, Lufia II, or Chrono Trigger, for example. All those games saw their U.S. release in 1995 as well. Atlus' product actually plays more along the lines of the Eye of the Beholder trilogy, Dungeon Master II or – to some degree – the later released Diablo, what with the fact that even the gold you collect weighs you down. In fact, I think you can argue that Virtual Hydlide tried to do what Diablo actually accomplished about a year later: revolutionize the dungeon crawler.
Hydlide is, and has always been, reduced to the very essential, basest core gameplay loop of the role-playing game experience as defined by the original Dungeons & Dragons: kill a monster, get loot and experience points, use those to make your character stronger, use stronger character to kill more powerful monsters, and repeat the process until you're powerful enough to kill the strongest monster there is. The Hydlide games were generally built around there mechanics, with an added need to bring enough food to survive your exploration, little puzzles like needing to find a crucifix before you're able to kill a vampire, and an encumbrance limit of how much loot and equipment a character can actually carry – all remnants from the earliest days of the core dungeon crawling experience. There's also a linear overarching quest, which basically boils down to: kill a demon and rescue a princess, but the story isn't important; it only serves as a guideline on what to do next and an incentive for the player to learn and master the intricacies of the game to perfection. The mechanics aren't a means to resolve and enjoy the game's plot; they are the sole purpose of the entire game. RPGs like the original Hydlide were less story-driven adventures and more like intricate puzzles with action elements. What Virtual Hydlide set out to do was to take this basic dungeon crawling approach and bring it into the modern era of 3D environments and fifth generation consoles.
However, even when compared to the games that came before, Virtual Hydlide seems a bit too streamlined. Regardless of what you think of the Hydlide series as a whole, when it comes to gameplay features the fourth game appears rather lightweight. Just compare it to what the precious installment, Super Hydlide on the Genesis, had to offer. Character creation? Gone. Multiple character classes? Gone. A morality meter, distinction between good and evil monsters, or an in-game passage of time? Gone, gone, and gone. Weapons, magic spells, or protective items? Significantly reduced. There aren't even any shops, towns, or NPCs to talk to. Essentially, what Virtual Hydlide boils down to is a 3D remake of the first game in the series, including its questline. Only this time, it has even fewer features than that, since gathering experience is also gone. Now, you only level up after completing quest objectives, which means that battling any monsters aside from a handful of bosses is essentially pointless – you might just as well run past them whenever you've got the space to do so. What's also gone is the need to stock up on food items in order not to starve to death during your quest. While some would call that an improvement, it also removes one of the core experiences that made a Hydlide game… well, a Hydlide game.
Even detractors of the series usually argue that Super Hydlide at least had some really good music going for it. Virtual Hydlide's soundtrack, while not necessarily bad, is just not as memorable. The music has a certain subdued synth, orchestral flair that sounds nice at first but doesn't fit very well with the action onscreen. The sound effects, on the other hand, are pretty weak and of a very low quality. There are also a few speech samples, or at least sound bits that sound like speech, but I dare you to try and decipher what they actually say.
One of the more interesting aspects of Virtual Hydlide is that for each new game, it randomly creates all the environments, including overworld, dungeons and item placements. Even if the overlying quest and the process towards its resolution remains the same. It technically promises a fresh new experience for every new game you start. You can also enter a code manually to generate the world, which makes exploring an already familiar map with fixed locations possible. All that doesn't change the gameplay experience all that much. While you can technically go everywhere from the get-go, the map isn't very big, and solving the quest is a relatively linear experience where you just follow the compass to the next destination you need to go, picking up items and killing running past monsters along the way. It might explain why Virtual Hydlide removed the need for food items or shops in general, as not knowing in what direction or distance the nearest source for buying healing items or the ever-diminishing nourishment lies would be an exercise in frustration.
In lieu of shops, there's a pink crystal in the overworld. It is a safe point without enemies where you can dump all the items you've accumulated there in order to make room in your inventory. You can't cash them in for gold, though, and you can't buy anything for the gold you can find in the course of your adventure (what is the gold used for then, you ask? Beats me, really. Apparently it serves as bonus points to determine your final score after you've finished your quest, which is saved in a high score table). Rather counter-intuitively, you can use the SCORE you've accumulated during gameplay to purchase items like weapons, armour, and shields, rings that further increase your stats, five different kinds of magic scrolls, tools, and potions. Buying weapons or protective items is rather pointless though, considering that you generally gain everything you need in treasure chests. What IS useful to purchase are the Scrolls of Detect, which shows the location of said chests on your map screen. What's also good to have are some Scrolls of Herb that magically changes any item you use it on into a curative herb. That doesn't just heal you or helps clearing out some much-needed inventory space, it also gets rid of unwanted cursed items that lower your stats and can't be removed in a regular fashion. Normally, you would need a (slightly more expensive to purchase) Scroll of Purge to remove a curse, but you can just as well simply turn the cursed item into an herb. This seems to be a programming oversight, because it renders the Scroll of Purge essentially pointless.
All of that brings us to the 3D environment, the major selling point of Virtual Hydlide. Let's state something positive for a change: at least it's not the kind of low-poly 3D environment the early fifth console generation was notorious for. There certainly aren't any untextured, blocky polygon characters to be found in this game. It might even look halfway decent in screen shots, if a bit grainy. Seeing the game in motion is a different story, though. Virtual Hydlide uses digitized 2D sprites for character models that get scaled up or down accordingly as you approach or distance yourself from them in the game world. Worse, everything only has very choppy, limited frames of animation. Not only is it very hard to properly judge your distance to any given enemy or environmental obstacle like trees that way, the frame rate is also very low. You cannot control the camera, which can become an issue in dungeons when it has trouble positioning itself in such a way that the view isn't blocked by a wall. Occasionally, your character clips through the scenery. Needless to say, this all adds up to some pretty janky gameplay. The graphics are also extremely pixelated, with washed out colors that are usually in the dark green, dark brown and grayish areas of the color spectrum
Speaking of not looking good, the player character's sprite is a digitized actor, and it looks incredibly dorky. His walking animation gives the impression of a severe case of constipation rather than that of a purposeful stride, his attack moves look very awkward and never feel like they ever actually connect with anything, and his general appearance… well, as I said earlier, you DO see every equipment you wear on your actual in-game character sprite, but the armour your wear usually looks like a very cheap prop. Most of the weapons are sprites that have been digitally added to your character's hand, which makes them look like they're not actually there… and the less said about the Fairy Armor, the better. At least the dungeons themselves have textured walls that enable a certain feeling of scale and depth, and some of them even span multiple levels, but I wouldn't blame you if you hadn't lost your patience with the game by then. Stick to it though, and you realize that it is rather short, depending on how lucky you get with the world map creation, it can actually be finished in under two hours.
Some reviews of Virtual Hydlide were actually quite positive back in the day, and I can sort of see why. As a very early 3D RPG on the Saturn, there was little to properly compare it to, either in terms of game design or on the platform in general. In the early days of the fifth console generation, the idea of using digitized sprites in a freely explorable 3D world – and with an orchestral soundtrack and a procedurally-generated environment to boot – must've seemed quite impressive. Both intro and end sequences were even presented as short videos! But compared to later releases on the system, the game just doesn't hold up. Virtual Hydlide offered fewer features than its predecessors, and what was sacrificed was traded in for murky digitized graphics that have aged horribly, awkward gameplay, and a randomly-generated world that might sound great on paper but offers very little meat when it comes to actual content. Within about a year and a half, games like Tomb Raider or Powerslave came along that demonstrated much better and smoother 3D environments on the Saturn. When Diablo was released in 1996, it changed the face of the dungeon crawler forever, rightfully relegating the style of Virtual Hydlide to the realms of oblivion.
Score: 2 out of 10
Discuss this review in our forum.
Tags: 1995, Atlus, Hydlide article series, RPG, Saturn, T&E Soft
← SeaQuest DSV
Kenseiden →
Available Articles
Available Articles Select Category 16-bit Reviews (1) 8-Bit Reviews (1) Arcade/Saturn/DC Reviews (1) Current Articles (10) Features (721) Reviews (1,080) Arcade Reviews (4) Dreamcast Reviews (6) Game Gear Reviews (44) Genesis Reviews (784) Master System Reviews (51) Saturn Reviews (15) Sega 32X Reviews (39) Sega CD Reviews (136) SG-1000 Reviews (1)
Available on Amazon!
Live Game Deals: "He always asked questions, more enthusiastically than anyon…
Stormwatch: "Had Asmik pursued a sequel..." They did. Super Air Diver…
LaytonPuzzle27: I do hope that M2 will work there magic in porting Golden Ax…
Brunan-Gi: Pretty spot on review for me. Also, lets not forget Rambo ha…
Brunan-Gi: I must be one of the few people who liked Stallone movie. It…
Interview: Mike Berlyn (Creator of Bubsy Series)
Sega Gear: Sega Remote Arcade System
Xenon 2 Megablast
Sega-16 on Facebook
Sega-16 Channel
YouTube Video Room
Past Updates Select Month July 2019 June 2019 May 2019 April 2019 March 2019 February 2019 January 2019 December 2018 November 2018 October 2018 September 2018 August 2018 July 2018 June 2018 May 2018 April 2018 March 2018 February 2018 January 2018 December 2017 November 2017 October 2017 September 2017 August 2017 July 2017 June 2017 May 2017 April 2017 March 2017 February 2017 January 2017 December 2016 November 2016 October 2016 September 2016 August 2016 July 2016 June 2016 May 2016 April 2016 March 2016 February 2016 January 2016 December 2015 November 2015 October 2015 September 2015 August 2015 July 2015 June 2015 May 2015 April 2015 March 2015 February 2015 January 2015 December 2014 November 2014 October 2014 September 2014 August 2014 July 2014 June 2014 May 2014 April 2014 March 2014 February 2014 January 2014 December 2013 November 2013 October 2013 September 2013 August 2013 July 2013 June 2013 May 2013 April 2013 March 2013 February 2013 January 2013 December 2012 November 2012 October 2012 September 2012 August 2012 July 2012 June 2012 May 2012 April 2012 March 2012 February 2012 January 2012 December 2011 November 2011 October 2011 September 2011 August 2011 July 2011 June 2011 May 2011 April 2011 March 2011 February 2011 January 2011 December 2010 November 2010 October 2010 September 2010 August 2010 July 2010 June 2010 May 2010 April 2010 March 2010 February 2010 January 2010 December 2009 November 2009 October 2009 September 2009 August 2009 July 2009 June 2009 May 2009 April 2009 March 2009 February 2009 January 2009 December 2008 November 2008 October 2008 September 2008 August 2008 July 2008 June 2008 May 2008 April 2008 March 2008 February 2008 January 2008 December 2007 November 2007 October 2007 September 2007 August 2007 July 2007 June 2007 May 2007 April 2007 March 2007 February 2007 January 2007 December 2006 November 2006 October 2006 September 2006 August 2006 July 2006 June 2006 May 2006 April 2006 March 2006 February 2006 January 2006 December 2005 November 2005 October 2005 September 2005 August 2005 July 2005 June 2005 May 2005 April 2005 March 2005 February 2005 January 2005 December 2004 November 2004 October 2004 September 2004 August 2004 July 2004 June 2004 August 206
© Copyright 2019 — Sega-16. All Rights Reserved


Through this business area, INFISA develops its commitment with the organizations to promote and favour their suitable decision making, and solution taking according to their strategies and expectations, following objective criteria and internal value creation oriented.
INFISA considers strategic consultancy to involve the development of high added value activities and services, in order to provide and deploy innovating business solutions, to come up with planned and quantifiable results, and settle, maximize and promote the global development of such organizations.
Reorganizing Strategy (fixed assets, current assets, stocks, financial resources, knowledge management strategy).
All of this, through management and production principles to provide responses that will improve the internal understanding and development of their organization.
Some of the standard models implemented, are: BSC, ABC, ABM, BPM, CRM, and management surveillance and control.
This area also includes the design and management of technical and functional project offices, since it requires a deep involvement and alignment with organization strategy, processes reengineering and certain activities related to Change Management.
INFISA provides assistance and support to different organizations in order to deploy and redesign their business processes, stressing the obtainment of innovative and company strategy oriented solutions.
INFISA professional team considers consultancy to involve diagnosis, design and development of resource and value making models.
Planning, design and development of budgetary models.
Development of Working Assets and Treasury models.
Design and development of productive processes improvement systems.
Complex appraisal models and dynamic simulation.
Control models and process & procedures management redesign.
Process catalogues and records reengineering.
Business evidences, indicators and targets reengineering.
INFISA also includes in this area the development of NIIF and Sarbanne-Oxley (SOX) implantation standard models.
In this area INFISA includes most activities concerning technical implementation and development and more particularly those centred on innovation and standardization of business processes and procedures.
Complex analysis oriented Data Base designs based on Data Warehouse or Data Mart models and data integration under Business Intelligence parameters, are also included in this area.
Innovating impulse and ability to integrate new technologies.
Clients involvement to develop successful projects through follow-up and quality consistent plans.
Another major feature of this area is the development of tasks for large project offices, concerning requirements on Technologies, Comparative Analysis of different tools and solutions, design of technical models and those of coordination, monitoring and appraisal of quality on implementation projects and on software programs development.


For vulnerable children and youths from disadvantaged families, daily life is often filled with myriad challenges. Many 'troubled' children and youths become at risk for delinquency and fail to complete school. Naturally, most of them don't realise their full potential and may suffer from poor self-esteem or mental health issues.
As one of the few social work agencies with an added competency in educational psychology, Students Care Service (SCS) has an established track record of tackling issues faced by children and youths living at the margins. Today, it reaches over 6,500 children and youths each year through its centres and intervention programmes.
The unique challenges faced by one community along Spooner Road captured SCS's attention, and led them to start the Spooner Road Project in mid-2015. At a recent site visit, the Community Foundation of Singapore (CFS) and other partners observed the dedication and efforts that are steadily impacting the Spooner Road community.
Located in an enclave of public rented flats in central Singapore, the Spooner Road centre is housed amidst a transient, vulnerable community of over 300 families. Many families often arrive here after losing their home due to financial issues. The physical isolation of these flats, which once served as the dormitories of railway workers, means everyday resources from healthcare to Family Service Centres (FSCs) are not easily accessible here. To help alleviate the difficulties faced by these families, CFS's donor UBS funded a Foodshare programme where packed groceries were delivered to their doorsteps.
Many of the young living here struggle to access resources to support them as they learn and grow, exacerbated by the lack of spaces for play and constructive supervision by their caregivers.
To address the issues faced in this complex environment, the Spooner Road Centre offers a conducive, homely space for the young to spend time. The centre runs a range of supervised play sessions, study skills sessions, student football and special events, helping to keep these children and youths engaged in positive activities and decrease their risk of delinquency.


Top 5: Did you know about these fascinating Premier League records?
On March 4, 1995, The Red Devils hammered The Tractor Boys 9-0 at Old Trafford for the Premier League's biggest home win, and largest victory overall.
Striker Andy Cole bagged five goals, whilst Mark Hughes bagged a brace, among further strikes from Roy Keane and Paul Ince.


text:
Weeks1-5
Weeks6-10
Weeks11-end
Weeks 11-end
MUS253_Lab
Weeks1-5Lab
Weeks 6-10Lab
FE4
Pūnaewele Mele
Dr. Chet-Yeng Loong
PERFORMING: 4.2
RESPONDING: 7.1, 9.1
Goals #1:
The primary central focus is to introduce students to musical elements: melody (do tetratonic) and rhythm. (Pr: 4.2)
Students will be able to notate notes, C, D, E, and G on the staff; and identify different and same phrases. (Mary had a little lamb)
Students will identify quarter, eighth, and quarter rest; simple duple and quadruple meters. (Samoan Sasa)
The secondary central focus is to expose students to different tempi, from slow to fast. (Samoan Sasa) (Pr: 4.2)
The third central focus is to expose students to scales (tonalities). Students will respond to major and minor scales. (Re: 7.1, 9.1)
The fourth central focus is students will recognize different families of classical instruments.
Musical Elements:
Style & Tonalities (Listening)
Form (Listening)
Tone colors (families of instruments/voice)
Melody: A melody is what you usually sing from a song. It's the main tune.
Q: Do you recognize the melody of this song?
Q: Do Re Mi is from the movie, the Sound of Music. Can you sing the song with the video?
From do to do', this is a major scale. When a song ends on do, which is also called the tonic, the song is in a major scale.
Scale: It's the collection of notes that are used in a song, arranged in order from the lowest to the highest note. It's kind of like the alphabet for music: you learn the alphabet by learning in order from A to Z. For music, we normally start with note C, then, D, E, F, G. From G, we continue to A, and B. There is not note H in music. When you read a book, the author will use those same letters to form words, sentences, and paragraphs by using them in different order and repeating any letter as many times as she wants. Same as music, after notes A and B, we will start with C again.
In music, there are different types of scales that are used. Two very common ones are Major and Minor scales (below are some examples, show and explain some - train their ears).
Major scale: Probably the scale that most songs you know are based on. Examples include Twinkle Twinkle Little Star, Star Spangled Banner (National Anthem), Hawai'i Pono'i, Yankee Doodle, London Bridge is Falling Down, and Take Me Out To the Ball Game.
Minor Scale: Not as common, but a minor scale is a collection of notes often associated with darker sounds. Examples include the theme to Harry Potter, theme of Hawaii Five-O, Prince Ali from Disney's Aladdin, Für Elise.
Why some songs "sound" like major, some minor? Open discussion with the students (STANDARDS: RESPONDING).
Now let's listen to a song in a major scale but have only four notes. Do you recognize it?
Note: From here, teachers may teach C as do, and notate Mary Had a Little Lamb on the staff. Introduce Form: phrases. (Pre-requisites: Teach staff, lines and spaces).
Explain solfege, C=do, D=re, E=mi, G=so, show them hand signs.
How many phrases are here? (a b a' c)
Now your teacher will play Mary had a little lamb on a piano/`ukulele, can you sing with the hand signs and solfege?
Now your teacher will play Mary had a little lamb on a piano/`ukulele, can you use your fingers to show the four phrases?
Now, listen to this Jazz version of Mary had a little lamb, try to identify the four phrase in this song by showing your fingers. You will many "extra" notes, these are embellishing notes that make the piece sounds more attractive.
Samoan Sasa: Quarter, eighth notes.
Samoan Sasa
Samoa_Sasa_Audio.mp3
MP3 Audio File 1.1 MB
Kaeru no utaga (Quarter rest, round)
Four Families of Classical instruments.
Note to general music teachers who have Orff instruments, you may use the below pieces from Music for Children, Book I to practice do-re-mi-so, canon, and rhythms.
Page 113, Rondo 32 (great piece to start improvisation).
Page 91, Canon exercises (great exercises to start with canon - do-re-mi-so).
Page 67, Rhythmic rondos (use this to practice rhythm with body percussion, really fun).
Questions? Post it below:
CY (Monday, 23 August 2021 03:09)
Pictures added.
Yes, it is meant to be used at the beginning of the semester. That's why I am sharing it now. Last semester, I had the inspiration to do it during the middle of the semester.
Janice,
Done. I will add the names later.
Kevin (Sunday, 22 August 2021 14:21)
Goal #1 works well at the beginning of the school year compared to when I used these lessons in Quarter 3 and 4 of last year. I agree with Janice, could put pictures or information explaining what the instrumental section is for? The links can be easily missed.
Janice (Friday, 20 August 2021 14:48)
It's easy to scan right over the instrument section. Can we put pictures as the links? Like the ones one the instrument page?
chetyeng (Wednesday, 11 August 2021 02:47)
Haha, sorry, I copied and pasted from Dr. Itoh's notes.
As for trombone, thanks for noticing it. I will check with Joey.
Lauren (Wednesday, 11 August 2021 02:46)
- In First under the Scale heading, you refer to it as O Say Can you See, maybe refer to it as Star Spangled Banner
- In the instrument families videos the trombone one seems to be cut off, unless you purposely edited it that way.


text:
ASN Journals Address Nutrition Inequity
September 2, 2022 by Eric Graber
The 2021 Global Nutrition Report, an independent assessment of the state of global nutrition, was dedicated to nutrition equity. According to the report, "there are marked differences in nutrition outcomes, or nutrition inequalities, by key sociodemographic characteristics such as geographic location, age, gender, ethnicity, education and wealth." The report further noted that "considerable progress has been made in measuring nutrition inequalities, but we have been less clear on understanding and confronting inequity."
ASN has made it a priority to fill this knowledge gap by dedicating resources to understanding and confronting nutrition inequity in all its forms. In June 2020, the ASN Board of Directors issued A Statement from the Board of Directors of the American Society for Nutrition, in which the Board expressed its commitment to prioritizing diversity and inclusion. In particular, the Board committed to advocating for "increased governmental and non-governmental resources and solutions to address the nutrition and health disparities that disproportionally impact communities of color in America."
ASN Journals play a key role in ASN's commitment to understanding and addressing nutrition inequities by fostering and publishing original research studies and reviews. Below are a few examples from each of our four peer-reviewed journals:
Racial and Ethnic Representation among a Sample of Nutrition- and Obesity-focused Professional Organizations in the United States, The American Journal of Clinical Nutrition, October 2021
Research shows that individuals from racial and ethnic minority backgrounds consider it important to have access to providers from diverse backgrounds. Tiffany L. Carson et al. concur, noting that "a diverse cadre of obesity- and nutrition-focused health care professionals is needed to further improve nutrition-related health outcomes." The authors assessed race and ethnicity data among the membership of the Academy of Nutrition and Dietetics and American Board of Obesity Medicine over the past five years. The authors' findings "demonstrate stark disparities in the prevalence of racial and ethnic minorities among the US population and that of researchers and health care providers in the areas of obesity and nutrition." Data from the Academy of Nutrition and Dietetics, for example, show underrepresentation of Black (2.6%), Asian (3.9%), Latinx (3.1%), Native Hawaiian or Pacific Islander (1.3%), and American Indian or Alaskan Native (0.3%) individuals compared with the general US population. Underrepresentation of racial and ethnic minorities was also reported among the American Board of Obesity Medicine diplomates: Black (6.0%), Latinx (5.0%), Native American (0.2%). The authors concluded with a "call to action for professional societies to launch an intentional effort to systematically track race and ethnicity among membership and increase racial and ethnic diversity among their membership."
Social Determinants of American Indian Nutritional Health, Current Developments in Nutrition, May 2019
The American Indian population suffers from significant health disparities compared to the general US population, including a higher incidence of nutrition-related chronic diseases such as diabetes, cancer, and heart disease. American Indians, for example, have the highest prevalence of diabetes and the highest diabetes mortality rates in the United States. This article, published in "Proceedings of the First and Second Annual Conferences on Native American Nutrition," an annual supplement of Current Developments in Nutrition, shows how these health disparities are rooted in the histories of American Indian populations, including historical trauma, abusive boarding schools, poverty, and food deserts. In addition, findings from the Adverse Childhood Experiences Study show that adverse childhood experiences such as abuse, neglect, and household dysfunction, which have been linked to poor nutritional health outcomes, are more prevalent in many American Indian communities. "To effectively address these disparities," Donald Warne et al. argue that "a multipronged approach in collaboration with stakeholders is needed to address the upstream social determinants of health and to increase access to healthier foods."
Racial-Ethnic Disparities in Obesity and Biological, Behavioral, and Sociocultural Influences in the United States: A Systematic Review, Advances in Nutrition, January 2021
ASN member Jungwon Min et al. examined racial and ethnic disparities in obesity prevalence in the United States, with a focus on the biological, behavioral, and sociocultural factors that may underlie these disparities. In order to conduct their research, the authors searched the scientific literature for studies that used national survey data published between January 2007 to September 2020. Forty-seven studies met the inclusion criteria. Among the review findings, the authors noted that "patterns of body dissatisfaction and body perception, and their motivation for weight loss were varied by sex and race/ethnicity." For example, non-Hispanic Blacks were more likely to underestimate their weight status compared to Hispanics and non-Hispanic Whites. According to the authors, "this characteristic is especially apparent in females and those with less than a high school education compared with those with a college education. Therefore, it is essential to promote the correct weight perception and healthy body image to encourage healthy weight control behaviors, especially for non-Hispanic Black females." Overall, the authors recommend that "differences in biological, behavioral, and sociocultural characteristics should be considered in future public health intervention efforts to combat obesity in the USA."
Disparities in Risks of Inadequate and Excessive Intake of Micronutrients during Pregnancy, The Journal of Nutrition, September 2021
Katherine A. Sauder et al. worked with data from a sample of nearly 10,000 pregnant females across the United States who had participated in 1 of 15 observational cohorts in the US Environmental Influences on Child Health Outcomes Consortium in order to compare risks of inadequate or excessive micronutrient intake among pregnant females based on age, race, ethnicity, education, and pre-pregnancy BMI. According to the study findings, "particularly at risk for inadequate daily intake were participants who were aged 14-18 years, identified as Hispanic, Black, or other races/ethnicities (i.e., not non-Hispanic White), had less than a high school education, or had overweight or obesity before pregnancy." Even with dietary supplement use, the authors noted that more than 20% of participants were at risk of inadequate intake of one or more micronutrients, especially in some population subgroups. Overall, fewer than 5% of participants in this study were at risk of excessive daily intake for any micronutrient, but this increased with dietary supplement use, most notably for iron, folic acid, and zinc. In particular, non-Hispanic Black females who took dietary supplements were at the highest risk of excessive daily intake of folic acid, which is concerning as studies indicate this may lead to higher cardiometabolic risks among their offspring.
Interested in learning more? These ASN Journals articles provide additional insight into the incidence, causes, and potential solutions to nutritional inequity:
Investigating the Intersections of Racial Identity and Perceived Income Adequacy in Relation to Dietary Quality among Adults in Canada, The Journal of Nutrition, May 2022
Journey to Promoting Structural Change for Chronic Disease Prevention: Examining the Processes for Developing Policy, Systems, and Environmental Supports in Native American Nations, Current Developments in Nutrition, March 2022
Food System Dynamics Structuring Nutrition Equity in Racialized Urban Neighborhoods, The American Journal of Clinical Nutrition, November 2021
COVID-19 and Food-Related Outcomes in Children with Autism Spectrum Disorder: Disparities by Income and Food Security Status, Current Developments in Nutrition, September 2021
Trends in Socioeconomic Inequities in Diet Quality between 2004 and 2015 among a Nationally Representative Sample of Children in Canada, The Journal of Nutrition, September 2021
Folate Status and Neural Tube Defects in Aboriginal Australians: The Success of Mandatory Fortification in Reducing a Health Disparity, Current Developments in Nutrition, June 2019
Trends in Racial/Ethnic and Income Disparities in Foods and Beverages Consumed and Purchased from Stores among US households with Children, 2000–2013, The American Journal of Clinical Nutrition, August 2016
Racial and Ethnic Disparities in the Impact of Obesity on Breast Cancer Risk and Survival: A Global Perspective, Advances in Nutrition, November 2015
Eric Graber
Eric Graber is a freelance copy writer and marketing consultant, working primarily for publishers and professional associations in science and medicine. He has a BA in Spanish Literature from Columbia University and an MBA in marketing from NYU Stern School of Business.
NHANES: Opportunities for Revitalization
Webinar Summary Prepared by the Committee on Advocacy and Science Policy *By Christine Taylor, PhD, Chair of ASN's Committee on
Can a Mediterranean Diet Improve Physical Fitness?
Review published in Advances in Nutrition finds high adherence to the Mediterranean diet associated with higher levels of physical fitness
Are You Getting Enough Flavan-3-ols?
Intake guidelines published in Advances in Nutrition "may help improve blood pressure, cholesterol levels, and blood sugar." Cardiometabolic disease, a


Manchester City did not really spend big last summer, after winning Premier League comfortably, but that should change this summer. Daily Mail claim that the current champions of England have targeted two defenders.
Pep Guardiola seemingly wants to reinforce the backline and solutions could be Ben Chilwell and Mathijs de Ligt! The Leicester City and Ajax defenders are having really good individual seasons and joining Man City could be a reward for that.
Manchester City are being monitored by FIFA for their practice of signing underage players from overseas, which could potentially see them banned similarly to the way Chelsea were recently. That could make City work fast and sign players as soon as possible and their financial strength is never going to be problem.
De Ligt is followed by every big European club, most notably Barcelona, while Chilwell could be an expensive, domestic option if the Dutchman feels like City would not be his next move. Either way, this will be a very interesting summer for all Man City fans.


text:
Skidmore, Owings & Merrill Selected to Helm Master Planning Process for Ongoing Revitalization of Lower Manhattan Seaport District
Company Release - 6/6/2019 4:56 PM ET
NEW YORK, June 6, 2019 /PRNewswire/ -- As part of a thoughtful and comprehensive approach to urban planning within Manhattan's historic Seaport District, The Howard Hughes Corporation (HHC) has selected Skidmore, Owings & Merrill LLP (SOM) to advance a forward-looking plan for the continuing evolution of Seaport District properties. SOM brings highly relevant expertise to this important commission and will work with HHC and local stakeholders to create a compelling vision that respects the area's character, its local community, and the dynamic role the Seaport has played throughout New York City's history.
The Seaport District is New York's original commercial hub, located along the East River in Lower Manhattan among historic cobblestone streets and restored 19th Century buildings with unparalleled views of the Brooklyn Bridge, Statue of Liberty, and the city skyline. HHC's goal in engaging SOM is to facilitate a process that will produce a clearly stated vision for the future of its Seaport properties in the context of the surrounding area, in collaboration with local residents and businesses, community leaders, elected officials, Community Board 1, the South Street Seaport Museum, historic preservation advocates, and the educational institutions and nonprofits that call the Seaport home. HHC and SOM will soon begin meeting with local stakeholders and hosting dedicated public forums in order to create a plan that is responsive to community members and preserves the historic character of this distinctive neighborhood while guiding its growth and revitalization.
For this project, SOM has assembled a team of seasoned urban designers and architects from its award-winning City Design Practice. The team, to be led by SOM Managing Partner T.J. Gottesdiener, Design Partner Chris Cooper, and City Design Practice Leader Keith P. O'Connor, will be taking into consideration notable elements including the area's public space and community facilities; resilience and sustainability efforts; affordable housing; pedestrian, bicycle and traffic circulation; streetscape and wayfinding strategies; as well as infrastructure and public transit conditions. SOM will focus on providing a comprehensive plan for HHC's Seaport District properties in the context of the neighborhood, with a particular focus on the surface parking lot at 250 Water Street as well as other potential improvements to the Seaport District.
A key objective of this planning strategy will be to ensure a sustainable future for the South Street Seaport Museum, a community anchor that embodies the South Street Seaport Historic District's enduring role as a "port of discovery." The Howard Hughes Corporation is a long-standing supporter of the Museum and has directed SOM to pursue strategies that will continue to help strengthen this vital organization so it may continue to fulfill its role in connecting the area's past, present, and future in a meaningful way.
HHC President of the New York Tri-State Region, Saul Scherl, said, "We are pleased to be working with SOM and the community on a plan for the Seaport District that will build on the success of the revitalized Pier 17 and the preservation of the Fulton Market, Tin Building and adjacent blocks in the Historic District. The plan will address the needs of the neighborhood in the context of Lower Manhattan and New York City as a whole. The depth of SOM's work in New York—on everything from development in historic districts to adaptive reuse of landmark buildings and the design of resilient waterfronts—makes the firm uniquely qualified to help lead the Seaport District into its next phase. HHC is committed to advancing a plan that serves the needs of this vibrant community and enhances the district's role as a vital economic hub for the city."
SOM's design work in New York City includes the restoration of the landmark Farley Post Office Building into the new Moynihan Train Hall and residential projects within historic neighborhoods such as 101 Warren Street, which integrates a contemporary high-rise in Tribeca while creating new housing for a range of income levels. The firm's waterfront resiliency and education-related planning projects include the award-winning master plan for the Cornell Tech campus on Roosevelt Island and the University Center at The New School, the vibrant heart of an urban campus.
"We look forward to collaborating with HHC, residents, community leaders, elected officials, the South Street Seaport Museum, and representatives of the educational institutions that call the Seaport District home," said Design Partner Chris Cooper. "We are eager to craft a compelling and inclusive plan for these Seaport District properties with an eye toward the larger neighborhood and the Lower Manhattan context—one that enhances and preserves the historic character of this distinctive New York City waterfront community, while contributing to its ongoing growth and revitalization."
"We look forward to helping envision a more resilient future for the Seaport—one built on its long history, rich texture, and the dynamic maritime activity and complex ecology of the East River," said Keith O'Connor, City Design Practice Leader at SOM.
HHC and the Seaport District
Since assuming a long-term lease for Pier 17 and portions of the South Street Seaport Historic District in 2010, HHC has invested over $600 million in the Seaport District. Drawing on the area's storied past as a center of maritime trade and commercial innovation, HHC is building and renovating more than 450,000 square feet of space in the district, creating new culinary, fashion, entertainment and cultural experiences as well as public open space, allowing more New Yorkers and visitors to connect with the waterfront in a variety of new ways. When current projects are completed and fully leased, HHC will have added some 1,740 jobs and the Seaport District properties will generate over $200 million of economic activity each year.
Highlights of the Seaport District include the four-story Pier 17—a 1.5-acre rooftop which serves as a cultural event space and year-round community amenity. With seating for the public and a view of the iconic Lower Manhattan skyline, The Rooftop at Pier 17 Rooftop transforms seasonally from the city's first open-air rooftop ice skating rink to an outdoor performance venue. HHC has introduced community health and wellness programming on the Pier, with free fitness classes curated by some of New York's top fitness experts, as well as a series of classic movie screenings. Opening this year, Pier 17 will soon include waterfront restaurants from Jean-Georges Vongerichten, Andrew Carmellini, David Chang of the Momofuku Group, and Helene Henderson of Malibu Farm. The Pier has been home to ESPN's new live broadcast studios, which opened in April 2018, and a new Nike Design Center will be opening in 2019.
The Seaport District features unique retail, including the only U.S. location of Carla Sozzani's experiential store, 10 Corso Como, Sarah Jessica Parker's flagship SJP store, Big Gay Ice Cream, as well as the first iPic Theaters location in Manhattan. And starting in 2020 the Seaport District will also be home to a 53,000-square-foot food hall by Jean-Georges in the restored Tin Building.
In addition to its dedicated support of the South Street Seaport Museum, HHC is delighted to provide space for local nonprofits including Black Gotham Experience and Kubemas tutoring program, and, through its Seaport Cares program, to support and participate in many community celebrations, including the Seaport District's own holiday tree-lighting and menorah-lighting festivities; the Waterfront Alliance's City of Water festival and Heroes of the Harbor event; the Downtown Alliance's food festivals "Dine Around Downtown" and the Taste of Seaport; the Seaport Animation Festival; the NYPD 1st Precinct National Night Out; and Open House New York. HHC is a proud sponsor of Downtown Manhattan Little League baseball, the National 9/11 Memorial, Lower Manhattan Cultural Council, the Lower Manhattan Historical Association, Peck Slip School Parent Teachers Association, Spruce Street public school, Downtown Little School, and Friends of Governor's Island.
About Skidmore, Owings & Merrill LLP
Skidmore, Owings & Merrill LLP (SOM) is one of the leading architecture, interior design, engineering, and urban planning firms in the world. Since its founding more than 80 years ago, SOM has earned a reputation for design excellence with a portfolio that includes some of the most important architectural accomplishments of the 20th and 21st centuries, and has been a leader in the research and development of specialized technologies, new processes and innovative ideas, many of which have had a palpable and lasting impact on the design profession and the physical environment. The firm's longstanding leadership in design and building technology has been honored with nearly 2,000 awards for quality, innovation, and management. The American Institute of Architects has recognized SOM twice with its highest honor, the Architecture Firm Award—in 1962 and again in 1996.
About The Howard Hughes Corporation
The Howard Hughes Corporation owns, manages and develops commercial, residential and mixed-use real estate throughout the U.S. Its award-winning assets include the country's preeminent portfolio of master planned communities, as well as operating properties and development opportunities. Dedicated to innovative placemaking, HHC is recognized for its ongoing commitment to design excellence and to the cultural life of its communities. The Howard Hughes Corporation is traded on the New York Stock Exchange as HHC. For additional information visit www.howardhughes.com. For additional information on the Seaport District, visit SeaportDistrict.NYC.
Cristina Carlson
Vice President, Corporate Communications and Public Relations
View original content to download multimedia:http://www.prnewswire.com/news-releases/skidmore-owings--merrill-selected-to-helm-master-planning-process-for-ongoing-revitalization-of-lower-manhattan-seaport-district-300863652.html


text:
Q: How to load table view cell order by some fields from soap? I displayed sales details of gas station from soap on labels.I used labels for display but it is not useful for users.
Here my app is empty.I input dates and station name from textfields.

Here entered dates and station name for display sales details of between two date.

Every station has a region and I have region name in web service.I have 7 regions.(e.g) Region2 has 90 stations,region3 has 45 statiions.I want display station details by Region Name(Now by station name )
When I enter dates,Region name  click ok
table view cell will be like;
Station Name1 -Station Code
K95
123 units  4000Liters   9889000 USD
Diesel
21 units   3200 liters   3232320 USD
LPG
98 units   3421 liters   3232322 USD

Station Name2 -Station Code
K95
123 units  4000Liters   9889000 USD
Diesel
21 units   3200 liters   3232320 USD
LPG
98 units   3421 liters   3232322 USD

Station Name3 -Station Code
K95
123 units  4000Liters   9889000 USD
Diesel
21 units   3200 liters   3232320 USD
LPG
98 units   3421 liters   3232322 USD

.
.
.

Station Name99 -Station Code
K95
123 units  4000Liters   9889000 USD
Diesel
21 units   3200 liters   3232320 USD
LPG
98 units   3421 liters   3232322 USD

How can I use and load table cell for display my station sales details order by region name.Is it possible? Share your tips :)

A: Example scenario: your dataSource is an NSArray and the order is by the atributte region of your objects:
NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"region" ascending:YES];
[yourArray sortUsingDescriptors:[NSArray arrayWithObject:sort]];

For more info, at Apple docs:

*

*Apple Collections Programming

*NSSortDescriptor Reference

redpajama_set_name: RedPajamaStackExchange


European basketball has sprung to life this week and it has been the FIBA Champions League which has been placed under the spotlight. There were eight ties played this week, four in the opening round of qualifiers and four in the second round of qualifiers.
This week has seen a total of four ties played in the opening round of the FIBA Champions League qualifying stage.
The second round of the qualifying stages for the FIBA Champions League is taking place in two parts. We'll take a look at the games which take place next week before recapping the Second Round ties which have been concluded this week.
All of these games will be played on Tuesday the 4th of October and Thursday the 6th of October, with the winner progressing to the group stage of the FIBA Champions League.
The closest game was the tie between Benfica from Portugal and Varese from Italy, which was decided by a single point. The away teams clinched victory in both games, and the 3 point margin of triumph in Lisbon for the Italians was enough to drive them forward into the group stages of the FIBA Basketball Champions League.
This leaves four spaces left in the Champions League which means that this time next week, we'll know all of the 40 teams taking part in the 2016/17 FIBA Champions League. The first matches take place on the 18th of October.