text:
//
// ASCOM.UnityAstro.ASCOM.Winforms.TelescopeServer Local COM Server
//
// This is the core of a managed COM Local Server, capable of serving
// multiple instances of multiple interfaces, within a single
// executable. This implementes the equivalent functionality of VB6
// which has been extensively used in ASCOM for drivers that provide
// multiple interfaces to multiple clients (e.g. Meade Telescope
// and Focuser) as well as hubs (e.g., POTH).
//
// Written by: Robert B. Denny (Version 1.0.1, 29-May-2007)
// Modified by Chris Rowland and Peter Simpson to allow use with multiple devices of the same type March 2011
//
//
using System;
using System.IO;
using System.Windows;
using System.Collections;
using System.Runtime.InteropServices;
using System.Reflection;
using ASCOM.Utilities;
using Microsoft.Win32;
using System.Text;
using System.Threading;
using System.Security.Principal;
using System.Diagnostics;
using ASCOM;
using System.Windows.Threading;
using System.Diagnostics.CodeAnalysis;

namespace ASCOM.Lunatic
{
   public static class TelescopeServer
   {

      #region Access to kernel32.dll, user32.dll, and ole32.dll functions
      [Flags]
      enum CLSCTX : uint
      {
         CLSCTX_INPROC_SERVER = 0x1,
         CLSCTX_INPROC_HANDLER = 0x2,
         CLSCTX_LOCAL_SERVER = 0x4,
         CLSCTX_INPROC_SERVER16 = 0x8,
         CLSCTX_REMOTE_SERVER = 0x10,
         CLSCTX_INPROC_HANDLER16 = 0x20,
         CLSCTX_RESERVED1 = 0x40,
         CLSCTX_RESERVED2 = 0x80,
         CLSCTX_RESERVED3 = 0x100,
         CLSCTX_RESERVED4 = 0x200,
         CLSCTX_NO_CODE_DOWNLOAD = 0x400,
         CLSCTX_RESERVED5 = 0x800,
         CLSCTX_NO_CUSTOM_MARSHAL = 0x1000,
         CLSCTX_ENABLE_CODE_DOWNLOAD = 0x2000,
         CLSCTX_NO_FAILURE_LOG = 0x4000,
         CLSCTX_DISABLE_AAA = 0x8000,
         CLSCTX_ENABLE_AAA = 0x10000,
         CLSCTX_FROM_DEFAULT_CONTEXT = 0x20000,
         CLSCTX_INPROC = CLSCTX_INPROC_SERVER | CLSCTX_INPROC_HANDLER,
         CLSCTX_SERVER = CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER | CLSCTX_REMOTE_SERVER,
         CLSCTX_ALL = CLSCTX_SERVER | CLSCTX_INPROC_HANDLER
      }

      [Flags]
      enum COINIT : uint
      {
         /// Initializes the thread for multi-threaded object concurrency.
         COINIT_MULTITHREADED = 0x0,
         /// Initializes the thread for apartment-threaded object concurrency.
         COINIT_APARTMENTTHREADED = 0x2,
         /// Disables DDE for Ole1 support.
         COINIT_DISABLE_OLE1DDE = 0x4,
         /// Trades memory for speed.
         COINIT_SPEED_OVER_MEMORY = 0x8
      }

      [Flags]
      enum REGCLS : uint
      {
         REGCLS_SINGLEUSE = 0,
         REGCLS_MULTIPLEUSE = 1,
         REGCLS_MULTI_SEPARATE = 2,
         REGCLS_SUSPENDED = 4,
         REGCLS_SURROGATE = 8
      }

      // CoInitializeEx() can be used to set the apartment model
      // of individual threads.
      [SuppressMessage("Microsoft.Design", "CA1060: Move P / Invokes to NativeMethods class")]
      [DllImport("ole32.dll")]
      static extern int CoInitializeEx(IntPtr pvReserved, uint dwCoInit);

      // CoUninitialize() is used to uninitialize a COM thread.
      [SuppressMessage("Microsoft.Design", "CA1060: Move P / Invokes to NativeMethods class")]
      [DllImport("ole32.dll")]
      static extern void CoUninitialize();

      // PostThreadMessage() allows us to post a Windows Message to
      // a specific thread (identified by its thread id).
      // We will need this API to post a WM_QUIT message to the main
      // thread in order to terminate this application.
      [DllImport("user32.dll")]
      [SuppressMessage("Microsoft.Design", "CA1060: Move P / Invokes to NativeMethods class")]
      static extern bool PostThreadMessage(uint idThread, uint Msg, UIntPtr wParam,
         IntPtr lParam);

      // GetCurrentThreadId() allows us to obtain the thread id of the
      // calling thread. This allows us to post the WM_QUIT message to
      // the main thread.
      [DllImport("kernel32.dll")]
      [SuppressMessage("Microsoft.Design", "CA1060: Move P / Invokes to NativeMethods class")]
      static extern uint GetCurrentThreadId();
      #endregion

      #region Private Data
      private static int _ObjsInUse;                // Keeps a count on the total number of objects alive.
      private static int _ServerLocks;                 // Keeps a lock count on this application.
      private static TelescopeServerMainWindow _MainWindow = null;          // Reference to our main form
      private static ArrayList _ComObjectAssys;            // Dynamically loaded assemblies containing served COM objects
      private static ArrayList _ComObjectTypes;            // Served COM object types
      private static ArrayList _ClassFactories;            // Served COM object class factories
      private static string _AppId = "{09A57570-CF27-4026-B575-AF24FEC04858}";  // Our AppId
      private static readonly Object _lockObject = new object();
      #endregion

      // This property returns the main thread's id.
      public static uint MainThreadId { get; private set; } // Stores the main thread's thread id.

      // Used to tell if started by COM or manually
      public static bool StartedByCOM { get; private set; }   // True if server started by COM (-embedding)

      #region Server Lock, Object Counting, and AutoQuit on COM startup
      // Returns the total number of objects alive currently.
      public static int ObjectsCount
      {
         get
         {
            lock (_lockObject) {
               return _ObjsInUse;
            }
         }
      }

      // This method performs a thread-safe incrementation of the objects count.
      public static int CountObject()
      {
         // Increment the global count of objects.
         return Interlocked.Increment(ref _ObjsInUse);
      }

      // This method performs a thread-safe decrementation the objects count.
      public static int UncountObject()
      {
         // Decrement the global count of objects.
         return Interlocked.Decrement(ref _ObjsInUse);
      }

      // Returns the current server lock count.
      public static int ServerLockCount
      {
         get
         {
            lock (_lockObject) {
               return _ServerLocks;
            }
         }
      }

      // This method performs a thread-safe incrementation the
      // server lock count.
      public static int CountLock()
      {
         // Increment the global lock count of this server.
         return Interlocked.Increment(ref _ServerLocks);
      }

      // This method performs a thread-safe decrementation the
      // server lock count.
      public static int UncountLock()
      {
         // Decrement the global lock count of this server.
         return Interlocked.Decrement(ref _ServerLocks);
      }

      // AttemptToTerminateServer() will check to see if the objects count and the server
      // lock count have both dropped to zero.
      //
      // If so, and if we were started by COM, we post a WM_QUIT message to the main thread's
      // message loop. This will cause the message loop to exit and hence the termination
      // of this application. If hand-started, then just trace that it WOULD exit now.
      //
      public static void ExitIf()
      {
         System.Diagnostics.Trace.WriteLine(string.Format("ExitIf: Objects {0}, ServerLocks {1}", ObjectsCount, ServerLockCount));
         lock (_lockObject) {
            if ((ObjectsCount <= 0) && (ServerLockCount <= 0)) {
               if (StartedByCOM) {
                  UIntPtr wParam = new UIntPtr(0);
                  IntPtr lParam = new IntPtr(0);
                  PostThreadMessage(MainThreadId, 0x0012, wParam, lParam);
               }
            }
         }
      }

      #endregion

      // -----------------
      // PRIVATE FUNCTIONS
      // -----------------

      #region Dynamic Driver Assembly Loader
      //
      // Load the assemblies that contain the classes that we will serve
      // via COM. These will be located in the same folder as
      // our executable.
      //
      private static bool LoadComObjectAssemblies()
      {
         _ComObjectAssys = new ArrayList();
         _ComObjectTypes = new ArrayList();

         // put everything into one folder, the same as the server.
         string assyPath = Assembly.GetEntryAssembly().Location;
         assyPath = Path.GetDirectoryName(assyPath);

         DirectoryInfo d = new DirectoryInfo(assyPath);
         foreach (FileInfo fi in d.GetFiles("*.dll")) {
            string aPath = fi.FullName;
            //
            // First try to load the assembly and get the types for
            // the class and the class factory. If this doesn't work ????
            //
            try {
               Assembly so = Assembly.LoadFrom(aPath);
               //PWGS Get the types in the assembly
               Type[] types = so.GetTypes();
               foreach (Type type in types) {
                  // PWGS Now checks the type rather than the assembly
                  // Check to see if the type has the ServedClassName attribute, only use it if it does.
                  MemberInfo info = type;

                  object[] attrbutes = info.GetCustomAttributes(typeof(ServedClassNameAttribute), false);
                  if (attrbutes.Length > 0) {
                     //MessageBox.Show("Adding Type: " + type.Name + " " + type.FullName);
                     _ComObjectTypes.Add(type); //PWGS - much simpler
                     _ComObjectAssys.Add(so);
                  }
               }
            }
            catch (BadImageFormatException) {
               // Probably an attempt to load a Win32 DLL (i.e. not a .net assembly)
               // Just swallow the exception and continue to the next item.
               continue;
            }
            catch (Exception e) {
               MessageBox.Show("Failed to load served COM class assembly " + fi.Name + " - " + e.Message,
                  "ASCOM.Lunatic.TelescopeServer", MessageBoxButton.OK, MessageBoxImage.Stop);
               return false;
            }

         }
         return true;
      }
      #endregion

      #region COM Registration and Unregistration
      //
      // Test if running elevated
      //
      private static bool IsAdministrator
      {
         get
         {
            WindowsIdentity i = WindowsIdentity.GetCurrent();
            WindowsPrincipal p = new WindowsPrincipal(i);
            return p.IsInRole(WindowsBuiltInRole.Administrator);
         }
      }

      //
      // Elevate by re-running ourselves with elevation dialog
      //
      private static void ElevateSelf(string arg)
      {
         ProcessStartInfo si = new ProcessStartInfo();
         si.Arguments = arg;
         si.WorkingDirectory = Environment.CurrentDirectory;
         si.FileName = Assembly.GetExecutingAssembly().Location;
         si.Verb = "runas";
         try { Process.Start(si); }
         catch (System.ComponentModel.Win32Exception) {
            MessageBox.Show("The ASCOM.Lunatic.TelescopeServer was not " + (arg == "/register" ? "registered" : "unregistered") +
                " because you did not allow it.", "UnityAstro.ASCOM.Winforms.TelescopeServer", MessageBoxButton.OK, MessageBoxImage.Warning);
         }
         catch (Exception ex) {
            MessageBox.Show(ex.ToString(), "ASCOM.Lunatic.TelescopeServer", MessageBoxButton.OK, MessageBoxImage.Stop);
         }
         return;
      }

      //
      // Do everything to register this for COM. Never use REGASM on
      // this exe assembly! It would create InProcServer32 entries
      // which would prevent proper activation!
      //
      // Using the list of COM object types generated during dynamic
      // assembly loading, it registers each one for COM as served by our
      // exe/local server, as well as registering it for ASCOM. It also
      // adds DCOM info for the local server itself, so it can be activated
      // via an outboiud connection from TheSky.
      //
      private static void RegisterObjects()
      {
         if (!IsAdministrator) {
            ElevateSelf("/register");
            return;
         }
         //
         // If reached here, we're running elevated
         //

         Assembly assy = Assembly.GetExecutingAssembly();
         Attribute attr = Attribute.GetCustomAttribute(assy, typeof(AssemblyTitleAttribute));
         string assyTitle = ((AssemblyTitleAttribute)attr).Title;
         attr = Attribute.GetCustomAttribute(assy, typeof(AssemblyDescriptionAttribute));
         string assyDescription = ((AssemblyDescriptionAttribute)attr).Description;

         //
         // Local server's DCOM/AppID information
         //
         try {
            //
            // HKCR\APPID\appid
            //
            using (RegistryKey key = Registry.ClassesRoot.CreateSubKey("APPID\\" + _AppId)) {
               key.SetValue(null, assyDescription);
               key.SetValue("AppID", _AppId);
               key.SetValue("AuthenticationLevel", 1, RegistryValueKind.DWord);
            }
            //
            // HKCR\APPID\exename.ext
            //
            using (RegistryKey key = Registry.ClassesRoot.CreateSubKey(string.Format("APPID\\{0}",
                        Path.GetDirectoryName(assy.Location)))) {
               key.SetValue("AppID", _AppId);
            }
         }
         catch (Exception ex) {
            MessageBox.Show("Error while registering the server:\n" + ex.ToString(),
                  "ASCOM.Lunatic.TelescopeServer", MessageBoxButton.OK, MessageBoxImage.Stop);
            return;
         }
         finally {
         }

         //
         // For each of the driver assemblies
         //
         foreach (Type type in _ComObjectTypes) {
            bool bFail = false;
            try {
               //
               // HKCR\CLSID\clsid
               //
               string clsid = Marshal.GenerateGuidForType(type).ToString("B");
               string progid = Marshal.GenerateProgIdForType(type);
               //PWGS Generate device type from the Class name
               string deviceType = type.Name;

               using (RegistryKey key = Registry.ClassesRoot.CreateSubKey(string.Format("CLSID\\{0}", clsid))) {
                  key.SetValue(null, progid);                  // Could be assyTitle/Desc??, but .NET components show ProgId here
                  key.SetValue("AppId", _AppId);
                  using (RegistryKey key2 = key.CreateSubKey("Implemented Categories")) {
                     key2.CreateSubKey("{62C8FE65-4EBB-45e7-B440-6E39B2CDBF29}");
                  }
                  using (RegistryKey key2 = key.CreateSubKey("ProgId")) {
                     key2.SetValue(null, progid);
                  }
                  key.CreateSubKey("Programmable");
                  using (RegistryKey key2 = key.CreateSubKey("LocalServer32")) {
                     key2.SetValue(null, assy.Location);
                  }
               }
               //
               // HKCR\CLSID\progid
               //
               using (RegistryKey key = Registry.ClassesRoot.CreateSubKey(progid)) {
                  key.SetValue(null, assyTitle);
                  using (RegistryKey key2 = key.CreateSubKey("CLSID")) {
                     key2.SetValue(null, clsid);
                  }
               }
               //
               // ASCOM
               //
               assy = type.Assembly;

               // Pull the display name from the ServedClassName attribute.
               attr = Attribute.GetCustomAttribute(type, typeof(ServedClassNameAttribute)); //PWGS Changed to search type for attribute rather than assembly
               string chooserName = ((ServedClassNameAttribute)attr).DisplayName ?? "MultiServer";
               using (var P = new ASCOM.Utilities.Profile()) {
                  P.DeviceType = deviceType;
                  P.Register(progid, chooserName);
               }
            }
            catch (Exception ex) {
               MessageBox.Show("Error while registering the server:\n" + ex.ToString(),
                     "ASCOM.Lunatic.TelescopeServer", MessageBoxButton.OK, MessageBoxImage.Stop);
               bFail = true;
            }
            finally {
            }
            if (bFail) break;
         }
      }

      //
      // Remove all traces of this from the registry.
      //
      // **TODO** If the above does AppID/DCOM stuff, this would have
      // to remove that stuff too.
      //
      private static void UnregisterObjects()
      {
         if (!IsAdministrator) {
            ElevateSelf("/unregister");
            return;
         }

         //
         // Local server's DCOM/AppID information
         //
         Registry.ClassesRoot.DeleteSubKey(string.Format("APPID\\{0}", _AppId), false);
         Registry.ClassesRoot.DeleteSubKey(string.Format("APPID\\{0}",
               Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)), false);

         //
         // For each of the driver assemblies
         //
         foreach (Type type in _ComObjectTypes) {
            string clsid = Marshal.GenerateGuidForType(type).ToString("B");
            string progid = Marshal.GenerateProgIdForType(type);
            string deviceType = type.Name;
            //
            // Best efforts
            //
            //
            // HKCR\progid
            //
            Registry.ClassesRoot.DeleteSubKey(String.Format("{0}\\CLSID", progid), false);
            Registry.ClassesRoot.DeleteSubKey(progid, false);
            //
            // HKCR\CLSID\clsid
            //
            Registry.ClassesRoot.DeleteSubKey(String.Format("CLSID\\{0}\\Implemented Categories\\{{62C8FE65-4EBB-45e7-B440-6E39B2CDBF29}}", clsid), false);
            Registry.ClassesRoot.DeleteSubKey(String.Format("CLSID\\{0}\\Implemented Categories", clsid), false);
            Registry.ClassesRoot.DeleteSubKey(String.Format("CLSID\\{0}\\ProgId", clsid), false);
            Registry.ClassesRoot.DeleteSubKey(String.Format("CLSID\\{0}\\LocalServer32", clsid), false);
            Registry.ClassesRoot.DeleteSubKey(String.Format("CLSID\\{0}\\Programmable", clsid), false);
            Registry.ClassesRoot.DeleteSubKey(String.Format("CLSID\\{0}", clsid), false);
            try {
               //
               // ASCOM
               //
               using (var P = new ASCOM.Utilities.Profile()) {
                  P.DeviceType = deviceType;
                  P.Unregister(progid);
               }
            }
            catch (Exception) { }
         }
      }
      #endregion

      #region Class Factory Support
      //
      // On startup, we register the class factories of the COM objects
      // that we serve. This requires the class facgtory name to be
      // equal to the served class name + "ClassFactory".
      //
      private static bool RegisterClassFactories()
      {
         _ClassFactories = new ArrayList();
         foreach (Type type in _ComObjectTypes) {
            ClassFactory factory = new ClassFactory(type);              // Use default context & flags
            _ClassFactories.Add(factory);
            if (!factory.RegisterClassObject()) {
               MessageBox.Show("Failed to register class factory for " + type.Name,
                  "ASCOM.Lunatic.TelescopeServer", MessageBoxButton.OK, MessageBoxImage.Stop);
               return false;
            }
         }
         ClassFactory.ResumeClassObjects();                          // Served objects now go live
         return true;
      }

      private static void RevokeClassFactories()
      {
         ClassFactory.SuspendClassObjects();                         // Prevent race conditions
         foreach (ClassFactory factory in _ClassFactories)
            factory.RevokeClassObject();
      }
      #endregion

      #region Command Line Arguments
      //
      // ProcessArguments() will process the command-line arguments
      // If the return value is true, we carry on and start this application.
      // If the return value is false, we terminate this application immediately.
      //
      private static bool ProcessArguments(string[] args)
      {
         bool bRet = true;

         //
         //**TODO** -Embedding is "ActiveX start". Prohibit non_AX starting?
         //
         if (args.Length > 0) {

            switch (args[0].ToLower()) {
               case "-embedding":
                  StartedByCOM = true;                            // Indicate COM started us
                  break;

               case "-register":
               case @"/register":
               case "-regserver":                                 // Emulate VB6
               case @"/regserver":
                  RegisterObjects();                              // Register each served object
                  bRet = false;
                  break;

               case "-unregister":
               case @"/unregister":
               case "-unregserver":                            // Emulate VB6
               case @"/unregserver":
                  UnregisterObjects();                         //Unregister each served object
                  bRet = false;
                  break;

               default:
                  MessageBox.Show("Unknown argument: " + args[0] + "\nValid are : -register, -unregister and -embedding",
                     "ASCOM.Lunatic.TelescopeServer", MessageBoxButton.OK, MessageBoxImage.Exclamation);
                  break;
            }
         }
         else
            StartedByCOM = false;

         return bRet;
      }
      #endregion

      #region SERVER ENTRY POINT (main)
      //
      // ==================
      // SERVER ENTRY POINT
      // ==================
      //
      //[STAThread]
      /// <summary>
      /// Application Entry Point.
      /// </summary>
      [System.STAThreadAttribute()]
      [System.Diagnostics.DebuggerNonUserCodeAttribute()]
      [System.CodeDom.Compiler.GeneratedCodeAttribute("PresentationBuildTasks", "4.0.0.0")]
      static void Main(string[] args)
      {
         if (!LoadComObjectAssemblies()) return;                  // Load served COM class assemblies, get types

         if (!ProcessArguments(args)) return;                  // Register/Unregister
                                                               //#if DEBUG
                                                               //         RegisterObjects();
                                                               //#endif
         MessageBox.Show("Starting Telescope Server");

         // Initialize critical member variables.
         _ObjsInUse = 0;
         _ServerLocks = 0;
         MainThreadId = GetCurrentThreadId();
         Thread.CurrentThread.Name = "Main Thread";

         _MainWindow = new TelescopeServerMainWindow();
         //if (StartedByCOM) {
         //   _MainWindow.WindowState = WindowState.Minimized;
         //}

         ASCOM.Lunatic.TelescopeServerApp app = new ASCOM.Lunatic.TelescopeServerApp();
         app.MainWindow = _MainWindow;

         // Register the class factories of the served objects
         RegisterClassFactories();

         // Start up the garbage collection thread.
         GarbageCollection GarbageCollector = new GarbageCollection(1000);
         Thread GCThread = new Thread(new ThreadStart(GarbageCollector.GCWatch));
         GCThread.Name = "Garbage Collection Thread";
         GCThread.Start();

         //
         // Start the message loop. This serializes incoming calls to our
         // served COM objects, making this act like the VB6 equivalent!
         //
         try {
            if (StartedByCOM) {
               _MainWindow.WindowState = WindowState.Minimized;
            }
            app.Run();
         }
         finally {
            // Revoke the class factories immediately.
            // Don't wait until the thread has stopped before
            // we perform revocation!!!
            RevokeClassFactories();
            //#if DEBUG
            //            UnregisterObjects();
            //#endif
            // Now stop the Garbage Collector thread.
            GarbageCollector.StopThread();
            GarbageCollector.WaitForThreadToStop();
            GarbageCollector.Dispose();
         }
      }

      private static void TestExitIf(object state, EventArgs e)
      {
         System.Diagnostics.Trace.WriteLine(string.Format("ExitIf: Objects {0}, ServerLocks {1}", ObjectsCount, ServerLockCount));

      }
      #endregion
   }
}


text:
Libertas convoy (Croatian: Konvoj Libertas) was a partly grassroots humanitarian action aimed at breaking through Yugoslav People's Army's naval blockade of the Croatian city of Dubrovnik during the Croatian War of Independence and the siege of Dubrovnik in 1991. The purpose of the convoy was to bring supplies to Dubrovnik's inhabitants who, in connection with the siege, were living without electricity and access to fresh drinking water, food and medicine. The convoy's name 'Libertas' alludes to the Latin word for freedom which is the historical motto of Dubrovnik.

Background

On October 1, 1991, Yugoslav People's Army (JNA), then made up of Serbian and Montenegrin units, attacked Dubrovnik from land, sea and air, and by late October had captured virtually all of the land between the Pelješac and Prevlaka peninsulas on the coast of the Adriatic Sea, with the exception of Dubrovnik itself. The siege was accompanied by a Yugoslav Navy (JRM) blockade. The JNA's bombardment of Dubrovnik culminated on 6 December 1991 which provoked international condemnation. As a result of the blockade, approximately 50,000 citizens in Dubrovnik lived without electricity and access to enough fresh drinking water, food and medicine.

The beginning
In October 1991 in Zagreb, the Dubrovnik Salvation Fund Sveti Vlaho, the Croatian Writers' Association and Matica hrvatska launched an initiative to break through the naval blockade and deliver the necessary humanitarian assistance to the people of Dubrovnik. The idea behind the action was to bring together as many vessels as possible, break through the blockade and sail into the port of Gruž. Rijeka become an organizational and logistical center for collecting assistance.

The action

On October 28, 1991, the convoy sailed from Rijeka and made several port calls, growing to 29 civilian vessels (tourist boats, sailboats, tugboats, etc.), the largest being Jadrolinija's ferry Slavija, as it approached Dubrovnik. The convoy carried European Community Monitor Mission observers, protesters, and a number of politicians, journalists, cultural figures including Veljko Bulajic and politicians, including the President of the Presidency of Yugoslavia Stjepan Mesić and the Prime Minister of Croatia Franjo Gregurić. On October 30, at around one o'clock in the morning, the convoy reached Korčula. A day earlier, Dubrovnik amateur radio operators intercepted JRM's messages in which the 9th VPS Boka Command requested for a convoy to be stopped and searched. The convoy's journey towards Dubrovnik proceeded unimpeded up until it reached the Elaphiti Islands where it was stopped by the Yugoslav frigate JRM Split between the islands of Brač and Šolta. JRM representatives demanded all vessels to return and Slavia to dock in the Montenegrin port of Zelenika, After lengthy negotiations and the thorough search of the vessels, the convoy was allowed to continue its journey towards Dubrovnik.

In the early morning hours of October 31, 1991, speedboats of the Armed Boats Squadron Dubrovnik sailed from the port of Gruž to meet the Convoy and escorted all 29 vessels into the harbor where about 1,000 Dubrovnik residents welcomed them. During his speech, president Stjepan Mesić stated that the people of Dubrovnik have not been forgotten. After a long 30 days, the much-awaited assistance arrived in the city. On its return, the 700-capacity Slavija evacuated 2,000 refugees from Dubrovnik, although she had to sail to the Bay of Kotor first for inspection by the Yugoslav Navy.

The Libertas convoy was primarily a humanitarian campaign but it also sent an important political message. Journalists who documented the humanitarian disaster that arose in Dubrovnik in connection with the city's siege caused a public relations disaster for Serbia and Montenegro, contributing to their further diplomatic and economic isolation, as well as the international recognition of Croatia's independence. In Croatia, it conveyed a picture of solidarity and consensus among the Croatian citizens.

References

1991 in Croatia
1991 in Yugoslavia
History of Dubrovnik
Maritime incidents in 1991
1991 crimes in Croatia
Croatian War of Independence

redpajama_set_name: RedPajamaWikipedia


text:
Warhammer Online: Age of Reckoning (WAR)
BioWare Mythic
MMORPG | Setting:Fantasy | Status:Cancelled (est.rel 09/18/08) | Pub:Electronic Arts
PVP:Yes | Distribution:Download,Retail | Retail Price:$39.99 | Pay Type:Subscription
System Req: | ESRB:T| Out of date info? Let us know!
GDC: Games Workshop Interview
By on March 15, 2007 | Interviews | Comments
At GDC this week MMORPG.com was able to spend some time talking with Erik Mogensen and Jon Gillard from Games Workshop. For those who do not know, Games Workshop has been around since the early 1980s. They have developed both RPG and table-top war games over the last twenty five years and remain one of the top companies in gaming. Both Warhammer and Warhammer 40,000 (40k) have become very popular games on the table top platform and continue to make their way into the video game market. EA Mythic is currently working on the Warhammer Fantasy MMORPG and just last week, THQ had extended their contract with Games Workshop to include a Warhammer 40K MMO as well. With both of these licenses coming to the MMO market, Erik and Jon definitely have a busy schedule ahead of them. As Jon and Erik have pointed out, Games Workshop certainly has the fan expectations in mind as these games are developed.
When talking about the Warhammer 40K MMO that is being developed. Erik said the first thing that GW wants for players is "a really good MMO at the end of the day." THQ has had success with its Warhammer 40K: Dawn of War series and seem to be working very well with the IP. Vigil Games is the development studio with the task of building the game itself. GW plans to work closely with Vigil to oversee all aspects of the game. In the end GW will have full approval rights over Warhammer 40K. Erik said they do have a veto power, but he never looks at it that way. When working on a game he said that it usually never gets to that point. The developers work closely with GW throughout the process to present the Warhammer worlds in the best way for both teams. Erik mentioned that the development process is almost always a very positive atmosphere.
GW and Vigil hope to make sure every element of the Warhammer 40,000 universe is somehow represented in the game. As many know, this is not an easy task. Obviously some tough choices have to be made in regards to playable races, game interface, setting, and format (first person shooter, or third person RPG style). Both companies seem to have their sights in the right place as far as delivering the best MMO possible. On a side note, THQ also added the rights to Necromunda and Gorka Morka as part of the contract. For those who do not know, they are side games in the Warhammer 40,000 universe. Check out the Games Workshop site for details.
Erik and Jon also spoke about the Warhammer Fantasy MMO being developed by EA Mythic. W.A.R. is much further along in their development lifecycle than the 40K version. We have already seen the Greenskins, Dwarves, Chaos, and Empire armies being showcased. So we wanted to ask about the High Elf and Dark Elf races that we have yet to see. Erik said that the work on the Elves continues along but expects it will be a little while before we see a lot from that race. He expects more Empire and Chaos features to be shown first. One of the things that he was looking forward to is the landscape in which the High and Dark Elves inhabit and how that will be presented on screen.
We did speak about possible tie-ins from the MMOs to the table top games and if there would be any? Erik said that any of the miniatures that were made from different game formats happened very "organically." Nothing was ever done out of necessity, it simply became part of the life cycle. GW seems to try and keep their products on separate platforms so as to not interfere with the different styles of game play. Still who knows what we will see in the future.
Games Workshop has really made the leap into the video game platform and continues to drive the content of their Warhammer IP. With Warhammer: Age of Reckoning set to release sometime next winter and the Warhammer 40K MMO now beginning its development cycle, these guys have a lot of work ahead of them. Still with twenty five years in gaming, I think the fans will have a lot to look forward too. I want to thank Erik and Jon for taking time out of their busy schedule at GDC. MMORPG.com will certainly continue our coverage on both Games Workshop titles as they continue development.
Article By:
Created On: March 15, 2007
MMORPG.com » Games » Warhammer Online: Age of Reckoning » Interviews » GDC: Games Workshop Interview

redpajama_set_name: RedPajamaCommonCrawl


The Empowered Voices choir will also be continuing. This choir is more informal and perfect for beginning choral singers. This choir will meet Thursday evenings starting October 4th, from 7:30 to 9pm at he Community Church for Joy, 8051 SE 16th Ave, Portland,OR 97202 - come experience the joy of singing with others in community!
Upon submitting this form, the "person paying the student's tuition" (noted above) becomes responsible for the total cost of the classes selected. The total amount due is indicated at the bottom of this form.
I will make a check payment prior to or when I arrive to my first class. I will make a PayPal payment upon submission of this form.
Would you like us to sign you up for our periodic email newsletter on upcoming classes, workshops, or other events?
Would you like to volunteer your time and talents at Vox Academy?
TERMS AND CONDITIONS: All classes are to be paid in full on or before the first day of class.
REFUND POLICY: If a student wishes to withdraw from a class, we require written or email notice to the office (voice@voxacademy.org). Students who submit notice of withdrawal up to one week before the class begins will receive a 100% refund. Students who submit notice of withdrawal up to 24 hours after the first class session will receive an 80% refund. If a student does not provide written notification of the intent to drop a class during this required period, the student forfeits the opportunity to receive a tuition refund. There is no refund or make up for class sessions that the student misses. If you need to miss a class session, we invite you to consider registering for a single Private Lesson with your teacher for an additional fee to make up the class material. We reserve the right to charge monthly late fees of $25 when accounts are overdue, and to deny services until your account balance is paid in full.
If you are paying by check, please make your check payable to Vox Academy and put it in the mail or bring it to the office at: Vox Academy at Waverly UCC 3300 SE Woodward St. Portland, OR 97202.
Thank you! You have registered for Empowering Women's Voices! Please use the PayPal button below to make a payment for this registration!


Dozens of brave souls will rappel down 17 stories of the RBC Building in downtown Winnipeg on Thursday, all in the name of charity.
The annual Drop Zone event in support of SMD Foundation/Easter Seals Manitoba raised over $107,500 last year for children, youth and adults with disabilities in Manitoba.
Over 100 participants are signed up to take the plunge at the corner of Portage Avenue and Fort Street beginning at 8 a.m.
All rappellers must generate a minimum of $1,500 in pledges to participate in the adventure, which will see them drop 200 feet down to the earth below — safely, of course.
This year a bride and groom — Miranda Dorno and Claude Labossiere — will rappel down together at 12:40 p.m. The couple will recite their vows at the top of the building at 11:25 a.m.
Alex Freedman (CBC) at 11 a.m.
Kim Babij (Shaw TV) at 11:10 a.m.
Evan Campbell (Citytv) at 11:20 a.m.
Beau (99.9 BOB FM) at 11:30 a.m.
Nicole Dubé (Global TV) at 12 p.m.
Gord Leclerc (CTV Winnipeg) at 12:20 p.m.
Jay Richardson (CURVE 94.3) at 12:30 p.m.
Brodie Milne (Winnipeg Free Press) at 1 p.m.
Rena Jae (Power 97) at 1:10 p.m.
Clay Young (CJOB) at 1:20 p.m.
CURVE 94'3 Jay Richardson will be wearing a POV camera and wireless mic for ChrisD.ca as he ventures down the side of the RBC Building to the ground below.
The Drop Zone goes until 4:30 p.m. The public can get a great view of the action from the Canwest Place Courtyard at 221 Portage Avenue.
Watch video of last year's drop.


Three cheers for your third point. Further, if you have sufficiently large numbers of Rasch-calibrated items in your bank (e.g. multiples within a few tenths of logits of each other along the full range), you'll have even less trouble with item exposure control.
I'm just now getting into the area of item exposure control. I think it is a great area of research, especially considering issues of item security within testing companies and organizations hiring employees in emerging markets. As an industrial and organizational psychologist, I helped IBM solve some test security concerns a few years back using artificial intelligence to generate parallel tests for paper and pencil administrations in Asia-Pacific. Now most of my work is focused on the computer adaptive methods.
On Point 3, I concur to a certain degree about the items calibrated according to the Rasch model. However, the Rasch model does not fit most data, even though the model has some very desirable characteristics in terms of (1) utilization rate of the item pool, (2) balanced item exposure rates across items, and (3) accuracy in estimating theta. The desirable characteristics deteriorate fast once you move away from the Rasch model and when you begin to apply Sympson-Hatter or even the Progressive Method, i.e., you lose accuracy in estimating theta given the same amount of items administered. Is that efficient? Probably not!
On Point 2, you are right on with 51 items being used in a pool of 176. A utilization rate of 29% [(51/171)*100] is inefficiency at its finest. Just imagine if a psychometrician is hired at $100 per operational item (a very conservative estimate), that's $12,500 down the drain on items that won't even see the operational exposure light of day using their algorithm. That is not to mention the time writing the items and preparing them for operation; that's too much waste.
I've been doing a few simulation in my company with a few item exposure control methods and reasoned that all of the aforementioned methods and fixes (simple and complex) are inefficient based upon one criteria or the next (e.g., item pool utilization rate, maximum item exposure rates, or accuracy in estimating theta with the 2-PL, 3-PL or even the multidimensional extensions of the 2-PL and 3-PL models). I've reasoned that as long as you are using maximum information as a criterion, putting a bandage on the algorithm will not ultimately solve the problem. In one way or another, you will sacrifice accuracy in measurement for balanced item exposure and high item pool utilization rates.
I've derived a game changer and would be willing to discuss them if you are interested.
I've enjoyed your post. It was refreshing even though it is about a year old, lol!


text:
MBF accuses North of plot to retain presidency, truncate power shift to the south
The Middle Belt Forum (MBF) has accused the North of plotting to retain power at all cost against the power rotation formula that has been in place since 1999.
In a statement by its National President Dr. Bitrus Pogu, he said it is evidently clear that there is a grand ploy to truncate power shift to the South by 2023.
"The attention of the Middle Belt Forum (MBF) has been drawn to the communique issued at the end of a meeting convened by the Northern Elders' Forum under the auspices of Northern Leaders of Thought (NLT) over opposition to power rotation to the South in 2023.
"Considering the circumstances under which the group met and membership of those who attended the meeting on January 15, 2022 at the Arewa House in Kaduna, it is clear that there are subterranean forces aimed at frustrating the power shift arrangement to the South in 2023.'
He said, by May 2023, President Muhammadu Buhari, a Northerner, should have completed two tenures of four years each as provided for in the Nigerian Constitution.
"To insist that another Northerner should continue in power beyond May 2023 amounts to violating the arrangement on power shift that has become the norm since the return of democracy in May 1999."
"As the umbrella organisation for all ethnic nationalities in the Middle Belt, the MBF is confident that Nigeria is blessed with competent and qualified persons from all sections of the country who can offer altruistic leadership in advancing national development. According to him, Since 1999, power shift has not only ensured equity in power-sharing procedure between the North and South.
He added that it has also reduced tension amongst Nigeria's diverse ethnic groups in the struggle for power.
"After a careful perusal of the communique issued at the end of a hurriedly packaged meeting by the NLT, it is evidently clear that there is a grand ploy to truncate power shift to the South by 2023."/
He said after their consultative meeting that took place in September 2021 in Akwanga, Nasarawa State, the Forum did not only express its resounding support for power rotation to the South, the MBF also noted that for fairness to hold sway, it was irretrievably necessary for power to return to the South in 2023.
"Our position was hinged on the fact that the power rotation has tremendously assisted in mitigating political tension by creating a platform for power-sharing in the country.
"As we have always declared in the past, the MBF wishes to restate once again that any threat against power shift to the South in 2023 is akin to courting frightening dangers to the unity and progress of Nigeria.
"We stand for justice and freedom for all. The MBF is completely against the NLT's opposition to power shift in 2023. Those who met in Kaduna at the weekend must halt further attempts to create political turmoil for our nation.
"Members of the NLT are not political leaders; they are forerunners of some nebulous political forces determined to foist fiery dark clouds over our country's political skies. To insist that the power-sharing arrangement should be jettisoned now is an open invitation to anarchy that may ultimately lead to the breakup of the country.
"We need to remind Nigerians that the Middle Belt has always insisted that power must shift to the South in 2023. In the event that the South is unable to present a presidential candidate, we have confirmed our readiness to support the emergence of a presidential candidate of the Middle Belt extraction for the 2023 polls.
"We are in agreement with the Southern socio-cultural groups in the struggle for power shift to the South in 2023.
He said under the President Buhari-led administration, Nigerians are witnessing one of their worst moments.
"With insecurity ravaging many parts of Nigeria, poor economic policies by the current administration have reduced our nation into the global headquarters of poverty.
"Not only have hundreds of communities in the Middle Belt Region been destroyed and completely taken over by foreign invaders, thousands of our people have been massacred in cold blood as deadly herdsmen and other criminals continue to unleash their dreadful reign of terror on defenseless Nigerians.
"The Middle Belt Region is convinced that President Buhari has not demonstrated enough courage and political will to confront these monsters of insecurity. "Thus, it is clear that only power shift offers an opportunity to deal with these terror gangs that are alleged to enjoy the support of some rogue Northern politicians yet to be exposed by the government.
"Once again, we call on political parties to disregard the chicanery of these leaders of the so-called North and their opposition to zoning in 2023.
"Those who gathered in Kaduna last weekend were political jobbers engaged in carrying the commands of their masters that are lurking in the shadows. "Therefore, the communique of that meeting should be contemptuously ignored."
Shun hate speech, campaign of calumny, Nabena charges supporters of APC presidential aspirants
Kalu says presidential aspirants running to Buhari are unserious


Blog — Smith & May Inc.
We have been voted Best of the Best Stove & Fireplace Store 2018!
The Large Hampton Gas Stove features the most realistic gas fire available. Complement the classic style with a decorative glass grille to get the look of a real wood fire. Direct vent technology allows you to put your Hampton Gas Stove exactly where you want it without needing a chimney.
As the industry's first and only see-through wood burning stove, the Vision is a masterpiece of engineering foresight.
With glass panels on two sides displaying a view of the flames, the Vision offers double the pleasure and comfort of a traditional stove. Vision is capable of effortlessly warming areas of 2,000 square feet within minutes.
While the generous firebox can accommodate logs of up to 24 inches, its compact depth doesn't overwhelm when installed in the centre of a room. The stove also features Supreme's signature built-in grill that allows delicious barbecued meals to be prepared over charcoal.
The Vision is the perfect choice for consumers who wish to introduce contemporary heating design to their home.
Enjoy the combined power of radiant and convective heat with maximum viewing area. Extend the fireplace season from Fall to Spring with the low turn down capability. This gas insert includes electronic ignition and a variable speed blower. Designer options provide you with a customizable look.
Inside and out, the Mirage 18 is engineered to provide powerful, efficient heat for your home. Large aluminum-finned heat exchangers result in high performance heating efficiency while highly reflective titanium porcelain baffles and insulated interior firebox panels maximize temperature convection. Standard features include one-touch programmable remote controls to simplify operation; heat output and flame height is variable, allowing complete control over heating, comfort, and appearance.
Want to know more? Contact us here, or visit our Products page to see a partial listing of our vast selection of Gas Stoves.
From January 6th - February 20th 2017 - Save up to $640!


text:
The Great American Jewclipse
As visitors flock to the path of totality, Chabad is there to assist them
Rabbi Marrus of Columbia, SC designed and ordered eclipse glasses for Chabad visitors
by Mushkie Engel - Brooklyn, New York
Hotels near Madras, Oregon have been booked out for three years. Columbia, South Carolina is welcoming over one million visitors to a town of 800,000. Up to 7.4 million people will be travelling to a 70-mile wide swath of land that stretches across 14 states.
It's the Great American Eclipse, the first solar eclipse to sweep the country from coast to coast in 99 years, and as the Columbia Total Eclipse website puts it, "this is a big deal." Chabad is there in the path of totality to serve their communities (an estimated 12 million Americans live in the areas where a total eclipse will occur) as well as the millions of visitors that will converge on their cities as the eclipse approaches.
Meet Randy Kersh
Chabad Unveils New Tech Innovation Lab on Campus
Coast-To-Coast, Chabad Centers In Shape For Summer Season
Carbondale, Illinois will be a central point for those visitors, as the city will be experiencing the longest eclipse duration at 2 minutes 40 seconds. An expected 60,000 visitors will be taking advantage of this opportunity.
Chabad's Rabbi Mendel and Yochi Scheiman are planning a weekend's worth of events around the natural phenomenon. In addition to "Solar Eclipse Shabbat" services and meals, they are hosting a viewing event on Monday, and will lead a class on the Jewish perspective on eclipses. They will also provide visitors and community with kosher food and prayer services.
Eclipse-chasers on the East Coast will find the longest eclipse on the eastern seaboard in Columbia, South Carolina. Chabad of Columbia is ready for them, with eclipse programming beginning Thursday night at Columbia's first kosher steakhouse, culminating in a grand "Jewclipse" barbeque luncheon on Monday afternoon. "This is going to be the biggest event Columbia has ever seen," says Rabbi Levi Marrus, "and we're capitalizing on that to provide a Jewish twist on this incredible natural phenomenon."
As in most eclipse cities, accommodation in Salem, Oregon has been sold out well in advance of the event. So Rabbi Avraham Perlstein is offering another solution to Jewish visitors: a kosher eclipse camping experience. "About 40 people will be camping on our property, and we'll be providing kosher meals Sunday and Monday," he explains. He will also lead a class on the Kabbalah behind eclipses Sunday night.
The biggest city in the path of the total eclipse is also ready for their guests. "Because the eclipse is on Monday, people are expecting to stay all weekend, and we're gearing up to serve Jewish visitors," says Rabbi Yitzchok Tiechtel of Nashville, Tennessee. Chabad of Nashville will be holding Eclipse Shabbat services with meals, delivering Shabbat meals to local hotels, and are holding a Sunday morning BLT Eclipse program.
Rabbi Scheiman of Carbondale reflects on the eclipse. "The more we study this, we realize there's an intelligent design, and a purpose to every detail," he explains. "Everything in creation is in exact alignment—the sun, the moon and the earth are the precise distances from each other to enable the eclipse to occur. Are we in alignment? What's our purpose in creation?"
"The world will be getting dark for two minutes. It's a great opportunity for us mortals to add light to this universe."
Find a Chabad house near you by visiting the "centers" page on our website.
The Great American Jewclipse - The Scheiman kids try out specialized solar eclipse glasses


text:
Bandai Namco not against new remasters of the Tales of series
The upcoming remaster of Tales of Symphonia has made everyone think of the Tales of series again. The JRPG series has been around for over two decades and is still loved by many. However, given the age of the series and a game landscape that often leans towards new ideas rather than nostalgia, how long does Bandai Namco plan to keep Tales of games relevant? Turns out it's up to us.
According to Nintendo Life, in a FAQ on Bandai Namco's official website, the developer is asking fans what to do next when it comes to the Tales series. In particular, to the question "Will there be more remasters or remakes of the Tales series?" The publisher replied as follows:
We hear from many passionate fans of the series around the world that they want to play the old Tales games on the latest platforms. We, as a team, thank you all from the bottom of our hearts. We are currently focused on the release of Tales of Symphonia Remastered, but we look forward to your suggestions and wishes in the future.
Speaking of remasters, Tales of Symphonia debuted in 2003 on the Nintendo GameCube. In 2014, it also appeared on PC. The remastered version, simply called Tales of Symphonia Remastered, is coming to Nintendo Switch next month on February 17th. It will bring improved graphics, enhanced gameplay and local co-op to the classic game. You can also purchase a limited physical edition of the game with tons of extra bonuses.
Tags: BandaiNamcoremastersSeriesTales
"We will not ask for financial support from the players" – Creators of MMORPG Quinfall about their project
PS Plus in February: Mafia Remake, Evil Dead: The Game and more
Asus ROG Azoth: wireless gaming keyboard with hot-swappable switches
Aroged: 10-inch tablet Oscal Pad10 with support for dual 4G has fallen in price on Aliexpress by 50%
Steam ranking: Elden Ring first among games, Call of Duty: Modern Warfare 2 second
Dynamic dialogue system in Redfall - explanation by Studio Director Harvey Smith
Leica launches new smartphone, but only in a selected market
Square Enix Remains Committed to Blockchain Gaming
Fallout 4 is getting PS5 and Xbox Series upgrade in 2023


Catch a glimpse of Victorian life at this 'conserved as found' country house. Brodsworth Hall was built and the pleasure gardens laid out, in the 1860s, as an up-to-date new home for the Thellusson family and their servants. It survived with remarkably few changes until taken on by English Heritage in 1990. The gardens have been restored, and the faded and worn interiors gently conserved, telling the story of the changing fortunes of the people who lived and worked here. Wander the many rooms of the house, roam the gorgeous gardens, stop for tea in the tearoom, and discover the recently restored game larder.
Please observe, the play area is partially closed at the moment as we upgrade our play equipment. In the meantime we have garden games for you to enjoy. Please bear with us while we carry out the improvements.
Explore the imposing ruins of Peveril Castle. From its hilltop position you can enjoy spectacular views of the pretty, medieval village of Castleton, as well as a magnificent panorama of Mam-Tor – the shivering mountain and site of a Bronze age hillfort.
Mentioned in the Domesday survey, this castle is one of England's earlier Norman fortresses and the keep was built by Henry II in 1176.
Experience mind blowing interactive digital tech from around the world.
Doncaster Mumbler visited Jorvik Viking Centre in 2017. My then 3 year old liked it, my then 5 year old had too vivid an imagination and wouldn't go on the ride. Good day out to suit various ages as the Grandparents enjoyed it.
It was interesting looking around the collection of viking artifacts though and the good thing is that we could have gone again in the past year for free with our ticket.
We tend to take the park and ride when we visit York (parking at The Designer Outlet) or otherwise we have done the train before as it is so easy.
There is so much to do for families of all ages at Lotherton. With an annual membership to Lotherton, you can enjoy unlimited year-round entry to the whole estate including the playgrounds, woodland play, family trails, Wildlife World, dressing up and crafts in the hall and they often have themed events during the school holidays.
Magna is a Science Adventure Centre set in the vast Templeborough Steelworks. Explore the wonders of science and technology in our four pavillions – Air, Earth, Fire and Water.
When you buy a full price day pass to Magna you can upgrade to an annual pass free of charge! Your pass will allow you and your family members, for whom you have purchased tickets, a further 12 months entry to Magna at no additional cost. All you need to do is complete your 'Many Magna Returns' Annual pass form when purchasing your tickets at Magna. Book online to receive up to 10% off your visit too. If you book online, just complete the annual pass form on the day of your visit.
Great, affordable day out for all the family. It is worth getting the family pass if you are likely to go a few times in the year (there is an option that covers 2 adults and up to 5 children if in the same car).
Bear in mind that during the winter months, the pass covers you for parking and entry to the house. There is no charge on the gate.
Duck pond, trees to climb, open areas to cycle scoot or walk. Great place for a picnic. They have a a brilliant splash pad and this year have two new play areas which are great for all ages, with things for under 5's and older children alike such as zip wire.
They no also have Go Ape on site, which opened earlier this year.
Country house, gardens and parkland.
Children's outdoor play area, walks and tours and out door activities.
Clulmber park is a special and important place, one of just a handful of Grade 1 registered parks in the country. One of the top 5 most visited National Trust places in the country, there is something for everyone. Great for walking, cycling, exploring there is a great play area too.


There are two aspects of the News Module to consider. First is the interface at news.princeton.edu which allows a user to create new articles and edit existing articles. The second aspect is the News Archive, News Summary, and News Spotlight components within the Roxen page editor interface.
The News Module is not an "installable" module that you can request for your site. Instead, follow the steps below.
If you already have news on your site, skip to step #3. If you don't yet have news on your site, email punews@princeton.edu with your department name and list of usernames whom you would like to have access to create and edit your news articles. We will set up a news collection and inform you of your Department Code (short name) that you will need when configuring the components.
*Please note that the Roxen CMS will shut down in September 2019.
There are three News Module components for Roxen CMS: News Archive, News Summary, and News Spotlight. Only the News Archive component is required, but many sites use all three.
These components are customizable, in combination with the news.princeton.edu interface.
For example, a common setup is to have a list of headlines on the home page, a news page with a list of recent article blurbs, and the required news archive page. See below for the steps to create this.
To add a new article, log into news.princeton.edu with your Princeton username and password. If you are unable to log into the system, contact punews@princeton.edu.
After you log in, click on "Login to Admin Interface" again.
From here, click on "Add new article" to create a new article, or select "Articles" in the navigation to view the articles for your department.
Below is a description for each field offered in the article form.
Story The content of your article. You can place images here to show up in your content.
Excerpt The excerpt optionally in the News Summary and News Spotlight components.
Categories Categories are used to group your posts into related themes. For example, many sites use the "Spotlight" category to pull only posts which are tagged as "Spotlight" onto the homepage. For help in setting up a category plan or with discovering your current setup, contact punews@princeton.edu.
Featured Image URL This image appears in the News Summary and News Spotlight components. This image will not appear on the content page for your article.
Publish Status The state of the article in the editing process. Articles with a status of "Published" will appear on your Roxen site. All others will not.
Author The author of the article. Defaults to the person logged into the application.
Publish Date Defaults to today. If you would like a story to be published in the future, you can set a future date.
Expiration Date If you would like the article to be removed from the News Summary and News Spotlight components, then set an expiration date. Otherwise, leave this field blank. All published and visible articles will remain on your site in the News Archive component.
Priority The sort order of all articles which meet the criteria outlined in the News Spotlight or News Summary components.
Location Deprecated. Meant to be an AP style location line. Use the Story field instead.
If you want to link to an external page instead of creating the story through news.princeton.edu, place the name of the news source here.
News URL If you want to link to an external page instead of creating the story through news.princeton.edu, place the link to the article here.
The Featured Video fields are deprecated, as they use an older media player that is only compatible with Flash-enabled devices. This excludes most mobile devices.
Also, the "Browse and Upload" button for the Featured Video URL will return an error if the uploaded video is larger than 5 MB.
Instead use a dedicated video hosting service such as YouTube, Vimeo, or the Princeton University-hosted Media Central service. You can toggle the Source button of the Story field and paste the iframe embed code right into the editor. To avoid SSL mixed content warnings, make sure the source URL of the iframe embed is https or protocol-relative.
You must set the "DOM ID" in the configuration options for the News Spotlight component. It can just be something simple like "spotlight" if you like.
If you choose the "Side-by-side" variant, you must set an image width and a container width. Otherwise, the text will appear below the image, disappearing outside the slider area. You should also set height values for those unless you are using the Auto Height option (not recommended).
Some of the themes may add extra borders or margins to images and borders to links inside the spotlight area. You should add rules to your custom.css to override these.
This example takes you through a basic setup of the News Module components.
You can leave the default settings for most items, including the "Show/Hide" options.
Next set up the News Archive page as a subpage of News. The News Archive page does double duty and dynamically serves as the individual article display page.
Use the same path that you previously used in the "Path to News Archive" field.
Optionally, you can edit the navigation menus of each page to create a link from the News page to the News Archive page and vice-versa.
For the last step, create a list of news headlines on the home page.
You will likely have to add custom CSS so that the list of headlines fits in with the look of your home page.
It is up to you whether you want a link to the News page in the primary navigation, or if you just want to rely on the News Summary's "View all" link.
If you have an improvement to suggest, or have found a bug, please report it to us. Check the existing tickets before creating a new one by looking at "View Tickets" and choosing "Active Tickets.".


text:
Q: laravel relationship not loading I've got a Product and a Category models:
class Product extends BaseModel
{
    use Uuid;

    protected $fillable = [
        'barcode',
        'name',
        'sku',
        'description',
        'type',
        'category_id',
        'wholesale_price',
        'retail_price',
        'base_picture',
        'current_stock_level',
        'active',
    ];

    public function category(): BelongsTo
    {
        return $this->belongsTo(Category::class, 'category_id');
    }

class Category extends BaseModel
{
    protected $fillable = [
        'name',
        'parent',
        'description',
        'image',
    ];

    public function product(): HasMany
    {
        return $this->hasMany(Product::class, 'category_id');
    }

In my controller, I'm retrieveing all products and wanted to return the category object the product belongs to in the response, so I'm doing:
class ProductsController extends Controller
{
    public function index(): AnonymousResourceCollection
    {
       $products = Product::all();
        return ProductsResource::collection($products->loadMissing('category'));
    }

and my resource looks like:
class ProductsResource extends JsonResource
{
    public function toArray($request) : array
    {
        return [
            'id' => $this->id,
            'type' => 'products',
            'attributes' => [
                'barcode' => $this->barcode,
                'name' => $this->name,
                'slug' => $this->slug,
                'sku' => $this->sku,
                'description' => $this->description,
                'type' => $this->type,
                // todo return  category object?
                'category' => new CategoriesResource($this->whenLoaded('category_id')),
                'wholesale_price' => $this->wholesale_price,
                'retail_price' => $this->retail_price,
                'base_picture' => $this->base_picture,
                'current_stock_level' => $this->current_stock_level,
                'active' => $this->active,
            ]
        ];
    }
}

but the response I'm getting is:
{
    "data": [
        {
            "id": "a2102c4c-c14a-4d16-af28-e218bcc4fe39",
            "type": "products",
            "attributes": {
                "barcode": "1010101010101",
                "name": "phione",
                "slug": "phione",
                "sku": "w2e2r2",
                "description": null,
                "type": "services",
                "wholesale_price": 54,
                "retail_price": 34,
                "base_picture": null,
                "current_stock_level": 0,
                "active": 1
            }
        }
     ]
}

I tried loading the relationship differently:
public function index(): AnonymousResourceCollection
{
     $products = Product::with('category')->get();
     return ProductsResource::collection($products);
}

but the result is the same.
It seems that the relationship is well established because if I run:
$product = Product::first();
dd($product->category);

I can see the category the product belongs to:
#attributes: array:8 [▼
    "id" => 2
    "name" => "Paper"
    "slug" => "paper"
    "parent" => 1
    "description" => null
    "image" => null
    "created_at" => "2022-09-20 02:03:05"
    "updated_at" => "2022-09-20 02:03:05"
  ]

what am I missing?

A: In controller load category relation with eager loading
$products = Product::with('category');
return ProductsResource::collection($products);

and in the ProductsResource file load, the relation category, not category_id
'category' => CategoriesResource::collection($this->whenLoaded('category')),

A: You don't need to use a collection here. Simply do
$products = Product::with('category')->get();
return response()->json($products);

redpajama_set_name: RedPajamaStackExchange


text:
My front page
Foucault pendulum
FP II KS
Aviation Navigation
Motion of sphere 1,
Motion of sphere 2,3
Lion likes football
7 & 8
Leprechaun & Newton
GE's Complaint II
Not first things
ad infinitum
Contrarieties
Fish and Shadow
GE's Complaint
Skipping to Gravity
In 1687 Newton published the "Principia", in which he described his theory of gravity and the cosmos. His theory of gravity, as he saw it, provided a fundamental basis to explain "the System of the World". The hypothesis was that gravitation was universal and mutual by degrees of the inverse squared, but throughout the "Prinicipia" and even today the cause of "gravity" remains unassigned, and in his lifetime he never measured it. In fact, gravity so-called, as a real and active force in Newtonian physics, was not measured until 111 years after the "Principia" by Cavendish with a torsion balance in 1798. Cavendish, another odd fellow, also with such a nose for butterfly weed, acanthus, and candytuft too, possibly so, like antique shops by the way, strange smoke, Richard Dawson and some sort of Freemasonic parallel ... etc.
The Freemasons and the pyramids. Perhapsologically in the mix, when it is there, rub, rub and tap, tap the bottle to make the genie come out. If howevers, "where demonstration is possible, one who can give no account which includes the cause has no scientific knowledge." Yet from an experiment with a torsion balance, the empirical measurement of the supposed universal gravitational constant, there obtained, and that is written as "G", added to Newton's theory and would also form part of the basis for the equation of the force of gravity that is accepted today, to wit:
F1 = F2 = G(m1m2)/r^2
where F1 and F2 is the force of gravitational attraction between two particles, masses, or objects, of whatever in whatever kind, however it may be, and "G" is the universal gravitational constant, and m1 and m2 are the two different masses, indeed the first and second mass, and r is the radius distance between them, as such and so forth, also and/or of the two centers of the masses.
The formula for the expression of the force of gravity involved in gravitation that is taken from Newton's "Principia" can be obtained from Propositions 74 and 75, and Theorems 34 and 35. In these passages the idea is that, "Every point mass attracts every single other point mass by a force pointing along the line intersecting both points. The force is proportional to the product of the two masses and inversely proportional to the square of the distance between them."-1
Since it is taught that according to the law of universal gravitation, the attractive force (F) between two bodies is proportional to the product of their masses (m1 and m2), and inversely proportional to the square of the distance, r, (inverse-square law) between them:
F1 = F2 = G(m1m2/r^2)
may seem okay to some people, but what is "G" really, if it was further obtained with a measurement taken from a torsion balance?
It must not be first or an independent value as much as the number one of it, for itself, that would divide everything, also the torsion balance, suametti semitipsi, of course, since a torsion balance cannot measure "gravity" beyond its own tension, mass, pressure, balance, weight, density, structure and design. And whatever the torsion balance was supposedly measuring in terms of "G" could have been measured with anything else, since all other things that could be used to measure gravity have weight, mass, density, tension, pressure, balance, structure and design too, as much as the number one of them or it, for any other situation, and "G", according to Newton and heliocentrism, is universal and ever present anyway.
If "G" really is the universal gravitational constant of proportionality, for gravity, why measure it with a torsion balance, when one can measure it with a little bag of Doritos or a pack of cigarettes and box of matches at the corner store? Because Cavendish and his torsion balance in the laboratory give better scientific cover, white coat bona fides, of course, than a pack of cigarettes at the corner or the liquor store.
"Yippy skippy", the dance of the hours skipping to gravity, Huddle House smart alecks may say, yet "it is a great mistake to suppose that scientific truths differ essentially from those of every day. An eye armed with a microscope is only a human eye after all. It sees more than the naked eye does, but not in any different way."-2
However, as significant as it has become, and as common as it is, it remains very difficult to measure "G" with any high degree of accuracy. A certain amount of density first is always needed in the test to measure gravity. If things are too rarefied, one will not be able to get a good measurement.
To get Newton's gravity, there is indeed some density required, yet not much more than the things themselves. On the authority of one who shall remain nameless, there is no harm in repetition for science to get things right. Therefore, if one did want to measure gravity with a pack of cigarettes, or a little bag of Doritos down to the crumbs and salty particles, rather than a torsion balance or a golf tee at the liquor store, it will be better to examine "G" with the solid pack first, as something with required density and form, rather than with the smoke. If one tries to measure gravity with the smoke, one will get more smoke ... obviously .. and mirrors perhaps in a back room ... than "gravity", because smoke does not fall down to the Earth with much tension of force.
Also, do not test the force of gravity too much with the light that comes from a short match by pointing the match down. Such a light is not moved by gravity, and the flame is an anti-gravity device that will go up the little stick and burn the fingers. The same thing occurs with a fireplace: the wood stays down while the fire goes up. Therefore, wait and blow the flame of a lit match out first and test gravity with the burnt stick. The wood is denser than air and will yield a fair enough test of the forces of tension, accomodation, and gravity in that case, as well as any torsion balance.
Ignis ardens, per proprietatem ascensionis suamet, deforis esse tractuum gravitatis: burning fire, by its own property of ascension, is outside the pull of gravity. A foot long match may be useful for testing the proof further, since the flame will tend to go out early, before the end of the stick, unless one points it down. Once pointed down, however, a flame that was about to go out will increase and climb up, getting more oxygen to climb up against gravity, for new life, until it consumes the other end of the stick. A scientist can switch hands and hold the burnt end of a long match, and let the little fireball climb all the way up the height at the other end. The fire naturally looks for wood and air that it can find, as high as it may go to the treetops, et cetera.
Whether testing the force of gravity with a torsion balance or cigarettes, the discovery will be that gravity is weaker than even the tiniest refrigerator magnet in the whole wide world ... or the littlest lovebugs, Bibionidae or Plecia neartica. Even the chorus box of scientists admit that it is by far the weakest of forces, and the weakest of the four fundamental interactions, described in modernist physics; yet according to Newton and heliocentrism it is everywhere, high and low, and is what is keeping the grand symphony of cosmic things together and in motion.
After testing these things scientifically, however, some investigators perhaps would disagree, and reasonably conclude that Newton's "gravitation" is the vaguest thing possible that is not an act of complete disutility.
For instance, it could go without saying that gravity does not move itself alone -- "suamet ipse" -- as it is or would be strictly imposed most simplewise by itself with nothing there. Not moving itself alone, and not set in sequence by itself alone yet among things, its own supposed principle of operation does not move except where there are first objects in the course. Surely there must be objects for gravity to move, to do its work, to set any such force of summary illustration in motion; and since there must always be objects -- otherwise there would not be gravity -- there must be the objects first in any whatevers of such a case.
Yet mere objects themselves are not in the category of first mover. They only go so far but they always come before gravity, since gravity is after all objects and the sides that it would move, for where there is no principle object or side there is no gravity. As much as an all-involved point, even though hypothetical forms of Newtonian gravitation supposedly would set things in motion, gravity does not move anything laterally anyway, not sideways at all, of course. And it cannot move things only vertically, neither strictly up nor acting only down from up, since the Earth and the cosmos are spherical, as pure space is spherical too. In any true sphere the vertical and horizontal make the same difference to any points without a set label. Since it is known that objects do not move themselves but are moved, and weight by itself does not constitute a source of motion, and in any sphere the decisive separation between sides is an arbitrary distinction, one without a difference, whatever way they go, it is fair to say that gravity, or what is called Newtonian gravitation, for all such trouble, does not move them, since what moves objects must come first.
The motion or animation of Jupiter, for instance, cannot exist without Jupiter, yet as Jupiter can exist whether it moves or is quite animated or not, Jupiter can also exist as it is without Newtonian gravity or gravitation. In a way similar to imagination, which cannot exist without sense, gravity cannot exist without objects. Gravity, to be honest, cannot be in a universal position, of such an overall condition over so many things, over the way arrows are too, for example, if it cannot exist without the particular limited individual objects like Jupiter being there first.
In other words, can any scientific operation result in a natural number like three, or can a crab go skiing, or an arrow hit a target, without there being such a number, the crab, or the target first? In the first place, it stands to reason that numbers provision operations, as much as objects and sense provision imagination, and for that matter it is the same way too for the imaginary sense of Newtonian gravity. Yet the relation of objects, numbers, and qualities is inherent in immutable principles, like cause and effect, and these principles contradict the theory of universal gravitation, as much as any simple instance of less or more persists. For all the instances of more or less, imagination or gravity, therefore, one could as well say that the sun is perhaps an ancient Anatolian foot or something more than a yard in diameter, because it looks like it, and that Jupiter is even smaller, more or less, and what difference would it make to the facts other than as another circumstantial error in another experience?
Therefore, of course, Judeo-Masonic controlled NASA has never landed on the Moon, because they have even the most basic things wrong which do come first. And there once was a Hollywood actress too, a beauty queen who became famous for running up and down the beach almost naked, and flirting with short men. She was a sometime guest on talk shows, and during one it was discovered that she could not remember where she had gone to High School. For all the talent and experience of younger days, she had forgotten about it almost totally, and it was obvious that school had not been a top priority. In fact, it was discovered that she had been a regular truant, and had been skipping school and going to the beach for many days and days at a time before she got lucky and became an actress.
"I was learning things", she said, "you know, not first things other things."


Will still be another month to month and a half at least. He was here over Christmas and it's usually 90 days.
Similar boat. Will have a 7* Jango in time but can't decide between replacing zam or replacing Greedo. My Greedo is behind at G8 and zam is nearly G10.
Greedo attacks more than twice with his basic if you're lucky (modding him for high crit chance increases the chance for long streaks of bonus attacks).
Using Jango's AoE attack(s) before ROLO is killed off will feed huge bonus TM to the enemy team. I would definately recommend Greedo instead of Jango. He doesn't need to have all that high gear level (although it increases his damage output). I did it with a 9* Greedo the first time around.


Electric currents create magnetic fields when passing through the coils.
When rotors turn inside the magnetic fields, Eddy currents appear.
Eddy currents create forces opposing to the movement of rotors.
Kinetic energy is transformed into heat in the rotors and dissipated through their vanes.
Stator: static part equipped with a set of electric coils.
Rotors: turning parts that absorb and dissipate the kinetic energy of the braked system.


Not only Rus, but also Volga and early Angara and Feniks variants.
@Beale I'll second previous post author. 1.5m is more preferable than 1.625m due to compatibility with other mods. And 1.85m variant would make fine Soyuz-3 proposed launcher core. Also, talking about Soyuz rework, is there any plans for Soyuz-2.1v (larger diameter first stage core with NK-33-1 engine, http://www.russianspaceweb.com/soyuz1_lv.html)? It would be very nice "what if" addition, especially with "Volga" upper stage.
Yay! Btw, I'm on1.6.1 right now. Also, still playing 1.3.1 RP1 and 1.2.2 QRSS campaigns, but those felt back so far and modded so heavily, that I don't even bother to update mods used for them (there is always chance to break something, yk).
Just took a quck look to B9 code, as well as at KSP class reference. One wild idea (not sure if it will work, @blowfish can correct me). This structure: solarPanelRootGameObject - transform1 -- solarPanelTransform - transform2 -- solarPanelTransform transform1/transform2 are switched with B9, while DeplyableSolarPanelsModule are linked to solarPanelTransform gameObjects/transforms. Have anyone tried this? EDT: Question is, when does Module caches references to gameObjects (if it ever does).
Will they be separate parts, or alternate models as current "-E"-variants? Maybe parts mesh variants (stock variants, or B9, or whatever)? Thumbs up!
Wish I knew about "-E" meshes earlier! In my campaign I've rescaled some Soyuz (and all of Vostok) parts with MM configs, replaced some others with procedural tanks and wondered, if Voskhod in 1.25m is even possible... three or two (with huge helmets) in such a small capsule. It would be awesome if 1.5m would be adopted by @Beale as one of common sizes in Tantares (as @CobaltWolf did earlier in BDB).
Is it about scaling Soyuz parts up to 1.5m?
Encountered same behaviour with 1.3.1 RP-1. Try to EVA all kerbals from craft before recovery attempt, in my case it worked.
In my heavily modded game it doesn't. However, in old videos of ancient times (see OP) it was. For example, in Scott Manley's video that can be seen at ~2:30.
Is there any chances to get compatibility with RealChutes?
At first glance it works fine now, thanks!


text:
NGC 7457 ist eine Galaxie vom Typ E-S0 und liegt im Sternbild Pegasus. Sie ist schätzungsweise 47 Millionen Lichtjahre von der Milchstraße entfernt.

Das Objekt wurde am 12. September 1784 von William Herschel entdeckt.

Weblinks
 SIMBAD Query

Einzelnachweise


Male big-eared woodrats can breed multiple times throughout the breeding season, while females generally only breed about 3 times within the same time span.
Big-eared woodrats breed from February to September.
There are no documented ways in which big-eared woodrats benefit humans economically.
Tim Saltys (author), Indiana University-Purdue University Fort Wayne, Mark Jordan (editor), Indiana University-Purdue University Fort Wayne, Leila Siciliano Martina (editor), Animal Diversity Web Staff.
Haley, S., J. Lamb, M. Franklin, J. Constance, M. Dearing. 2007. Xenobiotic Metabolism of Plant Secondary Compounds in Oak (Quercus agrifolia) by Specialist and Generalist Woodrat Herbivores, Genus Neotoma. Journal of Chemical Ecology, 33/11: 2111-2122.
Haynie, M., C. Fulhorst, M. Rood, S. Bennett, B. Hess, R. Bradley. 2007. Genetic Variation in Multilocus Microsatellite Genotypes in Two Species of Woodrats (Neotoma macrotis and N. fuscipes) from California. Journal of Mammalogy, 88/3: 745-758.
Matocq, M. 2002. Morphological and Molecular Analysis of a Contact Zone in the Neotoma fuscipes Species Complex. Journal of Mammalogy, 83/3: 866-883.
Matocq, M. 2004. Reproductive Success and Effective Population Size in Woodrats (Neotoma macrotis). Molecular Ecology, 13/6: 1635-1642.
Matocq, M., E. Lacey. 2003. Philopatry, Kin Clusters, and Genetic Relatedness in a Population of Woodrats (Neotoma macrotis). Behavioral Ecology, 15/4: 647-653.
Matocq, M., P. Murphy. 2007. Fine-Scale Phenotypic Change Across a Species Transition Zone in the Genus Neotoma: Disentangling Independent Evolution from Phylogenetic History. Evolution, 61/11: 2544-2557.
Skopec, M., S. Haley, A. Torregrossa, M. Dearing. 2008. An Oak (Quercus agrifolia) Specialist (Neotoma macrotis) and a Sympatric Generalist (Neotoma lepida) Show Similar Intakes and Digestibilities of Oak. Physiological and Biochemical Zoology, 81/4: 426-433.
Tacutu, R., T. Craig, A. Budovsky, D. Wuttke, G. Lehmann, D. Taranukha, J. Costa, V. Fraifeld, J. de Magalhaes. 2013. Human Ageing Genomic Resources: Integrated databases and tools for the biology and genetics of ageing. Nucleic Acids Research, 41(D1): D1027-D1033. Accessed July 30, 2014 at http://genomics.senescence.info/species/browser.php?type=5&name=Neotoma.
Wood, F. 1935. Notes on the Breeding Behavior and Fertility of Neotoma fuscipes macrotis in Captivity. Journal of Mammalogy, 16/2: 105-109.


text:
ENERGY01 Featured
April 5, 2021 July 19, 2021 Jon
Las Vegas, Nevada–(Newsfile Corp. – April 5, 2021) – The 4Less Group, Inc. (OTCQB: FLES) (Company) announced that their auto parts ecommerce website www.Liftkits4less.com ("LK4L"), which targets the aftermarket automotive parts for Jeep Truck and SUV vehicles, has seen a 196% increase in gross sales for the month of March 2021, as compared to the same month last year.
"Over $2M in gross sales in a single month is a major milestone for LK4L and demonstrates our ability to drive sales through cutting edge technology, strong branding and our digital marketing efforts," stated Christopher Davenport, President and CEO of Auto Parts 4Less, Inc., the Company's wholly owned subsidiary. "Our strategy of strong SEO optimization coupled with paid advertising including our resent partnering with MBM Motorsports and the NASCAR fan base is paying off." Christopher states, "We will continue to expand our branding efforts to support the launch of our flagship automotive parts-only marketplace AutoParts4Less.com in Summer 2021."
Based on a potentially successful $15 million capital raise that the Company initiated the first of the year, the Company expects they will be able to substantially increase LK4L's advertising and promotion budget from the approximate $100,000 spent in 2020. In doing so, the Company believes that their ecommerce site LK4L is positioned to have a breakout year.
"As LK4L experiences record-breaking sales numbers for both February and March 2022," stated Tim Armes, President of The 4Less Group, Inc. "The continued growth in sales from LK4L will enable the company to significantly lower our out of pocket investment to finish the development and launch of AutoParts4Less.com."
In addition to the record-breaking sales in the last two months, the Company also announced that in the same time period they had reduced debt by approximately one million dollars at a cost of just over $150,000.
About The 4Less Group, Inc.
Building off the knowledge and continued success of their present e-commerce website, liftkits4less.com, that targets the aftermarket automotive parts for Jeep Truck and SUV vehicles, The 4Less Group, Inc. (www.the4lessgroup.com) is now focused on launching what they believe to be one of the world's first automotive parts only multi-vendor marketplace under the URL AutoParts4Less.com. The projected MVP site launch will begin in early Summer 2021.
Also visit: www.AutoParts4Less.com as well as www.LiftKits4Less.com.
CAUTIONARY DISCLOSURE ABOUT FORWARD-LOOKING STATEMENTS
This press release may contain forward-looking statements, including information about management's view of the Company's future expectations, plans and prospects. In particular, when used in the preceding discussion, the words "believes," "expects," "intends," "plans," "anticipates," or "may," and similar conditional expressions are intended to identify forward-looking statements. Any statements made in this news release other than those of historical fact, about an action, event or development, are forward-looking statements. Such statements are based upon assumptions that in the future may prove not to have been accurate and are subject to significant risks and uncertainties. Although the Company believes that the expectations reflected in the forward-looking statements are reasonable, it can give no assurance that its forward-looking statements will prove to be correct. Such statements are subject to a number of assumptions, risks and uncertainties, many of which are beyond the control of the Company. Factors that could cause results to differ include but are not limited to, successful performance of internal plans, product or services development and acceptance, the impact of competitive services and pricing, or general economic risks and uncertainties. Investors are cautioned that any forward-looking statements are not guarantees of future performance and actual results or developments may differ materially from those projected. The forward-looking statements in this press release are made as of the date hereof. The Company takes no obligation to update or correct (i) its own forward-looking statements, except as required by law, or (ii) those prepared by third parties that are not paid for by the Company.
James S. Painter III
Emerging Markets Consulting, LLC.
April 5, 2021 – 6:44 AM PDT
News by QuoteMedia
www.quotemedia.com
← Mitsubishi Heavy Industries Engineering Establishes Asia Hub in Singapore for Operation, Maintenance and After-Sales Servicing of Local Transportation Systems in the Region
Greene Concepts BE WATER Bottled Water Now Available for Purchase on Company Website; Strengthens Pathway to Distribute BE WATER to Customers Throughout the U.S. →
Cooling Towers Market to Reach USD 4.63 Billion by 2027; Increasing Demand for Eco-friendly Products to Accelerate Growth: Fortune Business Insights(TM)
February 17, 2021 April 13, 2021 Bachittar
Superalloys Market to Display USD 10,700 Million Revenue Level by 2025 at 7.64% CAGR | Global Industry to Advance with Breakthroughs in Material Formulations, Says Market Research Future (MRFR)
Manganese X Drill Program Intersects Wide Zones of Manganese Oxide Near Surface with a Program High of 27.69%