Kelsey Mitchell, the most prolific scorer in Ohio State women's basketball history, made her WNBA debut along with former teammate Stephanie Mavunga. However, their new team, the Indiana Fever, were routed in the second half of an 18-point loss to the visiting Chicago Sky.
Mavunga and Mitchell's WNBA debuts were less than sterling in addition to the loss. Mitchell played 14 minutes and scored five points on 2/8 shooting from the floor. Mavunga played 11 minutes, netting only a steal in the box score.
Linnae Harper, another Ohio State alumnus, could've made her WNBA debut for the victorious Chicago Sky after going unselected in this year's WNBA draft, but she did not see the court in the Sky's 18-point win.


text:
Q: Extracting the Author and Comments from Word to Excel I have the following code which extracts strings of text from a Word document and exports it into an Excel spreadsheet. Column A reads the comments and Column B reads the original text that it refers to. I'd like to also extract the Author who made the comment into the spreadsheet but not sure how to. Thanks.
    Option Explicit

   Public Sub FindWordComments()
'Requires reference to Microsoft Word v14.0 Object Library

Dim objExcelApp As Object
Dim wb As Object
Set objExcelApp = CreateObject("Excel.Application")
Set wb = objExcelApp.Workbooks.Open("C:\Users\cetraig\Documents\Projects\_HRBT\Book1.xlsx")

Dim myWord              As Word.Application
Dim myDoc               As Word.Document
Dim thisComment         As Word.Comment

Dim fDialog             As Office.FileDialog
Dim varFile             As Variant

Dim destSheet           As Worksheet
Dim rowToUse            As Integer
Dim colToUse            As Long

Set fDialog = Application.FileDialog(msoFileDialogFilePicker)
Set destSheet = wb.Sheets("Sheet1")
colToUse = 1

With fDialog
    .AllowMultiSelect = True
    .Title = "Import Files"
    .Filters.Clear
    .Filters.Add "Word Documents", "*.docx"
    .Filters.Add "Word Macro Documents", "*.docm"
    .Filters.Add "All Files", "*.*"
End With

If fDialog.Show Then

    For Each varFile In fDialog.SelectedItems

        rowToUse = 2

        Set myWord = New Word.Application
        Set myDoc = myWord.Documents.Open(varFile)

        For Each thisComment In myDoc.Comments

            With thisComment
                destSheet.Cells(rowToUse, colToUse).Value = .Range.Text
                destSheet.Cells(rowToUse, colToUse + 1).Value = .Scope.Text
                destSheet.Columns(2).AutoFit
            End With

            rowToUse = rowToUse + 1

        Next thisComment

        destSheet.Cells(1, colToUse).Value = Left(myDoc.Name, 4)
        'Put name of interview object in cell A1

        destSheet.Cells(1, colToUse + 1).Value = ActiveDocument.Words.Count
        'Put the number of words in cell B1

        Set myDoc = Nothing
        myWord.Quit

        colToUse = colToUse + 2

    Next varFile

    End If

    End Sub

A: Adding a line with:
destSheet.Cells(rowToUse, colToUse + 2).Value = .Author

Should do the trick
(assuming you want it in the next column over)

redpajama_set_name: RedPajamaStackExchange


New to the world of interior light is 3M™ Daylight Redirecting Film. This incredible achievement in film utilizes a replication processs that creates a near-invisible window film mosaic. This mosaic construct when applied to the top portion of a window is designed to accept excess light close to the window and redirect it deeper into the building to increase the daylighting penetration. These microscopic structures are able to redirect as much as 80% of light up onto the ceiling, providing more natural light to other arfeas, while minimizing window hot spots at the space's perimeter. Furthermore, Daylight Redirecting film will help reduce dependence on electric lighting, as well.
Compared to existing light reflecting strategies, 3M Daylight Redirecting Film is easily integrated into new or existing windows. It requires no extra hardware or infrastructure, and little to no additional maintenance or special cleaning. It works at all times of the day, even when the sun is at a low angle. Plus, it's more cost-effective than many existing daylighting solutions around.


text:
package org.jivesoftware.openfire;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TimerTask;
import java.util.UUID;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;

import com.google.common.util.concurrent.SimpleTimeLimiter;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
import org.apache.logging.log4j.LogManager;
import org.dom4j.Document;
import org.dom4j.io.SAXReader;
import org.jivesoftware.database.DbConnectionManager;
import org.jivesoftware.database.JNDIDataSourceProvider;
import org.jivesoftware.openfire.admin.AdminManager;
import org.jivesoftware.openfire.audit.AuditManager;
import org.jivesoftware.openfire.audit.spi.AuditManagerImpl;
import org.jivesoftware.openfire.auth.AuthFactory;
import org.jivesoftware.openfire.cluster.ClusterManager;
import org.jivesoftware.openfire.cluster.ClusterMonitor;
import org.jivesoftware.openfire.cluster.NodeID;
import org.jivesoftware.openfire.commands.AdHocCommandHandler;
import org.jivesoftware.openfire.component.InternalComponentManager;
import org.jivesoftware.openfire.container.AdminConsolePlugin;
import org.jivesoftware.openfire.container.Module;
import org.jivesoftware.openfire.container.PluginManager;
import org.jivesoftware.openfire.disco.IQDiscoInfoHandler;
import org.jivesoftware.openfire.disco.IQDiscoItemsHandler;
import org.jivesoftware.openfire.disco.ServerFeaturesProvider;
import org.jivesoftware.openfire.disco.ServerIdentitiesProvider;
import org.jivesoftware.openfire.disco.ServerItemsProvider;
import org.jivesoftware.openfire.disco.UserFeaturesProvider;
import org.jivesoftware.openfire.disco.UserIdentitiesProvider;
import org.jivesoftware.openfire.disco.UserItemsProvider;
import org.jivesoftware.openfire.entitycaps.EntityCapabilitiesManager;
import org.jivesoftware.openfire.filetransfer.DefaultFileTransferManager;
import org.jivesoftware.openfire.filetransfer.FileTransferManager;
import org.jivesoftware.openfire.filetransfer.proxy.FileTransferProxy;
import org.jivesoftware.openfire.group.GroupManager;
import org.jivesoftware.openfire.handler.IQBindHandler;
import org.jivesoftware.openfire.handler.IQBlockingHandler;
import org.jivesoftware.openfire.handler.IQEntityTimeHandler;
import org.jivesoftware.openfire.handler.IQHandler;
import org.jivesoftware.openfire.handler.IQLastActivityHandler;
import org.jivesoftware.openfire.handler.IQMessageCarbonsHandler;
import org.jivesoftware.openfire.handler.IQOfflineMessagesHandler;
import org.jivesoftware.openfire.handler.IQPingHandler;
import org.jivesoftware.openfire.handler.IQPrivacyHandler;
import org.jivesoftware.openfire.handler.IQPrivateHandler;
import org.jivesoftware.openfire.handler.IQRegisterHandler;
import org.jivesoftware.openfire.handler.IQRosterHandler;
import org.jivesoftware.openfire.handler.IQSessionEstablishmentHandler;
import org.jivesoftware.openfire.handler.IQSharedGroupHandler;
import org.jivesoftware.openfire.handler.IQVersionHandler;
import org.jivesoftware.openfire.handler.IQvCardHandler;
import org.jivesoftware.openfire.handler.PresenceSubscribeHandler;
import org.jivesoftware.openfire.handler.PresenceUpdateHandler;
import org.jivesoftware.openfire.keystore.CertificateStoreManager;
import org.jivesoftware.openfire.keystore.IdentityStore;
import org.jivesoftware.openfire.lockout.LockOutManager;
import org.jivesoftware.openfire.mediaproxy.MediaProxyService;
import org.jivesoftware.openfire.muc.MultiUserChatManager;
import org.jivesoftware.openfire.net.MulticastDNSService;
import org.jivesoftware.openfire.net.ServerTrafficCounter;
import org.jivesoftware.openfire.pep.IQPEPHandler;
import org.jivesoftware.openfire.pep.IQPEPOwnerHandler;
import org.jivesoftware.openfire.pubsub.PubSubModule;
import org.jivesoftware.openfire.roster.DefaultRosterItemProvider;
import org.jivesoftware.openfire.roster.RosterItem;
import org.jivesoftware.openfire.roster.RosterItemProvider;
import org.jivesoftware.openfire.roster.RosterManager;
import org.jivesoftware.openfire.sasl.AnonymousSaslServer;
import org.jivesoftware.openfire.security.SecurityAuditManager;
import org.jivesoftware.openfire.session.ConnectionSettings;
import org.jivesoftware.openfire.session.RemoteSessionLocator;
import org.jivesoftware.openfire.session.SoftwareVersionManager;
import org.jivesoftware.openfire.session.SoftwareServerVersionManager;
import org.jivesoftware.openfire.spi.ConnectionManagerImpl;
import org.jivesoftware.openfire.spi.ConnectionType;
import org.jivesoftware.openfire.spi.PacketDelivererImpl;
import org.jivesoftware.openfire.spi.PacketRouterImpl;
import org.jivesoftware.openfire.spi.PacketTransporterImpl;
import org.jivesoftware.openfire.spi.PresenceManagerImpl;
import org.jivesoftware.openfire.spi.RoutingTableImpl;
import org.jivesoftware.openfire.spi.XMPPServerInfoImpl;
import org.jivesoftware.openfire.transport.TransportHandler;
import org.jivesoftware.openfire.update.UpdateManager;
import org.jivesoftware.openfire.user.User;
import org.jivesoftware.openfire.user.UserManager;
import org.jivesoftware.openfire.vcard.VCardManager;
import org.jivesoftware.util.InitializationException;
import org.jivesoftware.util.JiveGlobals;
import org.jivesoftware.util.LocaleUtils;
import org.jivesoftware.util.Log;
import org.jivesoftware.util.SystemProperty;
import org.jivesoftware.util.TaskEngine;
import org.jivesoftware.openfire.archive.ArchiveManager;
import org.jivesoftware.util.cache.CacheFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.xmpp.packet.JID;
import org.xmpp.packet.Message;

import com.google.common.reflect.ClassPath;

/**
 * The main XMPP server that will load, initialize and start all the server's
 * modules. The server is unique in the JVM and could be obtained by using the
 * {@link #getInstance()} method.
 *

 * The loaded modules will be initialized and may access through the server other
 * modules. This means that the only way for a module to locate another module is
 * through the server. The server maintains a list of loaded modules.
 *

 *

 * After starting up all the modules the server will load any available plugin.
 * For more information see: {@link org.jivesoftware.openfire.container.PluginManager}.
 *

 *
A configuration file keeps the server configuration. This information is required for the
 * server to work correctly. The server assumes that the configuration file is named
 * openfire.xml and is located in the conf folder. The folder that keeps
 * the configuration file must be located under the home folder. The server will try different
 * methods to locate the home folder.

 *

 *
system property - The server will use the value defined in the openfireHome
 * system property.

 *
working folder -  The server will check if there is a conf folder in the
 * working directory. This is the case when running in standalone mode.

 *
openfire_init.xml file - Attempt to load the value from openfire_init.xml which
 * must be in the classpath

 *

 *
 * @author Gaston Dombiak
 */
public class XMPPServer {

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

    private static XMPPServer instance;

    private boolean initialized = false;
    private boolean started = false;
    private NodeID nodeID;
    private static final NodeID DEFAULT_NODE_ID = NodeID.getInstance( UUID.randomUUID().toString().getBytes() );

    public static final String EXIT = "exit";
    private final static Set<String> XML_ONLY_PROPERTIES;
    static {
        final List<String> properties = new ArrayList<>(Arrays.asList(
            // Admin console network settings
            "adminConsole.port", "adminConsole.securePort", "adminConsole.interface", "network.interface",
            // Misc. settings
            "locale", "fqdn", "setup", ClusterManager.CLUSTER_PROPERTY_NAME,
            // Database config
            "connectionProvider.className",
            "database.defaultProvider.driver", "database.defaultProvider.serverURL", "database.defaultProvider.username",
            "database.defaultProvider.password", "database.defaultProvider.testSQL", "database.defaultProvider.testBeforeUse",
            "database.defaultProvider.testAfterUse", "database.defaultProvider.testTimeout", "database.defaultProvider.timeBetweenEvictionRuns",
            "database.defaultProvider.minIdleTime", "database.defaultProvider.maxWaitTime", "database.defaultProvider.minConnections",
            "database.defaultProvider.maxConnections", "database.defaultProvider.connectionTimeout", "database.mysql.useUnicode",
            "database.JNDIProvider.name"
        ));
        // JDNI database config
        properties.addAll(Arrays.asList(JNDIDataSourceProvider.jndiPropertyKeys));
        XML_ONLY_PROPERTIES = Collections.unmodifiableSet(new HashSet<>(properties));
    }

    /**
     * All modules loaded by this server
     */
    private Map<Class, Module> modules = new LinkedHashMap<>();

    /**
     * Listeners that will be notified when the server has started or is about to be stopped.
     */
    private List<XMPPServerListener> listeners = new CopyOnWriteArrayList<>();

    /**
     * Location of the home directory. All configuration files should be
     * located here.
     */
    private File openfireHome;
    private ClassLoader loader;

    private PluginManager pluginManager;
    private InternalComponentManager componentManager;
    private RemoteSessionLocator remoteSessionLocator;

    /**
     * True if in setup mode
     */
    private boolean setupMode = true;

    private static final String STARTER_CLASSNAME =
            "org.jivesoftware.openfire.starter.ServerStarter";
    private static final String WRAPPER_CLASSNAME =
            "org.tanukisoftware.wrapper.WrapperManager";
    private boolean shuttingDown;
    private XMPPServerInfoImpl xmppServerInfo;

    /**
     * Returns a singleton instance of XMPPServer.
     *
     * @return an instance.
     */
    public static XMPPServer getInstance() {
        return instance;
    }

    /**
     * TODO: (2019-04-24) Remove and replace with Mockito mocking of static methods, when available
     *
     * @param instance the mock/stub/spy XMPPServer to return when {@link #getInstance()} is called.
     * @deprecated - for test use only
     */
    @Deprecated
    public static void setInstance(final XMPPServer instance) {
        XMPPServer.instance = instance;
    }

    /**
     * Creates a server and starts it.
     */
    public XMPPServer() {
        // We may only have one instance of the server running on the JVM
        if (instance != null) {
            throw new IllegalStateException("A server is already running");
        }
        instance = this;
        start();
    }

    /**
     * Returns a snapshot of the server's status.
     *
     * @return the server information current at the time of the method call.
     */
    public XMPPServerInfo getServerInfo() {
        if (!initialized) {
            throw new IllegalStateException("Not initialized yet");
        }
        return xmppServerInfo;
    }

    /**
     * Returns true if the given address is local to the server (managed by this
     * server domain). Return false even if the jid's domain matches a local component's
     * service JID.
     *
     * @param jid the JID to check.
     * @return true if the address is a local address to this server.
     */
    public boolean isLocal( JID jid )
    {
        return jid != null && jid.getDomain().equals( xmppServerInfo.getXMPPDomain() );
    }

    /**
     * Returns true if the given address does not match the local server hostname and does not
     * match a component service JID.
     *
     * @param jid the JID to check.
     * @return true if the given address does not match the local server hostname and does not
     *         match a component service JID.
     */
    public boolean isRemote( JID jid )
    {
        return jid != null
                && !jid.getDomain().equals( xmppServerInfo.getXMPPDomain() )
                && !componentManager.hasComponent( jid );
    }

    /**
     * Returns an ID that uniquely identifies this server in a cluster. When not running in cluster mode
     * the returned value is always the same. However, when in cluster mode the value should be set
     * when joining the cluster and must be unique even upon restarts of this node.
     *
     * @return an ID that uniquely identifies this server in a cluster.
     */
    public NodeID getNodeID() {
        return nodeID == null ? DEFAULT_NODE_ID : nodeID;
    }

    /**
     * Sets an ID that uniquely identifies this server in a cluster. When not running in cluster mode
     * the returned value is always the same. However, when in cluster mode the value should be set
     * when joining the cluster and must be unique even upon restarts of this node.
     *
     * @param nodeID an ID that uniquely identifies this server in a cluster or null if not in a cluster.
     */
    public void setNodeID(NodeID nodeID) {
        this.nodeID = nodeID;
    }

    /**
     * Returns the default node ID used by this server before clustering is
     * initialized.
     *
     * @return The default node ID.
     */
    public NodeID getDefaultNodeID() {
        return DEFAULT_NODE_ID;
    }

    /**
     * Returns true if the given address matches a component service JID.
     *
     * @param jid the JID to check.
     * @return true if the given address matches a component service JID.
     */
    public boolean matchesComponent( JID jid )
    {
        return jid != null
                && !jid.getDomain().equals( xmppServerInfo.getXMPPDomain() )
                && componentManager.hasComponent( jid );
    }

    /**
     * Creates an XMPPAddress local to this server.
     *
     * @param username the user name portion of the id or null to indicate none is needed.
     * @param resource the resource portion of the id or null to indicate none is needed.
     * @return an XMPPAddress for the server.
     */
    public JID createJID(String username, String resource) {
        return new JID(username, xmppServerInfo.getXMPPDomain(), resource);
    }

    /**
     * Creates an XMPPAddress local to this server. The construction of the new JID
     * can be optimized by skipping stringprep operations.
     *
     * @param username the user name portion of the id or null to indicate none is needed.
     * @param resource the resource portion of the id or null to indicate none is needed.
     * @param skipStringprep true if stringprep should not be applied.
     * @return an XMPPAddress for the server.
     */
    public JID createJID(String username, String resource, boolean skipStringprep) {
        return new JID(username, xmppServerInfo.getXMPPDomain(), resource, skipStringprep);
    }

    /**
     * Returns a collection with the JIDs of the server's admins. The collection may include
     * JIDs of local users and users of remote servers.
     *
     * @return a collection with the JIDs of the server's admins.
     */
    public Collection<JID> getAdmins() {
        return AdminManager.getInstance().getAdminAccounts();
    }

    /**
     * Adds a new server listener that will be notified when the server has been started
     * or is about to be stopped.
     *
     * @param listener the new server listener to add.
     */
    public void addServerListener(XMPPServerListener listener) {
        listeners.add(listener);
    }

    /**
     * Removes a server listener that was being notified when the server was being started
     * or was about to be stopped.
     *
     * @param listener the server listener to remove.
     */
    public void removeServerListener(XMPPServerListener listener) {
        listeners.remove(listener);
    }

    private void initialize() throws FileNotFoundException {
        locateOpenfire();

        if ("true".equals(JiveGlobals.getXMLProperty("setup"))) {
            setupMode = false;
        }

        if (isStandAlone()) {
            logger.info("Registering shutdown hook (standalone mode)");
            Runtime.getRuntime().addShutdownHook(new ShutdownHookThread());
            TaskEngine.getInstance().schedule(new Terminator(), 1000, 1000);
        }

        loader = Thread.currentThread().getContextClassLoader();

        try {
            CacheFactory.initialize();
        } catch (InitializationException e) {
            e.printStackTrace();
            logger.error(e.getMessage(), e);
        }

        JiveGlobals.migrateProperty(XMPPServerInfo.XMPP_DOMAIN.getKey());

        JiveGlobals.migrateProperty(Log.DEBUG_ENABLED.getKey());
        Log.setDebugEnabled(Log.DEBUG_ENABLED.getValue());
        Log.setTraceEnabled(Log.TRACE_ENABLED.getValue());

        // Update server info
        xmppServerInfo = new XMPPServerInfoImpl(new Date());

        initialized = true;

        if (setupMode && "true".equals(JiveGlobals.getXMLProperty("autosetup.run"))) {
            this.runAutoSetup();
            JiveGlobals.deleteXMLProperty("autosetup");
            JiveGlobals.deleteProperty("autosetup");
        }

        // OF-1548: Move the storage of the FQDN from the database to the XML configuration
        final String hostNameFromDatabase = JiveGlobals.getProperty("xmpp.fqdn", "");
        final String hostNameFromXML = JiveGlobals.getXMLProperty("fqdn", "");
        if (!hostNameFromDatabase.isEmpty() && hostNameFromXML.isEmpty()) {
            final String hostname;
            if (ClusterManager.isClusteringEnabled()) {
                // The database value has at best a 50% chance of being right - so instead use a sensible default
                String hostnameFromOS;
                try {
                    hostnameFromOS = InetAddress.getLocalHost().getCanonicalHostName();
                } catch (final UnknownHostException e) {
                    logger.warn("Unable to determine local hostname", e);
                    hostnameFromOS = "localhost";
                }
                hostname = hostnameFromOS;
            } else {
                hostname = hostNameFromDatabase;
            }
            JiveGlobals.setXMLProperty("fqdn", hostname);
            JiveGlobals.deleteProperty("xmpp.fqdn");
        }
    }

    void runAutoSetup() {
        // Setup property encryptor as early as possible so that database related properties can use it
        JiveGlobals.setupPropertyEncryptionAlgorithm(JiveGlobals.getXMLProperty("autosetup.encryption.algorithm", "Blowfish")); // or AES
        JiveGlobals.setupPropertyEncryptionKey(JiveGlobals.getXMLProperty("autosetup.encryption.key", null));

        // steps from setup-datasource-standard.jsp
        // do this first so that other changes persist
        if ("standard".equals(JiveGlobals.getXMLProperty("autosetup.database.mode"))) {
            JiveGlobals.setXMLProperty("database.defaultProvider.driver", JiveGlobals.getXMLProperty("autosetup.database.defaultProvider.driver"));
            JiveGlobals.setXMLProperty("database.defaultProvider.serverURL", JiveGlobals.getXMLProperty("autosetup.database.defaultProvider.serverURL"));
            JiveGlobals.setXMLProperty("database.defaultProvider.username", JiveGlobals.getXMLProperty("autosetup.database.defaultProvider.username"));
            JiveGlobals.setXMLProperty("database.defaultProvider.password", JiveGlobals.getXMLProperty("autosetup.database.defaultProvider.password"));

            int minConnections;
            int maxConnections;
            double connectionTimeout;

            try {
                minConnections = Integer.parseInt(
                    JiveGlobals.getXMLProperty("autosetup.database.defaultProvider.minConnections"));
            }
            catch (Exception e) {
                minConnections = 5;
            }
            try {
                maxConnections = Integer.parseInt(
                    JiveGlobals.getXMLProperty("autosetup.database.defaultProvider.maxConnections"));
            }
            catch (Exception e) {
                maxConnections = 25;
            }
            try {
                connectionTimeout = Double.parseDouble(
                    JiveGlobals.getXMLProperty("autosetup.database.defaultProvider.connectionTimeout"));
            }
            catch (Exception e) {
                connectionTimeout = 1.0;
            }

            JiveGlobals.setXMLProperty("database.defaultProvider.minConnections",
                Integer.toString(minConnections));
            JiveGlobals.setXMLProperty("database.defaultProvider.maxConnections",
                Integer.toString(maxConnections));
            JiveGlobals.setXMLProperty("database.defaultProvider.connectionTimeout",
                Double.toString(connectionTimeout));
        }

        // mark setup as done, so that other things can be written to the DB
        JiveGlobals.setXMLProperty("setup","true");

        // steps from index.jsp
        String localeCode = JiveGlobals.getXMLProperty("autosetup.locale");
        logger.warn("Setting locale to " + localeCode);
        JiveGlobals.setLocale(LocaleUtils.localeCodeToLocale(localeCode.trim()));

        // steps from setup-host-settings.jsp
        JiveGlobals.setXMLProperty(XMPPServerInfo.XMPP_DOMAIN.getKey(), JiveGlobals.getXMLProperty("autosetup." + XMPPServerInfo.XMPP_DOMAIN.getKey()));
        JiveGlobals.setXMLProperty("fqdn", JiveGlobals.getXMLProperty("autosetup.xmpp.fqdn"));
        JiveGlobals.migrateProperty(XMPPServerInfo.XMPP_DOMAIN.getKey());

        ConnectionSettings.Client.ENABLE_OLD_SSLPORT_PROPERTY.setValue(Boolean.valueOf(JiveGlobals.getXMLProperty("autosetup." + ConnectionSettings.Client.ENABLE_OLD_SSLPORT_PROPERTY.getKey(), "true")));
        AnonymousSaslServer.ENABLED.setValue(Boolean.valueOf(JiveGlobals.getXMLProperty("autosetup." + AnonymousSaslServer.ENABLED.getKey(), "false")));

        // steps from setup-profile-settings.jsp
        if ("default".equals(JiveGlobals.getXMLProperty("autosetup.authprovider.mode", "default"))) {
            JiveGlobals.setXMLProperty("connectionProvider.className",
                "org.jivesoftware.database.DefaultConnectionProvider");

            JiveGlobals.setProperty(AuthFactory.AUTH_PROVIDER.getKey(), JiveGlobals.getXMLProperty(AuthFactory.AUTH_PROVIDER.getKey(),
                AuthFactory.AUTH_PROVIDER.getDefaultValue().getName()));
            JiveGlobals.setProperty(UserManager.USER_PROVIDER.getKey(), JiveGlobals.getXMLProperty(UserManager.USER_PROVIDER.getKey(),
                UserManager.USER_PROVIDER.getDefaultValue().getName()));
            JiveGlobals.setProperty(GroupManager.GROUP_PROVIDER.getKey(), JiveGlobals.getXMLProperty(GroupManager.GROUP_PROVIDER.getKey(),
                GroupManager.GROUP_PROVIDER.getDefaultValue().getName()));
            JiveGlobals.setProperty(VCardManager.VCARD_PROVIDER.getKey(), JiveGlobals.getXMLProperty(VCardManager.VCARD_PROVIDER.getKey(),
                VCardManager.VCARD_PROVIDER.getDefaultValue().getName()));
            JiveGlobals.setProperty(LockOutManager.LOCKOUT_PROVIDER.getKey(), JiveGlobals.getXMLProperty(LockOutManager.LOCKOUT_PROVIDER.getKey(),
                LockOutManager.LOCKOUT_PROVIDER.getDefaultValue().getName()));
            JiveGlobals.setProperty(SecurityAuditManager.AUDIT_PROVIDER.getKey(), JiveGlobals.getXMLProperty(SecurityAuditManager.AUDIT_PROVIDER.getKey(),
                SecurityAuditManager.AUDIT_PROVIDER.getDefaultValue().getName()));
            JiveGlobals.setProperty(AdminManager.ADMIN_PROVIDER.getKey(), JiveGlobals.getXMLProperty(AdminManager.ADMIN_PROVIDER.getKey(),
                AdminManager.ADMIN_PROVIDER.getDefaultValue().getName()));

            // make configurable?
            JiveGlobals.setProperty("user.scramHashedPasswordOnly", "true");
        }

        // steps from setup-admin-settings.jsp
        try {
            User adminUser = UserManager.getInstance().getUser("admin");
            adminUser.setPassword(JiveGlobals.getXMLProperty("autosetup.admin.password"));
            adminUser.setEmail(JiveGlobals.getXMLProperty("autosetup.admin.email"));
            Date now = new Date();
            adminUser.setCreationDate(now);
            adminUser.setModificationDate(now);
        } catch (Exception e) {
            e.printStackTrace();
            logger.warn("There was an unexpected error encountered when "
                + "setting the new admin information. Please check your error "
                + "logs and try to remedy the problem.");
        }

        // Import any provisioned users.
        try {
            RosterItemProvider rosterItemProvider = null;
            for (int userId = 1; userId < Integer.MAX_VALUE; userId++ ) {
                final String username = JiveGlobals.getXMLProperty( "autosetup.users.user" + userId + ".username" );
                final String password = JiveGlobals.getXMLProperty( "autosetup.users.user" + userId + ".password" );
                if (username == null || password == null) {
                    break;
                }
                final String name = JiveGlobals.getXMLProperty( "autosetup.users.user" + userId + ".name" );
                final String email = JiveGlobals.getXMLProperty( "autosetup.users.user" + userId + ".email" );

                final User user = UserManager.getInstance().createUser(username, password, name, email );
                for (int itemId = 1; itemId < Integer.MAX_VALUE; itemId++) {
                    final String jid = JiveGlobals.getXMLProperty( "autosetup.users.user" + userId + ".roster.item" + itemId + ".jid" );
                    if (jid == null) {
                        break;
                    }
                    final String nickname = JiveGlobals.getXMLProperty( "autosetup.users.user" + userId + ".roster.item" + itemId + ".nickname" );
                    final RosterItem rosterItem = new RosterItem(new JID(jid), RosterItem.SubType.BOTH, RosterItem.AskType.NONE, RosterItem.RecvType.NONE, nickname, null);

                    if (rosterItemProvider == null) {
                        // Modules have not started at this point, so we can't go through the roster. Use the default provider instead.
                        rosterItemProvider = new DefaultRosterItemProvider();
                    }
                    rosterItemProvider.createItem(user.getUsername(), rosterItem);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            logger.warn("There was an unexpected error encountered when provisioning auto-setup provided users.", e);
        }

        // finish setup
        this.finalSetupSteps();
        setupMode = false;
    }

    private void finalSetupSteps() {
        for (String propName : JiveGlobals.getXMLPropertyNames()) {
            if (!XML_ONLY_PROPERTIES.contains(propName)) {
                if (JiveGlobals.getProperty(propName) == null) {
                    JiveGlobals.setProperty(propName, JiveGlobals.getXMLProperty(propName));
                }
                JiveGlobals.setPropertyEncrypted(propName, JiveGlobals.isXMLPropertyEncrypted(propName));
            }
        }

        // Check if keystore (that out-of-the-box is a fallback for all keystores) already has certificates for current domain.
        CertificateStoreManager certificateStoreManager = null; // Will be a module after finishing setup.
        try {
            certificateStoreManager = new CertificateStoreManager();
            certificateStoreManager.initialize( this );
            certificateStoreManager.start();
            final IdentityStore identityStore = certificateStoreManager.getIdentityStore( ConnectionType.SOCKET_C2S );
            identityStore.ensureDomainCertificate();

        } catch (Exception e) {
            logger.error("Error generating self-signed certificates", e);
        } finally {
            if (certificateStoreManager != null)
            {
                certificateStoreManager.stop();
                certificateStoreManager.destroy();
            }
        }

        // Initialize list of admins now (before we restart Jetty)
        AdminManager.getInstance().getAdminAccounts();
    }

    /**
     * Finish the setup process. Because this method is meant to be called from inside
     * the Admin console plugin, it spawns its own thread to do the work so that the
     * class loader is correct.
     */
    public void finishSetup() {
        if (!setupMode) {
            return;
        }

        this.finalSetupSteps();

        // Make sure that setup finished correctly.
        if ("true".equals(JiveGlobals.getXMLProperty("setup"))) {
            // Iterate through all the provided XML properties and set the ones that haven't
            // already been touched by setup prior to this method being called.

            Thread finishSetup = new Thread() {
                @Override
                public void run() {
                    try {
                        if (isStandAlone()) {
                            // Always restart the HTTP server manager. This covers the case
                            // of changing the ports, as well as generating self-signed certificates.

                            // Wait a short period before shutting down the admin console.
                            // Otherwise, the page that requested the setup finish won't
                            // render properly!
                            Thread.sleep(1000);
                            ((AdminConsolePlugin) pluginManager.getPlugin("admin")).restart();
                        }

                        verifyDataSource();
                        // First load all the modules so that modules may access other modules while
                        // being initialized
                        loadModules();
                        // Initize all the modules
                        initModules();
                        // Start all the modules
                        startModules();
                        scanForSystemPropertyClasses();
                    }
                    catch (Exception e) {
                        e.printStackTrace();
                        logger.error(e.getMessage(), e);
                        shutdownServer();
                    }
                }
            };
            // Use the correct class loader.
            finishSetup.setContextClassLoader(loader);
            finishSetup.start();
            // We can now safely indicate that setup has finished
            setupMode = false;
        }
    }

    public void start() {
        try {
            initialize();

            // Create PluginManager now (but don't start it) so that modules may use it
            File pluginDir = new File(openfireHome, "plugins");
            pluginManager = new PluginManager(pluginDir);

            // If the server has already been setup then we can start all the server's modules
            if (!setupMode) {
                verifyDataSource();
                // First load all the modules so that modules may access other modules while
                // being initialized
                loadModules();
                // Initize all the modules
                initModules();
                // Start all the modules
                startModules();
            }
            // Initialize statistics
            ServerTrafficCounter.initStatistics();

            // Load plugins (when in setup mode only the admin console will be loaded)
            pluginManager.start();

            // Log that the server has been started
            String startupBanner = LocaleUtils.getLocalizedString("short.title") + " " + xmppServerInfo.getVersion().getVersionString() +
                    " [" + JiveGlobals.formatDateTime(new Date()) + "]";
            logger.info(startupBanner);
            System.out.println(startupBanner);

            started = true;

            // Notify server listeners that the server has been started
            for (XMPPServerListener listener : listeners) {
                try {
                    listener.serverStarted();
                } catch (Exception e) {
                    logger.warn("An exception occurred while dispatching a 'serverStarted' event!", e);
                }
            }

            if (!setupMode) {
                scanForSystemPropertyClasses();
            }
        }
        catch (Exception e) {
            e.printStackTrace();
            logger.error(e.getMessage(), e);
            System.out.println(LocaleUtils.getLocalizedString("startup.error"));
            shutdownServer();
        }
    }

    // A SystemProperty class will not appear in the System Properties screen until it is referenced. This method
    // ensures that they are all referenced immediately.
    // The following class cannot always be loaded as it references a class that's part of the Install4J launcher
    private static final Set<String> CLASSES_TO_EXCLUDE = Collections.singleton("org.jivesoftware.openfire.launcher.Uninstaller");

    private void scanForSystemPropertyClasses() {

        try {
            final Set<ClassPath.ClassInfo> classesInPackage = ClassPath.from(getClass().getClassLoader()).getTopLevelClassesRecursive("org.jivesoftware.openfire");
            for (final ClassPath.ClassInfo classInfo : classesInPackage) {
                final String className = classInfo.getName();
                if (!CLASSES_TO_EXCLUDE.contains(className)) {
                    try {
                        final Class<?> clazz = classInfo.load();
                        final Field[] fields = clazz.getDeclaredFields();
                        for (final Field field : fields) {
                            if (field.getType().equals(SystemProperty.class)) {
                                try {
                                    field.setAccessible(true);
                                    logger.info("Accessing SystemProperty field {}#{}", className, field.getName());
                                    field.get(null);
                                } catch (final Throwable t) {
                                    logger.warn("Unable to access field {}#{}", className, field.getName(), t);
                                }
                            }
                        }
                    } catch (final Throwable t) {
                        logger.warn("Unable to load class {}", className, t);
                    }
                }
            }
        } catch (final Throwable t) {
            logger.warn("Unable to scan classpath for SystemProperty classes", t);
        }
    }

    private void loadModules() {
        // Load boot modules
        loadModule(RoutingTableImpl.class.getName());
        loadModule(AuditManagerImpl.class.getName());
        loadModule(RosterManager.class.getName());
        loadModule(PrivateStorage.class.getName());
        // Load core modules
        loadModule(PresenceManagerImpl.class.getName());
        loadModule(SessionManager.class.getName());
        loadModule(PacketRouterImpl.class.getName());
        loadModule(IQRouter.class.getName());
        loadModule(MessageRouter.class.getName());
        loadModule(PresenceRouter.class.getName());
        loadModule(MulticastRouter.class.getName());
        loadModule(PacketTransporterImpl.class.getName());
        loadModule(PacketDelivererImpl.class.getName());
        loadModule(TransportHandler.class.getName());
        loadModule(OfflineMessageStrategy.class.getName());
        loadModule(OfflineMessageStore.class.getName());
        loadModule(VCardManager.class.getName());
        // Load standard modules
        loadModule(IQBindHandler.class.getName());
        loadModule(IQSessionEstablishmentHandler.class.getName());
        loadModule(IQPingHandler.class.getName());
        loadModule(IQBlockingHandler.class.getName());
        loadModule(IQPrivateHandler.class.getName());
        loadModule(IQRegisterHandler.class.getName());
        loadModule(IQRosterHandler.class.getName());
        loadModule(IQEntityTimeHandler.class.getName());
        loadModule(IQvCardHandler.class.getName());
        loadModule(IQVersionHandler.class.getName());
        loadModule(IQLastActivityHandler.class.getName());
        loadModule(PresenceSubscribeHandler.class.getName());
        loadModule(PresenceUpdateHandler.class.getName());
        loadModule(IQOfflineMessagesHandler.class.getName());
        loadModule(IQPEPHandler.class.getName());
        loadModule(IQPEPOwnerHandler.class.getName());
        loadModule(MulticastDNSService.class.getName());
        loadModule(IQSharedGroupHandler.class.getName());
        loadModule(AdHocCommandHandler.class.getName());
        loadModule(IQPrivacyHandler.class.getName());
        loadModule(DefaultFileTransferManager.class.getName());
        loadModule(FileTransferProxy.class.getName());
        loadModule(MediaProxyService.class.getName());
        loadModule(PubSubModule.class.getName());
        loadModule(IQDiscoInfoHandler.class.getName());
        loadModule(IQDiscoItemsHandler.class.getName());
        loadModule(UpdateManager.class.getName());
        loadModule(FlashCrossDomainHandler.class.getName());
        loadModule(InternalComponentManager.class.getName());
        loadModule(MultiUserChatManager.class.getName());
        loadModule(IQMessageCarbonsHandler.class.getName());
        loadModule(ArchiveManager.class.getName());
        loadModule(CertificateStoreManager.class.getName());
        loadModule(EntityCapabilitiesManager.class.getName());
        loadModule(SoftwareVersionManager.class.getName());
        loadModule(SoftwareServerVersionManager.class.getName());

        // Load this module always last since we don't want to start listening for clients
        // before the rest of the modules have been started
        loadModule(ConnectionManagerImpl.class.getName());
        loadModule(ClusterMonitor.class.getName());
        // Keep a reference to the internal component manager
        componentManager = getComponentManager();
    }

    /**
     * Loads a module.
     *
     * @param module the name of the class that implements the Module interface.
     */
    private void loadModule(String module) {
        try {
            Class<Module> modClass = (Class<Module>) loader.loadClass(module);
            Module mod = modClass.newInstance();
            this.modules.put(modClass, mod);
        }
        catch (Exception e) {
            e.printStackTrace();
            logger.error(LocaleUtils.getLocalizedString("admin.error"), e);
        }
    }

    private void initModules() {
        for (Module module : modules.values()) {
            try {
                module.initialize(this);
            }
            catch (Exception e) {
                e.printStackTrace();
                // Remove the failed initialized module
                this.modules.remove(module.getClass());
                module.stop();
                module.destroy();
                logger.error(LocaleUtils.getLocalizedString("admin.error"), e);
            }
        }

        // Register modules with service discovery provides where applicable.
        for (Module module : modules.values() )
        {
            // Service discovery info
            if (module instanceof ServerFeaturesProvider) {
                getIQDiscoInfoHandler().addServerFeaturesProvider( (ServerFeaturesProvider) module );
            }

            if (module instanceof ServerIdentitiesProvider) {
                getIQDiscoInfoHandler().addServerIdentitiesProvider( (ServerIdentitiesProvider) module );
            }

            if (module instanceof UserIdentitiesProvider) {
                getIQDiscoInfoHandler().addUserIdentitiesProvider( (UserIdentitiesProvider) module );
            }

            if (module instanceof UserFeaturesProvider ) {
                getIQDiscoInfoHandler().addUserFeaturesProvider( (UserFeaturesProvider) module );
            }

            // Service discovery items
            if (module instanceof ServerItemsProvider) {
                getIQDiscoItemsHandler().addServerItemsProvider( (ServerItemsProvider) module );
            }

            if (module instanceof UserItemsProvider) {
                getIQDiscoItemsHandler().addUserItemsProvider( (UserItemsProvider) module);
            }
        }

    }

    /**
     *
Following the loading and initialization of all the modules
     * this method is called to iterate through the known modules and
     * start them.

     */
    private void startModules() {
        for (Module module : modules.values()) {
            try {
                logger.debug( "Starting module: " + module.getName() );
                module.start();
            }
            catch (Exception e) {
                logger.error( "An exception occurred while starting module '{}'.", module.getName(), e );
            }
        }
    }

    /**
     * Restarts the server and all it's modules only if the server is restartable. Otherwise do
     * nothing.
     */
    public void restart() {
        if (isStandAlone() && isRestartable()) {
            try {
                Class<?> wrapperClass = Class.forName(WRAPPER_CLASSNAME);
                Method restartMethod = wrapperClass.getMethod("restart", (Class []) null);
                restartMethod.invoke(null, (Object []) null);
            }
            catch (Exception e) {
                logger.error("Could not restart container", e);
            }
        }
    }

    /**
     * Restarts the HTTP server only when running in stand alone mode. The restart
     * process will be done in another thread that will wait 1 second before doing
     * the actual restart. The delay will give time to the page that requested the
     * restart to fully render its content.
     */
    public void restartHTTPServer() {
        Thread restartThread = new Thread() {
            @Override
            public void run() {
                if (isStandAlone()) {
                    // Restart the HTTP server manager. This covers the case
                    // of changing the ports, as well as generating self-signed certificates.

                    // Wait a short period before shutting down the admin console.
                    // Otherwise, this page won't render properly!
                    try {
                        Thread.sleep(1000);
                        ((AdminConsolePlugin) pluginManager.getPlugin("admin")).restart();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        };
        restartThread.setContextClassLoader(loader);
        restartThread.start();
    }

    /**
     * Stops the server only if running in standalone mode. Do nothing if the server is running
     * inside of another server.
     */
    public void stop() {
        logger.info("Initiating shutdown ...");
        // Only do a system exit if we're running standalone
        if (isStandAlone()) {
            // if we're in a wrapper, we have to tell the wrapper to shut us down
            if (isRestartable()) {
                try {
                    Class<?> wrapperClass = Class.forName(WRAPPER_CLASSNAME);
                    Method stopMethod = wrapperClass.getMethod("stop", Integer.TYPE);
                    stopMethod.invoke(null, 0);
                }
                catch (Exception e) {
                    logger.error("Could not stop container", e);
                }
            }
            else {
                shutdownServer();
                Thread shutdownThread = new ShutdownThread();
                shutdownThread.setDaemon(true);
                shutdownThread.start();
            }
        }
        else {
            // Close listening socket no matter what the condition is in order to be able
            // to be restartable inside a container.
            shutdownServer();
        }
    }

    public boolean isSetupMode() {
        return setupMode;
    }

    public boolean isRestartable() {
        boolean restartable;
        try {
            restartable = Class.forName(WRAPPER_CLASSNAME) != null;
        }
        catch (ClassNotFoundException e) {
            restartable = false;
        }
        return restartable;
    }

    /**
     * Returns if the server is running in standalone mode. We consider that it's running in
     * standalone if the "org.jivesoftware.openfire.starter.ServerStarter" class is present in the
     * system.
     *
     * @return true if the server is running in standalone mode.
     */
    public boolean isStandAlone() {
        boolean standalone;
        try {
            standalone = Class.forName(STARTER_CLASSNAME) != null;
        }
        catch (ClassNotFoundException e) {
            standalone = false;
        }
        return standalone;
    }

    /**
     * Verify that the database is accessible.
     */
    private void verifyDataSource() {
        Connection con = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        try {
            con = DbConnectionManager.getConnection();
            pstmt = con.prepareStatement("SELECT count(*) FROM ofID");
            rs = pstmt.executeQuery();
            rs.next();
        }
        catch (Exception e) {
            System.err.println("Database setup or configuration error: " +
                    "Please verify your database settings and check the " +
                    "logs/error.log file for detailed error messages.");
            logger.error("Database could not be accessed", e);
            throw new IllegalArgumentException(e);
        }
        finally {
            DbConnectionManager.closeConnection(rs, pstmt, con);
        }
    }

    /**
     * Verifies that the given home guess is a real Openfire home directory.
     * We do the verification by checking for the Openfire config file in
     * the config dir of jiveHome.
     *
     * @param homeGuess a guess at the path to the home directory.
     * @param jiveConfigName the name of the config file to check.
     * @return a file pointing to the home directory or null if the
     *         home directory guess was wrong.
     * @throws java.io.FileNotFoundException if there was a problem with the home
     *                                       directory provided
     */
    private File verifyHome(String homeGuess, String jiveConfigName) throws FileNotFoundException {
        File openfireHome = new File(homeGuess);
        File configFile = new File(openfireHome, jiveConfigName);
        if (!configFile.exists()) {
            throw new FileNotFoundException();
        }
        else {
            try {
                return new File(openfireHome.getCanonicalPath());
            }
            catch (Exception ex) {
                throw new FileNotFoundException();
            }
        }
    }

    /**
     *
Retrieve the jive home for the container.

     *
     * @throws FileNotFoundException If jiveHome could not be located
     */
    private void locateOpenfire() throws FileNotFoundException {
        String jiveConfigName = "conf" + File.separator + "openfire.xml";
        // First, try to load it openfireHome as a system property.
        if (openfireHome == null) {
            String homeProperty = System.getProperty("openfireHome");
            try {
                if (homeProperty != null) {
                    openfireHome = verifyHome(homeProperty, jiveConfigName);
                }
            }
            catch (FileNotFoundException fe) {
                // Ignore.
            }
        }

        // If we still don't have home, let's assume this is standalone
        // and just look for home in a standard sub-dir location and verify
        // by looking for the config file
        if (openfireHome == null) {
            try {
                openfireHome = verifyHome("..", jiveConfigName).getCanonicalFile();
            } catch (IOException ie) {
                // Ignore.
            }
        }

        // If home is still null, no outside process has set it and
        // we have to attempt to load the value from openfire_init.xml,
        // which must be in the classpath.
        if (openfireHome == null) {
            try (InputStream in = getClass().getResourceAsStream("/openfire_init.xml")) {
                if (in != null) {
                    SAXReader reader = new SAXReader();
                    Document doc = reader.read(in);
                    String path = doc.getRootElement().getText();
                    try {
                        if (path != null) {
                            openfireHome = verifyHome(path, jiveConfigName);
                        }
                    }
                    catch (FileNotFoundException fe) {
                        fe.printStackTrace();
                    }
                }
            }
            catch (Exception e) {
                System.err.println("Error loading openfire_init.xml to find home.");
                e.printStackTrace();
            }
        }

        if (openfireHome == null) {
            System.err.println("Could not locate home");
            throw new FileNotFoundException();
        }
        else {
            // Set the home directory for the config file
            JiveGlobals.setHomeDirectory(openfireHome.toString());
            // Set the name of the config file
            JiveGlobals.setConfigName(jiveConfigName);
        }
    }

    /**
     * This timer task is used to monitor the System input stream
     * for a "terminate" command from the launcher (or the console).
     * This allows for a graceful shutdown when Openfire is started
     * via the launcher, especially in Windows.
     */
    private class Terminator extends TimerTask {
        private BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
        @Override
        public void run() {
            try {
                if (stdin.ready()) {
                    if (EXIT.equalsIgnoreCase(stdin.readLine())) {
                        System.exit(0); // invokes shutdown hook(s)
                    }
                }
            } catch (IOException ioe) {
                logger.error("Error reading console input", ioe);
            }
        }
    }

    /**
     *
A thread to ensure the server shuts down no matter what.

     *
Spawned when stop() is called in standalone mode, we wait a few
     * seconds then call system exit().

     *
     * @author Iain Shigeoka
     */
    private class ShutdownHookThread extends Thread {

        /**
         *
Logs the server shutdown.

         */
        @Override
        public void run() {
            System.err.println("Halting server...");
            shutdownServer();
            System.err.println("Server halted");
        }
    }

    /**
     *
A thread to ensure the server shuts down no matter what.

     *
Spawned when stop() is called in standalone mode, we wait a few
     * seconds then call system exit().

     *
     * @author Iain Shigeoka
     */
    private class ShutdownThread extends Thread {

        /**
         *
Shuts down the JVM after a 5 second delay.

         */
        @Override
        public void run() {
            try {
                Thread.sleep(5000);
                // No matter what, we make sure it's dead
                System.out.println( "Openfire process forcefully killed." );
                System.exit(0);
            }
            catch (InterruptedException e) {
                // Ignore.
            }

        }
    }

    /**
     * Makes a best effort attempt to shutdown the server
     */
    private void shutdownServer() {
        shuttingDown = true;
        ClusterManager.shutdown();
        // Notify server listeners that the server is about to be stopped
        for (XMPPServerListener listener : listeners) {
            try {
                listener.serverStopping();
            } catch (Exception ex) {
                logger.error("Exception during listener shutdown", ex);
            }
        }
        // If we don't have modules then the server has already been shutdown
        if (modules.isEmpty()) {
            return;
        }

        // Stop all plugins
        logger.info("Shutting down plugins ...");
        if (pluginManager != null) {
            try {
                pluginManager.shutdown();
            } catch (Exception ex) {
                logger.error("Exception during plugin shutdown", ex);
            }
        }

        logger.info("Shutting down " + modules.size() + " modules ...");

        final SimpleTimeLimiter timeLimiter = SimpleTimeLimiter.create( Executors.newSingleThreadExecutor(
            new ThreadFactoryBuilder()
                .setDaemon( true )
                .setNameFormat( "shutdown-thread-%d" )
                .build() ) );

        // OF-1996" Get all modules and stop and destroy them. Do this in the reverse order in which the were created.
        // This ensures that the 'most important' / core modules are shut down last, giving other modules the
        // opportunity to make use of their functionality during their shutdown (eg: MUC wants to send messages during
        // shutdown).
        final List<Class> reverseInsertionOrder = new ArrayList<>( modules.keySet() );
        Collections.reverse( reverseInsertionOrder );

        for( final Class moduleClass : reverseInsertionOrder ) {
            final Module module = modules.get( moduleClass );
            try {
                // OF-1607: Apply a configurable timeout to the duration of stop/destroy invocation.
                timeLimiter.runWithTimeout(() -> {
                    stopAndDestroyModule(module);
                }, JiveGlobals.getLongProperty("shutdown.modules.timeout-millis", Long.MAX_VALUE), TimeUnit.MILLISECONDS);
            } catch ( Exception e ) {
                logger.warn("An exception occurred while stopping / destroying module '{}'.", module.getName(), e);
                System.err.println(e);
            }
        }

        modules.clear();
        // Stop the Db connection manager.
        try {
            DbConnectionManager.destroyConnectionProvider();
        } catch (Exception ex) {
            logger.error("Exception during DB shutdown", ex);
        }

        // Shutdown the task engine.
        TaskEngine.getInstance().shutdown();

        // hack to allow safe stopping
        logger.info("Openfire stopped");

        // Shut down the logging framework (causing the last few log entries to be flushed)
        LogManager.shutdown();
    }

    /**
     * Stops and destroys a module.
     *
     * @param module The module to be stopped (cannot be null).
     */
    private static void stopAndDestroyModule( final Module module ) {
        try {
            logger.debug("Stopping and shutting down module '{}'" + module.getName() );
            module.stop();
            module.destroy();
        } catch (Exception ex) {
            logger.error("Exception during module '{}' shutdown", module.getName(), ex);
        }
    }

    /**
     * Returns true if the server is being shutdown.
     *
     * @return true if the server is being shutdown.
     */
    public boolean isShuttingDown() {
        return shuttingDown;
    }

    /**
     * Returns the ConnectionManager registered with this server. The
     * ConnectionManager was registered with the server as a module while starting up
     * the server.
     *
     * @return the ConnectionManager registered with this server.
     */
    public ConnectionManager getConnectionManager() {
        return (ConnectionManager) modules.get(ConnectionManagerImpl.class);
    }

    /**
     * Returns the RoutingTable registered with this server. The
     * RoutingTable was registered with the server as a module while starting up
     * the server.
     *
     * @return the RoutingTable registered with this server.
     */
    public RoutingTable getRoutingTable() {
        return (RoutingTable) modules.get(RoutingTableImpl.class);
    }

    /**
     * Returns the PacketDeliverer registered with this server. The
     * PacketDeliverer was registered with the server as a module while starting up
     * the server.
     *
     * @return the PacketDeliverer registered with this server.
     */
    public PacketDeliverer getPacketDeliverer() {
        return (PacketDeliverer) modules.get(PacketDelivererImpl.class);
    }

    /**
     * Returns the RosterManager registered with this server. The
     * RosterManager was registered with the server as a module while starting up
     * the server.
     *
     * @return the RosterManager registered with this server.
     */
    public RosterManager getRosterManager() {
        return (RosterManager) modules.get(RosterManager.class);
    }

    /**
     * Returns the PresenceManager registered with this server. The
     * PresenceManager was registered with the server as a module while starting up
     * the server.
     *
     * @return the PresenceManager registered with this server.
     */
    public PresenceManager getPresenceManager() {
        return (PresenceManager) modules.get(PresenceManagerImpl.class);
    }

    /**
     * Returns the OfflineMessageStore registered with this server. The
     * OfflineMessageStore was registered with the server as a module while starting up
     * the server.
     *
     * @return the OfflineMessageStore registered with this server.
     */
    public OfflineMessageStore getOfflineMessageStore() {
        return (OfflineMessageStore) modules.get(OfflineMessageStore.class);
    }

    /**
     * Returns the OfflineMessageStrategy registered with this server. The
     * OfflineMessageStrategy was registered with the server as a module while starting
     * up the server.
     *
     * @return the OfflineMessageStrategy registered with this server.
     */
    public OfflineMessageStrategy getOfflineMessageStrategy() {
        return (OfflineMessageStrategy) modules.get(OfflineMessageStrategy.class);
    }

    /**
     * Returns the PacketRouter registered with this server. The
     * PacketRouter was registered with the server as a module while starting up
     * the server.
     *
     * @return the PacketRouter registered with this server.
     */
    public PacketRouter getPacketRouter() {
        return (PacketRouter) modules.get(PacketRouterImpl.class);
    }

    /**
     * Returns the IQRegisterHandler registered with this server. The
     * IQRegisterHandler was registered with the server as a module while starting up
     * the server.
     *
     * @return the IQRegisterHandler registered with this server.
     */
    public IQRegisterHandler getIQRegisterHandler() {
        return (IQRegisterHandler) modules.get(IQRegisterHandler.class);
    }

    /**
     * Returns the IQPEPHandler registered with this server. The
     * IQPEPHandler was registered with the server as a module while starting up
     * the server.
     *
     * @return the IQPEPHandler registered with this server.
     */
    public IQPEPHandler getIQPEPHandler() {
        return (IQPEPHandler) modules.get(IQPEPHandler.class);
    }

    /**
     * Returns the PluginManager instance registered with this server.
     *
     * @return the PluginManager instance.
     */
    public PluginManager getPluginManager() {
        return pluginManager;
    }

    /**
     * Returns the PubSubModule registered with this server. The
     * PubSubModule was registered with the server as a module while starting up
     * the server.
     *
     * @return the PubSubModule registered with this server.
     */
    public PubSubModule getPubSubModule() {
        return (PubSubModule) modules.get(PubSubModule.class);
    }

    /**
     * Returns the ArchiveManager registered with this server. The
     * ArchiveManager was registered with the server as a module while starting up
     * the server.
     *
     * @return the ArchiveManager registered with this server.
     */
    public ArchiveManager getArchiveManager() {
        return (ArchiveManager) modules.get(ArchiveManager.class);
    }

    /**
     * Returns a list with all the modules registered with the server that inherit from IQHandler.
     *
     * @return a list with all the modules registered with the server that inherit from IQHandler.
     */
    public List<IQHandler> getIQHandlers() {
        List<IQHandler> answer = new ArrayList<>();
        for (Module module : modules.values()) {
            if (module instanceof IQHandler) {
                answer.add((IQHandler) module);
            }
        }
        return answer;
    }

    /**
     * Returns the SessionManager registered with this server. The
     * SessionManager was registered with the server as a module while starting up
     * the server.
     *
     * @return the SessionManager registered with this server.
     */
    public SessionManager getSessionManager() {
        return (SessionManager) modules.get(SessionManager.class);
    }

    /**
     * Returns the TransportHandler registered with this server. The
     * TransportHandler was registered with the server as a module while starting up
     * the server.
     *
     * @return the TransportHandler registered with this server.
     */
    public TransportHandler getTransportHandler() {
        return (TransportHandler) modules.get(TransportHandler.class);
    }

    /**
     * Returns the PresenceUpdateHandler registered with this server. The
     * PresenceUpdateHandler was registered with the server as a module while starting
     * up the server.
     *
     * @return the PresenceUpdateHandler registered with this server.
     */
    public PresenceUpdateHandler getPresenceUpdateHandler() {
        return (PresenceUpdateHandler) modules.get(PresenceUpdateHandler.class);
    }

    /**
     * Returns the PresenceSubscribeHandler registered with this server. The
     * PresenceSubscribeHandler was registered with the server as a module while
     * starting up the server.
     *
     * @return the PresenceSubscribeHandler registered with this server.
     */
    public PresenceSubscribeHandler getPresenceSubscribeHandler() {
        return (PresenceSubscribeHandler) modules.get(PresenceSubscribeHandler.class);
    }

    /**
     * Returns the IQRouter registered with this server. The
     * IQRouter was registered with the server as a module while starting up
     * the server.
     *
     * @return the IQRouter registered with this server.
     */
    public IQRouter getIQRouter() {
        return (IQRouter) modules.get(IQRouter.class);
    }

    /**
     * Returns the MessageRouter registered with this server. The
     * MessageRouter was registered with the server as a module while starting up
     * the server.
     *
     * @return the MessageRouter registered with this server.
     */
    public MessageRouter getMessageRouter() {
        return (MessageRouter) modules.get(MessageRouter.class);
    }

    /**
     * Returns the PresenceRouter registered with this server. The
     * PresenceRouter was registered with the server as a module while starting up
     * the server.
     *
     * @return the PresenceRouter registered with this server.
     */
    public PresenceRouter getPresenceRouter() {
        return (PresenceRouter) modules.get(PresenceRouter.class);
    }

    /**
     * Returns the MulticastRouter registered with this server. The
     * MulticastRouter was registered with the server as a module while starting up
     * the server.
     *
     * @return the MulticastRouter registered with this server.
     */
    public MulticastRouter getMulticastRouter() {
        return (MulticastRouter) modules.get(MulticastRouter.class);
    }

    /**
     * Returns the UserManager registered with this server. The
     * UserManager was registered with the server as a module while starting up
     * the server.
     *
     * @return the UserManager registered with this server.
     */
    public UserManager getUserManager() {
        return UserManager.getInstance();
    }

    /**
     * Returns the LockOutManager registered with this server.  The
     * LockOutManager was registered with the server as a module while starting up
     * the server.
     *
     * @return the LockOutManager registered with this server.
     */
    public LockOutManager getLockOutManager() {
        return LockOutManager.getInstance();
    }

    /**
     * Returns the UpdateManager registered with this server. The
     * UpdateManager was registered with the server as a module while starting up
     * the server.
     *
     * @return the UpdateManager registered with this server.
     */
    public UpdateManager getUpdateManager() {
        return (UpdateManager) modules.get(UpdateManager.class);
    }

    /**
     * Returns the AuditManager registered with this server. The
     * AuditManager was registered with the server as a module while starting up
     * the server.
     *
     * @return the AuditManager registered with this server.
     */
    public AuditManager getAuditManager() {
        return (AuditManager) modules.get(AuditManagerImpl.class);
    }

    /**
     * Returns the EntityCapabilitiesManager registered with this server. The
     * EntityCapabilitiesManager was registered with the server as a module while starting up
     * the server.
     *
     * @return the EntityCapabilitiesManager registered with this server.
     */
    public EntityCapabilitiesManager getEntityCapabilitiesManager() {
        return (EntityCapabilitiesManager) modules.get(EntityCapabilitiesManager.class);
    }

    /**
     * Returns a list with all the modules that provide "discoverable" features.
     *
     * @return a list with all the modules that provide "discoverable" features.
     * @deprecated Use {@link IQDiscoInfoHandler} instead.
     */
    @Deprecated
    public List<ServerFeaturesProvider> getServerFeaturesProviders() {
        List<ServerFeaturesProvider> answer = new ArrayList<>();
        for (Module module : modules.values()) {
            if (module instanceof ServerFeaturesProvider) {
                answer.add((ServerFeaturesProvider) module);
            }
        }
        return answer;
    }

    /**
     * Returns a list with all the modules that provide "discoverable" identities.
     *
     * @return a list with all the modules that provide "discoverable" identities.
     * @deprecated Use {@link IQDiscoInfoHandler} instead.
     */
    @Deprecated
    public List<ServerIdentitiesProvider> getServerIdentitiesProviders() {
        List<ServerIdentitiesProvider> answer = new ArrayList<>();
        for (Module module : modules.values()) {
            if (module instanceof ServerIdentitiesProvider) {
                answer.add((ServerIdentitiesProvider) module);
            }
        }
        return answer;
    }

    /**
     * Returns a list with all the modules that provide "discoverable" items associated with
     * the server.
     *
     * @return a list with all the modules that provide "discoverable" items associated with
     *         the server.
     * @deprecated Use {@link IQDiscoItemsHandler} instead.
     */
    @Deprecated
    public List<ServerItemsProvider> getServerItemsProviders() {
        List<ServerItemsProvider> answer = new ArrayList<>();
        for (Module module : modules.values()) {
            if (module instanceof ServerItemsProvider) {
                answer.add((ServerItemsProvider) module);
            }
        }
        return answer;
    }

    /**
     * Returns a list with all the modules that provide "discoverable" user identities.
     *
     * @return a list with all the modules that provide "discoverable" user identities.
     * @deprecated Use {@link IQDiscoInfoHandler} instead.
     */
    @Deprecated
    public List<UserIdentitiesProvider> getUserIdentitiesProviders() {
        List<UserIdentitiesProvider> answer = new ArrayList<>();
        for (Module module : modules.values()) {
            if (module instanceof UserIdentitiesProvider) {
                answer.add((UserIdentitiesProvider) module);
            }
        }
        return answer;
    }

    /**
     * Returns a list with all the modules that provide "discoverable" items associated with
     * users.
     *
     * @return a list with all the modules that provide "discoverable" items associated with
     *         users.
     * @deprecated Use {@link IQDiscoInfoHandler} instead.
     */
    @Deprecated
    public List<UserItemsProvider> getUserItemsProviders() {
        List<UserItemsProvider> answer = new ArrayList<>();
        for (Module module : modules.values()) {
            if (module instanceof UserItemsProvider) {
                answer.add((UserItemsProvider) module);
            }
        }
        return answer;
    }

    /**
     * Returns the IQDiscoInfoHandler registered with this server. The
     * IQDiscoInfoHandler was registered with the server as a module while starting up
     * the server.
     *
     * @return the IQDiscoInfoHandler registered with this server.
     */
    public IQDiscoInfoHandler getIQDiscoInfoHandler() {
        return (IQDiscoInfoHandler) modules.get(IQDiscoInfoHandler.class);
    }

    /**
     * Returns the IQDiscoItemsHandler registered with this server. The
     * IQDiscoItemsHandler was registered with the server as a module while starting up
     * the server.
     *
     * @return the IQDiscoItemsHandler registered with this server.
     */
    public IQDiscoItemsHandler getIQDiscoItemsHandler() {
        return (IQDiscoItemsHandler) modules.get(IQDiscoItemsHandler.class);
    }

    /**
     * Returns the PrivateStorage registered with this server. The
     * PrivateStorage was registered with the server as a module while starting up
     * the server.
     *
     * @return the PrivateStorage registered with this server.
     */
    public PrivateStorage getPrivateStorage() {
        return (PrivateStorage) modules.get(PrivateStorage.class);
    }

    /**
     * Returns the MultiUserChatManager registered with this server. The
     * MultiUserChatManager was registered with the server as a module while starting up
     * the server.
     *
     * @return the MultiUserChatManager registered with this server.
     */
    public MultiUserChatManager getMultiUserChatManager() {
        return (MultiUserChatManager) modules.get(MultiUserChatManager.class);
    }

    /**
     * Returns the AdHocCommandHandler registered with this server. The
     * AdHocCommandHandler was registered with the server as a module while starting up
     * the server.
     *
     * @return the AdHocCommandHandler registered with this server.
     */
    public AdHocCommandHandler getAdHocCommandHandler() {
        return (AdHocCommandHandler) modules.get(AdHocCommandHandler.class);
    }

    /**
     * Returns the FileTransferProxy registered with this server. The
     * FileTransferProxy was registered with the server as a module while starting up
     * the server.
     *
     * @return the FileTransferProxy registered with this server.
     */
    public FileTransferProxy getFileTransferProxy() {
        return (FileTransferProxy) modules.get(FileTransferProxy.class);
    }

    /**
     * Returns the FileTransferManager registered with this server. The
     * FileTransferManager was registered with the server as a module while starting up
     * the server.
     *
     * @return the FileTransferProxy registered with this server.
     */
    public FileTransferManager getFileTransferManager() {
        return (FileTransferManager) modules.get(DefaultFileTransferManager.class);
    }

    /**
     * Returns the MediaProxyService registered with this server. The
     * MediaProxyService was registered with the server as a module while starting up
     * the server.
     *
     * @return the MediaProxyService registered with this server.
     */
    public MediaProxyService getMediaProxyService() {
        return (MediaProxyService) modules.get(MediaProxyService.class);
    }

    /**
     * Returns the FlashCrossDomainHandler registered with this server. The
     * FlashCrossDomainHandler was registered with the server as a module while starting up
     * the server.
     *
     * @return the FlashCrossDomainHandler registered with this server.
     */
    public FlashCrossDomainHandler getFlashCrossDomainHandler() {
        return (FlashCrossDomainHandler) modules.get(FlashCrossDomainHandler.class);
    }

    /**
     * Returns the VCardManager registered with this server. The
     * VCardManager was registered with the server as a module while starting up
     * the server.
     * @return the VCardManager registered with this server.
     */
    public VCardManager getVCardManager() {
        return VCardManager.getInstance();
    }

    /**
     * Returns the InternalComponentManager registered with this server. The
     * InternalComponentManager was registered with the server as a module while starting up
     * the server.
     *
     * @return the InternalComponentManager registered with this server.
     */
    private InternalComponentManager getComponentManager() {
        return (InternalComponentManager) modules.get(InternalComponentManager.class);
    }

    /**
     * Returns the CertificateStoreManager registered with this server. The
     * CertificateStoreManager was registered with the server as a module while starting up
     * the server.
     *
     * @return the CertificateStoreManager registered with this server.
     */
    public CertificateStoreManager getCertificateStoreManager() {
        return (CertificateStoreManager) modules.get( CertificateStoreManager.class );
    }
    /**
     * Returns the locator to use to find sessions hosted in other cluster nodes. When not running
     * in a cluster a {@code null} value is returned.
     *
     * @return the locator to use to find sessions hosted in other cluster nodes.
     */
    public RemoteSessionLocator getRemoteSessionLocator() {
        return remoteSessionLocator;
    }

    /**
     * Sets the locator to use to find sessions hosted in other cluster nodes. When not running
     * in a cluster set a {@code null} value.
     *
     * @param remoteSessionLocator the locator to use to find sessions hosted in other cluster nodes.
     */
    public void setRemoteSessionLocator(RemoteSessionLocator remoteSessionLocator) {
        this.remoteSessionLocator = remoteSessionLocator;
    }

    /**
     * Returns whether or not the server has been started.
     *
     * @return whether or not the server has been started.
     */
    public boolean isStarted() {
        return started;
    }

    /**
     * Asynchronously send a message to every administrator on the system.
     *
     * @param message The message to send
     * @return the future result of sending the message.
     */
    public Future<?> sendMessageToAdmins(final String message) {
        return TaskEngine.getInstance().submit(() -> {
            final MessageRouter messageRouter = getMessageRouter();
            final Collection<JID> admins = XMPPServer.getInstance().getAdmins();
            final Message notification = new Message();
            notification.setFrom(getServerInfo().getXMPPDomain());
            notification.setBody(message);
            admins.forEach(jid -> {
                logger.debug("Sending message to admin [jid={}, message={}]", jid, message);
                notification.setTo(jid);
                messageRouter.route(notification);
            });
        });
    }
}

redpajama_set_name: RedPajamaGithub


text:
Windows Seat
Window Seat | Mrinal Chatterjee
By Odisha Diary bureau On Sep 25, 2018
News and Public Opinion
Does news has any impact? There have been several researches on this. By and large there is a general agreement that news can and do impact and influence people to form an opinion. It may help generate an opinion or may reinforce it, if it is already there. However, scholars have varied and different opinions about the quantum of impact, and reasons thereof. There have been several studies on why some news have impact and some do not. Also why some persons get influenced and some do not.
In his book Sociology of News (2011), media sociologist Michael Schudson focuses on the sociological aspects of news and attempts to find out how news is created based on various sociological aspects. He also focuses on and analyses different forces and factors like economic, technological, political, cultural, organizational, which are playing key and influencing roles in shaping the news media today.
Public Opinion can be defined as "the collective opinion of many people on some issue, problem, etc., especially as a guide to action, decision, or the like". Some scholars treat the 'collective opinion' as a synthesis of the views of all or a certain segment of society; others regard it as a collection of many differing or opposing views. One can thus derive some constructs of public opinion: a. majority opinion or belief, collectively formed b. some issues that concern the society, or at least a large section of society.
The concept of 'Public Opinion' has been there in the human civilisation since the concept of 'society' gained currency. It has always acted as a potent force in human society. However the quantum of potency depends on the concerned issue- how it has impacted people, nature of the concerned society, profile of its stake holders and the way it is governed.
The concept of public opinion as a political force was brought into the academic domain in 1922 by Walter Lippmans. Lippmans's book titled "Public Opinion" introduced the idea of public opinion from democratic society's point of view.
Social desirability is another key component to the formation of public opinion. Social desirability is the idea that people in general will form their opinions based on what they believe is the prevalent opinion of the social group they identify with. However, it could be reversed and a completely different public opinion could be formed if a. there is a strong opinion leader, b. there are strong and logical arguments; and c. it is backed by strong powers. In earlier times this 'strong power' used to be the State or powerful persons. For example in 19th century Sati Daha (widow burning) was the social custom. It was supported by the majority. However, Raja Rammohan Roy opposed it. He used Sambad Koumudi to propagate his views and rally public opinion. The opposing parties too used a newspaper: Samachar Chandrika to propagate their views. Rammohun Roy took the help of Governor General William Bentick, who eradicated the menace by outlawing the practice in 1829. Though Sambad Koumudi had to stop publication due to lack of patronage in October 1822, it was successful in creating an outrage against Sati Daha among the progressive and liberal Hindu. But there is no denying of the necessity of a 'strong power' to reverse the established public opinion. In present times, many feel that media can be that 'strong power' which can finally turn the tide.
Nearly all scholars of public opinion, regardless of the way they may define it, agree that, in order for a phenomenon to count as public opinion, at least four conditions must be satisfied: (1) there must be an issue, (2) there must be a significant number of individuals who express opinions on the issue, (3) there must be some kind of a consensus among at least some of these opinions, and (4) this consensus must directly or indirectly exert influence.
Media can play important role in all four. First, media can identify or pick an issue and position it as an important one. Consider Agenda Setting Theory discussed earlier. Second, media can instigate, trigger and continue deliberation and dialogue on a particular issue. It can keep an issue alive. By providing a wide platform it can broad base the deliberations. By putting in more information by way of additional reporting it can mainstream an issue. Third, it can help bring about a consensus by subtly suggesting, and fourth it can make the consensus exert influence.
Sports Climbing
Sport Climbing, a comparative new discipline has made its entry in the Jakarta Asian Games 2018 for the first time and will debut in Olympics 2020. A total of 121 athletes from 16 countries including India competed in this event. Indonesia bagged three gold medals. India had sent three athletes, who could win none.
Sports Climbing is not a well-known discipline in India. It involves the scaling of an artificial surface. It tests physical strength, agility and endurance of an athlete. What is unique about the sport is its ability to bring together in competition with true adventurers, which few sports are capable of doing.
This adventure sport started as a practice for Rock Climbing in the UK. Climbers wanted to train themselves to achieve tougher grades in climbing. In Europe, it was very difficult to practise for the whole year due to climatic conditions. Hence, climbers invented a way to practise at their homes by fixing pieces of woods and stones on the wall. This technique became common rapidly elsewhere in Europe. Slowly these structures were created by erecting walls exclusively for climbing and then the modern-day Climbing Walls evolved. In 1970's Climbing Walls picked up very fast in Europe and a trend of climbing gyms came in.
In 1984 the first ever World Championship was organised at a small town of Bardonesia, Italy. This competition was organised on natural rocks. There were protests against the competition as it disturbed the flora and fauna. Therefore, UIAA, the global apex body for mountaineering, decided that such climbing competitions would hereafter be limited only to artificially-built structures.
Sport Climbing started in India with the setting up of a climbing wall at Indian Mountaineering Foundation (IMF), Delhi with a grant from JRD Tata. Ever since, the sport has made steady progress with over 150 walls built across the country and the sport percolating to places across the country.
Gour Chandra Mahapatra
Gour Chandra Mahapatra (born: 19 June 1915) freedom fighter, social activist and teacher died on 11 September at Bhadrak Hospital at the age of 104. He was teaching in RCBL High School, Charampa where I was a student, a small town located near Bhadrak Railway Station. He used to teach us Odia Literature and at times History.
He was an unassuming man of short height probably 5 ft or 5 ft 1 inch. He used to wear khadi dhoti and kurta, mostly white or grey. His voice was feeble but he had a great sense of humour. He was public spirited and wanted to serve society in any which way. He used to ask us to clean our classrooms, which we did reluctantly. He formed a group of volunteers called Gopabandhu Seva Sangha to help regulating the crowd during the Kali Puja. For some reasons- probably because I used to read Desh, the famed Bengali literary magazine, he used to like me. He took me into this Sangha as a student volunteer. The job: ask people to go in a line, follow rules, etc. I was given a batch to wear. It gave me immense satisfaction to wear that and try to regulate the crowd.
When I got a first class in matriculation he blessed me and told, jasaswi hua aau e school ku bhuliba nahi. (Earn Fame, and don't forget your alma matter) He was very happy when I instituted an award at the school in the name of my grandmother. I don't remember when I met him last- probably a decade and half ago.
The news of his demise did not come as a shock (he was over 104) but it definitely saddened me. He was a good soul. A compassionate teacher. We'll miss him.
He wrote several books and poems. He was writing his autobiography Jetiki Mane Pade, (As far as I remember), which he could not finish.
Puja Season
In earlier times, puja season used to begin with the puja of Ganapati. It has been advanced, at least in Odisha. Puja season now begins with Janmastami and Khudurukuni (a local deity specially worshiped by the girls for the safety and wellbeing of brother) puja.
However as I write this column, Ganesh puja is just around the corner. Hundreds of idols of the deity are being sold. These idols- mostly made of plaster of Paris (PoP) are highly pollutant to the water bodies. If you absolutely have to buy an idol, please go for the clay ones, which will dissolve in the water without any causing any harm to the water body.
Tailpiece: The Clever One
A father told his three sons when he sent them to the university:
"I feel it's my duty to provide you with the best possible education, and you do not owe me anything for that. However, I want you to appreciate it. As a token, each of you put Rs.1,00,000 into my coffin when I die."
And so it happened. His sons became a doctor, a lawyer and a financial planner, each very successful and financially sound.
When their father's time came and they saw their father in the coffin, they remembered his wish.
First, it was the doctor who put 200 X Rs.500 notes on the chest of the deceased.
Then, came the financial planner, who also put 50 x Rs2,000 there.
Finally, it was the heartbroken lawyer's turn. He dipped into his pocket, took out his cheque book, wrote a cheque for Rs3,00,000, put it under his father's body, took the Rs.2,00,000 cash and closed the coffin's lid. Cash transaction is not good for the country, said the lawyer to his bewildered brothers.
He is presently serving as… well you know who this clever lawyer is.
In 1970 lyricist Niraj wrote a song, that Mukesh sang: Admi hun admi ko pyar karta hun
It took the Supreme Court 48 years to legalise it.
(Courtesy: Social Media)
The author is a journalist turned media academician. He lives in Central Odisha town Dhenkanal. He is presently editing a book on Gandhi as a Journalist and Editor along with Snehasis Sur. [email protected]
Odisha Diary bureau
Odisha Cabinet approved the Odisha Agriculture and Food Production Service
5 Of Family Killed in road accident near Puri, Odisha CM announces ex-gratia
CM Chouhan says that Madhya Pradesh is emerging as the economic center of India
New Madhya Pradesh Governor takes charge
COVID-19 And Its Impact On Women And Children
Mrinal Chatterjee's Anthology of Weekly Column 'Window Seat' Released online

redpajama_set_name: RedPajamaCommonCrawl


text:
Gilbert Castellanos, Founder and Artistic Director
Recognized as an American master by Down Beat magazine, Castellanos is also a strong advocate of promoting and educating various communities about jazz: "America's classical music," as he calls it. Castellanos takes pride in being a member of the internationally acclaimed Clayton-Hamilton Jazz Orchestra, and working with one of his mentors, the great bassist John Clayton. He has recorded and performed with a multitude of world-renowned musicians from Dizzy Gillespie to Michael Bublé to Oscar Hernandez to Diana Krall (to name a few), as well as a stint on American Idol in front of millions of viewers. In 2013, he was honored as San Diego Music Awards "Artist of the Year"; he has been named Best Jazz Artist six times, including in 2017.
Castellanos was recognized in 2016 by The San Diego Youth Symphony and Conservatory as one of the region's top music educators. In 2017, he received the "Jazz Hero" by the national Jazz Journalists Association.
Gilbert Castellanos is Artistic Curator for both of the San Diego Symphony's jazz series: Jazz @ The Jacobs (Jacobs Music Center) and Bayside Summer Nights/Thursday Night Jazz (Embarcadero Marina Park).
Rob Thorsen, Instructor
Rob Thorsen maintains a diverse and busy schedule in Southern California as a performer, educator, clinician, and composer. He has found his true voice in the upright bass and performs regularly in San Diego with artists including the Mike Wofford/Holly Hofmann Quartet, Charles McPherson, Steph Johnson, Gilbert Castellanos, Mundell Lowe, and a host of others. He has released six albums as a leader, the most recent "Solos and Duos – Bass is the Space" which features a host of talents including award-winning pianist Joshua White, Gilbert Castellanos, Steph Johnson, Marshall Hawkins and Fernando Gomez. In addition to performing with his own quartet, he is the founder of "Jazz an American Art Form" – a successful jazz education program that has been presented to over 8,000 students to date. He is a faculty member at the annual UCSD Jazz Camp, and teaches private lessons. For more information on Mr. Thorsen, please visit his website: http://www.robthorsen.com/
Ian Buss, Instructor
Currently based in San Diego, Ian Buss is a saxophonist, composer/arranger, and music educator. He has performed around the country as a leader and sideman and has served on the faculty of the Young Lions Jazz Conservatory, the Long Island Conservatory, and the UCSD Jazz Camp.
Ian's music is inspired by visual art, literature, and the human experience. Originally from San Diego, he lived in New York City for several years and has explored many different styles of music, including jazz, classical, afro-cuban, bossa nova, rock, and pop. A graduate of the New School for Jazz & Contemporary Music, Ian has performed at numerous venues in the New York City area, including the Brooklyn Academy of Music, Joe's Pub, and Brooklyn Bowl. He also performs at a variety of events, and has presented a concert at an international United Nations Conference.
Charlie Arbelaez, Instructor
Charlie Arbelaez moved to San Diego in 2011 as a Saxophonist for the United States Marine Corps. Charlie has successfully completed several hundreds of hours teaching clinics and masterclasses to young students all throughout the US. As a veteran, he holds a Bachelor's degree in Jazz Studies from SUNY Purchase and enjoys performing, writing, recording, and teaching music.


text:
I Campionati africani di atletica leggera 1982 sono stati la 2ª edizione dei Campionati africani di atletica leggera. La manifestazione si è svolta dal 25 al 28 agosto presso lo Stadio Internazionale del Cairo, in Egitto.

Medagliati

Uomini

Donne

Medagliere

Collegamenti esterni

Atletica leggera nel 1982
1982
Competizioni di atletica leggera in Egitto
Competizioni sportive al Cairo

redpajama_set_name: RedPajamaWikipedia


On January 20, the transfer of power in Washington, DC, officially begins with the traditional Inaugural Parade. Over 3,000 organizations applied to march in the parade, with only 40 being selected. Of those 40, nine of them are equine organizations.