Hey guys, just Nate, A.K.A. the Foot Account, and welcome back to the channel. Today could be a very special day on FIFA 23 Ultimate Team, and it's all because of one pack that we're hoping to see in SBCs today, and that is the World Cup Hero Pack. I wanna take a look through how much this pack might cost, why we think it's even coming today, and what it could do to the market on all different aspects. Should you invest for this SBC? Is it gonna make the World Cup Phenom cards that are in packs right now go down in price because of panic selling? Are the World Cup Hero cards gonna drop in price today?  We're also gonna take a look at the market in general because we have got some more upgrades coming to the game today. Yes, your five-star week foots should, week foots, this always sounds weird to say, but your five-star week foots upgrades should be dropping on all of your respectable upgrade winners very, very soon today on Monday on this game. So we're gonna take a look at that, how those prices can move and discuss and some in-depth investing with these World Cup Phenoms. A lot of people are wanting to invest in these cards for their team, for an investment, regardless of what the reason is. A lot of people wanna buy these cards and they're starting to move already. Could they be at their lowest in the next day or so? We're gonna take a look at that in this video as well. So if you're excited for it today, hit the thumbs up, subscribe if you're new. Let's talk about this World Cup Hero pack because I just wanna set the record straight and say that this World Cup pack, as we know, was added to the code during the weekend and a lot of people are still on the fence on whether this is a store pack or whether it is an SBC pack. If it ends up being in the store, I would be shocked because think about what day it is. It's Monday, right? All of these other packs have been dropped in the game on the weekend. What are the weekends all about in FIFA? Packs in the store, lightning rounds, EA's new promo cards, they dropped on a Friday. The weekends are all about packs, packs, packs, store, store, store, and then once we turn the corner to Monday and get into the middle of the week, it's all about SBCs draining your club. That's why I think this pack was an SBC pack from the get-go and I think we're gonna see it today or tomorrow in SBCs. Now we're talking about it today because I feel like today is the highest likelihood percentage chance that we see this pack in the game in an SBC today. It might not be today, it could be tomorrow, it could be Wednesday, but Mondays are the most popular day for these sorts of packs. So it's not a guarantee that it's coming today but the likelihood is pretty high. So that's the pack, again, any World Cup hero player. No rating cap, no rating minimum, right? We've had the Max 87, the Max 89, base foot hero, 86 plus foot hero or World Cup hero, none of that. It's just a strict World Cup hero pack. Now what's the cost gonna be of this? Because you've got a lot of great World Cup heroes in this game. I mean, these cards, if you take a look at all these players, yeah, there's a handful that aren't that great, but Valor, Forlan, Yayatoure, Okochia, Lucio, this is the first upgrade pack. I mean, besides the 86 plus, but the Max 89 World Cup hero upgrade, the only other just specific World Cup hero upgrade did not allow Lucio to be packed for Lan, Rudy Valor, Papan, not that anybody was super, super crazy about that one for the price point, but you know, every single foot hero World Cup player is going to be packable from this pack today. Alawarian, Kuhl, Smollerec, Donovan, Brolin, Marquisio, not keen, he's of course an SBC only card, not gonna be packable from this, but that's why this pack has hype because these heroes get great links, they are great statistically, and they're really meta and they're just fun and they're just cool because it's the whole Marvel collaboration as well. So that's why there's a lot of hype around these. What's the SBC gonna cost, Nate? Get to the business side of things. I think this SBC today is probably gonna be around 200,000 coins. I mean, the Max 89 was about 168k and I do believe it was even more expensive than that at its peak price because when this SBC came out, 85s were, yes, 70,000 coins on Black Friday. You guys might remember, 70k when this SBC was out, I think like for the second time, when it was re-released during Black Friday, it was super expensive, and then the 86 plus was around 150k, repeatable three times also during Black Friday. I just think that with all of the very high priced heroes that you have in here, Lucio's 1.5, Yaya's 2.1, Rudy, Forlan, 500 and 700k respectively, you've got a lot of expensive heroes in here, yes, you've got a lot of cheap heroes in here, right? You've got Cahill, you've got Ocampos, you've got some other ones, Coler's pretty cheap, Dempsey, Algebra, you've got a lot of cards in here, Peter Crouch, that are really, really cheap, so of course there is an L aspect to this and it is definitely a gamble, but this is a gamble that so many people are gonna take because of the potential that is there. 200,000 coins at this stage of the game, fresh after week in league rewards and 84 times 20s is not too much for people to go and shell out as well, and I think EA know that that's the case, right? That's why I think they released a lot of these packs on Mondays because people have fresh packs open over the weekend, they have fresh rewards to go and do an SBC like this, it keeps them involved with the game and it drains their clubs so that EA can do it all again in future weeks, right? That's why I expect that pack today, somewhere around 200,000 coins. Now, if it's 200,000, are people gonna do it? Apps are freaking loopy. The only way I think people don't do this SBC today is if it's like 300,000, 400,000 coins and astronomically overpriced, but if it's 200,000 or less, which it could be less, that's a W, and I think you're gonna see fodder rise up because of that.  Remember, 85s were 9K. They're already starting to rise again because people are expecting a market rise on these sorts of prices on the game today on Monday. Here's what I would say, if you have not invested in fodder, I would go with the safe route here and do a club stock. Spend a couple, maybe 100,000 coins. If you have it, it can be even less than that. Stock some 84s, 85s, 86s, but then I'd also try to get a few 87s, 88s, 89s. I would basically club stock the whole thing because you just don't know how EA are gonna require or what they're gonna require for this SBC to get it to be the price point that they want it to be. They could make it two squads. They could make it four squads and make it be super annoying. It'd be like 82, 83, 85 and 86 rated squads or something like that. They could do that, right? Will they? Probably not. It'll probably be two or three squads like 85, 86, 87 or maybe an 88 squad in there. I think that'd be a little bit too expensive but that's kinda what I'm expecting for a price point. Around 200,000 coins, do a club stock on fodder and I mean, let's be honest guys, with an SBC like this and all the hype that it's gonna have for these cards, even if fodder is very invested in, fodder is still gonna go up. Only if, the only reason it doesn't is if the SBC is really, really, really expensive and people say it's just too expensive for me to do. So that's why I like the fodder investment. Do it at your own risk, be a little bit careful with it because a lot of people are investing but I really only see one way and that is up because of the hype of a World Cup here at SBC. Now let's talk about the World Cup heroes themselves and the actual players because I think it has to be said that since these cards are so hyped for today and so many people are looking into packing these today, some people have already gone out to the market and sold off some of these cards. I think there was a bit of a snipe just listed on foot been here but Rudy Voller has been down. He was above 800,000 coins. He's now starting to trickle underneath that price a little bit now. And as I take a look at some of the other World Cup heroes on the market, I see like a guy like Yaya Toure who before the pack code and before this weekend on the game, yes you could cite some of the brand new really exciting cards to be a little bit of a reason why this price is down. 2.1 under 2.1 million coins for this 89 rated Yaya Toure right now. The best version of Yaya on the game. One of the best midfielder in the game. He is down big, right? He is down a lot. Smolareck, one of the most hyped World Cup hero striker cards is down like 30,000 coins. He was like 525,30. And right now foot been chosen at 490. So people are starting to sell off these cards a bit and I think you're gonna see panic selling again a bit more on these cards today. If especially we have a concrete leak that that pack is gonna drop via an SBC today. So watch out very closely for that one. And I think there will be great opportunities to trade with these cards today because people are gonna panic sell them and they're gonna drop in price. But in the end, how many people are actually gonna pack Yaya Toure?  Not that many. So I think there's great potential today to buy these cards in the dip and to flip them later on as people think, oh my goodness, I didn't pack Alawarian and what I really wanted to pack today from this SBC. Guess I just have to go back and buy him off the market instead of packing him from the World Cup hero pack, right? Alawarian was like 730 a couple days ago and right now he is 690. He is dropping in price significantly as people are awaiting this SBC pack today. That's my opinion. That's the way that I see it. So keep a very, very close eye on those cards today because that is the biggest part of content people are looking forward to. Now also, like we mentioned, upgrade packs today. We talk about this every single Monday, right? It's not that hard to wrap your mind around. If you plan to do any upgrade packs and you wanna try to pack any of the cards that are in this World Cup Phenoms promo, which, I mean, who wouldn't wanna pack anybody from this promo team? This promo team is really, really good. GGZA Sports. Stock your club with some gold rares and non-rares. It's pretty easy to do. You can go through and bid on non-rares today at 350 or 400 coins. They're gonna be easy to stock in your transfer list or put them in your club. Do the same thing with gold rares at 6,650. And boom, you'll be set and ready to go to try to pack some of these cards. And of course, the World Cup icons that are packable from upgrade packs. We don't know what upgrade SBC will have, but I'll be honest, it's been a minute since we've had 78 plus player picks. I think it's been two weeks. So maybe we'll do another player pick upgrade. I would not be disappointed if they dropped to the 80 plus double. I know people were not super happy about the drop rate on the promo cards from those, but I felt like the fodder drop rate from those 80 plus doubles was fantastic. So I don't know if you guys agree or not, but bring on the upgrade packs to EA Sports because I would love a chance at packing any of these phenoms like Leao, Kamavinga, Bellingham, Pedri, Saka, Hakimi, Millie, Tao, Kunde. Like you can't go wrong packing one of those cards. So give me a chance at doing that this week. I'll drop some coins into that side of the SBC gamble, if you will. So definitely keep an eye out for that. Now, we're talking about all these SBCs. We're talking about these phenoms cards. Nate, are these World Cup phenoms going to rise on the market at all today? Monday morning market rise is a part of something that we see almost every single week on this game. As people get their weekly rewards, we talk about this all the time. It's one of the most common market trends we see on FIFA. I do expect to see these cards rise up a little bit today, the most hyped ones. Even with a big SBC drop in today, there's a lot of people that won't even know that. They'll want to go out and try out some of these new phenoms cards. Hakimi was 410K just about an hour ago. He is now up in price. And I'm taking a look at a lot of these cards. Some of them were even lower yesterday. I bought Jude Bellingham last night right after I recorded the YouTube video at 640. I sold him over 700,000 coins yesterday. Lautaro was 80s last night. He went up to 90K. Saka last night was actually like 90 to 95,000 coins at his absolute lowest. As you can see here, like 95K. A couple snipes there made him even go a little bit lower. He went up to 103. But I think a lot of people right now are looking at these promo cards and they're thinking that today might be their lowest time and people are investing in these cards late Sunday night into Monday morning, thinking that this will be their cheapest time on the market. And while I do think there is a slight bit of validity to that, the only thing that I could see changing that is think about today. Think about today with this hero pack, right? What do people often do if they're gonna go do an SBC like this and they maybe don't have enough coins to go and do it? Well, let's say you have 100,000 coins, but you need 200,000 to do this SBC. You might go and sell somebody from your team that you might be trying, just like a Saka, maybe a Martinez, or especially for the World Cup Phenom cards that are like less than 200,000 coins. There could be a little bit of selling on these cards today if people are super hyped to go and do this SBC. That could be one spot of the market where these Phenoms cards drop today around content. I do think, back to my original point, that these cards will rise up a bit as they did yesterday into Sunday. Since we get rewards today, that's often a common thing you see is that the prices rise up into the daytime after people get their weekly rewards and after they get squad battle rewards in the case of yesterday, because they go out and they buy cards. When people get packs and coins, they go out, they build teams, they buy cards and try new things out. I do think that these cards will rise a bit today. I also think that with the big SBC, if there are tradable pack supply packs, let's say the SBC has two sections, probably the packs you get back from each of those sections would be tradable. If they're any good, you can see more supply on the market for these cards as well. So if you're somebody who is wanting to invest in any of these World Cup Phenoms, today could be an actual buy opportunity if you have not invested yet. But what you really need is for EA to create a lot of hype with this World Cup Hero Upgrade SBC today for these cards to drop any more. Because a lot of them look like they're primed to continue going up just because there is so much hype for all the big names that are in these promo packs in this World Cup Phenoms promo. So just keep a close, close eye on that. If I were to shout a few of these that I like out of packs, I think I've even talked about this a bit during the weekend already, but I like Martinez, I like Saka, I like Pedri, Hakimi, Jude Bellingham. I mean, most of this team has potential to do well out of packs because it's just big name players with some pretty really spicy upgrades on their cards, right? And when we talked about it, the weak foot skill move upgrade on Saka, the stat boosts on Kamavinga, and some of these other cards are very, very nice. I do think there's a potential for these cards. I think they are investable. And whether you buy them today, whether you bought them yesterday, or maybe you're waiting until Thursday, right? I think there are opportunities to profit on these cards and we'll continue to monitor them as we head throughout the week. But today's a big day for them because of all the other content that is going on. So if there's a price that you really like, you see a card drop, like let's say Pedri goes down to like 220 today or something. That'd be like, okay, that's a really good price for this Pedri card. I'm gonna go ahead and, since he has not been 220 at all, he was 235 on Sunday, on Saturday, his lowest price was 240. So that would be like, all right, that's a really, really low price for Pedri. The content on FIFA in recent weeks has been pretty average. So unless EA plan to switch that around and make content insane, all of a sudden, there might be a really good opportunity to invest these cards during the week this weekend. Maybe it is today, maybe it's a bit sooner, right? That's just something we can never really tell and know until you see it happen. But if it's something that you want for your team, I wouldn't hesitate too long because these cards are so hyped and there's so much demand for them that I would try to get involved with them pretty soon. So watch out for that. Also, with the rest of the market rising today after rewards last night sorry, I mean, I say last night, but really, I mean, into yesterday on Sunday, you saw a really nice market rise on gold cards. Van Dyke was 88K last night. He went up to like 96, 97, he's back to 88 again. Vinny Jr. was 32, he went almost all the way to 40. Another card that I have on top of my head is Mohamed Salah's gold card. Was like 55K Sunday night, or sorry, Saturday night. And he's right back to 56K, I believe right now. He was up at 62, I think, 1,000 coins. So it's not huge profits, but if you're looking to trade and flip with a few cards today on the game, I think some of your most meta pop with your golds. I think it'll be a nice market rise today on that side of the market. I'm not saying everything is gonna go up today because at the same time we get the weekly rewards. Yes, we might have a little bit of panic with some of these World Cup hero cards, which will be very interesting to watch out and to try to trade with today. But again, I think that your phenoms and your gold cards could go up a bit today as people go out and build teams after they get rewards. So that's kind of what's going on today with the market. I know there's a lot to talk about and a lot to talk through, but that's kind of what I'm looking for with the phenoms, with the World Cup heroes, and with the fodder side of the market. Now, let's talk about path to glories because today is upgrade day once again and hopefully a price range update, Dave, for one of our cards, maybe even two of them right now that are on the game, we have two cards that are almost extinct. We've got Bufal and Brozovich, that everybody who is still in the World Cup, of course, your France and Moroccan, Croatia, and your Argentina cards are all gonna get the five-star weak foot today in their upgrade. And none of these cards already have a five-star weak foot to my knowledge, so there's no rating upgrade today, it's only the weak foot. So as you can see right now, all these guys still have a four-star weak foot, hopefully sometime today, pretty quickly, by the way, EA get those upgrades pushed out.  And then again, like I mentioned, for the price range updates, Bufal and Brozovich, Bufal is technically not extinct, he is almost there, he's at 97,000 coins, but he's gonna go to a five-star weak foot today, they just dropped some Moroccan lads yesterday as a part of Dynamic Duo's in the game, so there's a little bit of extra hype with him. And of course, these are cards that are still live and upgrading, so their prices continue to rise. But watch out for those PTG upgrades today. Again, the price of those cards just, again, maintain their crazy, crazy high values. Now, as we head into tomorrow and Tuesday and into Wednesday when we have these semi-final games played, let me just show you guys something that's been happening with these cards, especially if they are on the higher tier on this game. Can I find Bernardo Silva really fast? Bernardo Silva, as a Premier League center attacking man, I'm just gonna type his name in, because I can't find him. Take a look at this Path of Glory cards price, 484. Look what happened after they lost, right? He went from a million coins down to 390 after the game, rebounded right back up to about 440, and then yesterday he was as high as 520,000 coins by 50, and now he's back down to a little below 500,000 coins. These cards, and I'm looking specifically at Griezmann and Kunku, and even I would say Papu Gomez is in this conversation as well. If you are somebody who owns one of those cards, or is kind of closely watching one of those cards, I would be very careful, very, very, very careful with those cards. If they end up losing, let's say Argentina lose, let's say France lose, they get knocked out, watch these cards after the game, because these cards are still very incredible in terms of their stats. They're very hyped, 1.07 mil for this card is like disgusting if we think about it in that way, but these cards after their game, especially if they're rare, they hit a low point and they start to bounce back. Same thing with the Kyle Walker from the England game on Saturday. Kyle Walker was at his lowest, like 560, I believe, and now he is back up to about 620,000 coins, 610, and coming back up in price, just because after the panic selling ends, people are like, wow, this card's actually really cheap and affordable now, I can go out and buy it, and you see the price kind of rise back up in that manner. So that is something I would watch out for, but again, the general point is the path, the glory upgrades again are coming today. The last thing we have to look out for today is will EA drop any more swap tokens? Because we think we might be getting 60 swap tokens in total, but also EA told us on one of those little loading screens in the game or news tab screens that they're done releasing the swaps objective tokens. So today is a day where we often saw tokens released in the past couple of weeks. We'll see if EA Sports drops us any more tokens today, or if we're truly done with that and maybe the rest of our tokens will be coming through this door. We really do not know. But today is all about that World Cup hero pack, and it's all about the hype that could come with that getting dropped on the game today. So I'm looking forward to it. I hope you guys are as well. It's gonna be a fun day on FIFA. It's a big, fun Monday of upgrade pack content. I've got a couple of cards I'm looking to trade with today. I picked up a couple of soccer's at 101 just because I feel like so many people are gonna invest in this card, that I think he's gonna rise up. So that's why I picked up a couple of those just because I think the hype on him is too much for an English, Premier League, right-sided, left-sided, four-star, four-star upgrade, first promo card of the year, soccer card. So big fan of that one. Also got a Goretzka on a really, really little bid at 488. He's like a 550K card. So I'll be able to flip that. There'll be some nice profits for me today, and we'll put some of those profits into upgrade packs that try to pack some of these phenoms, especially the new ones, Martinez, Telemans and Rodrigo. Watch out for that Martinez today. He was a card that moved around a fair bit in price yesterday, and I think this is a very interesting one. Let me talk about this here for a second. This is Alessandro Martinez with all the alternate positions, being from Manu, Argentina still in the World Cup. This card is not live, by the way, but the fact that they're still in the World Cup, I think brings a little bit of extra hype to this card since people get to see him play still as his team and his nation are still live on the biggest stage right now. And he's gonna be playing here pretty soon again in their semi-final game, but I think this card could rise up a bit today. I'd be careful with it.  I think a lot of people wanna wake up today, get the rewards, try him out as a center back or as a center defensive mid in game. So keep a close eye out for that card. He could be moving kinda like Giroud did last week, if you remember how that card moved on the market. So a lot to talk about with the market, with that SBC, hopefully today is a big Monday of FIFA 23. If you guys enjoyed this video, smash thumbs up on it. And down below if you have any questions and subscribe if you do, it's been Nate Foot account. I'll catch you guys later. Peace out.


How can I change my Moodle front page? As an administrator, you have a number of options to make your front page look good. Your Moodle front page is known as Site Home. This is the page non logged in users see. With Moodle Cloud Sites by default, you just see the login page until you are logged in. As an administrator, you can decide whether logged in users are taken straight to the site home or to their personal dashboard. You can do this from Site Administration, Appearance, Navigation. The default is to go to the dashboard because this personal page gives information about a student or teacher's courses, deadlines and more. We'll explore the dashboard in another video. From Site Administration, Front Page, Front Page Settings, we can change the long and short name of the site and add a summary. This summary is only displayed in a side block however. You can then decide what to show on your front page for non logged in and logged in users. You can show the same for both or you can show nothing except your summary and perhaps an image. We'll show nothing for non logged in users and a list of available courses for logged in users. Read the documentation for more information. We make sure Include a topic section is ticked here. That will enable us to add a summary in the central area of the front page, the Site Home. And then when we click Save Changes and click to Site Home, we turn on the editing from the cog icon top right. Clicking the icon on the left brings up a text box where we can add a summary of the site and an image. To summarise, the page logged in users first see can be defined from Site Administration, Appearance, Navigation. The Site Home page can be changed from Site Administration, Front Page, Front Page Settings. A summary and image may be added and relevant course information displayed.


Income tax 2022 2023 small business how to pay income tax. Let's do some wealth preservation with some tax preparation support accounting instruction by clicking the link below giving you a free month membership to all of the content on our website broken out by category further broken out by course. Each course then organized in a logical reasonable fashion making it much more easy to find what you need than can be done on a YouTube page. We also include added resources such as Excel practice problems PDF files and more like QuickBooks backup files when applicable. So once again click the link below for a free month membership to our website and all the content on it. Most of this information comes from the tax guide for small business for individuals who use schedule C publication 3 3 4 tax year 2022. You can find on the IRS website irs.gov irs.gov looking at the income tax formula. We're focused online one that being income. Remember in the first half of the income tax formula is in essence an income statement. Although it's just the outline the scaffolding other forms and schedules feeding into it. When we think about line one we're focused primarily on the schedule C. Another schedule which is in essence an income statement for a business having income minus expenses which we can think of as business deductions getting to the net income that flows into this top line of our income tax formula. This is the first page of the 1040 we're focused online eight the schedule C flows to the schedule one which flows to the first page of the 1040 here. Here is the schedule C which in essence is an income statement with income and expenses. How do I pay income tax. We're thinking about this question from the perspective of a small business owner one that reports on a schedule C. Federal income tax is a pay as you go tax. You must pay it as you earn or receive income during the year. Although most people have probably heard this and are probably paying on a pay as you go system. I don't think this concept really sinks in for many people and when people move from a W to type of employee situation to their own business they are often shocked and don't fully understand this concept in my experience. So let's take a step back here and think about the big picture. We have an income tax type of system that means we're going to be taxed when we generate income. The federal government has incentive to kind of have oversight on the tax that we are paying one way they can do that is to try to be more intrusive and get information about the tax that is being paid. That means that the federal government has leverage over the pay or in a transaction. If you have an employee employee or situation the government has leverage on the employee or the one that is paying because they're the one that wants the tax deduction. So they're going to force the employee or to act as their tax collector. That means that they're not only reporting to the government your wages W2 wages. They're also actually taking the money from you before you receive it withholdings and giving it to the government. Now the government would want that to happen during the year as the year goes through because what they don't want to have happened is that you file the tax return by April 15 of the following year. And then you have this big tax bill that in essence you can't pay at that point. So if the government wants to get paid it makes sense for them to want to get paid during the year at each paycheck you give a piece to the government. That means it's they're more likely to receive their money than if they waited till the end of the year and then you give them all of the money at one point in time. So the problem with this kind of system is that we don't have an easy tax system. If we had just a flat tax type of system that would be very easy to do and you can see that in the payroll taxes which are more simplified flatter type of taxes. We could just say OK it's 15 percent it's 10 percent and in whatever our pay is we multiply it by 15 or 10 percent or whatever and we pay that to the government as we go. But we don't have a flat tax. We have a progressive tax that's combined with a whole lot of deductions and a whole lot of other complexities and credits and whatnot. That means trying to understand how much I should pay out of a single paycheck. When I when I think about how much I'm going to earn for the entire year is quite difficult. So that's why we have the W four form and we try to figure it out. And the goal is to shoot for a refund. We shoot for a refund not because we want to have just money to spend during that time like it's a holiday when we when tax season comes. But because we're trying to avoid penalties and interest by underpaying if we underpay then the IRS is going to hit us not only with the tax we owe. But also with the penalties and interest. That's what we're trying to avoid. That's why the tax tables are set up to overpay a bit because the complexity of the tax code isn't perfect and we can't hit the target. You know exactly. So when people move from a W two type of system when they're forced to do that pay as you go type of system and then they move to a schedule C type of system. Now they don't have anybody that's forced to act as the tax tax collector and and people often don't do the projections to figure out what their taxes are going to be for the schedule C type of business. And they get behind on their taxes. Now there's a few reasons for this. Sometimes people think hey that pay as you go thing the IRS actually kind of advertises oftentimes like the pay as you go system is a system that they're trying to help you out. We're trying to help you out by having you pay you know at every paycheck so that you don't end up paying at the end of the year. It's just something to help you out. And we're going to we're going to we're going to force the withholdings to happen during that time period. But that's not exactly the rationale for it. The IRS wants their money sooner because of one the time value of money. And and two they're more likely to get paid if they take a piece of your pay at each paycheck or at each interval rather than periodically at the end of the year. So it's not a voluntary thing. And it's not like they're trying to help you out really. They're trying to make sure that they get paid and they're trying to maximize how much they get paid. So it's not an optional thing. If you go to a sole proprietor type of business you still have to pay them as you go. The other problem is of course I don't know how much income I'm going to make. It's a new business. Even if it's not a new business my income could fluctuate wildly from year to year. So how can I figure out how much I owe when I have a progressive tax system and I don't have no idea how much I'm going to earn at the end of the year. That's a problem. You got to make a projection for it and you've got to try to figure it out. It's a lot more difficult to figure that out than if you had a W-2 salary situation where you know how much you're going to make. If I know I'm going to make 60,000 this year then I can figure out my taxes a lot more easily than if I have my sole proprietor business and I have no idea how much I'm going to make but I still need to make my estimated tax payments. And I can't just say well look I earned 20,000 in the first quarter so I'm going to pay a tax rate based on 20,000. So you're going to have to pay a progressive tax rate. That means you have to project out how much you made for the year and then figure out how much you would owe based on that projected number in order to get it accurately. The other thing that messes people up is the self-employment tax. When you're a W-2 employee they take out Social Security and Medicare as well and that is more of a flat tax. So when you report on a Form 1040 you don't really have to do any reporting much at all for Social Security and Medicare unless there's a problem. But if you're doing your own business the government wants the equivalent of payroll taxes which is Social Security and Medicare in the form of self-employment tax. That's another huge hit that people are just, it's just not in their mind much because that's just automatically taken out of their paycheck and when you think of the Form 1040 you think about income taxes and people often miss the payroll taxes. So that's some reasons why people get messed up when they go into the Schedule C and if you get behind on your tax payments even if your business is doing well that often is very damaging a start to a business. So keep that in mind. Employee usually has income tax withheld from their pay.  This is what I think the problem with our tax system is in a lot of ways is that the government is trying to make things so easy, so automatic so that individuals are all employees rather than contractors instead of having their own business they're going to be employees and then the employers are taking care of the system that people don't fully understand what is happening because they're not actively participating in the system. But at some point you're going to have to actively participate even if you're not a sole proprietor because at retirement then at that point you're going to have to do your own taxes at that time too. So I think that's one of the inherent problems about the government trying to automate everything and trying to be more intrusive rather than having a self-report and an audit system. But that's my opinion. If you do not pay your tax through withholdings or do not pay enough tax that way you might have to pay estimated taxes. So if you have a Schedule C business you might have to pay using estimates because you don't have any W-2 withholdings. So estimated tax payments you generally have to make estimated tax payments if you expect to owe taxes including self-employment tax discussed later a $1,000 or more when you file your return. Use form 1040ES to figure and pay the tax. Now you might say, well what if I don't? What if I don't make estimated tax payments four quarters throughout the year? Well then they're going to hit you with the sticks, what I call their sticks, the penalties and interest. What's your goal for taxes? To pay as little taxes as possible and then pay them hopefully as late as possible too. So if they weren't going to hit me with a stick I would pay them as late as I could just from a cash management standpoint. That would make sense to do if I can manage my cash and pay them by April 15th of the following year. That's what I do but I can't. Why? Because they'll hit me with a stick. I'll end up paying more money than I would have anyways because I'm going to have to pay not only the taxes, they're going to be charging me penalties and interest and my goal is to pay as little as possible. So if you do not have to make estimated tax payments you can pay any tax due when you file your return. So for more information on estimated tax you can see publication 505 if you want to drill down on it in more detail. What are my options for paying estimated tax? You can pay your estimated tax electronically using various options. If you pay electronically there's no need to mail in form 1040ES payments vouchers. So these options include. Now before I go into the options here realize that if you have a schedule C type of business you might be in a couple different scenarios. You might no longer be at a W2 employee and now you have a schedule C business instead. That's your primary source of income. In that case you're almost certainly going to have to make estimated payments unless you're going to run a loss on the business. If you have income that's significant you're going to have to make estimated tax payments in that situation. However you might be in a situation where you have a W2 job and you do some gig work on the side. You're just picking up some side money in that type of situation. Well in that case your W2 withholdings if that's all you have and you don't make estimated tax payments the W2 withholdings are likely not going to any longer be enough to cover the added income you're going to have from the schedule C business. So then you have a choice. You could increase the W2 withholdings in order to cover the added income that you have or you can have the withholdings from the W2 employee and make estimated tax payments for the schedule C type of business. So those are some options that you have when you're thinking about that. So how could you pay them? You could pay them electronically. One, pay electronically through the electronic federal tax payment system the EFTPS. Two, pay with direct pay by authorizing an electronic funds withdrawal when you file form 1040 or 1040 SR electronically.  Three, paying by credit or debit card over the phone or by internet. If you might pay by credit card I don't think the IRS charges you but the the payment might be charged from the credit card company. So an electronic transfers probably the cheapest way to pay them. If you go on to your account at irs.gov then you can you can pay them pretty easily. Find your electronic payment options if you can connect to your bank. Other options include crediting and overpayment from your 2021 return to your 2022 return. So note that the estimates of your payments become more and more important going forward. And oftentimes it's really kind of sad when people get get behind on their payment. They're paying employees and overpriced merchandise. Because because if they start a new business and it's doing well but then they get behind on their payment what ends up happening is by April 15th when they do their taxes of 2023 let's say for 2022 tax year they're going to owe the taxes and penalties most likely for tax year 2022. And then to get ahead of things because now they got behind on things they need to make the first quarter estimated tax payment for 2023 which is just a killer just crushing them at one time because they didn't they didn't realize the the the significance of the taxes because I think they because when you're a W2 employee oftentimes you're just not thinking about it because you're not actually participating in paying your own taxes. And so it's kind of a shock when you when you have your own business and people often get behind. So so another way if you have a refund coming from let's say your 2022 taxes for example you can either take that refund say give me the money or obviously you can roll it over and say just roll that in to my first quarter payment of tax year 2023. And then you can just pay the difference and keep rolling into 2023. So so it's not too bad as long as you're ahead of things but once you get behind on things then it starts to steamroll a lot of a lot of people. And again even businesses that would have been profitable like they're doing good and then but they just didn't they just didn't you know take this into consideration. They just don't want to believe it. What do you mean I owe all last year and the first quarter. Yeah well it's because anyway or mailing a check money or you can mail a checker money order with a form 1040 ES payment voucher penalty for underpayment of tax. So if you did not pay enough income tax and self-employment tax for 2022 by withholding or by making estimated tax payments you may have to pay a penalty on the amount not paid. That's the point that's what you're trying to avoid. The IRS isn't trying to be nice here. It's like well we're just trying to we're just trying to make you pay as you go so that it'll be helpful to you. So trying to help you know they want their money earlier and they want it to be more likely that they're going to get paid by making you pay them as you earn the money. And if you don't do it they hit you with sticks not literally penalties and interest and we're trying to avoid getting hit with the sticks not literally penalties and interest. So the IRS will figure penalties for you and send you a bill or you can use form 2210 under underpayment or estimated tax by individuals estates trust to see if you have to pay penalty and to figure the penalty amount for more information see publication 505.


Got something awesome for you. Guys, I'm gonna show you how to use the new Llama 3 large language model similar to ChatGPD4, for example, but I'm gonna show you how to use it for free. And not only that, in a lot of ways, Llama 3 is actually outpacing ChatGPD4 because it's newer, it has 70 billion parameters and it looks like they're going to expand it to 400 billion parameters in the very near future. So let me show you how to use it for free and then I'm gonna show you some examples as to why you might wanna use it, let's go. All right, so you'll see here that I am logged in and I just did four examples of how I would use a program like Llama 3 and in one I came up with some ideas for a recent video game. I said, hey, give me 10 YouTube video ideas for Harold Alibid. It just came out, apparently it's pretty good. Another idea I came up with is, hey, I'm gonna be sick for work tomorrow. Can you write me an email to say, hey boss, I'm sick. Not me, George, I'm feeling just fine, by the way. And it came and it wrote me an exact email for what I should send. And then I said, hey, write me, and this is no joke, a 3000 word essay on the witches in Macbeth. So if you're a student and you're looking for ideas, I do not recommend copy, pasting this in, but it literally wrote me the essay. It is nuts. And I have searched the web turned on, so it even gave me the sources, Bartleby.com, gradefixer.com, et cetera. And then finally, I got an example here of it creating a video game for me, a basic snake game in Python, giving explanations for each step. Now, I know this is all really, really cool, but here's the thing, it did it for free. Let's go, I'm gonna show you how to log in and rock and roll. All right, guys, so the first step and the most important by quite a margin is to go to huggingface.co. So watch this, hugging, I'll just type it in, huggingface.co forward slash chat. When you do that, it's going to ask you if you wanna try it as a guest. If you try it as a guest, you get like three or four cracks at it, and then it asks you to sign in. Alternatively, you could sign in with huggingface. And I'm just gonna go ahead and sign in. I want you to keep in mind that again, this is totally free to use. You can sign up with your email or your GitHub or your Discord, I believe. There's a whole bunch of ways to sign in, easy to do. Now that I'm in it though, this is very interesting because when you sign in, there's a very good chance that you are not in Llama 3. You've actually gotta select it.  I click on that, and you're gonna see here that it says active cohere for AI. Now, I'm not familiar with cohere. I'm sure it's fine, but that's not the one I want. What I want is Meta Llama 3.70 billion instruct. This is the one that launched today, April 18th. It's the best free one out there. Apparently, again, I haven't tested them all, but apparently it's really, really good. And so far that I've used it, it's good. So there you go. I'm gonna go ahead and select that. And now I'm gonna go ahead and activate it. So I'm just gonna click on it, activate it.  Now I'm also gonna go ahead and click on search the web. And why I do that is because this way it allows obviously to search the web, but if you were doing something like an essay and you needed to cite some references, this way it can pull in information from the web and use those references. Now, I'm just gonna ask it anything. So what, write me a review of Baldur's Gate 3. Make it long and detailed. Make it friendly. Make it for a YouTube video. And again, I'm just winging this guys. This is just me monkeying around, watch this. So here it is gonna give me what they think could be good for a Baldur's Gate 3 review. Now, here it goes. What's up gamers, welcome back to the channel. Today we're diving into the most highly anticipated RPGs of the year.  It's even giving you instructions. First off, let's talk about the story. Baldur's Gate takes free about 100 years after the events of Baldur's Gate 2. Okay, developer Larry in studios, cut back to the host. Okay, so it's giving you more instructions on how to be on camera, full of twists and tunes, turns, part of me, memorable characters. I won't spoil too much. Identity, morality, okay, I mean, this is good stuff guys, but here it is. This was just one shot prompt. Like I just typed it in and said, hey, here's what I want. And it gave me back a really good idea. Now it doesn't give you exactly what you should do. Of course not. You want to put your own flavor in, do your own thing. But there you go. There's just a quick idea as to what to do. Let's try a new one. Let's click on new chat here. Let's create a new chat. I'm going to show you another example. Write me a 2000 word academic essay on, and then what are we doing? Hamlet's Revenge, I don't know. Something like that. I'm just going to have some fun, right? Just click anything here. We're having a good time. All right, the theme of revenge is a pervasive and complex element. William Shakespeare's Tragic Play Hamlet. It's written in perfect English. This is crazy guys. This is what the new model can do right out of the box. Just saw me sign up. You'll know that I've got a free account here. It's cooking. I ain't doing nothing guys. This is amazing. You've got, oh geez, there comes the references. How good is that? It gave us not one, not two, eight primary references. Kierkegaard, Nietzsche, Hegel, Greenblatt, the books when they came out. Guys, you got to try this. It's free. Links in the description below. Let me know what you think. Thanks for watching.


The study aims to understand barriers and facilitators to enrolling and completing the National Diabetes Prevention Program, National DPP, among women, and provide recommendations for improvement. Semi-structured interviews were conducted with eligible women who declined or did not complete the program, as well as clinicians who treat eligible women. The study identified known barriers such as cost, time, and inconvenient locations, but also discovered previously undiscovered barriers including unmet expectations and facilitating referrals. Improved communication between clinicians, patients, and National DPP staff, more training for National DPP staff, better incentives to participation, and making the program more accessible through flexibility in time and or locations may improve enrollment and retention rates. This article was authored by Catherine Jane Williams-Bockham, Mandy L. Pershing, Caitlin M. Dwinger, and others.


DC Guard is always a partnership. We're in partnership with the city. The city needs assistance because as with anyone you know that they have staff that are experiencing exhaustion, maybe having some some medical complications coming up. So DC Guard is here in partnership to support the city and to be there as one. Again with COVID-19 and all the uncertainty that we have we picked up the phone we called our soldiers and time and time again our soldiers have been out here and have been the ultimate when it comes to professionals. We're at the heart of the nation's capital and trained and ready to do the job we have before us and that is to protect the capital and defend the nation. Missions like this absolutely support our partnership with state local and federal agencies. This is exactly what we are trained and ready to do. So on behalf of the senior leadership and me in particular I could not be more proud and offer a hearty and sincere thank you to all our service members on duty at this time.


Hi everyone. Thank you for joining us today. I'm Ori, a performance engineer and I'm very pleased to introduce Brett Simmers who's a software engineer at Facebook. Brett has been with the HHVM team for three years from the early days of the project and we're very fortunate to have him help us with the migration and lend his expertise to the migration process and yeah he's going to be talking about what HHVM is and what it means for you as a developer. So without further ado, passing it to Brett. So before I get started, who here has not heard of HHVM? Okay good. So I'll be doing a quick introduction just the history of the project and where we are now. So when you hear about HHVM, you might confuse it with HPHPC also known as hip-hop for PHP. This was a project that was started back in 2009 and it was when Facebook was adding users faster than we could add servers to support those users and so a few of our engineers decided to try transforming our PHP code into C++ with the idea that it would execute faster and that ended up being pretty successful. We saw a 2-5x performance increase over standard PHP and it was used from about mid 2009 until February of last year when it was retired and replaced by HHVM and yeah so it just it transformed all the PHP into C++ and then built that into a normal C++ program with a built-in web server and a lot of the performance gains came from static type inference so if you had a loop where you had a counter variable named I it would usually be able to figure out that I was always an integer and so in the C++ that we generated from the PHP, I's type would just be int and that would be a lot faster than operating on a generic PHP value and so that's where a lot of the wins came from and HPHPC probably saved the company because we couldn't physically install servers fast enough to keep up with the user growth but there were a few problems with it and so I think around mid to late 2010 a few engineers started coming up with ideas for replacing it so the main problems we wanted to solve were that we had separate development and production environments so originally when we first rolled out HPHPC we could run the site on HPHP or on the standards and PHP engine and this was fine because people would do their development using the standard PHP interpreter and then for production we would build using HPHPC and push that but after a while we decided that it would be worthwhile to start adding features to the language a few of the things we added are generators we added more type hints and a few other things and so as soon as we added features to the language obviously we added support for those to HPHPC but it didn't seem reasonable to add support for those to the standard PHP interpreter and so we ended up creating our own interpreter called HPHPI and that's what developers used in their development environment and this worked great but unfortunately it introduced a new class of bugs where because we had these two completely different execution engines between development and production there could be behavioral differences between the two so somebody would test their code on their sandbox it would work great and then it would get deployed from production and it wouldn't behave as they expected and so we wanted a way to fix this and the other problem was that the gains we were getting from the ahead of time type inference were starting to wear pretty thin because PHP is a dynamic language we need to be able to support the cases where 99.9% of the time a variable is an integer but 0.1% of the time it's a string and in those cases HPHPC wasn't able to statically prove that it's always an integer so we would have to fall back to the generic method or the generic value type which we call variant and that was just the representation of a generic PHP value and as you may guess the operations on that were pretty slow so we came up with the HHVM and yeah so it initially started as a project within the same code base we shared large parts of the runtime we shared the same code for operating arrays we shared a lot of the same code for creating objects and other stuff like that and we were able to take advantage of those cases where the type was one was one way 99% of the time and I'll get into that in a little more detail soon but but yeah it was able to make up for the fact that in those cases where we couldn't statically infer the type in practice it was one type most of the time and so this hasn't been much of a problem recently but one of the most one of the biggest points of confusion about HPH or about HHVM is how it relates to HPHPC and HHVM is written in C++ but it does not compile PHP to C++ so we got rid of that build step well we got rid of the required build step but there is an optional ahead-of-time compilation step that I'll talk about later that you can use for extra performance but it's completely optional because we want to get as close as we can to being a drop-in replacement for PHP 5 the development and production environments are almost exactly the same with HHVM solving one of the big problems of HPHPC and I'll talk about the almost in a little bit too and we fully support eval and all the other dynamic features of the language like accessing a variable using a string name and other stuff like that a lot of them are going to be really slow but we do support them okay so I'll just quickly show an example of compiling some code using HHVM so if you have this PHP statement that just multiplies a number by four and adds one the first step is compiling the PHP into bytecode and HHVM is a stack-based machine so all the inputs and outputs to these operations are implicit based on the operation so the first one up at the top just pushes the integer four onto the stack the next one loads local zero onto the stack which is n in this case and then we multiply the two and then we push one on the stack we add and then we store the result back into n and so this is the bytecode and we have an interpreter that can run the bytecode and you've probably noticed that apart from the integer bytecodes there aren't any types mentioned here and that's because most of the bytecodes are type agnostic they can operate on any type and this is good because it means it's flexible and the transformation from PHP to bytecode is pretty straightforward but unfortunately it does mean that the interpreter is kind of slow I think it's a little bit slower than the standard PHP interpreter and so to get our performance back we compile it down to x86 machine code and we have an intermediate step called HHAR or the hip-hop intermediate representation so earlier I mentioned that we try to take advantage of those cases where we know the type 99% of the time but we can't statically prove that it's always a certain type so the way we deal with that is by at the beginning of each chunk of code which we call a trace lit we guard the types of values that we care about so in this case we start by guarding that the first local is an integer and then we can emit the rest of the code assuming that it is an integer because we know that if at runtime it turns out to not be an integer the type check will fail and we'll go to the fallback mechanism so then the rest is pretty straightforward we just load the value and then we multiply t1 by 4 and then we add 1 to it and we store the result back to local zero and the t1, t2, 3, t3 are just anonymous values they roughly represent what you would see on the stack in the interpreter but there isn't an exact correspondence okay so then this is what we end up with for machine code so the first two instructions just compare the type tag for integer which is 0xA with the type tag for local zero which is that offset off of RBP and then so if this is too detailed for any of you it'll be over soon and the details aren't terribly important but so the first two lines check the type of local zero if it's not an integer it jumps to a stub that retranslates this code for whatever the type happens to be so if we get to this piece of code and n happens to be a double or a string instead of an integer then it'll jump to retranslate stub and it will go through the whole translation process again and it'll generate code that's pretty similar to what you see on the left of there except all the types will be double or string instead of int and then the next instruction loads the value from the local and then the rest are pretty straightforward we just multiply by 4 and then instead of adding by 1 we just use the increment instruction and then finally restore it back into the local okay so that was the very very compressed version of what HHPM is if you have questions about it at the end I'll be happy to answer them but the most important part of this talk is what you're getting yourself into by migrating to HHPM and the most important part that I mentioned earlier is that we want to be a drop in replacement for PHP 5 or as close as we can get so if you have some PHP that you wrote and tested using PHP 5 and it behaves differently using HHVM it's almost certainly an HHVM bug and there are a bunch of ways to get in contact with us that I'll talk about in a little bit unfortunately there are some places where we intentionally diverge and in our GitHub repository there's a file that lists all of these there are mostly things that we decided weren't worth getting right because it would hurt performance too much or the original decision was just so insane that we didn't think we would go along with it and we don't have a built-in web server early versions of HHVM did and HPHPC did have its own built-in web server but we noticed that a lot of the questions we were getting in our IRC channel and on GitHub were related to configuring the web server and since we're mostly compiler writers we're not web server developers we decided to try to get out of the web server business and so now you can just use HHVM with fast CGI behind Apache or nginx or whatever your current web server is and so the the two to five x performance increase that I mentioned earlier was running facebook.com and because that's the code base that we use to build HHVM and tune it and with other things like WordPress and Media Wiki and Sugar CRM and other popular PHP packages you'll typically see a one to three x or a one and a half to three x performance improvement and then the main weakness of HHVM that you'll probably run into at some point is we have some high startup costs for a few different reasons and I'll get into that later okay so if you run into any problems you can just go to HHVM.com that's our main website and it has links to all the rest of these but just the most important ones to remember are you can file a github issue that's the best way of reporting a problem to us and then we have a few Facebook groups that you can post in for help they're kind of like mailing lists but on Facebook and then we also have some IRC channels on FreeNode. HHVM is for general use of HHVM and then HHVM dev is if you're interested in developing HHVM or if you're trying to debug a really tricky problem okay so the performance story is kind of interesting because as I mentioned we've added some features to the PHP language and so we can't compare the performance of Facebook.com on PHP 5.6 versus HHVM because we use a whole bunch of language features that are only in HHVM and we're trying to get as many of these features as we can into upstream PHP and we've succeeded with a bunch of them I think the generator implementation in current PHP is pretty is mostly compatible with what we do and I think they're looking at adding support for type hints on non-object types but until PHP supports everything we've added to the language we just can't run Facebook using normal PHP so the 2 to 5x number that I mentioned earlier is kind of a guess based on what the performance looked like at the last point that we could run Facebook using normal PHP and the relative games we've seen since then and of course we can always use micro benchmarks and it's fun and there are lots of micro benchmarks where we're 10 or 20 times faster than standard PHP but in the world world they really don't matter you can make a micro from benchmark two times faster without affecting the performance of a big website like Facebook or Media Wiki and so yeah they're fun to look at but they usually don't mean that much the biggest non Facebook package that we can run reliably and people have tested pretty heavily is WordPress and I think the results on that are that we're generally two to three times faster and for Wikimedia I don't have any numbers for the full site but we can parse the page for Barack Obama in 40% of the time that it takes PHP 5 which is pretty encouraging and then yeah so repo authoritative mode you might remember a while ago I mentioned that although we don't have the mandatory compilation step from PHP to C++ and then to a binary we do have an optional ahead-of-time compilation step and I think the plan is to not get this right away but assuming you do get fully on HHVM once you are there this is a really good thing to look at at least on facebook.com we generally see a 30 to 40 percent performance improvement on top of the gains that you already get from HHVM and most of the gains come from ahead-of-time type inference that is pretty similar to what HPHPC did and even though we can't infer all the cases that matter we can infer a lot of them and so if we can statically prove that a certain variable or a certain object property is always of a certain type then we don't have to garden that at runtime and that can save a lot of time it also does other things globally that we can't do in the JIT when we're working within a function so it can globally propagate constants it can tell us when a static where when a function call can be statically bound because in PHP you can define a function to mean any number of different things you can either include a different file or you can define the function conditionally in the body of an if statement and we wanted to handle all that correctly but we also want to handle it efficiently in the common case where there is only one definition for a specific function or a specific class and the main difference if you do decide to use repo authoritative mode is that instead of deploying all your PHP files like you normally would you'll deploy a bytecode repo which is just a SQLite database containing serialized bytecode that's been parsed and optimized and then serialized into this database and you just push that out with your binary and it means that when the server is running it doesn't have to check to see if the PHP files have changed between each request and because it contains bytecode instead of PHP it can contain all sorts of useful metadata about types that were inferred statically the main disadvantage of this apart from the additional operations overhead is that eval is not supported i'm not sure if you actually use it much in production but it is possible theoretically to support a limited version of eval and we've been thinking about doing that so if you wanted to just evaluate a math expression or something like that then that should be theoretically possible but for now it's just unconditionally banned and although eval is not supported most of the other dynamic features of the language are so you can still use dynamic object properties you can still access local variables using a string name and those are all supported they're just going to be really slow because when something like that happens the static analysis will mostly give up on that part of the function because it's too tricky to get that right and when we're compiling it in the jit it'll also give up on certain optimizations okay so now the bad stuff i mentioned that there's some startup overhead that you might need to deal with and there are two main types and i think this is probably one of the most commonly misunderstood parts of hvm the two parts are there's a bytecode cache and there's a jitcode cache the bytecode cache which is the same format as the repo from repo authoritative mode lives on disk it's built up automatically and on demand so if you just run hhvm on your php script it will read in the php it will parse it it will convert it to bytecode and it will save that to disk and so that means the first time you do that it'll be kind of slow to start up but then anytime you run hhvm on the same php file again it can just read it out of the bytecode cache instead of parsing the file obviously if you change the file it's going to have to reparse it but in a large code base where you have lots of different files you're normally only going to be changing one file at a time or a small handful of files so that's the bytecode cache it's persistent it lives on disk and if you have your configuration set up correctly it can be shared between different users and then the second cache is the jitcode cache and if you remember the code example that i showed earlier this is where that code lives it's built up at runtime it lives completely in memory and it is rebuilt from scratch every time we start the process and that's pretty standard for a jit it's just something that a lot of people don't realize when they're running hhvm and it is pretty expensive to generate so generally compiling a piece of code will take 50 to 100 times longer than it takes to run that piece of code so if you have a big script that runs maybe a million lines at php but each of those lines is only around once running with the jit will actually be a net loss so that's why for small command line scripts and other short-lived processes we actually recommend running with the jit off but a good way to work around that is that you can convert whatever your script is doing to run in server mode and that way the process stays alive and you just send requests to it using fastcgi and i think erin has already done that with the job runner so that was the main weakness that we've already dealt with and it's usually not that much of a problem there are there are things that behave differently in command line mode and server mode but there actually aren't that many so the process of converting your workflow to server mode usually just means starting up a server and then hitting it with a request using the right file name you'll usually only run into problems if you need to read from standard in or something else like that okay so that was all operation stuff that you might run into when you're deploying hhpm but when you're actually writing php there are a few things that you can do to make hhpm happy some of these are good for static analysis some of them are good for the jit and some of them are good for both and a lot of these are just good things to do in php in general i don't think any of them are really that specific to hhpm so the first one is to declare your object properties if you just use object properties without declaring them then they end up going into a hash table in the object and it's a lot slower than accessing the declared properties which we can access using a fixed offset kind of like a struct in c and so this is not just for performance but this is also good for correctness if you use type hints on your function parameters then that will help static analysis and it will also help you catch some bugs this is one thing that is more valuable in repo authoritative mode than normal mode and then this next line is kind of a generic don't use the really dynamic parts of the language like eval $n to access a variable with a string name don't define it constant using a non-constant name don't use compact and extract those are things that either take the current local variable environment and put it in an array or in the case of extract it takes an array and it explodes that into the local variable environment of the current function extract is also really really bad for security reasons so you just shouldn't be using that in general and then define all your classes and functions at the top level so this goes back to what i said earlier about how in php you can define a function inside an if statement so you can say if foo then function x blah blah blah else function x something else and like we don't know which way that if statement is going to go and so until we actually run the code if someone calls x later on we won't know which x they're actually on the call and one thing you can do to avoid this is define all your function classes at the top level unconditionally and if you give them all unique names then that will help a lot since we know that if you're calling a function x and there's only one function x in the code base we still have to make sure that you actually defined x but we know that if it is defined it's going to be this one specific x and then so the second to last bullet point which is keep as much code as possible inside functions this is less important now than it used to be but it's still pretty important and what that means is so if you just write a normal php script and have some code in the the far left margin just not inside a function or anything we call that a pseudomain and we used to not run pseudomains through the jit for a couple different reasons that i can get into if someone is interested but the important point here is that the type flow logic that we do in the jit is much simpler to reason about inside a function instead of these pseudomains and so in large code bases this tends to happen naturally so you probably have most of your code in object methods or in functions defined in a bunch of different files but it's just something to keep in mind and then the final most important point is that well you should keep all of these in mind don't spend your time micro-optimizing your php code so the point of hhvm is to run whatever php you throw at it as quickly as we can and there are certain things that we're just never going to run quickly like eval and extract we're just never going to handle those very efficiently but as long as you keep these general guidelines in mind you shouldn't have to worry too much about oh how is hhvm going to compile this php and you don't you shouldn't have to worry about things like cache performance that's mostly our job and if you have a piece of php that you wrote in a straightforward manner and it's not running as fast as you think it should then it's possible that that's just something we haven't optimized yet and so if you file a github issue or come ask us about an irc then we can try to optimize that yeah uh is there a mode in which you get warnings about this if you do all these things our advice against i know there's hhvm-l will that warn if you're doing these things that are not ideal no i don't think it will i think the dash l is mostly just to make sure that your syntax is valid and a few other things but that's actually a good idea it wouldn't be that hard to warn on these at least in the case of eval if you try to use that in the production mode or repo authoritative mode it will fatal at runtime but for the other things no we don't have warnings for those i have a question to um first i want to say there are 35 people watching on irc so we have about 60 people watching but the question from irc is any worry about memory leaks in job runner in server mode does the parser leak okay so there are two parts to that question there's so php because it uses reference counting for memory management it's pretty easy to introduce a cycle into your objects and in that case if you have a php request that is running for a really long time and if you're building up a bunch of objects that are stuck in cycles then those objects will leak over time but i think i think in the job runner that is being asked about the requests don't actually run that long they typically stop after about a minute and so in that case the all these all the memory that you allocate as a php developer is going to be freed at the end of the request that's just part of the way because of the way we allocate memory in hhvm and so if you have 10 000 objects that are stuck in a cycle they'll be there until the end of the request and there's no way to get rid of them but at the end of the request they will be freed and so the short answer is that it depends on how long your requests are if the request itself is going to go on for 10 or 20 minutes then you might have to be careful but this shouldn't be different in hhvm and then the other harder part of the question is if you have a custom extension written in hhvm that is allocating memory from malloc you do have to be careful to free that memory at the end of the request and we have a few different ways to help you with that but if you're writing c plus plus code to extend hhvm it is possible to introduce memory leaks um so you said something about um conditionally defining functions a lot of kind of stuff um we do have some code although less than i thought we did um where we go like if not function exists something then define something because it like comes in from like an optionally compiled in module or something and we cannot assume that the the platform that is installed um is is that like covered by our list of things that are horrible it depends but the short answer is yes i heard a yes from the audience is it um so yeah so the the really good answer to this will take a long time but the short answer is that if you can avoid stuff like that you should right so i guess the thing here that that's that you're sort of implying is that mixed types are bad for performance at least i heard a rumor that mixed return types are really bad is that true and why how um so i guess there are some contexts where mixed return types could be worse than in other cases um so the most important thing is that in hhvm mixed return types are not as bad as they were in hphpc because in hphpc you would have to fall back to the fully generic code path but with hhvm so going back to this example so this code that we have on the right if you have six different types flowing through this piece of code we're going to spit out a version of this for each of those six different types and then at runtime we'll select the correct one to run so there is going to be the overhead of the type cards at the top failing until we get to the right one but once we've made it pass the type cards which are generally pretty cheap it's going to run this code that was emitted for those specific types so well you should avoid mixed types when you can you really shouldn't jump through any hoops if you if that needs to be done because part of the power of php is that it is a dynamic language and you when it makes sense you can be a little bit loose with the types um talking about it in the context of return types that could mess up the static analysis a little bit so if you have a function x that always returns a string then wherever we see a call to x we know that the return value is going to be a string and we can optimize based on that but if one of the cases inside x returns an int then i think for now we will fall back to saying that we don't know the return type of x but again once the call to x is finished even though we don't know the return type we're still going to go through the same procedure and emit the specialized machine code that we dispatch at runtime okay another question um when hhbm gets really slow for dynamic features does that mean slower than default php would run or just slower than hb hhbm could run so it should be based on some tests i've done with the interpreter it should be about the same speed as standard php i know that they've been doing a lot more performance work on their interpreter than we have since we're mostly focusing on the jit so the short answer is it should be about the same as standard php maybe a little bit slower and that's only in the parts that use the dynamic features so like if you use a dynamic object property in one part of your code base it's not going to magically make the rest of the code slower there we go what's the availability on profiling tools as far as finding some of these hot spots actually in a production environment so that we can go in and then tune them yes so we have a tool called ph prof which so you're talking about profiling the php code itself right yeah so this tool we have called ph prof which is built into hbm and you can turn it on without any special compiler flags or anything it will basically profile every function call and then the data it gives you back i think if you want it in a pretty format you'll have to do some post processing on it yourself but it'll give you pretty much what you'd expect from a profiler we have a tool internally that will generate a call graph and it'll show the inclusive and exclusive time spent in each function so that is available nice is that something that can actually be run in a production environment or would we sort of set up okay awesome so the profiler is off by default but it can be turned on by php code at runtime well that was all i had so is actually perfect timing with the first question is there another question up here following up on Brian's profiling question do you support the x debug protocol for inline debugging we do not but we actually have an intern working on that right now so if that goes well we should have support for that in a month or two um sort of a non-technical question but um could you um share anything about the decision to open source hhvm what motivated you to do it and um what your experience has been so far sure so i think so um hphpc was originally open source i think so we rolled it out internally in 2009 and i think it was open sourced in the beginning of 2010 and i think back then the main reason was that there's no reason not to and we thought the rest of the world could benefit from it and because the it was kind of hard to deploy and there was this extra build step that a lot of people didn't want to go through we didn't really see that much adoption of hphpc externally um but with hhvm we saw that if we did things right we could build it as mostly a drop-in replacement for php and so the if you were watching the history of the project on github there was a period of a couple years where it was pretty quiet not much happened every month or so we would do one big commit that had all the changes we had done in the past few months which isn't which only just barely counts as open source like the code was available under an open source license but there wasn't much support available externally and there wasn't really a community around it and so once it became clear that hhvm was going to successfully replace hphpc we decided that we would put a lot more effort into it and yeah i think the main reason is that it's like it's been pretty important to our success but releasing it to the rest of the world isn't going to hurt us and it's going to help a lot of people and um yeah so i think so you also asked about what it's been like yeah so it's paul who is originally going to do this talk would probably be a better person to answer that but for me personally it's been a lot of fun it's it's really nice to be able to say that what i work on is this big open source project that is gaining in popularity and it's um we've gotten a lot of useful bug reports we've gotten a lot of useful contributions from the community and there are also benefits to the company it's it's useful for recruiting i know that a lot of people have said that their interest in working for facebook was helped by the fact that we had this big open source project i know that was kind of a long rambling answer but did it help okay i have a question um so i'm a product manager so i think a lot about users how does this manifest this um the speed increase manifests and uses so it should just be faster page loads so i know that most of your requests are from varnish and they're cached so obviously it won't affect those but once you have someone logged in and editing a page it should hopefully mean that when they click preview or when they click save that should be two to three times faster sweet which would be pretty neat um so i guess just a political question are you so you're making extensions to the language um are you tied to php fig or other standards groups or is this uh is facebook making making these changes on their own so the original changes we made to the language we just made on our own we did it all all the discussions were done internally um and they were mostly driven by common pain points that we saw from our php developers um you might have seen that we announced recently that we've been working on a spec for the php language and i think we've released a chapter of that as a preview and the idea with that is that it's been something that the php community has wanted for a long time but it hasn't really existed and so the closest thing that there's been to a php spec has been the implementation of php posted at php.net and so this version of the spec was written based on php 5.6 i think and so it doesn't include any of our extra features um so what was the specific body you mentioned oh um i mean i'm kind of wondering if if you if you were able to unmoor yourself from the php figs stagnation but uh but you know i'm not i'm not that familiar with it i'm just wondering yeah if if there's a collaborative process to come up with more language extensions like i know there's a hack is internal to facebook is that true so hack is open now i actually have a few slides about that that i forgot about but i can talk about those if you're interested um but yeah the the early extensions we just did on our own because we just wanted to get them done so we could take advantage of them but now that we're doing more of our development in the open we are going to try and involve the rest of the community and it's not going to be look here's a thing we did it's going to be here's a thing that we think is a good idea what do you guys think hopefully we can come up with something that both hhp and php can implement the same way yeah show us the slides about hack do you have one more question first um in part to the code we return sort of anonymous objects is just a raise presumably for performance benefit it's better to turn those into classes with specific declared members yes it probably will be um so a lot of that depends on how much we're able to statically infer so if you have a function that always returns a specific object type and that object does have declared properties then that will generally be faster than an array with string keys um did they estimate how many servers less they needed thanks to using hhpm as opposed to the standard zen php yeah so that was what i had on the one of the first slides is that well yeah so this two to five x number is kind of an estimate as i mentioned earlier because we can't run facebook using the standard php interpreter and so whenever we say something is like a two x win or a five x win we're talking about cpu time used and so generally if your application has a two x win that means you should need half as many servers and so that's a very very very rough answer do you have a favorite hhpm exclusive feature probably generators and async functions should i go into what they are or was that okay well so just quickly if you if you use python you're probably familiar with generators and async functions are we're actually originally implemented using generators and it's basically just a way of doing cooperative multi-threading within your php program and we use it to do non-blocking IO internally so talking to the database and memcache it it just makes the flow of your program a lot simpler instead of manually like calling an asynchronous mysql API and then passing around the handle and then waiting on it when the time happens you just use the await keyword which indicates i care about this value and then hhpm will suspend your function until the value is ready and then resume execution um i um okay um i am speaking of hhm specific features i heard about this feature that allegedly exists where there is something that helps you build like html doms in php with like native correct spacing and stuff like that yeah so that's xhp okay and i think um so i don't have any examples of it but it basically lets you write what looks like raw xml in your php and we end up transforming that into a tree of objects that you can then tell it to render itself and it automatically escapes everything so you don't have to worry about cross-site scripting attacks and stuff like that and that is built into hhpm for it to be really useful you need a core set of classes for things like links and headers and stuff like that and i think those are available on github somewhere okay cool two questions um is there a way to uh warn against to have hhpm worn if you're using these php extensions because mediocre we still want to have our code just run on sort of default php yes so i think by default these extensions are not on and you have to turn them on either by um converting your code to hack which i'll talk about or by turning on a specific flag which enables the hhpm specific extensions great my other question was um the when you declare when you have a variable but it doesn't have the value until and then halfway through your function you give it a value does that sort of trigger having to handle multiple types or does hhpm sort of deal with something transitioning from an undefined to being a string or whatever right so we should deal with that fine um all the static analysis that i mentioned is control flow sensitive so if you have a variable x that you set to a string halfway through your function we will know statically that everything after that x is a string it's only if you have like if some function called an x equals a string else x equals some integer and then after that we only know that it's either an int or a string okay so i'll quickly go through the hack slides so for those of you that haven't heard of it hack is our internal version of php well it used to be internal it's now open source at hacklang.org and there have been a lot of misconceptions about it but it's basically a safer more sane subset of php with additional type annotations it's statically typed so you have to but you don't have to declare the type of everything you do have to declare the types of your function parameters your object properties and function return types but everything else is inferred it's compatible with php because it's basically just a subset of php if you're running hhvm you can run hack code and php and they can call back and forth between each other and there's no runtime overhead all the internal object representations are the same at runtime and all that and yeah if you know php you won't have any trouble reading hack you might need a little bit of time to get used to writing hack but it's really not that bad so this is just a pretty quick example the top is php and the bottom is that code after it's been converted to hack so this is just a function that takes in a map and it passes each item in the array through sanitize function and then sends that to the database so you'll notice a few changes the first one is that the data parameter now has a type and it's a map from string keys to string values and map is one of our replacements for the php array if you've been using php for a while you're probably familiar with the many uses of php arrays and how these many uses are sometimes not great things to have in a single data structure and so we noticed that in practice most php arrays were either a map or a vector like array where the keys were just zero through n and so we created a few classes to just embody these specific use cases so there's map there's vector which is just like a c array there's pair which just has two elements and they're set so map can map from strings or integers to any other value set can hold strings or integers and then vector can hold any any type so that's what data is we're just saying that previously data was always an array and it had string keys mapping to string values and now we're just being more explicit about that and so we create a new map and you'll notice that we've added support for these new collection classes to all the built-in language features so you can still use for each with your map and you can still use the key value syntax and that all just works as you expected and another important thing about this is that if you do pass data back into PHP code map is just an object and so it's going to be passed around and if PHP code was expecting an array and does a for each that'll just work as expected and then we call sanitized we put it in the map and then we send it to the database and so you notice that there really aren't that many changes here so we automatically inferred the type of sanitization and we know the type of k and v and so if you're familiar with c++ it's pretty similar to just declaring everything auto the type checker it knows the values that you're putting in these locals and so there's no point in making you be redundant about it are there any questions on this part okay but yeah so this is hack it's not scary it's not a brand new language to learn this is an example of what the type checker looks like so in this example you notice that the line that is underlined in red we forgot to specify a key for the map and if this had been normal php code then that would just append the value to the end of the map using the largest integer key that had not been not yet been used but that's not what you want since this is a map from string to string so the type checker yells at you about that and that's just one example of the many common mistakes it can fix if data or if sanitized data had been a vector instead of a map then this would be just fine because depending to the end of the vector is something that makes sense and it's something that people do pretty often so i already covered this you only have to annotate a few things and you might already have type hints on your functions so there might not be that much to add everything else is inferred and these are the types that are available all the normal php types we have int, string, bool, double, classes, arrays we support nullable types so you can say this thing is an int or null and then if you want to pass it to a function that takes an int you have to check if it's null first and the type checker is smart enough to notice that in this branch of the if statement i know that it's actually an int it's not null support tuples, closures, collections we also support generics and one thing that is a common source of confusion is that the generics don't mean anything at runtime all of these type annotations are mostly for the benefit of the type checker and so because php is dynamically typed it doesn't really make sense to have to so if i have a function foo that takes a type parameter if you're coming from c++ then you're used to that function being duplicated for all the types that you give it but in php that doesn't make sense because at runtime all the values are just mixed and so if you start getting fancy with your types using generics and constraints just keep in mind that all of that is ignored at runtime except for parameter type hints like the map here since those are verified we also support verifying return type hints but i think it's off by default um yeah so that's hack any questions about hack that was the very very compressed introductions i didn't know how much time i had to go over it not necessarily related to hack but i'm wondering if with all the metadata you're now collecting um you have improved the performance of the reflection classes yes um i i think it depends on what specifically you're worried about with reflection but i think that we have um so are you asking about like specific jet optimizations to improve it or um more and more it's just that currently when you run a reflection operation on a class say for example finding the finding of a function is defined that's actually fairly slow in the current implementation in php okay php goes back and like looks back at the original file and figures that kind of stuff out rather than like just having the metadata pre-calculated so we don't have to do that we do have all that metadata stored in memory and like if you want to instantiate a new object with a string name class instead of using the actual class name that's obviously going to be slower um but yeah i would expect it to be much faster than having to go back and parse the file and figure out that stuff is actually there and if there so if there's something in reflection that you're using a lot in production and you've noticed that it is slow in hhfm then you can come and ask us about it and there's a pretty good chance that it's just slow because we haven't tried optimizing it yet awesome thank you so much brett thanks ori and rabla and brett and paul i really appreciate you coming and talking to us about this