1676136900
If you want to get more views on YouTube, you need to respond to viewer comments, create video playlists, design attention-grabbing thumbnails and more.
20 Ways to Get More YouTube Views
1. Ensure your YouTube basics are up to snuff
2. Zero in on your specific niche (and your ideal audience)
3. Do your research, and improve your video’s search ranking
4. Use metadata to get recommended after a popular video
5. Craft the perfect title
6. Spend some serious time on your description
7. Tag like you’ve never tagged before
8. Increase your views with custom thumbnails
9. Multiply your views by creating playlists
10. Direct traffic to your videos using cards and end screens
11. Go beyond the how-to video (i.e., make videos no one else is making)
12. Build relationships with your viewers
13. Partner up
14. Promote your YouTube videos across all your social media channels
15. Ask your viewers to subscribe to your channel
16. Enable embedding
17. Amp up the watch time
18. Transcribe your videos
19. Post your video at the right time
20. Game your analytics
Want more views on Youtube? Of course you do. You’re a human with a pulse and a video to share! It’s only natural.
YouTube is still the world’s most popular video-sharing social network. The site gets more than 14 billion visits each month — more than Facebook, Wikipedia, Instagram, or Amazon. 62% of adults in the U.S. are on Youtube site every single day. (We could go on, but you can read all the latest YouTube stats on your own time.)
We’ve compiled this guide to point out all the easy wins that will amplify your brand’s message on YouTube, but we’re also going to detail some of the more advanced techniques the pros use to get more YouTube views.
To see how we’re getting views on our YouTube channel (which we started from scratch because YOLO), check out our cool video:
Psst: If you’re starting from scratch, too, we have a primer on how to create a YouTube channel.
Now, let’s get those views rolling!
Each time a viewer intentionally initiates the playing of a video on their device and watches for at least 30 seconds that counts as a view. Pretty simple!
If you play your own video, that will be counted as a view.
If a viewer watches your video more than once, each screening will be counted as a new view. (That being said, refreshing over and over again to try to game the system will be detected by Youtube.)
Any views that take place with embedded Youtube videos or Youtube videos shared on Facebook will also be counted.
Live views are counted on YouTube, too.
Youtube analytics are updated every day or two, so if you’re not seeing an instant reflection of your activity, check back later.
Globally, people watch over 694,000 hours of YouTube every single minute. If you want to stand out from the crowd and snag some of those eyeballs, here’s how to do it.
First, we walk, then we run. Take a look at your fundamentals and make sure you’ve ticked all the boxes. Read our list of beginner tips for YouTube, then come back to dig into our advanced tactics.
Your basic YouTube housekeeping includes:
If you’re aiming to optimize your YouTube marketing strategy, you want to get precise and ruthlessly selective about your goals—and the content that will get you there.
Because you aren’t making videos for everyone. You’re here for someone special: your audience.
Deep Game’s Youtube channel, for instance, creates content for an audience of basketball players—ones who are interested in improving their own game. It doesn’t get distracted trying to offer soccer or dodgeball players the same type of content: this is all b-ball, all the time, and Deep Game’s 877K followers love that.
Pro tip: Have you worked up your audience personas yet? They’re kind of like Dungeons & Dragons characters, except make it business.
Yes, YouTube is a social platform, but it’s also a search engine. And one of the top strategies for getting more views is YouTube SEO, i.e., optimizing your videos for search.
In other words, when your ideal viewer types in your chosen keywords, you want your video to rank near the top of YouTube’s results list. That means you need to know what your audience is looking for—tutorials, inspiration, or entertainment.
Ranking in search results is the best way to get brand new eyes—not just subscribers and people who are already interested in your channel (although we’ll talk more about them later) — on your videos.
But this is easier said than done. So, what can you do to improve your videos’ search ranking on YouTube?
Research. You’re going to want to use a tool like Google Keyword Planner (note that you’ll need to set up a Google Ads account) to do two things:
Pro tip: If you haven’t already, now is the time to familiarize yourself with how the YouTube algorithm works. This AI determines not just search results but recommendations for that important “what’s up next” suggested videos sidebar, too.
Just remember that it all comes back to your ideal viewer: the algorithm doesn’t care if your video is “good.” It cares if a specific user wants to watch it. That being said, users typically want to watch “good” videos.
If your goal is to get more YouTube views, take a cue from the most popular videos in your niche.
Start by taking a look at your top competitor’s most popular video. (Go to their video library and sort by “most popular.”)
YouTube’s main goal is to keep viewers on the platform for as long as possible (so that they’ll see as many ads as possible.) Thus the algorithm’s job is to feed viewers one (hopefully appealing) video after another.
But how does YouTube figure out what people might like? The algorithm takes the following into consideration:
The only point you can control here is the third.
So when you’re choosing keywords, think like a librarian. Describe your video’s topic and describe its overall category, and think of other words a person might use to search for that topic.
Need a little inspiration? You can actually peek behind the scenes of a competitor’s video to see what keywords they use by right-clicking on the webpage and selecting View Page Source. Then CTRL-F “keywords” until you find the list.
But before you go ahead and just copy-and-paste a more popular video’s metadata over to your similar video, think about your audience: they won’t want to watch the same video again. Maybe the first video raised a new question that needs answering, or there’s an interesting tangent to be explored. How can your video add value to what they just saw so that they’ll want to click on it?
Take the ball and run with it.
Your title is where you put all those keywords to good use. Your Youtube video title is going to make or break you: it’s your chance to impress both the Youtube algorithm and a potential viewer.
As Youtube Creator Academy states: “Well-written titles can be the difference between someone watching and sharing your video or scrolling right past it.”
What is a well-written title? You’ve come to the right place. A great title…
For inspiration, just take a look at Youtube’s front page and think about what videos you want to click on. What qualities do the titles have in common? Is “We Quit Alcohol for a Year, Here’s What Happened” more enticing than “Tutorial Made Easy?”
We’ve hinted at it above, but incorporating keywords into your description matters a lot… and where you use them matters, too. According to Youtube’s Creator Academy, the first few sentences of the video description are weighted more heavily by the algorithm and search, so make sure you’re taking the time to craft a crystal clear, keyword-packed intro.
Those first few lines should also be intriguing to humans (not just Google bots!) because that’s the preview users see when your video appears on search. Give ‘em a taste of what you have to offer: this is your chance to sell, sell, sell.
Beyond those first few lines, we recommend getting into some real nitty-gritty detail about what users will learn from your video. Aim for 125-175 words if you can (and include a variety of keywords in your paragraphs. You know the drill!)
If you don’t have enough to say about the actual video itself, this is also a great place to remind viewers what your channel is all about and link out to your website or social accounts.
Check out more tips on effective YouTube descriptions and keywords here.
Tags are another way Youtube understands what your video is about, so don’t neglect this powerful way to get more Youtube videos.
Start with your keywords and key phrases, but also add variations on your keyword — alternative terms that mean the same thing that people might be searching for. You also could include broader categories in your tag… for instance, if you have a video about a cake recipe, you might say “cake” or “desserts,” but throwing in “baking,” “cooking,” or “entertaining” would be wise as well.
When your potential viewers are in discovery mode—skimming through search results and recommendations—thumbnails are a major part of what they decide to watch.
In fact, Youtube reports that 90% of the most-viewed videos on the platform use a custom thumbnail.
While a lot of advice out there is a graphic designer’s nightmare — screaming fonts and cluttered information — let’s get objective: what are the properties of an effective thumbnail?
Financial counselor Max Mitchell crams each custom thumbnail with intriguing visuals that hint at the chaotic comedy in each video. Curiosity = piqued.
‘Standing out’ can be as simple as picking a bright color (hot tip: try choosing hues that contrast with Youtube’s own red-white-and-black color scheme). Or make sure your giant hi-res face is making a weird expression in good lighting.
Or, if your niche is full of shrill, high-key visuals, the best way your channel can stand out is by being the calm, minimalist voice of reason.
Organizing and creating video playlists on YouTube is the best way to minimize the chances that a viewer will move on to another channel once they’ve consumed your content.
Why? Because playlists go by the same rules as Netflix: as soon as one video ends, the next begins.
Since you’ve already done the hard work of helping your viewer find your video, click on it, and watch the entire thing, it makes sense to guide them toward the video content they’re going to want next. Owl Crate (a subscription box program for young bookworms) groups author chats, unboxing videos, and reviews in their own playlists.
Don’t forget to put on your SEO hat when you’re crafting playlist titles, too! What combo of words will be most enticing to your viewers and help your playlist appear in search results?
Besides playlists, cards, and end screens are two of the only tools that YouTubers can use to bypass the algorithm and directly influence our audience’s next choice.
Cards are clickable, interactive areas that appear at any time during the video. They come in a variety of formats that can be used for things like fundraising or selling merch, but in this case, we’re interested in increasing views, so choose a card that links to another one of your videos — or, even better, playlists.
(Note: cards aren’t available to use on videos identified as for kids.)
Cards are pop-ups, so it’s very important that they add value. You don’t want viewers feeling spammed. The videos or playlists you link to need to be relevant to the moment and provide additional information or entertainment.
Pro tip: If you have a noticeable retention problem with a significant audience drop-off at a specific point in one of your videos, try inserting a link card at that moment.
Meanwhile, end screens are visual calls-to-action that you can add to the end of your video (in the last 5 to 20 seconds) to encourage viewers toward the next step. They’re valuable because you know if a person has reached the bitter end of your video, they are probably pretty interested in your great content.
Using end screens to encourage viewers to subscribe to your channel or visit your website are both good choices. But if you want more views, using your end screen to promote your other videos or playlists is the best choice. For instance, Youtuber JJ McCullough ended his video about mascots with a link to another one of his videos about quirky cultural trivia.
Hot tip: Be thoughtful about choosing an end-screen video that is related to the content of the video that was just watched. For instance, if someone was interested in watching a video about horse grooming, serve them up a “Top 10 Horse Braids” vid to enjoy next… not “10 Accounting Hacks.” That’s going to increase the likelihood of your viewer sticking around.
(Note that to use end screens, you’ll need to include a few extra seconds at the end of your video when you’re editing it.)
Chances are, when you’re researching your target keywords (like we did back at point #3), you’re going to see a lot of search terms that involve the phrase “how to.” (The title of this article included, ahem.) This is because there’s a lot of search volume for how-to content.
But while you must work to attract new eyes, you also want to make time to preach to the converted. On YouTube, your brand’s value-added features come in the form of content that is meaningful to people who are already your fans.
“Audience engagement” is just another term for building relationships. The end goal here, of course, is actually just the realistic, organic, and sustainable path to getting more YouTube views.
That is, engaging with other YouTubers (creators or commenters both) will increase the chance that they’ll care about your brand, that they’ll subscribe to your channel (see #12), and watch more of your videos overall.
Ideas for breaking the fourth wall and creating a two-way conversation might include:
Pro tip: This tutorial on how to engage your community on YouTube using Hootsuite’s comment and sharing features will save you time as you build your audience.
Crossovers, guest appearances, mash-ups, covers: people love that jolt of unfamiliar familiarity. Find the He-Man to your brand’s She-Ra; and the Billy Ray Cyrus to your Lil Nas X.
Maybe you’re a brand with a budget, and hiring a creator with their own following is an obvious choice. But if you’re a creator or aspiring influencer yourself, getting more views is your first step on the way to making money on YouTube, not spending it. In which case, your best bet is to partner with like-minded creators.
Ideally, your potential partners are fairly aligned in values, popularity, and charm. And you actually like them. And you have fun together, and it shows, and it makes people happy to see you happy, et cetera, et cetera, et cetera. Look how much fun Katy Perry and Lego are having teaming up. Easy, right?
Pro tip: If you do a crossover that involves a bunch of different videos—like one from your partner’s perspective to live on their channel, and one by you to live on yours, and maybe some supporting outtakes, any necessary background, etc.—make a playlist to compile them so that interested viewers can stan it all.
You’re going to want to leverage all of your social media might to promote your YouTube channel.
But, if you want more YouTube views, DON’T do the following:
Promote your video by doing this instead:
Note that you are not going to want to post the same thing across your social channels.
You can also promote your channel by using Youtube APIs to create Youtube badges for your website. Outlets like Quora or Reddit can be effective
Pro tip: Short of hiring an assistant to handle your social media, a scheduling tool like Hootsuite is the best way to craft and schedule those posts for your followers.
Your subscriber count corresponds to your organic reach on YouTube. The more subscribers your channel has, the more views your videos will get right off the bat when you hit publish.
Especially if those subscribers have their notifications turned on.
Growing your subscriber count is its own challenge with its own tactics, but one that is intertwined with increasing your views. For that reason, we have a full guide on how to get more YouTube subscribers.
Give your fans a chance to help spread the good word about your work by enabling embedding. The more fresh eyeballs see your video, the more views you rack up (and maybe even snag a new subscriber or two in the process).
The default option on Youtube is that embedding is allowed on all domains, but if you’ve previously restricted embedding, you can reverse that by going into Studio Content Manager. Select Content from the left-hand menu, tap the pencil icon next to the video settings. Scroll down and tap Show More, then find the tick-box that says Allow Emedding and toggle it on.
While Youtube counts anything over 30 seconds as a view, there are benefits to getting viewers to stick around longer.
If you can get people to watch your video for longer, Youtube will learn that you’ve got some content with quality. And videos with higher Watch Time are favored by the Youtube algorithm, giving you a leg up in the recommendation engine.
How do you get someone to watch longer? Make watchable content. Explore our full guide to Youtube marketing to get your creative wheels turning.
Adding captions to your videos helps hearing-impaired viewers follow along and makes your content more appealing to the 85 percent of videos watched with the sound off.
Having a transcript also makes translation an option, opening your video up to international audiences. Global views! Can you imagine!?
Youtube’s help page can walk you step-by-step through just how to prep your transcript file — you just need a .txt document.
Dropping your video at the exact moment your biggest audience of subscribers is online means that they’ll all receive that sweet, sweet “new post” alert right when it goes live.
But what if that’s in the middle of the night? Or while you’re on vacation? That’s where the power of a scheduling tool like Hootsuite comes in. Tee your video up to go out at the exact predetermined time of your choice to fit with your content calendar, and then go on and live your life.
Your Youtube analytics can reveal so much about audience behavior.
One key piece of data that can help keep the views coming? Audience retention.
If you look at your data to find out where audience retention drops, you can pop in a suggested video card at that exact moment… hopefully encouraging someone to hop over to another one of your videos instead of leaving your page altogether.
Youtube’s algorithm is designed to disregard any plays that might look like they were automated. It just wants to count the number of times a real human watched your video on purpose.
So when a single user or bot refreshes a video over and over, or if a website auto-plays a video, these views are not counted towards your total view numbers.
Youtube can also detect content that exists solely to incentivize likes, comments, and views, so don’t you dare start dabbling in view bait. Channels that don’t stick to Youtube’s rules might have their content removed, receive warnings from Youtube, or be terminated altogether. Be cool, you guys!
As with most money-related aspects of social media, the answer to this question is an infuriating “It depends.” The money you’ll make per view as a Youtube creator varies according to factors such as how many views total your video receives, how many clicks the ads within your video receive, and the length of the video.
Research from Intuit estimates that Youtubers make between $0.01 and $0.03 USD per view, with an average of $0.018 per view. Sure, big creators can rake in upwards of $200,000 with AdSense earnings alone (in addition to lucrative sponsorships or partnerships), but your average Joe ‘Tuber is usually looking at $3 to $5 per 1,000 views with AdSense.
Ready to make your humble fortune? Check out our guide to making money on Youtube.
In 2022, Youtube decided to take on TikTok with its own short-form, mobile-first format: Youtube Shorts. The 15-60 second, vertical videos are created with smartphones and uploaded directly to the ‘Tube via Youtube’s app. Creators edit from there and then share with their loving, short-attention-span fans.
According to Youtube, Shorts actually have a completely different recommendation algorithm than classic Youtube videos… so engagement with one doesn’t impact the other at all.
“Performance of a Short is dictated by whether or not people are choosing to watch and not skip a video in the Shorts feed. That audience engagement is often built over time as opposed to happening instantaneously,” explained Youtube product manager Pierce Volluci in a recent Creator Insiders video.
So, while getting more views for your Youtube Shorts has nothing at all to do with the rest of your channel, there are still plenty of things you can do with your Shorts content that will help them earn their fair share of attention: namely, make them entertaining and energetic.
Grab the audience’s attention. Make the first few seconds count with an exciting intro. None of the typical meandering five-minute “Hey guys!” verbal essays dominate the platform: time to cut to the chase!
…And keep that attention. You’ve gotta keep it snappy. Use music videos as an inspiration and cut to new scenes and angles quickly and frequently.
Bring your viewer some value. Don’t just make a Short for the sake of making a Short. Every video should entertain, educate, or inspire, even if it’s just 15 seconds long. You need to give a viewer a reason not just to watch, but to re-watch, share, save, like, or comment.
Get the vibe right. Over the decades, Youtube videos have developed a specific aesthetic… and Shorts are totally different. The production values, tone, speed, and editing techniques common in Shorts are more in line with the vibe of Snapchat or TikTok. Keep your eyes on what’s happening in those spaces for inspiration.
We’re just scratching the surface here—dig deeper with our guide to everything you need to know about Youtube Shorts.
Let Hootsuite make growing your YouTube channel easier. Get scheduling, promotion and marketing tools all in one place for your entire team. Sign up free today.
Original article source at: https://blog.hootsuite.com/
1670684068
Cloud technologies are becoming more and more popular. Recently, Vertabelo ADDED SUPPORT FOR THE SNOWFLAKE DATABASE. An additional feature, much awaited by our users, was support for materialized views in Snowflake. We are happy to announce that you can now model materialized views in a Snowflake database using Vertabelo.
Materialized views are different from simple VIEWS. While simple views allow us to save complicated queries for future use, materialized views store a copy of the query results. They are not always perfectly up-to-date, but can be very useful if the results of complicated queries must be obtained very quickly.
In this article, we will show you how to model Snowflake materialized views in VERTABELO.
To add a view, click the Add materialized view icon.
Alternatively, in Model Structure (in the left panel), right-click on Materialized views and choose Add materialized view.
If you don’t change the default view name, the following warning will pop up:
To fix that, click on the materialized view. In the right panel, under General, type the name of your choice.
You can also add a comment to the view if you’d like.
The next step is to add a query. Use the SQL query field in the Materialized View Properties panel.
Next, scroll down and click Update columns.
A new window will appear. Verify the columns that will be generated based on the SQL query you provided. Then, click Update columns.
The view’s columns should be updated:
Note that the materialized view must have at least one column. Otherwise, the following error will appear:
If the automatically generated columns are incorrect or if they need to be changed, you can always modify them manually in the Columns section of the right panel. Here you can change column names and types, add new columns, or delete existing columns.
To configure additional SQL scripts, select the materialized view. In the right panel, scroll down to the Additional SQL scripts section. You can add scripts that will be run before and after the materialized view is created. They can perform actions that cannot be modelled directly in Vertabelo, such as defining functions or stored procedures, adding users, or setting permissions for objects like views or tables.
To see additional view properties, select the view. In the right panel, scroll down to the Additional properties section.
Click Set to add property.
Click Unset to remove it.
Let’s discuss the role of each materialized view property in Snowflake:
Schema – This is the name of the schema in which the table will be placed.
Secure – If this is set to yes, the view is marked as secure. This means that the underlying tables, internal structural details, and the data in the view’s base tables are hidden and can only be accessed by authorized users.
Cluster by – This property is a comma-separated list of columns or expressions that determine how to cluster the materialized view. When the materialized view is clustered, the data inserted is sorted based on the clustering columns. This can improve performance when the data is queried, as not all the rows will be scanned.
To change the view’s appearance, select the right panel and scroll down to the Format section. To change the table background color, click on the color field under Fill color. Select the desired color in the color picker. You can also choose the table’s line color and set its size to fixed.
In this article, we discussed what materialized views are and how to model them in Vertabelo. You can LEARN MORE ABOUT MATERIALIZED VIEWS HERE. To see what new features were introduced in Vertabelo this year, check out 2020 WAS VERTABELO DATABASE MODELER’S YEAR. IT’LL GET EVEN BETTER IN 2021.
Original article source at: https://www.vertabelo.com/
1669995860
There are mainly 3 building blocks in any Kalix application – Entities, Views, and Actions. Views, as the name suggests, are responsible for viewing the data. Although we can fetch data using the entity_key defined in the domain, we use Views for more flexibility and customization.
This blog is a brief discussion on Views with a Value-Entity in Kalix and how we can use them in our application.
Note: To read about the basics of gRPC and Entities visit the following links
1. gRPC Descriptors
2. Types of entities in Kalix
3. Event Sourced entities in Kalix (1) (2)
To create a View, we must follow the following steps:
a) Create a domain file
The domain file represents the data that the View will display i.e., domain files are the source of data for a View. We also require this domain file for the second step which uses these domain models to perform operations like CRUD
message TodoItemState {
string item_id = 1;
string title = 2;
string description = 3;
string added_by = 4;
bool done = 5;
}
b) Create a service for an Entity (can be Value Entity, Event Sourced Entity) defined in the domain file above. This service defines the remote procedure calls that are responsible for producing state changes for the Value-Entity
service TodoListService {
option (kalix.codegen) = {
value_entity: {
name: "todolist.domain.TodoItem",
entity_type: "todolist",
state: "todolist.domain.TodoItemState"
}
};
rpc AddItem(TodoItem) returns (google.protobuf.Empty) {
option (google.api.http) = {
post: "/todoitem/add"
body: "*"
};
}
rpc GetItemById(GetItemByIdRequest) returns (TodoItem) {
option (google.api.http) = {
get: "/todoitem/{item_id}"
};
}
// Can add more such RPC Calls
}
message TodoItem {
string item_id = 1 [(kalix.field).entity_key = true];
string title = 2;
string description = 3;
string added_by = 4;
bool done = 5;
}
message GetItemByIdRequest {
string item_id = 1 [(kalix.field).entity_key = true];
}
c) Creating a View for the domain defined above. We use this View to query information based on our custom implementation.
service TodoListByName {
option(kalix.codegen) = {
view: {}
};
rpc UpdateTodoList(domain.TodoItemState) returns (domain.TodoItemState) {
option(kalix.method).eventing.in = {
value_entity: "todolist"
};
option(kalix.method).view.update = {
table: "todolist"
};
}
rpc GetTodoListItems(GetByNameRequest) returns (stream
domain.TodoItemState) {
option(kalix.method).view.query = {
query: "SELECT * FROM todolist where added_by = :name"
};
}
}
message GetByNameRequest {
string name = 1;
}
d) At last, we have to register our View in the main class. This is a kind of binding and is a necessary step without which our View will not be shown.
def createKalix(): Kalix = {
KalixFactory.withComponents(
new TodoItem(_),
new TodoListByNameView(_))
}
CQRS stands for Command Query Responsibility Segregation. From its name, we can infer that it discusses segregating or differentiating responsibilities for querying (SELECT) records from tables and inserting/updating/deleting them from the table.
Kalix also follows the CQRS principle. The entities are responsible for creating, updating, and deleting records, and the Views are accountable for the querying part as we have seen above.
There are 2 sides in CQRS – The read side and the Write side. The Write side is responsible for storing the state changes and the read side retrieves data. Thus changing the state of View does not happen in the same transaction as changing/ persisting of state. Kalix projects these changes in the states onto the Views.
In Kalix, state changes occur in the state store (for value entities) or the event journal (for event-sourced entities). There is a time delay in state changes and when that data is queryable
The data layer part in Kalix is entirely abstracted and as developers, we don’t have access to how this is implemented internally. Nonetheless, we can take advantage of the CQRS pattern, especially in enterprise applications where there is more reading activity than writing activity and Views are the means to achieve.
References:
To read more visit the Official Kalix Documentation page
GitHub link to the complete source code provided above
To read about Kalix and its advantages visit here
Original article source at: https://blog.knoldus.com/
1666453740
Block views without copies. Create views from 0 to many AbstractArrays with default values, expanded lengths, and shifted positions.
Example usage for vectors:
julia> using Blox
julia> x = collect(1:3); y = collect(4:5);
julia> v = view(x, y) # stacks them
5-element Blox.BlockVector{Int64}:
1
2
3
4
5
julia> v[2] = 999
999
julia> x # underlying vector is changed
3-element Array{Int64,1}:
1
999
3
julia> v[3:4]
2-element Array{Int64,1}:
3
4
julia> v = view(x,y; def=-1, len=7) # gives -1 for all indices with no array underlying
7-element Blox.BlockVector{Int64}:
1
999
3
4
5
-1
-1
julia> v = view(x,y; indices=[2,7]) # starts the arrays at position 2 and 8 respectively
8-element Blox.BlockVector{Int64}:
0
1
999
3
0
0
4
5
julia> v = view(x,y; indices=[2,7], def=-999)
8-element Blox.BlockVector{Int64}:
-999
1
999
3
-999
-999
4
5
Author: tbreloff
Source Code: https://github.com/tbreloff/Blox.jl
License: View license
1666342500
A package for simplifying operations that involve Fourier transforms. An FFTView of an array uses periodic boundary conditions for indexing, and shifts all indices of the array downward by 1.
Usage
Let's create a random signal:
julia> using FFTViews
julia> a = rand(8)
8-element Array{Float64,1}:
0.720657
0.42337
0.207867
0.959567
0.371366
0.907781
0.852526
0.689934
Now let's take its Fourier transform, and wrap the result as an FFTView
:
julia> afft = fft(a)
8-element Array{Complex{Float64},1}:
5.13307+0.0im
-0.183898+0.796529im
0.03163+0.31835im
0.88248-0.492787im
-0.828236+0.0im
0.88248+0.492787im
0.03163-0.31835im
-0.183898-0.796529im
julia> v = FFTView(afft)
FFTViews.FFTView{Complex{Float64},1,Array{Complex{Float64},1}} with indices FFTViews.URange(0,7):
5.13307+0.0im
-0.183898+0.796529im
0.03163+0.31835im
0.88248-0.492787im
-0.828236+0.0im
0.88248+0.492787im
0.03163-0.31835im
-0.183898-0.796529im
Now we can easily look at the zero-frequency bin:
julia> v[0]
5.133068739504999 + 0.0im
julia> sum(a)
5.133068739504998
or negative as well as positive frequencies:
julia> v[-4:3]
8-element Array{Complex{Float64},1}:
-0.828236+0.0im
0.88248+0.492787im
0.03163-0.31835im
-0.183898-0.796529im
5.13307+0.0im
-0.183898+0.796529im
0.03163+0.31835im
0.88248-0.492787im
Perhaps even more interestingly, one can also simplify the process of convolution. Let's create a "delta-function" signal:
julia> b = zeros(8); b[3] = 1; b # the signal
8-element Array{Float64,1}:
0.0
0.0
1.0
0.0
0.0
0.0
0.0
0.0
and then create the kernel using an FFTView
:
julia> kernel = FFTView(zeros(8))
FFTViews.FFTView{Float64,1,Array{Float64,1}} with indices FFTViews.URange(0,7):
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
julia> kernel[-1:1] = rand(3)
3-element Array{Float64,1}:
0.16202
0.446872
0.649135
julia> kernel
FFTViews.FFTView{Float64,1,Array{Float64,1}} with indices FFTViews.URange(0,7):
0.446872
0.649135
0.0
0.0
0.0
0.0
0.0
0.16202
Now compute the convolution via the FFT:
julia> real(ifft(fft(b).*fft(kernel)))
8-element Array{Float64,1}:
0.0
0.16202
0.446872
0.649135
0.0
-5.55112e-17
0.0
-6.93889e-17
or alternatively
julia> irfft(rfft(b).*rfft(kernel),8)
8-element Array{Float64,1}:
0.0
0.16202
0.446872
0.649135
0.0
-2.77556e-17
0.0
-5.55112e-17
This simplifies the process of remembering how to pack your kernel.
In Julia, almost all other view types are composable: you can make a ReshapedArray
of a SubArray
of a StaticArray
of a .... In contrast, FFTViews
are not safe when placed inside other containers. The reason is that the *fft
methods are specialized for FFTViews
, and strip off the outer container; this does not happen if you wrap an FFTView
inside of some other array type. If you do wrap FFTViews
, you might see strange off-by-1 bugs due to the FFTView translating the indices.
Another way of saying the same thing is the following: for a general vector x
, its FFT is defined as
Here x[n]
is defined with periodic boundary conditions, so that if the indices of x
are not naturally from 1 to N, this formula still holds.
However, if y = FFTView(x)
, then in terms of y
we have
which is shifted by 1. Since FFTView
s use a different definition of the FFT compared to all other array types, they need to be used with caution. It's recommended that the FFTView wrapper be applied only for the process of setting up or analyzing the result of the transform; for all other operations, pass the parent
array (obtainable from parent(y)
or just by reference to x
itself).
Author: JuliaArrays
Source Code: https://github.com/JuliaArrays/FFTViews.jl
License: View license
1666040640
Strided array views with efficient (cache-friendly and multithreaded) manipulations
A Julia package for working more efficiently with strided arrays, i.e. dense arrays whose memory layout has a fixed stride along every dimension. Strided.jl does not make any assumptions about the strides (such as stride 1 along first dimension, or monotonically increasing strides) and provides multithreaded and cache friendly implementations for mapping, reducing, broadcasting such arrays, as well as taking views, reshaping and permuting dimensions. Most of these are simply accessible by annotating a block of standard Julia code involving broadcasting and other array operations with the macro @strided
.
What's new
Strided.jl v1 uses the new @spawn
threading infrastructure of Julia 1.3 and higher. Futhermore, the use of multithreading is now more customizable, via the function Strided.set_num_threads(n)
, where n
can be any integer between 1
(no threading) and Base.Threads.nthreads()
. This allows to spend only a part of the Julia threads on multithreading, i.e. Strided will never spawn more than n-1
additional tasks. By default, n = Base.Threads.nthreads()
, i.e. threading is enabled by default. There are also convenience functions Strided.enable_threads() = Strided.set_num_threads(Threads.nthreads())
and Strided.disable_threads() = Strided.set_num_threads(1)
.
Furthermore, there is an experimental feature (disabled by default) to apply multithreading for matrix multiplication using a divide-and-conquer strategy. It can be enabled via Strided.enable_threaded_mul()
(and similarly Strided.disable_threaded_mul()
to revert to the default setting). For matrices with a LinearAlgebra.BlasFloat
element type (i.e. any of Float32
, Float64
, ComplexF32
or ComplexF64
), this is typically not necessary as BLAS is multithreaded by default. However, it can be beneficial to implement the multithreading using Julia Tasks, which then run on Julia's threads as distributed by Julia's scheduler. Hence, this feature should likely be used in combination with LinearAlgebra.BLAS.set_num_threads(1)
. Performance seems to be on par (within a few percent margin) with the threading strategies of OpenBLAS and MKL. However, note that the latter call also disables any multithreading used in LAPACK (e.g. eigen
, svd
, qr
, ...) and Strided.jl does not help with that.
Examples
Running Julia with a single thread
julia> using Strided
julia> using BenchmarkTools
julia> A = randn(4000,4000);
julia> B = similar(A);
julia> @btime $B .= ($A .+ $A') ./ 2;
145.214 ms (0 allocations: 0 bytes)
julia> @btime @strided $B .= ($A .+ $A') ./ 2;
56.189 ms (6 allocations: 352 bytes)
julia> A = randn(1000,1000);
julia> B = similar(A);
julia> @btime $B .= 3 .* $A';
2.449 ms (0 allocations: 0 bytes)
julia> @btime @strided $B .= 3 .* $A';
1.459 ms (5 allocations: 288 bytes)
julia> @btime $B .= $A .* exp.( -2 .* $A) .+ sin.( $A .* $A);
22.493 ms (0 allocations: 0 bytes)
julia> @btime @strided $B .= $A .* exp.( -2 .* $A) .+ sin.( $A .* $A);
22.240 ms (10 allocations: 480 bytes)
julia> A = randn(32,32,32,32);
julia> B = similar(A);
julia> @btime permutedims!($B, $A, (4,3,2,1));
5.203 ms (2 allocations: 128 bytes)
julia> @btime @strided permutedims!($B, $A, (4,3,2,1));
2.201 ms (4 allocations: 320 bytes)
julia> @btime $B .= permutedims($A, (1,2,3,4)) .+ permutedims($A, (2,3,4,1)) .+ permutedims($A, (3,4,1,2)) .+ permutedims($A, (4,1,2,3));
21.863 ms (32 allocations: 32.00 MiB)
julia> @btime @strided $B .= permutedims($A, (1,2,3,4)) .+ permutedims($A, (2,3,4,1)) .+ permutedims($A, (3,4,1,2)) .+ permutedims($A, (4,1,2,3));
8.495 ms (9 allocations: 640 bytes)
And now with export JULIA_NUM_THREADS = 4
julia> using Strided
julia> using BenchmarkTools
julia> A = randn(4000,4000);
julia> B = similar(A);
julia> @btime $B .= ($A .+ $A') ./ 2;
146.618 ms (0 allocations: 0 bytes)
julia> @btime @strided $B .= ($A .+ $A') ./ 2;
30.355 ms (12 allocations: 912 bytes)
julia> A = randn(1000,1000);
julia> B = similar(A);
julia> @btime $B .= 3 .* $A';
2.030 ms (0 allocations: 0 bytes)
julia> @btime @strided $B .= 3 .* $A';
808.874 μs (11 allocations: 784 bytes)
julia> @btime $B .= $A .* exp.( -2 .* $A) .+ sin.( $A .* $A);
21.971 ms (0 allocations: 0 bytes)
julia> @btime @strided $B .= $A .* exp.( -2 .* $A) .+ sin.( $A .* $A);
5.811 ms (16 allocations: 1.05 KiB)
julia> A = randn(32,32,32,32);
julia> B = similar(A);
julia> @btime permutedims!($B, $A, (4,3,2,1));
5.334 ms (2 allocations: 128 bytes)
julia> @btime @strided permutedims!($B, $A, (4,3,2,1));
1.192 ms (10 allocations: 928 bytes)
julia> @btime $B .= permutedims($A, (1,2,3,4)) .+ permutedims($A, (2,3,4,1)) .+ permutedims($A, (3,4,1,2)) .+ permutedims($A, (4,1,2,3));
22.465 ms (32 allocations: 32.00 MiB)
julia> @btime @strided $B .= permutedims($A, (1,2,3,4)) .+ permutedims($A, (2,3,4,1)) .+ permutedims($A, (3,4,1,2)) .+ permutedims($A, (4,1,2,3));
2.796 ms (15 allocations: 1.44 KiB)
Design principles
StridedView
Strided.jl is centered around the type StridedView
, which provides a view into a parent array of type DenseArray
such that the resulting view is strided, i.e. any dimension has an associated stride, such that e.g.
getindex(A, i₁, i₂, i₃, ...) = A.op(A.parent[offset + 1 + (i₁-1)*s₁ + (i₂-1)*s₂ + (i₃-1)*s₃ + ...])
with sⱼ = stride(A, iⱼ)
. There are no further assumptions on the strides, e.g. they are not assumed to be monotonously increasing or have s₁ == 1
. Furthermore, A.op
can be any of the operations identity
, conj
, transpose
or adjoint
(the latter two are equivalent to the former two if eltype(A) <: Number
). Since these operations are their own inverse, they are also used in the corresponding setindex!
.
This definition enables a StridedView
to be lazy (i.e. returns just another StridedView
over the same parent data) under application of conj
, transpose
, adjoint
, permutedims
and indexing (getindex
) with Union{Integer, Colon, AbstractRange{<:Integer}}
(a.k.a slicing).
Furthermore, the strided structure can be retained under certain reshape
operations, but not all of them. Any dimension can always be split into smaller dimensions, but two subsequent dimensions i
and i+1
can only be joined if stride(A,i+1) == size(A,i)*stride(A,i)
. Instead of overloading reshape
, Strided.jl provides a separate function sreshape
which returns a StridedView
over the same parent data, or throws a runtime error if this is impossible.
map(reduce)
Whenever an expression only contains StridedView
s and non-array objects (scalars), overloaded methods for broadcasting and functions as map(!)
and mapreduce
are used that exploit the known strided structure in order to evaluate the result in a more efficient way, at least for sufficiently large arrays where the overhead of the extra preparatory work is negligible. In particular, this involves choosing a blocking strategy and loop order that aims to avoid cache misses. This matters in particular if some of the StridedView
s involved have strides which are not monotonously increasing, e.g. if transpose
, adjoint
or permutedims
has been applied. The fact that the latter also acts lazily (whereas it creates a copy of the data in Julia base) can potentially provide a further speedup.
Furthermore, these optimized methods are implemented with support for multithreading. Thus, if Threads.nthreads() > 1
and the arrays involved are sufficiently large, performance can be boosted even for plain arrays with a strictly sequential memory layout, provided that the broadcast operation is compute bound and not memory bound (i.e. the broadcast function is sufficienlty complex).
@strided
macro annotationRather than manually wrapping every array in a StridedView
, there is the macro annotation @strided some_expression
, which will wrap all DenseArray
s appearing in some_expression
in a StridedView
. Note that, because StridedView
s behave lazily under indexing with ranges, this acts similar to the @views
macro in Julia Base, i.e. there is no need to use a view.
The macro @strided
acts as a contract, i.e. the user ensures that all array manipulations in the following expressions will preserve the strided structure. Therefore, reshape
and view
are are replaced by sreshape
and sview
respectively. As mentioned above, sreshape
will throw an error if the requested new shape is incompatible with preserving the strided structure. The function sview
is only defined for index arguments which are ranges, Int
s or Colon
(:
), and will thus also throw an error if indexed by anything else.
StridedView
versus StridedArray
and BLAS/LAPACK compatibilityStridedArray
is a union type to denote arrays with a strided structure in Julia Base. Because of its definition as a type union rather than an abstract type, it is impossible to have user types be recognized as StridedArray
. This is rather unfortunate, since dispatching to BLAS and LAPACK routines is based on StridedArray
. As a consequence, StridedView
will not fall back to BLAS or LAPACK by default. Currently, only matrix multiplication is overloaded so as to fall back to BLAS (i.e. gemm!
) if possible. In general, one should not attempt use e.g. matrix factorizations or other lapack operations within the @strided
context. Support for this is on the TODO list. Some BLAS inspired methods (axpy!
, axpby!
, scalar multiplication via mul!
, rmul!
or lmul!
) are however overloaded by relying on the optimized yet generic map!
implementation.
StridedView
s can currently only be created with certainty from DenseArray
(typically just Array
in Julia Base). For Base.SubArray
or Base.ReshapedArray
instances, the StridedView
constructor will first act on the underlying parent array, and then try to mimic the corresponding view or reshape operation using sview
and sreshape
. These, however, are more limited then their Base counterparts (because they need to guarantee that the result still has a strided memory layout with respect to the new dimensions), so an error can result. However, this approach can also succeed in creating StridedView
wrappers around combinations of view
and reshape
that are not recognised as Base.StridedArray
. For example, reshape(view(randn(40,40), 1:36, 1:20), (6,6,5,4))
is not a Base.StridedArrray
, and indeed, it cannot statically be inferred to be strided, from only knowing the argument types provided to view
and reshape
. For example, the similarly looking reshape(view(randn(40,40), 1:36, 1:20), (6,3,10,4))
is not strided. The StridedView
constructor will try to act on both, and yield a runtime error in the second case. Note that Base.ReinterpretArray
is currently not supported.
Note again that, unlike StridedArray
s, StridedView
s behave lazily (i.e. still produce a view on the same parent array) under permutedims
and regular indexing with ranges.
UnsafeStridedView
and @unsafe_strided
Based on the work of UnsafeArrays.jl there is also an UnsafeStridedView
, which references the parent array via a pointer, and therefore is itself a stack allocated struct
(i.e. isbitstype(UnsafeStridedView{...})
is true).
It behaves in all respects the same as StridedView
(they are both subtypes of AbstractStridedView
), except that by itself it does not keep a reference to the parent array in a way that is visible to Julia's garbage collector. It can therefore not be the return value of an operation (in particular similar(::UnsafeStridedView, ...) -> ::StridedView
) and an explicit reference to the parent array needs to be kept alive. Furthermore, UnsafeStridedView
wrappers can only be created of AbstractArray{T}
instances with isbitstype(T)
.
There is a corresponding @unsafe_strided
macro annotation. However, in this case the arrays in the expression need to be identified explicitly as
@unsafe_strided A₁ A₂ ... some_expression
because this will be translated into the expression
GC.@preserve A₁ A₂ ...
let A₁ = UnsafeStridedView(A₁), A₂ = ...
some_expression
end
Planned features / wish list
GPUArray
s with dedicated GPU kernels?Author: Jutho
Source Code: https://github.com/Jutho/Strided.jl
License: View license
1666000500
PaddedViews provides a simple wrapper type, PaddedView
, to add "virtual" padding to any array without copying data. Edge values not specified by the array are assigned a fillvalue
. Multiple arrays may be "promoted" to have common indices using the paddedviews
function.
PaddedView
arrays are read-only, meaning that you cannot assign values to them. The original array may be extracted using A = parent(P)
, where P
is a PaddedView
.
For padding a single array:
julia> a = collect(reshape(1:9, 3, 3))
3×3 Array{Int64,2}:
1 4 7
2 5 8
3 6 9
julia> PaddedView(-1, a, (4, 5))
4×5 PaddedView(-1, ::Array{Int64,2}, (Base.OneTo(4), Base.OneTo(5))) with eltype Int64:
1 4 7 -1 -1
2 5 8 -1 -1
3 6 9 -1 -1
-1 -1 -1 -1 -1
julia> PaddedView(-1, a, (1:5,1:5), (2:4,2:4))
5×5 PaddedView(-1, OffsetArray(::Array{Int64,2}, 2:4, 2:4), (1:5, 1:5)) with eltype Int64 with indices 1:5×1:5:
-1 -1 -1 -1 -1
-1 1 4 7 -1
-1 2 5 8 -1
-1 3 6 9 -1
-1 -1 -1 -1 -1
julia> PaddedView(-1, a, (0:4, 0:4))
5×5 PaddedView(-1, ::Array{Int64,2}, (0:4, 0:4)) with eltype Int64 with indices 0:4×0:4:
-1 -1 -1 -1 -1
-1 1 4 7 -1
-1 2 5 8 -1
-1 3 6 9 -1
-1 -1 -1 -1 -1
julia> PaddedView(-1, a, (5,5), (2,2))
5×5 PaddedView(-1, OffsetArray(::Array{Int64,2}, 2:4, 2:4), (Base.OneTo(5), Base.OneTo(5))) with eltype Int64:
-1 -1 -1 -1 -1
-1 1 4 7 -1
-1 2 5 8 -1
-1 3 6 9 -1
-1 -1 -1 -1 -1
For padding multiple arrays to have common indices:
julia> a1 = reshape([1, 2, 3], 3, 1)
3×1 Array{Int64,2}:
1
2
3
julia> a2 = [4 5 6]
1×3 Array{Int64,2}:
4 5 6
julia> a1p, a2p = paddedviews(-1, a1, a2);
julia> a1p
3×3 PaddedView(-1, ::Array{Int64,2}, (Base.OneTo(3), Base.OneTo(3))) with eltype Int64:
1 -1 -1
2 -1 -1
3 -1 -1
julia> a2p
3×3 PaddedView(-1, ::Array{Int64,2}, (Base.OneTo(3), Base.OneTo(3))) with eltype Int64:
4 5 6
-1 -1 -1
-1 -1 -1
If you want original arrays in the center of padded results:
julia> a1 = reshape([1, 2, 3], 3, 1)
3×1 Array{Int64,2}:
1
2
3
julia> a2 = [4 5 6]
1×3 Array{Int64,2}:
4 5 6
julia> a1p, a2p = sym_paddedviews(-1, a1, a2);
julia> a1p
3×3 PaddedView(-1, ::Array{Int64,2}, (1:3, 0:2)) with eltype Int64 with indices 1:3×0:2:
-1 1 -1
-1 2 -1
-1 3 -1
julia> a2p
3×3 PaddedView(-1, ::Array{Int64,2}, (0:2, 1:3)) with eltype Int64 with indices 0:2×1:3:
-1 -1 -1
4 5 6
-1 -1 -1
We can use dims
keyword to specify the direction of padding for the output arrays as shown above. They can be integers or tuple of integers.
julia> a1p, a2p = paddedviews(-1, a1, a2; dims=1);
julia> a1p
3×1 PaddedView(-1, ::Matrix{Int64}, (Base.OneTo(3), Base.OneTo(1))) with eltype Int64:
1
2
3
julia> a2p
3×3 PaddedView(-1, ::Matrix{Int64}, (Base.OneTo(3), Base.OneTo(3))) with eltype Int64:
4 5 6
-1 -1 -1
-1 -1 -1
julia> a1p, a2p = sym_paddedviews(-1, a1, a2; dims=2);
julia> a1p
3×3 PaddedView(-1, ::Matrix{Int64}, (1:3, 0:2)) with eltype Int64 with indices 1:3×0:2:
-1 1 -1
-1 2 -1
-1 3 -1
julia> a2p
1×3 PaddedView(-1, ::Matrix{Int64}, (1:1, 1:3)) with eltype Int64 with indices 1:1×1:3:
4 5 6
Author:
Source Code: https://github.com/JuliaArrays/PaddedViews.jl
License:
1657357200
CoreUI is meant to be the UX game changer. Pure & transparent code is devoid of redundant components, so the app is light enough to offer ultimate user experience. This means mobile devices also, where the navigation is just as easy and intuitive as on a desktop or laptop. The CoreUI Layout API lets you customize your project for almost any device – be it Mobile, Web or WebApp – CoreUI covers them all!
Only customers with Enterpise Membership Plan have access to private github CoreUI Pro repository.
# clone the repo
$ git clone https://github.com/coreui/coreui-free-react-admin-template.git my-project
# go into app's directory
$ cd my-project
# checkout stable version
$ git checkout master
# install app's dependencies
$ npm install
Copy all your files to your project folder and then,
# go into app's directory
$ cd my-project
# install app's dependencies
$ npm install
This project was bootstrapped with Create React App
see also: CRA docs
# dev server with hot reload at http://localhost:3000
$ npm start
Navigate to http://localhost:3000. The app will automatically reload if you change any of the source files.
Run build
to build the project. The build artifacts will be stored in the build/
directory.
# build for production with minification
$ npm run build
Within the download you'll find the following directories and files, logically grouping common assets and providing both compiled and minified variations. You'll see something like this:
CoreUI-React#v3.0.0
├── public/ #static files
│ └── index.html #html template
│
├── src/ #project root
│ ├── assets/ #assets - js icons object
│ ├── containers/ #container source - template layout
| │ ├── _nav.js #sidebar config
| │ └── ...
│ ├── scss/ #user scss/css source
│ ├── views/ #views source
│ ├── App.js
│ ├── App.test.js
│ ├── polyfill.js
│ ├── index.js
│ ├── routes.js #routes config
│ └── store.js #template state example
│
└── package.json
The documentation for the CoreUI Admin Template is hosted at our website CoreUI for React
For transparency into our release cycle and in striving to maintain backward compatibility, CoreUI Free Admin Template is maintained under the Semantic Versioning guidelines.
See the Releases section of our project for changelogs for each release version.
Łukasz Holeczek
CoreUI team
Get updates on CoreUI's development and chat with the project maintainers and community members.
copyright 2020 creativeLabs Łukasz Holeczek.
Code released under the MIT license. There is only one limitation you can't can’t re-distribute the CoreUI as stock. You can’t do this if you modify the CoreUI. In past we faced some problems with persons who tried to sell CoreUI based templates.
CoreUI is an MIT licensed open source project and completely free to use. However, the amount of effort needed to maintain and develop new features for the project is not sustainable without proper financial backing. You can support development by buying CoreUI Pro Version.
We're also open to conversations regarding custom sponsorship / consulting arrangements. Get in touch on Twitter.
Author: coreui
Source code: https://github.com/coreui/coreui-free-react-admin-template
License: MIT license
#Bootstrap #React #javascript
1622876400
WordPress is the most popular content management system; creating a website in less time is only possible with WordPress. It offers tons of plugins, ready-made themes with top-notch tutorials and support. However, custom plugins and themes come with excessive code, and it is considered good practice to create any specific feature without the plugin.
You will find out how to display popular posts by views in WordPress without an external plugin, and we will create this feature using few lines of code that consists of WordPress custom function and methods.
#wordpress #wordpress 5.5 #views #plugin tutorial
1617371420
In this video you will how to increase the website or blog traffic using python 2021
Watch the full video tutorial here
#unlimited #views #hacking #tech #technologu #python
1606899022
Similar to Facebook advertisements, Instagram is little distributing to several marketers. Do you know Instagram marketing is chaotic to several marketers? Want to know Instagram advertising differentiate from Facebook advertising? What ad campaign standards are there on IG? Where your businesses placed their ads on the platform? Read on to receive detailed replies to these queries and study how to make several of the Instagram advertising chances.
As business marketers, owners, and advertisers, Instagram always on the lookout for new chances to connect with capable audiences. We also need to identify places where we could reach and raise the goals, be ut our own business, brands, or clients.
By the limelight most frequently being on Facebook, Instagram looks to receive dominated as the adapted little platform.
In recent times, businesses increasingly begin to motivate Instagram as a new, useful Instagram advertising channel. And for the ideal reason, the online presence on Instagram lets the companies receive before the multitude of brands depending on the ad-filled FB.
Instagram marketing lets you reduce the over-saturated advertising idea of Facebook. Most predominantly, it can support you classify over the platforms and efficiently push business outcomes.
Are you liking in studying how to click into Instagram’s capable? Or possibly you need to want to select up some tricks for your already existing Instagram ad campaigns?
Read on to study more about Instagram advertising, from the presentable options for advertisements to success methods, predictions for the future, content ideas, and much more.
Let us start through the world of Instagram advertising from the primary steps: ad campaign rules.
The supported ad campaign rules are reached using Instagram Feed ads, brand awareness, video views, traffic rate, engagement, messages, App installation, conversions, store traffic, and catalog sales.
For Instagram stories, you can quickly get IG story views is the more excellent method to receive an audience for your funnel to start with brand awareness or reach campaign. These ad campaigns are lesser in cost and can be ideal in strengthening your reach and visibility.
As you could process down the funnel, check out the consideration stage campaign rules. These might cost slightly more than a brand awareness ad campaign as the goals are higher value, such as pushing users from the app for your website or app.
Finally, you target a warmer audience, possibly in a re-marketing ad campaign; check out conversion ad campaign rules for the final push to increase sales.
After Facebook bought Instagram in 2012, it has been merging the app into the ad platforms. Meanwhile, Instagram ad placements are reduced at this time; they are useless useful that too as Instagram is a top-performing channel for both B2C and B2B, whose usage continues to increase.
Presently, Instagram provides two ad placements. Anyhow, we can surely expect the platform to include more advertising chances as it starts to revolve. As Facebook’s advertising costs are rising, and the share of impressions reduces, Instagram will probably extend its ad inventory.
The Instagram feed helps both single image or video creatives or a multi-creative picture or video carousel ads.
On the contrary, on Facebook, you can check more excellent duration video content that’s up to 240 minutes long. Instagram news feed consist of 60 seconds.
Instagram begins to gain visibility among the users using the Stories feature. Stories ad placement activates the marketers to post videos and images that will be visible up to 15 seconds between the organic content posted by other users.
Instagram stories ads are not highly interfering to the users, so they are highly effective in pushing taps for your designated landing pages.
Author Bio
Caterina Taylor is an experienced social media marketer and writer who works at PlanYourGram.com. She loves to work on content creation for social media blogs and has the potential to deliver engaging content on various platforms and networks.
#instagram #marketing #story #views #online
1602518400
MySQL has seven query commands (SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY, and LIMIT) through which the data analysis is done in a database. But all these queries are helpful to analyze the data present in a single table in the entire database. A database contains more than one table in the real world, and all those tables will be interrelated.
To analyze the data on more than one table at a time, we’ll use Joins, Views, and CTEs.
We can download the database which we are using in the article here.
To understand how the Joins work, we need to be familiar with the concept of primary and foreign keys.
A primary key is a single field/column name that uniquely defines the table. The column should not contain any null values, it should not have duplicate values, and a table should have only one primary key.
A foreign key from a table refers to the column in another table.
Let’s see a simple example for a better understanding of Primary and Foreign Keys in a database.
We’ll take two tables from the database.
market_fact_full
#database #mysql #join #views #data-science
1593629580
Have you wanted to learn Regular Expressions in Python, but don’t know where to start? Have you stumbled into the dreaded pink SettingWithCopyWarning in Pandas? This week on the show, we have David Amos from the Real Python team to discuss a recent two-part series on Regex in Python. We also talk about another recent article on the site about views vs copies in Pandas. David also brings a few other articles and projects from the wider Python community for us to discuss.
#python #pandas #views #copies