text:
SGI: No proof of negative campaigning
Angelica Acevedo, News Editor
The election for Junior Senator, won last Thursday by Atem Tazi, was marred by accusations of negative campaigning on a student-run website and social media.
However, Student Government Inc. (SGI) told the Torch they had no evidence "directly or indirectly" connecting the winning candidate to the posts.
Screenshots of the website obtained by the Torch show that it featured an opinion-based article about losing candidate Anthony Savino's use of derogatory language in years-old social media posts.
Another screengrab of the website shows digital campaign posters of Tazi and Larissa Kukapa, the incoming Junior College of Professional Studies representative.
Tazi and Savino declined to comment for this story and Kukapa did not return a message seeking comment. But SGI president Chiara Miuccio said both Tazi and Kukapa told them that they "did not sponsor any article or website."
SGI advisor Jack Flynn referred the Torch's questions to SGI's Elections Committee, which is responsible for ensuring candidates follow guidelines and can issue potential violations—including potential withdrawal from a position.
That wasn't warranted here, SGI said.
SGI's Elections Committee Chair Cooper Miqueli said they "did not have evidence to determine that Atem and Larissa were either directly or indirectly responsible for negative campaigning."
That puts to rest rumors of negative campaigning that swirled among the student body while voting was taking place.
Posts circulated among dozens of students on Twitter regarding their comfort level voting for Savino in the wake of published screenshots of tweets from his public account three years ago. These tweets included derogatory language from three years ago and his support of President Donald J. Trump from the past year.
Part of the problem for SGI was its inability to prove that the candidates whose digital posters appeared on the website had anything to do with it.
Miuccio, the current SGI president, said it's possible that students who created the website post about Savino may have simply taken the posters in support of Tazi and Kukapa from their social media without their knowledge.
Miuccio said SGI has previously never dealt with an outside website posting negative information about a candidate, making this an unprecedented example of possible negative campaigning.
To illustrate the more common definition of negative campaign, she cited an incident from two years ago between the CORE and ICE tickets. According to Miuccio, the CORE ticket campaigned with the slogan, "Don't slip on ICE."
Miuccio is confident that all the candidates played by the rules.
"The Elections Committee did an exceptional job at ensuring that all candidates abided by our elections rules," Miuccio said. "Candidates for both the executive board and representative positions campaigned in accordance with SGI policies."
One student on Twitter also expressed concern that his posts about Savino would lead to SGI reporting him to Student Conduct. But Miuccio said SGI didn't report anyone because they "can't control what students say on social media."
Miqueli, the Elections Committee chair, said they "can only issue violations to candidates who are running in the SGI election, not to people speaking about those candidates."
Teresa McNamara, the associate director of the Office of Student Conduct, said the University "expects all of its students to use social media responsibly, and not to abuse or harass fellow students."
She added that students can file a complaint to the Office of Student Conduct and if a student is found in violation of the Student Code of Conduct, they would be sanctioned. Examples include formal warning, fines and disciplinary probations.
McNamara declined to comment on any specific case, citing student privacy.
SGI Elections
Student Government Inc.
Angelica Acevedo, Editor-in-Chief
Angelica Acevedo is a senior journalism major with a minor in history. She has been involved with the Torch since her freshman year, and served as News...
Home Scroll
Tani Oluwaseyi's road to achieving first team preseason All-American
coronavirus st. john's
Online Learning: Are We Really Getting the Education We're Paying For?
St. John's Joins Universities Nationwide in Litigation Against ICE Regulations
Students Move Off Campus Amidst COVID-19 Pandemic
Big East to Pac-12: LJ Figueroa Is Saying Goodbye to Queens
President Gempesaw to Retire June 2021
Flames of the Torch: Black Lives Matter
Student Sues St. John's for Partial Reimbursement of Tuition
New SGi E-board Holds Public Forum to Address Student Concerns
The Bill Clinton Meme: Our Top Four Albums


Respect ALL others and always react and respond calmly.
Take a look at these fantastic new photographs of our environment taken by Josh Tomalin.
We are pleased to announce that we have successfully gained a gold award for PE.The award is designed to help produce high quality PE and sustained participation. Schools must provide a number of competitive and non-competitive opportunities for pupils to be active and to promote learning and healthy lifestyles. Learn more about the award by clicking below.
We are pleased to announce that we have successfully gained a very exclusive award for inclusion. We join the handful of schools in the North West to achieve this very important award.
You can read more and find out what the assessor had to say by clicking the image below which will take you to their site.
School Jotter - Download and choose our school from the list!


text:
ISRAELI AIRLINES LAUNCH FIRST DIRECT FLIGHTS TO MOROCCO
Jul 26, 2021 | 2021
BY JNS | JUL 26, 2021 | MIDDLE EAST
In those days, ten men from nations of every tongue will take hold—they will take hold of every Yehudi by a corner of his cloak and say, "Let us go with you, for we have heard that Hashem is with you." Zechariah 8:23 (The Israel BibleTM)
Two Israeli airlines, El Al and Israir, launched the first regular direct flights from Israel to Morocco on Sunday. Israir Flight 61 took off first at 8:15 a.m, followed by El Al flight 553, which departed at 11:35 a.m. The Israel-Morocco line "will help promote tourism, trade and fruitful economic and political cooperation between the two countries," said Israeli Tourism Minister Yoel Razvozov, who participated in a ceremony at the airport shortly before the El Al flight. "We continue to build infrastructure and create tourist anchors that will promote tourism to Israel for the day we beat the coronavirus. The Israel-Morocco aviation line is undoubtedly an important and significant anchor," he said
Also participating in the ceremony were El Al CEO Avigal Sorek, El Al chairman Amikam Ben-Zvi and Ambassador of Morocco to Israel Ibrahim Bayod. "This is another step in the actual realization of the roads opened and the bridges established between the citizens of the two countries as part of the Abraham Accords," said Sorek. Israel and Morocco signed a normalization agreement in December as part of the Abraham Accords. Part of the agreement included allowing regular flights between the two countries, with Israelis being allowed to visit Morocco as tourists.
El Al is expected to operate up to five flights a week to the Moroccan cities of Marrakech and Casablanca on Boeing 737s, with economy and business class options. Israir will operate two flights a week. Both Israir and El Al served traditional Moroccan cuisine on the inaugural flights, with Israir's stewards wearing traditional Moroccan garb. Israeli airline Arkia and Morocco's Royal Air Maroc are also planning to start flights in August.
Israel has a significant Jewish population (between 700,000-800,000) with Moroccan roots.
Often Read Articles
Israel's Elections Going According to Zachariah's Prophecy Foreshadowing Messiah
Trump Emissaries Sent to Ask Major Israeli Rabbi, "When Will Messiah Come?"
Stones for Altar of Pascal Lamb Sacrifice Now Being Collected
TOP TEN BIBLICAL PROPHECIES OF 2021 December 30, 2021
HUNDREDS GATHER TO WITNESS BURNING BUSH ON "MOUNT SINAI" December 28, 2021
SPOILS TAKEN IN BATTLE BY BAR KOKHBA REBELS FIGHTING ROMANS SEIZED FROM ANTIQUITIES DEALERS December 15, 2021
ARCHAEOLOGISTS DISCOVER SECOND ANCIENT SYNAGOGUE ON THE SHORES OF SEA OF GALILEE December 12, 2021
UN DECLARING TEMPLE MOUNT EXCLUSIVELY MUSLIM AND ISRAEL "ILLEGAL" IN JERUSALEM December 3, 2021
Articles by Years

redpajama_set_name: RedPajamaCommonCrawl


Is a local business you're marketing missing out on a host of B2B opportunities? Do B2B brands even qualify for local SEO?
If I say "B2B" and you think "tech," then you're having the same problem I was finding reliable information about local search marketing for business-to-business models. While it's true that SaaS companies like Moz, MailChimp, and Hootsuite are businesses which vend to other businesses, their transactions are primarily digital. These may be the types of companies that make best-of B2B lists, but today let's explore another realm in which a physical business you promote is eligible to be marketed both locally and as a B2B.
Let's determine your eligibility, find your B2B opportunities, identify tips specific to your business model, analyze an outreach email, explore your content with a checklist, and find an advantage for you in today's article.
Does the business I'm marketing have a physical location that's accessible to the public? This can't be a PO Box or virtual office. It must be a real-world address.
Does the business I'm marketing interact face-to-face with its customers?
If you answered "yes" to both questions, continue, because you've just met Google's local business guidelines.
Next, determine if there's a component of your business that already serves or could be created to serve other businesses.
Not totally sure? Let's look at Google's categories.
Out of the 2,395 Google My Business Categories listed here, there are at least 1,270 categories applicable to B2B companies. These include companies that are by nature B2B (wholesalers, suppliers) and companies that are B2C but could have a B2B offering (restaurants, event sites). In other words, more than half of Google's categories signal to B2B-friendly companies that local marketing is an opportunity.
Food establishments (restaurants, cafes, food trucks, caterers, etc.) can create relationships with nearby employers by offering business lunch specials, delivery, corporate catering, banquet rooms, and related B2B services. This can work especially well for restaurants located in large business districts, but almost any food-related business could create a corporate offering that incentivizes loyalty.
Major attractions (museums, amusements, cultural centers, sports centers, etc.) can create corporate packages for local employers seeking fun group activities. Brands looking to reduce implicit bias may be especially interested in interacting with cultural groups and events.
Professional services (realty, financial, printing, consulting, tech, etc.) can be geared towards corporate needs as well as individuals. A realtor can sell commercial properties. A printer can create business signage. A computer repair shop can service offices.
Personal services (counseling, wellness, fitness, skill training, etc.) can become corporate services when employers bring in outside experts to improve company morale, education, or well-being.
Home services (carpet cleaning, landscaping, plumbing, contracting, security, etc.) can become commercial services when offered to other businesses. Office buildings need design, remodeling, and construction and many have lounges, kitchens, restrooms, and grounds that need janitorial and upkeep services. Many retailers need these services, too.
Entertainers (comedians, musicians, DJs, performance troupes, etc.) can move beyond private events to corporate ones with special package offerings. Many brands have days where children, family members, and even pets are welcomed to the workplace, and special activities are planned.
Retailers (clothing, gifts, equipment, furniture, etc.) can find numerous ways to supply businesses with gear, swag, electronics, furnishings, gift baskets, uniforms, and other necessities. For example, a kitchen store could vend breakfast china to a B&B, or an electronics store could offer special pricing for a purchase of new computers for an office.
Transportation and travel services (auto sales and maintenance, auto rentals, travel agencies, tour guides, charging stations, etc.) can create special packages for businesses. A car dealer could sell a fleet of vehicles to a food delivery service, or a garage could offer special pricing for maintaining food trucks. A travel agency could manage business trips.
The business I'm marketing qualifies. What's next?
See which of these two groups you belong to: either a B2B company that hasn't been doing local SEO, or a local business that hasn't created a B2B offering yet. Then follow the set of foundational tips specific to your scenario.
Know that the goal of local SEO is to make you as visible as possible online to any neighbor searching for what you offer so that you can win as many transactions as possible.
Read the Guidelines for Representing your business on Google to be 100% sure your business qualifies and to familiarize yourself with Google's rules. Google is the dominant player in local search.
Make sure your complete, accurate name, address, and phone number is included in the footer of your website and on the Contact Us page. If you have multiple locations, create a unique page on your website for each location, complete with its full contact information and useful text for website visitors. Make each of these pages as unique and persuasive as possible.
Be sure the content on your website thoroughly describes your goods and services, and makes compelling offers about the value of choosing you.
Make sure your website is friendly to mobile users. If you're not sure, test it using Google's free mobile-friendly test.
Create a Google My Business profile for your business if you don't already have one so that you can work towards ranking well in Google's local results. If you do have a profile, be sure it is claimed, accurate, guideline-compliant and fully filled out. This cheat sheet guide explains all of the common components that can show up in your Google Business Profile when people search for your company by name.
Do a free check of the health of your other major local business listings on Moz Check Listing. Correct errors and duplicate listings manually, or to save time and enable ongoing monitoring, purchase Moz Local so that it can do the work for you. Accurate local business listings support good local rankings and prevent customers from being misdirected and inconvenience.
Ask for, monitor, and respond to all of your Google reviews to improve customer satisfaction and build a strong, lucrative reputation. Read the guidelines of any other platform (like Yelp or TripAdvisor) to know what is allowed in terms of review management.
Build real-world relationships within the community you serve and explore them for opportunities to earn relevant links to your website. Strong, sensible links can help you increase both your organic and local search engine rankings. Join local business organizations and become a community advocate.
Be as accessible as possible via social media, sharing with your community online in the places they typically socialize. Emphasize communication rather than selling in this environment.
Research your neighborhood and your community to determine what kinds of businesses are present around you. If you're not sure, reach out to your local Chamber of Commerce or a local business association like AMIBA to see if they have data they can share with you. Doing searches like "Human Resources Event Seattle" or "People Ops Event Seattle" can bring up results like this one naming some key companies and staffers.
Document your research. Create a spreadsheet with a column for why you feel a specific business might be a good fit for your service, and another column for their contact information.See if you can turn up direct contact info for the HR or People Ops team. Phone the business, if necessary, to acquire this information.
Now, based on what you've learned, brainstorm an offering that might be appealing to this audience. Remember, you're trying to entice other business owners and their staff with something that's special for them and meets their needs..
Next, write out your offering in as few words at possible, including all salient points (who you are, what you offer, why it solves a problem the business is likely to have, available proof of problem-solving, price range, a nice request to discuss further, and your complete contact info). Keep it short to respect how busy recipients are.
Depending on your resources, plan outreach in manageable batches and keep track of outcomes.
Be sure all of your online local SEO is representing you well, with the understanding that anyone seriously considering your offer is likely to check you out on the web. Be sure you've created a page on the site for your B2B offer. Be sure your website is navigable, optimized and persuasive, with clear contact information, and that your local business listings are accurate and thorough — hopefully with an abundance of good reviews to which you've gratefully responded.
Now, begin outreach. In many cases this will be via email, using the text you've created, but if you've determined that an in-person visit is a better approach, invest a little in having your offer printed nicely so that you can give it to the staff at the place of business. Make the best impression you possibly can as a salesperson for your product.
Give a reasonable amount of time for the business to review and decide on your offer. If you don't hear back, follow up once. Ideally, you're hoping for a reply with a request for more info. If you hear nothing in response to your follow-up, move on, as silence from the business is a signal of disinterest. Make note of the dates you outreached and try again after some time goes by, as things may have changed at the business by then. Do, however, avoid aggressive outreach as your business will appear to be spamming potential clients instead of helping them.
As indicated, these are foundational steps for both groups — the beginnings of your strategy rather than the ultimate lengths you may need to go to for your efforts to fully pay off. The amount of work you need to do depends largely on the level of your local competition.
Moz's People Ops team is called Team Happy, and these wonderful folks handle everything from event and travel planning, to gift giving, to making sure people's parking needs are met. Team Happy is responsible for creating an exceptional, fun, generous environment that functions smoothly for all Mozzers and visitors.
We get lots of inquiry emails. Do some research into our company, help us see what we can benefit from, and how we can fit it in. We don't accept every offer, but we try to stay open to exploring whether it's a good fit for the office.
The more information we can get up front, the better! We are super busy in our day-to-day and we can get a lot of spam sometimes, so it can be hard to take vague email outreach seriously and not chalk it up to more spam. Be real, be direct in your outreach. Keeping it more person-to-person and less "sales pitchy" is usually key.
If we can get most of the information we need first, research the website/offers, and communicate our questions through emails until we feel a call is a good next step, that usually makes a good impression.
Finally, Ashlie let me know that her team comes to decisions thoughtfully, as will the People Ops folks at any reputable company. If your B2B outreach doesn't meet with acceptance from a particular company, it would be a waste of your time and theirs to keep contacting them.
However, as mentioned above, a refusal one year doesn't mean there couldn't be opportunity at a later date if the company's needs or your offer change to be a better fit. You may need to go through some refinements over the years, based on the feedback you receive and analyze, until you've got an offer that's truly irresistible.
Practice makes perfect. Let's do an exercise together in which we imagine ourselves running an awesome Oaxacan restaurant in Seattle that wants to grow the B2B side of our business. Let's hypothesize that we've decided Moz would be a perfect client, and we've spent some time on the web learning about them. We've looked at their website, their blog, and have read some third-party news about the company.
May I bring over a complimentary taco basket for a few of your teammates to try? Check out our menu here and please let me know if there would be a good day for you to sample the very best of Taco Morales. Thank you for your kind consideration and I hope I get the chance to personally make Team Happy even happier!
We're an inclusive office, so the various dietary options catch our eye. Knowing price helps us decide if it's a good fit for our budget.
The reference to tech feels personalized — they know our team and who we work with.
It's great to know they can handle some larger events!
It instills trust to see a quote from a nearby, familiar company.
Samples are a nice way to get to know the product/service and how it feels to work with the B2B company.
The menu link, website link, and contact info ensure that we can do our own exploring to help us make a decision.
As the above outreach illustrates, Team Happy was most impressed by the elements of our sample email that provided key information about variety, price and capacity, useful links and contact data, trust signals in the form of a review from a well-known client, and a one-on-one personalized message.
Your business is unique, and the precise tone of your email will match both your company culture and the sensibilities of your potential clients. Regardless of industry, studying the above communication will give you some cues for creating your own from the viewpoint of speaking personally to another business with their needs in mind. Why not practice writing an email of your own today, then run it past an unbiased acquaintance to ask if it would persuade them to reply?
Your site content speaks for you when a potential client wants to research you further before communicating one-on-one. Why invest both budget and heart in what you publish? Because 94% of B2B buyers reportedly conduct online investigation before purchasing a business solution. Unfortunately, the same study indicates that only 37% of these buyers are satisfied with the level of information provided by suppliers' websites. Do you see a disconnect here?
If you found your content lacking any of these checklist elements, budget to build them. If writing is not your strong suit and your company isn't large enough to have an in-house content team, hire help. A really good copywriter will partner up to tell the story of your business while also accurately portraying its unique voice. Expect to be deeply interviewed so that a rich narrative can emerge.
In sum, you want your website to be doing the talking for you 24 hours a day so that every question a potential B2B client has can be confidently answered, prompting the next step of personal outreach.
Earlier, we spoke of the research you'll do to analyze the business community you could be serving with your B2B offerings, and we covered how to be sure you've got the local digital marketing basics in place to showcase what you do on the web. Depending on your market, you could find that investment in either direction could represent an opportunity many of your competitors have overlooked.
Visiting their websites to understand their services, products, pricing, hours, capacity, USP, etc.
And if your city is large and highly competitive and there aren't glaring gaps in available services, try to find a gap in service quality. Maybe there are several computer repair shops, but yours is the only one that works weekends. Maybe there are a multitude of travel agents, but your eco-tourism packages for corporations have won major awards. Maybe yours is just one of 400+ Chinese restaurants in San Francisco, but the only one to throw in a free bag of MeeMee's sesame and almond cookies (a fortune cookie differentiator!) with every office delivery, giving a little uplift to hardworking staff.
Find your differentiator, put it in writing, put it to the fore of your sales process. And engineer it into consumer-centric language, so that hard candy buttons with chocolate inside them become the USP that "melts in your mouth, not in your hands," solving a discovered pain point or need.
We're all in business to serve. We're all helpers. At Moz, we make SEO easier for digital and local companies. At your brand, _________?
Looking thoughtfully into your brand's untapped capacities to serve your community, coupled with an authentic desire to help, is the best groundwork you can lay at the starting point for satisfaction at the finish line.


Hey guys, I know that we shouldn't still be wearing black, but we're still mourning. The Nike HyperVenom Phantom (excluding early versions of the II) was one of our favorite boots ever. Garnering awards with nearly every iteration of the Boot-ies, there is a special place in our hearts for the original Phantom. From the upper that naysayers claimed to look like paper towels (to be fair, it kinda did) to the fact that Nike called it an "agility" labelled boot though it was actually just a super fun boot to smash the ball, the HyperVenom Phantom was not a boot that we expected to be gone so soon. Enter the Nike Phantom VNM.
A journey back to the power boots of Nike lore and the successor to the HyperVenom Phantom. A departure from the almost required collar that Nike boots have sported in recent years, but still representing the FlyKnit flag. For anyone that has felt a slight hole in their heart with the T90 replacement of years ago, or were simply hoping for the HyperVenom Phantom IV, it will be a crazy ride to see if the Phantom VNM can check all those boxes. We've been testing these boots for a long time, let's see if it can.
The Phantom VNM does bear a striking resemblance to what we would imagine the next iteration of the beloved T90 series to look like. In fact, it's quite interesting to see Nike choose to re-release the original T90 Laser around the same time as the introduction for the VNM. With no collared version, this boot certainly looks like a throwback to a bygone era. However, once you get past the silhouette, everything about this boot's appearance is unique and modern.
The forefoot of the boot is covered with a honeycomb type pattern. There is a slight texturing to it, but it might be a style choice to match up with the VNM name for this boot, the HyperVenom line (that this boot has descended from) has never been shy to tie in imagery from poisonous creatures. The midfoot has large sections on the opposite side of the boot that are covered in exposed FlyKnit material, and the other side of the boot has the VNM's shooting element. To me, it has a look and feel like ribs from an old competitor, the Predator LZ's and the Wave Ignitus III from Mizuno, it looks a bit more aggressive than the element actually feels.
The last major cosmetic is the slight covering of the laces on the Phantom VNM. While it feels a little awkward visually, we're certain that this is merely Nike trying to give as large a striking surface as possible. You don't retire the HyperVenom Phantom and then drop a boot that won't be fun to strike the ball with, right? Our last thought on look is how this shooting element, despite being really cool to look at, is actually fairly minimalistic for boots that employ this type of tech, it will be interesting to see if a boot that looks made for shooting can still, somehow, perform at a top level without going fin/rubber/shooting element crazy.
The boot does come with a swanky boot bag to haul your new boots around, and we almost feel like the brands should band together to make it a requirement for top-tier boots to include a bag, extra insoles, or even both.
Despite those looks telling our eyes that this wasn't the next iteration of the HyperVenom III, actually lacing the boots up told a slightly different story. Once the boot started to get put into play, we actually found that this boot is definitely a worthy successor and definitely takes some serious inspiration from the recently deceased HyperVenom Phantom III. It might be called the Phantom VNM, but the name switch shouldn't scare you away from a boot that impressively takes the mantle from one of our favorite boots of all time.
The forefoot does offer a great touch on the ball, and Nike has engineered this section to be a little bit grippier on the ball to help aid in control. We never really felt like the boot was ever truly getting stuck underfoot, but we did quite enjoy using the VNM whenever we tried to make quick cuts or flicks. There's no telling whether that's from added grip that Nike placed on the VNM, it might just be down to how clean the touch is when you're on the ball. If a slightly wax-like forefoot does scare you, then the VNM isn't going to be for you.
Passing in the VNM shows picks up from the Phantom III in showing that this isn't just a striker's boot. The thickness used across the entirety of the boot keeps you from ever feeling weighed down, like there's ever too much between you and the ball, and gives that slight bit of padding players want when softening zipped passes, moonshots out of the air, or getting your foot stuck into a tackle. If you're dribbling at speed, holding up play looking for that last killer pass, or trying to unlock a defense with a slick through ball or crossfield bomb, the VNM delivers the feel that will have you never doubting that your boots are going to deliver on whatever skills you can use.
The biggest question about performance was absolutely going to circle around that shooting element. Inspired by the ridges sometimes seen on the head of a golf club, we went into testing with high hopes, but low expectations after all, I mean, come on, have we ever had a shooting element truly add more swerve or power to our shot?
When we finally started trying to laser shots into the back of the net, we definitely felt that these moments are where the VNM is designed to shine brightest. No, the element didn't suddenly have us bending shots better than we ever could and the sound barrier never seemed in danger of being broken, but that striking surface is second to none in the boot world. Every time that you absolutely connect flush with a ball, the contact you get is going to feel completely clean and the ball will absolutely leap from your foot. Whether catching the ball straight on, curling with the inside of the forefoot, or getting tricky with a bit of outside-of-the-foot action, every shot feels uniform, clean, and beautiful.
The soleplate is unique to the Phantom VNM and is actually quite aggressive. We'd say to keep these fairly far away from artificial surfaces for those reasons, but FG players will never need to doubt whether or not they'll be slipping and sliding while dominating for 90 minutes or during a routine practice. The chevron design that Nike has become rather fond of with their studs is certainly not for everyone, but it's been a long time since any brand has given us a soleplate that has truly given us pause and the VNM is no different.
The HyperVenom Phantom was capable of incredible comfort. From the original model being so soft via its incredibly thin upper to the perfectly crafted build of the last model available, the only time you had to suffer through pain was when you caught a two-footed tackle or had to suffer through too many days in between using your favorite toys. However, the upper has seen a significant visual shift, the soleplate set-up is different, and almost the only thing that reminds us exactly of the dearly departed HyperVenom is the large shooting surface. With all those plush memories tossed by the wayside, can the comfort for the VNM stand up?
Luckily, Nike has seen fit to allow the Phantom VNM to continue on the path that the HyperVenom Phantom set forth. By employing a super soft stretch to the exposed FlyKnit portions of the boot (the entire boot is crafted with Flyknit, but only certain portions are left exposed to the elements…much like the boot's predecessor) you get that lovely stretch, but the FlyWire cables that run around the boot from the laces means that you can lace these boots up and feel completely locked in place.
We found that the VNM fits true to size during our time with the boot. This also might be one of the more accommodating boots on the market. It still isn't going to be a great choice for super wide feet, but most foot types out there should be able to find a comfortable home in the Phantom VNM.
The Phantom VNM came straight in and snagged a large portion of the athletes that were wearing the HyperVenom Phantom. From Harry Kane, Marcus Rashford, Gonzalo Higauin, to even Wayne Rooney, they've all made the switch to the newest model in the Nike stables. As the boot ages, it will be interesting to see if players opt for the VSN or VNM moving forward. We're a little partial to the VSN because of how incredible that boot is, but the VNM is an easy boot to suggest for anyone hunting for its particular set of skills.
Because Nike has chosen to leave the collar off their newest experiment, the Elite version of the Phantom VNM actually will cost you a fair bit less than most of the other Nike Elite models. While retail for the Phantom VNM Elite sits around $250, sites like Soccerpro.com can get you these bad boys for much closer to $200. For us, having been around the block a few times, this is much closer to the sweet spot for top tier models. Considering the quality this boot boasts, it shouldn't be too tough a decision if your wallet has the right flex.
The Phantom VNM is another quality option from the crew over at the Swoosh. It seems to offer up a high level of comfort while providing the sweet strike that drew many to the HyperVenom Phantom originally. Add in the blend of power boot with the lightweight construction that nearly all boot models tend to boast today, and you've got yourself a great option for yourself as you head into your next season. The only real negative in my view is: what's with Nike's last two boot names? VSN and VNM? How much was spent in R&D to come up with those? Just my opinion of course.
Lastly, how did Nike give us a boot so close to the HyperVenom III with it looking almost nothing like its source material? It's amazing! No matter how they did it, we're a fan. Snag yours today!


Flow enables you to build many types of reports, such as tabular, grouped, pivot tables, tables, and data summaries. Here is the second in a series of posts focusing on building reports in Flow. You can learn more about these different types of reports in the Flow online help. A grouped report is an advanced report produced by Flow. Grouped Reports organize records into one or more nested groups where each group is is a collection of records with a common column data value.
There are two basic methods you can employ to create grouped reports in Flow. The first is to add a Grouped Report action to a new or existing workflow. The second way is to open a hypercube within the Flow portal then click on the Create Report button in the toolbar located at the top of the hypercube view. This post will cover the first method.
After logging into Flow, you'll first need to add the "Product Sales" sample dataset to your Flow account. Click on the down arrow button in the top menu bar then click on the sample data icon to open the Add Sample Dataset dialog. Click the ADD link next to the "Product Sales" entry. The sample data will be added to your account.
The sample data will be added to your account, see below.
Depending upon your browser, you may need to add an extension to enable ClickOnce and launch Cloud Connect. Click on the View Cloud Connect Requirements link beneath the Launch Cloud Connect button to learn the requirements for your particular browser. If this is your first time using Cloud Connect, it may require a minute or so to install. Once the installation has completed, the application will open automatically.
To get started, we'll need to add a new workflow. From the Cloud Connect top menu, click the button. The Add New Workflow dialog will appear as shown on the right.
Enter the workflow name then click OK. The new workflow is added to the Workflows list on the left-side of your screen. To open the workflow for editing, simply double click its name. Alternatively, you can right-click the name and then select Open from the context menu.
Add a Load Dataset step by clicking on the menu and selecting Load Dataset from the drop-down menu; the Load Dataset Dialog will display.
Select the "Product Sales" dataset from the drop-down list then click OK to add the Load Dataset workflow step.
Next, click the button on the Workflow Menu then pressEnter or click Yes in response to the Run All dialog. The Load Dataset action will run and import the Product Sales data. The data will be displayed in the Workind Data at the botton of your screen.
A grouped report organizes data into one or more nested groups where each group is a collection of records with a common column data value. We are going to build a report that groups our product sales data by Country, Year, and Segment as shown to the right. Our product sales data has a Date data point but no year data point on which to group. We, therefore, need to extract the year from each row's Date value and save it to a new data point.
To extract the year value from each record's Date column, we will add an Expression action which will evaluate each Date value, compute the year from it, and save the computed value to a new data point called, surprisingly, Year.
Open the Expression Builder by clicking on the menu and selecting Expression Builder from the drop-down menu, the Expression Builder dialog will display.
Select the Product Sales dataset from the Collection drop-down list in Expression Builder's Select Working Data box.
In the Select Expression and Operation Type box, Select the Date expression type from theExpression Type drop-down list.
Next, select the Year operation from the Operation drop-down list.
Within the Build Expression box, under Input 1, use the Datapoint drop-down list to choose the Date datapoint.
Click OK to add the expression action to the Create Grouped Report workflow.
Flow builds grouped reports from hypercubes. A hypercube is a specialized data container used to group and summarize multidimensional data.
From the Working Data drop-down list, select the Product Sales dataset, a check box list of possible dimensions will be displayed.
Add dimensions for Segment, Country, and Year by checking the box next to each data point name.
Enter Grouped Report Hypercube in the Hypercube Name text box.
Click OK to add the Build Hypercube workflow step.
Click OK, the Build Hypercube workflow step will be added to the workflow steps list.
Run the workflow again and view the results. Click the button in the workflow menu bar and answer Yes to the prompt. When the workflow completes, the working data tab will display a flattened view of hypercube, see below.
To learn more about hypercubes, see A Basic Introduction to Multidimensional Analysis Using Flow.
At this point, we've loaded our Product Sales dataset, added an expression to extract the year group value, and built a hypercube from which we can generate our report.
We now want to compute summary values for the Cost, Discount, Sales, and Profit columns. These values will be used as totals and subtotals for each nested group within our report. Flow provides an extensive library of functions and operations for computing summary values across hypercube dimensions. We are going to add another Expression Evaluation step that will sum the Cost, Discount, Sales, and Profit for each group.
From the Actions drop-down menu, select Expression Builder, the Expression Builder dialog appear as shown.
Select the Grouped Report Hypercube from the Collection drop-down list in the Expression Builder's Select Working Data box.
Next, select the Sum operation from the Operation drop-down list.
Within the Build Expression box, under Input 1, use the Datapoint drop-down list to choose the Cost datapoint.
When you are finished, click OK. The Expression Evaluation workflow step will be added to the workflow steps list.
Run the workflow again and view the results. Click the button in the workflow menu bar and answer Yes to the prompt. When the workflow completes, the working data tab will display a flattened view of hypercube which includes our expression evaluation results.
From the results menu, select the Grouped Report menu item as shown, the Hypercube Group Report dialog will appear, see below.
From the Working Data drop-down list, select the Product Sales dataset.
Enter the Report Name, Title, and Report Description as shown.
In the Report Elements -> Select Report Columns select a column from the Columns drop-down list.
If the column's data type is numeric, optionally select a Number Format from the drop-list.
Optional - use the Sort drop-down list to select a sort direction and include the the column in the report sort order.
Optional - check the Include Total box to display a column total.
Click the Add Column button to the add the report column. The column will be added to the Columns list.
Click the button on Workflow Menu. Press Enter or click Yes in response to the Run All dialog. The workflow will load the data, create the report, and save the report result to your Flow account. To view the report, go to the Flow portal and and open the Reports & Charts section under the Results menu. Click on the "US Retail Sales Report" report name to display the report.


language, also defined as the method of human communication, either spoken or written, consisting of the use of words in a structured and conventional way.
If it was not for language, life on earth would be so boring. I mean can you imagine life without any spoken or written words? Because I can't. If there is one thing in life I'm truly passionate about, then it is language learning, and well helping others out, but that is beside the point. I mean have you ever experienced that feeling when you are for instance abroad, and you need to communicate with the people of the country, but you can't because you guys don't understand each other?
Because there was a moment in my life that I did experience that feeling, it was when I moved to the Netherlands and honestly it was a terrible feeling. I remember that I could not express myself when I wanted to, which made it sometimes difficult for me to play with other children, because there was this clash, in language, culture and well everything. It was then at age 10 that I decided that I did not want to experience that feeling ever again. So, when I went to the international school to learn Dutch, I was so motivated and curious, that within six months' time I was able to fluently speak Dutch and could go to a regular Dutch school.
The fact that after six months I could speak so well Dutch, motivated me to want to learn other languages and to try to preserve the ones I already spoke. So, when I went to high school I was so excited I could learn new languages, I had French, English, German, Dutch and Spanish and it was great. Or so I thought. I have to say that after some time I was getting bored, because the classes were not so challenging. It was mostly grammar focused, and though that is very important, it was not what I imagined when I started the courses. Some teachers however tried to make the classes as challenging for me as they could, including more difficult exams. and I was thankful for that and loved it. However, I still had the feeling that I could do more, so that's what I did with for example Spanish, because I loved that language. I wanted to be fluent in it, so I went for it. Many times, teachers, students and even native Spanish speakers have thought that I had a Spanish speaking background. But the truth is, until two weeks ago, I had never been to a Spanish speaking country. And I promise you that it was so great, when I got to Spain and I could communicate and do anything I wanted in Spanish. That feeling of success was just amazing.
Choose a language you are passionate about. Don't start to just learn any language, but learn one you actually love, or feel connected to. This will enable you to stay motivated and to continue learning when it gets though, because you know why you are doing what your are doing.
Make mistakes. To me the key to language learning really is making as many mistakes as possible. I believe that if you learn a language without making mistakes, you are actually not learning a thing. Mistakes help you improve your language skills. So don't be afraid of making mistakes.
Make a wordlist. In order for you to make mistakes you actually need to start learning the language. The best way to start especially if you are not taking language classes is to make a wordlist. This list should consist of all the words you deem to be important. I recommend you make a list consisting of words that you use in day to day conversations. Don't make it too difficult for yourself, you can always add new words to your list. However, you don't make the wordlist just for the sake of making it. No, I recommend that you memorize the words on that list. Take at least 30 minutes of your time every day to look at those words. What works for me, is splitting the 30 minutes. So, I take 10 minutes in the morning, 10 in the afternoon and 10 in the evening. Because you are repeating the words often, they will actually stay in your head and you will be able to use them for the rest of your life. Repetition is very important when it comes to language learning.
Guess the meaning. Language learning is not the easiest thing to do, however I have realised that people often time make it more difficult than it actually is. Many people that I have helped in the last few years, tend to want to know every word of for instance a text. But that is not only time consuming but also unrealistic. I don't know all the words of the languages I'm fluent in and I for sure don't know all the words of the languages I'm learning. But that the truth is, not knowing every single word, is not a problem. It is about the bigger picture, understanding the context of what you are reading. What I do when I'm reading a text and I come across a word that I don't know, I just continue reading and then try to guess the meaning of that word. But I actually only to that if I think that, that word is important for my understanding of the text, or if I think it is an interesting or beautiful word. Otherwise, I just skip it. You don't need to know every single word. And if you really want to know the meaning of words, I recommend you write them down and ask someone who is fluent in the language, because the will not only give you the meaning of the word, but they will also explain to you when to use it and when not. You will get more out it then if you were just to look it up in the dictionary.
Watch TV shows and listen to music. This tip is very important because it will allow you to better understand the language, to improve your pronunciation and to know when and how to use certain words. Also, it will make it easier for you to remember certain words, because you have seen certain gestures that people make when saying the word, or the emotional state they are in, this is just very important. Also, by watching TV shows and listening to music, your vocabulary list grows, sometimes even without you noticing. If you are the early stages of learning a language I recommend you watch TV shows with subtitles in your native language, this will allow both your understanding and your vocabulary to grow even further. After you have been used to this, it is better to change the subtitles to the language you are learning and later on even watch shows without any subtitles. In the beginning this will be hard, but since you are already used to hearing people speak the language, you will eventually get used to it. When it comes to music not all songs are appropriate for language learning, what I mean by that is that you need to find songs where the singers clearly articulate/pronounce words. For Spanish for instance I used to listen to prince Royce and after a little while, Nicky jam and Enrique Iglesias and now to all kinds singers. One last thing, watch TV shows you like.
This is the last but also one of the most important tips. Practise, practise and practise. When you practise you will make many mistakes, but that is good, no, that is actually great. No matter how many TV shows you have seen in the language you are learning, or how many words you have memorized if you don't practise you will never be fluent in a language. I know that many people are scared to talk in a foreign language, because they just don't feel comfortable doing it. But the truth is, there is nothing to be afraid of. People won't judge you if you are doing some effort, in fact they will support you. What I always do when it comes to this one tip is I have my so-called mirror talks. This means that I stand in front of my mirror and I start having conversations with myself or with imaginary people. I for instance explain what I have learned, what I Have done, and very often I am creative. What these talks have done for me, is that the enabled me to speak freely, and to work on my articulation/pronunciation. Also, they helped me in being more comfortable speaking a language, so it would be easier to have a conversation with other people. Now, you don't need to have mirror talks, you can have different kinds of talks, something you feel comfortable with. The best way however to practise a language is by speaking to native speakers or people who are fluent in the language. These people will help you when you make mistakes and can guide you. Of course, if you can't find them you can just do it with the mediums you have, but do practise, always.
Of course, there are many other things you could do to improve your language skills, but to me these are the most important rules. If you follow these tips, you will definitely be able to speak any language.
I hope these tips will help you all with learning and or improving your language skills.


text:
Q: Swift - Move or update file fails I'm downloading loads of files with my Swift iOS app and I use incremental updating for my contents.
My download code is quite basic, I download a file using Alamofire into a temp directory, unzip it, check if the file or folder exists in the target directory, remove it if found, and move the new file/folder to that directory.
But there is rarely an issue after checking the existing directory and removing it. When I try to move the new file/folder to that directory, I get an error of

"File or directory already exists or contents is not empty."

But checking it out after it failed in the device directory, it shows a completely fine directory, no existing files that might collided, or sometimes the new content is indeed moved to the target directory just like it should, even it said failed. That is what bothers me the most.
Did anyone ever had this kind of behaviour when saving and moving files in the directory?
I almost forgot, I am working in the application support directory.
internal func loadArtifact(artifact: Artifact,  updateClosure: @escaping ((Bool, Int64, Int64, String?) -> ()))
{
    let serverpath = artifact.serverpath
    let name = artifact.name
    let zipname = artifact.zipname
    let root = artifact.artifactSetroot
    let hidden = artifact.artifactSet!.hidden
    let objectID = artifact.objectID

    let baseArtifactSet = artifactSetManager.defaultartifactSetManager.getartifactSetDirectory(artifact.artifactSet!)

    if baseArtifactSet == nil
    {
        errorLog("No target directory for artifactSet")
        return
    }
    if name == nil
    {
        errorLog("No name for artifact. Can´t save in temp")
        return
    }

    var targetDirectory = baseArtifactSet
    targetDirectory?.appendPathComponent("temp")

    targetDirectory?.appendPathComponent(zipname!.replacingOccurrences(of: ".zip", with: ""))

    let destination: DownloadRequest.DownloadFileDestination = { _, _ in
        return (targetDirectory!, [.removePreviousFile, .createIntermediateDirectories])
    }

    let url = URL(string: serverpath!)
    alamofireManager!.download(url!, to: destination).downloadProgress { (progress) in
        updateClosure(false, progress.completedUnitCount, progress.completedUnitCount, nil)
        }.responseData { (data) in
            traceLog("\(data)")
            if data.response?.statusCode == 200
            {
                traceLog("Got an artifact. Will continue to extract itto target position")
                self.asyncQueue.async {

                    var unzipTarget = baseArtifactSet

                    SSZipArchive.unzipFile(atPath: targetDirectory!.path, toDestination: root ? "\(unzipTarget!.path)/temp/root" : "\(unzipTarget!.path)/temp", progressHandler: { (message, something, progress, max) in

                    }, completionHandler: { (message, finished, error) in

                        let tmpPath = root ? "\(unzipTarget!.path)/temp/root" : "\(unzipTarget!.path)/temp/artifacts/\(zipname!.replacingOccurrences(of: ".zip", with: ""))"
                        let targetPath = root ? unzipTarget!.path : "\(unzipTarget!.path)/artifacts/\(zipname!.replacingOccurrences(of: ".zip", with: ""))"

                        if error == nil && root == false && FileManager.default.fileExists(atPath: targetPath)
                        {
                            do
                            {
                                try FileManager.default.removeItem(atPath: targetPath)
                                traceLog("Deletet old directory at path: \(unzipTarget!.path)")
                            }catch
                            {
                                errorLog("Could not remove directory at path: \(unzipTarget!.path) -  \(error)")
                                updateClosure(true,0,0,"Could not remove directory at path: \(unzipTarget!.path) -  \(error)")
                            }

                        }

                        do
                        {

                            if FileManager.default.fileExists(atPath: "\(unzipTarget!.path)/artifacts") == false
                            {
                                try FileManager.default.createDirectory(atPath: "\(unzipTarget!.path)/artifacts", withIntermediateDirectories: true, attributes: nil)
                            }

                            if root
                            {

                                do{

                                    let targetDirContent = try FileManager.default.contentsOfDirectory(atPath: targetPath)
                                    for file in targetDirContent
                                    {
                                        if file != "artifacts" && file != "temp"
                                        {
                                            try FileManager.default.removeItem(atPath: "\(targetPath)/\(file)")
                                        }
                                    }

                                    let files =  try FileManager.default.contentsOfDirectory(atPath: tmpPath)
                                    for file in files
                                    {
                                        let fileURL = URL(fileURLWithPath: "\(tmpPath)/\(file)")
                                        if fileURL != nil
                                        {
                                            try  FileManager.default.moveItem(atPath: fileURL.path, toPath: "\(targetPath)/\(file)")
                                        }
                                    }

                                    if root && hidden
                                    {
                                        let deviceInfoString = "var deviceInfo={'platform':'iOS'}"

                                        if FileManager.default.fileExists(atPath: "\(targetPath)/deviceInfo.js")
                                        {
                                            try FileManager.default.removeItem(atPath: "\(targetPath)/deviceInfo.js")
                                        }

                                    }

                                }
                                catch{
                                    errorLog("Error while enumerating files in temp root directory: \(error)")
                                    updateClosure(true,0,0,"Error while enumerating files in temp root directory: \(error)")

                                }

                            }else
                            {
                                if FileManager.default.fileExists(atPath: targetPath)
                                {
                                    debugLog("Deleting: \(targetPath)")
                                    try FileManager.default.removeItem(atPath: targetPath)
                                }else
                                {
                                    debugLog("Creating: \(targetPath)")

                                }

                                debugLog("Trying to move")
                                try  FileManager.default.moveItem(atPath: tmpPath, toPath: targetPath)

                            }

                        }catch
                        {
                            errorLog("Could not move directory for artifact: \(unzipTarget!.path) -  \(error)")
                            updateClosure(true,0,0,"Could not move directory for artifact: \(unzipTarget!.path) -  \(error)")
                        }

                        try FileManager.default.removeItem(atPath: targetDirectory!.path)

                        self.asyncQueue.async (flags: .barrier) {

                            let ownContext =  MyStorageClient.defaultManager.newBackgroundWorkerMOC()
                            let ownArtifact = ownContext.object(with: objectID) as! Artifact

                            ownArtifact.state = ArtifactState.Ready.rawValue
                            ownArtifact.updateAvaiable = false

                            if root == true && ownArtifact.artifactSet?.state == artifactSetState.Initialised.rawValue
                            {
                                ownArtifact.artifactSet?.state = artifactSetState.Created.rawValue
                            }

                            do{
                                try ownContext.save()

                                updateClosure(true, 0,0,nil)

                            }catch{
                                errorLog("Error while saving artifact context")

                                updateClosure(true, 0,0, "Error while saving context after artifact Update. \(error)")
                            }

                        }
                    })

                }
            }else
            {

                errorLog("Something went wrong downloading an artifact: \(data.response)")
                updateClosure(true,0,0,"Something went wrong downloading an artifact: \(data.response)")

            }
    }

}

So, can anyone tell me, why it is failing?
I added do-try-catches around most of the try lines, and when it failed, it is basically failing on this chunk:
 if FileManager.default.fileExists(atPath: targetPath)
 {
     debugLog("Deleting: \(targetPath)")
     try FileManager.default.removeItem(atPath: targetPath)
 }else
 {
     debugLog("Creating: \(targetPath)")

 }

  debugLog("Trying to move")
  try  FileManager.default.moveItem(atPath: tmpPath, toPath: targetPath)

targetPath is:
file:///var/mobile/Containers/Data/Application/applicationIdAndStuff/Library/Application%20Support/environment/workspace/customers/customer/temp/downloadFileOrFolder
Another update:
I changed the code, so the old file will be moved to a backup folder instead of deleting right away, because I thought changing the address should be faster than deleting the file entirely. Wrong. Now the error occurs more often than before.
So the issue for me is referred to the FileManager, that takes too long to finish procedures. I really don't want to put my block to sleep for any time, do you have another idea of how to handle this issue?

A: I figured out the issue, simply by sorting the code to required >only once tasks< and >tasks for each artifact< to take down pressure on the FileManager.
So this code handles the download and unarchiving and moving process for each artifact and it always checked the directories on a higher level if they exist and add them if they do not. For each artifact.
So this was already potential for a conflict when more than one download and unarchiving finishes almost at the same time and start doing the directory stuff.
Then, by preparing the folder for moving files made more trouble than it helped.
Although it works most of the time, it sometimes messes up the systems check to move the files and causes an error telling me that the directory or files already exist.
So before getting to each loadArtifact for the files, I reset needed directories and create higher level directories in order to prevent repeating checks in the loop.
Since that all works like expected.

redpajama_set_name: RedPajamaStackExchange