As part of its social responsibilities to sustainable initiatives, investing in the future of local communities and the environment, PZ Wilmar, maker of vegetable oil Brand, Mamador and Devon King's cooking oil, has joined in the sponsorship of the 2017 edition of the annual Walk for Nature (WFN) event.
The goal, according to the to the vegetable oil company is to demonstrate the importance of healthy living and the conservation of nature.
The Walk for Nature event themed, "Cleaner Lagos which was jointly organised by the Lagos State Ministry of the Environment and the Nigerian Conservation Foundation (NCF) held recently, in Lagos.
During the occasion, the foundation for sustainable ecotourism urged participants to imbibe and cultivate good environmental practices for nature conservation and sustainable environmental management.
Acknowledging the support from partners such as PZ Wilmar, Commissioner for Environment Lagos State, Samuel Babatunde Adejare in a statement described the partnership as rewarding and hugely commendable.
"To a large extent it behooves on us as a people and a nation to form a global partnership to care for the earth. Overcoming the environmental challenges now confronting us requires effective management of our environment through the concerted efforts of all and sundry in order to preserve nature and our natural resources" he said.
PZ Wilmar was on ground to provide health check for participants, and education on healthy eating and living habits, courtesy of premium cooking oil brand, Mamador.
Participants who arrived at the Marina ground, venue for the event were made to undergo free health checks; BMI, BP and heart healthy lifestyle tips.
The event also provided PZ Wilmar the opportunity to further promote its Million Heart Mission campaign, powered by Mamador premium cooking oil, which aims at promoting heart health across the nation.
The "Walk for Nature" is an annual programme of the Nigerian Conservation Foundation designed to create awareness among the people about Nature Conservation and Good Environmental Practices in Nigeria.


text:
Q: How to fix core dump error on Azure Cloud Shell? Whenever I start Azure Cloud shell, it crashes with below error. Any idea how to get rid of this error. Any help is appreciated.
Requesting a Cloud Shell.Succeeded.
Connecting terminal...

Unhandled exception. System.TypeInitializationException: The type initializer for 'System.Management.Automation.Configuration.PowerShellConfig' threw an exception.
 ---> System.TypeInitializationException: The type initializer for 'System.Management.Automation.Platform' threw an exception.
 ---> System.IO.IOException: Bad message
   at System.IO.FileSystem.CreateDirectory(String fullPath)
   at System.IO.Directory.CreateDirectory(String path)
   at System.Management.Automation.Platform.SelectProductNameForDirectory(XDG_Type dirpath) in /PowerShell/src/System.Management.Automation/CoreCLR/CorePsPlatform.cs:line 343
   at System.Management.Automation.Platform..cctor() in /PowerShell/src/System.Management.Automation/CoreCLR/CorePsPlatform.cs:line 145
   --- End of inner exception stack trace ---
   at System.Management.Automation.Configuration.PowerShellConfig..ctor() in /PowerShell/src/System.Management.Automation/engine/PSConfiguration.cs:line 91
   at System.Management.Automation.Configuration.PowerShellConfig..cctor() in /PowerShell/src/System.Management.Automation/engine/PSConfiguration.cs:line 57
   --- End of inner exception stack trace ---
   at System.Management.Automation.Utils.GetPolicySettingFromConfigFile[T](ConfigScope[] preferenceOrder) in /PowerShell/src/System.Management.Automation/engine/Utils.cs:line 784
   at System.Management.Automation.Utils.GetPolicySetting[T](ConfigScope[] preferenceOrder) in /PowerShell/src/System.Management.Automation/engine/Utils.cs:line 760
   at Microsoft.PowerShell.CommandLineParameterParser.GetConfigurationNameFromGroupPolicy() in /PowerShell/src/Microsoft.PowerShell.ConsoleHost/host/msh/CommandLineParameterParser.cs:line 578
   at Microsoft.PowerShell.ConsoleHost.ParseCommandLine(String[] args) in /PowerShell/src/Microsoft.PowerShell.ConsoleHost/host/msh/ConsoleHost.cs:line 289
   at Microsoft.PowerShell.UnmanagedPSEntry.Start(String[] args, Int32 argc) in /PowerShell/src/Microsoft.PowerShell.ConsoleHost/host/msh/ManagedEntrance.cs:line 82
   at Microsoft.PowerShell.ManagedPSEntry.Main(String[] args) in /PowerShell/src/powershell/Program.cs:line 71
Aborted (core dumped)

A: This might be something in your profile or a corrupt clouddrive image. To "factory reset" your cloudshell do the following:

*

*Navigate to the resource group used for the cloudshell storage

*Navigate to the storage account in this resource group

*Navigate to "File Share", you should see a a share called "cloudshellshare".

*Delete this share.

*Restart/Start cloudshell. This should give a factory fresh cloudshell.

redpajama_set_name: RedPajamaStackExchange


text:
News and analytics from Donbass
Diplomacy – Minsk2
Military & Defence
Four DPR soldiers killed by Ukrainian army shellings in Leninskoye
Today, 8 February 2019, as a result of the shelling by soldiers of the 79th airborne brigade of the Armed Forces of Ukraine (AFU), from a position located near the village of Vodyanoye, one of the residential buildings in the village of Leninskoye was deliberately set on fire by an incendiary shell. The fire was extinguished by servicemen of the People's militia of the Republic and was not able to spread to other houses in the village.
Our servicemen provided assistance to the civilian population, it was impossible for the enemy to not see it through observation devices, but the Ukrainian soldiers did not stop at what had been achieved.
The soldiers of the 79th brigade, adjusting the fire with the help of a drone, again shelled the area, causing the death of three of our defenders who were fighting the fire. Another soldier of the People's Militia tried to pull the bodies of his comrades out of the shelled area, but he was also killed by a shell of the Ukrainian murderers. We express our sincere condolences to the families of the victims.
Also, today, soldier of the 93rd mechanized brigade of the AFU again shelled employees of the municipal enterprise "Water of Donbass", who were leaving the territory of the Vasilyevka pumping station. A gray UAZ car with its characteristic and clearly distinguishable inscription: "Water of Donbass", was fired at by Ukrainian soldiers with mortars of 82 mm caliber, anti-tank rockets, heavy machine guns and small arms.
Eleven station staff members, three of whom were women, managed to leave the vehicle and hide at the side of the road when the shelling began. Fortunately, there were no casualties this time.
The DPR People's Militia calls on international organizations, in particular the OSCE, once again not to turn a blind eye to the crimes committed by the Ukrainian security forces and to give them an objective and principled assessment.
Source: DPR People's Militia site
Translation by Donbass Insider
Tags: destruction, DPR, shelling, ukrainian army, war crimes
American weapons donated to Ukrainian army stolen in Lvov
The second representative center of the DPR opened in Italy
Donbass Insider is a totally independent site. It is only thanks to your help that we can continue our work, and pay for the hosting of the site. You can support us through different crowdfunding platforms.

redpajama_set_name: RedPajamaCommonCrawl


Looking forward to where God is leading us in 2018 and beyond.
A great time of friendship and fellowship.
An Annual Meeting packet will be emailed to the church email list the week before the meeting. Please print out the packet and bring it with you. At the meeting you can expect to share highlights of the past year at CRC and hear about the vision for the coming year.
The meeting will be held at the Richard W. Black Community Center in room Room 212. Parking will be limited around the RWB. Additional parking can be found behind the Hanover High School, including the first parking lot on the right as you follow the driveway.
Please print out the Annual Meeting Packet you received via email and bring it with you. Please bring a snack to share. If you need childcare for the meeting, please RSVP to the church office.


Highest quality for maximum enjoyment - that's our motto. Thats why you find typical Schleswig-Holstein-made products northern German specialties on our menu . We order directly from our fellow producers and suppliers in the neighborhood or pick them up ourselves. We select only products from nearby regions when the desired quality is not offered in Schleswig-Holstein.
As your food is cooked order using only fresh ingredients , we ask that you to give us some time, because for us quality goes before speed.
We look forward to your visit and wish you an enjoyable time.


San Francisco: SpaceX is targeting February 17 for the test launch of its first satellite for global internet constellation a project, informally known as Starlink, which aims to provide low-cost internet access on a global scale, the media reported.
"Static fire test of Falcon 9 complete — targeting February 17 launch of Paz from Vandenberg Air Force Base in California," SpaceX tweeted on Sunday.
SpaceX has kept mum about many of the details relating to Starlink, but the company's business plan calls for putting thousands of communication satellites in orbit, with limited service starting by 2020, the report said.
According to a report at Nasaspaceflight.com, the Paz satellite – named after the Spanish word for "peace" – will be launched into a 514 km circular orbit. It was built by Airbus for the Spanish company hisdeSAT, and will be used for military and civilian purposes.


text:
Q: Nofollow external links Hello guys i am using following code to make all external links nofollow.
add_filter('the_content', 'my_nofollow');
add_filter('the_excerpt', 'my_nofollow');

function my_nofollow($content) {
return preg_replace_callback('/<a[^>]+/', 'my_nofollow_callback', $content);
}
function my_nofollow_callback($matches) {
$link = $matches[0];
$site_link = get_bloginfo('url');

if (strpos($link, 'rel') === false) {
    $link = preg_replace("%(href=\S(?!$site_link))%i", 'rel="nofollow" $1', $link);
} elseif (preg_match("%href=\S(?!$site_link)%i", $link)) {
    $link = preg_replace('/rel=\S(?!nofollow)\S*/i', 'rel="nofollow"', $link);
}
return $link;
}

But after adding this code in my site's Theme Functions all links are still dofollow.
I am using Advanced Custom Fields Pro plugin and links adding by using this plugin are still dofollow.
How to make all external links no follow?

A: Edit 2: By suggest of @Mark Kaplun, the general solution should be this. We will do filtering after the page is generated, so we won't care about which plugin we're using.
We need a hack here to get whole page:
ob_start();

add_action('shutdown', function() {
    $final = '';

    // We'll need to get the number of ob levels we're in, so that we can iterate over each, collecting
    // that buffer's output into the final output.
    $levels = ob_get_level();

    for ($i = 0; $i < $levels; $i++)
    {
        $final .= ob_get_clean();
    }

    // Apply any filters to the final output
    echo apply_filters('final_output', $final);
}, 0);

I take this code from this question
Then you can remove 2 old filter:
add_filter('the_content', 'my_nofollow');
add_filter('the_excerpt', 'my_nofollow');

Use only one instead:
add_filter('final_output', 'my_nofollow');

Old answer
Just add one more filter.
add_filter('acf/load_value/name=my_field', 'my_nofollow' );

Edit: The concept to solve the problem here is filter the content that generated by plugin, for you here is ACF. Because the_content is from WP, not the plugin you're using, so add filter to the_content won't help.


ATEX and IECEx Group I certified. General purpose, top-entry velocity transducer with DC output. Made from robust stainless steel throughout for continuous vibration monitoring in harsh industrial environments. Sealed to IP67 with industry standard two-wire 4-20mA output proportional to sensor range that can connect directly to PLC, DCS and other industrial controllers. Includes integral stainless overbraided ETFE cable and is available with a wide range of mountings.


text:
Ski Méribel: Resort Guide
Jul 7, 2016 1:02am
by Sophie Butler, The Daily Telegraph, July 7, 2016
There are plenty of reasons to love Méribel, not least for its pretty, chalet-style architecture, wooded surroundings and friendly, village atmosphere. But the prime reason is its central position within France's huge Trois Vallées ski area.
Photo by Freeimages.com/
To the east are the resorts of Courchevel and La Tania, and to the west, Val Thorens . Together with Méribel these combine to make one of the largest linked ski areas in the world, with more than 600km of pistes.
Founded by British skier Peter Lindsay in 1938, Méribel's chalet developments now extend high up a west-facing slope. The villages of Méribel Centre range from 1,600m to 1,700m and include Mussillon and Altitude 1600 to the east and Rond Point and Belvedere to the west. The highest area is Altiport (1,700m). Feeding into Méribel by shuttle bus and gondola are the lower outlying resorts of Brides les Bains (600m), Les Allues (1,200m) and Méribel Village (1,400m).
At the top of the valley is Méribel-Mottaret at 1,750m, a satellite resort. Access to Méribel's neighbouring resorts and the area as a whole has improved thanks to recent investment in lifts. The improved Saulire Express gondola whisks up to 2,400 people an hour from the centre to the Saulire peak at 2,700m, taking 12 minutes (halving the previous time). From Mottaret the revitalised Plattières gondola takes nine minutes to reach 3 Marches at 2,704m. This season, a faster and more comfortable Combes chairlift has further reduced queuing times – and for the 2015/16 season two beginners' areas opened at Méribel-Mottaret.
The height of these peaks, along with Mont du Vallon – the highest point in Méribel's local ski area at nearly 300m – means good snow throughout the season, even if in March it can get a little slushy. On the downside, its high, wide slopes are unsheltered and not great on poor-weather days, while experts lament a lack of challenging terrain. Long queues for some lifts can also be a problem.
Accommodation is mostly in upmarket chalets but there's also a good selection of hotels and self-catering apartments. The spread-out geography of the resort means it's important to choose your location carefully, particularly if you want ski-in/ski-out accommodation. However, companies offering chalets without direct access to the piste usually provide efficient private minibus transfers – and the roomy resort buses are free of charge. There's a lively après scene and the resort is frequented by a large number of Brits – a plus or a minus depending on how you look at it.
Méribel caters well for the alpine shopper, with a predictable number of technical ski and boarder wear outlets in resort, plus designer brands including Prada, Fendi and Dolce & Gabbana. The best bakery is Glaciers on Route de la Montée in the centre of the resort, while the Maison de la Presse on the same street sells English newspapers. For local Savoyard cheeses, head for La Fromagerie at Galerie des Cimes near the centre. Twice weekly (Tuesdays and Fridays), there's a small market on the Route de la Chaudanne.
The Olympic Centre built for the 1992 Winter Olympics is open daily, offering a 25m indoor swimming pool, children's pool, water slide, fitness centre, climbing wall, spa and indoor ice-rink. Snow-shoeing, horse-sleigh tours, snowmobiling and walking routes are also available.
The combination of extensive slopes, superb location and attractive architecture makes Méribel one of Europe's safest bets for a great holiday.
(out of five)
Beginners ****
Intermediates *****
Experts ****
Extent *****
Snow reliability ****
Off piste/Powder ****
Village charm *****
Terrain parks *****
Families *****
Budget ****
Luxury *****
Après ***
Nightlife *****
Off slope activities/facilities ****
Shops ****
Foodies *****
Scenery *****
Snowboarders *****
More info: meribel.net
Méribel enjoys a central position in the Trois Vallées ski areaCredit: David Andre Getting there
Airport: Chambéry is the closest (59 miles, one hour and 20 minute transfer) but the low number of flights doesn't make it that attractive. Try Grenoble (74 miles, two hours and 15 minute transfer), or Geneva (83 miles, two hour and 15 minute transfer).
Train: Moutiers (30 minutes, 18km). Regular buses run from the station.
This article was written by Sophie Butler from The Daily Telegraph and was legally licensed through the NewsCred publisher network.


Holiday! it's time to enjoy yourself! Whether it's at a fine restaurant, a picnic filled with local products, or a delicious ice cream… Two words: great food!
Enjoy a delicious artisanal ice cream – it's sure to be one of the highlights of your stay! Treat yourself to a classic or local flavour (lavender, chestnut, olive...)!


The cornerstone of the traditional Singaporean route to success has typically been education, as parents instill the value of studying hard in their children. Generations of parents, influenced by their own families, have cultivated a mindset of success defined by studies. It sounds like a good thing, but there's a flipside – overly competitive environments. Children are pressured to work hard, and spend more time on homework and in front of devices and computers. The benefits of this hard work to our children and to our society are clear, but is there a negative impact of these long hours spent studying?
The answer is most likely a yes. Excessive nearwork is a well defined risk factor for the development of Myopia, or short-sightedness, and the problem is bigger than you may think. Myopia has become a global epidemic, affecting more than 2 billion people, and in Singapore, more than 10% of children already have myopia by the time they leave pre-school. Rates reach 50% by primary school, and soar to 80% by the end of secondary school.
With the high prevalence of myopia in our schooling children, parents should be majorly concerned. Yet, many easily treat short-sightedness as an almost inevitable effect of working hard in our education. However, experts say that this problem is caused by the environment that our children grow up in. Urbanisation and education pressures force our children to spend too much time indoors on books and technological devices like smartphones and computers. This takes away precious time kids spend outdoors playing.
It's possible to manage and even slow the onset of myopia in children, even as they excel in their studies. One of the ways to do this is exceedingly simple – by obtaining a healthy balance between near work and outdoor time.
The government has made some efforts to tackle the problem with programs like Kids for Nature, the Programme for Active Learning, and the National Myopia Prevention Programme. However, as parents, we can do more. We are integral in preventing or stalling the development of myopia in children as early as possible. Ensuring healthy device usage is paramount to protecting children's eyesight.
It's almost impossible, however, to be able to monitor your child's device usage all the time. A parental control app comes in very handy, as you can ensure that your child takes regular eye breaks without having to be physically present. Your child can also be empowered to take active steps to protect his or her own eyes.


Shiftiez.com has scored a spot in the 2018 SMART 100!
My wife who is a nurse was woken after a night duty by her office trying to get her to go on afternoon shifts. There was no fatigue planning and no understanding of if she even wanted a shift. The frustrating thing was she would email her bosses with requests for extra work and it was ignored.
When we researched the problem we found companies struggle to build rosters that handle EBA's and fatigue planning. We wanted to fix both sides of the problem and automate the rostering for a company with employee preferences.
…humanise rosters by making it simple to find available staff for a shift and let staff co-plan their availability from their phones before a shift is set.
…taking preferences for shifts (yes/no/prefer not) and hard rules like EBA's, fatigue planning and a fairness test and building thousands of roster combinations looking for the one with the least cost to staff and the business.
Most planning solutions look for the lowest salary cost building a roster. If there's a clash with someone's schedule they just pull a sickie. With shiftiez, staff can say they prefer not to work a shift rather than take leave, if the schedule allows it they can take the shift off and work a replacement automatically.
Employers have a simple process saving time and confirming shifts.
Employees are more engaged as they have a say in their work life balance generating higher throughput, taking less sick leave and are less likely to switch employers.
Call lists, SMS or email, either manually or from a software solution. These blast out to everyone and are not integrated to responses. So if multiple people respond, they then all have to be contacted back to confirm if they have the shift or not along with details of where they are working.
Business with greater than 20 staff with complex EBA's and multiple shifts. Examples include Police, public transport, airlines and logistics, facilities management, restaurants and healthcare.
It's also for large short term workforces (think the commonwealth games) Cleaning and catering crews, event management and the like.
Direct sales through our website. We are also in discussion about a white label option with one of our clients.
Capitalise on our work with Victoria Police, partner with payroll providers as an integrated service and work on long term sales with health providers.


text:
Aladdin Pinball
Aladdin Pinball is a high-speed game set in the magical land of Agrabah. Players join their favorite characters from the film, Aladdin and Princess Jasmine, for pinball fun on three exciting boards. Players can experience the excitement of the city [...]
We interrupt this broadcast with breaking news…chaos in the streets of Rage City tonight! The myriad local gangs, once at constant war with each other have now unified under a mysterious new crime boss…Mr. S. Thugs have flooded the entire [...]
Crisis in the Aegean Sea (Κρίση στο Αιγαίο)
A fatal mistake and the war between Greece and Turkey -which everybody where afraid of- is a fact. The situation is critical and the only hope is you! A technical problem in the mainframe of the turkish general staff caused in a few hours the war. The [...]
Crackinho Beat' em up in the World
Crackinho is a superhero who was born in the suburbs of São Paulo. He is the result of an unsuccessful lab experiment. And now he and his group have the mission to discover the origin of these problems and combat social injustices. The responsible for [...]
VeggieTales Creativity City
There's so much to do in Creativity City! Take a tour with Bob the Tomato and Larry the Cucumber. Visit the shops to design and print your own creations -- even games and activities! > Bob's Bookworks : Check out Bob's colossal collection of [...]
PocketCars
PocketCars is a fast paced arcade combat-racing game, where you can drive remote controlled cars that speed through amazing tracks. ## About This Game PocketCars is a fast paced arcade combat-racing game, where you can drive remote controlled cars that [...]
Nebula Fighter
Nebula Fighter is a side-scrolling shoot 'em up with pre-rendered graphics and fast, action-oriented gameplay, developed by Holodream Software and published by One Reality. Set somewhere after the year 2010, Nebula Fighter puts the player into the [...]
Mr. Grumpy
Mr. Grumpy has to eat all the apples he can find. But watch out for the bad ghost cause he likes you fir his dinner. Mr. Grumpy


text:
P&O Australia
Background Documents
Officers & Executives
Princess Cruises "Come Back New" Sale Offers Up to $600 Onboard Spending Money, Free Room Upgrades and Savings for Extra Guests
Guests Choose from Fall 2019 – Spring 2020 Cruise Vacations to Worldwide Destinations
SANTA CLARITA, Calif. (February 28, 2019) – Travelers looking for memorable experiences and celebrations "doing this" together with family and friends can take advantage of Princess Cruises' "Come Back New" sale, with added savings and perks cruising to new destinations, cultures and sites. The sale begins tomorrow, March 1, 2019, and runs through April 30, 2019.
Now is the perfect time to book a cruise vacation on various Fall 2019 through Spring 2020 voyages offering onboard spending money, free room location upgrades and fares from $99 for third and fourth guests to popular worldwide destinations such as the Caribbean, Panama Canal, Mexico, Hawaii, Alaska, Asia, Australia & New Zealand and more. The "Come Back New" sale includes perks for everyone – up to four guests per stateroom:
Free onboard spending money – up to $600 per stateroom, based on cruise length and stateroom category.
Free room location upgrades – enabling guests to get the best preferred stateroom location available within the room category type for the lowest possible fare.
Third and fourth guests from $99 – fares from $99 apply to the third and fourth guests booked in the same stateroom as the first and second guests on a space-available basis at the time of booking.
Included in the "Come Back New" sale is the highly anticipated debut of West Coast cruises aboard Royal Princess, the cruise line's largest and newest ship to sail from this region to the Mexican Riviera, California Coast and Alaska with fare deals such as:
Royal Princess to the Mexican Riviera – 7 days: $849 interior; $1,089 balcony
The "Come Back New" sale also includes cruise fare deals to various worldwide destinations, including:
Regal Princess to the Eastern Caribbean – 7 days: $699, interior; $999 balcony
Island Princess to the Panama Canal – 15 days: $2,079 interior; $2,239 balcony
Sapphire Princess to Southeast Asia – 11 days: $1,599 interior; $1,899 balcony
Regal Princess to Canada & New England – 7 days: $1,079 interior; $1,509 balcony
Grand Princess to the Hawaiian Islands – 15 days: $1,579 interior; $2,669 balcony
Guests can book a Princess MedallionClassTM vacation onboard any of Princess Cruises' MedallionClass enabled ships. The Princess OceanMedallion, included complimentary, is a wearable device that elevates the guest experience by delivering enhanced experiences and personalized service resulting in high guest satisfaction scores.
More information about the Princess Cruises "Come Back New" sale can be found at princess.com/cruisedeals.
All prices are per guest and based on double occupancy. The "Come Back New" cruise sale is available March 1, 2019 and runs through 11:59 p.m. PDT on April 30, 2019. It is available to residents of the 50 United States, Canada, Puerto Rico, Mexico, Bermuda and the District of Columbia who are 21 years of age or older.
Additional information about Princess Cruises is available through a professional travel advisor, by calling 1-800-PRINCESS (1-800-774-6237), or by visiting the company's website at princess.com.
One of the best-known names in cruising, Princess Cruises is the fastest growing international premium cruise line and tour company operating a fleet of 17 modern cruise ships, carrying two million guests each year to 380 destinations around the globe, including the Caribbean, Alaska, Panama Canal, Mexican Riviera, Europe, South America, Australia/New Zealand, the South Pacific, Hawaii, Asia, Canada/New England, Antarctica and World Cruises. A team of professional destination experts have curated 170 itineraries, ranging in length from three to 111 days and Princess Cruises is continuously recognized as "Best Cruise Line for Itineraries."
In 2017 Princess Cruises, with parent company Carnival Corporation, introduced MedallionClass Vacations enabled by the OceanMedallion, the vacation industry's most advanced wearable device, provided free to each guest sailing on a MedallionClass ship. The award-winning innovation offers the fastest way to a hassle-free, personalized vacation giving guests more time to do the things they love most. MedallionClass Vacations will be activated on five ships by the end of 2019. An activation plan will continue across the global fleet in 2020 and beyond.
Princess Cruises continues its multi-year, "Come Back New Promise" – a $450 million-dollar product innovation and cruise ship renovation campaign that will continue to enhance the line's onboard guest experience. These enhancements result in more moments of awe, lifetime memories and meaningful stories for guests to share from their cruise vacation. The product innovations include partnerships with award-winning Chef Curtis Stone; engaging entertainment inspired shows with Broadway-legend Stephen Schwartz; immersive activities for the whole family from Discovery and Animal Planet that include exclusive shore excursions to onboard activities; the ultimate sleep at sea with the award-winning Princess Luxury Bed and more.
Three new Royal-class ships are currently on order with the next new ship under construction, Sky Princess, scheduled for delivery in October 2019, followed by Enchanted Princess in June 2020. Princess previously announced that two new (LNG) ships which will be the largest ships in the Princess fleet, accommodating approximately 4,300 guests are planned for delivery in 2023 and 2025. Princess now has five ships arriving over the next six years between 2019 and 2025. The company is part of Carnival Corporation & plc (NYSE/LSE: CCL; NYSE:CUK).
Additional media information is available at princess.com/news.
Negin Kamali, 661-753-1539, nkamali@princesscruises.com
Alivia Owyoung, 661-753-1542, aowyoung@princesscruises.com
"Safe Harbor" Statement under the Private Securities Litigation Reform Act of 1995: Statements in this press release regarding Carnival Corporation (PR)'s business which are not historical facts are "forward-looking statements" that involve risks and uncertainties. For a discussion of such risks and uncertainties, which could cause actual results to differ from those contained in the forward-looking statements, see "Risk Factors" in the Company's Annual Report or Form 10-K for the most recently ended fiscal year.
AIDA Cruises is one of the fastest growing and commercially most successful tourism businesses in Germany. The company employs about 9,000 people from 40 countries on shore and on board AIDA ships.
Visit: www.aida.de
Carnival Cruise Line is the most popular cruise brand in North America and operates 25 ships designed to foster exceptionally fun and memorable vacation experiences at an outstanding value.
Visit: www.carnival.com
Costa Cruises offer the best in Italian style, hospitality and cuisine aboard the largest fleet in Europe providing dream holidays with the utmost in terms of fun and relaxation.
Visit: www.costacruise.com
Cunard is the epitome of British refinement for travelers who relish the line's impeccable White Star Service, fine dining, sophisticated adventure, and the legacy of historic voyages and transatlantic travel.
Visit: www.cunard.com
Holland America Line's premium fleet of 15 spacious, elegant mid-sized ships feature sophisticated five-star dining, extensive entertainment and activities, innovative culinary enrichment programs and compelling worldwide itineraries.
Visit: www.hollandamerica.com
P&O Cruises (UK) has a fleet of seven ships with a new ship, Britannia, being launched in March 2015; combining genuine service, a sense of occasion and attention to detail; and ensuring passengers have the holiday of a lifetime, every time.
Visit: www.pocruises.co.uk
P&O Cruises (Australia) provides a quintessential holiday experience for Australians and New Zealanders, taking them to some of the world's most idyllic and hard-to-reach places across Asia and the South Pacific.
Visit: www.pocruises.co.au
Princess is the world's third largest cruise line based on guest capacity and the company's ships are renowned for their innovative design and wide array of choices in dining, entertainment and amenities.
Visit: www.princess.com
Seabourn provides ultraluxury cruising vacations in a unique, small-ship style that focuses on genuine, intuitive service, all-suite accommodations, superb cuisine and unique experiences in destinations worldwide.
Visit: www.seabourn.com
For Carnival Corporation media inquiries and editorial photo requests, please contact:
Roger Frizzell, SVP & Chief Communications Officer, Carnival Corporation & plc
Email: rfrizzell@carnival.com
For 24-hour media inquiries and access requests, please contact:
Email: media@carnival.com
© 2019 Carnival Corporation & plc | Privacy NoticeThis site is best viewed in the latest version of Internet Explorer or Google Chrome
Corporate Timeline
World's Leading Cruise Lines
Quarterly & Semiannual Reporting
Webcasts / Presentations
Credit Ratings / Debt
Archived Information
Stock Quote / Chart
Historical Lookup
Analyst Information
Shareholder Benefit
Dividends/Split History
Committee Charters
Business Conduct & Ethics
Communicating with the Board
Leading Responsibly
Health, Environment, Safety, Security & Sustainability Policy & Governance
Business Partner Code of Conduct
Climate Change & Air Emissions
Waste Management, Reduction, Reuse & Recycling
Green Ship Design, Operations & Maintenance
ECO Exhaust Gas Cleaning Technology (ECO-ECG™)
Sustainable Workforce
Carbon Disclosure Report
Greenhouse Gas Emission Investory Certification
Our Sustainability Journey


text:
"It's just pizza," Customer arrested after lashing out at Domino's employee
GUTHRIE, Okla. - An angry Domino's Pizza customer was arrested after he allegedly got the wrong order and took his anger out on an employee.
The customer, identified by police as Milton Ray Davis, was arrested and charged with assault and battery.
It happened around 11 p.m. when the Domino's manager working at the time, Mike Merkle, got an angry phone call from the disgruntled customer.
"I apologized to him and told him, 'Hey, I'll be happy to remake your pizza, no big deal,'" Merkle said. "He started getting belligerent with me and cussing me out."
Davis took his pizza to the store, and security camera footage shows the entire shocking encounter.
"He came in the door, and slammed the pizza down and immediately started yelling, and screaming and going off the deep end," Merkle said.
Merkle refunded his order, but that wasn't enough. Davis allegedly demanded more money that he claimed he tipped the driver.
"'Give me back my $25,' something about he tipped my driver $25," Merkle said. "No, not in this town. Trust me, not in this town. There's no way. I refused."
That wasn't the response Davis was looking for, and that's when Merkle told police Davis attacked him.
"He just lost what little control he had, came around the corner, threw me in a headlock," Merkle said. "Slung me around, physically slung me around behind the counter."
After a few seconds, Davis released Merkle and continued yelling at him.
Davis almost left, but he wasn't finished. He turned around and went back, acting like he was looking for more.
"Jumped with his hands up like he was ready for me to take a swing at him." Merkle said.
But, the manager kept his cool.
"Nope, I'm good, dude," he said.
Merkle said he's dealt with angry customers before but it's never gotten physical.
"Dude, come on," he said. "It's just pizza, man."
Davis finally left, and it wasn't long before police found him and allegedly admitted what he did.
"I believe his words were, 'Sometimes, you just need to take a charge,'" said Guthrie Police Sgt. Anthony Gibbs.
Davis has pleaded not guilty to the assault charge.
"Some people get really mad over the stupidest things," Merkle said.


text:
Italy augments participation at WETEX; seeks incremental opportunities in the renewable sector
The Italian Trade Agency (ITA), the official Agency of the Italian Government which promotes the globalization of Italian firms under the aegis of the Ministry of Foreign Affairs, in collaboration with the Embassy of Italy in the UAE, presents the Italian expertise on sustainable and renewable technology at the virtual edition of Water, Energy, Technology, and Environment Exhibition (WETEX).
Today marks the official opening day of the first-ever carbon neutral 3D virtual exhibition which runs until October 28, and Amedeo Scarpa, Italian Trade Commissioner to the UAE, Oman and Pakistan shares insights on what Italy brings to the region.
This is the first year a virtual WETEX exhibition has been held; how has the interest been from Italian companies to participate?
This is the 14th year that the Italian Trade Agency has a pavilion – albeit virtually this year – and we are hosting 31 exhibitors, an increase from 22 in 2019. Although 2020 has undoubtedly raised challenges due to the pandemic, it's still a strong market. We're excited for this year's format of WETEX 2020. We received a lot of interest – removing the need for a physical presence has actually allowed a larger and wider range of companies from Italy to participate. Italian companies are keen to reap the opportunities of cooperation offered by the UAE and the Gulf region in terms of supply of goods and technology transfer as well as of provision of consultancy services.
The 3D virtual environment will be equipped with an exhibition area, stands and booths. There will be a live chat facility integrated into the virtual platform so attendees can interact directly with exhibitors.
What products and services will you have on offer?
Along with the 31 companies that we carefully selected and have brought to the fair, we will showcase the latest Italian advancements in sustainable and renewable technology, covering a cross-section of the country's expertise in the sector. These developments on water treatment, recycling, solar energy generation and renewables, air control and environmental protection systems, and green building systems have contributed to Italy's recent energy savings' great performance with a reduction of 43 million tonnes carbon emissions last year, which made us among the best EU and world performers.
I believe that Italian expertise and technology advancement in these fields perfectly match the UAE and Region's strategy to reduce energy consumption by preserving natural resources and finding energy-efficient renewable solutions. In this respect, flexibility, creativity, innovation and quality – that are at the forefront of Italy's technological capabilities and know-how – can clearly provide a great contribution to the efforts of finding new solutions, processes, products and business models the UAE and the Region are looking for.
How buoyant is the sustainable and renewable technology market in the UAE?
The renewable energy sector in the UAE has not been adversely affected by the pandemic. In fact, being one of the UAE's preferred suppliers for renewable energy sector components in the last three years, we (ITA Dubai) has witnessed a notable increase of 16.47% in exports in the first trimester of 2020.
The UAE remains committed to advancing sustainability across all sectors of the country's economy – as seen in the set target to achieve at least half of its energy needs from clean energy sources by 2050, offering many business opportunities. DEWA has some exciting projects on the horizon including the Green Hydrogen project, the first solar-driven hydrogen electrolysis facility in the Middle East and North Africa; and the Shams Dubai initiative to encourage customers to install solar photovoltaic solar panels to generate electricity and connect them to the power grid.
The Emirates and its neighboring countries are re-defining their energy and environmental policies. In this context, the development and deployment of transformational technologies for cleaner and more efficient energy is fundamental to addressing economic diversification challenges and to promote long-term prosperity. Moreover, the thematic issues at the core of Expo2020 (opportunity, mobility and sustainability) clearly go towards addressing the "commons" the Region and the whole world are facing today.
What are the existing collaborations in sustainability have been made between the UAE and Italy? Are there any plans or new developments in the pipeline?
We are involved in many areas of collaborations. One of them is the deployment of smart grids and second-generation smart metering systems. CESI, a technical consulting and engineering company from Italy, signed a contract with Dubai Electricity and Water Authority (DEWA) to provide consultancy services related to connecting renewable energy generators to the DEWA grid; and this smart grid connection agreement even expanded to other countries in the GCC. Italy's energy company ENEL and DEWA work together to increase knowledge sharing in smart grids and network digitalisation. These are key enabling technologies, that will allow consumers to become real active actors of the energy systems and will provide them with completely new services (e.g. prepaid contracts of electricity, similar to the prepaid telecomm mobile contracts). Italian Ambienthesis and Sharjah company Bee'Ah enetered a joint venture for the use of green technologies in the waste treatment and renewable energy production.
Two years ago, the two Governments also signed a MoU to promote joint projects, favours experts exchanges and implements capacity building in the field of climate change and sustainable development. And we aim to further strengthen this cooperation at most-awaited fair Expo 2020, where the Italian Pavillion is being built using recycled materials.
Today's Oil and Gas Update – IGAS Energy plc; Mosman Oil & Gas and more…
Asad Umar, KP CM discuss provincial projects under CPEC


text:
Landing Craft Air Cushion (LCAC) (deutsch: "Landungsfahrzeug Luftkissen") ist ein Typ von Luftkissen-Landungsbooten der United States Navy.

Entwicklung
Die LCAC wurden 1980 entwickelt und 1989 im ersten Einsatzverband eingesetzt. 1991 im Zweiten Golfkrieg war der bisher größte Einsatz von LCAC. 1993 landeten sie vor laufenden Kameras an den Küsten von Somalia.

LCAC erwiesen sich durch ihre Fähigkeit, rasch und gezielt große Mengen Fahrzeuge und Material unabhängig von üblichen Verkehrswegen anzulanden, auch als ideales Hilfsmittel der Katastrophenhilfe in Küstengebieten. Zu Beginn des Jahres 2005 wurden sie in Sri Lanka zur Verteilung von Hilfsgütern nach dem Seebeben im Indischen Ozean 2004 eingesetzt. Anfang September 2005 landeten mit Lastwagen voller Hilfsgüter beladene LCAC der USS Bataan (LHD-5) am Strand von Biloxi, Mississippi zur Unterstützung der Hilfsmaßnahmen nach dem Hurrikan Katrina.

Insgesamt hat die US-Marine 91 LCAC im Bestand. 74 davon sind im aktiven Dienst, die restlichen in Reserve oder Wartung. Zugeteilt sind die aktiven LCAC entweder der Assault Craft Unit 4 auf der Naval Amphibious Base Little Creek in Virginia Beach, Virginia (Atlantikflotte) oder der Assault Craft Unit 5 im Marine Corps Base Camp Pendleton in Coronado, Kalifornien (Pazifikflotte).

Die amphibischen Mehrzweckschiffe der US-Marine können je nach Typ (LHD, LPD, LSD) zwei, drei oder gar vier LCAC in ihrem Welldeck aufnehmen.

Der große Vorteil der LCAC ist nicht nur die höhere Geschwindigkeit gegenüber normalen Landungsbooten, sondern auch die Tatsache, dass sie etwa 80 % aller Küsten erreichen und Truppen anlanden können, ohne dass diese durchs Wasser waten müssen, im Vergleich zu etwa 17 % bei regulären Booten.

Luftkissenboote können auch über Eis und den Strand hinweg operieren. Es kann so die klassische unsichere Landungszone in der Brandung wie beispielsweise bei den Landungen im Zweiten Weltkrieg vermieden werden; Truppen und Ausrüstung können so gleich zu einem Ort landeinwärts transportiert werden, wobei bei einer Gesamthöhe des Skirts (Gummischürze) von etwa 1,30 m Hindernisse bis zu 0,30 m Höhe überfahren werden können.

Dieses Konzept, schweres Gerät von hoher See bis zu 80 Kilometer weit direkt auf den Strand zu bringen, heißt OTH (over the horizon) und konnte zuvor nur mit Hubschraubern durchgeführt werden, und dies auch nur beschränkt.

Technische Daten

 Besatzung: 5
 Abmessungen
 Länge: 26,4 m
 Breite: 14,3 m
 Einsatzverdrängung: 200 t
 Geschwindigkeit: 40 kn mit Fracht, sonst bis zu ~70 Knoten
 Antriebsanlage:
 Leistung:  4 Avco-Lycoming-Gasturbinen, 12.280 PS
 Propeller: 2 Antriebs- und 4 Hubpropeller
 Verbrauch: 3800 Liter (1000 Gallonen) / Stunde
 Reichweite: 200 Meilen mit 40 Knoten, 300 Meilen mit 35 Knoten
 Bewaffnung:
 2 × 12,7-mm-MGs Browning M2
 2 × 40-mm-Maschinengranatwerfer Mk 19
 Fracht: 60 bis 75 Tonnen
 Fahrzeuge pro Ladung:
 12 × HMMWVs oder
 4 × LAV-25s oder
 2 × AAV7A1 oder
 1 × M1A1 oder
 4 × M923 oder
 2 × 5-Tonnen-LKWs M923, 2 × M198-Haubitzen und 2 × HMMWVs

Zukünftige Entwicklung
Als Weiterentwicklung war das Heavy Lift Landing Craft Air Cushion (HLCAC) mit 144 Tonnen Ladekapazität und einer um 33 % größeren Ladefläche angedacht. Damit können zwei M1A1 oder zehn LAVs transportiert werden.

Aktuell (2011) wurde das Projekt HLCAC aufgegeben und es gibt Planungen und einen Vertrag über die Beschaffung von 72 Ship-to-Shore-Connector-Luftkissenfahrzeugen. Diese sind in einigen Punkten weiterentwickelte LCAC. Unter anderen stärkere und effizientere Triebwerke, ein Zweimann-Cockpit, die Verwendung von leichteren Materialien beim Bau sowie eine höhere Geschwindigkeit und höhere Nutzlast.

Siehe auch
Amphibische Kriegsführung

Weblinks

FAS.org – LCAC

Militärschiffsklasse (Vereinigte Staaten)
Schiffsklasse für die amphibische Kriegsführung
Luftkissenfahrzeug

redpajama_set_name: RedPajamaWikipedia


text:
// Copyright 2014 Google Inc. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

/***** stenotype *****
 *
 * stenotype is a mechanism for quickly dumping raw packets to disk.  It aims to
 * have a simple interface (no file rotation:  that's left as an exercise for
 * the reader) while being very powerful.
 *
 * stenotype uses a NIC->disk pipeline specifically designed to provide as fast
 * an output to disk as possible while just using the kernel's built-in
 *  mechanisms.
 *
 * 1) NIC -> RAM
 * stenotype uses MMAP'd AF_PACKET with 1MB blocks and a high timeout to offload
 * writing packets and deciding their layout to the kernel.  The kernel packs
 * all the packets it can into 1MB, then lets the userspace process know there's
 * a block available in the MMAP'd ring buffer.  Nicely, it guarantees no
 * overruns (packets crossing the 1MB boundary) and good alignment to memory
 * pages.
 *
 * 2) RAM -> Disk
 * Since the kernel already gave us a single 1MB block of packets that's nicely
 * aligned, we can O_DIRECT write it straight to disk.  This avoids any
 * additional copying or kernel buffering.  To keep sequential reads going
 * strong, we do all disk IO asynchronously via io_submit (which works
 * specifically for O_DIRECT files... joy!).  Since the data is being written to
 * disk asynchronously, we  use the time it's writing to disk to do our own
 * in-memory processing and indexing.
 *
 * There are N (flag-specified) async IO operations available... once we've used
 * up all N, we block on a used one finishing, then reuse it.
 * The whole pipeline consists of:
 *   - kernel gives userspace a 1MB block of packets
 *   - userspace iterates over packets in block, updates any indexes
 *   - userspace starts async IO operation to write block to disk
 *   - after N async IO operations are submitted, we synchronously wait for the
 *     least recent one to finish.
 *   - when an async IO operation finishes, we release the 1MB block back to the
 *     kernel to write more packets.
 */

#include <errno.h>            // errno
#include <fcntl.h>            // O_*
#include <grp.h>              // getgrnam()
#include <linux/if_packet.h>  // AF_PACKET, sockaddr_ll
#include <poll.h>             // POLLIN
#include <pthread.h>          // pthread_sigmask()
#include <pwd.h>              // getpwnam()
#include <sched.h>            // sched_setaffinity()
#include <seccomp.h>          // scmp_filter_ctx, seccomp_*(), SCMP_*
#include <signal.h>           // sigaction(), SIGINT, SIGTERM
#include <string.h>           // strerror()
#include <sys/prctl.h>        // prctl(), PR_SET_*
#include <sys/resource.h>     // setpriority(), PRIO_PROCESS
#include <sys/socket.h>       // socket()
#include <sys/stat.h>         // umask()
#include <sys/syscall.h>      // syscall(), SYS_gettid
#include <unistd.h>           // setuid(), setgid(), getpagesize()

#include <string>
#include <sstream>
#include <thread>

// Due to some weird interactions with <argp.h>, <string>, and --std=c++0x, this
// header MUST be included AFTER <string>.
#include <argp.h>  // argp_parse()

#include "aio.h"
#include "index.h"
#include "packets.h"
#include "util.h"

namespace {

std::string flag_iface = "eth0";
std::string flag_filter = "";
std::string flag_dir = "";
int64_t flag_count = -1;
int32_t flag_blocks = 2048;
int32_t flag_aiops = 128;
int64_t flag_filesize_mb = 4 << 10;
int32_t flag_threads = 1;
int64_t flag_fileage_sec = 60;
int64_t flag_blockage_sec = 10;
int64_t flag_stats_blocks = 100;
int64_t flag_stats_sec = 60;
uint64_t flag_blocksize_kb = 1024;
uint16_t flag_fanout_type =
// Use rollover as the default if it's available.
#ifdef PACKET_FANOUT_FLAG_ROLLOVER
    PACKET_FANOUT_LB | PACKET_FANOUT_FLAG_ROLLOVER;
#else
    PACKET_FANOUT_LB;
#endif

int64_t blocks_per_file = (flag_filesize_mb * 1024) / flag_blocksize_kb;
uint16_t flag_fanout_id = 0;
std::string flag_uid;
std::string flag_gid;
bool flag_index = true;
std::string flag_seccomp = "kill";
int flag_index_nicelevel = 0;
int flag_preallocate_file_mb = 0;
bool flag_watchdogs = true;
bool flag_promisc = true;
std::string flag_testimony;

int ParseOptions(int key, char* arg, struct argp_state* state) {
  switch (key) {
    case 'v':
      st::logging_verbose_level++;
      break;
    case 'q':
      st::logging_verbose_level--;
      break;
    case 300:
      flag_iface = arg;
      break;
    case 301:
      flag_dir = arg;
      break;
    case 302:
      flag_count = atoi(arg);
      break;
    case 303:
      flag_blocks = atoi(arg);
      break;
    case 304:
      flag_aiops = atoi(arg);
      break;
    case 305:
      flag_filesize_mb = atoi(arg);
      blocks_per_file = (flag_filesize_mb * 1024) / flag_blocksize_kb;
      break;
    case 306:
      flag_threads = atoi(arg);
      break;
    case 307:
      flag_fileage_sec = atoi(arg);
      break;
    case 308:
      flag_fanout_type = atoi(arg);
      break;
    case 309:
      flag_fanout_id = atoi(arg);
      break;
    case 310:
      flag_uid = arg;
      break;
    case 311:
      flag_gid = arg;
      break;
    case 312:
      flag_index = false;
      break;
    case 313:
      flag_index_nicelevel = atoi(arg);
      break;
    case 314:
      flag_filter = arg;
      break;
    case 315:
      flag_seccomp = arg;
      break;
    case 316:
      flag_preallocate_file_mb = atoi(arg);
      break;
    case 317:
      flag_watchdogs = false;
      break;
    case 318:
      flag_testimony = arg;
      break;
    case 319:
      flag_blockage_sec = atoi(arg);
      break;
    case 320:
      flag_blocksize_kb = atoll(arg);
      blocks_per_file = (flag_filesize_mb * 1024) / flag_blocksize_kb;
      break;
    case 321:
      flag_promisc = false;
      break;
    case 322:
      flag_stats_blocks = atoi(arg);
      break;
    case 323:
      flag_stats_sec = atoi(arg);
      break;
  }
  return 0;
}

void ParseOptions(int argc, char** argv) {
  const char* s = "STRING";
  const char* n = "NUM";
  struct argp_option options[] = {
      {0, 'v', 0, 0, "Verbose logging, may be given multiple times"},
      {0, 'q', 0, 0, "Quiet logging.  Each -q counteracts one -v"},
      {"iface", 300, s, 0, "Interface to read packets from"},
      {"dir", 301, s, 0, "Directory to store packet files in"},
      {"count", 302, n, 0,
       "Total number of packets to read, -1 to read forever"},
      {"blocks", 303, n, 0, "Total number of blocks to use, each is 1MB"},
      {"aiops", 304, n, 0, "Max number of async IO operations"},
      {"filesize_mb", 305, n, 0, "Max file size in MB before file is rotated"},
      {"threads", 306, n, 0, "Number of parallel threads to read packets with"},
      {"fileage_sec", 307, n, 0, "Files older than this many secs are rotated"},
      {"fanout_type", 308, n, 0, "TPACKET_V3 fanout type to fanout packets"},
      {"fanout_id", 309, n, 0, "If fanning out across processes, set this"},
      {"uid", 310, n, 0, "Drop privileges to this user"},
      {"gid", 311, n, 0, "Drop privileges to this group"},
      {"no_index", 312, 0, 0, "Do not compute or write indexes"},
      {"index_nicelevel", 313, n, 0, "Nice level of indexing threads"},
      {"filter", 314, s, 0,
       "BPF compiled filter used to filter which packets "
       "will be captured. This has to be a compiled BPF in hexadecimal, which "
       "can be obtained from a human readable filter expression using the "
       "provided compile_bpf.sh script."},
      {"seccomp", 315, s, 0, "Seccomp style, one of 'none', 'trace', 'kill'."},
      {"preallocate_file_mb", 316, n, 0,
       "When creating new files, preallocate to this many MB"},
      {"no_watchdogs", 317, 0, 0, "Don't start any watchdogs"},
#ifdef TESTIMONY
      {"testimony", 318, n, 0, "Testimony socket to use"},
#else
      {"testimony", 318, n, 0, "TESTIMONY NOT COMPILED INTO THIS BINARY"},
#endif
      {"blockage_sec", 319, n, 0, "A block is written at least every N secs"},
      {"blocksize_kb", 320, n, 0, "Size of a block, in KB"},
      {"no_promisc", 321, 0, 0, "Don't set promiscuous mode"},
      {"stats_blocks", 322, n, 0, "Size block stats will be displayed, requires verbose, default 100, 0 disables"},
      {"stats_sec", 323, n, 0, "Seconds stats will be displayed, requires verbose, default 60, 0 disables"},
      {0},
  };
  struct argp argp = {options, &ParseOptions};
  argp_parse(&argp, argc, argv, 0, 0, 0);
}

}  // namespace

namespace st {

// These two synchronization mechanisms are used to coordinate when to
// chroot/chuid so it's after when the threads create their sockets but before
// they start writing files.
Notification main_complete;

void DropPrivileges() {
  LOG(INFO) << "Dropping privileges";
  if (getgid() == 0 || flag_gid != "") {
    if (flag_gid == "") {
      flag_gid = "nogroup";
    }
    LOG(INFO) << "Dropping privileges from " << getgid() << " to GID "
              << flag_gid;
    auto group = getgrnam(flag_gid.c_str());
    CHECK(group != NULL) << "Unable to get info for group " << flag_gid;
    CHECK_SUCCESS(Errno(setgid(group->gr_gid)));
  } else {
    VLOG(1) << "Staying with GID=" << getgid();
  }
  if (getuid() == 0 || flag_uid != "") {
    if (flag_uid == "") {
      flag_uid = "nobody";
    }
    LOG(INFO) << "Dropping privileges from " << getuid() << " to UID "
              << flag_uid;
    auto passwd = getpwnam(flag_uid.c_str());
    CHECK(passwd != NULL) << "Unable to get info for user " << flag_uid;
    flag_uid = std::to_string(passwd->pw_uid);
    CHECK_SUCCESS(Errno(initgroups(flag_uid.c_str(), getgid())));
    CHECK_SUCCESS(Errno(setuid(passwd->pw_uid)));
  } else {
    VLOG(1) << "Staying with UID=" << getuid();
  }
}

#define SECCOMP_RULE_ADD(...) \
  CHECK_SUCCESS(NegErrno(seccomp_rule_add(__VA_ARGS__)))

void CommonPrivileges(scmp_filter_ctx ctx) {
  // Very common operations, including sleeping, logging, and getting time.
  SECCOMP_RULE_ADD(ctx, SCMP_ACT_ALLOW, SCMP_SYS(write), 0);
  SECCOMP_RULE_ADD(ctx, SCMP_ACT_ALLOW, SCMP_SYS(clock_nanosleep), 0);
  SECCOMP_RULE_ADD(ctx, SCMP_ACT_ALLOW, SCMP_SYS(clock_gettime), 0);
  SECCOMP_RULE_ADD(ctx, SCMP_ACT_ALLOW, SCMP_SYS(gettimeofday), 0);
  SECCOMP_RULE_ADD(ctx, SCMP_ACT_ALLOW, SCMP_SYS(read), 0);
  // Mutex and other synchronization.
  SECCOMP_RULE_ADD(ctx, SCMP_ACT_ALLOW, SCMP_SYS(set_robust_list), 0);
  SECCOMP_RULE_ADD(ctx, SCMP_ACT_ALLOW, SCMP_SYS(futex), 0);
  SECCOMP_RULE_ADD(ctx, SCMP_ACT_ALLOW, SCMP_SYS(restart_syscall), 0);
  // File operations.
  SECCOMP_RULE_ADD(ctx, SCMP_ACT_ALLOW, SCMP_SYS(prlimit64), 0);
  SECCOMP_RULE_ADD(ctx, SCMP_ACT_ALLOW, SCMP_SYS(openat), 0);
  SECCOMP_RULE_ADD(ctx, SCMP_ACT_ALLOW, SCMP_SYS(fallocate), 0);
  SECCOMP_RULE_ADD(ctx, SCMP_ACT_ALLOW, SCMP_SYS(ftruncate), 0);
  SECCOMP_RULE_ADD(ctx, SCMP_ACT_ALLOW, SCMP_SYS(fstat), 0);
#ifdef __NR_fstat64
  SECCOMP_RULE_ADD(ctx, SCMP_ACT_ALLOW, SCMP_SYS(fstat64), 0);
#endif
  SECCOMP_RULE_ADD(ctx, SCMP_ACT_ALLOW, SCMP_SYS(close), 0);
  // Signal handling and propagation to threads.
  SECCOMP_RULE_ADD(ctx, SCMP_ACT_ALLOW, SCMP_SYS(rt_sigaction), 0);
  SECCOMP_RULE_ADD(ctx, SCMP_ACT_ALLOW, SCMP_SYS(rt_sigprocmask), 0);
  SECCOMP_RULE_ADD(ctx, SCMP_ACT_ALLOW, SCMP_SYS(rt_sigreturn), 0);
  SECCOMP_RULE_ADD(ctx, SCMP_ACT_ALLOW, SCMP_SYS(tgkill), 0);
  // Malloc/ringbuffer.
#ifdef __NR_mmap
  SECCOMP_RULE_ADD(ctx, SCMP_ACT_ALLOW, SCMP_SYS(mmap), 0);
#endif
#ifdef __NR_mmap2
  SECCOMP_RULE_ADD(ctx, SCMP_ACT_ALLOW, SCMP_SYS(mmap2), 0);
#endif
  SECCOMP_RULE_ADD(ctx, SCMP_ACT_ALLOW, SCMP_SYS(munmap), 0);
  // Malloc.
  SECCOMP_RULE_ADD(ctx, SCMP_ACT_ALLOW, SCMP_SYS(mprotect), 0);
  SECCOMP_RULE_ADD(ctx, SCMP_ACT_ALLOW, SCMP_SYS(madvise), 0);
  SECCOMP_RULE_ADD(ctx, SCMP_ACT_ALLOW, SCMP_SYS(brk), 0);
  // Exiting threads.
  SECCOMP_RULE_ADD(ctx, SCMP_ACT_ALLOW, SCMP_SYS(exit), 0);
#ifdef __NR_sigreturn
  SECCOMP_RULE_ADD(ctx, SCMP_ACT_ALLOW, SCMP_SYS(sigreturn), 0);
#endif
}

scmp_filter_ctx kSkipSeccomp = scmp_filter_ctx(-1);

scmp_filter_ctx SeccompCtx() {
  if (flag_seccomp == "none") return kSkipSeccomp;
  if (flag_seccomp == "trace") return seccomp_init(SCMP_ACT_TRACE(1));
  if (flag_seccomp == "kill") return seccomp_init(SCMP_ACT_KILL);
  LOG(FATAL) << "invalid --seccomp flag: " << flag_seccomp;
  return NULL;  // unreachable
}

void DropCommonThreadPrivileges() {
  scmp_filter_ctx ctx = SeccompCtx();
  if (ctx == kSkipSeccomp) return;
  CHECK(ctx != NULL);
  CommonPrivileges(ctx);
  CHECK_SUCCESS(NegErrno(seccomp_load(ctx)));
  seccomp_release(ctx);
}

void DropIndexThreadPrivileges() {
  scmp_filter_ctx ctx = SeccompCtx();
  if (ctx == kSkipSeccomp) return;
  CHECK(ctx != NULL);
  CommonPrivileges(ctx);
#ifdef __NR_getrlimit
  SECCOMP_RULE_ADD(ctx, SCMP_ACT_ALLOW, SCMP_SYS(getrlimit), 0);
#endif
  SECCOMP_RULE_ADD(ctx, SCMP_ACT_ALLOW, SCMP_SYS(rename), 0);
  SECCOMP_RULE_ADD(ctx, SCMP_ACT_ALLOW, SCMP_SYS(open), 1,
                   SCMP_A1(SCMP_CMP_EQ, O_WRONLY | O_CREAT | O_TRUNC));
  SECCOMP_RULE_ADD(ctx, SCMP_ACT_ALLOW, SCMP_SYS(open), 1,
                   SCMP_A1(SCMP_CMP_EQ, O_RDWR | O_CREAT | O_TRUNC));
  CHECK_SUCCESS(NegErrno(seccomp_load(ctx)));
  seccomp_release(ctx);
}

void DropPacketThreadPrivileges() {
  scmp_filter_ctx ctx = SeccompCtx();
  if (ctx == kSkipSeccomp) return;
  CHECK(ctx != NULL);
  CommonPrivileges(ctx);
  SECCOMP_RULE_ADD(ctx, SCMP_ACT_ALLOW, SCMP_SYS(io_setup), 0);
  SECCOMP_RULE_ADD(ctx, SCMP_ACT_ALLOW, SCMP_SYS(io_submit), 0);
  SECCOMP_RULE_ADD(ctx, SCMP_ACT_ALLOW, SCMP_SYS(io_getevents), 0);
  SECCOMP_RULE_ADD(ctx, SCMP_ACT_ALLOW, SCMP_SYS(poll), 1,
                   SCMP_A1(SCMP_CMP_EQ, POLLIN));
  SECCOMP_RULE_ADD(
      ctx, SCMP_ACT_ALLOW, SCMP_SYS(open), 2,
      SCMP_A1(SCMP_CMP_EQ, O_WRONLY | O_CREAT | O_DSYNC | O_DIRECT),
      SCMP_A2(SCMP_CMP_EQ, 0600));
  SECCOMP_RULE_ADD(ctx, SCMP_ACT_ALLOW, SCMP_SYS(getsockopt), 0);
  SECCOMP_RULE_ADD(ctx, SCMP_ACT_ALLOW, SCMP_SYS(rename), 0);
#ifdef TESTIMONY
  if (!flag_testimony.empty()) {
    SECCOMP_RULE_ADD(ctx, SCMP_ACT_ALLOW, SCMP_SYS(recvfrom), 0);
    SECCOMP_RULE_ADD(ctx, SCMP_ACT_ALLOW, SCMP_SYS(sendto), 0);
  }
#endif
  CHECK_SUCCESS(NegErrno(seccomp_load(ctx)));
  seccomp_release(ctx);
}

#undef SECCOMP_RULE_ADD

Error SetAffinity(int cpu) {
  cpu_set_t cpus;
  CPU_ZERO(&cpus);
  CPU_SET(cpu, &cpus);
  return Errno(sched_setaffinity(0, sizeof(cpus), &cpus));
}

void WriteIndexes(int thread, st::ProducerConsumerQueue* write_index) {
  VLOG(1) << "Starting WriteIndexes thread " << thread;
  Watchdog dog("WriteIndexes thread " + std::to_string(thread),
               (flag_watchdogs ? flag_fileage_sec * 3 : -1));
  pid_t tid = syscall(SYS_gettid);
  LOG_IF_ERROR(Errno(setpriority(PRIO_PROCESS, tid, flag_index_nicelevel)),
               "setpriority");
  DropIndexThreadPrivileges();
  while (true) {
    VLOG(1) << "Waiting for index";
    Index* i = reinterpret_cast<Index*>(write_index->Get());
    VLOG(1) << "Got index " << int64_t(i);
    if (i == NULL) {
      break;
    }
    LOG_IF_ERROR(i->Flush(), "index flush");
    VLOG(1) << "Wrote index " << int64_t(i);
    delete i;
    dog.Feed();
  }
  VLOG(1) << "Exiting write index thread";
}

bool run_threads = true;

void HandleSignals(int sig) {
  if (run_threads) {
    LOG(INFO) << "Got signal " << sig << ", stopping threads";
    run_threads = false;
  }
}

void HandleSignalsThread() {
  VLOG(1) << "Handling signals";
  struct sigaction handler;
  handler.sa_handler = &HandleSignals;
  sigemptyset(&handler.sa_mask);
  handler.sa_flags = 0;
  sigaction(SIGINT, &handler, NULL);
  sigaction(SIGTERM, &handler, NULL);
  DropCommonThreadPrivileges();
  main_complete.WaitForNotification();
  VLOG(1) << "Signal handling done";
}

void RunThread(int thread, st::ProducerConsumerQueue* write_index,
               Packets* v3) {
  if (flag_threads > 1) {
    LOG_IF_ERROR(SetAffinity(thread), "set affinity");
  }
  Watchdog dog("Thread " + std::to_string(thread),
               (flag_watchdogs ? flag_fileage_sec * 2 : -1));

  std::unique_ptr<Packets> cleanup(v3);

  DropPacketThreadPrivileges();
  LOG(INFO) << "Thread " << thread << " starting to process packets";

  // Set up file writing, if requested.
  Output output(flag_aiops);

  // All dirnames are guaranteed to end with '/'.
  std::string file_dirname = flag_dir + "PKT" + std::to_string(thread) + "/";
  std::string index_dirname = flag_dir + "IDX" + std::to_string(thread) + "/";

  Packet p;
  int64_t micros = GetCurrentTimeMicros();
  CHECK_SUCCESS(
      output.Rotate(file_dirname, micros, flag_preallocate_file_mb << 20));
  Index* index = NULL;
  if (flag_index) {
    index = new Index(index_dirname, micros);
  } else {
    LOG(ERROR) << "Indexing turned off";
  }

  int64_t start = GetCurrentTimeMicros();
  int64_t lastlog = 0;
  int64_t blocks = 0;
  int64_t block_offset = 0;
  for (int64_t remaining = flag_count; remaining != 0 && run_threads;) {
    CHECK_SUCCESS(output.CheckForCompletedOps(false));
    int64_t current_micros = GetCurrentTimeMicros();

    // Rotate file if necessary.
    int64_t current_file_age_secs =
        (current_micros - micros) / kNumMicrosPerSecond;
    if (block_offset == blocks_per_file ||
        current_file_age_secs > flag_fileage_sec) {
      VLOG(1) << "Rotating file " << micros << " with " << block_offset
              << " blocks";
      // File size got too big, rotate file.
      micros = current_micros;
      block_offset = 0;
      CHECK_SUCCESS(
          output.Rotate(file_dirname, micros, flag_preallocate_file_mb << 20));
      if (flag_index) {
        write_index->Put(index);
        index = new Index(index_dirname, micros);
      }
    }
    // Read in a new block from AF_PACKET.
    Block b;
    CHECK_SUCCESS(v3->NextBlock(&b, kNumMillisPerSecond));
    if (b.Empty()) {
      continue;
    }

    // Index all packets if necessary.
    if (flag_index) {
      for (; remaining != 0 && b.Next(&p); remaining--) {
        index->Process(p, block_offset * flag_blocksize_kb * 1024);
      }
    }
    blocks++;
    block_offset++;

    // Log stats every 100 blocks or at least 1/minute.
    if ( (flag_stats_blocks != 0 && blocks % flag_stats_blocks == 0) ||
        (flag_stats_sec != 0 &&
         lastlog < current_micros - flag_stats_sec * kNumMicrosPerSecond) ) {
      lastlog = current_micros;
      double duration = (current_micros - start) * 1.0 / kNumMicrosPerSecond;
      Stats stats;
      Error stats_err = v3->GetStats(&stats);
      if (SUCCEEDED(stats_err)) {
          uint64_t mb = (blocks * flag_blocksize_kb) / 1024;
        LOG(INFO) << "Thread " << thread << " stats: MB=" << mb
                  << " secs=" << duration << " MBps=" << (mb / duration)
                  << " " << stats.String();
      } else {
        LOG(ERROR) << "Unable to get stats: " << *stats_err;
      }
    }

    // Start an async write of the current block.  Could block
    // waiting for the write 'aiops' writes ago.
    CHECK_SUCCESS(output.Write(&b));
    dog.Feed();
  }
  VLOG(1) << "Finishing thread " << thread;
  // Write out the last index.
  if (flag_index) {
    write_index->Put(index);
  }
  // Close last open file.
  CHECK_SUCCESS(output.Flush());
  LOG(INFO) << "Finished thread " << thread << " successfully";
}

int Main(int argc, char** argv) {
  LOG_IF_ERROR(Errno(prctl(PR_SET_PDEATHSIG, SIGTERM)), "prctl PDEATHSIG");
  ParseOptions(argc, argv);
  VLOG(1) << "Stenotype running with these arguments:";
  for (int i = 0; i < argc; i++) {
    VLOG(1) << i << ":\t\"" << argv[i] << "\"";
  }
  LOG(INFO) << "Starting, page size is " << getpagesize();

  // Sanity check flags and setup options.
  CHECK(flag_filesize_mb <= 4 << 10);
  CHECK(flag_filesize_mb > 1);
  CHECK(flag_filesize_mb >= flag_aiops);
  CHECK(flag_blocks >= 16);  // arbitrary lower limit.
  CHECK(flag_threads >= 1);
  CHECK(flag_aiops <= flag_blocks);
  CHECK(flag_dir != "");
  CHECK(flag_blockage_sec <= flag_fileage_sec);
  CHECK(flag_blockage_sec > 0);
  CHECK(flag_fileage_sec % flag_blockage_sec == 0);
  CHECK(flag_blocksize_kb >= 10);
  CHECK(flag_blocksize_kb * 1024 >= (uint64_t)(getpagesize()));
  CHECK((flag_blocksize_kb * 1024) % (uint64_t)(getpagesize()) == 0);
  if (flag_dir[flag_dir.size() - 1] != '/') {
    flag_dir += "/";
  }

  // Before we drop any privileges, set up our sniffing sockets.
  // We have to do this before calling DropPrivileges, which does a
  // setuid/setgid and could lose us the ability to do this at a later date.

  std::vector<Packets*> sockets;
  for (int i = 0; i < flag_threads; i++) {
    if (flag_testimony.empty()) {
      LOG(INFO) << "Setting up AF_PACKET sockets for packet reading";
      int socktype = SOCK_RAW;
      struct tpacket_req3 options;
      memset(&options, 0, sizeof(options));
      options.tp_block_size = flag_blocksize_kb * 1024;
      options.tp_block_nr = flag_blocks;
      options.tp_frame_size = flag_blocksize_kb * 1024;  // doesn't matter
      options.tp_frame_nr = 0;                           // computed for us.
      options.tp_retire_blk_tov = flag_blockage_sec * kNumMillisPerSecond - 1;

      // Set up AF_PACKET packet reading.
      PacketsV3::Builder builder;
      CHECK_SUCCESS(builder.SetUp(socktype, options));
      CHECK_SUCCESS(builder.SetPromisc(flag_promisc));
      int fanout_id = getpid();
      if (flag_fanout_id > 0) {
        fanout_id = flag_fanout_id;
      }
      if (flag_fanout_id > 0 || flag_threads > 1) {
        CHECK_SUCCESS(builder.SetFanout(flag_fanout_type, fanout_id));
      }
      if (!flag_filter.empty()) {
        CHECK_SUCCESS(builder.SetFilter(flag_filter));
      }
      Packets* v3;
      CHECK_SUCCESS(builder.Bind(flag_iface, &v3));
      sockets.push_back(v3);
    } else {
#ifdef TESTIMONY
      LOG(INFO) << "Connecting to testimony socket for packet reading";
      testimony t;
      CHECK_SUCCESS(NegErrno(testimony_connect(&t, flag_testimony.c_str())));
      CHECK(flag_threads == testimony_conn(t)->fanout_size)
          << "--threads does not match testimony fanout size";
      CHECK(testimony_conn(t)->block_size == flag_blocksize_kb * 1024)
          << "Testimony does not supply blocks of size " << flag_blocksize_kb
          << "KB";
      testimony_conn(t)->fanout_index = i;
      CHECK_SUCCESS(NegErrno(testimony_init(t)));
      sockets.push_back(new TestimonyPackets(t));
#else
      LOG(FATAL) << "invalid --testimony flag, testimony not compiled in";
#endif
    }
  }

  // To be safe, also set umask before any threads are created.
  umask(0077);

  // Now that we have sockets, drop privileges.
  // We HAVE to do this before we start any threads, since it's unclear whether
  // setXid will set the IDs for the all process threads or just the current
  // one.  This should also be done before signal masking, because apparently
  // sometimes Linux sends a SIGSETXID signal to threads during this, and if
  // that is ignored setXid will hang forever.
  DropPrivileges();

  // Start a thread whose sole purpose is to handle signals.
  // Signal handling in a multi-threaded application is HARD.  This binary
  // wants to handle signals very simply:  one thread catches SIGINT/SIGTERM and
  // sets a bool accordingly.  However, Linux will deliver the signal to one
  // (random) thread.  How to handle this?  First, we create the one single
  // thread that is going to get signals...
  std::thread signal_thread(&HandleSignalsThread);
  signal_thread.detach();
  // ... Then, we block those signals from being handled by this thread or any
  // of its children.  All other threads MUST be created after this.
  sigset_t sigset;
  sigemptyset(&sigset);
  sigaddset(&sigset, SIGINT);
  sigaddset(&sigset, SIGTERM);
  CHECK_SUCCESS(Errno(pthread_sigmask(SIG_BLOCK, &sigset, NULL)));

  // Now, we can finally start the threads that read in packets, index them, and
  // write them to disk.
  auto write_indexes = new st::ProducerConsumerQueue[flag_threads];
  VLOG(1) << "Starting writing threads";
  std::vector<std::thread*> threads;
  for (int i = 0; i < flag_threads; i++) {
    VLOG(1) << "Starting thread " << i;
    threads.push_back(
        new std::thread(&RunThread, i, &write_indexes[i], sockets[i]));
  }

  // To avoid blocking on index writes, each writer thread has a secondary
  // thread just for creating and writing the indexes.  We pass to-write
  // indexes through to the writing thread via the write_index FIFO queue.
  // TODO(gconnell):  Move index writing thread creation into RunThread.
  std::vector<std::thread*> index_threads;
  if (flag_index) {
    VLOG(1) << "Starting indexing threads";
    for (int i = 0; i < flag_threads; i++) {
      std::thread* t = new std::thread(&WriteIndexes, i, &write_indexes[i]);
      index_threads.push_back(t);
    }
  }

  // Drop all privileges we need.  Note: we because of what we've already done,
  // we really don't need much anymore.  No need to create new threads, to write
  // files, to open sockets... we basically just hang around waiting for all the
  // other threads to finish.
  DropCommonThreadPrivileges();

  for (auto thread : threads) {
    VLOG(1) << "===============Waiting for thread==============";
    CHECK(thread->joinable());
    thread->join();
    VLOG(1) << "Thread finished";
    delete thread;
  }
  VLOG(1) << "Finished all threads";
  if (flag_index) {
    for (int i = 0; i < flag_threads; i++) {
      VLOG(1) << "Closing write index queue " << i << ", waiting for thread";
      write_indexes[i].Close();
      CHECK(index_threads[i]->joinable());
      index_threads[i]->join();
      VLOG(1) << "Index thread finished";
      delete index_threads[i];
    }
  }
  delete[] write_indexes;
  LOG(INFO) << "Process exiting successfully";
  main_complete.Notify();
  return 0;
}

}  // namespace st

int main(int argc, char** argv) { return st::Main(argc, argv); }

redpajama_set_name: RedPajamaGithub


At the end of each year I like to review how Bible prophecy played out during the year.
Seeing dark news items from a prophetic perspective causes the darkness to be more bearable. I often post these stories to my "headlines" daily which can be found here.


text:
The future of network integrity depends on industry, not government
The global interdependence of the ICT supply chain.
kdespagniqz
This article was produced by, and reflects the views of, Huawei.
Cyber threats are evolving. They are becoming more sophisticated, pervasive, and destructive.
This should come as no surprise given the ubiquity of coverage surrounding recent attacks; perhaps more than ever, the future of network integrity is central to the cause of facilitating today's digital economy. In an age moving towards the ubiquity of connected things, the contours of security will shape the future of commerce, technology, and privacy. And though there is consensus around the importance of combating digital threats, the path needed to defend our networks is much less clear.
Nationless: The decentralized state of ICT regulation
We conduct business in a world defined by connectivity. The past decades' Information and Communication Technology (ICT) revolution has allowed transnational firms to establish narrowly focused segments of their supply chain across a host of countries. Fiber-optic networks and backbone routers help to enable the smooth transmission of data across the globe and make comparative specialization possible by linking fragmented technologies: RFID tags and sensors, communication networks, operational data, and security management software.
The integrity of that network cannot be taken for granted. While this is not a problem exclusive to industry actors, the global nature of the ICT sector's supply chain requires international cooperation to ensure that connectivity remains reliable and efficacious. Unfortunately, though standards setting bodies are plentiful, the international regulatory landscape for telecommunications networks remains inadequate.
Today, the most globally competitive companies find themselves in the middle of an escalated regime conflict over the supervision of network integrity. Varied regulatory culture, claims of protectionism, and threats of retaliation made by the world's two largest economies only exacerbate geopolitical entrenchment and distract from the challenge that industry faces. The reality is that ICT spans across borders, continents, oceans, and even outer space. This only accentuates the need for a post-nationalist solution.
Recent revelations (PDF) uncovering alleged covert hacking operations illuminate the problem of decentralization: Disparate, clandestine government action is undermining trust in multinational companies' products. These actions could spur nations to adopt indigenous-only technology that would severely limit the market for multinationals, regardless of where headquartered. In an industry defined by global product research, development, and procurement, a company's geographic headquarters should not predetermine nor prohibit its access to markets. Unfortunately, the current inadequate regulatory regime leaves room for abuse and distrust.
Neo-mercantilism and the need for a new transparency
We believe that beggar-thy-neighbor approaches to network integrity will only exacerbate techno-nationalist policies. Inclusive cybersecurity solutions cannot solely emerge from one nation, nor can government actors alone resolve them. Because information technology network hardware and software operates across borders and sectors, that solution must come from industry and the vendors who supply network infrastructure. In the wake of divergent international policy prescriptions, firms are clamoring for rational solutions that allow companies to compete and innovate on a fair and safe playing field.
Clamoring isn't enough; only action will suffice. As a member of over 150 international standards bodies, we at Huawei believe that a congruence of recommended international standards is a good first step. We support international negotiations that would institutionally embed sensible rules around the ICT network supply chain. Establishing fair, transparent, and efficient international networking industry standards would ensure that competition centers on products, not security.
But we can do better. To encourage a uniform approach across the industry, companies should be more transparent about their policies and share their approach to standards, ranging from software testing and technical standards to legal compliance and third-party information security management. Vendors should also focus on improving detection and establish means to monitor entry and exit points so that networks can track and trace perpetrators.
There will be an unprecedented 100 billion connections worldwide by 2025. Managing that data safely will be an enormous challenge. As one of the world's largest providers of network and communication services we are well positioned and dedicated to continually improving security standards. We call on governments, private industry, and end-users around the globe to join us in that commitment.
This article was produced by Huawei and not by the Quartz editorial staff.


text:
By Phillip Britt, technology writer
Low-Code/No-Code Offerings to Grow, but Some Still Want Complexity
Since the early days of CRM, the industry has faced a daunting challenge: The tools have been too expensive and difficult to customize. And as systems have become more capable and sophisticated, so too have the tasks of building, maintaining, and updating them. Following years of steady improvements, CRM application development times and costs have been steadily moving upward for more than a decade.
Enter low-code/no-code development tools, which take much of the difficult coding work out of the process, reducing or completely eliminating the need for dealing with syntax, bugs, and legacy code.
Low-code/no-code CRM and other solutions represent the next generation of these technologies, according to Francis Carden, Pegasystems' vice president of digital automation and robotics. It's a view that's shared by many in the CRM industry.
"Low-code/no-code is not just a thing, it's a category of things," says Rich Green, chief technology officer at SugarCRM. "It's a category of capabilities that enable business subject experts rather than coders, in most cases, to adapt their platform. We have a term at Sugar: Let the platform do the work."
These systems have been around since the early 2000s, but they have been advancing tremendously recently, Carden says. "A year or two ago, when people were applying the term 'low-code' from a CRM perspective, it might mean using an RPA bot."
"We've evolved from systems designed for individual, tech-savvy users and ones that can automate basic processes to systems that are part of an enterprise strategy with more flexibility and agility," says Rebecca Wettemann, principal at Valoir.
An increasing number of providers are offering systems with improved, embedded workflows that automate an increasing number of processes and more connections to other internal systems.
Though removing the need for users to choose hardware, software, computer language, and database was a significant advancement, it still pales in comparison with what is available from several vendors today. Some systems are simple enough for anyone with basic knowledge about a particular business to use and make changes to their CRM systems.
"Historically, when you have purchased a business CRM system, it was very rigid and you had to adopt your business processes to that platform," Green says. "Low-code allows you to very quickly change your business process. Without having a computer science degree, you can adapt your business software to how you want to run your business."
As companies amend, configure, and extend that capability, the low-code/no-code system can evolve with the organization, Green adds.
"Now we have elasticity, unlimited computing power, unlimited storage," Carden says. "If we keep building software the way we did, everything we build ends up in the legacy bucket five minutes after we go live. But with low-code/no-code, if you don't like it, you can enhance it almost instantly. You don't even build for [the user interface] anymore. It works for every UI. I know that sounds like it's just too good to be true."
But with low-code/no-code, this is indeed all available right now, Carden adds. "It's such a paradigm shift. We have to teach people what that shift is first and get people to agree that this is happening."
The increasing mobility and variety of channels used by marketing, sales, and related departments has driven the trend to low-code/no-code, according to Carden. "If you're writing code, typically what happened over the decades and even still today is you write an application, then have a business rule that requires some code (e.g., age of retirement)."
To add or change that business rule, there is likely code that needs to be changed in the data layer, the application layer, and elsewhere throughout the organization. That means involving engineering because making that many changes is a complex task.
"We've moved on from this," Carden boasts. "It's a business rule; it only got called code because businesses couldn't build it. But now businesses can build it."
With low-code/no-code systems, anyone who understands the business should be able to use the system, no engineering or coding knowledge required, according to Carden. For example, rather than writing a lot of code to determine which customers have a propensity to churn, workers can go into the system, input their business rules (e.g., lack of first-call resolution) using the company's own terminology, and quickly have access to that information in real time through, say, a pop-up on contact center agents' screens. The revised system can now serve up recommendations for actions that have resulted in retention for customers with similar profiles.
Still, though low-code/no-code systems are designed for those without technical expertise, providers of those platforms still need to keep end users in mind, Green warns. "Who are the tools for? What are they trying to do? What are their skill sets? A marketing automation expert is not the same as a [salesforce automation] business operations expert, who is not the same as a customer service operations person. The solution required for one piece of the business is not the same as the solution required for the others."
By making such systems available, providers are enabling their customers to focus on their businesses rather than on the intricacies of coding, adds Jen Snell, Verint's vice president of conversational AI. "We've extracted the ability for customers to build, manage, configure, and grow the experiences [for their customers]."
Rather than adding, deleting, or changing coding at the command line, customers of Verint's low-code solution can use simple drag-and-drop commands to make changes, Snell says. "It makes it easy for the user; you don't have to know those command lines. They're still in them. You can still access them if you know how to. But [low-code] removes the need to."
Carden likens the change in low-code CRM systems to the change in contact centers, which operate very differently today than they did just a couple of years ago.
However, Wettemann cautions that some systems being marketed as low-code require much more coding than others. "There are some providers that are very focused on the IT audience. It's 'low-code,' but it's very focused on providing the building blocks for the developer. There are other systems that are very focused on the business user, where someone who can't write a line of code can do some very sophisticated stuff."
The latter systems require embedded UI interfaces and automated data mapping to enable more complex processes without the need for the user to understand the data structure or the intricacies of how the technology works, Wettemann said.
LARGE DEMAND FOR LOW-CODE SOLUTIONS
Gartner expects low-code development technologies, including CRM, to reach $29 billion in revenue by 2025 (with a compound annual growth rate of more than 20 percent).
Democratization is one of the major drivers of the growth, according to Gartner. The firm found recently that at many companies, 41 percent of employees are business technologists—that is, employees who report outside of IT departments and create technology or analytics capabilities for internal or external business use.
Another issue, Green says, is that coders just aren't available for non-tech businesses, an issue that is challenging many companies trying to leverage more complex technologies. "They're all being hired by the Googles and Sugars of the world."
"There is a new kind of persona, a business technologist who sits outside of the world of IT," says Manoj Chaudhary, Jitterbit's chief technology officer and senior vice president of engineering. "People want to empower themselves, but these people need [technical] help. We have put the power of the technology into the hands of the business so that they can solve their problems themselves."
"Companies are increasingly looking at CRM as a platform," Wettemann adds. "They're looking at not just the functionality that is in the application, but also the ability to provide user-focused views and providing individual users the ability to quickly spin up the views that they need without the need for developers and resources. It's all about agility."
The movement to current low-code solutions is just beginning, according to Snell. "While we continue to drive greater accessibility, that's going to lead to greater and greater innovation. It's going to jump-start more sophisticated experiences delivered through continual innovation of those low-code solutions."
CODED SOLUTIONS STILL NEEDED
Despite the current and projected growth for low-code/no-code solutions, there will still be companies that want a more complex CRM systems that will continue to require coding, experts agree.
Several providers offer both types of solutions, though they might not be separate products.
SugarCRM has developed its solutions based on the demographics and skill sets and needs of each of its customer segments, according to Green. Some have absolutely no technical skills, while others have more advanced skill sets and are looking for systems that enable them to leverage that.
Green compares SugarCRM's solution to some Microsoft software, which enables most users to perform an increasing array of tasks but also enables more advanced users to write macros and perform more complex tasks.
"Low-code fulfills the need for the majority of our customers," Green says. "But there are also customers who prefer a more advanced solution."
"Some brands are looking to do more with their AI," Snell adds. "Low-code solutions can do only so much today."
Though the trend is definitely toward low-code/no-code solutions, companies that want to operationalize AI or drive sustainability and scalability will want a stepped-up solution. A company might be able to use a low-code solution, but that could also mean managing a dozen or more bots, which could be too cumbersome, according to Snell. "That's really not scalable or sustainable."
So companies that want to drive deeper value or greater experiences across their solutions will need the more complex, coded CRM solution, she explains. Many of those businesses are in highly regulated industries, such as healthcare or financial services.
Wettemann also notes that companies concerned about compliance might want to stay with solutions requiring more coding because they don't want users developing features that could violate some rules or regulatory requirements.
LOW-CODE/NO-CODE MISTAKES
Adopting a low-code/no-code CRM system is only the first step, Carden maintains. "The companies that are doing it badly are envious of the ones that are doing it well. The goal of most companies today is to be envied, not to envy someone else."
"So much of the focus today is on getting [a low-code] solution live," Snell adds.
But simply going live isn't a measure of success. Instead, companies should measure success with such a system on whether it is actually driving desired business key performance indicators. "Companies need to move on from just getting it to go live to taking advantage of all of the data that is coming through," she says.
"There is a sense that low-code/no-code tools can radically improve your business," Green agrees. But just as AI works well only if companies have the right data to drive it, low-code/no-code solutions require users to truly understand the business to derive the most value from such a system.
Snell expects companies to evaluate their success with low-code/no-code solutions and look to expand their use across the enterprise. She also expects companies to look for ways to more easily incorporate AI into low-code/no-code solutions.
"Brands really want to own their own customer experience, and they have a vision of where they want to take it in the next three to four years," Snell says. "There's more demand than ever for low-code solutions."
"The market has evolved quite a bit and is continuing to grow," Chaudhary adds.
"We are continuing to push the envelope," Green says, pointing to SugarCRM's drag-and-drop tools for reporting and analytics and its acquisition in February of AddOptify, which offers a low-code workflow automation tool.
"The demand for low-code systems will continue to accelerate, with these systems offering increased capabilities going forward," Wettemann predicts. "It's been flying somewhat under the radar for management. CIOs are starting to see having these tools in place as a very attractive option. That being said, with digital transformation, companies are looking at solving more complex problems and more complex digital workflows."
"Everyone realizes where this is going, and there is no going back," Carden says emphatically.
Phillip Britt is a freelance writer based in the Chicago area. He can be reached at spenterprises1@comcast.net.
CRM in the Cloud: Which Model Is Right for You?
When looking at CRM software-as-a-service, companies have a variety of deployment options
The Key to Keeping CRM in Sync
Which departments should be aligned, and which technologies can bring them all together?
A Road Map for Creating a Winning Mobile App
Why companies need a mobile app today and how to create one.
Buyer's Guide Companies Mentioned


As the use of social media across businesses is gradually being adopted SME's have seen an increase in the effectiveness of social media to help market their business.
According to a 2011 study of nearly 2,000 businesses by Constant Contact, an online marketing company for SMEs, results showed that companies had increased opinion that using social media was easy and not time consuming.
The study saw an increase of 24% of businesses reporting social media was easy to navigate and a 45% increase of businesses saying it worked well with customers. In the survey of UK and US businesses, 81% reported that they dedicate a significant amount of time to social media, which is up 8% from last year.
The general manager of Constant Contact, Mark Schmulen, says that small businesses are becoming increasingly aware of the power of social media.
"Small businesses are still learning how social media marketing can help them grow their customer relationships. Just six months ago, they were learning the ropes and finding out what social media marketing tools were available, now they are beginning to understand more about what social media marketing can do for them."
Among social media marketing tools used Facebook was the number one in being the most effective with 86% followed by Twitter with 60% and LinkedIn with 55%.
Twitter saw the highest increase in reported effectiveness from last year by 13% followed by linked with 8% and Facebook with 4%.
Research revealed, however, that 72% of companies have not included mobile marketing into their business and only 13% have created mobile friendly websites. Even though mobile marketing has become mainstream just recently small businesses should consider investing in this area as it is increasingly becoming a preferred method of online interactions by consumers.
Twitter may see a large surge in reported effectiveness for next year as its redesign has many similarities to Facebook, including new profile pages for businesses.
Small businesses have started to become aware of the growing consumer desire to communicate across social media platforms and small businesses have started consistently communicating with consumers through social media, with 60% reporting this true.
"Plain and simple, customers want small businesses to interact with them, whether that's on email or via their social media platform of choice, be it Facebook, Twitter, or LinkedIn. It's a great example of how small businesses are taking advantage of their smaller scale to make a huge impact with these tools," added Schmulen.


text:
Poetics Group
an opencuny.org webspace
Events Fall 2010
Events Spring 2010
Image Music Text
Showcase Showdown
Lost & Found website
Once a year, the Poetics Group asks four Grad Center students with new books to get together, read each other's work, and talk about it on stage. You get to hear some of the exciting new poetry and prose coming out of our community, and you get to hear it discussed by its authors. We call it the Showcase Showdown. The authors interview each other on stage about selected poems from their new books, and the conversation is interspersed with readings and followed by questions and discussion. The public is welcome.
Our second annual showcase of new books by Grad Center students featured Andy Fitch, author of Sixty Morning Walks; Erica Kaufman, author of Censory Impulse; Anna Moschovakis, author of I Have Not Been Able to Get Through to Everyone; and Simone White, author of Dolly. It took place Thursday, Feb. 26, 6:30 pm, in Room 4406 the English Department Lounge.
Our first Showcase Showdown featured the work of Jenny Boully, author of The Book of Beginnings and Endings; Cecily Parks, author of Field Folly Snow; Chris Schmidt, author of The Next in Line; and Douglas Martin, author of In the Time of Assignments. It happened on May 2, 2008, at 4 pm, in the DSC study lounge (room 5409).
About the authors.
Jenny Boully has an MFA from the University of Notre Dame, and is currently completing a Ph.D. in English at the Graduate Center. Her books include The Body (Slope Editions), One Love Affair (Tarpaulin Sky Press), and The Book of Beginnings and Endings (Sarabande Books, 2007). Her work has been anthologized in The Next American Essay, The Best American Poetry and Great American Prose Poems.
Andy Fitch is the author of 60 Morning Walks (Editions Eclipse). 10 Walks/2 Talks, his collaboration with Jon Cotner, is forthcoming from Ugly Duckling Presse. Recently he successfully defended his doctoral dissertation, "Pop Poetics: Between Lyric and Language," in the English Department.
Erica Kaufman is the author of Censory Impulse (Factory School 2009), as well as a number of chapbooks. She co-curates Belladonna and Belladonna Books and is currently a doctoral candidate in the English Department.
Douglas A. Martin is the author of the novels Outline of My Lover and Branwell; a collection of short stories, They Change the Subject; a poetry collection, In the Time of Assignments; as well as Your Body Figured, which consists of three novellas. He has a PHD in English from the Graduate Center and has taught writing at the New School for Social Research and at Wesleyan University.
Anna Moschovakis is the author of I Have Not Been Able to Get Through to Everyone (Turtle Point Press), a translator of French poetry and prose, and an editor and book designer at Ugly Duckling Presse. She has an MFA from Bard College and is currently a doctoral candidate in the Comparative Literature Department.
Cecily Parks' chapbook, Cold Work, won the 2005 Poetry Society of America New York Chapbook Fellowship. Her poems have appeared in Best New Poets 2007 and Tin House, and she is the author of Field Folly Snow (U of Georgia). She is a PhD candidate in English at CUNY Graduate Center.
Christopher Schmidt's doctoral dissertation in English is concerned with waste in post-war art and literature. His poems and essays can be found in recent or forthcoming issues of Tin House, Court Green, Canadian Poetry, and BUTT. His first book of poems, The Next in Line, was published with Slope Editions in 2008.
Simone White's recent work appears in Ploughshares, Tuesday; An Art Project (for which she received a nomination for the 2009 Pushcart Prize), and in the exhibition catalog for The Studio Museum's Flow. She is a Cave Canem fellow with an MFA from the New School and a JD from Harvard Law School. Currently she is a doctoral student in the English Department. Her chapbook, Dolly, from Q Ave Press, is a collaboration with painter Kim Thomas.
RodHurley
NYC Family Acceptance Research Project
Youth Justice Research Collaborative
Poetry, organized. In New York. Specifically, in and around 365 Fifth Avenue. The GC Poetics Group is a Chartered Organization of the Doctoral Students' Council at the CUNY Graduate Center.
Archives Select Month March 2011 February 2011 December 2010 October 2010 September 2010 August 2010 June 2010 May 2010 March 2010 November 2009 October 2009 September 2009 May 2009 March 2009 February 2009 November 2008


Meet my new BFF, Prezi!!
I was in awe a few weeks ago as I witnessed a couple of my classmates give a Powerpoint presentation like nothing I've ever seen. You see, it wasn't just a Powerpoint presentation, this was next, next level. It zoomed, flipped horizontally, and then vertical; and glided in every direction they commanded it to just as smoothly as Michael Jackson would dance the moonwalk. And from what I was told, its name isn't PowerPoint, its called Prezi and its my new presentation buddy!
Yes, Prezi takes the ordinary and makes it extraordinary. I think that this could be the ultimate replacement for Powerpoint presentations as we know it. Check out the video and link below and tell me what you think. Hot or not?
Check out this cool Prezi Presentation here.
This entry was posted on November 20, 2011 at 2:11 am and is filed under Social Media with tags Power Point, presentation, Prezi, week13o.	You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.
I was wowed by that power point presentation as well. Thanks for doing the homework to find out how they did it. I will certainly be using this in the future. Hope the semester went well for you. Good luck next year!
I have to agree. That presentation was awesome. It was eye-catching, exciting, and unique; so much more captivating than any PowerPoint i've ever seen. I think that's something that I've been blogging a lot about – making sure that everything you publish grabs people's attention, is original and fun. It's something I 100% will be looking into when creating future presentations!