Coding Challenge 172: Horizontal Directional Drilling

  Рет қаралды 121,772

The Coding Train

The Coding Train

Күн бұрын

Пікірлер
@TheCodingTrain
@TheCodingTrain 2 жыл бұрын
Source code and references at the new coding train website! thecodingtrain.com/challenges/172-directional-boring And check out Practical Engineering's video! kzbin.info/www/bejne/gHLLlZVtmbCEprc
@tieflabs
@tieflabs 2 жыл бұрын
I love your videos, In 2020 i started codding too, well it's really fun, before i started i was an arduino programmer
@PracticalEngineeringChannel
@PracticalEngineeringChannel 2 жыл бұрын
Choo choo! This makes me so happy! Thanks for teaming up with me, Dan. I think it rivals other titles in the "mundane simulator" category. I can't stop playing it.
@devstreams1459
@devstreams1459 2 жыл бұрын
Got sent here by you, love this channel! Thanks for the recommendation!
@mastershooter64
@mastershooter64 2 жыл бұрын
Let's all team up (the coding train audience and practical engineering audience) and make a 3D game with triple A graphics and a much more detailed directional boring game! open source game so that everyone can contribute to it!
@willemkossen
@willemkossen 2 жыл бұрын
Great to see collabs between channels i already subscribe too. Well done!
@bananapi3784
@bananapi3784 2 жыл бұрын
Here from Practical Engineering
@TheCodingTrain
@TheCodingTrain 2 жыл бұрын
Thank you for the opportunity, this was such a treat to get to do!!
@karm65
@karm65 2 жыл бұрын
I ran one of these drill rigs for 10 years.15 yeas overall experence with them. the starting angle should be 10 to 22 degrees. it can be more but that creates problems and can gratly increase the length of the bore. fast rotation with slow push goes more or less state. push with no rotation is for steering. you should never change direction more than absolutely necessary usually 4 inches over 10 feet on avrage the drill stem can take more but odds are whatever your pulling back can't. you can only rotate most drill stem to the right (clockwise down hole) turning the other way will unscrew the drill string. some systems have ways to prevent this but they don't work very well IMO.
@TheCodingTrain
@TheCodingTrain 2 жыл бұрын
Thanks for this info and context!
@stevenlischer
@stevenlischer 2 жыл бұрын
I worked for a hdd company for a few years and verify this is accurate, the pullback radius and tension are usually the limiting factors. Real world boring software has to do some very interesting mutli-factor path optimization that actually can be approximated pretty well with A* path finding algorithms and energy minimizing smoothing algorithms to remove "squigglyness"
@g0d5m15t4k3
@g0d5m15t4k3 2 жыл бұрын
Oh wow! I love when someone with hands on experience is here in the comments giving the protips.
@absalomdraconis
@absalomdraconis 2 жыл бұрын
@@stevenlischer : I had suspected the pulling would be a problem when I saw the initial video on it. I'd suspect the "flexible robots"/"pneumatic robots" folks could improve on that restriction.
@BPEKSupraInteractive
@BPEKSupraInteractive 2 жыл бұрын
Here from Practical Engineering! Glad he recommended us to you!
@anj000
@anj000 2 жыл бұрын
I love both Practical Engineering and Coding Train. This colab is match made in heaven.
@willemkossen
@willemkossen 2 жыл бұрын
Great to see a collab between two of my favourite youtube channels. Nice!
@Mysda_
@Mysda_ 2 жыл бұрын
I love that drilling is actually turned into games. That's litteraly the concept of my current game
@jcbro86
@jcbro86 2 жыл бұрын
I’m a directional drill operator and would love to play some kind of drilling game.
@gownerjones
@gownerjones Жыл бұрын
@@jcbro86 I never knew there were people so passionate about drilling that they do it for a living AND want to pretend to do it in their free time. I'll make you a drilling game, jcbro, don't you worry.
@aditya95sriram
@aditya95sriram 2 жыл бұрын
The collab I didn't know I needed
@ChokyoDK
@ChokyoDK Жыл бұрын
You helped me through 3 years of programming classes. Thank you!
@TheCodingTrain
@TheCodingTrain Жыл бұрын
Glad to hear!
@JordanMSeverns
@JordanMSeverns 2 жыл бұрын
You've been getting so much better at making your programs look good
@tomaszmarczak9432
@tomaszmarczak9432 2 жыл бұрын
I'm just looking at videos from channels I subscribe and I started wondering if its Horizontal Directional Drilling month or something
@inhumanedasher
@inhumanedasher 2 жыл бұрын
Same.
@zokpls8712
@zokpls8712 2 жыл бұрын
Yeah wtf lmao
@joaqogc
@joaqogc 2 жыл бұрын
Same!
@TheCodingTrain
@TheCodingTrain 2 жыл бұрын
Is there another one besides this one and practical engineering?
@tomaszmarczak9432
@tomaszmarczak9432 2 жыл бұрын
@@TheCodingTrain No, but it looked like odd coincidence until you said that you collaborated ;)
@Hermaniac8
@Hermaniac8 2 жыл бұрын
Hey Dan, just FYI, the red line on brown dirt was pretty difficult to distinguish with (my kind of) colour-blindness. May be worth considering avoiding this colour combination in future. 💕
@MrNotAGamer
@MrNotAGamer 2 жыл бұрын
oh well that sucks
@TheCodingTrain
@TheCodingTrain 2 жыл бұрын
Thank you Michael for this feedback. I try to be mindful of accessibility when publishing videos and code examples and missed this one. I'll adjust the colors in the code example and keep this in mind for future p5 sketches. Thank you for taking the time to comment and letting me know!
@Kokurorokuko
@Kokurorokuko Ай бұрын
I'm not even colorblind but it was hard to see for me as well
@Woryed
@Woryed 2 жыл бұрын
Been watching you for over 4 years now and i LOVE your videos!
@glenneric1
@glenneric1 2 жыл бұрын
A directional drill is a small, slightly off camber drill, on the end of another drill. You can turn them each independently. Very cool. You drill with the end(little) drill while not drilling with the stage 1 drill and you end up making a curved path since the end drill has a small kink in it(out of alignment slightly). If you want to go straight you just start turning the main drill and the end drill just wallows out a little bit (since it is slightly wobbly) but still drills through your rock. So varying proportions of your main drill and end drill are how you steer.
@SamuelHauptmannvanDam
@SamuelHauptmannvanDam 2 жыл бұрын
As a programmer, who unfortunately don't have the time to watch, it still warms my heart that you exist and we'll certainly be trying it out with my kid when they are old enough. Because you are the light of the world. So affectionate. Love it, love it, love it.
@valuedhumanoid6574
@valuedhumanoid6574 2 жыл бұрын
Just down the road from me Comcast is drilling under an 8 lane intersection to install a new feeder to a new neighborhood. I actually stopped and asked questions about the project. The guy told me their going 26 feet down and 140 feet across. Not a huge project, but it's not disrupting traffic at all.
@motbus3
@motbus3 2 жыл бұрын
hey this kind of colabs are exciting! people can learn to code and about something more! this is so cool!
@folkusonme
@folkusonme 2 жыл бұрын
oh yay!! gonna check out Grady's vid too
@Didactb
@Didactb 2 жыл бұрын
Practical engineering sent me here and I happen to be interested in coding so... I just subscribed! I'll check if you have any Python and SQL which are the ones I need to learn for my job :)
@TheCodingTrain
@TheCodingTrain 2 жыл бұрын
Unfortunately I'm almost all JavaScript and Java (and a lot of graphics and simulation) but feel free to poke around and let me know if you find anything interesting! There are lots of great python and more traditional web dev (database) channels around KZbin!
@letsgocamping88
@letsgocamping88 2 жыл бұрын
this channel is a great starter to get you thinking like a programmer
@mhjunky4278
@mhjunky4278 2 жыл бұрын
@@letsgocamping88 bruh he's so advance for me 🥲
@VisioGuy
@VisioGuy 2 жыл бұрын
This Superfriends Team-up is really inventive--a really great use of the internet! School curriculum designers take note! Also, FYI, I watch Coding Train more than Practical Engineering, but I actually watched the "boring video" first. :)
@guidiasmacara9516
@guidiasmacara9516 2 жыл бұрын
Very cool, I feel like this is gonna boost my interest and practice in coding!
@godetarnaud1005
@godetarnaud1005 2 жыл бұрын
Awesome idea to team up with someone else and make a cool simulation of a real life phenomenon like this ! Thank you for this quality content I'll definitely try to do it on p5.js too :D
@mathewblanc9936
@mathewblanc9936 2 жыл бұрын
The team up we didn't know we needed!
@weamers
@weamers 2 жыл бұрын
3:36 gave me a good chuckle, keep up the good work! 👍
@mhjunky4278
@mhjunky4278 2 жыл бұрын
Damn I got to thank Practical engineering for informing me of your channel ❤️ I love this video and your energy/excitement when coding, I guess that's what happens when you know what you're doing. Definitely deserve a follow a person to look up to ❤️
@ViniciusNegrao_
@ViniciusNegrao_ 2 жыл бұрын
Man, I LOVE coding challenges, I love html canvas as well, so this seems like the perfect channel for me. Also you're very happy and entertaining :D
@BarneyCodes
@BarneyCodes 2 жыл бұрын
Love the concept, great video as always!
@evanbelcher
@evanbelcher Жыл бұрын
Wow I'm incredibly late to this channel apparently, but this is so cool! You do an amazing job at speaking at a level that is approachable to beginners without being boring or insulting to professionals like me, and it seems like you're genuinely having fun!
@chrismanning5232
@chrismanning5232 2 жыл бұрын
If we're never using the path history beyond drawing it, we could just bake it onto the image and not have an ever-expanding (memory-chomping) path array.
@TheCodingTrain
@TheCodingTrain 2 жыл бұрын
Yes, that would be so cool!
@realcygnus
@realcygnus 2 жыл бұрын
Nifty ! & I am quite familiar with Grady, he is awesome.
@RicoGalassi
@RicoGalassi 2 жыл бұрын
😂😂I saw the title and thumbnail and instantly thought you did a collab with practical engineering. Awesome video!
@PlasticBubbleCosplay
@PlasticBubbleCosplay 2 жыл бұрын
Can also be a top-down-view road-buikder or lawnmower with limited turning radius :-)
@TheCodingTrain
@TheCodingTrain 2 жыл бұрын
I like this idea!
@OfficialMGMusic
@OfficialMGMusic 2 жыл бұрын
I thought this would be boring, but it turned to be very drilling.
@g0d5m15t4k3
@g0d5m15t4k3 2 жыл бұрын
I'm glad to learn about your channel from Practical Engineering. Yay! You gained a new subscriber :)
@TheCodingTrain
@TheCodingTrain 2 жыл бұрын
Welcome aboard!
@andrewtc95
@andrewtc95 2 жыл бұрын
Great video. Now I want to try this for myself.
@shaileshrana7165
@shaileshrana7165 2 жыл бұрын
Good vid. Scoring rules would be interesting to decide
@astk5214
@astk5214 Жыл бұрын
Love coding, love big building stuff
@slembcke
@slembcke 2 жыл бұрын
Hah! Fun. I've actually implemented part of a math library to be used for HDD. Lots of fun stuff with high performance collision detection and such for interactive path planning tools. It involved lots of jokes about "working on the boring project today", "Hope I don't get bored...", etc. :p
@theman7050
@theman7050 2 жыл бұрын
More p5!!! Yesssss
@LucasundAaron
@LucasundAaron Жыл бұрын
When you think a second about it and realize this is rocket steering. Nice source code to get my intercontinental going ;P
@Car_Ram_Rod
@Car_Ram_Rod 2 жыл бұрын
Here for the coding! Also, Practical Engineering sent me!
@lucbloom
@lucbloom Жыл бұрын
How does HDD detect the position + direction of the bit? Does it also have sonar to estimate the formations ahead? I guess I should watch the video. A cool addition would be if you could hit a “sonar” button every 1 second that generates a wave that leaves behind a shroud of temporary “visibility” as it travels over the screen. Could also be auto-timed.
@berniezenis4876
@berniezenis4876 2 жыл бұрын
Horizontal Directional Drilling can be too slow in some instances. That is when SSD is used instead of HDD. More expensive but definitely faster, especially when you are drilling a single, long contiguous hole instead of a random bunch of small holes.
@snork_games
@snork_games 2 жыл бұрын
A Practical Engineering crossover!?!?! The quantum superpositions that are my subscriptions are collapsing together. Which is funny, as wave function collapse was a recent video =P
@JohnWesleyDavison
@JohnWesleyDavison 2 жыл бұрын
I enjoyed this video, I thought it was boring. That's it, that's the hole pun.
@thehappycoder3760
@thehappycoder3760 2 жыл бұрын
Brilliant who knew you could make a game out of that!
@nullpointer1755
@nullpointer1755 2 жыл бұрын
Love from Brazil ❤️!
@onebridge7231
@onebridge7231 2 жыл бұрын
Sent by PE from the directional drilling video.!
@Linuxdirk
@Linuxdirk 2 жыл бұрын
This is the first *boring* video on this channel :D
@lukey666lukey
@lukey666lukey 2 жыл бұрын
practical engineering sent me here
@CollinRaves
@CollinRaves 3 ай бұрын
Here from Practical Engineering!
@eXpire163
@eXpire163 2 жыл бұрын
Nice cut showing the studio
@redpug5042
@redpug5042 2 жыл бұрын
Maybe do something where you are told distances to obstacles and you have to navigate that way
@DenisovichDev
@DenisovichDev 2 жыл бұрын
Awesome!
@shainmohamed3022
@shainmohamed3022 2 жыл бұрын
Im learning about coding from your processing tutorials which was 6 years ago so im worried they might be out of date. so should i keep learning from them? Your content is amazing btw
@TheEmpowerment1
@TheEmpowerment1 Жыл бұрын
This is so cool
@SuperVeggieHero
@SuperVeggieHero 2 жыл бұрын
Can I suggest raising the laptop a bit? It might help with your ergonomics and it might also reduce the frequency of typos.. Thanks for these vids.
@frederickgivens9261
@frederickgivens9261 2 жыл бұрын
I've noticed a few times that you put stuff out and I think "idc" but then I come back later because it turns out iDOc and now I'm thinking, weird, I wonder why I'll need this in the near future
@planktonfun1
@planktonfun1 2 жыл бұрын
simulation + engineering collab
@Helloworld-lg6zm
@Helloworld-lg6zm 2 жыл бұрын
Practical engineering sent me here!
@bob_mosavo
@bob_mosavo 2 жыл бұрын
Grady @Practical Engineering sent me 😁
@twobob
@twobob 2 жыл бұрын
This looks like it might be the kind of thing an AI could have go at. one control input. maybe screen scraping. Red is Bad / Green = reward. perhaps optimise for pipe length over reward since circuitous solutions whilst fun would not be in the spirit of the challenge. Hugging face maybe? hmm
@x9rtu3os1t8
@x9rtu3os1t8 2 жыл бұрын
Amazing!!! Grady sent me.
@TheCodingTrain
@TheCodingTrain 2 жыл бұрын
Welcome!!
@diegogutierrez5989
@diegogutierrez5989 2 жыл бұрын
Thanks
@walidbezoui
@walidbezoui 2 жыл бұрын
Can you explain stable diffusion used in image genaration !
@artzified
@artzified 2 жыл бұрын
oh wow another video
@pritamdavis
@pritamdavis 2 жыл бұрын
Will try making 😃
@oop1761
@oop1761 2 жыл бұрын
Can you make a coding challenge where you try to make a barcode reader from scratch using the webcam?
@gownerjones
@gownerjones Жыл бұрын
That would be like a 4h coding challenge
@marianoviedo
@marianoviedo 2 жыл бұрын
Muy bueno el juego!!!
@rang3rj3sus94
@rang3rj3sus94 2 жыл бұрын
Does anyone have any suggestions on where to start learning to code? I want to have a career in programming but I don't know where to begin.
@andrewtc95
@andrewtc95 2 жыл бұрын
For me, Khan Academy was a great place to start. After that I'd recommend watching through some of the playlists by Coding Train and Dani Crossing.
@rang3rj3sus94
@rang3rj3sus94 2 жыл бұрын
@@andrewtc95 thank you, very much appreciated!
@youtubeuser206
@youtubeuser206 2 жыл бұрын
Does this p5 js have any professional applications, career wise? Or is it just for drawing MS paint style things
@gownerjones
@gownerjones Жыл бұрын
I'm a professional programmer and I used and use p5 a lot to practice in college. The drawing side of it is so easy and quick to understand that you can hardcore focus on the algorithms and the math you need to learn. Now that I have a job, I still come back to it to quickly try out new things. It's like doing puzzles, it keeps your brain sharp and since you're drawing things on screen, it's also fun.
@jayd152
@jayd152 2 жыл бұрын
Practical engineering sent me here and happen to be interested in coding so... just subscribed! check if you have any Python, R, and SQL. But into coding generally
@TheCodingTrain
@TheCodingTrain 2 жыл бұрын
So glad to hear! Unfortunately I'm mostly JavaScript (p5) and Java (Processing) but if you search I have a lot of videos related to data, APIs, and ML (that crossover in topics for what many use Python and R for).
@bastederbeste
@bastederbeste 2 жыл бұрын
Roundabout sharks are always turning
@bob_mosavo
@bob_mosavo 2 жыл бұрын
Cool channel!
@johnnyserup5500
@johnnyserup5500 2 жыл бұрын
That could actually be a cool game :-)
@dyneek
@dyneek 2 жыл бұрын
Nice one
@z3row0rm
@z3row0rm 2 жыл бұрын
Brady from practicing engineering sent me here
@TheCodingTrain
@TheCodingTrain 2 жыл бұрын
Welcome aboard!
@TheSourLemonz
@TheSourLemonz 2 жыл бұрын
watched this live :3
@tbgelectr0
@tbgelectr0 Жыл бұрын
This can be remade to a game and also use ML.
@abobakeralmusari6363
@abobakeralmusari6363 Жыл бұрын
HOW TO CODE THE DIRECTIONAL DRILLING PROJECT IN OIL AND GAS
@pfmcdermott1
@pfmcdermott1 2 жыл бұрын
Grady sent me!
@bumburnchannel7699
@bumburnchannel7699 2 жыл бұрын
2m subscriber coming very soon!
@MarcelaSLima-ck1ky
@MarcelaSLima-ck1ky 2 жыл бұрын
printf("Your videos are very nice! ");
@eugeniobarbieriviale2888
@eugeniobarbieriviale2888 2 жыл бұрын
Next challenge montecarlo method
@limboreversible
@limboreversible 2 жыл бұрын
I'm having a hard time implementing this code in processing . The array flexibility of p5.js is far bigger than in processing. Anyone has attempted this challenge in processing ? Thanks very much
@TheCodingTrain
@TheCodingTrain 2 жыл бұрын
Ah yes, this is really tricky! you'll want to investigate using an ArrayList.
@limboreversible
@limboreversible 2 жыл бұрын
@@TheCodingTrain thanks a lot !! It took me a while but cracked it ! // add coordinates of moving object to arrray PVector loc; PVector dir; float bias = -1; ArrayList pathV; /////button int rectX, rectY; // Position of square button int rectSize = 30; // Diameter of rect color rectHighlight, circleHighlight; boolean rectOver = false; boolean circleOver = false; void setup() { size(700, 700); // dir = dir.fromAngle(PI/4); //initial "attack angle" dir = dir.fromAngle(PI/2); pathV = new ArrayList (); loc = new PVector (0, 0); rectX = width/2; rectY = 0+rectSize/2; } void drill() { pathV.add(new PVector(loc.x, loc.y)); beginShape(); noFill(); strokeWeight(3); stroke(255, 0, 0); for (int i = 0; i < pathV.size(); i++) { vertex(pathV.get(i).x, pathV.get(i).y); } endShape(); } void draw () { background(150); update(); fill(0, 0, 144); noStroke(); rect(rectX, rectY, rectSize, rectSize); drill(); float angle = 0.01; dir.rotate(angle*bias); loc.add(dir); pushMatrix(); strokeWeight(15); stroke(0, 255, 0); translate(loc.x, loc.y); rotate(dir.heading()+(PI/6)*bias); line(0, 0, 10, 0); popMatrix(); } void mousePressed() { if (rectOver) { bias *= -1; } } void update() { if (overRect(rectX, rectY, rectSize, rectSize) ) { rectOver = true; } else { rectOver=false; } } boolean overRect(int x, int y, int width, int height) { if (mouseX >= x && mouseX = y && mouseY
@limboreversible
@limboreversible 2 жыл бұрын
Have no clue how efficient this is though
@macrus7064
@macrus7064 2 жыл бұрын
I don’t wear shoes if I don’t have to either!
@marcelcraig507
@marcelcraig507 2 жыл бұрын
i was sent by the big man him self
@meesvandenberg9468
@meesvandenberg9468 2 жыл бұрын
This is not boring at all
@gownerjones
@gownerjones Жыл бұрын
No, it's a boring simulation.
@toastyPredicament
@toastyPredicament 2 жыл бұрын
Wanna throw a party for Tech Tips?
@kwindafidler7728
@kwindafidler7728 Жыл бұрын
coming from overthere so u know
@cobaltbluesky2276
@cobaltbluesky2276 2 жыл бұрын
Me, geometry dash player: swing copter :)
@koribekconceicao9473
@koribekconceicao9473 2 жыл бұрын
progress. Now, two months later, I am editing for nice tutoet League teams and players, and making money off it. Keep your heads up and
@jesuslovesyoujohn314-21
@jesuslovesyoujohn314-21 Жыл бұрын
John 3:16 For God so loved the world, that he gave his only begotten Son, that whosoever believeth in him should not perish, but have everlasting life. Isaiah 53:6 All we like sheep have gone astray; we have turned every one to his own way; and the LORD hath laid on him the iniquity of us all.
@criscubillos
@criscubillos 2 жыл бұрын
I liked the theme but the video was too fast. Especially for those of us who do not speak English natively. I barely had time to look at some of the code.
@TheCodingTrain
@TheCodingTrain 2 жыл бұрын
Thanks for this feedback! I wonder if you might enjoy watching the full archive of the recording session? It's here: kzbin.info/www/bejne/lYrVmHarac-ris0
@criscubillos
@criscubillos 2 жыл бұрын
@@TheCodingTrain Of course!. The full video is like an "ASMR Engineer" for me. Thank you for your dedication, you are in my top 5 youtubers.
@ranyhaerunisa
@ranyhaerunisa 2 жыл бұрын
Sir please translate Indonesia....I want to study too
@nolannoble6323
@nolannoble6323 2 жыл бұрын
3:42
@shivkampani158
@shivkampani158 2 жыл бұрын
Boring isn’t… boring??!
@RajJaiswal538
@RajJaiswal538 2 жыл бұрын
Always has been
@marcyanus1430
@marcyanus1430 2 жыл бұрын
Barefoot coder?
@Jkauppa
@Jkauppa 2 жыл бұрын
how boring
@Jkauppa
@Jkauppa 2 жыл бұрын
intentionally boring, so boring
@Quidoute
@Quidoute 2 жыл бұрын
Try //@ts-check to get errors in VScode before running the code
@CivilF11
@CivilF11 2 жыл бұрын
I don't think he generally uses typescript in his projects.
@Quidoute
@Quidoute 2 жыл бұрын
@@CivilF11 it works with javascript in VSCode trust me
What was Coding like 40 years ago?
29:05
The Coding Train
Рет қаралды 1,7 МЛН
Coding the Collatz Conjecture
23:08
The Coding Train
Рет қаралды 135 М.
Миллионер | 3 - серия
36:09
Million Show
Рет қаралды 2 МЛН
Yay😃 Let's make a Cute Handbag for me 👜 #diycrafts #shorts
00:33
LearnToon - Learn & Play
Рет қаралды 117 МЛН
Coding the Hilbert Curve
28:08
The Coding Train
Рет қаралды 113 М.
Coding Challenge 166: ASCII Text Images
22:42
The Coding Train
Рет қаралды 1,1 МЛН
Coding Challenge 176: Buffon's Needle
25:04
The Coding Train
Рет қаралды 100 М.
How Do You Steer a Drill Below The Earth?
14:53
Practical Engineering
Рет қаралды 4,2 МЛН
Coding Challenge 180: Falling Sand
23:00
The Coding Train
Рет қаралды 1 МЛН
2008 Ditch Witch JT3020 All Terrain Directional Drill
9:10
MTIEQUIPMENT
Рет қаралды 202 М.
Bézier curves (Coding Challenge 163)
22:59
The Coding Train
Рет қаралды 272 М.
Coding Challenge #127: Brownian Tree Snowflake
19:25
The Coding Train
Рет қаралды 80 М.
Evolving Genetic Neural Network Optimizes Poly Bridge Problems
9:59
Horizontal Directional Drilling
6:39
Kinder Morgan
Рет қаралды 598 М.
Миллионер | 3 - серия
36:09
Million Show
Рет қаралды 2 МЛН