Note: You are currently viewing documentation for Moodle 1.9. Up-to-date documentation for the latest stable version is available here: Grades.
Note: This page, together with the pages listed in the block on the right, describe the gradebook in Moodle 1.9 onwards. For documentation on the gradebook in Moodle prior to 1.9, see Grades pre-1.9.
The concepts of grades and of gradebook have been completely revisited in Moodle 1.9. These words and modules were used in earlier version. There are important differences that users who are upgrading to 1.9 need to understand and this should also help new users.
A grade has settings for affecting how it is displayed to the users, as well as locking and hiding functions.
As an overview: Grades can be calculated, aggregated and displayed in a variety of ways, the many settings having been designed to suit the needs of a great variety of organisations.
Many activities in Moodle, such as assignments, forums and quizzes may be given grades. Grades may have numerical values, or words/phrases from a scale or rating system.
Grades can also be used as outcomes and as arbitrary text attributed to each participant in a course.
When activity modules produce grades, they use the gradebook public API to push (or send) their grades to the gradebook. These grades are then stored in database tables that are independent of the modules. The grades are still kept in the module database tables, and the gradebook will never access or modify these original grades.
The gradebook, however, provides administrators and teachers with tools for changing the ways in which grades are calculated, aggregated and displayed, as well as means to change the grades manually (a manual edit of a grade automatically locks the grade in the gradebook, so that the module which originally created the grade can no longer update that grade in the gradebook until the grade is unlocked).
Users with Teacher permissions for the course can add "manual" grade items to the gradebook through the Categories and Items section.
Outcomes are specific descriptions of what a student is expected to be able to do or understand at the completion of an activity or course. An activity might have more than one outcome, and each may have a grade against it (usually on a scale).
Grader report - The main teacher view of a course gradebook.
Additionally on "Choose an action" menu, teachers can find interactive category reports which can alter the way the "View" reports appear. The "My report preferences" link (on a tab in earlier versions), enables teachers to change how the grader report is displayed.
Teachers may organise grades into grade categories, import and/or export grades, and make grade calculations.
Symbols to represent ranges of grades may be set as grade letters.
This page was last modified on 4 December 2010, at 16:52.


text:
Q: Bitwise left shifting of integer by more than 31 times main()
{
   int i=-1,j=32,k;
   k=i<<j;
   printf("i=%d j=%d k=%d\n",i,j,k);
}

output:
i=-1 j=32,k=-1

If I am taking j=33 then k=-2 and if j=34 then k=-4.its repeating after 32 times left shift i.e  if j=64,k becomes -1 and if j=65 then k=-2.but logically bit should be lost i.e output is 0.what is happening here.
Sorry for asking such a question. I am beginner so I'm unable to understand what the compiler does here. Can you explain?

A: You cannot count on getting a meaningful result when shifting a value by an amount equal to or greater than its size. From the standard:

If the value of the right operand is negative or is greater than or
  equal to the width of the promoted left operand, the behavior is
  undefined.

redpajama_set_name: RedPajamaStackExchange


Tackle unruly, frizz-prone hair with Dual Senses Taming Conditioner.
With active Kukui Nut Oil - known for its hydrating capabilities - the hair's surface is evened and smoothed for moisturised, manageable locks.
This Dual Senses Conditioner expertly detangles hair while banishing frizz for touchably soft, supple hair.


Posted December 3, 2018 by Gideon Greenspan & filed under MultiChain, Private blockchains, Smart contracts.
Posted June 13, 2018 by Gideon Greenspan & filed under MultiChain, Private blockchains.
Posted May 8, 2018 by Gideon Greenspan & filed under Private blockchains.
Posted November 22, 2017 by Gideon Greenspan & filed under MultiChain, Private blockchains.
Posted May 4, 2017 by Gideon Greenspan & filed under Private blockchains.
Posted April 22, 2017 by Gideon Greenspan & filed under Private blockchains.
Posted December 14, 2016 by Gideon Greenspan & filed under Private blockchains.
Posted November 3, 2016 by Gideon Greenspan & filed under Private blockchains.
Posted June 22, 2016 by Gideon Greenspan & filed under Private blockchains, Smart contracts.
Posted May 10, 2016 by Gideon Greenspan & filed under Private blockchains.


text:
Jim Macdonald
Interviewed by Milton Gray
Reprinted from Funnyworld No. 18 (1978), where it appeared (in slightly different form) as part of "The Moving Drawing Speaks," a multi-part feature on cartoon voices.
Jim Macdonald retired in 1976, after 42 years on the Disney Studio's staff; he continues to work on special assignments for the Studio. He was hired in 1934 as one of two men who formed the newly established sound effects department, after working for Disney as a musician during the recording of cartoon soundtracks. He invented many of the Disney sound effects himself building the necessary contraptions in his home workshop. He was asked repeatedly to provide voices as well as sound effects for the Disney cartoons (and for Disney's live-action features, too), and he has now been Mickey Mouse's voice for more than twice as many years as Walt Disney himself was.
Milt Gray interviewed Jim Macdonald on December 7, 1977, at the Disney studio; excerpts from that interview follow. M. B.
Jim Macdonald: Being on staff, you were asked to do bits of everything. In the 42 years I was here, before I retired, I wore a lot of hats, and I never got rid of any. Whenever I did any voices, the director would say, "Jim, will you try this?" For instance, on Cinderella, I did the two mice, Jaq and Gus. It was something that I'd never tried before; we just thought we'd try it because I was on staff, and if I could do it, it would save having to pay actors to come in.
Winston Hibler had written a lot of strange jargon—he called it "mouse latin," an unintelligible language. I remember a couple of words the mice would say—"Rooky rumpy shiz." Now, nobody would know what that meant. But this was done just the way Winston Hibler wanted it. The one mouse we had to speed up a bit, and the other one we slowed down. When that was cut into a rough cut, and shown to the people here, everybody loved the picture, and they loved the mice, but they said, "We wish we could understand what the mice were saying." Hib wrote more dialogue and cleared it up a bit; he'd have words in there that you could understand, with all this other mouse Latin, as Hib called it. Pretty soon, the picture comes up to color. They showed it and the people said, "Oh, this is a great improvement, we must make that dialogue more clear." Now you have the problem of speed-up and slow-down tracks, and how to get it in sync with the lips.
There was no tape then, no quarter-inch tape with the variable speed. Today, we put it on quarter-inch tape and use the variable-speed oscillator, and then we have great latitude. When we get the take we want, we do it on 35 [record the sound on 35mm film] also, because then it can be on numbered stock and they keep that in library. But we do it simultaneously on quarter-inch tape, then speed it up and slow it down. But when we did Cinderella, we had nothing but discs, and we would hold our finger on it to slow it down. It was really a trial-and-error set-up.
Milt Gray: Was that the way most dubbing was done, from disc back to film?
Macdonald: Only on speed ups or slow downs.
Gray: I would have assumed it would have gone from film to film, in a dubbing session.
Macdonald: Unless it was some trick that was needed, like those voices, it would just go to film. When I started doing Mickey's voice, about 30 years ago, we were doing " Mickey and the Beanstalk," and the animators and the director in charge of the sequences that needed Walt's voice on Mickey approached him and said, "Walt, we need you on the stage; we want to go ahead with this." He said, ''I'm too busy, I just can't do it. Call Jim up here."
They said, "Walt wants to see you," and I thought, "What have I done now?" He said, "Have you ever tried to do Mickey?" I said, "No, Walt." You wouldn't try to do that, because it was always Walt's voice; there was no reason ever to try it. So he said, "Do it. Just say something." So I said [in Mickey's voice], "Hi, Walt, how are you?" You know, he always had that little identifiable giggle. He said, "That's fine." He told the directors, "Have Jim do it, in the future. He can do it fine." But, he said, "Don't let them give you long speeches. Because you have that falsetto, and you have a couple of inches of area for inflection, and it'd be terrible to have a long speech in falsetto voice." You don't have much room for inflection; you're already up there. And if you get too low, you start to yodel, and yodel right out of it. So it was always best, he said, to have short speeches.
In the early days, way back onto Snow White, they had the Fraunfelder family, a Swiss family, and they did a lot of the yodeling for the dwarfs. I played in the band; I played jugs and ocarina and different things. We had a little five- or six-piece group, and I remember that Art Smith played clarinet without a mouthpiece, and all of these oddball things, and we made the sound of that organ. It was a very cute and funny sound for the organ, and when Walt heard it, he said, "That's great. Now, this is a happy little group, they should be singing. Maybe they could yodel." And he looked at me. "Have you ever yodeled?" I said, "No, Walt." He said, "Go on down to the stage and try it." So I did a lot of test yodeling.
Now they had the Fraunfelders come in, and they did a great job. But, as you know, that picture went on for years and years, and as the picture keeps progressing, they keep changing scenes and so forth. Some of the yodeling would be out, and some they wanted a little more of. They got in the habit of saying, "Call Jim down, and let him do it." The Studio didn't have a lot of money in the early days, so I would do those things and fill in. Like on Sneezy—[Billy Gilbert] did all of Sneezy. Sneezy never did have a great big sneeze; he always went [a smothered sneeze sound], like he was holding it back. As the years went on, and they would change Sneezy's action, they would have to change some of this sneezing. Rather than call in an actor, they would call me, because I was on staff. I just fell into doing them. This is the way I came into doing the voices.
A long time ago, I did the first articulating of a sound, on Clock Cleaners (1937); Ben Sharpsteen was the director on that picture. Every time the spring would pop up [while Donald was cleaning it], I'd use the jewsharp; the Duck would be quacking away, and he'd hit this thing, and it would bounce out, so there were a lot of "sproings" in there. Ben Sharpsteen said, "I wish I could get that spring to answer him, like a couple of kids; the Duck would say, "I'm gonna beat your sproing off," and I'd really like to hear that spring answer and say, 'Oh, yeah?'" [Jim then produced the "Oh, yeah?" sound with the jewsharp.] That was the first articulating sound, to my knowledge, and it was done very simply with the jewsharp.

redpajama_set_name: RedPajamaCommonCrawl


text:
require 'octokit/middleware/follow_redirects'
require 'octokit/response/raise_error'
require 'octokit/response/feed_parser'
require 'octokit/version'

module Octokit

  # Default configuration options for {Client}
  module Default

    # Default API endpoint
    API_ENDPOINT = "https://api.github.com".freeze

    # Default User Agent header string
    USER_AGENT   = "Octokit Ruby Gem #{Octokit::VERSION}".freeze

    # Default media type
    MEDIA_TYPE   = "application/vnd.github.v3+json".freeze

    # Default WEB endpoint
    WEB_ENDPOINT = "https://github.com".freeze

    # In Faraday 0.9, Faraday::Builder was renamed to Faraday::RackBuilder
    RACK_BUILDER_CLASS = defined?(Faraday::RackBuilder) ? Faraday::RackBuilder : Faraday::Builder

    # Default Faraday middleware stack
    MIDDLEWARE = RACK_BUILDER_CLASS.new do |builder|
      builder.use Octokit::Middleware::FollowRedirects
      builder.use Octokit::Response::RaiseError
      builder.use Octokit::Response::FeedParser
      builder.adapter Faraday.default_adapter
    end

    class << self

      # Configuration options
      # @return [Hash]
      def options
        Hash[Octokit::Configurable.keys.map{|key| [key, send(key)]}]
      end

      # Default access token from ENV
      # @return [String]
      def access_token
        ENV['OCTOKIT_ACCESS_TOKEN']
      end

      # Default API endpoint from ENV or {API_ENDPOINT}
      # @return [String]
      def api_endpoint
        ENV['OCTOKIT_API_ENDPOINT'] || API_ENDPOINT
      end

      # Default pagination preference from ENV
      # @return [String]
      def auto_paginate
        ENV['OCTOKIT_AUTO_PAGINATE']
      end

      # Default OAuth app key from ENV
      # @return [String]
      def client_id
        ENV['OCTOKIT_CLIENT_ID']
      end

      # Default OAuth app secret from ENV
      # @return [String]
      def client_secret
        ENV['OCTOKIT_SECRET']
      end

      # Default management console password from ENV
      # @return [String]
      def management_console_password
        ENV['OCTOKIT_ENTERPRISE_MANAGEMENT_CONSOLE_PASSWORD']
      end

      # Default management console endpoint from ENV
      # @return [String]
      def management_console_endpoint
        ENV['OCTOKIT_ENTERPRISE_MANAGEMENT_CONSOLE_ENDPOINT']
      end

      # Default options for Faraday::Connection
      # @return [Hash]
      def connection_options
        {
          :headers => {
            :accept => default_media_type,
            :user_agent => user_agent
          }
        }
      end

      # Default media type from ENV or {MEDIA_TYPE}
      # @return [String]
      def default_media_type
        ENV['OCTOKIT_DEFAULT_MEDIA_TYPE'] || MEDIA_TYPE
      end

      # Default GitHub username for Basic Auth from ENV
      # @return [String]
      def login
        ENV['OCTOKIT_LOGIN']
      end

      # Default middleware stack for Faraday::Connection
      # from {MIDDLEWARE}
      # @return [String]
      def middleware
        MIDDLEWARE
      end

      # Default GitHub password for Basic Auth from ENV
      # @return [String]
      def password
        ENV['OCTOKIT_PASSWORD']
      end

      # Default pagination page size from ENV
      # @return [Fixnum] Page size
      def per_page
        page_size = ENV['OCTOKIT_PER_PAGE']

        page_size.to_i if page_size
      end

      # Default proxy server URI for Faraday connection from ENV
      # @return [String]
      def proxy
        ENV['OCTOKIT_PROXY']
      end

      # Default User-Agent header string from ENV or {USER_AGENT}
      # @return [String]
      def user_agent
        ENV['OCTOKIT_USER_AGENT'] || USER_AGENT
      end

      # Default web endpoint from ENV or {WEB_ENDPOINT}
      # @return [String]
      def web_endpoint
        ENV['OCTOKIT_WEB_ENDPOINT'] || WEB_ENDPOINT
      end

      # Default behavior for reading .netrc file
      # @return [Boolean]
      def netrc
        ENV['OCTOKIT_NETRC'] || false
      end

      # Default path for .netrc file
      # @return [String]
      def netrc_file
        ENV['OCTOKIT_NETRC_FILE'] || File.join(ENV['HOME'].to_s, '.netrc')
      end

    end
  end
end

redpajama_set_name: RedPajamaGithub


This double-layered baby blanket is made from 100% cotton and is comfortable and soft against baby's skin. It is designed to keep baby warm in no time. It is durable and is machine washable for easy care. Measures 30"x30" (76cmx76cm).


text:
Llagunoa glandulosa är en kinesträdsväxtart som först beskrevs av Hook. & Arn., och fick sitt nu gällande namn av George Don jr. Llagunoa glandulosa ingår i släktet Llagunoa och familjen kinesträdsväxter. Inga underarter finns listade i Catalogue of Life.

Källor

Kinesträdsväxter
glandulosa

redpajama_set_name: RedPajamaWikipedia


Located on Marco Island, Fla., the South Seas Northwest is situated oceanfront on the Gulf of Mexico. Guests are within walking distance of a variety of restaurants, including family-friendly diners, brew pubs, seafood restaurants and pizza parlors. The shopping at Marco Island is unbeatable, with over a 100 retail shops to choose from. Other island activities include fly-fishing and airboat tours of the Everglades and the islands. The Hammock Bay Country Club and the Marco Shore Country Club are a short drive from the property, and the city of Naples, Fla., is about 13 miles from the South Seas Northwest.
The South Seas Northwest boasts a 55-acre gated beach and bay community with meticulously manicured grounds, outdoor pool, tennis facility with soft surface courts, boat docks, and of course, the beach. The South Seas Northwest is made up of two beachfront high-rise towers directly overlooking the warm Gulf waters. Guests can take in the Florida sunsets over the world famous Tigertail Beach/Sandollar Point. Elevators and laundry rooms are located on each floor of the complex, and the South Seas has its own fitness facility.
Each two-bedroom condominium includes two bathrooms, a full kitchen, living room, and a balcony overlooking the ocean. Though all units are individually decorated, many of them are designed with a Floridian theme, featuring bright, tropical colors, furniture with wicker accents, and potted plants. A television with VCR, dishware and towels are all included.
Guests venturing to Marco Island for the first time or on a return visit will find the South Seas Northwest an especially inviting and pleasant beachfront resort perfect for groups of friends or families.
Continue another four miles to Horizons/GMAC rental office at 661 South Collier Boulevard, located on the left hand side of Collier Boulevard across from the Radisson Hotel.


text:
TOK: Paradox (JAPO 60029)
August 29, 2015 July 30, 2019 | Tyran Grillo
Takashi Kako piano
Kent Carter bass
Oliver Johnson drums
Recorded June 1979 at Tonstudio Bauer, Ludwigsburg
Engineer: Martin Wieland
Produced by Steve Lake
That Japanese pianist Takashi Kako has spent much of his career as an accomplished classical pianist should come as no surprise to anyone who listens to this album, which documents a time in his life when he was heavily involved in the French free jazz movement at its zenith. It was during this period that, in 1979, he formed TOK, an acronym of its members, of whom drummer Oliver Johnson and bassist Kent Carter completed the trio. All of its pieces are by Kako, save for the last, the fantastic "Wobbly Walk Parade," by Carter. This carnival dream expands the trio's standard palette, adding cello to its composer's toolkit; celesta to Kako's; toy piano, tambourine, and vocals to Johnson's; and featuring an unexpected appearance by producer Steve Lake on harpsichord (!). Leading up to this whimsical flourish is a program of striking originality, which is all the more intensified by Kako's undeniable acuity at the keyboard. Certainly his time in Paris has worn off here, as riffs resembling those of the great 20th-century French composers—including his teacher, Olivier Messiaen—are recognizable throughout.
The OK to Kako's T are finely supportive, responding to every dip and spiral of the pianist's flights over delectable comping. Each listens to the other before deciding on a single note. Whether riding the groove of "Dodéc" or painting with shadow in "A Lua De Portugal," the trio shares equal duties in the evocation department. Between Carter's elasticity, Johnson's adaptive timekeeping, and and Kako's denser ligaments, the resulting music hides in a crawl space somewhere between classical and jazz.
But Paradox throws its brightest spotlight on Kako, whose piano piece "Night Music" shows the beginnings of what has since grown into a lauded career as solo performer. Another return to roots is "Sekitei" (the title means "rock garden" in Japanese), which is the album's masterwork. This painterly piece takes chamber jazz to a high level of abstraction that is almost linguistic, diagnostic. Every new element in its unfolding becomes integral to the whole and, although in seeming contrast to the title, rather accurately captures the blossoming order of chaos in this often-misunderstood art form.
Easily among the finest JAPO releases.
Posted in JAPO Releases, Jazz Jazz
< Peter Warren: Solidarity (JAPO 60034)
Globe Unity: Compositions (JAPO 60027) >
2 thoughts on "TOK: Paradox (JAPO 60029)"
Ernst Nebhuth says:
A really enjoyable review. Thanks!
But it is not the band's only recording. TOK was already formed in 1978. The group released two LPs in Japan.
Takashi Kako, Oliver Johnson, Kent Carter – TOK (Trio Records, PAX-6003) and a live recording from around the date of the JAPO LP (TOHO-SEIMEI HALL, June 5, 1979) also on Trio Records.
The story of the trio even has an LP called "Micro Worlds", recorded on August 31 and September 1, 1976 in Paris. Arguablly the first TOK release, although Irene Aebi guests on the vinyl's eponymous track and the later band's name TOK wasn't mentioned on these previous releases except as a title.
Therefore PJL's 2004 CD was a compilation of two previously released LPs.
Tyran Grillo says:
Thank you so much for the correction! I've removed the erroneous sentence.


text:
My Favourite Opera - Katia Ricciarelli
'My Favourite Opera – Katia Ricciarelli', which will be released in May 2013, portraits the Italian star soprano Katia Ricciarelli. Katia Ricciarelli is best known for her roles in Rossini, Verdi and Puccini Operas but also appeared as Desdemona in…
MAX LORENZ: Wagner's Mastersinger - Hitler's Siegfried
Max Lorenz was at the height of his career as a heldentenor in 1941. As a homosexual with a Jewish wife in Nazi Germany, he would have faced deportation. However, as Hitler's favourite tenor and a symbol of his times, he was protected by Hitler and…
Louis Armstrong: Live in Australia 1964
One of the few complete concert performances of Louis "Satchmo" Armstrong, this live recording features the legendary jazz trumpeter and singer on an Australian tour in 1964, when he had already become an international superstar and a living symbol…
Looking for Cole - A portrait on the great American composer Cole Porter
Cole Porter is one of the most famous American artists of the past century. Surprisingly, this new film is the first in-depth documentary that gives a unique insight into his life and work. Porter expert Wilfried van den Brande travels in Porter's…
Introducing Haydn - Symphony No. 94 "Surprise"
Introducing Masterpieces of Classical Music is an informative and entertaining guide to some of the most important symphonic works of music history. As well as featuring a complete concert performance it also includes an insightful documentary, in…


Bond yields tumbled to seven-month lows and stocks hit new highs Tuesday in a powerful market rally triggered by fresh indications that the economy has slowed from last year's brisk pace.
The yield on the Treasury's bellwether 30-year bond slid from 7.45% on Monday to 7.36%, the lowest since last Aug. 17. The yield has dropped from 7.88% just since year-end.
In the stock market, the Dow Jones industrials hit yet another record, rising 23.52 points to 4,048.75, surpassing their old high of 4,035.61 set last Friday.
What's more, the Nasdaq composite index of mostly smaller stocks hit a record for the first time in nearly one year. The index jumped 5.93 points to 808.24, finally topping the old high of 803.93 set on March 18, 1994.
Analysts said the same optimism that has pushed yields down and stocks up for the past three months--with only minor interruptions--continued to dominate markets on Tuesday.
The government's report that retail sales in February were weaker than expected convinced more investors that the economy is headed for a "soft landing"--a period of moderate growth and low inflation that could allow interest rates to stabilize or decline further.
"The stock market is trading up because of the outlook for steady growth with the potential for lower interest rates," said Joseph DeMarco, head of equity trading at HSBC Asset Management. "Lower interest rates and continued growth are good for everybody."
"Clearly the retail sales report is a very powerful signal that economic activity has slowed in 1995," said Bruce Steinberg, macroeconomics manager at Merrill Lynch & Co. in New York. "Consumers are really taking a breather here. The pace of their spending was excessive late last year, and they are making up for it this year."
Longer-term bond yields were lower almost across the board Tuesday, though yields on three-month Treasury bills inched up slightly. Analysts said that may indicate that some investors in short-term securities were selling out and lengthening the maturity of their bonds.
On Wall Street, winners outnumbered losers by 14 to 8 on the New York Stock Exchange and by 15 to 13 on Nasdaq. NYSE volume was a heavy 346 million shares.
Stocks and bonds were helped by a firmer dollar, after last week's free fall in the currency. It closed at 1.417 German marks in New York, up from 1.407 on Monday, and at 90.85 Japanese yen, up from 90.73.
Still, analysts warned that financial markets may be getting so giddy that they are vulnerable to any economic signals that aren't consistent with the soft-landing scenario.
Today, the government will report on February wholesale inflation and industrial production; on Thursday a report on February consumer inflation is due.
* Blue-chip stocks leading the Dow and the Standard & Poor's 500 index to record highs included Boeing, up 2 1/8 to 48 7/8; 3M Co., up 1 3/4 to 57 5/8; Procter & Gamble, up 1 3/8 to 68 5/8, and Union Carbide, up 1 3/8 to 28 5/8.
* Stocks of consumer companies that typically perform better in slowing economies rallied sharply. Pfizer jumped 1 3/4 to 84 1/2, American Home Products added 1 3/4 to 73 1/4, Campbell Soup leaped 2 1/4 to 48 7/8 and Kellogg was up 1 1/8 to 58.
* On the downside, some tech stocks weakened. Apple Computer plunged 3 1/8 to 35 in heavy trading after brokerage Morgany Stanley downgraded the stock to "neutral." Apple had cut prices on some key computers on Tuesday.
Also falling were Compaq, off 1 1/8 to 32, and Dell, down 2 to 43 1/8.
Some analysts warn that a slump in tech stocks, which have been the market's leaders in recent months, could be a warning sign of a near-term market top.
* Another big loser Tuesday was Sports & Recreation, which tumbled 7 3/4 to 10 3/4 in heavy NYSE turnover. The retailer's quarterly results disappointed Wall Street and prompted at least one analyst to slash the investment rating of the stock.
In overseas trading, Tokyo's 225-share Nikkei average fell 231.82 points to 16,245.82.
But in London, the FTSE-100 average closed at 3,050.6, up 38.8 points. In Frankfurt, the DAX average inched up 0.96 point at 2,000.45.
In Mexico City, the Bolsa index finished the day at 1,591.07, up just 5.05 points after a strong early rally. Argentina's Merval index surged 7.7% to 349.37, continuing its rebound.


Langkawi is a beautiful island nation with pristine beaches, exotic wildlife, serene environment and other attractions. Go for well-planned Blissful Langkawi Tour, spanning in a duration of 4 nights and 5 days, to enjoy an unforgettable vacation. It is an ideal location for honeymooners as well as family vacationers. Some of the highlights of this tour are visit to the Pulau Singa Besar with a chance to feed the eagles, exploring the caves and the mangroves in a boat while spotting rare animal species, and Langkawi Cocktail Cruise offering sunset views and sumptuous food.Return airfare charges.
All surcharges for Airport transfers after the Scheduled Seat in coach timings.
04 Nights accommodation in Langkawi.
All transfer & sightseeing on Seat in Coach Basis.


text:
Хрустальненська міська громада — номінально утворена громада в Україні, в Ровеньківському районі Лугансьої області. Адміністративний центр — місто Хрустальний. Територія громади окупована військами РФ.

Площа громади — 843,3 км², населення — 135,08 тисяч мешканців (2020).

Громада утворена шляхом об'єднання Вахрушівської, Краснолуцької,  Міусинської, Петровської міської, Запорізької, Іванівської, Краснокутської, Маломиколаївської, Софіївської, Фащівської, Хрустальненської, Штерівської селищної та Краснолуцької, Микитівської сільської рад.

Населені пункти

У складі громади: міста – Боково-Хрустальне, Міусинськ, Петрово-Красносілля, Хрустальний; селища міського типу – Грушове, Запоріжжя, Іванівка, Княгинівка, Красний Кут, Маломиколаївка, Садово-Хрустальненський, Софіївський, Фащівка, Федорівка, Хрустальне, Штерівка та села – Баштевич, Буткевич, Вергулівське, Воскресенівка, Ганнівка, Давидівка, Єлизаветівка, Жереб'яче, Західне, Зелений Гай, Індустрія, Ковильне, Козаківка, Комендантське, Корінне, Краснолуцький, Курган, Лісне, Микитівка, Новоєлизаветівка, Орлівське, Сонячне, Степове, Тамара, Трубний, Урожайне, Хрустальний, Широкий.

Примітки

Джерела

Громади Луганської області


As a daughter of God, what divine roles and responsibilities do you have now and in the future?
How does your patriarchal blessing help you understand why you are here, what is expected of you, and the blessings Heavenly Father has prepared for you if you live worthily?
How does knowing your purpose in life and your potential as a daughter of God affect the choices you make each day?
Excerpt from "Happiness, Your Heritage"
But to what end were we created? We were created with the express purpose and potential of experiencing a fulness of joy. 4 Our birthright—and the purpose of our great voyage on this earth—is to seek and experience eternal happiness. One of the ways we find this is by creating things.


text:
var IOConsole = React.createClass({
    getInitialState: function() {
        var projectsSrc = this.getLocalSetting("projectsSrc") || "https://boiling-torch-3324.firebaseio.com/v3/users/maxb/projects";
        var modulesSrc = this.getLocalSetting("modulesSrc") || "https://boiling-torch-3324.firebaseio.com/v3/modules";
        var iovisorLoc = this.getLocalSetting("iovisorLoc") || "";

        var categoryVisibility = this.getLocalSetting("categoryVisibility") || {};

        var selectedProjectID = this.getLocalSetting("selectedProjectID");
        var projectsIfcMapping = this.getLocalSetting("projectsIfcMapping") || {};

        return {
            projectsObject: {},
            deployedModules: {},
            deployedLinks: {},
            deployedHostModule: {},
            sortedProjectArray: [],
            modulesObject: {},
            sortedModuleArray: [],
            categoriesObject: {},
            protocolsObject: {},
            mouseDown: false,
            dragging: false,
            modalArray: [],
            menuTarget: false,
            popoverTarget: false,
            startX: 0,
            startY: 0,
            cursorX: 0,
            cursorY: 0,
            selectedProjectID: selectedProjectID,
            projectsIfcMapping: projectsIfcMapping,
            categoryVisibility: categoryVisibility,
            projectsSrc: projectsSrc,
            modulesSrc: modulesSrc,
            iovisorLoc: iovisorLoc
        };
    },

    getDefaultProps: function() {
        return {
            componentInProgress: {
                width: 145,
                height: 76
            },
            policyInProgress: {
                width: 200,
                height: 120
            }
        };
    },

    componentWillMount: function() {
        this.firebaseProjectsRef = new Firebase(this.state.projectsSrc);
        this.firebaseProjectsRef.on("value", function(dataSnapshot) {
            this.handleFirebaseProjects(dataSnapshot)
        }.bind(this));

        this.firebaseModulesRef = new Firebase(this.state.modulesSrc);
        this.firebaseModulesRef.on("value", function(dataSnapshot) {
            this.handleFirebaseModules(dataSnapshot)
        }.bind(this));

        this.updateIOVisorPath({iovisorLoc: this.state.iovisorLoc});

    },

    updateDataSources: function(payload){
        if (payload.projectsSrc != this.state.projectsSrc){
            this.firebaseProjectsRef.off();
            this.firebaseProjectsRef = new Firebase(payload.projectsSrc);

            this.firebaseProjectsRef.on("value", function(dataSnapshot) {
                var isSeeded = dataSnapshot.exists() && dataSnapshot.val() !== true;
                if (!isSeeded){
                    this.firebaseProjectsRef.set(projectsSeed);
                }
                else {
                    this.handleFirebaseProjects(dataSnapshot)
                }
            }.bind(this));

            this.setLocalSetting("projectsSrc", payload.projectsSrc);
        }

        if (payload.modulesSrc != this.state.modulesSrc){
            this.firebaseModulesRef.off();
            this.firebaseModulesRef = new Firebase(payload.modulesSrc);

            //check for existance of seed data (at least)
            this.firebaseModulesRef.on("value", function(dataSnapshot) {
                var isSeeded = dataSnapshot.exists() && dataSnapshot.child("data").exists() && dataSnapshot.child("shared").exists();
                if (!isSeeded){
                    this.firebaseModulesRef.set(modulesSeed);
                }
                else {
                    this.handleFirebaseModules(dataSnapshot)
                }
            }.bind(this));

            this.setLocalSetting("modulesSrc", payload.modulesSrc);
        }

        this.setState({
            projectsSrc: payload.projectsSrc,
            modulesSrc: payload.modulesSrc
        });
    },

    updateIOVisorPath: function(payload){
        this.setLocalSetting("iovisorLoc", payload.iovisorLoc)
        this.setState({
            iovisorLoc: payload.iovisorLoc
        });
        if (payload.iovisorLoc == ""){
            console.log("Empty IO Visor path provided");
            console.log("Using placeholder network interface");
            this.setState({
                networkInterfaces: networkInterfaces
            });
        } else{
            $.ajax({
                url: this.state.iovisorLoc + "/external_interfaces/"
            }).then(
                function(data) {
                    this.setState({
                        networkInterfaces: data
                    });
                }.bind(this),
                function() {
                    console.log("Could not get network interfaces from " + this.state.iovisorLoc + "/external_interfaces/");
                    console.log("Using placeholder network interface");
                    this.setState({
                        networkInterfaces: networkInterfaces
                    });
                }.bind(this)
            );
        }
    },

    handleProjectsIfcMapping: function(projectsObj, selectedProject) {
        var projectsIfcMapping = _.cloneDeep(this.state.projectsIfcMapping);

        if (!projectsIfcMapping[selectedProject]){
            projectsIfcMapping[selectedProject] = {};
            var hostInterfaces = _.get(projectsObj[selectedProject], 'topology.host_interfaces', {});
            for (var ifc in hostInterfaces){
                projectsIfcMapping[selectedProject][ifc] = {};
            }
            this.setLocalSetting("projectsIfcMapping", projectsIfcMapping);
        }
        return projectsIfcMapping;
    },

    handleFirebaseProjects: function(dataSnapshot) {
        var rootProjectsObject = dataSnapshot.val();
        var sortedProjectArray = [];

        for (var key in rootProjectsObject) {
            sortedProjectArray.push({
                key: key,
                name: rootProjectsObject[key].name
            })
        };

        sortedProjectArray.sort(function(a, b){
            return a.name.localeCompare(b.name)
        });

        sortedProjectArray = sortedProjectArray.map(function(obj){
           return obj.key;
        });

        // check for selected project validity
        var currentSelectedProjectID = this.state.selectedProjectID;
        var isValidSelectionID = _.includes(sortedProjectArray, currentSelectedProjectID);
        var targetSelectionID = currentSelectedProjectID;
        if (!isValidSelectionID){
            targetSelectionID = sortedProjectArray[0];
        }

        var projectsIfcMapping = this.handleProjectsIfcMapping(rootProjectsObject, targetSelectionID);
        this.setState({
            selectedProjectID: targetSelectionID,
            projectsObject: rootProjectsObject,
            sortedProjectArray: sortedProjectArray,
            projectsIfcMapping: projectsIfcMapping
        });

    },

    handleFirebaseModules: function(dataSnapshot) {
        var rootModulesObject = dataSnapshot.val();
        var sortedModuleArray = [];

        var modulesObject = rootModulesObject.data;
        for (var key in modulesObject) {
            sortedModuleArray.push({
                key: key,
                name: modulesObject[key].name
            })
        };
        sortedModuleArray.sort(function(a, b){
            return a.name.localeCompare(b.name)
        });
        sortedModuleArray = sortedModuleArray.map(function(obj){
           return obj.key;
        });

        var categoriesObject = rootModulesObject.shared.categories;
        var protocolsObject = rootModulesObject.shared.protocols;

        this.setState({
            modulesObject: modulesObject,
            sortedModuleArray: sortedModuleArray,
            categoriesObject: categoriesObject,
            protocolsObject: protocolsObject
        });
    },

    editPriority: function(payload){
        var selectedProject = this.state.projectsObject[this.state.selectedProjectID];
        var projectDependencies = selectedProject.dependencies;
        var policyModuleArray = [];
        _.forEach(projectDependencies, function(module, id){
            if (module.type == "policy"){
                policyModuleArray.push(module)
            }
        });
        var numberOfPolicies = policyModuleArray.length;

        var updatedProjectPoliciesObject = _.cloneDeep(selectedProject.policies);

        var targetModule = payload.target.getAttribute("data-module");
        var currentPriority = parseInt(payload.target.getAttribute("data-priority"));
        var moveDirection =  payload.target.name;

        if (moveDirection == "priorityDown"){
            var targetPriority = currentPriority + 1
        }
        else {
            var targetPriority = currentPriority - 1
        }

        if (targetPriority > numberOfPolicies || targetPriority < 1){
            return false
        }

        _.forEach(updatedProjectPoliciesObject, function(policy, id){
            if (policy.module == targetModule){
                policy.priority = targetPriority
            }
            else {
                if (moveDirection == "priorityDown" && policy.priority - 1 == currentPriority){
                   policy.priority -= 1
                }
                if (moveDirection == "priorityUp" && policy.priority + 1 == currentPriority){
                   policy.priority += 1
                }
            }
        });

        this.firebaseProjectsRef.child(this.state.selectedProjectID).child("policies").set(updatedProjectPoliciesObject);
    },

    handleActions: function(event){
        var eventName = event.target.name;

        switch(eventName) {
            case "priorityUp":
                this.editPriority(event); break;
            case "priorityDown":
                this.editPriority(event); break;
            case "newProject":
                this.createNewProject(projectTemplate); break;
            case "importProjectJSON":
                this.openModal("importJSON"); break;
            case "repositories":
                this.openModal("librariesSettings"); break;
            case "iovisorPath":
                this.openModal("IOVisorSettings"); break;
            case "downloadJSON":
                document.getElementById('download').click(); break;
            case "deleteProject":
                this.deleteProject(); break;
            case "saveIOModule":
                this.openModal("saveAsModule"); break;
            case "ifcReMap":
                var hostID =  event.target.getAttribute("data-host");
                var newMap = event.target.getAttribute("data-newmap");
                this.updateMappingCookie(hostID, newMap);
                break
            default:
                return false
        }
    },

    updateMappingCookie: function(hostID, newIfcName){
        var updatedObj = this.state.projectsIfcMapping;
        if (newIfcName == "false"){
            newIfcName = {}
        }
        updatedObj[this.state.selectedProjectID][hostID] = newIfcName;
        this.setLocalSetting("projectsIfcMapping", updatedObj);
        this.setState({
            projectsIfcMapping: this.state.projectsIfcMapping
        })
    },

    deleteLink: function(linkObject){
        var selectedProject = this.state.projectsObject[this.state.selectedProjectID];
        var updatedProjectObject = _.cloneDeep(selectedProject);

        var instrumentID = linkObject.instrument.uuid;
        var componentID = linkObject.component;
        var interfaceID = linkObject.ifc || false;

        var interfaceArray = updatedProjectObject.instruments[instrumentID].interfaces || [];

        var pull = null;
        _.forEach(interfaceArray, function(ifc, i){
            if (!ifc.ifc){
                if (ifc.component == componentID){
                    pull = i
                }
            }
            else {
                if (ifc.component == componentID && ifc.ifc == interfaceID){
                    pull = i
                }
            }
        })
        interfaceArray = _.pullAt(interfaceArray, pull);
        interfaceArray = _.uniqWith(interfaceArray, _.isEqual);
        this.firebaseProjectsRef.child(this.state.selectedProjectID).set(updatedProjectObject);
    },

    deleteWire: function(interfaceToken) {
        var selectedProject = this.state.projectsObject[this.state.selectedProjectID];
        var updatedProjectObject = _.cloneDeep(selectedProject);

        var thisWire = interfaceToken.wire;
        var interface1Component = interfaceToken.componentID;
        var interface1Interface = interfaceToken.interfaceID || null;

        var interface2Component = interfaceToken.wireTo.component;
        var interface2Interface = interfaceToken.wireTo.ifc || null;

        delete updatedProjectObject.topology.wires[thisWire];

        if (interface1Interface){
           delete updatedProjectObject.topology.components[interface1Component].interfaces[interface1Interface]
        }

        if (interface2Interface){
           delete updatedProjectObject.topology.components[interface2Component].interfaces[interface2Interface]
        }

        //find instrument wires and delete them
        updatedProjectObject = this.updateInstrumentLinks(updatedProjectObject);

        this.firebaseProjectsRef.child(this.state.selectedProjectID).set(updatedProjectObject);
    },

    updateInstrumentLinks: function(projectObject){
        _.forEach(projectObject.instruments, function(instrument, instrumentID){
            var pullArray = [];
            _.forEach(instrument.interfaces, function(ifc, i){
                var interfaceExists = false;

                _.forEach(projectObject.topology.wires, function(wire, j){
                    if (_.isEqual(wire[0], ifc) || _.isEqual(wire[1], ifc)){
                        interfaceExists = true
                    }
                })

                if (interfaceExists == false){
                    pullArray.push(i)
                }
            })
            _.pullAt(projectObject.instruments[instrumentID].interfaces, pullArray)
        })
        return projectObject
    },

    handleNewWireDrop: function(tokenObject1, tokenObject2) {
        var selectedProject = this.state.projectsObject[this.state.selectedProjectID];
        var tokenArray = [tokenObject1, tokenObject2];
        newProjectTopologyObject = _.cloneDeep(selectedProject.topology);

        var newWire = [];

        _.forEach(tokenArray, function(token) {
            var newInterface = {
                "component": token.componentID || token.hostComponentID,
                "ifc": null
            }
            if (token.componentID){
                newInterface.ifc = "ifc-" + ioid();
                if (!newProjectTopologyObject.components[token.componentID].interfaces){
                    newProjectTopologyObject.components[token.componentID]["interfaces"] = {};
                }
                newProjectTopologyObject.components[token.componentID].interfaces[newInterface.ifc] = {
                    "mode": token.mode,
                    "protocol": token.protocol
                }
            }
            newWire.push(newInterface)
        });

        if (!newProjectTopologyObject.wires){
            newProjectTopologyObject.wires = {};
        }

        var newWireID = "wire-" + ioid();
        newProjectTopologyObject.wires[newWireID] = newWire;

        this.firebaseProjectsRef.child(this.state.selectedProjectID).child("topology").set(newProjectTopologyObject);
    },

    handleNewLinkDrop: function(data, source) {
        if (!source.wireTo){return false};

        var selectedProject = this.state.projectsObject[this.state.selectedProjectID];
        newInstrumentObject = _.cloneDeep(selectedProject.instruments[data.instrument.uuid]);

        if (!newInstrumentObject.interfaces){
           newInstrumentObject.interfaces = []
        }

        if (source.interfaceID){
            var newInterface = {
                "component": source.componentID,
                "ifc": source.interfaceID
            };
        }
        else {
            var newInterface = {
                "component": source.hostComponentID,
            };
        }

        newInstrumentObject.interfaces.push(newInterface);
        newInstrumentObject.interfaces = _.uniqWith(newInstrumentObject.interfaces, _.isEqual);

        this.firebaseProjectsRef.child(this.state.selectedProjectID).child("instruments").child(data.instrument.uuid).set(newInstrumentObject);
    },

    handleNewObjectDrop: function(moduleID, posX, posY){
        var selectedProject = this.state.projectsObject[this.state.selectedProjectID];

        var selectedProjectFirebaseRef = this.firebaseProjectsRef.child(this.state.selectedProjectID);

        var moduleObject = this.state.modulesObject[moduleID];
        var moduleType = moduleObject.type || "component";

        var newProjectObject = _.cloneDeep(selectedProject);

        var newProjectTopologyObject = newProjectObject.topology || {};
        var newProjectViewObject = newProjectObject.view || {};

        var newProjectComponentsObject = newProjectTopologyObject.components || {};
        var newProjectPoliciesObject = newProjectObject.policies || {};
        var projectDependenciesObject = newProjectObject.dependencies || {};

        if (moduleType == "component" || "bpf/forward"){
            var newID = "comp-" + ioid();
            var newViewData = {
                "x": posX,
                "y": posY
            };
            var newComponentData = {
                "module": moduleID
            };
            _.set(newProjectObject, 'topology.components.' + newID, newComponentData)
        }
        else if (moduleType == "policy"){
            var newID = "policy-" + ioid();
            var newViewData = {
                "left": posX,
                "top": posY,
                "width": this.props.policyInProgress.width,
                "height": this.props.policyInProgress.height
            };
            //set new policy with priority of existing policies with the same module
            //or find the lowest priority (highest number) and +1
            var newPolicyObject = newProjectObject.policies || {};
            var newPriority = 1;

            if (!_.includes(JSON.stringify(newPolicyObject), moduleID)){
                var highestPriorityNumber = 0;
                _.forEach(newProjectObject.policies, function(policy, id){
                    if (policy.priority > highestPriorityNumber){
                        highestPriorityNumber = policy.priority
                    }
                })
                newPriority = highestPriorityNumber + 1
            }
            else {
                _.forEach(newProjectObject.policies, function(policy, id){
                    if (policy.module == moduleID){
                        newPriority = policy.priority
                    }
                })
            }

            var newPolicyData = {
                "module": moduleID,
                "priority": newPriority
            };
            _.set(newProjectObject, 'policies.' + newID, newPolicyData)
        }
        else if (moduleType == "instrument"){
            var newID = "instrument-" + ioid();
            var newViewData = {
                "left": posX,
                "top": posY,
                "width": moduleObject.view.width,
                "height": moduleObject.view.height
            };
            var newInstrumentData = {
                "module": moduleID
            };
            _.set(newProjectObject, 'instruments.' + newID, newInstrumentData)
        }

        //dependencies
        if (!projectDependenciesObject[moduleID]){ // module is NOT already a dependency, so deal with dependencies
            var newProjectDependenciesObject = _.cloneDeep(projectDependenciesObject) || {};
            var moduleClone = _.cloneDeep(this.state.modulesObject[moduleID]); //must exist because user dragged and dropped
            var moduleCloneDependencies = moduleClone.dependencies || {};

            newProjectDependenciesObject[moduleID] = moduleClone;//original module copied to project

            //move modules's nested dependencies to top-level dependencies and change nested dependent modules to "true"
            _.forEach(moduleCloneDependencies, function(nestedModuleObject, nestedModuleID){
                if (!projectDependenciesObject[nestedModuleID]){ // nested module is not already a dependency
                    //add module (data from parent module) to project dependencies
                    newProjectDependenciesObject[nestedModuleID] = _.cloneDeep(moduleCloneDependencies[nestedModuleID]);
                }
                // change nested module ID value to true
                moduleCloneDependencies[nestedModuleID] = true
            });

            _.set(newProjectObject, 'dependencies', newProjectDependenciesObject);
        }
        _.set(newProjectObject, 'view.' + newID, newViewData)

        selectedProjectFirebaseRef.set(newProjectObject);
    },

    handleNewHostIfc: function(newHostID, ifcType, payload){
        var selectedProject = this.state.projectsObject[this.state.selectedProjectID];

        var selectedProjectFirebaseRef = this.firebaseProjectsRef.child(this.state.selectedProjectID);
        var newProjectObject = _.cloneDeep(selectedProject);

        var updatedObj = this.state.projectsIfcMapping;
        var currentProjectIfcMap = updatedObj[this.state.selectedProjectID];

        var newProjectHostIfcObject = {
            "mode": "bi",
            "protocol": "protocol-3we4",
            "type": ifcType
        }

        var xArray = [];
        for (id in newProjectObject.view){
            if (_.startsWith(id, 'host') && newProjectObject.view[id].y == 50){ //host interfaces at y=50
                var dimX = newProjectObject.view[id].x
                xArray.push(dimX)
            }
        }

        var pitch = 105;
        var availablePositionX =  10;

        while (_.includes(xArray, availablePositionX)){
            availablePositionX += pitch
        }

        var newViewData = {
            "x": availablePositionX,
            "y": 50
        }
        _.set(newProjectObject, 'view.' + newHostID, newViewData);
        _.set(newProjectObject, 'topology.host_interfaces.' + newHostID, newProjectHostIfcObject);

        selectedProjectFirebaseRef.set(newProjectObject);

        currentProjectIfcMap[newHostID] = payload;
        this.setLocalSetting("projectsIfcMapping", updatedObj);
        this.setState({
            projectsIfcMapping: updatedObj
        })
    },

    handleDelHostIfc: function(newHostID){
        var newProjectViewObject = this.state.projectsObject[this.state.selectedProjectID].view || {};
        var newProjectHostIfcObject = this.state.projectsObject[this.state.selectedProjectID].topology.host_interfaces || {};

        newProjectHostIfcObject[newHostID] = {
            "mode": "bi",
            "protocol": "protocol-3we4",
            "type": ifcType
        }

        newProjectViewObject[newHostID] = {
            "x": 10,
            "y": 10
        }

        this.firebaseProjectsRef.child(this.state.selectedProjectID).child("view").set(newProjectViewObject)
        this.firebaseProjectsRef.child(this.state.selectedProjectID).child("topology").child("host_interfaces").set(newProjectHostIfcObject)
    },

    handlePolicyUpdate: function(id, left, top, height, width) {
        var newProjectObject = _.cloneDeep(this.state.projectsObject[this.state.selectedProjectID]);
        var policyView = newProjectObject.view[id];
        policyView.left = left;
        policyView.top = top;
        policyView.height = height;
        policyView.width = width;

        if (policyView.left <= 0 || policyView.top <= headerHeight){
            this.deleteObject(id)
        }
        else {
            this.firebaseProjectsRef.child(this.state.selectedProjectID).set(newProjectObject)
        }
    },

    handleInstrumentUpdate: function(id, instrument) {
        var newProjectObject = _.cloneDeep(this.state.projectsObject[this.state.selectedProjectID]);
        var instrumentView = newProjectObject.view[id];
        instrumentView.left = instrument.left;
        instrumentView.top = instrument.top;
        instrumentView.height = instrument.height;
        instrumentView.width = instrument.width;

        if (instrumentView.left <= 0 || instrumentView.top <= headerHeight){
            this.deleteObject(id)
        }
        else {
            this.firebaseProjectsRef.child(this.state.selectedProjectID).set(newProjectObject)
        }
    },

    updatePoliciesData: function(policiesData) {
        var newProjectPoliciesObject = _.cloneDeep(this.state.projectsObject[this.state.selectedProjectID].policies) || {};
        _.forEach(policiesData, function(policy, policyID){
            var computedInterfaces = policy.computedInterfaces;
            _.set(newProjectPoliciesObject[policyID], 'interfaces', computedInterfaces);
        })
        this.firebaseProjectsRef.child(this.state.selectedProjectID).child("policies").set(newProjectPoliciesObject)
    },

    deleteHostIfc: function(hostID) {
        var confirmObjectDeletion = confirm("Delete this item?");
        if (confirmObjectDeletion == true) {

            var selectedProject = this.state.projectsObject[this.state.selectedProjectID];
            var newProjectObject = _.cloneDeep(selectedProject);

            //delete view data
            newProjectObject.view[hostID] = null;

            //delete component from topology
            delete newProjectObject.topology.host_interfaces[hostID];

            var topologyComponents = newProjectObject.topology.components;

            //find wires and delete them
            if (newProjectObject.topology.wires){
                for (var wire in newProjectObject.topology.wires){
                    var wireObject = newProjectObject.topology.wires[wire];
                    if (wireObject[0].component == hostID){
                        delete newProjectObject.topology.wires[wire];
                        //find interface on other component and delete
                        if (newProjectObject.topology.components[wireObject[1].component]){
                            newProjectObject.topology.components[wireObject[1].component].interfaces[wireObject[1].ifc] = null
                        }
                    }
                    if (wireObject[1].component == hostID){
                        delete newProjectObject.topology.wires[wire];
                        //find interface on other component and delete
                        if (newProjectObject.topology.components[wireObject[0].component]){
                            newProjectObject.topology.components[wireObject[0].component].interfaces[wireObject[0].ifc] = null
                        }
                    }
                }
            }

            //update instrument links
            newProjectObject = this.updateInstrumentLinks(newProjectObject);

            var updatedObj = this.state.projectsIfcMapping;

            if (updatedObj[this.state.selectedProjectID][hostID]){
                delete updatedObj[this.state.selectedProjectID][hostID];
            }

            this.setLocalSetting("projectsIfcMapping", updatedObj);
            this.setState({
                projectsIfcMapping: updatedObj
            })
            this.firebaseProjectsRef.child(this.state.selectedProjectID).set(newProjectObject);
        }
        else {
            this.forceUpdate()
        }
    },

    handleObjectDrop: function(objectID, deltaX, deltaY) {
        var newProjectObject = _.cloneDeep(this.state.projectsObject[this.state.selectedProjectID]);

        newProjectObject.view[objectID].x += deltaX;
        newProjectObject.view[objectID].y += deltaY;

        if (newProjectObject.view[objectID].x <= 0 || newProjectObject.view[objectID].y <= headerHeight){
            if (objectID.indexOf('host') == 0){
                this.deleteHostIfc(objectID);
            }else{
                this.deleteObject(objectID);
            }
        }else {
            this.firebaseProjectsRef.child(this.state.selectedProjectID).set(newProjectObject);
        }
    },

    deleteObject: function(objectID) {
        var confirmObjectDeletion = confirm("Delete this item?");
        if (confirmObjectDeletion == true) {
            var selectedProject = this.state.projectsObject[this.state.selectedProjectID];

            var newProjectObject = _.cloneDeep(selectedProject);

            if (objectID.indexOf('comp') == 0){
                var moduleDependencyID = selectedProject.topology.components[objectID].module;

                //delete component from topology
                delete newProjectObject.topology.components[objectID];

                //find wires and delete them
                if (newProjectObject.topology.wires){
                    for (var wire in newProjectObject.topology.wires){
                        var wireObject = newProjectObject.topology.wires[wire];
                        if (wireObject[0].component == objectID){
                            delete newProjectObject.topology.wires[wire];
                            //find interface on other component and delete
                            var otherComponent = newProjectObject.topology.components[wireObject[1].component] || false;
                            if (otherComponent){
                                otherComponent.interfaces[wireObject[1].ifc] = null
                            }
                        }
                        //repeat for other end
                        if (wireObject[1].component == objectID){
                            delete newProjectObject.topology.wires[wire];
                            //find interface on other component and delete
                            var otherComponent = newProjectObject.topology.components[wireObject[0].component] || false;
                            if (otherComponent){
                                otherComponent.interfaces[wireObject[0].ifc] = null
                            }
                        }
                    }
                }

                //find instrument wires and delete them
                newProjectObject = this.updateInstrumentLinks(newProjectObject);

            }
            else if (objectID.indexOf('policy') == 0){
                var moduleDependencyID = selectedProject.policies[objectID].module;
                var deletedPriority = selectedProject.policies[objectID].priority;

                //delete policy from policies
                delete newProjectObject.policies[objectID];
                //update priorities of remaining policies
                // check to see if any more of the deleted policy
                if (!_.includes(JSON.stringify(newProjectObject.policies), moduleDependencyID)){
                    _.forEach(newProjectObject.policies, function(policy, id){
                        if (policy.priority > deletedPriority){
                            policy.priority -= 1
                        }
                    })
                }
            }

            else if (objectID.indexOf('instrument') == 0){
                var moduleDependencyID = selectedProject.instruments[objectID].module;

                //delete instrument from instruments
                delete newProjectObject.instruments[objectID];
            }

            //delete view data
            delete newProjectObject.view[objectID];

            //manage dependencies
            var topologyComponents = _.get(newProjectObject, 'topology.components', {});
            var policies = newProjectObject.policies;
            var instruments = newProjectObject.instruments;

            var moduleArray = [];
            _.forEach(topologyComponents, function(component){
                var module = component.module;
                moduleArray.push(module);
            });
            _.forEach(policies, function(policy){
                var module = policy.module;
                moduleArray.push(module);
            });
            _.forEach(instruments, function(instrument){
                var module = instrument.module;
                moduleArray.push(module);
            });
            moduleArray = _.uniq(moduleArray);

            _.forEach(moduleArray, function(id){
                var directDependency = selectedProject.dependencies[id];
                if (directDependency.dependencies){
                    _.forEach(directDependency.dependencies, function(value, key){
                        moduleArray.push(key)
                    });
                }
            });
            moduleArray = _.uniq(moduleArray);

            var newProjectDependencies = {};
            _.forEach(moduleArray, function(id){
                var newDependency = selectedProject.dependencies[id];
                newProjectDependencies[id] = newDependency
            });

            newProjectObject.dependencies = newProjectDependencies;
            this.firebaseProjectsRef.child(this.state.selectedProjectID).set(newProjectObject)
        }
        else {
            this.forceUpdate()
        }
    },

    createNewProject: function(projectTemplate) {
        var newProjectsObject = _.cloneDeep(this.state.projectsObject);
        var newProjectID = "project-" + guid();

        newProjectsObject[newProjectID] = projectTemplate;

        this.firebaseProjectsRef.set(newProjectsObject);
        var projectsIfcMapping = this.handleProjectsIfcMapping(newProjectsObject, newProjectID);
        this.setState({
            selectedProjectID: newProjectID,
            projectsIfcMapping: projectsIfcMapping
        });
        this.setLocalSetting("selectedProjectID", newProjectID);
    },

    deleteProject: function() {
        var confirmProjectDeletion = confirm("Delete all versions of " + this.state.projectsObject[this.state.selectedProjectID].name + "?");
        if (confirmProjectDeletion == true) {
            var indexOfSelectedProject = _.indexOf(this.state.sortedProjectArray, this.state.selectedProjectID);

            var newSelectedProjectIndex = indexOfSelectedProject - 1;
            if (newSelectedProjectIndex == -1){
                newSelectedProjectIndex = 1
            }
            var newSelectedProject = this.state.sortedProjectArray[newSelectedProjectIndex];

            this.firebaseProjectsRef.child(this.state.selectedProjectID).remove();
            this.setState({
                selectedProjectID: newSelectedProject
            });
            this.setLocalSetting("selectedProjectID", newSelectedProject);
        }
    },

    renameProject: function(newName) {
        this.firebaseProjectsRef.child(this.state.selectedProjectID).child('name').set(newName)
    },

    handleCategoryClick: function(category, isOpen) {
        var newVisibility = _.cloneDeep(this.state.categoryVisibility);
        newVisibility[category] = !isOpen;
        this.setState({
            categoryVisibility: newVisibility
        });
        this.setLocalSetting("categoryVisibility", newVisibility);
    },

    handleProjectClick: function(payload) {
        if (payload.projectID != this.state.selectedProjectID){
            var projectsIfcMapping = this.handleProjectsIfcMapping(this.state.projectsObject, payload.projectID);
            this.setLocalSetting("selectedProjectID", payload.projectID);
            this.setState({
                selectedProjectID: payload.projectID,
                projectsIfcMapping: projectsIfcMapping
            });
        }
    },

    onModuleMouseDown: function(thisModule){
        if (event.button == 0){
            event.stopPropagation();
            this.addDocumentEvents();

            this.setState({
                mouseDown: thisModule,
                startX: event.pageX,
                startY: event.pageY
            });
        }
    },

    onMouseMove: function(event) { //captured on document
        var cursorX = event.pageX;
        var cursorY = event.pageY;
        var deltaX = cursorX - this.state.startX;
        var deltaY = cursorY - this.state.startY;
        var distance = Math.abs(deltaX) + Math.abs(deltaY);

        if (this.state.dragging == false && distance > 4){ //dragging
            this.setState({
                dragging: this.state.mouseDown
            });
        }

        if (this.state.dragging){
            this.setState({
                cursorX: cursorX,
                cursorY: cursorY
            });
        }
    },

    onMouseUp: function(event) { //captured on document
        var dropID = this.state.dragging;
        var dropObject = this.state.modulesObject[dropID];

        var dropType = dropObject.type || "component";

        var workspaceElement = this.refs.workspace.getDOMNode().getBoundingClientRect();
        var workspaceOriginX = workspaceElement.left;
        var workspaceOriginY = workspaceElement.top;

        if (dropType == "component" || dropType == "bpf/forward"){
            var dims = this.props.componentInProgress
        }
        else if (dropType == "policy") {
            var dims = this.props.policyInProgress
        }
        else if (dropType == "instrument") {
            var dims = dropObject.view
        }

        var newComponentX = event.pageX - workspaceOriginX - (dims.width / 2);
        var newComponentY = event.pageY - workspaceOriginY - (dims.height / 2);

        if (newComponentX > 0 && newComponentY > headerHeight){
            this.handleNewObjectDrop(this.state.dragging, newComponentX, newComponentY)
        }

        this.removeDocumentEvents();

        this.setState({
            mouseDown: false,
            dragging: false
        });
    },

    addDocumentEvents: function() {
        document.addEventListener('mousemove', this.onMouseMove);
        document.addEventListener('mouseup', this.onMouseUp);
    },

    removeDocumentEvents: function() {
        document.removeEventListener('mousemove', this.onMouseMove);
        document.removeEventListener('mouseup', this.onMouseUp);
    },

    closeMenu: function() {
        this.setState({
            menuTarget: false,
        });
    },

    openMenu: function(event) {
        this.setState({
            menuTarget: event.target,
        });
    },

    closePopover: function() {
        this.setState({
            popoverTarget: false,
        });
    },

    openPopover: function(event) {
        this.setState({
            popoverTarget: event.target,
        });
    },

    openModal: function(modalName) {
        var newArray = _.cloneDeep(this.state.modalArray);
        newArray.push(modalName);
        this.setState({
            modalArray: newArray,
        });
    },

    cancelModal: function(modalName) {
        var newArray = _.cloneDeep(this.state.modalArray);
        var indexToRemove = newArray.indexOf(modalName);
        newArray.splice(indexToRemove, 1);
        this.setState({
            modalArray: newArray,
        });
    },

    submitModal: function(modalName, payload) {
        if (modalName == "saveAsModule"){
            this.saveAsModule(payload)
        }
        if (modalName == "librariesSettings"){
            this.updateDataSources(payload)
        }
        if (modalName == "IOVisorSettings"){
            this.updateIOVisorPath(payload)
        }
        if (modalName == "importJSON"){
            importProjectTemplate = JSON.parse(payload);
            importProjectTemplate.name = "Imported Project";
            this.createNewProject(importProjectTemplate)
        }
        this.cancelModal(modalName)
    },

    setLocalSetting: function(settingName, newObject){
        var setting = JSON.stringify(newObject);
        window.localStorage.setItem(settingName, setting);
    },

    getLocalSetting: function(settingName){
        var setting = window.localStorage.getItem(settingName);
        setting = JSON.parse(setting);
        return setting
    },

    saveAsModule: function(payload){
        // get interfaces from wired host interfaces
        // loop through wires and save component id if component is a host interface
        var project = this.state.projectsObject[this.state.selectedProjectID];
        var projectTopology = project.topology;
        var projectComponents = projectTopology.components;
        var projectWires = projectTopology.wires;
        var projectHostInterfaces = projectTopology.host_interfaces;
        var projectDependencies = project.dependencies;

        var hostInterfaceArray = [];
        for (var wire in projectWires) {
            thisWireObject = projectWires[wire];
            var component1 = thisWireObject[0].component;
            var component2 = thisWireObject[1].component;
            if (component1.indexOf('host') == 0){
                hostInterfaceArray.push(component1)
            }
            if (component2.indexOf('host') == 0){
                hostInterfaceArray.push(component2)
            }
        }
        // get mode and protocol of host interface
        var newModuleInterfaceArray = [];
        for (var i = 0; i < hostInterfaceArray.length; i++){
            thisInterface = hostInterfaceArray[i];
            thisInterfaceObject = projectHostInterfaces[thisInterface];
            var inverseMode = "bi";
            if (thisInterfaceObject.mode == "out"){
                inverseMode = "in"
            }
            if (thisInterfaceObject.mode == "in"){
                inverseMode = "out"
            }
            newModuleInterfaceArray.push({
                "capacity": 1,
                "id": thisInterface,
                "mode": inverseMode,
                "protocol": thisInterfaceObject.protocol
            });
        }

        var newModuleID = "module-" + guid();

        var categoriesObject = {};

        var isUncategorised = _.isEmpty(payload.categories);

        if (isUncategorised){
            categoriesObject = null
        }
        else {
            for (var category in payload.categories) {
                var thisCategory = payload.categories[category];
                categoriesObject[thisCategory] = true
            }
        }

        var topologyObject = {
            "interfaces": newModuleInterfaceArray,
            "components": projectComponents,
            "wires": projectWires
        };

        var moduleObject = {
            name: payload.name,
            description: payload.description,
            categories: categoriesObject,
            topology: topologyObject,
            version: "0.0.1",
            dependencies: projectDependencies
        }

        this.firebaseModulesRef.child('data').child(newModuleID).set(moduleObject);

        //add module id to the relevant categories
        var categoryObject = {};
        if (isUncategorised){
            categoryObject[newModuleID] = true;
            this.firebaseModulesRef.child('shared').child('categories').child('uncategorised').child('modules').update(categoryObject);
        }
        else {
            for (var category in payload.categories) {
                var thisCategory = payload.categories[category];
                categoryObject[newModuleID] = true;
               this.firebaseModulesRef.child('shared').child('categories').child(thisCategory).child('modules').update(categoryObject);
            }
        }
    },

    onHostIfcClick : function(payload, ifcType){
        var projectsObj = this.state.projectsObject;

        var updatedObj = this.state.projectsIfcMapping;
        var hostIfcMap = updatedObj[this.state.selectedProjectID];
        var found = 0;
        for (var ifc in hostIfcMap){
            if (hostIfcMap[ifc] == payload){
                this.deleteHostIfc(ifc);
                found = 1;
            }
        }
        if (found == 0){
            var newKey="host-" + guid();
            this.handleNewHostIfc(newKey, ifcType, payload)
        }
    },

    deleteDeployedModules: function(modules){
        var promise_array = [];
        for (var deployedModule in modules){
            if (modules[deployedModule]["module_type"] == "bpf/forward" || modules[deployedModule]["module_type"] == "bpf/policy"){
                //console.log("Deleting module" + modules[deployedModule]["id"]);
                promise_array.push(this.deleteIOVisor("/modules/" + modules[deployedModule]["id"]));
            }
        }
        return promise_array;
    },

    deployVisibleModules: function(){
        var promise_array = [];
        var moduleObject = "";
        var selectedProjectComponents = this.state.projectsObject[this.state.selectedProjectID].topology.components;
        _.forEach(selectedProjectComponents, function(component) {
            moduleObject = this.state.modulesObject[component.module];
            console.log(component.module);
            _.unset(moduleObject, 'topology');
            _.unset(moduleObject, 'description');
            _.unset(moduleObject, 'categories');
            _.unset(moduleObject, 'version');

            _.set(moduleObject, 'module_type', moduleObject.type);
            _.unset(moduleObject, 'type');

            _.set(moduleObject, 'display_name', moduleObject.name);
            _.unset(moduleObject, 'name');

            _.set(moduleObject, 'tags', []);
            console.log(JSON.stringify(moduleObject));
            promise_array.push(this.postIOVisor("/modules/", JSON.stringify(moduleObject)));
        }.bind(this));
        return promise_array;
    },

    deleteIOVisor: function(path){
        console.log("delete" + path);
        return $.ajax({
            type: "DELETE",
            url: this.state.iovisorLoc + path,
            timeout: 10000
        })
    },

    getIOVisor: function(path){
        return $.ajax({
            url: this.state.iovisorLoc + path,
            timeout: 10000
        })
    },

    postIOVisor: function(path, data){
        return $.ajax({
            type: "POST",
            url: this.state.iovisorLoc + path,
            data: data,
            dataType: "json",
            timeout: 10000
        })
    },

    deployToIOVisor: function(){
        // Read modules and delete all of types:
        // -- bpf/forward
        // -- bpf/policy
        // Attached links are automatically deleted by the server to each module
        // BRENDEN - Could there be any other links to external interfaces that we might want deleted?
        this.openModal("loadingModal");
        this.getIOVisor("/modules/")
            /*.then(
                function(input){
                    var promise_array = this.deleteDeployedModules(input);
                    return ($.when.apply(this, promise_array));
                }.bind(this))*/
            .then(function(){
                var promise_array = this.deployVisibleModules();
                return ($.when.apply(this, promise_array));
            }.bind(this))
            .then(function(){
                return this.getIOVisor("/modules/")}.bind(this))
            .then(function(input){
                console.log(input);
                this.cancelModal("loadingModal");
            }.bind(this))
            .fail(function(err){
                this.cancelModal("loadingModal");
                console.log("Deploy was unsuccessful");
                console.log(err);
                alert("Deploy was unsuccessful");
            }.bind(this));

/*
        deployedModules = this.getIOVisorAsync("/modules/");
        deployedLinks = this.getIOVisorAsync("/links/");

        if (deployedModules == "FAILED" || deployedLinks == "FAILED"){
            alert("Could not read modules and links from IO Visor");
            return;
        }

        // Delete modules and links
        for (var deployedLink in deployedLinks){
            console.log("Found deployed link " + deployedLink)
        }

        for (var deployedModule in deployedModules){
            console.log(deployedModule);
            if (deployedModule["id"] != "host"){
                // delete deployed modules here
                console.log("Found deployed module " + deployedModule["display_name"])
            } else {
                console.log("Found host module");
                this.setState({
                    deployedHostModule: deployedModule
                });
            }
        }

*/
        // Read interfaces and confirm if interfaces being deployed are still valid
        // If valid proceed else alert the user and update networkInterfaces and hostIfcMapping

        // Add new modules and links
    },

    render: function() {
        if (_.isEmpty(this.state.modulesObject) || _.isEmpty(this.state.projectsObject)){
            return false
        }

        var selectedProject = this.state.projectsObject[this.state.selectedProjectID];

        var componentInProgress;
        var policyInProgress;
        var instrumentInProgress;
        if (this.state.dragging){
            var moduleID = this.state.mouseDown;
            var moduleObject = this.state.modulesObject[moduleID];
            var moduleName = moduleObject.name;
            var moduleVersion = moduleObject.version;
            var moduleType = moduleObject.type || "component";

            if (moduleType == "policy"){
               policyInProgress = <PolicyInProgress
                    moduleID = {moduleID}
                    module = {moduleObject}
                    dims = {this.props.policyInProgress}
                    thisX = {this.state.cursorX}
                    thisY = {this.state.cursorY}/>
            }
            else if (moduleType == "instrument"){
               instrumentInProgress = <InstrumentInProgress
                    moduleID = {moduleID}
                    module = {moduleObject}
                    thisX = {this.state.cursorX}
                    thisY = {this.state.cursorY}/>
            }
            else if (moduleType == "component" || moduleType == "bpf/forward"){
                componentInProgress = <ComponentInProgress
                    thisModuleID = {moduleID}
                    moduleName = {moduleName}
                    moduleVersion = {moduleVersion}
                    thisWidth = {this.props.componentInProgress.width}
                    thisHeight = {this.props.componentInProgress.height}
                    thisX = {this.state.cursorX}
                    thisY = {this.state.cursorY}/>
            }
        }

        var modalDialogues = [];
        if (this.state.modalArray.length > 0){

            _.forEach(this.state.modalArray, function(modalName) {
                var modalDialogue = (<ModalDialogue
                    projectsSrc = {this.state.projectsSrc}
                    modulesSrc = {this.state.modulesSrc}
                    iovisorLoc = {this.state.iovisorLoc}
                    key = {modalName}
                    modalName = {modalName}
                    categories = {this.state.categoriesObject}
                    selectedProject = {selectedProject}
                    projectID = {this.state.selectedProjectID}
                    submitModal = {this.submitModal}
                    cancelModal = {this.cancelModal}/>
                );

                modalDialogues.push(modalDialogue)
            }.bind(this));
        }

        var menu = null;
        if (this.state.menuTarget != false){
            menu = (
                <Menu
                    projects = {this.state.projectsObject}
                    selectedProject = {selectedProject}
                    ifcMap = {this.state.projectsIfcMapping[this.state.selectedProjectID]}
                    networkInterfaces = {this.state.networkInterfaces}
                    handleActions = {this.handleActions}
                    closeMenu = {this.closeMenu}
                    menuTarget = {this.state.menuTarget}/>
            );
        }

        var popover = null;
        if (this.state.popoverTarget != false){
            popover = (
                <Popover
                    projects = {this.state.projectsObject}
                    iovisorLoc = {this.state.iovisorLoc}
                    selectedProject = {selectedProject}
                    onHostIfcClick = {this.onHostIfcClick}
                    handleActions = {this.handleActions}
                    closePopover = {this.closePopover}
                    networkInterfaces = {this.state.networkInterfaces}
                    selectedProjectIfcMapping = {this.state.projectsIfcMapping[this.state.selectedProjectID] || {}}
                    popoverTarget = {this.state.popoverTarget}/>
            );
        }

        var downloadData = "data: text/json;charset=utf-8," + encodeURIComponent(JSON.stringify(selectedProject));

        return (
            <div id="IOConsole">
                <div id="navigation">
                    <Home
                        menuTarget = {this.state.menuTarget}
                        openMenu = {this.openMenu}/>
                    <PrimaryNav
                        onProjectClick = {this.handleProjectClick}
                        onCategoryClick = {this.handleCategoryClick}
                        onModuleMouseDown = {this.onModuleMouseDown}
                        projects = {this.state.projectsObject}
                        sortedProjectArray = {this.state.sortedProjectArray}
                        modules = {this.state.modulesObject}
                        sortedModuleArray = {this.state.sortedModuleArray}
                        categories = {this.state.categoriesObject}
                        categoryVisibility = {this.state.categoryVisibility}
                        selectedProjectID = {this.state.selectedProjectID}/>
                </div>
                <div id="main">
                    <div id="header">
                        <Tools
                            selectedProject = {selectedProject}
                            openModal = {this.openModal}
                            openMenu = {this.openMenu}
                            openPopover = {this.openPopover}
                            renameProject = {this.renameProject}
                            iovisorLoc = {this.state.iovisorLoc}
                            deployToIOVisor = {this.deployToIOVisor}/>
                    </div>
                    <div id="workspace">
                        <Workspace
                            ref = "workspace"
                            className = "ui-module workspace"
                            menuTarget = {this.state.menuTarget}
                            handleObjectDrop = {this.handleObjectDrop}
                            openMenu = {this.openMenu}
                            openPopover = {this.openPopover}
                            handleInstrumentUpdate = {this.handleInstrumentUpdate}
                            handlePolicyUpdate = {this.handlePolicyUpdate}
                            updatePoliciesData = {this.updatePoliciesData}
                            handleWireDrop = {this.handleNewWireDrop}
                            handleLinkDrop = {this.handleNewLinkDrop}
                            deleteWire = {this.deleteWire}
                            deleteLink = {this.deleteLink}
                            protocols = {this.state.protocolsObject}
                            selectedProjectID = {this.state.selectedProjectID}
                            selectedProjectIfcMapping = {this.state.projectsIfcMapping[this.state.selectedProjectID] || {}}
                            selectedProject = {selectedProject}/>
                    </div>
                </div>
                {componentInProgress}
                {policyInProgress}
                {instrumentInProgress}
                {modalDialogues}
                {popover}
                {menu}
                <a
                    href = {downloadData}
                    download = {selectedProject.name + " (" + selectedProject.version + ").json"}
                    id = "download"
                    hidden></a>
            </div>

        );
    },
});

React.render(<IOConsole></IOConsole>, document.body);


text:
Q: What is XNoMonomorphismRestriction? This page usages
$ ghci -XNoMonomorphismRestriction
to start the haskell interpreter.
What does XNoMonomorphismRestriction switch mean?

A: It turns off the Monomorphism restriction, which restricts values which are not defined using "function notation"¹ to have a non-polymorphic type.

¹ By "not using function notation" I mean that they're defined as foo = something and not foo bar = something, i.e. the definition does not contain explicit arguments.


text:
New Zealand to lift coronavirus curbs in most of country on Sept. 21
New Zealand will lift coronavirus restrictions across the country on Sept. 21, except in its biggest city, Auckland, which is the epicenter of a second wave of infections, Prime Minister Jacinda Ardern said on Monday.
Ardern said Auckland's restrictions would be reviewed next Monday. She also said the government would immediately ease all physical distancing requirements on planes, a boost for Air New Zealand, which has had to limit passengers on its planes for months.
"I know this change will make a real difference to Air New Zealand and those parts of the country seeking increased numbers of visitors," Ardern said in a news conference in the South Island city of Dunedin, where she is on an election campaign trip.
Masks will still be mandatory on all public transport, she said.
New Zealand, a nation of five million, had appeared to have succeeded in halting community transmission of COVID-19, but a fresh outbreak in Auckland in August prompted the government to place the city back in lockdown.
Prime Minister Jacinda Ardern, who is facing a general election on Oct. 17, scaled back the restrictions this month, but the city is still under alert level 2.5, meaning social gatherings of more than 10 people are not allowed.
Ardern cabinet will review the current rules for Auckland at its meeting on Sept. 21, with a view to increase gathering limits if the situation stays stable.
That change, if it comes, will take effect on Sept. 23, she said.
New Zealand on Monday reported one new case of coronavirus in the community, taking the total number of cases to 1,447 and 24 deaths.
By adminSeptember 15, 2020News
European air travel nosedives as virus resurges
South Africa to reopen borders to most countries on Oct 1


Do you remember these typewriters?
Have you ever seen or used one of these typewriters?
I can't remember if I have used one!!
Not quite sure what that signifies......either that I am old enough to know this typewriter and have an ageing memory or I have not used one.
I have however used a later version of this one and remember the clackety clack of these noisy old machines.
Also when going for interviews, if you made a typing error that went against you! There was no back spacing to correct an error - start again, and then I remember we were so excited when the white stuff came out where you could obliterate a word and go back and type over it......those good ol' days!
My Dad has an old typewriter, but I don't think it is quite that old !! I used to use it to type up essays and school assignments, because we didn't have anything else. Typed assignments always looked better presented in my opinion. That's another thing that I will inherit from him.
I haven't even thought of what to do with it whilst he is still alive, but ill keep that in mind.
I certainly don't think I have ever seen a genuine Underwood and the only typewriter I vaguely remember having anything to do with was a small electric one but I can't remember whose it was or why I remember it. How odd.
LOL not odd -seniors moment? yet again?
Ah . . of course!
so Jonaj, you are just a spring chicken compared to rice and myself?
This is way before my time. I've seen old models but not this old.
In the mid-60's, I learnt 'Typing' at School on a 'Royal'. I used the same one for two years', so I was very 'used' to it come Exam time!
Used several different brands' Jan'69-Jan'73 in typing jobs'.
Personally, I next got an 'Electric' one, in mid-'70's, Brand 'Olivetti', I think.
The rest, as is said, is history!
Yes, I've used this very same typewriter at school to learn tk type. We had to make a bib with tape on the corners which was used to tie at the back of the typewriter and the other was sewn in a loop which went over your head and around your neck so you couldn't see the keyboard. This was the way we were taught touch typing.
Yes I remember these typewriters. I didn't use an Underwood, but was taught to touch type on an Imperial typewriter which looked similar to the one in the photo, eventually through time progressed to an electric typewriter, and then, of course, to computers. Looking back I can't believe I got a certificate for 100 wpm touch typing on the old black Imperial I used at school. It was such heavy going hitting the keys - you really had to put in a bit of force to make the keys hit the platen. I worked in a bank typing up legal documents. No errors were countenanced - if you made a mistake out came the paper and you started again!
I had SEEN very old fashioned typewriters when I was little,but I have never used one like this!! I never did typing at school as I was more interested in Art subjects as well as English and Maths! Yes! an odd combination of interests,but I really loved my school years!
I had a few lessons on some old 1 between '60-'64, but I don't know the name of it. I can only remember my father using a small 1, something like the 1 in Jonaj's photo & a similar colour. I (And he passed away in '79) t's our spare room..... somewhere, so I can't give you a name of it!
Do you fill your wheelie rubbish bin each week?


text:
Q: Execute curl command in gradle to upload files I am trying to upload file using curl through gradle. I am facing some issues when executing build.gradle.
Code:
task publisher(dependsOn: rpmpackage)  {
    exec {
        executable "curl"; args "-k", "-u", "'un:pwd'" , " -F upload=@/distributions/test.rpm" , "http://ip:port/#browse/browse:test-files:com%2Fcompany%2Fcomponent"
    }
}

Error:
 % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0curl: (6) Could not resolve host: ; Unknown error

100  5037  100  5037    0     0  1703k      0 --:--:-- --:--:-- --:--:-- 1703k

<!DOCTYPE html>
<html>
<head>
  <title>Nexus Repository Manager</title>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  <meta name="description" content="Nexus Repository Manager"/>
  <meta http-equiv="X-UA-Compatible" content="IE=9"/>

  <!--[if lt IE 9]>
    <script>(new Image).src="http://ip:port/static/rapture/resources/favicon.ico?_v=3.12.1-01"</script>
  <![endif]-->
  <link rel="icon" type="image/png" href="http://ip:port/static/rapture/resources/favicon-32x32.png?_v=3.12.1-01" sizes="32x32">
  ........................................

<form id="history-form" class="x-hide-display">
  <input type="hidden" id="x-history-field"/>
  <iframe id="x-history-frame"></iframe>
</form>

</body>
</html>

> Task :rpmpackage
> Task :publisher

BUILD SUCCESSFUL in 5s
1 actionable task: 1 executed

File is not uploaded to the required location even if the build is successful.
Thanks in advance!

A: I got an solution for the above gradle issue.
this worked fine for me.
task publisher(dependsOn: rpmpackage)  {
    exec {
       executable "curl"; args "-k", "-v","-u",  "un:pwd" ,"-T", "$project.buildDir/distributions/test.rpm" , "http://ip:port/#browse/browse:test-files:com%2Fcompany%2Fcomponent"
}
}


text:
NHAI to raise Rs 15-20k crore via InvIT
By Tpci | January 29, 2020 | 0 Comment
The National Highways Authority of India (NHAI) is planning to launch its InvIT offer in the coming months, which is part of the government's plans to explore alternative sources of funding to supplement public spending in the roads and infrastructure sector. This comes as private sector is showing lower interest in the build, operate and transfer model, since they have to bear the entire initial cost. NHAI will be raising raise ₹15,000-20,000 crore in its maiden InvIT offer and then go for a larger round, depending on the response it receives from investors, according to Shri Nitin Gadkari, Union Minister for Road Transport and Highways. The government has also secured funds from domestic lenders in coordination with RBI for long gestation projects. For instance, State Bank of India has assured the government a sum of Rs 50,000 crore.
Enquiry for NHAI to raise Rs 15-20k crore via InvIT


DailymotivationandinspirationwithJoseph - Page 40 of 40 - I want to start everybody's day with a smile on their face. Every day should be lived to it's fullest. Tomorrow is not guaranteed.
Good morning everyone. Attitude is everything. When you and your attitude are negative, you're always doubtful, and you don't believe that good things will happen, then you have manifested exactly that upon yourself. However, when your attitude and mindset are positive, you act positive, you are positive, and you believe you can beat anything or do anything, then you can. Always have a positive attitude and manifest nothing but good things for yourself. It's all up to you and your attitude. Live with no regrets. Have a great day.
Good morning everyone. Remember this whenever you are arguing, or fighting with the one that you love. When you fall in love with someone, you fall in love with them for exactly who they are. So what are you doing when you are arguing or fighting with them? Typically you are trying to change them in some way. Why are you trying to change the person you fell in love with? Take a step back. Take a deep breath, and think about what you are doing. You both don't always have to be right. Agree to disagree and continue loving the person you fell in love with. Have a great day. Live with no regrets. Have a great day.
In order to get the greatest return on anything, there must be some risk involved. Don't go through your entire life being afraid to take a risk. We've all heard the sayings. "Nothing ventured, nothing gained." And, "No risk, no reward." Don't let yourself be held back. Don't let everyone else pass you buy because you're too afraid to take a small, or calculated risk. Let's see you get out there, have confidence in yourself and reap all the rewards you can because you made the decision to take even the smallest of risks.
You can do one of two things with fear. You can either face your fears and conquer them, or you can turn and run from them. If you choose the latter of the two, fear will rule your life. Don't let fear rule you. Take control of your life. You can conquer your fears. You just have to give yourself permission. Go ahead. Take control, and do it now.
Dream as big as you can. Set the loftiest of goals. But don't start out taking steps so large that you fail to achieve those dreams and goals. You have to take baby steps. You learn to walk before you run. If you start you running, will continuously fall, which will eventually lead to not achieving everything you want to accomplish. Go ahead. Dream larger than even you could imagine. but succeed by taking baby steps.
Good morning everyone. Always speak the truth. Oh sure from time to time there may be some hurt feelings along the way, but people will always know where you stand and how you feel. The other part of that, is by being honest you will never have any regrets and for the most part you will never have to apologize. You may have to explain sometimes if what you said was taken out of context. That still is infinitely better than people not knowing how you really feel, or what your thoughts are. Live with no regrets. Have a great day.