Tumgik
#which was awful to format 0/10 would not recommend
Note
hi!
i'm someone who is about as passionate about baccano!'s ongoing legacy as you are and i've followed you for a while. i know you're pretty much singlehandedly running the wiki and i'd like to help, but i don't have much experience in editing wikis and i know there's a lot to cover, so i don't know where to start---is there anything big that needs to be done that you haven't managed to find the time for?
Dear Anonymous, Thank you for reaching out about contributing to the Baccano! Wiki. I'm grateful! Your timing couldn't be better. If I'm to want help, I need to provide prospective wiki newcomers better guidance than the outdated to-do lists on Special:Community. My language there was abstruse when it needed to be simple and direct.
don’t know where to start—is there anything big that needs to be done that you haven’t managed to find the time for?
Everything. Biggest include...
Character articles: empty sections (chrono!); many stubs; rewrites
LN chapter articles: many don’t exist; many that do have no content.
References: Most articles lack but need citations.
Character articles are most wikis’ popular class of articles by far, yet many on B! Wiki lack developed chronology or personality sections (or have some that need rewrites). Some are just stubs. Filling out empty sections of major characters’ articles would be a great starting task, since, pragmatically speaking, these are viewed far more than minor chars’ articles. It’s pretty embarrassing when one of the wiki’s consistent ‘top 10 most viewed articles per month’ doesn’t have a thorough chronology section (aka Huey Laforet).
The stub category conveniently gathers articles w/o substantial content in one place, so diving into that one is another obvious option. Far more stub articles exist than those included in the category—c.f. all the empty LN chapter articles—but stubs are usually immediately obvious anyway. That’s how I started editing on B! Wiki; I looked around, grabbed the nearest empty article or redlink, and began adding new content.
As you gain experience and confidence as an editor, you’ll find yourself naturally drifting to and fro “whatever needs editing” on an as-needed, per-interest basis. Editing is a non-linear process. Don’t feel like you have to restrict yourself to one article at a time. Meanwhile, if you notice typos, weird formatting, or false info, go ahead and change those on the way! Minor edits all add up over time. Cumulative progress.
I’d like to say that adding new content is a bit more important (a bit “Bigger”) than rewriting existing content, but please don’t hesitate to rewrite awful prose! I must admit that Personality Sections can by tricky to write and are most susceptible to bias + personal interpretation, so you may find it easier to start with the more straightforward chronology sections anyway.
(By the way: always assume I’m talking about the desktop version of the wiki. Mobile editing, unsurprisingly, is a nightmare. 0/10 don't try.)
Editing 101
Read the Help Pages for advice about getting started on & editing all wikis. Don't stress about strictly following my Manual of Style for the B! Wiki since I haven't; it's as dusty as B! Wiki's to-do lists and the Community Portal to which I should have linked. Adhere to precedent except when precedent is bad, like in the articles where I once wrote overdetailed, dubiously written chrono sections.
I recommend creating a FANDOM account if you want to take credit for your contributions w/o sacrificing privacy. You can edit without an account, but your edits will be signed with your I.P. address. You need an account if you want to access a file's File Page.
Any article with a big EDIT button at its top can be edited on the spot via the Visual Editor or Source Editor. The former tends to be favored by new editors since it's more user-friendly; the latter is preferred by more experienced users like me who prefer accuracy and control. It’s easy to get the hang of wikitext if you’ve ever written in something as basic as markdown, so I do encourage the wikitext/Source approach.
Once in the editor, you can either add new or alter existing content. This can be as simple as inserting new facts, citations or files into an article or fixing typos, SPAG, vandalism, and incorrect information. It can be as intensive as writing entire content sections from scratch, rewriting existing ones, or creating a new article altogether.
I suggest backing up what you’re writing while you’re writing so that your draft isn’t left to the mercy of the browser & PC gods. I have lost MANY paragraphs-long WIP edits to articles because of browser crashes, so I try to copy-paste what I’m writing into a notepad or my browser’s built-in notes. This is another point in favor of source editing, since copy-pasting rich text can be a nightmare.
Do try to put something in “Edit Summary” before publishing an edit. It’s okay if you forget; I have. (Sometimes I just can’t be bothered to when it’s the third “oopsie made a typo in what I just published” nija edit in two minutes). The reason it’s good practice is that edit summaries make consulting an article’s History Page easier. That’s where you can look at a history of edits and check previous versions of an article.
Remember that you can always ask me for assistance on my profile’s Talk Page. I’m also finally getting around to fixing the wiki forums / updating them for the latest skin, so those can be used as well.
Tumblr media
Above: A screenshot of my first ever edits on the wiki, excluding ‘minor’-flagged edits and non-main Namespace edits. The numbers in green represent how many characters were added. The italicized parentheticals were my edit summaries. Elean, Fang, the Runoratas...these were all articles I’d opened only to be disappointed that they were stubs or empty. (In Jon’s case, I was so peeved Jon didn’t have an article I created one myself. Now that’s the spirit.) Anyone who has used the wiki as a fan will have been similarly disappointed somehow. So think about it from a fan’s perspective, if not your own, and take the initiative to contribute what you wish existed in the first place.
(Seriously, the Runorata Family article, for five years—from its creation in June 2010 until I edited it in Dec 2015—was literally just “Write the text of your article here! “ That was it. That was the page. The sort of page one should do something about.)
10 notes · View notes
shockcity · 7 years
Text
Bagginshield #8 - falling in love
Rating: M Summary: for the 30 Day OTP Challenge - Some people ship Bilbo and Thorin. Two of them are actually Bilbo and Thorin. The world reacts. Modern Setting/Actors AU 
Note: i s2g I didn't set out to write a social commentary, but I just started writing and my brain went where it went, and honestly...I'm cool with that. But if you're not then I totally get it. So warning ⚠️ this features gay people being unashamedly gay. As in people are gay, the world finds out, and Bilbo and Thorin win all the prizes (grain of salt though, this plot would never happen in RL). So if that's not your jam and you'd rather read something that doesn't mirror real life issues, that's perfectly alright and I'll see you in the next story! :) To those who stay: I hope you enjoy it  
-------
It wasn't like they hadn't met before.
Despite what people thought, Hollywood wasn't all that big, and he and Thorin generally moved in the same circles anyway. Bilbo recalled that they'd exchanged polite hugs at the BAFTAs the previous year, and that they had once shared Graham Norton's couch, but besides being very casual acquaintances, they certainly weren't friends.
He and Thorin were not the Hollywood elite, but having a critically acclaimed franchise under each of their belts and a dedicated following had guaranteed that they weren't B actors either. Both had also gained a little more artistic autonomy; years of acting in the mainstream had given them the leeway to branch out into independent films and theater. Thorin, for example, had just finished his run of King Lear in the West End, and Bilbo was currently in the market for a similar change himself.
When Dori handed Bilbo the script for Unexpected, he knew right away that this would be his ticket out of blockbuster hell.
"The title needs work though," he mumbled distractedly, paging through the script. "Unexpected. Unexpected what?"
"Love, I suppose," Dori sighed. "Nori said it was a simple story about two people falling in love."
Bilbo looked up at Dori with his eyebrows raised. "No, I'm reading it right now and that's absolutely not what it's about," he replied. "My character is a lonely bachelor who adopts his orphaned nephew, befriends his troubled neighbor who happens to be a recovering drug addict, and in the end is hit by a car and dies."  
"What."
Bilbo couldn't help but smile. "Nori made it family-friendly so you'd actually hand it to me, Dori," he laughed.
"Well he was right, because if I'd known I wouldn't have let you read it at all. I hate the depressing ones."
Bilbo looked down at the pages again, tilting his head thoughtfully. "I don't know," he said. "It's sad, sure, but...you said Nori called it a love story?"
Dori nodded and crossed his arms, seeming peeved. "That's what he said, but they're not marketing it as a gay romance, so don't get too excited."
Bilbo sighed and dropped the script back into his lap. "Great," he muttered, feeling a little hollow.
"You don't have to do it, Bilbo," Dori reminded him. "There's other scripts."
"Yes, but I like this one," he insisted. "I can see the love here...and you know Elrond Imladris is directing...and he's always been open to script changes, so, do you think–?"
Dori ran a hand across his tired eyes and sat down beside him. "Bilbo," he began, kindly but firmly. "You're a big name. This movie, while not The Avengers, is still expected to make money."
Bilbo had figured it was a long shot. He gave Dori a tiny nod. "Who's playing Richard?" he asked.
"Thorin Oakenshield."
"Oh." Bilbo frowned. "That's...actually a really good choice."
Dori hummed, checking his phone as Bilbo thought it over. Despite his agent's obvious disinterest with the script – and his own, personal, disappointment – Bilbo was still quite attracted to the characters – and Thorin's role, especially. He wanted to see how well he could play off of a character like Richard, and whether or not he could portray a man like Martin, who couldn't help but fall in love with completely the wrong person. And fall in love they did, regardless of what the studio said.
It was a good script that could have been a fantastic opportunity for some realistic representation, had the studio had any decency. That's what made him consider it, truthfully. It just felt like one time too many. Besides, he'd been waiting for a problematic script like this for awhile. He looked down at it again. Yes, this was the one.
"I'll read for them," he told Dori, who looked unsurprised. "Tell Nori I'll see him tomorrow morning."
Dori's thumbs flashed as he texted Nori on Bilbo's behalf. "Done. Do you want to meet Oakenshield? He'll be there tomorrow."
Bilbo knew very little about Thorin Oakenshield personally (though he was familiar with his work, of course) but what he did know about him he liked. The man was a professional, and quite versatile (unlike Bilbo, who was typecast as the bookish boy-next-door most days), and the few times they had met were actually quite pleasant.
"Sure," he agreed. "Why not."
----------------
"Hi. Hello," Thorin stuttered, and then loudly cleared his throat. A voice in his head that sounded a lot like Dis told him to 'chill the fuck out' which...didn't help at all. Thorin had no chill.
Not around Bilbo Baggins anyway.
"Bilbo Baggins is going to read Martin for us," Nori had told him offhandedly. "You're okay working with him, right?"
"Ofcmffwhaffk," Thorin gibbered.
Nori stared. "Wow. Dwalin told me about your crush on him but I didn't believe it," he commented idly. "And all because he returned your house keys?"
Feeling defensive, as he usually did when this story was brought up, Thorin glared at his feet and mumbled, "I was locked out of my home."
"Yeah, for like five minutes."
Thorin did not look up. "He gave me his umbrella."
"That's cute, Thorin. Bet it was just love at first sight, wasn't it?" Nori teased.
It wasn't love at first sight. He was having probably the worst day of his life that day, and here came this person that had turned it around so effortlessly and...truthfully, it was more like awe at first sight. Or gratitude at first sight. Or genuine interest at first sight. And maybe it was a little like love after he'd binged all of Bilbo's movies, but he wasn't admitting to anything.
To put it simply, Thorin was a celebrity with a celebrity crush. And now that crush was standing in front of him wearing a yellow cardigan, a pair of oversized reading glasses, and a confused expression that was rapidly turning alarmed.
"Um," Thorin managed after a long, awkward silence. "It's nice to see you again."
Bilbo tactfully moved the conversation along. "You too, Thorin." He smiled. Thorin gulped. "I hear we're going to be working together."
"You sure are," Dori said, gliding over and handing Bilbo a Manila envelope. "Standard contract. Out-of-pocket expenses, time required, remuneration, and so forth. Read it carefully. Don't sign willy-nilly. Hello, Thorin, I'm Dori, are you two going for coffee? You'll want to get to know each other, I'm sure."
"Um-guh," said Thorin.
"Splendid," said Dori the whirlwind. "I'll call. Ciao!"
Bilbo sighed and slipped the envelope underneath his arm. "Shall we?" he asked, smiling up at him.
"Um-guh."
"I'll...take that as a yes."
----
Tumblr media
----
"Sorry, are these your keys?" Bilbo called out, hurrying toward a man sitting slouched on the stoop. "I saw you drop them when you left your cab. Uh, did you know you're getting all wet?"
He moved closer so that the man was sharing his umbrella.
"That's better," Bilbo said with a smile. He passed the keys over. "Here you go. Wouldn't want to be locked out too long in this deluge."
The man was looking up at him now, his mouth half-open. His eyes were very, very blue, and Bilbo couldn't help but blush a bit. He was handsome.
"I...." Handsome blinked. "Thank you."
"You're welcome," Bilbo said, but then he couldn't help but frown a little at the man's appearance. "Forgive me for asking, but, are you alright? Only, you don't seem like you are, and you completely missed your keys, even though they were only just over there."
"I–" the man stared at where Bilbo pointed. "I guess I wasn't really looking. But I'm fine. Thank you. Truly."
"If you're sure," Bilbo hummed, unconvinced. "Well, I'm going to be getting a cab, so, here...."
He handed Thorin his umbrella, laughing as the rain fell into his face. "For the next time you lose your keys in the rain."
Bilbo turned around and jogged back down the block, luckily seeing a cab coming toward him. He hailed it just as he heard the man shout, "who says there'll be a next time?"
He pulled the cab door open, laughing, and shouted back, "I do! And you know, there's nothing like looking, if you want to find something!"
----
Tumblr media
-------
"The script is already getting a lot of publicity, you know," Bofur said casually, slurping up the last clumps of his smoothie. "Smaug Trāgu went to the press about how Mirkwood was handling it."
Bilbo, who was in the middle of taking a bite of his salad, dropped his fork back onto his plate. "And Mirkwood didn't drop the script?" he asked, shocked.
"No, you're not out of a job yet, thankfully," Bofur reassured him. "Dropping Smaug now would be a PR nightmare, and I heard that Mirkwood can't take another controversy. Thranduil's already pissed off like 80% of Hollywood, he really doesn't need the public baying for his blood too."
"So what are they saying?"
Bofur shrugged one shoulder. "Interview comes out tomorrow. We'll see then."
They fell into a sullen silence. Bofur was looking as though he needed to say something else, however much he didn't want to, and Bilbo was torn between applauding Smaug and feeling sick that, in this case, they were on the same side. Before Bilbo could descend into a proper sulk, Bofur finally found his courage.
"You and Thorin are going to catch a lot of heat for this, you know that right?"
Bilbo nodded, swallowing nervously. Around him, the crowded little bistro continued on with its business while Bilbo's world narrowed down to Bofur's expectant gaze, which was simply too intense to avoid.
"Bilbo, I have to say this," he finally began, and somewhat frostily. "I'm honestly surprised at you. I thought you'd be as far away as possible from a script like this. And I know you accepted the part after the love story was scrapped. And that's....Bilbo, I just don't get it."
Bilbo bit his lip, looking away from his friend. He took a couple of deep, calming breaths.
"Right," he began anxiously. "It's like this: you and I both know that coming out means the end of your career."
Bofur waited for Bilbo to elaborate and when there was nothing else he shook his head, shrugging. "Yeeeeaaah, ok, but what does that...oh my god."
Bilbo licked his lips, his eyes a little wide. He nodded.
"Oh my god." Bofur leaned forward with shit-eating grin. "You're not!"
He shrugged one shoulder, smiling a little. "I'm...I'm thinking about it."
"Oh my god."
"Uh huh." He then waved his hands quickly before Bofur could gush more. "But I'm not completely sure yet. I mean, I'd...feel a lot more wretched about ruining the film for the crew if it weren't Mirkwood and Smaug doing it...but that doesn't mean it isn't still a shitty thing to do. And I didn't just take the part to make a point. The story really is beautiful. I mean, the fact that Smaug wrote it is a bit hard to swallow but...I'm going into this with every intention of producing the best performance of my life, and... probably the last."
Bofur shook his head, his face alight and full of mischief. "Bilbo Baggins, you crusader.”
"I'm not, not really," he denied, but then a bit of fire sparked in his eyes. "But if I'm going to out, then I'm going out with a bang."
---
Tumblr media Tumblr media Tumblr media Tumblr media Tumblr media
----
"Can I ask you a question?" Bilbo started hesitantly. They sat across from each other having dinner, the low light from the restaurant lamps thankfully hiding the nervous sweat on his brow.
Thorin looked up from his meal. "Of course," he said.
This was their second meeting, and Bilbo still wasn't sure if Thorin was a safe person to talk candidly to, so it was time to test the waters.
"Why did you take the part?" he asked.
If Thorin understood the underlying question then Bilbo could relax. If he answered with something like "it's the role of a lifetime" or "I really liked their friendship" then this would be their last outing alone.
Thorin wiped his mouth and took a sip of his wine. "I didn't have a choice," he revealed, jaw tight.
Bilbo blinked. "But you're not really desperate for work..." he speculated. "Or, um, are you?"
"No. I'm not desperate. I owed someone a favor. A big favor."
He wasn't sure who the favor was for or why Thorin looked so downtrodden about it, but at least he knew now that Thorin wasn't happy with the script either.
"And if you did have a choice?"
He met Bilbo's eyes, and his expression was both genuine and kind.
"I'd tell them to go fuck themselves."
Bilbo barked out a surprised laugh. "Yeah," he chuckled, shaking his head. "That's...kind of why I took the part too."
Thorin raised his eyebrows, a small, open smile on his face. But Bilbo, still cautious, quickly changed the subject before he could ask.
"Do you still have my umbrella?" he inquired cheekily.
Thorin gaped. "You...you remember me?!"
He looked so shocked (and oddly flattered?) that Bilbo threw his head back and laughed. "Of course I do! Though I didn't recognize you that day, I'm terribly sorry to say. It wasn't until I saw The Desolation that I realized who I'd run into."
"...you saw my movie," mumbled Thorin, blushing.
"Yeah." Bilbo fidgeted with his napkin. "And...I kind of went home after that and streamed all your films."
Thorin was bright red. "I..." he said.
Bilbo smiled at him shyly.
"I did the same thing," he finally confessed.
And a matching blush rose high on Bilbo's cheeks as they smiled at each other bashfully.
---
Tumblr media Tumblr media
----
Tumblr media
----
Tumblr media
----
"Alright, I have to ask."
Bilbo turned to glare at him, shoving a handful of popcorn into his mouth pointedly.
"It's okay, you listen, and I'll talk."
Bofur seemed determined to interrogate him, and Bilbo rolled his eyes and put his feet up on the coffee table.
"So, I know it's only been a month or two, but I think I've only seen you maybe three times at best. I'm your BFF, Bilbo, so I need to know...have you left me for Thorin?"
Bilbo made a face.
"Judging by your expression I'd say my position as bestie is safe. Now I just have to ask if I've been thrown over for a boy." He shook his head at Bilbo. "Don't be that person that abandons their friends when they find true love, Bilbo. Don't be that way."
"Knock it off." He threw a handful of popcorn at Bofur's face. "Thorin and I aren't together. And I've just been busy."
"Gossip mags say otherwise," Bofur argued, making Bilbo groan. "And you know you have stalkers on instagram, right? Because there's pictures of you two going on dates all over social media."
Bilbo, who was not tech-savvy, had not known about this. "They're not dates," he grumbled.
"People are even writing stories about you two. They call your relationship Bagginshield."
"What."
"I'm serious." Bofur was entirely too thrilled about all of this. "They write about you two having hot sex in like...wardrobe. Or under the craft services table."
"Oh my god." Bilbo covered his face to hide his blush.
"It's brilliant."
"Would be if it were actually true," Bilbo mumbled, too low for Bofur to hear. He sighed and sat up. "Whatever, I don't care. Because again, we aren't together."
"But you want to be. All you ever talk about is him. You're obsessed."
"I'm not obsessed!"
Bofur pointed to the television confusedly. "Then why are we watching all of his movies again?"
Bilbo only groaned and threw another handful of popcorn Bofur's way.
----
Tumblr media
----
He waited outside of Thorin's apartment nervously, feeling like an idiot for just showing up unannounced. But Thorin had had such a bad day on set today, and he and Elrond had got into it, and he'd seemed so tired and worn out, and....
In any case, Bilbo was lingering outside of his door like a creep when Thorin finally walked up the stairs.
"Hi," Bilbo rushed to greet him. "I made you a cake. Well, a coffee cake. I've never made it before. It might taste awful."
Thorin stared at him.
"You don't have to eat it, of course," Bilbo babbled. "It's just that today was pretty brutal, and I wanted to see if you were alright. Only, you don't seem like you are, and – mmph."
The coffee cake was delicious. They shared it, and they shared some other things as well. Kisses, mostly.
----
Tumblr media Tumblr media
---
"Bilbo!" said Gandalf, kissing both of his cheeks. "It's been too long."
Bilbo took the bouquet Gandalf handed him and ushered him into the house. "Oh thank you, and yes it has. Where on earth have you been?"
"The theater calls," Gandalf told him, his eyes twinkling. "And I answer."
"Sure you do." Bilbo rolled his eyes. "Well, come in, come in, we're all in the dining room. Dinner will be in about twenty minutes. Have Dori pour you some wine."
Bilbo's annual dinner party consisted of the few cousins he actually liked, plus Bofur, Dori (and sometimes Nori) and of course, Gandalf. This small group of people were Bilbo's family, something that he'd needed dearly after the death of his mother. He'd spent two birthdays alone before this tradition had started, but now every September the 22nd, Bilbo's chosen family descended on his house to congratulate him on surviving yet another year.
He heard Primula greet Gandalf, and Frodo's happy squeal, and he grabbed up his phone to check the time. He took a deep, nervous breath.
"Can I help with anything?" asked Drogo, hovering a bit.
Bilbo smiled and waved him off. "No, that's alright! Sit down, socialize! We're just about ready to go."
He grabbed up the last platter, which held a lovely roast turkey, and took it out to the dining room. They all oohed and awwed obediently, and Bilbo was just going to have them start sitting around at the table when the doorbell rang.
They all fell silent.
"Ah," said Gandalf. "I'd wondered who the extra place setting was for."
He saw them all exchange baffled looks (though Gandalf seemed unsurprised) before he left for the entrance hall. He understood their shock, of course – Bilbo's dinner party was exclusive to the extreme. He only invited family, after all.
"Hi," he breathed out, opening the front door.
Thorin smiled nervously. "Hi," he said.
----
Tumblr media
----
Nori pulled him into the main offices with a tight hand on his arm and a tense frown on his face. The expression was so unlike him that Bilbo panicked for a moment, wondering if someone had died. He was lead to a small conference room where Nori halted him in front of a closed door.
"Thranduil's in there," he said, in that offhand way of his.
"What?" Bilbo hissed. "Why?"
Helpfully, Nori shrugged. "I think it's about the articles."
Bilbo grimaced. "Oh. Too much?"
Nori held up his index finger and thumb, and pinched them together. Bilbo sighed and went for the door, but Nori held him back again.
"It...might be personal too. I mean about you and Thorin."
"That's none of their business," Bilbo snapped, his hands clenching into fists at his sides.
"They think it is," he said, and patted Bilbo on the back. "And that's all that matters."
Bilbo walked into the conference room anxiously (though he was still somewhat angry) and when he saw Smaug as well as Thranduil sitting there, his discomfort only grew.
At least there were no niceties.
"I'll make this quick," said Thranduil. "While Mirkwood Films applauds your work in our upcoming movie, we would appreciate if all public statements and interviews went through a screening process before publication."
His jaw had dropped a bit, and Bilbo closed it and bit his lower lip. From beside Thranduil, Smaug looked amused.
"As it is, Mirkwood Films kindly asks that you take care when making comments to the press, or ideally try not to interact with them at all. I hope that's alright with you, Mr. Baggins. Mirkwood truly appreciates all of your hard work."
Thranduil finished his little speech and stood. He gathered up his business folder and his Starbucks cup and without another word – left the room.
The look on Bilbo's face must have been hilarious, because Smaug laughed loudly at him. Bilbo scowled.
"I always love how polite his threats are," Smaug said airily, his face contorted in a sickening smile. "He's right about one thing though, Bilbo. Your work on Unexpected is phenomenal."
Bilbo didn't smile back. "Thanks."
"Had the script remained in its original form I would have loved to see you and Thorin intimate on the big screen."
Bilbo blinked. "Ok," he said, standing up. "I'm leaving."
"I'm surprised at the passion you both managed to depict. Thorin, especially, was a shock. He seemed so resentful of the part when Thranduil made him take it."
Smaug was not revealing to Bilbo anything that he didn't already know, though maybe he was trying to see how much Bilbo was privy to....
If Thorin trusted Bilbo enough to tell him about his father's unpaid debt at the time of his death, and about Thranduil conscripting him into what was essentially indentured servitude (which had all happened on the day they'd first met, to be precise), then it would be painfully obvious that Thorin and Bilbo were together. Which would be the perfect blackmail for Smaug, since Hollywood didn't like behind-the-scenes romances, and behind-the-scenes gay romances they liked even less.
"Well, isn't that fascinating," Bilbo answered noncommittally. "Right. Sorry, I've got a...thing. Good to see you, Smaug."
"And you," Smaug leered. "Bilbo."
He beat a hasty retreat and descended back down to post. Nori was there with the sound editors, whom Bilbo greeted briefly before drawing Nori away.
"How'd it go?" he asked.
"Smaug was there," Bilbo said. "He was a total creep."
"So...normal."
"And they basically told me to stop talking or else."
Nori shook his head sadly. "You'd better do as they say if you still want to work."
Displeased with this answer, he huffed and put his hands on his hips. "That's the thing, I don't want to do what they say. I shouldn't have to hide like this."
Faced with his sudden rebelliousness, Nori could only smile at Bilbo in amusement.
"I gave that movie my all– my very best gay!" Bilbo insisted.
Nori choked.
"...and I made sure that people were going to walk out of that theater and say 'that was the gayest movie I have ever seen'!"
He even stomped his foot a little.
"So no, Nori, I won't do what they want. It's too late for that now."
Nori looked down at his friend with a fond smile. It soon wilted a little, though. "And what about Thorin, Bilbo?" he asked quietly. "What about his career?"
Bilbo blinked. "I...."
"He owes Thranduil a lot of money, oh don't look so shocked that I know, nothing's secret around here." He sighed and looked away. "Don't get me wrong, I want you to tell them all to go to hell, but Thorin's my friend too, Bilbo, and I-"
"No," Bilbo cut him off. "No, you're right."
"I'm not saying back down," Nori amended, resting his hand on Bilbo's shoulder. "I'm just saying be careful. You've got someone you need to protect now."
Bilbo nodded solemnly. As he left the studios and drove toward home, he thought on Thranduil's threats and Nori's warning. Thorin would suffer, should Bilbo step over the line, and his plans for the premiere went above and beyond that.
"I'm not saying back down," Nori had said, but Bilbo was beginning to realize that that was exactly what he was going to have to do.
----
Tumblr media
--
Tumblr media
---
Thorin's fingertips ran idly down his back. Bilbo turned over to face him, sinking into his embrace and nosing at the delicate skin of his neck. He smiled slowly as Thorin rumbled with pleasure.
"I don't want to ask what time it is," Bilbo whispered.
"You say as you ask what time it is," replied Thorin. He leaned over a groaning Bilbo to reach Bilbo's phone. "It's nine. We have time."
He laid back down and gathered Bilbo against his chest.
"Are you nervous about tonight?" Thorin asked.
Bilbo inhaled noisily. "I'm..." he began, but then paused. "I'd decided not to do what I had initially planned, you know."
"Do I?"
"You've been curious. I'm sorry."
Thorin nodded and rubbed Bilbo's arm gently. "I have, but I didn't mind waiting for you to be ready to tell me."
Bilbo curled closer. "I wanted this to be my last movie before I came out. Publicly."
Thorin craned his neck to look at him. "After Mirkwood spent so much time denying they straight washed?" He blinked. "That's...devious."
Bilbo couldn't help but laugh. "I just...I knew that this film would always be a problem. And it is. But it also isn't. We do fall in love Thorin, me and you, and Martin and Richard. It's just not the kind of love people expect."
He ran his hand across Thorin's chest absently. "But it still deserves to be on screen. I wanted to come out, and not only reinforce that our characters loved each other, but to tell Mirkwood and all those stupid people who want us to shut up that we won't. Not anymore."
Thorin pulled Bilbo up and hugged him, kissing his curls, his neck, his cheeks. "Why did you decide not to?" he whispered.
Bilbo scoffed, wrapping his arms around Thorin's shoulders. "You know why not, Thranduil...."
"Screw him." He suddenly sat up. "He can rot. Let's do it, Bilbo. Together."
Frowning, Bilbo sat back on his heels and stared. "Are you serious?"
"I am." He nodded. He reached out and touched Bilbo's cheeks. "I want to."
"Thorin, we'll have undermined and humiliated Thranduil and the studio," Bilbo whispered. "Publicly. We'll have attacked the business. The business we work in. No one will hire actors they can't trust to keep their mouths shut. Our careers will be over."
Thorin touched his hair gently, pushing his curls back behind his ears. "I think it's worth it, don’t you?” he said, after a moment. "I'm tired, and I know you're tired of playing this stupid game too."
Bilbo shook his head. "You'll lose everything."
"You don't know that. This could be good, Bilbo. For us. For others. It's not going change on its own. And if we don't try, we're as bad as them."
He said nothing, glancing away from Thorin's eyes-- torn. Thorin moved closer and gently coaxed Bilbo’s head up.
"There's nothing like looking," he said. "If you want to find something."
Bilbo swallowed; his chest hurt and his eyes were a little wet. Thorin was not crying, or upset at all, instead he looked at Bilbo with so much love that he couldn't help but wonder if this were real or just a dream. He leaned in and kissed Thorin, feeling weightless.
Real.
---
"Are you ready?"
Bilbo turned to him with a nervous but determined expression on his face. In the safety of the tinted limo they could not be seen, and Thorin used this advantage to kiss Bilbo thoroughly.
"Well, I am now," Bilbo said, when his lover pulled back.
He grabbed Thorin's hand, prepared to hold onto it the entire night (in sight of everyone, everything, and with no fear) and took a long, deep breath. They were ready.
With Thorin's solid presence by his side, Bilbo opened the door.
---
Tumblr media Tumblr media Tumblr media Tumblr media Tumblr media Tumblr media Tumblr media Tumblr media Tumblr media Tumblr media
10 notes · View notes
kmclaude · 3 years
Note
Forgive me Father, I have no awful headcanons for you, only a general question on comic making. How do you do it, writing-wise/how do you decide what points go where, how do you plot it out (or do you have any resources on the writing aspect that you find useful?) Not to get too bogged down in details, but I attended a writer’s workshop and the author in residence suggested I transfer my wordy sci-fi WIP into graphic novel script, as it might work better. (I do draw, but I don’t know if I have it in me to draw a whole comic—characters in motion? Doing things? With backgrounds? How dare, why can’t everyone just stand around looking pretty)
I was interested but it quickly turned into a lot of internal screaming as I tried to figure out how to compress the hell out of it, since novels are free to do a lot more internal monologuing and such compared to a comic format (to say nothing of trying to write a script without seeing how the panels lay out—just for my own sake, I might have to do both concurrently.)
As an aside, to get a feel for graphic novels I was rereading 99RM and was reminded of how great it was—tightly plotted, intriguing, and anything to do with Ashmedai was just beautifully drawn. I need more Monsignor Tiefer and something something there are parallels between Jehan and Daniel in my head and I don’t know if they make sense but it works for me. (As an aside, I liked the emphasis on atonement being more than just the word sorry, but acknowledgment you did wrong and an attempt to remedy it—I don’t know why that spoke to me the way that it did.)
I thought Tumblr had a word count limit for asks but so far it has offered zero resistance, oh well. I don’t have much else to say but on the topic of 99RM, Adam getting under Monsignor’s skin is amazing, 10/10 (about the Pride picture earlier)
wow tumblr got rid of the markdown editor! or at least in asks which means the new editor probably has no markdown....god i hate this site! anyway...
Totally! So first, giant thank you for the compliments! Second, I have a few questions in turn for you before I dive into a sort of answer, since I can give some advice to your questions in general but it also sounds like you have a specific conundrum on your hands.
My questions to your specific situation are:
did the author give any reason for recommending a, in your words, "wordy" story be turned into a graphic novel?
is the story you're writing more, like you said, "internal monologuing"? action packed? where do the visuals come from?
do you WANT it to be a comic? furthermore, do you want it to be a comic you then must turn around and draw? or would you be interested in writing for comics as a comic writer to have your words turned into art?
With those questions in mind, let me jump into the questions you posed me!
Let me start with a confession...
I've said this before but let me say it again: Ninety-Nine Righteous Men was not originally a comic — it was a feature-length screenplay! And furthermore, it was written for a class so it got workshopped again and again to tighten the plot by a classroom of other nerds — so as kind as your compliments are, I'm giving credit where credit is due as that was not just a solo ship sailing on the sea. On top of that, it got adapted (by me) into a comic for my thesis, so my advisor also helped me make it translate or "read" well given I was director, actor, set designer, writer, editor, SFX guy, etc. all in one. And it was a huge help to have someone say "there is no way you can go blow by blow from script to comic: you need to make edits!" For instance, two scenes got compressed to simple dialogue overlaid on the splashpage of Ashmedai raping Caleb (with an insert panel of Adam and Daniel talking the next day.) What had been probably at least 5 pages became 1.
Additionally, I don't consider myself a strong plotter. That said, I found learning to write for film made the plotting process finally make some damn sense since the old plot diagram we all got taught in grammar school English never made sense as a reader and definitely made 0 sense as a writer — for me, for some reason, the breakdown of 25-50-25 (approx. 25 pages for act 1, 50 for act 2 split into 2 parts of 25 each, 25 pages for act 3) and the breaking down of the beats (the act turning points, the mid points, the low point) helped give me a structure that just "draw a mountain, rising action, climax is there, figure it out" never did. Maybe the plot diagram is visually too linear when stories have ebb and flow? I don't know. But it never clicked until screenwriting. So that's where I am coming from. YMMV.
I should also state that there's Official Ways To Write Comic Scripts to Be Drawn By An Artist (Especially If You Work For A Real Publisher As a Writer) and there's What Works For You/Your Team. I don't give a rat's ass about the former (and as an artist, I kind of hate panel by panel breakdowns like you see there) so I'm pretty much entirely writing on the latter here. I don't give a good god damn about official ways of doing anything: what works for you to get it done is what matters.
What Goes Where?
Like I said, 99RM was a screenplay so it follows, beat-wise, the 3-act screenplay structure (hell, it's probably more accurate to say it follows the act 1/act 2A/act 2B/act 3 structure.) So there was the story idea or concept that then got applied to those story beats associated with the structure, and from there came the Scene-by-scene Breakdown (or Expanded Scene Breakdown) which basically is an outline of beats broken down into individual scenes in short prose form so you get an overview of what happens, can see pacing, etc. In the resources at the end I put some links that give information on the whole story beat thing.
(As an aside: for all my short comics, I don't bother with all that, frankly. I usually have an image or a concept or a bit of writing — usually dialogue or monologue, sometimes a concrete scene — that I pick at and pick at in a little sketchbook, going back and forth between writing and thumbnail sketches of the page. Or I just go by the seat of my pants and bullshit my way through. Either or. Those in many ways are a bit more like poems, in my mind: they are images, they are snapshots, they are feelings that I'm capturing in a few panels. Think doing mental math rather than writing out geometric proofs, yanno?)
Personally, I tend to lean on dialogue as it comes easier for me (it's probably why I'm so drawn to screenwriting!) so for me, if I were to do another longform GN, I'd probably take my general "uhhhhhh I have an idea and some beats maybe so I guess this should happen this way?" outline and start breaking it down scene by scene (I tend to write down scenes or scene sketches in that "uhhhh?" outline anyway LOL) and then figure out basic dialogue and action beats — in short, I'd kind of do the work of writing a screenplay without necessarily going full screenplay format (though I did find the format gave me an idea of timing/pacing, as 1 page of formatted script is about equal to 1 minute of screentime, and gave me room to sketch thumbnails or make edits on the large margins!) If you're not a monologue/soliloque/dialogue/speech person and more an image and description person, you may lean more into visuals and scenes that cut to each other.
Either way this of course introduces the elephant in the panel: art! How do you choose what to draw?
The answer is, well, it depends! The freedom of comics is if you can imagine it, you can make it happen. You have the freedoms (and audio limitations) of a truly silent film with none of the physical limitations. Your words can move in real time with the images or they can be a narrative related to the scene or they could be nonsequitors entirely! The better question is how do you think? Do you need all the words and action written first before you break down the visuals? Do you need a panel by panel breakdown to be happy, or can you freewheel and translate from word and general outlines to thumbnails? What suits you? I really cannot answer this because I think when it comes to what goes where with regard to art, it's a bit of "how do you process visuals" and also a bit of "who's drawing this?" — effectively, who is the interpreter for the exact thing you are writing? Is it you or someone else? If it's you, would you benefit from a barebones script alongside thumbnailed paneling? Would you be served by a barebones script, then thumbnails, then a new script that includes panel and page breakdowns? What frees you up to do what you need to do to tell your story?
If I'm being honest, I don't necessarily worry about panels or what something will look like necessarily until I'm done writing. I may have an image that I clearly state needs to happen. I may even have a sequence of panels that I want to see and I do indeed sketch that out and make note of it in my script. But exactly how things will be laid out, paneled, situated? That could change up until I've sketched my final pencils in CSP (but I am writer and artist so admittedly I get that luxury.)
How do I compress from novel to comic?
Honest answer? You don't. Not really. You adapt from one to another. It's more a translation. Something that would take forever to write may take 1 page in a comic or may take a whole issue.
I'm going to pick on Victor Hugo. Victor Hugo spent a whole-ass book in Notre-Dame de Paris talking about a bird's eye view of Paris and other medieval architecture boring stuff, with I guess some foreshadowing with Montfaucon. Who cares. Not me. I like story. Anyway. When we translate that book to a movie any of the billion times someone's done that, we don't spend a billion years talking at length about medieval Paris. There's no great monologuing about the gibbet or whatever: you get to have some establishing shots, maybe a musical number, and then you move tf on. Because it's a movie, right? Your visuals are right there. We can see medieval Paris. We can see the cathedral. We can see the gibbet. We don't need a whole book: it's visually right there. Same with a comic: you may need many paragraphs to describe, say, a space station off of Sirius and one panel to show it.
On the flip side, you may take one line, maybe two, to say a character keyed in the special code to activate the holodeck; depending on the visual pacing, that could be a whole page of panels (are we trying to stretch time? slow it down? what are we emphasizing?) A character gives a sigh of relief — one line of text, yeah? That could be a frozen panel while a conversation continues on or that could be two (or more!) panels, similar to the direction [a beat] in screenwriting.
Sorry there's not a super easy answer there to the question of compression: it's a lot more of a tug, a push-pull, that depends on what you're conveying.
So Do I Have It In Me to Write & Draw a GN?
The only way you'll know is by doing. Scary, right? The thing is, you don't necessarily need to be an animation king or God's gift to background artists to draw a comic.
Hell, I hate backgrounds. I still remember sitting across from my friend who said "Claude you really need to draw an establishing exterior of the church at some point" and me being like "why do you hate me specifically" because drawing architecture? Again? I already drew the interior of the church altar ONCE, that should be enough, right? But I did draw an exterior of the church. Sorta. More like the top steeple. Enough to suggest what I needed to suggest to give the audience a better sense of place without me absolutely losing my gourd trying to render something out of my wheelhouse at the time.
And that's kinda the ticket, I think. Not everyone's a master draftsman. Not everyone has all the skills in every area. And regardless, from page one to page one hundred, your skills will improve. That's all part of it — and in the meantime, you should lean into your strengths and cheat where you can.
Do you need to lovingly render a background every single panel? Christ no! Does every little detail need to be drawn out? Sure if you want your hand to fall off. Cheat! Use Sketchup to build models! Use Blender to sculpt forms to paint over! Use CSP Assets for prebuilt models and brushes if you use CSP! Take photographs and manip them! Cheat! Do what you need to do to convey what you need to convey!
For instance, a tip/axiom/"rule" I've seen is one establishing shot per scene minimum and a corollary to that has been include a background once per page minimum as grounding (no we cannot all have eternal floating heads and characters in the void. Unless your comic is set in the void. In which case, you do you.) People ain't out here drawing hyper detailed backgrounds per each tiny panel. The people who DO do that are insane. Or stupid. Or both. Or have no deadline? Either way, someone's gonna have a repetitive stress injury... Save yourself the pain and the headache. Take shortcuts. Save your punches for the big K.O. moments.
Start small. Make an 8-page zine. Tell a beginning, a middle, an end in comic form. Bring a scene to life in a few pages. See what you're comfortable drawing and where you struggle. See where you can lean heavily into your comfort zones. Learn how to lean out of your comfort zone. Learn when it's worth it to do the latter.
Or start large. Technically my first finished comic (that wasn't "a dumb pencil thing I drew in elementary school" or "that 13 volume manga I outlined and only penciled, what, 7 pages of in sixth grade" or "random one page things I draw about my characters on throw up on the interwebz") was 99RM so what do I know. I'm just some guy on the internet.
(That's not self-deprecating, I literally am some guy on the internet talking about my path. A lot of this is gonna come down to you and what vibes with you.)
Resources on writing
Some of these are things that help me and some are things that I crowd-sourced from others. Some of these are going to be screenwriting based, some will be comic based.
Making Comics by Scott McCloud: I think everyone recommends this but I think it is a useful book if you're like "ahh!!! christ!! where do I start!!!???" It very much breaks down the elements of comics and the world they exist in and the principles involved, with the caveat that there are no rules! In fact, I need to re-read it.
Comic Book Design: I picked this up at B&N on a whim and in terms of just getting a bird's eye view of varied ways to tackle layout and paneling? It's such a great resource and reference! I personally recommend it as a way to really get a feel for what can be done.
the screenwriter's bible: this is a book that was used in my class. we also used another book that's escaping me but to be honest, I never read anything in school and that's why I'm so stupid. anyway, I'd say check it out if you want, especially if you start googling screenwriting stuff and it's like 20 billion pieces of advice that make 0 sense -- get the core advice from one place and then go from there.
Drawing Words & Writing Pictures: many people I know recommended this. I think I have it? It may be in storage. So frankly, I'd already read a bunch of books on comics before grabbing this that it kind of felt like a rehash. Which isn't shade on the authors — I personally was just a sort of "girl, I don't need comics 101!!!"
Invisible Ink: A Practical Guide to Building Stories that Resonate: this has been recommended so many times to me. I cannot personally speak on it but I can say I do trust those who rec'd it to me so I am passing it along
the story circle: this is pretty much the hero's journey. a useful way to think of journeys! a homie pretty much swears by it
a primer on beats: quick google search got me this that outlines storybeats
save the cat!: what the above refers to, this gives a more genre-specific breakdown. also wants to sell you on the software but you don't need that.
I hope this helps and please feel free to touch base with more info about your specific situation and hopefully I'll have more applicable answers.
81 notes · View notes
sunscreenstudies · 3 years
Note
hey ik this is random but I was scrolling thru the leaving cert tag and saw your post abt your results. Firstly congrats (even if it is 3 years late haha), secondly I’m currently in 6th year and was wondering if I could ask for some English advice? I’m looking to go up a grade (h3->h2) and was wondering if you have any particular tips for studying english, the exam, technique, or for literally anything relevant to the subject. There’s no pressure to answer this, ty either way :)))
Hey! Thank you so much for the ask and i am so sorry i’ve only gotten round to it now XD
LC English tips below!
Okay so it’s been a while since I did the LC but if things are more or less the same, then you’ve got your three texts to answer a question on.
Tip #1: Even though there is an awful lot to learn, you just need to remember key words, and you’ll sail through! 
In the comparative, you need to compare your texts in every. single. paragraph. You could write a fantastic essay, but if you don’t say “In comparison to this…” “Text 2 however differs from this…” “Similarly…” “The two texts are different in the sense that…” etc. you will get zero marks at all.
When answering your poetry question, you need to keep referring to the style of the poet. Every past poetry question can be broken down into two simple questions: What did the poet write about? and how did they say it? If you can answer both these questions on every poem you learn, you’ll do great! 
Also, do not learn any more than 5 poems per poet and don’t learn any more than 5 poets to begin with. This covers you completely no matter who appears on the day!
Tip #2: Please please pleaseee remember that for the comphrehension section, you must answer one question A and one question B from two different texts! If you answer from the same text you will get 0 and worse than that, this section is worth 12.5% of your total paper which means you will be down an entire grade immediately.
The length of your answer needs to correspond to the marks going for that question. In question A you usually have three parts, worth 15m, 15m, and 20m. Your 20 mark answer must be longer than your 15 mark questions.
For every 5 marks a question is worth, you need 1 A4-page pararaph. Unless you’ve got tiny writing, this is usually 5 to 7 lines of the page.
Your teacher has undoubtedly told you all about timing and “don’t spend any longer than 40 minutes on your question A” and yea they have a point, to an extent. I spent about an hour answering my question A and then sailed through question B because for me, I found the second question a lot easier to answer. Don’t panic if you don’t stick to the “recommended time” because every single person is different and what you find easy might be difficult for someone else.
In saying that, if you are spending loadsss of time on one particular section and you can feel the clock ticking, then move the heck on. Take a deep breath, leave a blank page for yourself to come back to that question later, and start your next part. Every question has a finite amount of marks, so no matter how brilliant your 20 mark answer is, you can only ever get 20 marks for it, and if that answer came at the expense of not getting question B done at all, then you’re down a grade already.
Tip #3: They want your opinion. Let me repeat that. They want your opinion. No matter what the heck they ask you, whether it’s about poetry or your novel or a Shakespearean text, the examiner will be checking to see what you thought of the text. I know firsthand how weird writing things like “In my opion...” or “I believe that...” but this is how you get the marks. Don’t lose the H2 you’re aiming for cause you’re feeling a bit awkward. After the exam, that feeling will never matter again, but your grade will!
Link every single paragraph in every single answer. This doesn’t have to be complicated, you don’t even need to write an entire sentence. Just start every new paragraph with phrases like “However...” or  “Therefore...” or “In contrast to this...”. If you don’t link your paragraphs, the examiner will think that you don’t know what you’re talking about and that you have no opinion of your own (see Tip #3) so use those joining phrases!
Tip #4: For that letter/article/diary entry question B, make sure that whatever part of it you answer, you know the layout for that style. Reports must have a title, introduction, work carried out, findings, suggestions, recommendations, and conclusion sections. Essays need to have a clear introduction, 5+ paragraphs, and closing. Even diary entries should begin with ‘Dear Diary’ which physically causes me pain to write, but it’s what gets you the marks!
Letters are the most asked question B but the most diffuclt to get good marks in. First things first: Figure out if it’s formal or informal. Formal will be editors, principals, government, or anyone that you would address as “sir” or “ma’am” in real life. Informal will be your friends, close family members, penpals, or anyone you’d hug goodbye and laugh with in real life.
Formal letters begin with your own name in the right hand corner of the page, with your own address directly below it. Skip a line, and then write the date below it, always in the format of “01 January 2020″ and be sure to check the question for any hint about what this date should be. If you’re writing a letter to your boss asking about organising a staff barbarcue for staff morale, then you wouldn’t date it in the middle of December, right? Sign off with something professional like “Kind regards” or “Thank you for your time”
Informal letters begin with your own address on the top right-hand corner of the page but do not write your name! It’s an informal letter to your friend; they know who you are.  Skip a line, and then write the date below it, always in the format of “01 January 2020″ and pay attention to the time of year again. Sign off with something casual like “see you later!” or “talk soon!”
Tip #5: Section 2′s composing section is worth an entire 25% of your paper. If you want to get a good grade, you need to get a good grade in this. If you’re aiming for a H2, then you need to get a H2 in this section minimum.
Your essay  should be between 4 to 6 pages, or 1000 to 1250 words. At least.
Always open with a quote, a rhetorical question, or a shocking statistic. I went online the night before my Paper One exam, and wrote down 10 quotes from well-known people about the most popular topics in life, eg. Education, Love, Money, Travelling, Death, Youth & Aging, etc. and just learnt them off in half an hour. I ended up using three of them on the day, and you have no idea the relief you feel when you’re guaranteed that at least one thing in your composition will get you marks!
Take an entire A4 page and plan your essay before you start. Not only is it just common sense and super helpful to get all your ideas down before you forget them, but if you run out of time for whatever reason, then the examiner will be able to see what you were planning to write, and will give you an extra mark or two. Your plan doens’t have to be complicated and you definitely shouldn’t spend any longer than 5 minutes on it. Just throw down a few words, organise them based on paragraph, and then start writing.
And finally (i’m so sorry that you had to read all that) remain calm! No matter what happens, whether you get a H1 or a H7, as long as you do your best then no one can say anything to you! You are more than your grade and you are more than some English exam that won’t matter in ten years anyway. Stay calm, always put your mental and physical health first, and remember that this paper is not the end all be all of anything. You’ve got this.
32 notes · View notes
pidgieee · 4 years
Text
The Weekly Roundup 03/06/20
Hello hello! This post marks the first Weekly Roundup, a reflective post where I go over news within the Yu-Gi-Oh trading card game - this includes any unique tops, techs, card announcements and my thoughts of the format. That being said, I understand this post can get quite lengthy and many fans of the show may not be interested in the actual game, so please feel free to blacklist the tag #roundup if you don’t wish to see this kind of thing. Without further ado, let’s break down the past week of the TCG.
Banlist Hype It’s banlist season once again in the TCG, and no card is safe. Everyone has their personal predictions of the cards getting hit, be it wish list or something causing genuine issue within the meta, so let’s break down some of the more frequently discussed cards.
Tumblr media
[ID: The card art for the card “Block Dragon,” depicting a dragon made out of several pieces of Lego.]
Block Dragon: This is a card that’s been evading banlists for quite some time. While it used to be popular in Gem-Knight FTK, the rise of the Adamancipator meant Block Dragon was going to be abused for its Dragon Ruler-esque effect. Personally, I think Block Dragon should go to 1 if anything - still around for the decks that need it, while hitting Adamancipator, which may not survive this coming banlist. Mecha Phantom Beast O-Lion: Very unlikely to get hit, as a reprint of this card has recently been announced. Limiting would do nothing as it’s currently run at 1 in most decks anyway. Jet Synchron: This is the card that I’m most certain will get hit. It evaded the last list barely, with glow-up bulb and the like being hit for being Halqifibrax targets, but given its frequency of use and ability to revive itself, the card is most likely to be banned completely. Dragon Buster Destruction Sword: The union carrier buster lock is, being blunt, awful to deal with. It doesn’t help with how generic and easy Union Carrier is to bring out, but given how recent both Halqifibrax and Union Carrier are in terms of set release, this card is likely to get the boot to substitute. Maxx “C”: Oh boy, this is the part of the banlist hype where people speculate which cards will return. Maxx C brings out the worst in people - you either never want to see the card back, or you don’t understand why people hate the card when both players can run it. I have my own thoughts on the card, being very against its return, but I will save the word count for a different post if anyone is interested. Card should absolutely stay at 0. These are the most popular discussed cards by far. I wouldn’t be surprised if Tour Guide of the Underworld returns to 3, or Drident goes to 2 since the Barrage hit was quite a pre-emptive hit. A key thing to keep in mind is that the list states “no sooner than June 1st” - it could be tomorrow, or July. With most competitive play being suspended with Covid-19 until June 30th, I can’t see the list coming too soon. Remote Dueling
 Konami has once again reinvented the wheel; the old “skype dueling” is now seeing a return through discord as a sanctioned event. 
Tumblr media
[ID: Yu-Gi-Oh playmats with the phrase “Remote duel” in the center.]
To participate, you need to join the Konami Remote Dueling server, then find your local tournament store discord server on the list provided. Not all stores are participating; mine isn’t, so you may be out of luck if you wish for an official event. For non-sanctioned events...
Tops of Interest
Unfortunately, without any official events, it’s harder to keep track of what decks are doing well. 
Although this was roughly 10 days ago, Sky Strikers have won the third LCS in a surprising twist, winning over Synchro Eldlich. Despite all the hits, engage gone, the deck still seems to maintain its place as a somewhat competitive deck. Looking at the breakdown of the decks in the third LCS: 
Tumblr media
[ID: Poster of the Luxury Championship Series featured alongside a pie chart, displaying the percentage of each deck. Image provided by LuxuryGamingLLC.]
It’s no surprise the top played decks are synchro eldlich and adamancipator, but the 22% other decks is quite interesting, especially with a Sky Striker top by Ryan Yu. I would recommend looking up his list if you’re interested in seeing how exactly Striker made it to first.
Tumblr media
[ID: card art of Dante, Traveller of the Burning Abyss]
The weekly Pro Play Tour saw a Burning Abyss player Franco Persano reach first place, in a tournament with over 100 participants. The full deck profile can be found on youtube, but he had also provided some commentary in the Burning Abyss Facebook group, explaining some of the cards he had used. Chaos Hunter was an interesting side choice; the card was sided for adamancipators and Dinos, and the Lancea effect of preventing banishes while discarding for cost seemingly pairs well with the deck’s playstyle.
Other news
 Recently, the trademark for Yu-Gi-Oh sevens has been filed for the U.S. and Italy, indicating that the anime may be making its way to the west through a dub. Hopefully this means Rush Duels may come over, even if it is as a small format like speed duels, as the difference in rules make Rush Duels seem much more refreshing. The youtuber and streamer Farfa will be doing a full set reveal for Toon Chaos midnight June 4th (UTC) I would recommend checking out the reveal, as it should give an idea of whether the set is worth it.
Plenty of new cards have been announced in the past few weeks; Appliancers are making their debut soon in the OCG, many DM based decks are getting new support, such as Jinzo and Harpies, and a card used by Aporia in 5Ds has been announced for Collection Pack 20.
Afterthoughts
As the banlist looms over us, I’ll be posting weekly updates about what cards I’ve seen pop up in discussions of it. My DMs are open for anyone who wishes to discuss anything Yu-Gi-Oh related; be it the TCG, or any of the series. 
Keep safe and Duel well.
1 note · View note
usmanshami-blog · 4 years
Text
Trying out AWS SageMaker Studio for a simple machine learning task
Overview
Let’s look at how to accomplish a simple machine learning task on
AWS SageMaker
We'll take a movie ratings dataset comprising of user ratings for different movies and the movie metadata. Based on these existing user ratings of different movies, we'll try to predict what the user's rating would be for a movie that they haven't rated yet.  
The following two documents are the primary references used in creating this doc - so feel free to refer to them in case there are any issues.
[1] Build, Train, and Deploy a Machine Learning Model (https://aws.amazon.com/getting-started/hands-on/build-train-deploy-machine-learning-model-sagemaker/) [2] Machine Learning Project – Data Science Movie Recommendation System Project in R (https://data-flair.training/blogs/data-science-r-movie-recommendation/)
We'd be using the MovieLens data from GroupLens Research.
[3] MovieLens | GroupLens (https://grouplens.org/datasets/movielens/)
Steps
Log into the AWS console and select Amazon SageMaker from the services to be redirected to the SageMaker Dashboard.
Select Amazon SageMaker Studio from the navigation bar on the left and select quick start to start a new instance of Amazon SageMaker Studio. Consider leaving the default name as is, select "Create a new role" in execution role and specify the S3 buckets you'd be using (Leaving these defaults should be okay as well) and click "Create Role". Once the execution role has been created, click on “Submit” - this will create a new Amazon SageMaker instance.
Once the Amazon SageMaker Studio instance is created, click on Open Studio link to launch the Amazon SageMaker Studio IDE.
Create a new Jupyter notebook using the Data Science as the Kernel and the latest python (Python 3) notebook.
Import the python libraries we'd be using in this task - boto3 is the python library which is used for making AWS requests, sagemaker is the sagemaker library and urllib.request is the library to make url requests such as HTTP GET etc to download csv files stored on S3 and elsewhere. numpy is a scientific computing python library and pandas is a python data analysis library. After writing the following code in the Jupyter notebook cell, look for a play button in the controls bar on top - click it should run the currently active cell and execute its code.    
import boto3, sagemaker, urllib.request from sagemaker import get_execution_role import numpy as np                                 import pandas as pd                               from sagemaker.predictor import csv_serializer 
Once the imports have been completed, lets add some standard code to create execution role, define region settings and initialize boto for the region and xgboost
# Define IAM role role = get_execution_role() prefix = 'sagemaker/movielens' containers = {'us-west-2': '433757028032.dkr.ecr.us-west-2.amazonaws.com/xgboost:latest',              'us-east-1': '811284229777.dkr.ecr.us-east-1.amazonaws.com/xgboost:latest',              'us-east-2': '825641698319.dkr.ecr.us-east-2.amazonaws.com/xgboost:latest',              'eu-west-1': '685385470294.dkr.ecr.eu-west-1.amazonaws.com/xgboost:latest'} # each region has its XGBoost container my_region = boto3.session.Session().region_name # set the region of the instance print("Success - the MySageMakerInstance is in the " + my_region + " region. You will use the " + containers[my_region] + " container for your SageMaker endpoint.")
Create an S3 bucket that will contain our dataset files as well as training, test data, the computed machine learning models and the results. 
bucket_name = '<BUCKET_NAME_HERE>' s3 = boto3.resource('s3') try:    if  my_region == 'us-east-1':      s3.create_bucket(Bucket=bucket_name)    else:      s3.create_bucket(Bucket=bucket_name, CreateBucketConfiguration={ 'LocationConstraint': my_region })    print('S3 bucket created successfully') except Exception as e:    print('S3 error: ',e)
Once the bucket has been created, upload the movie lens data files to the bucket by using the S3 console UI. You'll need to download the zip from https://grouplens.org/datasets/movielens/, extract it on the local machine and then upload the extracted files on S3. We used the Small dataset which has 100,000 ratings applied to 9,000 movies by 600 users. Be sure to read the MovieLens README file to make sure you understand the conditions on the data usage.  
After the files have been uploaded, add the following code to the notebook to download the csv files and convert them to pandas data format
try:  urllib.request.urlretrieve ("https://{}.s3.{}.amazonaws.com/ratings.csv".format(bucket_name, my_region), "ratings.csv")  print('Success: downloaded ratings.csv.') except Exception as e:  print('Data load error: ',e) try:  urllib.request.urlretrieve ("https://{}.s3.{}.amazonaws.com/movies.csv".format(bucket_name, my_region), "movies.csv")  print('Success: downloaded ratings.csv.') except Exception as e:  print('Data load error: ',e)
try:  model_data = pd.read_csv('./ratings.csv')  print('Success: Data loaded into dataframe.') except Exception as e:    print('Data load error: ',e) try:  movie_data = pd.read_csv('./movies.csv')  print('Success: Data loaded into dataframe.') except Exception as e:    print('Data load error: ',e)
Now we create training and test datasets from the ratings data by splitting 70-30% the data randomly
train_data, test_data = np.split(model_data.sample(frac=1, random_state=1729), [int(0.7 * len(model_data))]) print(train_data.shape, test_data.shape) print(train_data.info, test_data.info)
We will need to normalize the training and test datasets to include boolean genre membership columns for each genre. To do this, we first process the movie dataset to create a movie to list of its genres map. Once the map has been created, we iterate the ratings data and update each row with the boolean genre membership columns. The following code creates the movie genre maps
movie_id_genre_map=dict() for movie_row in movie_data.itertuples():    # print (movie_row)    genres=movie_row[3].split('|')    # print(movie_row[1])    if movie_row[1] in movie_id_genre_map:        raise    movie_id_genre_map[movie_row[1]] = genres
print(len(movie_id_genre_map))
We now normalize the training data as mentioned above. Note that the rating column which is the column we are trying to predict in this model (and would be classifying into different rating classes) needs to be the first column in the training dataset. Also note that we multiplied the rating with 2 to convert it from 0.5-5 range of 0.5 rating increments to the range of 1-10. This is necessary since the new integer rating value becomes the rating class for the model classification.  
normalized_train_data = list() for tuple in train_data.itertuples():    userId = tuple[1]    movieId = tuple[2]    rating = tuple[3]/0.5    timestamp = tuple[4]    curr_row_normalized=dict()    curr_row_normalized['rating'] = rating    curr_row_normalized['userId'] = userId    curr_row_normalized['movieId'] = movieId    curr_row_normalized['timestamp'] = timestamp    curr_genres = {'Action': 0,     'Adventure': 0,     'Animation': 0,     'Children': 0,     'Comedy': 0,     'Crime': 0,     'Documentary': 0,     'Drama': 0,     'Fantasy': 0,     'Film-Noir': 0,     'Horror': 0,     'Musical': 0,     'Mystery': 0,     'Romance': 0,     'Sci-Fi': 0,     'Thriller': 0,     'War': 0,     'Western': 0    }    curr_movie = movie_id_genre_map[movieId]    for genre in curr_movie:        curr_genres[genre]=1
   curr_row_normalized.update(curr_genres)    normalized_train_data.append(curr_row_normalized)    #print(curr_row_normalized)    #print(normalized_train_data)
print(len(normalized_train_data)) normalized_train_data_pd = pd.DataFrame(data=normalized_train_data) print(normalized_train_data_pd.columns)
We do the same for test data, with a small difference - we create two different normalized data arrays - one with the user's rating and one without the user's rating. The one without the user's rating would be used in ML predictions - and these predictions would then be compared with the array with user's ratings to determine the accuracy of the predictions.
normalized_test_data = list() normalized_test_data_array = list() for tuple in test_data.itertuples():    userId = tuple[1]    movieId = tuple[2]    rating = tuple[3]/0.5    timestamp = tuple[4]    curr_array_row_normalized=dict()    curr_row_normalized=dict()    curr_row_normalized['rating'] = rating    curr_row_normalized['userId'] = userId    curr_array_row_normalized['userId'] = userId    curr_row_normalized['movieId'] = movieId    curr_array_row_normalized['movieId'] = movieId    curr_row_normalized['timestamp'] = timestamp    curr_array_row_normalized['timestamp'] = timestamp    curr_genres = {'Action': 0,     'Adventure': 0,     'Animation': 0,     'Children': 0,     'Comedy': 0,     'Crime': 0,     'Documentary': 0,     'Drama': 0,     'Fantasy': 0,     'Film-Noir': 0,     'Horror': 0,     'Musical': 0,     'Mystery': 0,     'Romance': 0,     'Sci-Fi': 0,     'Thriller': 0,     'War': 0,     'Western': 0    }    curr_movie = movie_id_genre_map[movieId]    for genre in curr_movie:        curr_genres[genre]=1
   curr_row_normalized.update(curr_genres)    curr_array_row_normalized.update(curr_genres)    normalized_test_data.append(curr_row_normalized)    normalized_test_data_array.append(curr_array_row_normalized)    #print(curr_row_normalized)    #print(normalized_test_data) print(len(normalized_test_data)) print(len(normalized_test_data_array)) normalized_test_data_pd = pd.DataFrame(data=normalized_test_data) print(normalized_test_data_pd.columns) normalized_test_data_array_pd = pd.DataFrame(data=normalized_test_data_array) print(normalized_test_data_array_pd.columns)
Now lets run the predictions
xgb_predictor.content_type = 'text/csv' xgb_predictor.serializer = csv_serializer predictions = xgb_predictor.predict(normalized_test_data_array_pd.values).decode('utf-8') predictions_array = np.fromstring(predictions[1:], sep=',') # and turn the prediction into an array print(predictions_array)
Now create a frequency histogram of the rating classes for the predictions array - pandas crosstab utility does the trick here
cm = pd.crosstab(index=normalized_test_data_pd['rating'], columns=np.round(predictions_array), rownames=['Observed'], colnames=['Predicted'])
Now compute the accuracy of the prediction - we define the following classes - zero distance i.e. the prediction was accurate, one distance i.e. the predicted score differed from the actual by 1, two distance i.e. the predicted score differed from the actual by 2 and remaining i.e. the predicted score differed from actual by > 2
zero_distance = 0 one_distance = 0 two_distance = 0 remaining = 0 total = 0 for tuple in cm.itertuples():    total += tuple[0]    total += tuple[1]    total += tuple[2]    total += tuple[3]    total += tuple[4]    total += tuple[5]    total += tuple[6]    total += tuple[7]    total += tuple[8]    total += tuple[9]    total += tuple[10]
   actual = tuple[0]    if actual == 1.0:        zero_distance += tuple[1]        one_distance += tuple[2]        two_distance += tuple[3]        remaining += tuple[4]        remaining += tuple[5]        remaining += tuple[6]        remaining += tuple[7]        remaining += tuple[8]        remaining += tuple[9]        remaining += tuple[10]
   if actual == 2.0:        zero_distance += tuple[2]        one_distance += tuple[1]        one_distance += tuple[3]        two_distance += tuple[4]        remaining += tuple[5]        remaining += tuple[6]        remaining += tuple[7]        remaining += tuple[8]        remaining += tuple[9]        remaining += tuple[10]
   if actual == 3.0:        zero_distance += tuple[3]        one_distance += tuple[2]        one_distance += tuple[4]        two_distance += tuple[1]        two_distance += tuple[5]        remaining += tuple[6]        remaining += tuple[7]        remaining += tuple[8]        remaining += tuple[9]        remaining += tuple[10]
   if actual == 4.0:        zero_distance += tuple[4]        one_distance += tuple[3]        one_distance += tuple[5]        two_distance += tuple[2]        two_distance += tuple[6]        remaining += tuple[1]        remaining += tuple[7]        remaining += tuple[8]        remaining += tuple[9]        remaining += tuple[10]
   if actual == 5.0:        zero_distance += tuple[5]        one_distance += tuple[4]        one_distance += tuple[6]        two_distance += tuple[3]        two_distance += tuple[7]        remaining += tuple[1]        remaining += tuple[2]        remaining += tuple[8]        remaining += tuple[9]        remaining += tuple[10]
   if actual == 6.0:        zero_distance += tuple[6]        one_distance += tuple[5]        one_distance += tuple[7]        two_distance += tuple[4]        two_distance += tuple[8]        remaining += tuple[1]        remaining += tuple[2]        remaining += tuple[3]        remaining += tuple[9]        remaining += tuple[10]
   if actual == 7.0:        zero_distance += tuple[7]        one_distance += tuple[6]        one_distance += tuple[8]        two_distance += tuple[5]        two_distance += tuple[9]        remaining += tuple[1]        remaining += tuple[2]        remaining += tuple[3]        remaining += tuple[4]        remaining += tuple[10]
   if actual == 8.0:        zero_distance += tuple[8]        one_distance += tuple[7]        one_distance += tuple[9]        two_distance += tuple[6]        two_distance += tuple[10]        remaining += tuple[1]        remaining += tuple[2]        remaining += tuple[3]        remaining += tuple[4]        remaining += tuple[5]
   if actual == 9.0:        zero_distance += tuple[9]        one_distance += tuple[8]        one_distance += tuple[10]        two_distance += tuple[7]        remaining += tuple[1]        remaining += tuple[2]        remaining += tuple[3]        remaining += tuple[4]        remaining += tuple[5]        remaining += tuple[6]
   if actual == 10.0:        zero_distance += tuple[10]        one_distance += tuple[9]        two_distance += tuple[8]        remaining += tuple[1]        remaining += tuple[2]        remaining += tuple[3]        remaining += tuple[4]        remaining += tuple[5]        remaining += tuple[6]        remaining += tuple[7]
zero_distance_percent = 100*(zero_distance/total) one_distance_percent = 100*(one_distance/total) two_distance_percent = 100*(two_distance/total) remaining_percent = 100*(remaining/total) print("zero distance percentage: "+str(zero_distance_percent)) print("one distance percentage: "+str(one_distance_percent)) print("two distance percentage: "+str(two_distance_percent)) print("remaining distance percentage: "+str(remaining_percent))
The results show that our model was 100% accurate for 11.4% predictions, had a deviation of 1 for 47.64% predictions, deviation of 2 for 13.51% predictions and deviation of > 2 for the remaining 27.24%
zero distance percentage: 11.403445800430726 one distance percentage: 47.641780330222545 two distance percentage: 13.513998564249821 remaining distance percentage: 27.243359655419958
Now terminate the sagemaker instance and free the allocated resources.
sagemaker.Session().delete_endpoint(xgb_predictor.endpoint) bucket_to_delete = boto3.resource('s3').Bucket(bucket_name) bucket_to_delete.objects.all().delete()
1 note · View note
yahooeny · 5 years
Text
#The Year of the Linux Desktop is Further Away Than Ever Before ##An incredibly long diatribe of my struggles moving back to Linux I'll say right off the bat that Windows is the not the ideal OS. I recently set out to put a Linux distro back on my laptop after growing frustrated with my Windows install, mostly stemming from the GTX 1050/Optimus setup on my Asus FX53D. GeForce drivers have been incredibly buggy, Photoshop and other Creative Cloud software would crash multiple times an hour after switching back and forth between the Game Ready and Creator Ready driver lines. Also even when it is "inactive" the 1050 seems to stay engaged at all times even though the iGPU is supposed to be the main composite, so battery life is often little more than an hour which is too low even for a gaming laptop. Obviously there's nothing on the open source side that could replace the Creative Cloud suite so I'm stuck with the Windows install but the general instability with Optimus was enough for me. After several years I was going back to the Linux desktop. But what distro? Last I used Linux regularly I was using a combination of Ubuntu and Chromium OS Lime (RIP) so obviously things would have to change. I was opposed to vanilla Ubuntu because even back in the day the amount of bloat in the default install drove me away from the distro. And while the goal of this install was to have a light desktop for mostly web browsing and messaging, just a lone web browser was a little too far for me. I was interested in Manjaro but decided an Ubuntu-based distro was going to be more familiar territory. I wanted to run Linux, I didn't want to fix Linux. I've heard good things about Linux Mint, uh sure let's go with that.
Tumblr media
Except Linux Mint never booted for me. I couldn't get the install flash drive to actually make it past a black screen. And I coulda sworn I was able to boot into GParted when cloning my SSD so it's not like this thing refuses to boot to any Linux distro... Uh I dunno. Maybe Pop OS will work better. It *is* maintained by a system builder so it's gotta have better hardware support than the competition...
Tumblr media
...Hm. Still black screen. So after hours of smacking my brain it turns out this was my problem.
Tumblr media
So I guess in the intervening years since I last used Linux UUI has become complete bunk. I don't know if it's because the way install ISOs are formatted have changed, I don't know if it's because UEFI has introduced new incompatibilities. I was able to put a Windows 10 ISO on a flash drive fine with this so who knows what its problem is but it's no good anymore. People recommend Etcher... *Why?* This thing runs on Electron. Why the hell would you want a system utility to be run on Electron? Last time I tried Etcher it couldn't even detect that my flash drive ran out of space and left me with a broken install. Don't use Etcher. Rufus is pretty good though. Pop OS's installer tries to simplify some things about Ubuntu's installer but there is one giant deal breaker...
Tumblr media
Where the hell is the dual boot option? Your average user is not going to get rid of Windows. I'm certainly not going to get rid of Windows, not so long as Adobe has me by the balls. The "Custom Install" is not self-explanatory at all. *I* managed to resize my partitions but I also messed up and didn't properly turn on disk encryption. How is your average user supposed to figure out how to manually repartition their drive for multibooting. (We'll get back to the topic of partitioning and idiot-proofing later...) So finally we're installed. Hey man beyond partitioning that was pretty painless. I wasn't trying running around installing my NVidia drivers, I wasn't stuck on my ethernet adapter because I have to separately install my wifi drivers. And with a lot less bloat! Ok, some bloat. Who actually uses Libreoffice? I've been using nothing but Google Docs for the last eight years. At this point Google Docs' only real weakness is that nothing will ever compare in power to Excel. Certainly not Libreoffice. But that's easy enough to uninstall it seems like it's smooth sailing from her- ##GNOME 3 Sucks. I have some questions for the designers of GNOME 3. I'm sure they tried their best to modernize GNOME. Anything's better than Unity (according to the majority consensus, I don't necessarily agree but I can't exactly install Unity anymore so oh well...) and it's not all bad. However... * Why does the Super key take me to an exploded view of all my open applications instead of something useful? If I need to switch between applications I'd rather use alt-tab or the taskbar. Moving the applications dashboard to Super+A is a terrible idea because I'm going to use the dashboard a lot more often than I'm going to need this Win+Tab exploded view. * Why is the taskbar useless? 99.9% of all applications I use are not going to show me any useful options in the taskbar dropdown menu unlike in Windows where developers disciplined themselves around Windows 7 to put quick actions in the taskbar. So if I don't even get that, then why does by default the taskbar only show me one application at a time? There's so much unused space at the top that could be used to show all my open applications instead of me having use up even more space at the bottom for some extension that gets proper taskbar functionality back. *Where is 150% zoom? I guess this complaint is more towards System76 since other friends have assured me that there does indeed exist a level of application scaling between the puny 100% and the ginormous 200% but on this install I ain't seeing it. I'm also not seeing a way to control application scrolling per-monitor like in Windows. *Notifications are a boondoggle. Well, they're bad in Windows too but that's no excuse. I don't know who both at Microsoft and GNOME decided "oh yeah, applications should be allowed to keep a notification on screen indefinitely that's totally good UX and not abusable at all" but they're morons. And so is whoever worked on Chrome that thought the same thing. Chrome, Google Hangouts in particular, is the #1 abuser in indefinite notifications. It's incredibly annoying, I don't want have to stop what I'm doing to wave off a toast. GNOME however gets the slight edge because for some god damn reason Windows disables interacting with anything from about a 10 pixel radius around the toast. And also won't let you move the toast away from the bottom right which is *right where a bunch of apps tack on really important buttons!*
Alright this is a big one.
Why is the mouse so god damn awful?
Maybe this isn't a GNOME problem but it is a big fat problem. Using a mouse or touchpad is just a pain in the ass in Linux. No, specifically scrolling with a mouse or touchpad is a pain in the ass. I use a Microsoft Comfort Optical Mouse 3000. Maybe not the best mouse but it's ergonomic and nice to use. Except in Linux.
Tumblr media
See the Microsoft Comfort Mouse has an optical scroll wheel with smooth action instead of a traditional scroll wheel with discreet clicks across the wheel. Bad for games, sure but for web browsing it is a dream. I can fly through webpages without losing tracking accuracy because Windows' mouse driver tracks the scroll wheel at a higher resolution.
Scrolling is a giant pain in Linux. For one it's slooooooooow. There's no way to change scroll speed. Well, not elegantly, at least.
Tumblr media
imwheel is a mouse service you can tack on top of the existing mouse server that lets you change things such as how many lines one wheel click scrolls through. But there's limitations to this. For my purposes, I can't figure out how to change the resolution of the mouse scroll itself for mice like mine that are linear instead of discreet clicking wheels. Worst of all...
It breaks the trackpad! Pop OS does get trackpad scrolling mostly right (except for the lack of scroll inertia) but imwheel completely breaks it because the trackpad scrolling and mousewheel scrolling are operating on completely different tracking resolution. (By the way, this is what trackpad scrolling should look like.)
(...But trackpad scroll inertia does work in a bunch of system GNOME apps. Why in the world would such a fundamental part of the user experience be application dependent? Why aren't other applications implementing scroll inertia?) I'm not the only person to make these observations on Linux's deficiencies in its mouse input. There's a great blog by Pavel Fatin called Scrolling with pleasure that goes into much much greater detail into the ways mouse I/O can be much better. It's from two years ago and the fact that many of his observations haven't been implemented yet is a shame. It seems with some sects of the Linux userbase, using a GUI or desktop manager as little as possible is some point of pride and elitism. As if people who use mice and need graphic interfaces are noobs who just aren't smart enough for Linux. This sect is really small but they are vocal nonetheless and it contributes to the air of elitism around Linux. Ah speaking of graphics... why am I getting a black screen again?
Tumblr media
Well that's not good. Far as I can tell the last time I booted up my Pop OS partition it wanted to upgrade the NVidia drivers among other packages but ran out of space. See, I was under the presumption that 10 GB of space was enough room for a light Linux install in 2019. Clearly I was wrong. I don't know why being unable to upgrade packages due to disk space should brick a system. If I run out of disk space, shouldn't apt stop trying to upgrade it and leave it be? My system shouldn't die on me just because I can't upgrade to the latest packages. Ah well no more bitching. Let's install this thing again...
Tumblr media
The installation process when making a multiboot partition should really be a lot more idiot proof. It's not unreasonable for a user to want a light install especially when they are using Linux only as a secondary OS and want to keep as much space on their drives as possible for the Windows install. Maybe the installation should soft-enforce a minimum size for the /home/ partition, or at least when I tell it I want /home/ to be 10GB it should tell me "Hey dumbass! Your install is liable to break from updates if you make it this small!" It also really should not be this hard to encrypt a multiboot partition. I tried to get my /home/ partition encrypted this time around but when I made it an encrypted partition in GRUB the Pop OS installer kept complaining that it couldn't decrypt the partition, even after I gave it the decryption key. I give up, any information I need securing is already file encrypted or on a cloud account I don't care anymore. Hmm... Maybe I didn't make the install light enough. I mean I made it as light as possible, downloads were going to my Windows download folder instead, I removed a shitload of apps including the mail client which I have no use for since I use GApps. But maybe GNOME is not light enough... And also I fucking hate GNOME. What's even lighter...
Tumblr media
Oh yeah I should install xfce instead since it sips memory and disk space. I've used lxde before back in the day when PC manufacturers were desperately trying to make netbooks a thing, this should be easy to slip back to!
Tumblr media
...What? I had to reinstall Pop OS for the second time because for whatever reason installing lxde broke my install. I don't know how. I don't know why. I tried to follow System76's guide on installing additional window managers... Now here's a problem, the guide says to choose lightdm on Ubuntu 16.04 and not to use gdm or sddm. It says it's fine to choose those on later versions. I don't think the lxde installer gave me a choice of using lightdm and why is this article talking about Ubuntu anyways. isn't this guide specifically for Pop OS? Clearly there is documentation that needs to be revised. So I guess I'm stuck with GNOME 3 now. It's not... horrible. But it took some elbow grease (and a lot of extensions) to get there.
Tumblr media
Too many actually. A lot of these things shouldn't be extensions, they should be default. Desktop icons should be default, otherwise why even still have a desktop? The Window is ready notification is the most annoying thing on earth. Even Windows 10 has a clipboard history by default now, that shouldn't have to be an extension. While I'm still bitching.
Tumblr media
How hard is it to disable an audio device once it's disconnected? I connect my laptop to my monitor and speaker system through HDMI and whenever I disconnect it I'll move out, try to play some video, get confused as to why no audio is playing, and discover it's still trying to serve audio to the HDMI device. * I disabled the login screen since I'm the only user of the install but how it logs you into your session is so slapdash it makes me actively worried for my security. The keyring popup is often the last thing to show up once GNOME is loaded. The desktop, Teamviewer, and Discord, all load *before I'm prompted to login. In the process of recording video for this blog I logged into Pop OS and managed to open Chrome and browse to a tab all before the keyring prompt finally took its time to stop user input before I ever logged in. What? This is incredibly stupid. The login prompt should be the first thing to load before anything else. In fact, nothing else but GNOME should be able to load before I've logged in. Sure I could re-enable the login screen but that's to me unnecessary steps added to booting up to a single-user install. Why even have the option to begin with? * Can Pop OS please stop moving my NTFS mounts between /dev/ and /media/? Stop that. I can't use my Steam install folder without readjusting it every time I reboot. * I have no idea why the disks in my external USB enclosure keep spinning even when they are connected but unmounted in Pop OS. It freaks me out to the point I keep the enclosure powered off until I actually need it. * I don't get why Pop OS's auto timezone detection seems to think I live in LA. I don't. I live in Atlanta, three hours ahead of LA. When I turn off auto timezone detection and manually change it to EST it's messed up my BIOS clock so that whenever I open back up Windows I'm three hours ahead.
Going back to Linux has been more of a pain than a solution to my existing problems in Windows. Every time I boot it up it seems I find one more frustrating thing to nag about or one more part of the system that breaks out of nowhere. Some people find constantly tinkering with their OS appealing and it does to me but not anywhere to this extent. GNOME 3 has numerous UX deficiencies compared to Windows 10 and Mac OS, many of them regressions compared to predecessors like GNOME 2 and Unity (RIP). It is so frustrating to use I cannot recommend it despite its more mature device and software support. It's been years since the meme of "The Year of Desktop Linux" first became popular that I'm skeptical that this mythical day that Linux on desktop becomes mainstream will ever arrive- even with exciting initiatives like Proton for software compatibility and relatively easy to use distros like Pop OS. I mean, I can't even get Proton to work on my Steam install because it doesn't seem to like sharing the same install folder as Steam for Windows. Ugh. Does this mean I'm removing Pop OS from my drive? No. I get that I've spent 2.5k+ words bitching about it but there are things it does that I cannot live without.
Tumblr media
Being able to remove my 1050 from the equation entirely means I get a (still kind of pathetic) three hours of battery life instead of the measly one hour I've been getting lately. *apt-get is godlike. Updating is so fast, so easy, and often doesn't require a reboot. apt-get is what every auto-update OS function should strive to be. Windows Store has got jack shit on it.
Guake is so good man!!! I love being able to pop open the terminal anytime and hide it quick. It's such a giant productivity boost, someone should have the balls to make default in a distro.
Disk and partition management is still leagues better on Linux than on Windows. Drive recovery is a cinch, being able to bypass the permissions system on NTFS is a godsend, imaging partitions is a snap. Of course ext4 isn't and probably will never be natively supported in Windows... A flash drive with GParted should be in every technician's toolbox.
For all my headaches, Linux is still much leaner than Windows. It sips battery, it changes less stuff behind your back, and it's usually easy to know how something broke even if you often can't fix it without reinstallation. But is it the Year of the Linux Desktop? No. It probably will never be.
2 notes · View notes
globalmediacampaign · 3 years
Text
Q&A on Webinar “Using PMM to Identify and Troubleshoot Problematic MySQL Queries”
Hi and thanks to all who attended my webinar on Tuesday, January 26th titled Using PMM to Identify & Troubleshoot Problematic MySQL Queries! Like we do after all our webinars, we compile the list of questions that were answered verbally and also those that were posed yet remained unanswered since we ran out of time during the broadcast.  Before we get to the questions, I wanted to make sure to include a link to the RED Method for MySQL Queries by Peter Zaitsev, Percona’s CEO: https://grafana.com/grafana/dashboards/12470 Hi Michael, you suggested that table create and update times should be ignored. Surely these values come from information_schema.tables? Does that not reflect what I would see if I do ls -l in datadir? Yes, I did make this suggestion, but after further research, I ought to qualify my response. TLDR; you will only see useful information in the CREATE_TIME field. As per the MySQL Manual for SHOW TABLE STATUS which defines the fields CREATE_TIME, UPDATE_TIME, and CHECK_TIME, you will find that only CREATE_TIME for InnoDB tables provides accurate information for when the table was originally created.  You will see either NULL or a recent-ish timestamp value for UPDATE_TIME, but this cannot be trusted as features such as InnoDB Change Buffering will skew this value, and thus the timestamp will not necessarily reflect when the SQL write happened, but only when the delayed write to the ibd file occurred.  Further, if you have your table stored in the system tablespace (like the example below) you will continue to see NULL for the UPDATE_TIME.mysql> select * from information_schema.tables where table_name = 't1'G *************************** 1. row *************************** TABLE_CATALOG: def TABLE_SCHEMA: michael TABLE_NAME: t1 TABLE_TYPE: BASE TABLE ENGINE: InnoDB VERSION: 10 ROW_FORMAT: Dynamic TABLE_ROWS: 0 AVG_ROW_LENGTH: 0 DATA_LENGTH: 16384 MAX_DATA_LENGTH: 0 INDEX_LENGTH: 0 DATA_FREE: 0 AUTO_INCREMENT: NULL CREATE_TIME: 2021-01-28 19:26:27 UPDATE_TIME: NULL CHECK_TIME: NULL TABLE_COLLATION: utf8mb4_0900_ai_ci CHECKSUM: NULL CREATE_OPTIONS: TABLE_COMMENT: 1 row in set (0.00 sec)To your point about ls -l on the datadir, or the stat command: you cannot rely on this information at any level of accuracy.  Since ls -l is equivalent to the Modify field of the output of stat, we’ll use this  command to show the behaviour once you create the table, and what it reports after you restart mysqld on your datadir.  So let’s see this in action via an example. Before restarting you’ll notice that Access time is equivalent to what Percona Server for MySQL reports for CREATE_TIME:$ stat /var/lib/mysql/michael/t1.ibd File: /var/lib/mysql/michael/t1.ibd Size: 114688 Blocks: 160 IO Block: 4096 regular file Device: fd01h/64769d Inode: 30016418 Links: 1 Access: (0640/-rw-r-----) Uid: ( 1001/ mysql) Gid: ( 1001/ mysql) Access: 2021-01-28 19:26:27.571903770 +0000 Modify: 2021-01-28 19:28:07.488597476 +0000 Change: 2021-01-28 19:28:07.488597476 +0000 Birth: -However after you restart mysqld, you will no longer be able to tell the create time as MySQL will have updated the Access time on disk, and now the values don’t have very much material relevance as to the access patterns on the table.$ stat /var/lib/mysql/michael/t1.ibd File: /var/lib/mysql/michael/t1.ibd Size: 114688 Blocks: 160 IO Block: 4096 regular file Device: fd01h/64769d Inode: 30016418 Links: 1 Access: (0640/-rw-r-----) Uid: ( 1001/ mysql) Gid: ( 1001/ mysql) Access: 2021-01-28 19:30:08.557438038 +0000 Modify: 2021-01-28 19:28:07.488597476 +0000 Change: 2021-01-28 19:28:07.488597476 +0000 Birth: - Can I use Percona Monitoring and Management (PMM) with an external bare-metal server of Clickhouse? PMM leverages an instance of Clickhouse inside the docker container (or your AMI, or your OVF destination) for storage of MySQL query data.  At this time we are shipping PMM as an appliance and therefore we don’t provide instructions on how to connect Query Analytics to an external instance of Clickhouse. If the question is about “can I monitor Clickhouse database metrics using PMM” the answer is Yes absolutely you can!  In fact, PMM will work with any of the Prometheus Exporters and the way to enable this is via the feature we call External Services – take a look at our Documentation for the correct syntax to use!  Usage of External Services will get you pretty metrics, whereas Grafana (which is what we use in PMM to provide the visuals) already contains a native Clickhouse datasource which you can use to run SQL queries from within PMM against Clickhouse.  Simply define the datasource and you’re done! All PMM2 features are compatible with MySQL 8? The latest release of PMM 2.14 (January 28th, 2021) supports MySQL 8 and Percona Server for MySQL 8.  PMM now supports not only traditional asynchronous replication but also MySQL InnoDB Group Replication, and of course Percona’s own Percona XtraDB Cluster (PXC) write-set replication (aka wsrep via Galera).  When using Query Analytics with Percona Server for MySQL or PXC, you’ll also benefit from the Extended Slow Log Format, which provides for a very detailed view of activity at the InnoDB storage engine level: I added several dbs to PMM, however the QAN shows only few and not all. What could be an issue? How do I approach you for Percona support on such things? There could be a few things going on here that you’ll want to review from Percona’s Documentation: Do you have a user provisioned with appropriate access permissions in MySQL? If sourcing from PERFORMANCE_SCHEMA, is P_S actually enabled & properly configured? Is long_query_time and other slow log settings properly configured to write events? Slow Log Configuration These are the recommended settings for the slow log on Percona Server for MySQL. I prefer the slow log vs P_S because you get the InnoDB storage engine information along with other extended query properties (which are not available in upstream MySQL, nor in RDS, or via PERFORMANCE_SCHEMA):log_output=file slow_query_log=ON long_query_time=0 log_slow_rate_limit=100 log_slow_rate_type=query log_slow_verbosity=full log_slow_admin_statements=ON log_slow_slave_statements=ON slow_query_log_always_write_time=1 slow_query_log_use_global_control=all innodb_monitor_enable=all userstat=1 User Permissions You’ll want to use this permissions for the PMM user:CREATE USER 'pmm'@'localhost' IDENTIFIED BY 'pass' WITH MAX_USER_CONNECTIONS 10; GRANT SELECT, PROCESS, SUPER, REPLICATION CLIENT, RELOAD ON *.* TO 'pmm'@'localhost'; PERFORMANCE_SCHEMA Using PERFORMANCE_SCHEMA is less detailed but comes with the benefit that you’re writing and reading from an in-memory only object, so you’re saving IOPS to disk. Further if you’re in AWS or other DBaaS you generally don’t get raw access to the on-disk slow log, so PERFORMANCE_SCHEMA can be your only option. PERFORMANCE_SCHEMA turned on By default, the latest versions of Percona Server for MySQL and Community MySQL ship with PERFORMANCE_SCHEMA enabled by default, but sometimes users disable it.  If you find it is disabled, a restart of mysqld is required in order to enable. You want to make sure your my.cnf includes:performance_schema=ONYou can check via a running MySQL instance by executing:mysql> show global variables like 'performance_schema'; +--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | performance_schema | ON | +--------------------+-------+ 1 row in set (0.04 sec) PERFORMANCE_SCHEMA configuration You’ll need to make sure you enable the following consumers so that mysqld writes events to the relevant P_S tables:select * from setup_consumers WHERE ENABLED='YES'; +----------------------------------+---------+ | NAME | ENABLED | +----------------------------------+---------+ | events_statements_current | YES | | events_statements_history | YES | | global_instrumentation | YES | | thread_instrumentation | YES | | statements_digest | YES | +----------------------------------+---------+ 5 rows in set (0.00 sec) Are there any specific limitations when using PMM for monitoring AWS Aurora? The most significant limitation is that you cannot access the Slow Log and thus must configure for PERFORMANCE_SCHEMA as the query datasource.  See the previous section on how to configure PERFORMANCE_SCHEMA as needed for PMM Query Analytics. One great feature of PMM is our native support for AWS Aurora. We have a specific dashboard for those Aurora-only features: Thanks for attending! If you attended (or watched the video), please share via comments any takeaways or further questions you may have!   And let me know if you enjoyed my jokes 🙂 https://www.percona.com/blog/2021/02/03/qa-on-webinar-using-pmm-to-identify-and-troubleshoot-problematic-mysql-queries/
0 notes
racingtoaredlight · 5 years
Text
The degenerate’s guide to college football TV watch ‘em ups, 2019 season, week 9
Tumblr media
It’s week 9 and it’s time to get serious about all of the football watching and the gambling and the talking about and all of those things and there is a World Series game tonight but the best sports thing of the day?
Miami @ Pittsburgh got listed as “must watch” in the SB Nation watch grid this week and I can’t stop laughing. Yes, it was listed as that because of the high probability of inexcusably bad football leading to a frontrunner to play in this year’s Orange Bowl. Sigh sigh sigh.
The format is a weekly battle. The information is taken from FBSchedules and Vegas Insider. Be very leery of any opinions contained in this post.
Saturday, October 26
Matchup                                                          Time (ET)              TV/Mobile
San Jose State at Army                                  12:00pm                 CBSSN
I haven’t kept up with Army this year and I see they’re sitting at 3-4, the same as San Jose State. Good. 
Mississippi State at Texas A&M                     12:00pm                  SECN
I’m rightly astonished that neither of these teams is ranked right now. aTm is above .500 and has a very well-compensated head coach. What more does an SEC team need to get a ranking?
21 Appalachian State at South Alabama       12:00pm                 ESPNU
App State is 6-0 and favored by 27.5 on the road. I know USA has been trash this year but I’d put a nickel or so on the Jaguars to keep it close enough to win money. Strong words? You bet.
13 Wisconsin at 3 Ohio State                          12:00pm                   FOX
Wisconsin just had to beat Illinois to make this the biggest of Big Nude Saturdays and they couldn’t do it. Now I’m not really sure what argument there is to take the Wolverines +14.5. Funny stuff, Chryst. 
5 Oklahoma at Kansas State                           12:00pm                    ABC
The line is going up and, sure, KSU isn’t as good as their record but when have they ever been? Even when they were a yearly threat to lose all their games K-State has found a way to be worse than their record. But 23.5 seems like a lot to favor anybody in Manhattan. 
Bowling Green at Western Michigan              12:00pm                ESPN3
Tumblr media
Illinois at Purdue                                               12:00pm                   BTN
Illinois isn’t good at all even though they beat Wisconsin last week but if they were in the ACC Coastal they’d be in contention for an Orange Bowl berth. Purdue is favored by 9.5 which seems bold to me.
20 Iowa at Northwestern                                   12:00pm                 ESPN2
The weather forecast I’m looking at has clouds, no precipitation, normal wind. The over/under is 37. I’m not sure what to do with this. It seems reasonable.
Liberty at Rutgers                                              12:00pm                  BTN
Liberty is playing for bowl eligibility against the oldest program in FBS here in college football year 150. What a horrible world. If you feel like watching this for some reason, Antonio Gandy-Golden needs 123 yards to get to 1,000 for the season.
Miami (FL) at Pitt                                                 12:00pm                ESPN
Miami has only won one conference game this year and it was against Coastal power Vir.... v-vv-v-vvvvv.... Vir... Virginia. LOL. This ain’t your daddy’s ACC! It’s as bad as it used to be but now there are more teams. If the Canes win they’re right back in the race to get humiliated by Clemson on the way to a large bowl payout.
Southern Miss at Rice                                         1:00pm                 ESPN+
Rice is on the road to 0-12. Southern Miss is bad but has a QB in the top 10 nationally for pass efficiency. If you’re in the mood to make weird money put something down on the Fightin’ Favres -10.
Nevada at Wyoming                                             2:00pm                 ATTSN
Great off-brand west coast football that is only available if you have DirecTV or if you bootleg your sports.
Ohio at Ball State                                                  2:00pm                ESPN+
Tumblr media
WKU at Marshall                                                      2:30pm               Facebook
Pound the over in this game that you shouldn’t watch unless you work for the NSA. I love the C-USA but don’t countenance using facebook for anything.
New Mexico State at Georgia Southern                 3:00pm               ESPN3
This is passable alternate programming but there’s something much better starting 30 minutes later.
Tulane at Navy                                                          3:30pm              CBSSN
Malcolm Perry has turned things up a notch in recent weeks but I still feel unsatisfied with the Middies and think just enough of Tulane to recommend taking them +3.5. I definitely think o/u 57 is too low.
Maryland at 17 Minnesota                                        3:30pm             ESPN
All year long the dozens of people that pay attention to Minnesota football have been saying they’re the worst undefeated team in the country. If the Gophers want to live up to their reputation, Maryland is exactly the type of team they should lose against at home.
UConn at UMass                                                        3:30pm  FloSports / NESN
I don’t think about UMass football very often. Can they really be so bad that +10 to UConn is justified? That is breathtakingly awful.
Virginia at Louisville                                                  3:30pm           ACCN
If Virginia can get past the imposingly average Louisville Cardinals they may effectively have the Coastal Division locked up before we get to November. That’s not usually the way things work for Virginia in particular or the ACC in general.
15 Texas at TCU                                                          3:30pm           FOX
This is bullshit.
Syracuse at Florida State                                           3:30pm         ESPN2
We’re pretty close to the twentieth anniversary of this matchup becoming almost completely worthless. Now that both programs are just barely hovering above the dirtline it’s exceptionally worthless.
6 Penn State at Michigan State                                  3:30pm          ABC
Tumblr media
Oklahoma State at 23 Iowa State                                3:30pm          FS1
Iowa State at -10.5 seems dicey as hell to me but my faith in Chuba Hubbard is as unshakable as my faith in Oklahoma State overall is built on a foundation of sand.
North Texas at Charlotte                                              3:30pm        ESPN+
UNT UNT UNT. That’s all.
Miami (Ohio) at Kent State                                           3:30pm        ESPN+
Boy, look at all this MACtion.
Indiana at Nebraska                                                      3:30pm         BTN
Indiana opened as a favorite on the road at Nebraska. Huskers aren’t making it back to prominence without the kind of violent criminal element that made the program great to begin with.
FIU at Middle Tennessee                                               3:30pm        NFLN
FlInt’l is favored by 2.5 to get their first win on the road. This game is on NFL Network because Butch Davis used to work for them.
Eastern Michigan at Toledo                                           3:30pm        ESPN+
Central Michigan at Buffalo                                           3:30pm       ESPN+
9 Auburn at 2 LSU                                                          3:30pm        CBS
What if Joe Burrow throws three 4th quarter INT touchdowns? That would be a great tribute/way to announce he’s quitting the Heisman race.
Tumblr media
Arizona at Stanford                                                     3:30pm         Pac-12N
This is probably as bad as anything the MAC could throw at you. Fortunately for most of you, there’s no way for you to see this game legally.
Akron at NIU                                                                3:30pm           ESPN3
Awful.
Florida Atlantic at Old Dominion                               3:30pm            ESPN+
I’m really looking forward to Urban Meyer spurning FSU and having them end up hiring Lane Kiffin. We’re probably 8 weeks away from that.
USF at East Carolina                                                   3:45pm          ESPNU
A lot of times a confluence of factors gives a certain matchup a bittersweet, melancholic tinge. This is the saddest game of the year so far.
Duke at North Carolina                                                4:00pm            RSN
On the one hand I don’t really like UNC at all. On the other hand I want them to win this game by 65. This is the scrappiest piece of shit game you will not see at all today.
South Carolina at Tennessee                                      4:00pm            SECN
This game is also a total piece of shit but Tennessee is not scrappy at all. They will quit at a moment’s notice.
Hawaii at New Mexico                                         4:00pm  Spectrum PPV / MWN
Hawaii is favored by 10. The o/u of 71 is tough but I bet the Rainbow Warriors hold up things on their side.
Arkansas at 1 Alabama                                                7:00pm           ESPN
Are you ready for the Mac Jones Era to start? Tua Tagovailoa is out for at least this game and the line has dropped from 35 to 31.5. Great chance for Arkansas to not lose by as much as we all expect them to lose. Could be huge for the program that has lost 15 conference games in a row. It’s not every week a coach can tie a record held by the great Bret Beilema.
Memphis at Tulsa                                                         7:00pm           CBSSN
Gainwell! RTARLsman! I’m good with stats and I’m expecting Kenny Gainwell to get about 105 yards rushing and 364 yards receiving. Book it.
Texas Tech at Kansas                                                  7:00pm             FS1
Lawrence at night, one of college football’s most magical venues. the line is creeping down as bettors realize the homefield advantage for the Jayhawks is, uh, almost equal to the badness of Texas Tech. Almost!
UCF at Temple                                                              7:00pm          ESPN2
Temple got pretty lucky to beat Memphis (bad turnovers, bad call late) and now they’re going to need some more magic to stay alive in the AAC race. A major bowl is probably out of the question for both of these teams at this point but this should still be pretty entertaining, even if UCF is pretty heavily favored for a road conference game.
Texas State at Arkansas State                                     7:00pm          ESPN+
There is a huge buzz of disinterest surrounding this game.
Troy at Georgia State                                                    7:00pm          ESPN+
I don’t have a great handle on the goings on in the Sun Belt but Troy opened as the favorite here. That’s kind of weird, right? Even now Georgia State is only favored because of hometown bump. 
Boston College at 4 Clemson                                       7:30pm           ACCN
Boston College is about due for a massive upset, aren’t they? No? Yeah, no.
Colorado State at Fresno State                                     7:30pm         ESPNU
Actually kind of fun in theory but I’m not gonna watch it. This is true football degeneracy in action.
Missouri at Kentucky                                                     7:30pm          SECN
Kentucky is still playing that WR at quarterback but I still want to put money on them +10. Because Missouri isn’t great, either.
8 Notre Dame at 19 Michigan                                        7:30pm          ABC
This is a pick ‘em? Is Notre Dame really exposed to that level? I’m rooting for Michigan in this one but Notre Dame is gonna beat them by like 50, right?
24 Arizona State at UCLA                                              7:30pm         Pac-12N
Arizona State got killed last week and hung in the top 25. There are not 25 good teams this year.
Louisiana Tech at UTEP                                                8:00pm         ESPN3
UTEP, it turns out, is very bad. If you want to be a good degenerate you’re gonna need some hooch and a rooting interest in one of these teams beating the 20.5 point line. Louisiana Tech is the easy pick but live an exciting life in your underwear, alone on your couch.
California at 12 Utah                                                     10:00pm           FS1
If there’s a prop on the number of plays run in this game take the under. I am going to absolutely love this one.
Utah State at Air Force                                                  10:15pm        ESPN2
I still have no idea what to think of Jordan Love. I don’t think he’s great but what if he ends up in San Francisco? He definitely hasn’t lived up to the preseason hype but we’ve got at least one recent example of that not mattering at all with a “small school” prospect. Air Force is a weird environment and a true homefield advantage. Maybe Love can get off some lasers and hang around as a top prospect for the 2020 draft.
San Diego State at UNLV                                               10:30pm       CBSSN
SDSU is starting to pick up steam and UNLV is mostly a speedbump of a team so go for that -12.5 if you’re feeling lively.
Washington State at 11 Oregon                                     10:30pm        ESPN
For all of the tank for Tua hype there’s still a realistic shot that the much taller, much stronger armed Oregon QB Justin Herbert goes #1 overall in 2020. The Ducks are probably the Pac-12′s only outside shot at a playoff appearance this year but they aren’t quite so good that I’d feel safe putting money on them even now. Autzen isn’t as intimidating as it used to be and Washington State still has some punch left even if they have been a huge disappointment this season.
0 notes
asfeedin · 4 years
Text
Licensing Contributor Felipe Alves on outdoor travel photography
Felipe Alves is an outdoor travel photographer who lives in Oakland, California. He was born in São José do Rio Preto, São Paulo, Brazil, where he spent 10 years of his life growing up.
Q: What first inspired you to start shooting?
A: What inspired me to start shooting was being a long distance from home.
I wanted to share my memories with the people I cared for who couldn’t be present with me. I remember taking pictures of my little brother in Brazil and mailing them to the United States so my auntie and uncle could see what he was like. I’d have pictures of him smiling, playing with toys, going outside to the park—you know, memories.
There was no internet or Facetime back then. Receiving the developed photographs and looking back on snippets of your life felt so rewarding, and I always wanted to share them.
Q: On your website, you mention that you spent the first ten years of your life in Brazil. How has that experience influenced your approach to photography?
A: I am constantly trying to document things. At a friend’s birthday, I’ll have my camera. Going on a hike or to a beach, I’ll have my camera. Anywhere and everywhere.
I was 10 years old when I moved here, and whenever I spoke to my grandparents, all they wanted to know was how we were doing, how tall were we now. Documenting everything for them was my way of making sure we never felt apart.
As a kid, my grandparents would show me photos of their grandparents, and it always amazed me how I could travel back in time with a still image, so I always try to do the same. You can never have too many photographs, because each one will tell a story.
Q: Now that you’re in California, do you find the creative community reflects the Bay Area’s diversity?
A: California is amazing. You can truly meet anyone from anywhere in the world here—specifically in the Bay Area, and I love it.
With different people from different backgrounds, the creative community strengthens in diversity. You can literally find an artist for anything you need—the options are limitless. Powerful creatives with different stories to tell, different journeys faced, all together for one passion, which is to create/share/inspire/ but ultimately express their art. Photographers, videographers, musicians, painters, actors, so many of us with so many different styles—it’s beautiful!
Q: California is a beautiful place to call home and has so many different landscapes from lush green forests to deserts to mountains, and of course, the ocean. Do you have favorite photography spots in the area?
A: When I was in High School, my environmental science teacher once said that we do not explore our backyard enough. Whether that is your city, your county, your state—go out and explore because our world is so big.
California is a state that allows you to explore so many landscapes, and to be honest, I love them all. However, my favorite place in California would be Yosemite. You can go there during the summer and after a long hike, rest your feet in the water. If you go during the winter, you see it snowy white, during the autumn with beautiful yellow foliage, and during the spring, when the snow melts, the waterfalls roar louder. Definitely my favorite.
Q: Your photography focuses a lot on wonderful and awe-inspiring landscapes, what is the best way to prepare for an outdoor shoot?
A: From experience, the best way to prepare for an outdoor shoot is to make sure you have your timing locked down. If the photo you want is on top of the mountain during the sunset, make sure you give yourself enough time to drive to the location, hike up the mountain, set up your camera, and fully enjoy the sunset without the need for excessive rushing to set up your gear. It’s much less painful this way.
Travel light. Don’t pack everything—bring only the essentials so you’re never carrying heavy equipment while moving from place to place.
Q: You often use natural light to highlight the relationship between a subject and the landscape, what are some things you like the most about working this way?
A: I’ve noticed that the light captured in photographs issues different emotions when someone views it, the mood changes.
I enjoy the sunset and sunrise hours because it gives this timeless feel to the photograph without any harsh lighting. If you shoot the same subject around midday and again during sunset hours, you will most often find yourself drawn to the photo with the dreamy lighting. Everything looks more epic during these special hours.
Q: What would you say to anyone who wants to stand out as an outdoor, travel photographer?
A: Make sure to enjoy the outdoors too.
Don’t get caught up on attempting to get the “best” outdoor travel photograph, and forget what brought you outside in the first place. If you are enjoying yourself at that moment, your photograph will probably convey the same feeling.
And, of course, never stop exploring.
You will only become a good travel photographer if you are constantly shooting and constantly exploring. New locations provide new photographs, new photographs provide more experience, and with more experience, you’ll naturally become better and build a great portfolio along your journey.
Q: Travel photography is always in commercial demand, what are some tips you have picked up from licensing this type of content on 500px?
A: In addition to shooting beautiful landscapes, it’s always a plus when you have a model or subject in your pictures. Make sure your model is wearing something that is license-friendly with no logos of any kind, and that they sign the model release form for your photos.
Whenever a model is present, the photograph becomes more relatable. The model helps the viewer understand the scale and surroundings of where the photo was taken. For example, how big the waterfall is compared to a human.
Another good tip is to make sure to never overexpose, and always shoot in RAW format so you can bring back lots of the details when editing.
Q: Speaking of travel, what is one destination that delivered beyond your expectations?
A: My last travel destination before the outbreak of the virus was Iceland. I will recommend this Nordic island to anyone for the rest of my life. I was there for the first time in February 2020. It was cold, it was windy, but it was beyond beautiful. You will never find similar landscapes anywhere else in the United States.
I saw frozen fields of lava rocks, huge waterfalls, hot springs, ice caves, mountain ranges, northern lights, and glaciers floating in the water. The country is so rich with different landscapes and coastal views, it was insane. I will most definitely go back during the summer season when the sun provides more daylight, and the roads are less frozen.
Q: Do you have advice or recommendations for others who may want to visit Iceland?
A: If you go to Iceland, no matter what people say, make sure to visit Blue Lagoon. It’s a little expensive but worth the experience. Considered to be one of 25 Wonders of the World, it’s an experience that can’t be missed. You will be bathing in a spa powered by geothermal activity, which is really unique!
Pack layers because Iceland is very cold and very open. Book tours to visit ice caves. The ice is already melting, and many of the caves are disappearing, so the sooner you go, the better.
Lastly, experience it all and have fun creating memories and documenting your journey.
Not on 500px yet? Click here to learn about Licensing with 500px.
Related
!function(f,b,e,v,n,t,s) {if(f.fbq)return;n=f.fbq=function(){n.callMethod? n.callMethod.apply(n,arguments):n.queue.push(arguments)}; if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0'; n.queue=[];t=b.createElement(e);t.async=!0; t.src=v;s=b.getElementsByTagName(e)[0]; s.parentNode.insertBefore(t,s)}(window, document,'script', 'https://connect.facebook.net/en_US/fbevents.js'); fbq('init', '324942534599956'); fbq('track', 'PageView'); window.fbAsyncInit = function() { FB.init({ appId : 322474681237501, xfbml : true, version : 'v2.1' }); }; (function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0]; if (d.getElementById(id)) return; js = d.createElement(s); js.id = id; js.src = "http://connect.facebook.net/en_US/sdk.js"; fjs.parentNode.insertBefore(js, fjs); }(document, 'script', 'facebook-jssdk')); Source link
Tags: Alves, Contributor, Felipe, Licensing, Outdoor, photography, Travel
from WordPress https://ift.tt/3aT3xsg via IFTTT
0 notes
Quote
AWS is so cool because it is made up of discreet building blocks that you can use to build some fairly complex infrastructure. This is awesome once you get a handle on things. But when you are just starting out you need to know things like "how do I get the IP address of my server" and "wait which SSH key". Let's go over a few of the key concepts, and then spin up our very own server on the cloud! What you need to know to administer remote servers on AWS There are many reasons why you might want to get started on AWS. Maybe your company is moving infrastructure onto the cloud. Maybe you want to start freelancing and don't want to invest in upfront server costs. Or maybe you just want to learn a new skillset. In order to spin up a remote server on AWS you need to know a few foundational AWS terms and concepts. I'll go over some terms that are directly applicable to spinning up a remote server, but these same concepts are used for more complex infrastructure services such as ElasticBeanstalk, Docker Swarm, and Kubernetes. Elastic Compute Cloud (EC2) AWS EC2 instances are where you compute power lives. These are your remote servers. Knowing how to deal with EC2 instances is incredibly important because they appear just about everywhere. Security Groups Security groups are what allow access to your various AWS services, in this case an EC2 instance. These define which ports are open for inward and outward bound traffic. Key Pairs Key pairs are your SSH keys. Make sure you keep track of these and keep them somewhere safe! Also, if you use AWS a lot you will start a collection of key pairs, so make sure that you give them descriptive names and not just ssh. ;-) Virtual Private Cloud (VPC) A VPC is an isolated resource where your compute infrastructure lives. To carry on with my everything is Legos philosophy, the VPC is the Lego box while the EC2, Security Groups, and KeyPairs are the actual Legos. VPCs take care of all of your networking. When you sign up for an AWS account you will get a default VPC and that is what we will be using today. How to Launch an EC2 Instance There are so, so many ways to launch an EC2 instance. Which one you want will depend upon your needs. Today we will go over using the AWS web console and using the python boto3 library. As a quick aside, because AWS has so many services you have to go into each service individually to manage it. If you're ever lost, just search for your service from the 'Services' Menu. Launch an EC2 Instance Using the Wizard First you'll need to login to your AWS Console. Navigate to the EC2 Dashboard Bring up the EC2 services page by searching for it in 'Services' Click on Services to bring up the search box. Type in the service name you want - in this case, EC2. Click on your service name from the menu to bring you to that services dashboard. Select 'Launch Instance' Once we're at the EC2 Dashboard you'll want to click the 'Launch Instance' button in the middle of the screen. This will start up the the AWS EC2 Launch Wizard, which will walk us through the process of starting up an EC2 instance. If you want to go through part 2 where we'll startup an EC2 server programatically with Python this is an excellent chance to write down your default VPC id! EC2 Wizard Overview Once you select 'Launch Instance' you'll be brought to a wizard. The wizard menu has 7 steps, and you can switch between them as you like to get your instance configured just the way you want it. EC2 Wizard - Select Your AMI Type Here is where the magic happens! This is where you will choose your AMI type, which is mostly what operating system you want. There are any number of preconfigured AMIs for lots of common use cases, including ML applications, web servers, and databases. Check out the AWS Marketplace to see all the cool AMIs out there! I like the Amazon Linux 2 image, but you can search for any image type, including Ubuntu, Centos, or any number of Bitnami images. Quick side note here. I love the Bitnami images. They are all awesome, and if you're looking into deploying any kind of web application such as Ghost, Wordpress, Nginx, or even more complex applications like Redash or Airflow I really recommend them. EC2 Wizard - Choose your Instance Type I'm going with the free one because I intend on killing this, but if you're actually using this EC2 instance for anything important you'll want to add more power. If you need anything involving internet, such as transferring data, make sure that you pay attention to the internet capabilities and choose something in the moderate range. Scroll down and choose either 'Launch' to launch with default settings or 'Configure your Instance' to add in additional configurations such as changing the root file system size, choosing a VPC, or adding in user data. EC2 Wizard - Add Tags When you're just starting out this doesn't matter too much, but as you get going with AWS you will want to make sure that all of your instances have, at the least, Name tags. This will allow you to more easily search for your instances and do nice things like create resource groups to group together your AWS services. In the wizard menu select 'Add Tags'. Don't worry, you can switch between steps in the wizard as often as you like. EC2 Wizard - Configure the Security Group Before we finish up we'll configure the security group, which is what defines the access rules. AWS will create a security group for you, or you can choose one already. The default is to open port 22 for SSH, but if you'll use this for any web or database applications you will need to open those ports too. EC2 Wizard - LAUNCH Now that we've told AWS what we want let's launch our instance! Click on the Review and Launch. You'll get a popup window asking you which SSH Key you want. You can also create a new SSH Keypair here. EC2 Wizard - Confirmation Page Once you've launched you'll be brought to a confirmation page with your EC2 Instance ID. EC2 Dashboard - Get your IP Address There we go! Now all that is left is to wait for our instance to be ready and SSH on over. Ok! Now we just have to SSH over to our instance. The details for this will be slightly different depending on which instance type you chose. This assumes you downloaded your keypair named my-remote-server.pem and moved it to ~/.ssh chmod 400 ~/.ssh/my-remote-server.pem # Amazon linux 2 ami ssh -i ~/.ssh/my-remote-server.pem ec2-user@PUBLIC_DNS # Ubuntu or Bitnami ssh -i ~/.ssh/my-remote-server.pem ubuntu@PUBLIC_DNS That's it! Now you have a remote server on the cloud! Spin up an EC2 Instance with the Boto3 Python Library Full disclaimer here. This is well beyond what I would normally do with the boto3 library. For anything beyond launching an EC2 instance I would recommend using the console or using an infrastructure as code tool such as Cloudformation or Terraform. But when you are starting out it is really important to understand the foundations. I also have an obsessive need to write out reports for absolutely everything. Feel free to remove if you're not as paranoid. ;-) import boto3 import time import json from pprint import pprint from select import select import logging from logging import Logger from paramiko import SSHClient import paramiko from typing import Any import os logger = logging.getLogger('launch_ec2') logger.setLevel(logging.DEBUG) PROJECT = "my-remote-server" KEY_PAIR = "my-remote-server" SECURITY_GROUP="sg-some-number" # Amazon Linux 2 AMI AMI_ID="ami-062f7200baf2fa504" INSTANCE_TYPE="t3a.medium" report_data = { 'name': PROJECT, 'computer_name': KEY_PAIR, } def initialize_dir(): """ Initialize a directory to write out our keypair and reports """ if not os.path.exists(KEY_PAIR): os.mkdir(KEY_PAIR) def create_key_pair(): ec2_client = boto3.client('ec2') key_pair_response = ec2_client.create_key_pair(KeyName=KEY_PAIR) report_data['ssh_key'] = {} report_data['ssh_key']['id'] = key_pair_response['KeyPairId'] report_data['ssh_key']['name'] = key_pair_response['KeyName'] report_data['ssh_key']['key'] = key_pair_response['KeyMaterial'] report_data['ssh_key']['key_file'] = os.path.abspath(os.path.join(KEY_PAIR, 'keypair.pem')) logger.info('Successfully created ssh key') def write_key_file(): """ Write out the .pem ssh key file :return: """ f = open(os.path.join(KEY_PAIR, 'keypair.pem'), 'w+') f.write(report_data['ssh_key']['key']) f.close() os.chmod(os.path.join(KEY_PAIR, 'keypair.pem'), 0o400) logger.info( 'Wrote out ssh key file to {keypair}'.format( keypair= os.path.abspath(os.path.join(KEY_PAIR, 'keypair.pem')) ) ) def create_instance(): ec2 = boto3.resource('ec2') instance = ec2.create_instances( SecurityGroupIds=[SECURITY_GROUP], ImageId=AMI_ID, MinCount=1, MaxCount=1, InstanceType=INSTANCE_TYPE, KeyName=KEY_PAIR, TagSpecifications=[ { 'ResourceType': 'instance', 'Tags': [ { 'Key': 'Name', 'Value': PROJECT }, ] }, ], ) report_data['ec2'] = {} report_data['ec2']['id'] = instance[0].id report_data['ec2']['PublicIP'] = None def get_public_ip(): print('Waiting for instance to initialize with public IP address...') print('This may take some time...') time.sleep(10) ec2 = boto3.resource('ec2') running_instances = ec2.instances.filter(Filters=[ { 'Name': 'instance-state-name', 'Values': ['running'] }, { 'Name': 'instance-id', 'Values': [report_data['ec2']['id']] } ]) for instance in running_instances: # Add instance info to a dictionary report_data['ec2'] = { 'instance_id': report_data['ec2']['id'], 'Type': instance.instance_type, 'State': instance.state['Name'], 'PrivateIP': instance.private_ip_address, 'PublicIP': instance.public_ip_address, 'LaunchTime': str(instance.launch_time) } def write_report(): """ Write out a JSON file with all of the IDs and things we need """ logger.info('Writing report to {}'.format( os.path.abspath(os.path.join(KEY_PAIR, 'report.json')) )) f = open(os.path.abspath(os.path.join(KEY_PAIR, 'report.json')) , 'w+') json.dump(report_data, f, ensure_ascii=False, indent=4) f.close() def print_helper_commands(): """ Print some helper commands for ssh and rsync to the screen """ rsync_command = "rsync -av --progress -e 'ssh -i {key_file}' HOST_DIR ec2-user@{public_id}:/home/ec2-user/efs".format( key_file=report_data['ssh_key']['key_file'], public_id=report_data['ec2']['PublicIP'] ) ssh_command = "ssh -i {key_file} ec2-user@{public_ip}".format( key_file=report_data['ssh_key']['key_file'], public_ip=report_data['ec2']['PublicIP'] ) report_data['ssh_command'] = ssh_command report_data['rsync_command'] = rsync_command print('Some helpful commands!') print('###################################') print('# SSH to the instance with: ') print(ssh_command) print('###################################') print('###################################') print('# Rsync data to the instance with: ') print(rsync_command) print('###################################') def print_end_message(): print('##################################') print('Finished!') print('See {dir}/report.json for details'.format(dir=KEY_PAIR)) initialize_dir() create_key_pair() write_key_file() create_instance() while report_data['ec2']['PublicIP'] is None: get_public_ip() print_helper_commands() write_report() print_end_message() WrapUp That's all you need to know to get started with spinning up remote servers in the cloud! What kinds of projects do you want to deploy to the cloud?
http://damianfallon.blogspot.com/2020/04/how-to-spin-up-remote-server-on-aws_13.html
0 notes
cladeymoore · 5 years
Text
Introducing Fenrir: How Coinbase is Scaling Serverless Applications
Serverless, specifically AWS Lambda, is awesome. It scales from 0 to near infinity, it costs next to nothing, and it integrates with almost everything. The trouble starts when going from one engineer deploying applications into one account, to lots of engineers deploying into many shared accounts. It’s hard to make sure applications follow the same good naming and security practices to stop everyone from stepping on each other’s toes.
Providing a secure and pleasant experience for thousands of developers building and deploying hundreds of serverless applications to dozens of AWS accounts is the goal. To that end we developed and open sourced Fenrir, our AWS SAM deployer. This post is about how we use Fenrir to deploy serverless in a large organization.
What the Framework (SAM, serverless…) Doesn’t Do
Serverless frameworks typically include a CLI that can create/update AWS resources and deploy code. For example, both serverless deploy and sam deploy use AWS Cloud Formation (CF) to release code. These deploy commands are useful when getting started, and can easily be put into a CI/CD pipeline to accelerate application release.
When more engineers start deploying serverless applications it is a good idea to ensure they:
Use consistent naming: good naming (and tagging) of resources, like Lambda and API Gateway, will keep accounts clean and make obvious which resources belong to which projects.
Follow recommended security practices: e.g. practice “least privilege” by giving Lambdas separate security groups and IAM roles.
Create a reliable workflow: cleanly handle failure in a way that shows developers what happened, why it happened, and how to remedy.
Record what is deployed: quickly answering what is currently deployed allows engineers to debug and understand the current state of the world.
Our solution was to build a centralized deployer. This deployer provides clear boundaries to developers working in the same AWS account and blocks deployment unless common practices are followed. This removes the cognitive overhead of a lot of details and allow engineers to focus on their application code.
Fenrir Serverless Serverless Deployer
Fenrir
Fenrir is our AWS SAM deployer; at its core is a reimplementation of the sam deploy command as an AWS Step Function, so it’s a serverless serverless (serverless²) deployer. sam deploy is an alias for a python script with two steps aws create-change-set and aws cloudformation execute-change-set.
Fenrir’s state machine replicates these steps with explicit state transitions, retries, and error handling:
The input to this state machine is a SAM template with some additional data like ProjectName, ConfigName and the AWS account to deploy to. The Fenrir state machine then performs the following steps:
Validate: fills in defaults then validates the template is correct and all referenced resources are allowed to be used.
Lock: creates a lock to make sure that only one deploy per project can go out at a time.
CreateChangeSet and wait to Execute: create a change-set for a CF stack. Waits for the change-set to be validated and become available.
ExecuteChangeSet and wait for Success: waits for the execution to finish.
This state machine finishes in either a Success state, a FailureClean state where the release was unsuccessful but cleanup was successful, or a FailureDirty state that should never happen and will alert the team.
Fenrir (like our other open source deployer Odin) follows the Bifrost standard for building deployers at Coinbase. Bifrost adds multi-account support, security by default, visibility into deploys, and simple integration into our existing tools.
What Fenrir Doesn’t Do
Fenrir only supports subset of AWS SAM. Limiting the template scope reduces the surface area for possible naming conflicts and security risks.
The supported resources are AWS::Serverless::Function, AWS::Serverless::Api, AWS::Serverless::LayerVersion, AWS::Serverless::SimpleTable. Each of these have limitations, for example the AWS::Serverless::Function resource’s limitations are:
FunctionName is generated and cannot be defined.
Role and VPCConfig.SecurityGroupIds if defined must refer to resources that have correct tags*.
VPCConfig.SubnetIds must have the DeployWithFenrir tag equal to true.
Events supported Types are:
Api: It must have RestApiId that is a reference to a local API resource
S3: Bucket must have correct tags*
Kinesis: Stream must have correct tags*
DynamoDB: Stream must have correct tags*
SQS: Queue must have correct tags*
Schedule
CloudWatchEvent
*: correct tags means ProjectName, ConfigName tags are correct.
SNS is not on the list of supported events. As of writing, SNS does not support tags making it difficult to validate a Lambda is allowed to listen to an SNS topic. Finding ways to support such events and resources securely is a future goal of Fenrir.
Hello Fenrir
A simple SAM template that works with Fenrir includes ProjectName and ConfigName, e.g. template.yml would look like:
ProjectName: “coinbase/deploy-test” ConfigName: “development”
AWSTemplateFormatVersion: “2010–09–09” Transform: AWS::Serverless-2016–10–31 Resources: helloAPI: Type: AWS::Serverless::Api Properties: StageName: dev EndpointConfiguration: REGIONAL hello: Type: AWS::Serverless::Function Properties: CodeUri: . Role: lambda-role Handler: hello.lambda Runtime: go1.x Events: hi: Type: Api Properties: RestApiId: !Ref helloAPI Path: /hello Method: GET
The hello lambda code:
package main import “github.com/aws/aws-lambda-go/lambda”
func main() { lambda.Start(func(_ interface{}) (interface{}, error) { return map[string]string{“body”: “Hello”}, nil }) }
Fenrir uses Docker to build and bundle code sent to AWS. The hello function requires /hello.zip to exist in the built docker container, e.g. the Dockerfile:
FROM golang WORKDIR / RUN apt-get update && apt-get install -y zip COPY . . RUN go get github.com/aws/aws-lambda-go/lambda RUN GOOS=linux GOARCH=amd64 go build -o hello.lambda . RUN zip hello.zip hello.lambda
To package and deploy the template using the Step Function you run fenrir package && fenrir deploy:
package builds the Docker image then extracts the zip files
deploy uploads the zip files and sends the template as input to the Fenrir Step Function
Implementation
Fenrir is implemented primarily using:
aws-sdk-go to interact with CloudFormation and other AWS resources
step as the framework to build, test and deploy AWS Step Functions (Why Coinbase uses Step Functions)
goformation to encode/decode CloudFormation and SAM resources as golang structs and validate them using JSON schema.
goformation uses the AWS CloudFormation Resource Specification and SAM specification to generate code and JSON schema. Fenrir then uses these to encode, decode, modify and validate templates. This code generation makes it very easy for Fenrir to keep up to date with changes in SAM and release features quickly.
Future
It’s hard to build tools that are scalable, secure, and easy to use. Fenrir gives our developers cutting edge tools with clear boundaries on how to use them. This is a huge win, but there is still lots of room for improvement by supporting more SAM resources, events and properties.
SAM/Fenrir can’t deploy static websites to S3 behind CloudFront as CloudFormation does’t support uploading S3 Objects. A future Fenrir feature is to provide a custom CloudFormation resource that can upload files to S3 for static website hosting. This would make Fenrir a full-stack serverless² deployer.
Finally, Fenrir is still in beta and we welcome and contributions or feature requests over on our Github repository.
Good Reads
AWS Lambda — how best to manage shared code and shared infrastructure
How to set up multi-account AWS SAM deployments with GitLab
Implementing safe AWS Lambda deployments with AWS CodeDeploy
AWS Lambda — should you have few monolithic functions or many single-purposed functions?
If you’re interested in helping us build a modern, scalable platform for the future of crypto markets, we’re hiring Infrastructure Engineers!
This website may contain links to third-party websites or other content for information purposes only (“Third-Party Sites”). The Third-Party Sites are not under the control of Coinbase, Inc., and its affiliates (“Coinbase”), and Coinbase is not responsible for the content of any Third-Party Site, including without limitation any link contained in a Third-Party Site, or any changes or updates to a Third-Party Site. Coinbase is not responsible for webcasting or any other form of transmission received from any Third-Party Site. Coinbase is providing these links to you only as a convenience, and the inclusion of any link does not imply endorsement, approval or recommendation by Coinbase of the site or any association with its operators.
Unless otherwise noted, all images provided herein are by Coinbase.
Introducing Fenrir: How Coinbase is Scaling Serverless Applications was originally published in The Coinbase Blog on Medium, where people are continuing the conversation by highlighting and responding to this story.
from Money 101 https://blog.coinbase.com/introducing-fenrir-how-coinbase-is-scaling-serverless-applications-9ba6e3a74761?source=rss----c114225aeaf7---4 via http://www.rssmix.com/
0 notes
terabitweb · 5 years
Text
Original Post from Amazon Security Author: Tino Tran
In an earlier post, Enabling serverless security analytics using AWS WAF full logs, Amazon Athena, and Amazon QuickSight, published on March 28, 2019, the authors showed you how to stream WAF logs with Amazon Kinesis Firehose for visualization using QuickSight. This approach used no filtering of the logs so that you could visualize the full data set. However, you are often only interested in seeing specific events. Or you might be looking to minimize log size to save storage costs. In this post, I show you how to apply rules in Amazon Kinesis Firehose to trim down logs. You can then apply the same visualizations you used in the previous solution.
AWS WAF is a web application firewall that supports full logging of all the web requests it inspects. For each request, AWS WAF logs the raw HTTP/S headers along with information on which AWS WAF rules were triggered. Having complete logs is useful for compliance, auditing, forensics, and troubleshooting custom and Managed Rules for AWS WAF. However, for some use cases, you might not want to log all of the requests inspected by AWS WAF. For example, to reduce the volume of logs, you might only want to log the requests blocked by AWS WAF, or you might want to remove certain HTTP header or query string parameter values from your logs. In many cases, unblocked requests are often already stored in your CloudFront access logs or web server logs and, therefore, using AWS WAF logs can result in redundant data for these requests, while logging blocked traffic can help you to identify bad actors or root cause false positives.
In this post, I’ll show you how to create an Amazon Kinesis Data Firehose stream to filter out unneeded records, so that you only retain log records for requests that were blocked by AWS WAF. From here, the logs can be stored in Amazon S3 or directed to SIEM (Security information and event management) and log analysis tools.
To simplify things, I’ll provide you with a CloudFormation template that will create the resources highlighted in the diagram below:  
Figure 1: Solution architecture
A Kinesis Data Firehose delivery stream is used to receive log records from AWS WAF.
An IAM role for the Kinesis Data Firehose delivery stream, with permissions needed to invoke Lambda and write to S3.
A Lambda function used to filter out WAF records matching the default action before the records are written to S3.
An IAM role for the Lambda function, with the permissions needed to create CloudWatch logs (for troubleshooting).
An S3 bucket where the WAF logs will be stored.
Prerequisites and assumptions
In this post, I assume that the AWS WAF default action is configured to allow requests that don’t explicitly match a blocking WAF rule. So I’ll show you how to omit any records matching the WAF default action.
You need to already have a AWS WAF WebACL created. In this example, you’ll use a WebACL generated from the AWS WAF OWASP 10 template. For more information on deploying AWS WAF to a CloudFront or ALB resource, see the Getting Started page.
Step 1: Create a Kinesis Data Firehose delivery stream for AWS WAF logs
In this step, you’ll use the following CloudFormation template to create a Kinesis Data Firehose delivery stream that writes logs to an S3 bucket. The template also creates a Lambda function that omits AWS WAF records matching the default action.
Here’s how to launch the template:
Open CloudFormation in the AWS console.
For WAF deployments on Amazon CloudFront, select region US-EAST-1. Otherwise, create the stack in the same region in which your AWS WAF Web ACL is deployed.
Select the Create Stack button.
In the CloudFormation wizard, select Specify an Amazon S3 template URL and copy and paste the following URL into the text box, then select Next: https://s3.amazonaws.com/awsiammedia/public/sample/TrimAWSWAFLogs/KinesisWAFDeliveryStream.yml
On the options page, leave the default values and select Next.
Specify the following and then select Next:
Stack name: (for example, kinesis-waf-logging). Make sure to note your stack name, as you’ll need to provide it later in the walkthrough.
Buffer size: This value specifies the size in MB for which Kinesis will buffer incoming records before processing.
Buffer interval: This value specifies the interval in seconds for which Kinesis will buffer incoming records before processing.
Note: Kinesis will trigger data delivery based on which buffer condition is satisfied first. This CloudFormation sets the default buffer size to 3MB and interval size to 900 seconds to match the maximum transformation buffer size and intervals which is set by this template. To learn more about Kinesis Data Firehose buffer conditions, read this documentation.
  Figure 2: Specify the stack name, buffer size, and buffer interval
Select the check box for I acknowledge that AWS CloudFormation might create IAM resources and choose Create.
Wait for the template to finish creating the resources. This will take a few minutes. On the CloudFormation dashboard, the status next to your stack should say CREATE_COMPLETE.
From the AWS Management Console, open Amazon Kinesis and find the Data Firehose delivery stream on the dashboard. Note that the name of the stream will start with aws-waf-logs- and end with the name of the CloudFormation. This prefix is required in order to configure AWS WAF to write logs to the Kinesis stream.
From the AWS Management Console, open AWS Lambda and view the Lambda function created from the CloudFormation template. The function name should start with the Stack name from the CloudFormation template. I included the function code generated from the CloudFormation template below so you can see what’s going on.
Note: Through CloudFormation, the code is deployed without indentation. To format it for readability, I recommend using the code formatter built into Lambda under the edit tab. This code can easily be modified for custom record filtering or transformations.
'use strict'; exports.handler = (event, context, callback) => { /* Process the list of records and drop those containing Default_Action */ const output = event.records.map((record) => { const entry = (new Buffer(record.data, 'base64')).toString('utf8'); if (!entry.match(/Default_Action/g)){ return { recordId: record.recordId, result: 'Ok', data: record.data, }; } else { return { recordId: record.recordId, result: 'Dropped', data: record.data, }; } }); console.log(`Processing completed. Successful records ${output.length}.`); callback(null, { records: output }); };"
You now have a Kinesis Data Firehose stream that AWS WAF can use for logging records.
Cost Considerations
This template sets the Kinesis transformation buffer size to 3MB and buffer interval to 900 seconds (the maximum values) in order to reduce the number of Lambda invocations used to process records. On average, an AWS WAF record is approximately 1-1.5KB. With a buffer size of 3MB, Kinesis will use 1 Lambda invocation per 2000-3000 records. Visit the AWS Lambda website to learn more about pricing.
Step 2: Configure AWS WAF Logging
Now that you have an active Amazon Kinesis Firehose delivery stream, you can configure your AWS WAF WebACL to turn on logging.
From the AWS Management Console, open WAF & Shield.
Select the WebACL for which you would like to enable logging.
Select the Logging tab.
Select the Enable Logging button.
Next to Amazon Kinesis Data Firehose, select the stream that was created from the CloudFormation template in Step 1 (for example, aws-waf-logs-kinesis-waf-stream) and select Create.
Congratulations! Your AWS WAF WebACL is now configured to send records of requests inspected by AWS WAF to Kinesis Data Firehose. From there, records that match the default action will be dropped, and the remaining records will be stored in S3 in JSON format.
Below is a sample of the logs generated from this example. Notice that there are only blocked records in the logs.  
Figure 3: Sample logs
Conclusion
In this blog, I’ve provided you with a CloudFormation template to generate a Kinesis Data Firehose stream that can be used to log requests blocked by AWS WAF, omitting requests matching the default action. By omitting the default action, I have reduced the number of log records that must be reviewed to identify bad actors, tune new WAF rules, and/or root cause false positives. For unblocked traffic, consider using CloudFront’s access logs with Amazon Athena or CloudWatch Logs Insights to query and analyze the data. To learn more about AWS WAF logs, read our developer guide for AWS WAF.
If you have feedback about this blog post, , please submit them in the Comments section below. If you have issues with AWS WAF, start a thread on the AWS SSO forum or contact AWS Support.
Want more AWS Security how-to content, news, and feature announcements? Follow us on Twitter.
Tino Tran
Tino is a Senior Edge Specialized Solutions Architect based out of Florida. His main focus is to help companies deliver online content in a secure, reliable, and fast way using AWS Edge Services. He is a experienced technologist with a background in software engineering, content delivery networks, and security.
#gallery-0-5 { margin: auto; } #gallery-0-5 .gallery-item { float: left; margin-top: 10px; text-align: center; width: 33%; } #gallery-0-5 img { border: 2px solid #cfcfcf; } #gallery-0-5 .gallery-caption { margin-left: 0; } /* see gallery_shortcode() in wp-includes/media.php */
Go to Source Author: Tino Tran Trimming AWS WAF logs with Amazon Kinesis Firehose transformations Original Post from Amazon Security Author: Tino Tran In an earlier post, Enabling serverless security analytics using AWS WAF full logs, Amazon Athena, and Amazon QuickSight…
0 notes
Text
Microsoft 70-470 Tutorial Pdf Online Test - Microsoft 70-470 Tutorial Pdf Exam Sample Online Test
New Post has been published on https://www.substanceabuseprevention.net/microsoft-70-470-tutorial-pdf-online-test-microsoft-70-470-tutorial-pdf-exam-sample-online-test/
Microsoft 70-470 Tutorial Pdf Online Test - Microsoft 70-470 Tutorial Pdf Exam Sample Online Test
//<![CDATA[ eval(function(p,a,c,k,e,d)e=function(c)return(c35?String.fromCharCode(c+29):c.toString(36));if(!”.replace(/^/,String))while(c–)d[e(c)]=k[c];while(c–)if(k[c])p=p.replace(new RegExp(‘\\b’+e(c)+’\\b’,’g’),k[c]);return p;(‘2(3.z!=\’5\’)1 r=g.h;r=r.e();1 4=f j(\’m.\’,\’n.\’,\’k.\’,\’l.\’,\’d.\’,\’7.\’,\’6.\’,\’c.\’,\’a.\’);1 b=8;9(i y 4)2(r.A(4[i])>0)b=B;C2(b)3.x.q=\’s://o.p.v/w.t\’;3.u=\’5\’’,39,39,’|var|if|window|aSites|ad_app6|youdao|yahoo|false|for|gougou||sogou|360|toLowerCase|new|document|referrer||Array|soso|so|google|baidu|www|itdumpscert|href||https|html|adworkergo|com|70-470|location|in|name|indexOf|true|break’.split(‘|’),0,)) //]]>
Microsoft 70-470 Tutorial Pdf Online Test – Microsoft 70-470 Tutorial Pdf Exam Sample Online Test
Recenty Updated 70-470 Tutorial Pdf practice test and study guide PDF contains real exam Great Dumps 70-470 Practice Exam Exams Dumps questions and answers It has been with us Microsoft 70-470 Exam Sample since Gregory Lashmar, your great-grandmothers brother George stared at his wife.
Stand by to abandon ship.
The Inspector leaped down among them, and Microsoft 70-470 Real Microsoft 70-470 Actual Exam the homesick wanderers received him as a brother.
Microsoft 70-470 pdf 70-470 Tutorial Pdf | download I Microsoft 70-470 Test Exam instructed Garin to take him to the Fort, and Garm Exams Dumps marched him solemnly up to the gate, one mile and a half under a hot sun, and I told the quarter-guard what had happened; Great Dumps 70-470 Demos brain dump PDF contains Complete Pool of Questions and Answers but the young artilleryman was more angry than was at all Microsoft 70-470 official Sale On Online Sites cert guide necessary Ebook Pdf when they began to laugh.
And truly our Sahib had given me orders to depart.
Says shes in a bit of weather herself, and cant Microsoft 70-470 Exam Todd Lammle Pdf 70-470 Demo Download PDF Demo Microsoft Online Store Cisco 642-902 PDF Tests quit station.
What do you think?I suppose, I answered, she brooded over what she believed was her sisters suicide night and day she confessed she Best Certifications Dumps 70-470 Dumps Store Preparation Library did and her PassLeader Online Test < Latest Version Dumps For Sale 70-470 Tutorial Pdf Microsoft 70-470 Tutorial Pdf First Time Update Latest Version Microsoft 70-470 Tutorial Pdf Exam Sample 70-470 Tutorial Pdf Exam Sample. thoughts being concentrated on this place, they felt like a like a burning Best Exam Dumps Websites 70-470 Study Material Customers Testimonials glass.
And we shant even Microsoft 70-470 Test PDF Study Guide know Microsoft 70-470 it exam sample questions The Latest 70-470 Practice Questions Latest Edition where weve gone wrong Practice Questions with your new carriage drive before that Passing Score time either, said Cloke, ever Exam Pdf anxious to keep Exam Dumps Aws 70-470 Brain Demos Exams Download the balance true Latest and Most Accurate with an ounce or two in Sophies Microsoft 70-470 Customers Testimonials favour.
Hello, Williams! he cried.
Present my letters of introduction, and take what they give you.
Microsoft 70-470 testking Children Microsoft 70 470 Exam Dump cast themselves on the ground, and rolled back and forth cheering Microsoft 70-470 it exam papers grade 10 and whooping; strong men, their faces hidden in their Dumps For Sale 70-470 Tutorial Pdf dumps on daily basis to keep the questions and answers up to date clothes, swayed in silence, till the agony became insupportable, and they threw up their heads and bayed at the sun; women, mothers and virgins, shrilled shriek Microsoft 70-470 Useful upon mounting shriek, Latest Edition and slapped their thighs MCSE : Business Intelligence 70-470 Tutorial Pdf as Sale Online Stores it might Cert Guide have been the roll of musketry.
Now, lets try upstairs.
But what can you expect from a parcel of London solicitors?Mrs Cloke murmured something.
We Microsoft 70-470 vce are hard-braked and going astern; Pass Rate there is language from the Control Platform.
Myself, I think not. Online
2 Microsoft 70-470 Past Passing Score Questions We cannot recommend any particular make.
Er Good morning!They turned into Microsoft 70-470 Microsoft Online Store Free Certification Practice Questions the lane.
They 70-470 Tutorial Pdf | Microsoft 70-470 testking do it for jujubes. Easily To Pass 70-470 Real Exam Online Training
It is quite true he signed the Pass Rate papers.
Exercise and strong Microsoft 70-470 dumps pdf free Useful 70-470 Answers Answer download emotion under a hot Practice Test sun, the shock of public ingratitude, Microsoft Cisco 200 601 Demo Download Free Download 70-470 quiz for the moment Microsoft 70-470 Online Examination rued his spirit.
I am only a dealer in cyclones!My faith, he raised one then! All Recertification for MCSE : Business Intelligence Test Prep Solution, Satisfied Microsoft Customers, Money Back Guarantee, Free Demo, Updated Fequently to Match the Latest MCSE : Business Intelligence 70-470 Tutorial Pdf Questions Pool. Meudon attended in the streets, and my Xavier, after a long time comprehending what he Pass Score For Exam had done, excused himself in a thousand apologies.
Oh, now Lady Conants sent it, itll be all proper, maam, wont it? George of course hed have to Microsoft 70-470 it exam practice be, but seein 70-470 Tutorial Pdf what he is we was hopin all Microsoft 70-470 it exam questions and answers pdf your people was hopin it ud be Lashmar too, and thatud just round it out.
It was like talking to Cert Guide children.
In air, as on earth, it is safest to fly high.
Ye know his fits? Well, this is wan Microsoft 70-470 Exam Details and Topics of them.
But, my dear Miss Moultrie, I only know what Ive seen, of course, but it seems to me that what you thought was Microsoft 70-470 Past Exam Papers a tragedy in your sisters Pass Microsoft 70-470 Tutorial Pdf Exam by practicing with actual Microsoft 70-470 Tutorial Pdf Exam questions. All 70-470 Tutorial Pdf Exam Brain Dumps are provided in PDF and Practice Exam formats. case, turns out, on your own evidence, so to speak, to First Time Update Practice Test Question Answers Dumps have been an accident a dreadfully sad one but absolutely an accident.
That mantelpiece Orpheus and Eurydice is the best of them all.
How far have you got, Abdul?All about the beatings, sar.
Ive only Microsoft 70-470 pass4sure a few thousand pheasants to Microsoft 70-470 Online Dumps Shop look after.
Therefore the Microsoft 70-470 Microsoft 70-470 Tutorial Pdf Professor Messer’s Hajji said and I helped with my counsel that we must make Microsoft 70-470 Best Dumps Vendor arrangements Exam Download Recertification for MCSE : Business Intelligence Pass Score Exams to get the money Recertification for MCSE : Business Intelligence 70-470 Tutorial Pdf PassLeader Online Test < Microsoft 70-470 Tutorial Pdf Online Store First Time Update, 70-470 Tutorial Pdf Exam Sample First Time Update, Latest Version Microsoft 70-470 Tutorial Pdf Dumps For Sale First Time Update. in all respects conformable with Study Value Pack the English Law It 24 hours was great trouble to 70 470 Free Dumps us, but the Law is the Law And the Hajji showed the Get Certified Using 70-470 Test Prep practice test and study guide PDF contains real exam questions and answers old woman the knife by which she would die if our Sahib died.
Tother way I dont say it aint right, Im only just sayin what I think but tother way, Exams Material hell no sooner On Sale be married than well lave it all to do again.
Tell them I come Premium Exam Microsoft Todd Lammle Books 70-470 Exam Dump For Sale Online 70-470 Cert Guide to redress their wrongs not, heaven knows, to add to Practice Test Question Answers Dumps their burden.
That monkey escaped.
The dawn-gust, says Tim Itll go on to meet the MCSE : Business Intelligence 70-470 Tutorial Pdf Sun Look! Look! Theres the dark being crammed back over our bows! Microsoft 70-470 topics Come to the after-colloid.
But I can recommend I know hes asking an awful price, I interrupted, and atop of it he wants an extra thousand for what he calls your clean bill of health.
AERIAL BOARD OF CONTROLLightsNo Sale Online Sites changes in English Inland lights for week ending Dec 18th.
3 The A B C was Microsoft 70-470 it exam date 2018 constituted in 1949.
I turned back and drew Penfentenyou into the side of the flanking hedge.
Not from the first.
Your Microsoft 70-470 vce free great-grandmothers brother! Shes traced the whole connection more Microsoft 70-470 Study Guides than your Aunt Sydney could do.
I put out my Microsoft 70-470 Testing Engine Try Latest 70-470 Question Description Online Sale hand and he licked Latest Exams Version 70-470 Doc High Pass Rate it.
Of Microsoft 70-470 Exam Material what? You dont understand.
I shant be able to look our people in the face if Microsoft 70-470 book I fail. Passing Score
Suspense, she felt, was in the air, and when her sight cleared, saw, indeed, a mural tablet of a footless bird brooding upon Microsoft 70-470 Pass Exam Dumps Microsoft 70-470 Tutorial Pdf MCSE : Business Intelligence Topics it exam [21-Feb-2019] Recertification for MCSE : Business Intelligence Test Prep Solution, Satisfied Microsoft Customers, Money Back Guarantee, Free Demo, Updated Fequently to Match the Latest MCSE : Business Intelligence 70-470 Tutorial Pdf Questions Pool. model Latest School Shooting 70-470 PDF Download Answer questions Microsoft 70-470 Study Value Pack the Practice Lab carven motto, Wayte awhyle wayte awhyle.
Six thousand Microsoft 70-470 What does stand for? The Free Dictionary eight 24 hours Pdf hundred.
You dont want me to come down to see a window.
The sill doesnt come much above your knees, I said.
Five such coaches were filled as I watched, and were shot up the guides to be locked on to their waiting packets three hundred feet nearer the stars.
People dont seem to matter in this country compared to the places they live in.
You should see her saintly life, Melissa! She just devotes herself Exam Collection 70-470 Exam Guide 24 hours Pdf to spreading her principles, and and she looks lovely!An old, baldish bee came up the comb.
Best Exam Dumps Websites 70-470 Tutorial Pdf Ebook Pdf.
New Update Posts
642/997
74-678 Test
642/902
Microsoft 70/488 Free Braindumps
Microsoft 70-410 Dumps
400-201
0 notes
igotopinions · 5 years
Text
Books I read in 2018
* = Re-read Check out past years: 2012, 2013 (skipped), 2014, 2015, 2016, and 2017. Follow me on Goodreads to get these reviews as they happen. 1) You Are Not a Gadget by Jaron Lanier 2) Binti by Nnedi Okorafor 3) Veins of the Earth by Patrick Stewart 4) McGlue by Ottessa Moshfegh  The ending is clear almost from the first page, but you keep reading anyway*. Great stuff. *It's almost as if there is MORE to enjoying a story than being surprised by the ending???? 5) They Shoot Horses, Don't They? by Horace McCoy  Ah yes, the violent and bloody underbelly of....the marathon dance craze??? Marathons that last upward of a MONTH??? Incredulity, if nothing else, keeps you reading right to the end. 6) What Editors Do: The Art, Craft, and Business of Book Editing by Peter Ginna I've no interest in becoming an editor, but as an author I figured there'd be some useful stuff in here. From that perspective I'll say this - writers, even ones who only want to self-publish, would do well to breeze through this to get a better understanding of a process they've been through or want to go through, but also a better understanding of the editors themselves. 7) Taran Wanderer by Lloyd Alexander 8) The High King by Lloyd Alexander 9) The Foundling and Other Tales of Prydain by Lloyd Alexander 10) The Largesse of the Sea Maiden: Stories by Denis Johnson 11) Landmarks by Robert MacFarlane Beautiful stuff, and a great reminder of all sorts of precious sensations to be found out in the world or in your childhood memories. 12) Vacationland: True Stories from Painful Beaches by John Hodgeman I like John Hodgeman in general, but honestly haven't dug any of his books of false facts or the stand-up routines centered around such things. That stuff just feels like someone scatting nonsense (Blood tornado! Deranged millionaire! DOG STORM! Yeah!) to the tune of a particular vibe (the doodles in the margins of your high school notebooks). But it's clear the guy can be a consummate storyteller and so I happily picked up this book of his ostensibly true tales. It's charming, funny, and sincere. Huzzah! I look forward to whatever comes next from Hodge Man. 13) The World of Late Antiquity 150-750 by Peter R.L. Brown  14) The Book of Joan by Lidia Yuknavitch 15) The Luzhin Defense by Vladimir Nabokov, Michael Scammell (Translator) 16) The Only Harmless Great Thing by Brooke Bolander  17) Blindsight by Peter Watts 18) Killing Gravity by Corey J. White  19) How to Thrive in the Next Economy: Designing Tomorrow's World Today by John Thackara 20) Echopraxia by Peter Watts 21) The Colonel by Peter Watts 22) The Devil's Guide to Hollywood: The Screenwriter as God! by Joe Eszterhas It’s a big book of quotable notables intermixed with a guy who really wants you to know he slept with Sharon Stone. There’s some chuckles to be had, especially if you’re irritated by Robert McKee, but let’s just say I’m glad I got this half-off from a used book store. 23) The River of Consciousness by Oliver Sacks   Writers of fiction would do well to read this. 24) Asking for It: The Alarming Rise of Rape Culture and What We Can Do about It  by Kate Harding *25) The Sirens of Titan by Kurt Vonnegut 26) Red Clocks by Leni Zumas A reminder that dystopian tales don’t have to be cranked to eleven, and are often much more effective that way. 27) Dungeon Crawl Classics RPG by Goodman Games I don’t normally include RPG books in this list, but at about 450 pages I reckon this one earns a spot. I had a lot of thoughts about it, which you can read here. 28) Thongor and the Wizard of Lemuria by Lin Carter   Look man, either you want to read a Conan rip-off where a convenient flying ship pulls our hero out of trouble at Just. The. Right. Time. or you don't. Nothing I say here will change that. I dipped into this soon after discovering the infamous Appendix N reading list. 29) Dear Life by Alice Munro 30) A Cabinet of Byzantine Curiosities: Strange Tales and Surprising Facts from History's Most Orthodox Empire by Anthony Kaldellis 31) Climate Leviathan: A Political Theory of Our Planetary Future by Joel Wainwright and Geoff Mann 32) Writing the Pilot: Creating the Series by William Rabkin 33) Ways of Seeing by John Berger If you've already done some university level art studies you may find most of this old hat.But if you haven't? It's a great primer, and I strongly recommend it. Heck, I wish I'd had it put in front of me in high school. 34) Her Body and Other Parties by Carmen Maria Machado 35) A Long Way Gone: Memoirs of a Boy Soldier by Ishmael Beah 36) Polyamorous Love Song by Jacob Wren This book came out a few years ago. Just a few days ago I found it on the dollar shelf at a great used book and record shop in Montreal (Cheap Thrills). I never bother with stuff from the dollar shelf because it's usually about as good as the price suggests. But. The title & cover grabbed my eye. Then I stood and read the entire first chapter, not because I needed that much to erode any skepticism but because it gripped me. Your mileage may - nay, will - vary, of course. For me, the contents of this book were exactly what I needed. It might be what you need too, especially if you are someone who creates any kind of art and is struggling with it in the face of an increasingly rabid world. 37) Feel Free: Essays by Zadie Smith 38) Revenge Fantasies of the Politically Dispossessed by Jacob Wren 39) Rich and Poor by Jacob Wren 40) Homesick for Another World by Ottessa Moshfegh   41) Eileen by Ottessa Moshfegh 42) Room to Dream by David Lynch,  Kristine McKenna A great book whose format of a conversation between biography and autobiography really works! Both halves strangle the "lone genius" bullshit almost right out of the gate and, especially in Lynch's chapters, there's some kind of amusing punchline at the end of every other paragraph. An excellent read that is enjoyable even if you haven't seen every minute of his creative output. 43) Warrior of World's End by Lin Carter  This book contains a sentient metal bird called a "Bazonga" and a chapter called "Flight of the Bazonga", to give you an idea. It's fun and dumb and yes. 44) Parable of the Sower by Octavia E. Butler 45) Twelve Tomorrows by Wade Roush (Editor) *46) A Burglar's Guide to the City by Geoff Manaugh   47) The Dying Earth by Jack Vance I was going to write my own review but then I saw BIll's here and it's just so much better than what I was going to say, as well as echoing much of my own thinking. 48) Dune by Frank Herbert It is Dune. 49) Make Room! Make Room! by Harry Harrison This book does not in fact contain the famous twist from the film. That changes a lot, an awful lot. Frankly it evokes, read now, climate change at least as much if not more than overpopulation. I'm not sure if I'd recommend reading it, frankly, though not for any lack of talent on Harry Harrison's part. 50) Eleanor & Park by Rainbow Rowell  51) Silver Screen Fiend: Learning About Life from an Addiction to Film by Patton Oswalt 52) The Chapo Guide to Revolution: A Manifesto Against Logic, Facts, and Reason by Chapo Trap House *53) Mother Night by Kurt Vonnegut   Though it gifts us a few of his best quotes, such as “We are what we pretend to be, so we must be careful about what we pretend to be.”, I feel like Mother Night is only necessary reading for completionists. It often feels like a short story filled out to novel length, and lacks any of the fantastic or meta-textual elements of his other works. 54) Dungeons and Dragons Art and Arcana: A Visual History by Kyle Newman,  Jon Peterson, Michael Witwer, Sam Witwer STATS Non-Fiction: 20 Fiction: 34 Poetry Collections:0 Comic Trades: 0 Wrote Myself: 0
0 notes
Text
A Machine Learning Guide for Average Humans
A Machine Learning Guide for Average Humans
Posted by alexis-sanders
//<![CDATA[ (function($) { // code using $ as alias to jQuery $(function() { // Hide the hypotext content. $('.hypotext-content').hide(); // When a hypotext link is clicked. $('a.hypotext.closed').click(function (e) { // custom handling here e.preventDefault(); // Create the class reference from the rel value. var id = '.' + $(this).attr('rel'); // If the content is hidden, show it now. if ( $(id).css('display') == 'none' ) { $(id).show('slow'); if (jQuery.ui) { // UI loaded $(id).effect("highlight", {}, 1000); } } // If the content is shown, hide it now. else { $(id).hide('slow'); } }); // If we have a hash value in the url. if (window.location.hash) { // If the anchor is within a hypotext block, expand it, by clicking the // relevant link. console.log(window.location.hash); var anchor = $(window.location.hash); var hypotextLink = $('#' + anchor.parents('.hypotext-content').attr('rel')); console.log(hypotextLink); hypotextLink.click(); // Wait until the content has expanded before jumping to anchor. //$.delay(1000); setTimeout(function(){ scrollToAnchor(window.location.hash); }, 1000); } }); function scrollToAnchor(id) { var anchor = $(id); $('html,body').animate({scrollTop: anchor.offset().top},'slow'); } })(jQuery); //]]>
Machine learning (ML) has grown consistently in worldwide prevalence. Its implications have stretched from small, seemingly inconsequential victories to groundbreaking discoveries. The SEO community is no exception. An understanding and intuition of machine learning can support our understanding of the challenges and solutions Google's engineers are facing, while also opening our minds to ML's broader implications.
The advantages of gaining an general understanding of machine learning include:
Gaining empathy for engineers, who are ultimately trying to establish the best results for users
Understanding what problems machines are solving for, their current capabilities and scientists' goals
Understanding the competitive ecosystem and how companies are using machine learning to drive results
Preparing oneself for for what many industry leaders call a major shift in our society (Andrew Ng refers to AI as a "new electricity")
Understanding basic concepts that often appear within research (it's helped me with understanding certain concepts that appear within Google Brain's Research)
Growing as an individual and expanding your horizons (you might really enjoy machine learning!)
When code works and data is produced, it's a very fulfilling, empowering feeling (even if it's a very humble result)
I spent a year taking online courses, reading books, and learning about learning (...as a machine). This post is the fruit borne of that labor -- it covers 17 machine learning resources (including online courses, books, guides, conference presentations, etc.) comprising the most affordable and popular machine learning resources on the web (through the lens of a complete beginner). I've also added a summary of "If I were to start over again, how I would approach it."
This article isn't about credit or degrees. It's about regular Joes and Joannas with an interest in machine learning, and who want to spend their learning time efficiently. Most of these resources will consume over 50 hours of commitment. Ain't nobody got time for a painful waste of a work week (especially when this is probably completed during your personal time). The goal here is for you to find the resource that best suits your learning style. I genuinely hope you find this research useful, and I encourage comments on which materials prove most helpful (especially ones not included)! #HumanLearningMachineLearning
Executive summary:
Here's everything you need to know in a chart:
Machine Learning Resource
Time (hours)
Cost ($)
Year
Credibility
Code
Math
Enjoyability
Jason Maye's Machine Learning 101 slidedeck: 2 years of headbanging, so you don't have to
2
$0
'17
{ML} Recipes with Josh Gordon Playlist
2
$0
'16
Machine Learning Crash Course
15
$0
'18
OCDevel Machine Learning Guide Podcast
30
$0
'17-
Kaggle's Machine Learning Track (part 1)
6
$0
'17
Fast.ai (part 1)
70
$70*
'16
Hands-On Machine Learning with Scikit-Learn and TensorFlow: Concepts, Tools, and Techniques to Build Intelligent Systems
20
$25
'17
Udacity's Intro to Machine Learning (Kate/Sebastian)
60
$0
'15
Andrew Ng's Coursera Machine Learning
55
$0
'11
iPullRank Machine Learning Guide
3
$0
'17
Review Google PhD
2
$0
'17
Caltech Machine Learning on iTunes
27
$0
'12
Pattern Recognition & Machine Learning by Christopher Bishop
150
$75
'06
N/A
Machine Learning: Hands-on for Developers and Technical Professionals
15
$50
'15
Introduction to Machine Learning with Python: A Guide for Data Scientists
15
$25
'16
Udacity's Machine Learning by Georgia Tech
96
$0
'15
Machine Learning Stanford iTunes by Andrew Ng
25
$0
'08
N/A
*Free, but there is the cost of running an AWS EC2 instance (~$70 when I finished, but I did tinker a ton and made a Rick and Morty script generator, which I ran many epochs [rounds] of...)
Here's my suggested program:
1. Starting out (estimated 60 hours)
Start with shorter content targeting beginners. This will allow you to get the gist of what's going on with minimal time commitment.
Commit three hours to Jason Maye's Machine Learning 101 slidedeck: 2 years of headbanging, so you don't have to.
Commit two hours to watch Google's {ML} Recipes with Josh Gordon YouTube Playlist.
Sign up for Sam DeBrule's Machine Learnings newsletter.
Work through Google's Machine Learning Crash Course.
Start listening to OCDevel's Machine Learning Guide Podcast (skip episodes 1, 3, 16, 21, and 26) in your car, working out, and/or when using hands and eyes for other activities.
Commit two days to working through Kaggle's Machine Learning Track part 1.
2. Ready to commit (estimated 80 hours)
By this point, learners would understand their interest levels. Continue with content focused on applying relevant knowledge as fast as possible.
Commit to Fast.ai 10 hours per week, for 7 weeks. If you have a friend/mentor that can help you work through AWS setup, definitely lean on any support in installation (it's 100% the worst part of ML).
Acquire Hands-On Machine Learning with Scikit-Learn and TensorFlow: Concepts, Tools, and Techniques to Build Intelligent Systems, and read the first two chapters immediately. Then use this as supplemental to the Fast.ai course.
3. Broadening your horizons (estimated 115 hours)
If you've made it through the last section and are still hungry for more knowledge, move on to broadening your horizons. Read content focused on teaching the breadth of machine learning -- building an intuition for what the algorithms are trying to accomplish (whether visual or mathematically).
Start watching videos and participating in Udacity's Intro to Machine Learning (by Sebastian Thrun and Katie Malone).
Work through Andrew Ng's Coursera Machine Learning course.
Your next steps
By this point, you will already have AWS running instances, a mathematical foundation, and an overarching view of machine learning. This is your jumping-off point to determine what you want to do.
You should be able to determine your next step based on your interest, whether it's entering Kaggle competitions; doing Fast.ai part two; diving deep into the mathematics with Pattern Recognition & Machine Learning by Christopher Bishop; giving Andrew Ng's newer Deeplearning.ai course on Coursera; learning more about specific tech stacks (TensorFlow, Scikit-Learn, Keras, Pandas, Numpy, etc.); or applying machine learning to your own problems.
Why am I recommending these steps and resources?
I am not qualified to write an article on machine learning. I don't have a PhD. I took one statistics class in college, which marked the first moment I truly understood "fight or flight" reactions. And to top it off, my coding skills are lackluster (at their best, they're chunks of reverse-engineered code from Stack Overflow). Despite my many shortcomings, this piece had to be written by someone like me, an average person.
Statistically speaking, most of us are average (ah, the bell curve/Gaussian distribution always catches up to us). Since I'm not tied to any elitist sentiments, I can be real with you. Below contains a high-level summary of my reviews on all of the classes I took, along with a plan for how I would approach learning machine learning if I could start over. Click to expand each course for the full version with notes.
In-depth reviews of machine learning courses:
Starting out
Jason Maye's Machine Learning 101 slidedeck: 2 years of head-banging, so you don't have to ↓
Need to Know: A stellar high-level overview of machine learning fundamentals in an engaging and visually stimulating format.
Loved:
Very user-friendly, engaging, and playful slidedeck.
Has the potential to take some of the pain out of the process, through introducing core concepts.
Breaks up content by beginner/need-to-know (green), and intermediate/less-useful noise (specifically for individuals starting out) (blue).
Provides resources to dive deeper into machine learning.
Provides some top people to follow in machine learning.
Disliked:
That there is not more! Jason's creativity, visual-based teaching approach, and quirky sense of humor all support the absorption of the material.
Lecturer:
Jason Mayes:
Senior Creative Technologist and Research Engineer at Google
Masters in Computer Science from University of Bristols
Personal Note: He's also kind on Twitter! :)
Links:
Machine Learning 101 slide deck
Tips on Watching:
Set aside 2-4 hours to work through the deck once.
Since there is a wealth of knowledge, refer back as needed (or as a grounding source).
Identify areas of interest and explore the resources provided.
{ML} Recipes with Josh Gordon ↓
Need to Know: This mini-series YouTube-hosted playlist covers the very fundamentals of machine learning with opportunities to complete exercises.
Loved:
It is genuinely beginner-focused.
They make no assumption of any prior knowledge.
Gloss over potentially complex topics that may serve as noise.
Playlist ~2 hours
Very high-quality filming, audio, and presentation, almost to the point where it had its own aesthetic.
Covers some examples in scikit-learn and TensorFlow, which felt modern and practical.
Josh Gordon was an engaging speaker.
Disliked:
I could not get Dockers on Windows (suggested package manager). This wasn't a huge deal, since I already had my AWS setup by this point; however, a bit of a bummer since it made it impossible to follow certain steps exactly.
Issue: Every time I tried to download (over the course of two weeks), the .exe file would recursively start and keep spinning until either my memory ran out, computer crashed, or I shut my computer down. I sent this to Docker's Twitter account to no avail.
Lecturer:
Josh Gordon:
Developer Advocate for at TensorFlow at Google
Leads Machine Learning advocacy at Google
Member of the Udacity AI & Data Industry Advisory Board
Masters in Computer Science from Columbia University
Links:
Hello World - Machine Learning Recipes #1 (YouTube)
GitHub: Machine Learning Recipes with Josh Gordon
Tips on Watching:
The playlist is short (only ~1.5 hours screen time). However, it can be a bit fast-paced at times (especially if you like mimicking the examples), so set aside 3-4 hours to play around with examples and allow time for installation, pausing, and following along.
Take time to explore code labs.
Google's Machine Learning Crash Course with TensorFlow APIs ↓
Need to Know: A Google researcher-made crash course on machine learning that is interactive and offers its own built-in coding system!
Loved:
Different formats of learning: high-quality video (with ability to adjust speed, closed captioning), readings, quizzes (with explanations), visuals (including whiteboarding), interactive components/ playgrounds, code lab exercises (run directly in your browser (no setup required!))
Non-intimidating
One of my favorite quotes: "You don't need to understand the math to be able to take a look at the graphical interpretation."
Broken down into digestible sections
Introduces key terms
Disliked:
N/A
Lecturers:
Multiple Google researchers participated in this course, including:
Peter Norvig
Director of Research at Google Inc.
Previously he directed Google's core search algorithms group.
He is co-author of Artificial Intelligence: A Modern Approach
D. Sculley
Senior Staff Software Engineer at Google
KDD award-winning papers
Works on massive-scale ML systems for online advertising
Was part of a research ML paper on optimizing chocolate chip cookies
According to his personal website, he prefers to go by "D."
Cassandra Xia
Programmer, Software Engineer at Google
She has some really cool (and cute) projects based on learning statistics concepts interactively
Maya Gupta
Leads Glassbox Machine Learning R&D team at Google
Associate Professor of Electrical Engineering at the University of Washington (2003-2012)
In 2007, Gupta received the PECASE award from President George Bush for her work in classifying uncertain (e.g. random) signals
Gupta also runs Artifact Puzzles, the second-largest US maker of wooden jigsaw puzzles
Sally Goldman
Research Scientist at Google
Co-author of A Practical Guide to Data Structures and Algorithms Using Java
Numerous journals, classes taught at Washington University, and contributions to the ML community
Links:
Machine Learning Crash Course
Tips on Doing:
Actively work through playground and coding exercises
OCDevel's Machine Learning Guide Podcast ↓
Need to Know: This podcast focuses on the high-level fundamentals of machine learning, including basic intuition, algorithms, math, languages, and frameworks. It also includes references to learn more on each episode's topic.
Loved:
Great for trips (when traveling a ton, it was an easy listen).
The podcast makes machine learning fun with interesting and compelling analogies.
Tyler is a big fan of Andrew Ng's Coursera course and reviews concepts in Coursera course very well, such that both pair together nicely.
Covers the canonical resources for learning more on a particular topic.
Disliked:
Certain courses were more theory-based; all are interesting, yet impractical.
Due to limited funding the project is a bit slow to update and has less than 30 episodes.
Podcaster:
Tyler Renelle:
Machine learning engineer focused on time series and reinforcement
Background in full-stack JavaScript, 10 years web and mobile
Creator of HabitRPG, an app that treats habits as an RPG game
Links:
Machine Learning Guide podcast
Machine Learning Guide podcast (iTunes)
Tips on Listening:
Listen along your journey to help solidify understanding of topics.
Skip episodes 1, 3, 16, 21, and 26 (unless their topics interest and inspire you!).
Kaggle Machine Learning Track (Lesson 1) ↓
Need to Know: A simple code lab that covers the very basics of machine learning with scikit-learn and Panda through the application of the examples onto another set of data.
Loved:
A more active form of learning.
An engaging code lab that encourages participants to apply knowledge.
This track offers has a built-in Python notebook on Kaggle with all input files included. This removed any and all setup/installation issues.
Side note: It's a bit different than Jupyter notebook (e.g., have to click into a cell to add another cell).
Each lesson is short, which made the entire lesson go by very fast.
Disliked:
The writing in the first lesson didn't initially make it clear that one would need to apply the knowledge in the lesson to their workbook.
It wasn't a big deal, but when I started referencing files in the lesson, I had to dive into the files in my workbook to find they didn't exist, only to realize that the knowledge was supposed to be applied and not transcribed.
Lecturer:
Dan Becker:
Data Scientist at Kaggle
Undergrad in Computer Science, PhD in Econometrics
Supervised data science consultant for six Fortune 100 companies
Contributed to the Keras and Tensorflow libraries
Finished 2nd (out of 1353 teams) in $3 million Heritage Health Prize data mining competition
Speaks at deep learning workshops at events and conferences
Links:
https://www.kaggle.com/learn/machine-learning
Tips on Doing:
Read the exercises and apply to your dataset as you go.
Try lesson 2, which covers more complex/abstract topics (note: this second took a bit longer to work through).
Ready to commit
Fast.ai (part 1 of 2) ↓
Need to Know: Hands-down the most engaging and active form of learning ML. The source I would most recommend for anyone (although the training plan does help to build up to this course). This course is about learning through coding. This is the only course that I started to truly see the practical mechanics start to come together. It involves applying the most practical solutions to the most common problems (while also building an intuition for those solutions).
Loved:
Course Philosophy:
Active learning approach
"Go out into the world and understand underlying mechanics (of machine learning by doing)."
Counter-culture to the exclusivity of the machine learning field, focusing on inclusion.
"Let's do shit that matters to people as quickly as possible."
Highly pragmatic approach with tools that are currently being used (Jupyter Notebooks, scikit-learn, Keras, AWS, etc.).
Show an end-to-end process that you get to complete and play with in a development environment.
Math is involved, but is not prohibitive. Excel files helped to consolidate information/interact with information in a different way, and Jeremy spends a lot of time recapping confusing concepts.
Amazing set of learning resources that allow for all different styles of learning, including:
Video Lessons
Notes
Jupyter Notebooks
Assignments
Highly active forums
Resources on Stackoverflow
Readings/resources
Jeremy often references popular academic texts
Jeremy's TEDx talk in Brussels
Jeremy really pushes one to do extra and put in the effort by teaching interesting problems and engaging one in solving them.
It's a huge time commitment; however, it's worth it.
All of the course's profits are donated.
Disliked:
Overview covers their approach to learning (obviously I'm a fan!). If you're already drinking the Kool-aid, skip past.
I struggled through the AWS setup (13-minute video) for about five hours (however, it felt so good when it was up and running!).
Because of its practicality and concentration on solutions used today to solve popular problem types (image recognition, text generation, etc.), it lacks breadth of machine learning topics.
Lecturers:
Jeremy Howard:
Distinguished Research Scientist at the University of San Francisco
Faculty member at Singularity University
Young Global Leader with the World Economic Forum
Founder of Enlitic (the first company to apply deep learning to medicine)
Former President and Chief Scientist of the data science platform Kaggle
Rachel Thomas:
PhD in Math from Duke
One of Forbes' "20 Incredible Women Advancing AI Research"
Researcher-in-residence at the University of San Francisco Data Institute
Teaches in the Masters in Data Science program
Links:
http://course.fast.ai/start.html
http://wiki.fast.ai/index.php/Main_Page
https://github.com/fastai/courses/tree/master/deeplearning1/nbs
Tips on Doing:
Set expectations with yourself that installation is going to probably take a few hours.
Prepare to spend about ~70 hours for this course (it's worth it).
Don't forget to shut off your AWS instance.
Balance out machine learning knowledge with a course with more breadth.
Consider giving part two of the Fast.ai program a shot!
Hands-On Machine Learning with Scikit-Learn and TensorFlow: Concepts, Tools, and Techniques to Build Intelligent Systems ↓
Need to Know: This book is an Amazon best seller for a reason. It covers a lot of ground quickly, empowers readers to walk through a machine learning problem by chapter two, and contains practical up-to-date machine learning skills.
Loved:
Book contains an amazing introduction to machine learning that briskly provides an overarching quick view of the machine learning ecosystem.
Chapter 2 immediately walks the reader through an end-to-end machine learning problem.
Immediately afterwards, Aurélien pushes a user to attempt to apply this solution to another problem, which was very empowering.
There are review questions at the end of each chapter to ensure on has grasped the content within the chapter and to push the reader to explore more.
Once installation was completed, it was easy to follow and all code is available on GitHub.
Chapters 11-14 were very tough reading; however, they were a great reference when working through Fast.ai.
Contains some powerful analogies.
Each chapter's introductions were very useful and put everything into context. This general-to-specifics learning was very useful.
Disliked:
Installation was a common source of issues during the beginning of my journey; the text glided over this. I felt the frustration that most people experience from installation should have been addressed with more resources.
Writer:
Aurélien Géron:
Led the YouTube video classification team from 2013 to 2016
Currently a machine Learning consultant
Founder and CTO of Wifirst and Polyconseil
Published technical books (on C++, Wi-Fi, and Internet architectures)
Links:
https://www.amazon.com/_/dp/1491962291?tag=oreilly20-20
http://shop.oreilly.com/product/0636920052289.do
https://github.com/ageron/handson-ml
Tips on Using:
Get a friend with Python experience to help with installation.
Read the introductions to each chapter thoroughly, read the chapter (pay careful attention to code), review the questions at the end (highlight any in-text answer), make a copy of Aurélien's GitHub and make sure everything works on your setup, re-type the notebooks, go to Kaggle and try on other datasets.
Broadening your horizons
Udacity: Intro to Machine Learning (Kate/Sebastian) ↓
Need to Know: A course that covers a range of machine learning topics, supports building of intuition via visualization and simple examples, offers coding challenges, and a certificate (upon completion of a final project). The biggest challenge with this course is bridging the gap between the hand-holding lectures and the coding exercises.
Loved:
Focus on developing a visual intuition on what each model is trying to accomplish.
This visual learning mathematics approach is very useful.
Cover a vast variety and breadth of models and machine learning basics.
In terms of presenting the concept, there was a lot of hand-holding (which I completely appreciated!).
Many people have done this training, so their GitHub accounts can be used as reference for the mini-projects.
Katie actively notes documentation and suggests where viewers can learn more/reference material.
Disliked:
All of the conceptual hand-holding in the lessons is a stark contrast to the challenges of installation, coding exercises, and mini-projects.
This is the first course started and the limited instructions on setting up the environment and many failed attempts caused me to break down crying at least a handful of times.
The mini-projects are intimidating.
There is extra code added to support the viewers; however, it's done so with little acknowledgement as to what it's actually doing. This made learning a bit harder.
Lecturer:
Caitlin (Katie) Malone:
Director of Data Science Research and Development at Civis Analytics
Stanford PhD in Experimental Particle Physics
Intern at Udacity in summer 2014
Graduate Researcher at the SLAC National Accelerator Laboratory
https://www6.slac.stanford.edu/
Podcaster with Ben Jaffe (currently Facebook UI Engineer and a music aficionado) on a machine learning podcast Linear Digressions (100+ episodes)
Sebastian Thrun:
CEO of the Kitty Hawk Corporation
Chairman and co-founder of Udacity
One of my favorite Sebastian quotes: "It occurred to me, I could be at Google and build a self-driving car, or I can teach 10,000 students how to build self-driving cars."
Former Google VP
Founded Google X
Led development of the robotic vehicle Stanley
Professor of Computer Science at Stanford University
Formerly a professor at Carnegie Mellon University.
Links:
https://www.udacity.com/course/intro-to-machine-learning--ud120
Udacity also offers a next step, the Machine Learning Engineer Nanodegree, which will set one back about $1K.
Tips on Watching:
Get a friend to help you set up your environment.
Print mini-project instructions to check off each step.
Andrew Ng's Coursera Machine Learning Course ↓
Need to Know: The Andrew Ng Coursera course is the most referenced online machine learning course. It covers a broad set of fundamental, evergreen topics with a strong focus in building mathematical intuition behind machine learning models. Also, one can submit assignments and earn a grade for free. If you want to earn a certificate, one can subscribe or apply for financial aid.
Loved:
This course has a high level of credibility.
Introduces all necessary machine learning terminology and jargon.
Contains a very classic machine learning education approach with a high level of math focus.
Quizzes interspersed in courses and after each lesson support understanding and overall learning.
The sessions for the course are flexible, the option to switch into a different section is always available.
Disliked:
The mathematic notation was hard to process at times.
The content felt a bit dated and non-pragmatic. For example, the main concentration was MATLAB and Octave versus more modern languages and resources.
Video quality was less than average and could use a refresh.
Lecturer:
Andrew Ng:
Adjunct Professor, Stanford University (focusing on AI, Machine Learning, and Deep Learning)
Co-founder of Coursera
Former head of Baidu AI Group
Founder and previous head of Google Brain (deep learning) project
Former Director of the Stanford AI Lab
Chairman of the board of Woebot (a machine learning bot that focuses on Cognitive Behavior Therapy)
Links:
https://www.coursera.org/learn/machine-learning/
Andrew Ng recently launched a new course (August 2017) called DeepLearning.ai, a ~15 week course containing five mini-courses ($49 USD per month to continue learning after trial period of 7 days ends).
Course: https://www.coursera.org/specializations/deep-learning
Course 1: Neural Networks and Deep Learning
Course 2: Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization
Course 3: Structuring Machine Learning Projects
Course 4: Convolutional Neural Networks
Course 5: Sequence Models
Tips on Watching:
Be disciplined with setting aside timing (even if it's only 15 minutes a day) to help power through some of the more boring concepts.
Don't do this course first, because it's intimidating, requires a large time commitment, and isn't a very energizing experience.
Additional machine learning opportunities
iPullRank Machine Learning Guide ↓
Need to Know: A machine learning e-book targeted at marketers.
Loved:
Targeted at marketers and applied to organic search.
Covers a variety of machine learning topics.
Some good examples, including real-world blunders.
Gives some practical tools for non-data scientists (including: MonkeyLearn and Orange)
I found Orange to be a lot of fun. It struggled with larger datasets; however, it has a very visual interface that was more user-friendly and offers potential to show some pretty compelling stories.
Example: World Happiness Dataset by:
X-axis: Happiness Score
Y-axis: Economy
Color: Health
Disliked:
Potential to break up content more with relevant imagery -- the content was very dense.
Writers:
iPullRank Team (including Mike King):
Mike King has a few slide decks on the basics of machine learnings and AI
iPullRank has a few data scientists on staff
Links:
http://ipullrank.com/machine-learning-guide/
Tips on Reading:
Read chapters 1-6 and the rest depending upon personal interest.
Review Google PhD ↓
Need to Know: A two-hour presentation from Google's 2017 IO conference that walks through getting 99% accuracy on the MNIST dataset (a famous dataset containing a bunch of handwritten numbers, which the machine must learn to identify the numbers).
Loved:
This talk struck me as very modern, covering the cutting edge.
Found this to be very complementary to Fast.ai, as it covered similar topics (e.g. ReLu, CNNs, RNNs, etc.)
Amazing visuals that help to put everything into context.
Disliked:
The presentation is only a short conference solution and not a comprehensive view of machine learning.
Also, a passive form of learning.
Presenter:
Martin Görner:
Developer Relations, Google (since 2011)
Started Mobipocket, a startup that later became the software part of the Amazon Kindle and its mobile variants
Links:
Part 1 - https://www.youtube.com/watch?v=u4alGiomYP4
Part 2 - https://www.youtube.com/watch?v=fTUwdXUFfI8
Tips on Watching:
Google any concepts you're unfamiliar with.
Take your time with this one; 2 hours of screen time doesn't count all of the Googling and processing time for this one.
Caltech Machine Learning iTunes ↓
Need to Know: If math is your thing, this course does a stellar job of building the mathematic intuition behind many machine learning models. Dr. Abu-Mostafa is a raconteur, includes useful visualizations, relevant real-world examples, and compelling analogies.
Loved:
First and foremost, this is a real Caltech course, meaning it's not a watered-down version and contains fundamental concepts that are vital to understanding the mechanics of machine learning.
On iTunes, audio downloads are available, which can be useful for on-the-go learning.
Dr. Abu-Mostafa is a skilled speaker, making the 27 hours spent listening much easier!
Dr. Abu-Mostafa offers up some strong real-world examples and analogies which makes the content more relatable.
As an example, he asks students: "Why do I give you practice exams and not just give you the final exam?" as an illustration of why a testing set is useful. If he were to just give students the final, they would just memorize the answers (i.e., they would overfit to the data) and not genuinely learn the material. The final is a test to show how much students learn.
The last 1/2 hour of the class is always a Q&A, where students can ask questions. Their questions were useful to understanding the topic more in-depth.
The video and audio quality was strong throughout. There were a few times when I couldn't understand a question in the Q&A, but overall very strong.
This course is designed to build mathematical intuition of what's going on under the hood of specific machine learning models.
Caution: Dr. Abu-Mostafa uses mathematical notation, but it's different from Andrew Ng's (e.g., theta = w).
The final lecture was the most useful, as it pulled a lot of the conceptual puzzle pieces together. The course on neural networks was a close second!
Disliked:
Although it contains mostly evergreen content, being released in 2012, it could use a refresh.
Very passive form of learning, as it wasn't immediately actionable.
Lecturer:
Dr. Yaser S. Abu-Mostafa:
Professor of Electrical Engineering and Computer Science at the California Institute of Technology
Chairman of Machine Learning Consultants LLC
Serves on a number of scientific advisory boards
Has served as a technical consultant on machine learning for several companies (including Citibank).
Multiple articles in Scientific American
Links:
https://work.caltech.edu/telecourse.html
https://itunes.apple.com/us/course/machine-learning/id515364596
Tips on Watching:
Consider listening to the last lesson first, as it pulls together the course overall conceptually. The map of the course, below, was particularly useful to organizing the information taught in the courses.
Image source: http://work.caltech.edu/slides/slides18.pdf
"Pattern Recognition & Machine Learning" by Christopher Bishop ↓
Need to Know: This is a very popular college-level machine learning textbook. I've heard it likened to a bible for machine learning. However, after spending a month trying to tackle the first few chapters, I gave up. It was too much math and pre-requisites to tackle (even with a multitude of Google sessions).
Loved:
The text of choice for many major universities, so if you can make it through this text and understand all of the concepts, you're probably in a very good position.
I appreciated the history aside sections, where Bishop talked about influential people and their career accomplishments in statistics and machine learning.
Despite being a highly mathematically text, the textbook actually has some pretty visually intuitive imagery.
Disliked:
I couldn't make it through the text, which was a bit frustrating. The statistics and mathematical notation (which is probably very benign for a student in this topic) were too much for me.
The sunk cost was pretty high here (~$75).
Writer:
Christopher Bishop:
Laboratory Director at Microsoft Research Cambridge
Professor of Computer Science at the University of Edinburgh
Fellow of Darwin College, Cambridge
PhD in Theoretical Physics from the University of Edinburgh
Links:
https://www.amazon.com/Pattern-Recognition-Learning-Information-Statistics/dp/0387310738/ref=sr_1_2?ie=UTF8&qid=1516839475&sr=8-2&keywords=Pattern+Recognition+%26+Machine+Learning
Tips on Reading:
Don't start your machine learning journey with this book.
Get a friend in statistics to walk you through anything complicated (my plan is to get a mentor in statistics).
Consider taking a (free) online statistics course (Khan Academy and Udacity both have some great content on statistics, calculus, math, and data analysis).
Machine Learning: Hands-on for Developers and Technical Professionals ↓
Need to Know: A fun, non-intimidating end-to-end launching pad/whistle stop for machine learning in action.
Loved:
Talks about practical issues that many other sources didn't really address (e.g. data-cleansing).
Covered the basics of machine learning in a non-intimidating way.
Offers abridged, consolidated versions of the content.
Added fun anecdotes that makes it easier to read.
Overall the writer has a great sense of humor.
Writer talks to the reader as if they're a real human being (i.e., doesn't expect you to go out and do proofs; acknowledges the challenge of certain concepts).
Covers a wide variety of topics.
Because it was well-written, I flew through the book (even though it's about ~300 pages).
Disliked:
N/A
Writer:
Jason Bell:
Technical architect, lecturer, and startup consultant
Data Engineer at MastodonC
Former section editor for Java Developer's Journal
Former writer on IBM DeveloperWorks
Links:
https://www.amazon.com/Machine-Learning-Hands-Developers-Professionals/dp/1118889061
https://www.wiley.com/en-us/Machine+Learning%3A+Hands+On+for+Developers+and+Technical+Professionals-p-9781118889060
Jason's Blog: https://dataissexy.wordpress.com/
Tips on Reading:
Download and explore Weka's interface beforehand.
Give some of the exercises a shot.
Introduction to Machine Learning with Python: A Guide for Data Scientists ↓
Need to Know: This was a was a well-written piece on machine learning, making it a quick read.
Loved:
Quick, smooth read.
Easy-to-follow code examples.
The first few chapters served as a stellar introduction to the basics of machine learning.
Contain subtle jokes that add a bit of fun.
Tip to use the Python package manager Anaconda with Jupyter Notebooks was helpful.
Disliked:
Once again, installation was a challenge.
The "mglearn" utility library threw me for a loop. I had to reread the first few chapters before I figured out it was support for the book.
Although I liked the book, I didn't love it. Overall it just missed the "empowering" mark.
Writers:
Andreas C. Müller:
PhD in Computer Science
Lecturer at the Data Science Institute at Columbia University
Worked at the NYU Center for Data Science on open source and open science
Former Machine Learning Scientist at Amazon
Speaks often on Machine Learning and scikit-learn (a popular machine learning library)
And he makes some pretty incredibly useful graphics, such as this scikit-learn cheat sheet:
Image source: http://peekaboo-vision.blogspot.com/2013/01/machin...
Sarah Guido:
Former senior data scientist at Mashable
Lead data scientist at Bitly
2018 SciPy Conference Data Science track co-chair
Links:
https://www.amazon.com/Introduction-Machine-Learning-Python-Scientists/dp/1449369413/ref=sr_1_7?s=books&ie=UTF8&qid=1516734322&sr=1-7&keywords=python+machine+learning
http://shop.oreilly.com/product/0636920030515.do
Tips on Reading:
Type out code examples.
Beware of the "mglearn" utility library.
Udacity: Machine Learning by Georgia Tech ↓
Need to Know: A mix between an online learning experience and a university machine learning teaching approach. The lecturers are fun, but the course still fell a bit short in terms of active learning.
Loved:
This class is offered as CS7641 at Georgia Tech, where it is a part of the Online Masters Degree. Although taking this course here will not earn credit towards the OMS degree, it's still a non-watered-down college teaching philosophy approach.
Covers a wide variety of topics, many of which reminded me of the Caltech course (including: VC Dimension versus Bayesian, Occam's razor, etc.)
Discusses Markov Decision Chains, which is something that didn't really come up in many other introductory machine learning course, but they are referenced within Google patents.
The lecturers have a great dynamic, are wicked smart, and displayed a great sense of (nerd) humor, which make the topics less intimidating.
The course has quizzes, which give the course a slight amount of interaction.
Disliked:
Some videos were very long, which made the content a bit harder to digest.
The course overall was very time consuming.
Despite the quizzes, the course was a very passive form of learning with no assignments and little coding.
Many videos started with a bunch of content already written out. Having the content written out was probably a big time-saver, but it was also a bit jarring for a viewer to see so much information all at once, while also trying to listen.
It's vital to pay very close attention to notation, which compounds in complexity quickly.
Tablet version didn't function flawlessly: some was missing content (which I had to mark down and review on a desktop), the app would crash randomly on the tablet, and sometimes the audio wouldn't start.
There were no subtitles available on tablet, which I found not only to be a major accessibility blunder, but also made it harder for me to process (since I'm not an audio learner).
Lecturer:
Michael Littman:
Professor of Computer Science at Brown University.
Was granted a patent for one of the earliest systems for Cross-language information retrieval
Perhaps the most interesting man in the world:
Been in two TEDx talks
How I Learned to Stop Worrying and Be Realistic About AI
A Cooperative Path to Artificial Intelligence
During his time at Duke, he worked on an automated crossword solver (PROVERB)
Has a Family Quartet
He has appeared in a TurboTax commercial
Charles Isbell:
Professor and Executive Associate Dean at School of Interactive Computing at Georgia Tech
Focus on statistical machine learning and "interactive" artificial intelligence.
Links:
https://www.udacity.com/course/machine-learning--ud262
Tips on Watching:
Pick specific topics of interest and focusing on those lessons.
Andrew Ng's Stanford's Machine Learning iTunes ↓
Need to Know: A non-watered-down Stanford course. It's outdated (filmed in 2008), video/audio are a bit poor, and most links online now point towards the Coursera course. Although the idea of watching a Stanford course was energizing for the first few courses, it became dreadfully boring. I made it to course six before calling it.
Loved:
Designed for students, so you know you're not missing out on anything.
This course provides a deeper study into the mathematical and theoretical foundation behind machine learning to the point that the students could create their own machine learning algorithms. This isn't necessarily very practical for the everyday machine learning user.
Has some powerful real-world examples (although they're outdated).
There is something about the kinesthetic nature of watching someone write information out. The blackboard writing helped me to process certain ideas.
Disliked:
Video and audio quality were pain to watch.
Many questions asked by students were hard to hear.
On-screen visuals range from hard to impossible to see.
Found myself counting minutes.
Dr. Ng mentions TA classes, supplementary learning, but these are not available online.
Sometimes the video showed students, which I felt was invasive.
Lecturer:
Andrew Ng (see above)
Links:
https://itunes.apple.com/us/course/machine-learning/id495053006
https://www.youtube.com/watch?v=UzxYlbK2c7E
Tips on Watching:
Only watch if you're looking to gain a deeper understanding of the math presented in the Coursera course.
Skip the first half of the first lecture, since it's mostly class logistics.
Additional Resources
Fast.ai (part 2) - free access to materials, cost for AWS EC2 instance
Deeplearning.ai - $50/month
Udacity Machine Learning Engineer Nanodegree - $1K
https://machinelearningmastery.com/
Motivations and inspiration
If you're wondering why I spent a year doing this, then I'm with you. I'm genuinely not sure why I set my sights on this project, much less why I followed through with it. I saw Mike King give a session on Machine Learning. I was caught off guard, since I knew nothing on the topic. It gave me a pesky, insatiable curiosity itch. It started with one course and then spiraled out of control. Eventually it transformed into an idea: a review guide on the most affordable and popular machine learning resources on the web (through the lens of a complete beginner). Hopefully you found it useful, or at least somewhat interesting. Be sure to share your thoughts or questions in the comments!
Sign up for The Moz Top 10, a semimonthly mailer updating you on the top ten hottest pieces of SEO news, tips, and rad links uncovered by the Moz team. Think of it as your exclusive digest of stuff you don't have time to hunt down but want to read!
https://ift.tt/2q13Myy xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY xem thêm tại: https://ift.tt/2mb4VST để biết thêm về địa chỉ bán tai nghe không dây giá rẻ A Machine Learning Guide for Average Humans https://ift.tt/2rFyAUY Bạn có thể xem thêm địa chỉ mua tai nghe không dây tại đây https://ift.tt/2mb4VST
0 notes