Gdyby poszukać krótkiego opisu zalet języka PHP, bez wątpienia znaleźlibyśmy, że:

  • nie trzeba kompilować – po prostu zmień kod i kliknij na Odśwież
  • kod jest przenośny – uruchomisz go na każdym systemie i wszędzie zadziała
  • przejrzysta składnia, w wielu miejscach podobna do starego, dobrego C

Trudno się nie zgodzić z dwoma pierwszymi argumentami. Rozważając jednak głębiej trzeci punkt, można zacząć mieć wątpliwości, czy aby nie jest tak, że jedynie słowa „podobna” i „starego” oddają rzeczywistość

Język C był niejednokrotnie krytykowany z wielu powodów – składnia i jej czytelność to jedne z nich. PHP, dziedzicząc z niego pewne elementy, przejmuje również niedogodności. Przede wszystkim: czytelność. Kulejącą.

Spójrzmy tylko na poniższy kod [który oczywiście pozbawiony jest sensu]:

function fcuk_the_legibility($s, $arr_data, $a, $b, $c) {
	switch ($c) {
		case 1:
			for ($i = 0; $i <= 10; $i++) {
				if ( ($a % 2) && ($a != $b) ) {
					while (!temp) {
						if ($c) {
							foreach ($arr_data as $item) {
								echo $item . "\n";
							}
							$temp = 1;
						} else {
							$temp = 1;
						}
					}
				} else {
					echo "Nie dopasowało się.\n";
					continue;
				}
			}
			break;
		default:
			break;
	}
}

Zaznacz dowolną klamrę zamykającą blok – co ona zamyka? Szukasz? No właśnie… Nowoczesne edytory kodu znacznie ułatwiają sprawę, ale ich zadaniem nie jest poprawianie czytelności, a jedynie usprawnienie nawigacji i kontroli nad kodem.

Niektórzy programiści poczuli potrzebę opisu domknięć bloków. Użyli do tego komentarzy:

function my_func($a) {
  if ($a) {
  } // END: if($a)
} // END: function my_func($a)

Ładnie. Pierwotny problem się rozwiązuje. Ale kod nadal pozostaje nieludzki, porównując go z takimi językami jak Ruby czy Python.

Nie każdy o tym wie, ale w PHP istnieje tzw. składnia alternatywna.

function alternative($s, $arr_data, $a, $b, $c) {
	switch ($c):
		case 1:
			for ($i = 0; $i <= 10; $i++):
				if ( ($a % 2) and ($a != $b) ):
					while (!temp):
						if ($c):
							foreach ($arr_data as $item):
								echo $item . "\n";
							endforeach;
			   			        $temp = 1;
						else:
							$temp = 1;
						endif;
					endwhile;
				else:
					echo "Nie dopasowało się.\n";
					continue;
				endif;
			endfor;
			echo "Done!n";
			break;
		default:
			break;
	endswitch;
}

Jak pisać za pomocą takiej składni?

  • bloki rozpoczynamy dwukropkiem
  • blok while kończymy za pomocą endwhile, for-endfor, if-elseif-else-endif, switch-endswith, foreach-endforeach
  • operatory logiczne && i || zastępujemy odpowiednio za pomocą and oraz or
  • warto dodać o operatorze alternatywy wykluczającej xor, przydatnym, choć dość rzadko używanym – ten posiada tylko słowny odpowiednik w PHP
  • należy pamiętać, że and ma niższy priorytet niż && (co się tyczy również operatora or) – patrz php.net

Ciekawą sprawą jest alternatywna wersja instrukcji echo:

Mam w domu  <?=$animal ?> i brata.

Trzeba tylko pamiętać o włączeniu dyrektywy short_open_tag. Osobiście nie używam takiej formy, ale jeśli ktoś ma ochotę…

Szczególnie ludzie embedujący kod PHP do HTMLa poczują wygodę stosowania składni alternatywnej (niektórzy twórcy szablonów Wordpressa nałogowo z tego korzystają):

<ul>
<?php foreach ($links_arr as $element): ?>
	<li><?php echo $element ?></li>
<?php endforeach; ?>
</ul>

Przeciwnicy składni alternatywnej zarzucają jej brak zwięzłości, wydłużenie czasu pisania kodu, niezgodność z konwencją narzuconą przez PEAR i wynajdywanie czegoś, co jest absolutnie niepotrzebne (i powołują się na plotki w dokumentacji PHP, na czego temat wywiązała się ciekawa dyskusja). Cóż, ich wybór. Ja cenię sobie czytelność kodu, bo to podstawa przy pracy nad nawet średnimi projektami, dlatego będę jej używał. Do czego również i Was zachęcam.

Komentarze: Skocz na dół, na górę

  1. Może i składnia PHP/C++ jest nieczytelna, ale za to zwięzła. Dlatego preferuję stosować komentarze na końcowych klamerkach, co ma także swoje zalety przy wielu zagnieżdżonych, lub kolejno występujący instrukcjach tego samego typu (np. kilka if z rzędu).

    A w szablonach… na pewno się przyda, o ile nie stosuje się Smarty.

    W ostatnim wycinku kodu brakuje chyba „?>” na końcu drugiej linijki.

  2. Dzięki, poprawiłem. :)

    Pamiętać trzeba o jednym: zwięzłość może i przyśpiesza pisanie, ale analizy już nie. Nie wspominając już o szukaniu błędów.

    Na szczęście PHP umożliwia pisanie na oba sposoby i każdy może wybrać to, co lubi najbardziej.

  3. IMO te klamry są najlepszym rozwiązaniem. Całkiem niedawno postanowiłem się poduczyć Pythona i na samym wstępie odrzuciła mnie jego składnia (a dokładnie czułość na spacje/tab-y).

    Przejrzystość kodu zależy przede wszystkim od stylu jakim się programuje.

    Można pisać tak:
    if()
    {
    ...
    }
    lub:
    if() {
    ...
    }

    i do tego dodać wcięcia, które jasno pokazują kod między klamrami i nie ma problemu [-;

  4. Nie rozumiem w tym kontekście przyrównania do składni Pythona. Może tam też istnieje jakaś składnia alternatywna, ale AFAIK to przecież bloki oznaczamy przez samą indentację. Biorąc pod uwagę kontekst wpisu, w którym miejscu jest to czytelniejsze od standardowej składni PHP? Wymusza indentację, ale przecież w dalszym ciągu nie wiadomo, jaki blok kończy zmniejszona indentacja…

    A odnośnie embedowania PHP do HTML-a chyba nie muszę się wypowiadać? Wydaje mi się, że ta kwestia była już wystarczająco dużo razy poruszana…

  5. „Pamiętać trzeba o jednym: zwięzłość może i przyśpiesza pisanie, ale analizy już nie. Nie wspominając już o szukaniu błędów.”
    Amen. Niektórzy wolą oszczędzać po sekundę-dwie pisząc kilka znaków mniej (nie wspominając o edytorach, które potrafią dopełniać tego typu rzeczy automagicznie), a potem analizować kod 20 minut zamiast 5…
    Nie wiedziałam że PHP ma taki bajer (nie używam) – w każdym razie jak dla mnie kapitalny pomysł.

    Inna rzecz że przy tylu poziomach zagnieżdżenia (switch-for-if-while…) to warto jednak pomyśleć o refaktoryzacji takiego kawałka kodu.

  6. PS. Tak obalając wspomniane na początku zalety:
    1. Kompilować faktycznie nie trzeba, jak w każdym języku skryptowym. Jednak czy warto rezygnować z kompilacji, tracąc tak wiele na wydajności?
    2. Przenośność też nie do końca — niby zasadnicza warstwa jest przenośna, ale jest też spora grupka funkcji, pod względem wsparcia których PHP dla Windows jest upośledzone (tutaj zaznaczę, że nie wiem, czy w nowszych wersjach to się nie zmieniło).

  7. Michał Górny: Kontekst wypowiedzi o Pythonie i Rubym mógł być faktycznie nieco mylący. Mi chodziło bardziej o ogólne wrażenie, jakie sprawiają te dwa języki. Akapit przekazywał jedynie tyle, że jest coś, co można zrobić, by PHP nie było tak bardzo do tyłu.

    O ile mi wiadomo, Python nie posiada tego typu alternatyw. Ale ich nie potrzebuje – jego kod jest wystarczająco przejrzysty (i znów mówię tutaj globalnie, nie w kontekście bloków). Ruby też nie ma, ale można to bardzo łatwo obejść, i to na dwa sposoby.

    A co do Twojego PS. – myślę, że bezsensownym zabiegiem jest czepianie się na siłę tego, co jeszcze zostało. Tym bardziej, że nie prowadziłem mądrego wykładu o PHP, a jedynie pisałem o tym, jak niektórym zdarza się określać ten język.

  8. Cachotterie ma rację, zwykle nie ma potrzeby tworzenia takich głębokich zagnieżdżeń. I wtedy wystarczy stosować
    if ()
    {
    <tab>kod…
    }
    i jest ładnie i czytelnie.

  9. Re: PHP: Czytelność kodu i składnia alternatywna

    Dziś na Techblogu, Razorjack poruszył kwestię czytelności kodu. Postanowiłem dodać więc swoje III grosze w tej sprawie.
    Widziałem już wiele sposobów zapisu kodu. Zarówno te złe:

  10. BTW, źle wpisałeś alternatywę dla echo. Powinno być <?=$animal ?> a nie <?php =$animal ?>. Zresztą chyba o to pierwsze ci chodziło, skoro mówisz o short_tags ;)

  11. Wpis fajowy, chciałbym żeby JavaScript takie coś miało. Używając Object Notation i pisząc parę ifów/forów w funkcji w końcu nie wiem gdzie jestem. :]

    D4rky: „pre.” nie zadziała chyba (Textile Lite?), używaj „bc.” :)

  12. Riddle – Textile zwykłe, a bc mi zignoruje wcięcia, o które chodzi. Puściłem trackback, mój komentarz proszę skasować

  13. D4rky: Komentarz usunięty. I poprawiłem kod, dzięki wielkie. Głupi błąd, z przyzwyczajenia napisałem „po swojemu”. ;)

    Włączyłem też Textile dla komentarzy, jakby kogoś to interesowało.

  14. A ja się nie zgodzę z pierwszym argumentem. W produkcyjnym zastosowaniu możliwość statycznej analizy kodu (w czasie kompilacji) jest nieoceniona.

    A co do składni: nie lepiej to rozbić na funkcje zamiast generować spaghetti?

  15. Jasne, że lepiej. To nie był artykuł o tym, jak błędnie kodować wszystko w jednej funkcji, tylko o tym, czemu składnia alternatywna może się okazać cenna. Dałem przykład ekstremalny i nierealny, by jeszcze bardziej wszystko uwydatnić :).

  16. Kod celowo pisany bez wcięć.

    if($a):
    if($b):
    if($c):
    if($d):
    // bum;
    else:
    // tralala
    endif;
    else:
    // tralala
    endif;
    else:
    // tralala
    endif;
    elseif($ziutek):
    // cyk
    endif;

    Czytelne? Nie. Przynajmniej nie dla mnie. Przy paru(nastu) ifach nawet ta superaśna składnia alternatywna zmusza do poświęceniu paru chwil na liczenie, „który endif jest do którego ifa i skąd tu się wziął ten elseif”. No i nowsze edytory nic nie podświetlą, bo to niezgodne ze składnią. A co by było, gdyby były wcięcia? Ale wcięcia można też zastosować w składni normalnej, „i wychodzi na moje”.

    „Zaznacz dowolną klamrę zamykającą blok – co ona zamyka? Szukasz?” – nie, nie szukam, po prostu jadę kursorem trochę do góry i sprawdzam, gdzie na tym samym poziomie wcięć jest rozpoczęcie bloku. Do tego, skoro doskonale znam mój własny projekt (wszak to JA go tworzę), to się w nim nie powinienem gubić, bo znam go jak własną kieszeń... nieprawdaż?

  17. Tak duże nagromadzenie ifów nie występuje w praktyce. A jeśli już, to tworzy się jedną dużą funkcję logiczną, która zajmuje jedną linijkę i w całości dotyczy jednego bloku, a nie czterech.

    Jedziesz kursorem w górę? W takim razie nie robisz nic innego jak po prostu szukasz. A ja patrzę na endfor i dokładnie wiem o tym, który blok zostaje tym słowem zamknięty.

    Jeśli się nie gubisz, kiedy projekt osiąga powyżej 30 tysięcy linijek, to jesteś dobry. Ja jednak od samego początku lubię się wspierać naturalną wieloklasowością i wielowarstwowością projektów. A jeśli projekt wykonuję samemu, to również składnią alternatywną. Bo przyznam, konwencje są szalenie ważne, dlatego jeśli jest on współtworzony przez innego kodera, to użyję składni rekomentowanej przez PEAR. Bo właśnie ta, a nie alternatywna, jest zalecana i „oficjalna”.

  18. „Tak duże nagromadzenie ifów nie występuje w praktyce.” – występuje… ja się z takim nagromadzeniem bardzo wiele razy spotykałem, ba, sam tak kodziłem ;]

    „A ja patrzę na endfor…” – zamień w moim poprzednim przykładzie wszystkie „if” na „for”. I co? Bo wierz mi, takie sytuacje TEŻ występują – albo mogą wystąpić.

    Cóż, jak dotąd jeszcze nic większego nie napisałem (nie żeby miało 30k linijek), więc się nie gubię ;>

  19. echo „$itemn”; – tym mnie dobiłeś :D Widać jaki poziom programisty :)

  20. Komplikowałem przykład najbardziej jak się da. Zagalopowałem się, jak widać, i wydajność też skomplikowałem :P. Poprawiłem. Na pewno czepialskim coś jeszcze w tym nie będzie grało, ale nie będę już tego poprawiał, bo nie o to w tym poście chodzi.

  21. Re: PHP: Czytelność kodu i składnia alternatywna

    Dziś na Techblogu, Razorjack poruszył kwestię czytelności kodu. Postanowiłem dodać więc swoje III grosze w tej sprawie.

  22. a jak ma się to na wydajność ?? A druga rzecz to wg mnie jest przydatne jedynie podczas wklejania kodu PHP w kod HTML a nie w innych sytuacjach. Programowanie z tym może tylko zabić czytelność :) bynajmniej tak miałem w DELPHI:

    IF cos THEN
    begin {rob cos}
    end

    na początku jest oki. czytelne i wogóle, po dwóch dniach zabawy zaczyna wkur…. a po tygodniu spokojnie wyrzucasz delphi do smieci i programujesz w C++ Builder (wtajemniczeni wiedzą dlaczego builder) :) Każdy będzie programował w tym co mu pasuje, mi podchodzi składnia C ale jeśli muszę zrobić coś takiego:

    <ul> <?php foreach ($data as $value) :?> <li><?php echo $value[‘art_id’].” „.$value[‘tytul’]; ?></li> <?php endforeach; ?> </ul>
    No to czytelniejsze jest jednak alternatywna składnia.

  23. Ta składnia, tak jak pisałem, nie jest zgodna ze standardem PEAR, dlatego można co najwyżej użyć do czytelniejszego embedowania kodu PHP do HTML. Ale w dobie systemów szablonowania nie jest to najlepszy pomysł.

    Poza tym… to jeszcze jest ktoś na tej planecie, kto pisze w PHP? ;)

  24. jeszcze jakieś 15 mln osób :P A dlaczego nie PHP, to co wówczas wolne RUBY ?? Python ?? Jak już miałbym się przerzucić z PHP na coś innego to wybrałbym J2EE, w ekstremalnym wypadku .NET (dlaczego ekstremalnym, bo nie lubię za bardzo tej technologii, ale to moje zdanie). PHP w połączeniu z Zend Framework wg mnie naprawdę dobrze wygląda. Choć szczerze przyznam skłaniam się jednak w kierunku JAVA i technologii oplatajacych np. wymienione J2EE.

  25. Ruby wolny? Poczekaj na Ruby 2.0. A póki co – spójrz na test wydajności różnych frameworków. PeHaPowe wypadają zdecydowanie najgorzej. Jeśli tak lubisz Zenda, to zajrzyj jeszcze do dyskusji na temat wydajności ZF. Ja wiem, że 1.03 to co innego niż 1.5, ale poszukaj w necie i zobaczysz, że wydajność jest żałosna – zarówno ZF, jak i Symfony. Rails może wypaść parokrotnie szybciej – Django paredziesiątkrotnie!

    A skoro PHP wypada beznadziejnie w testach wydajności i samo w sobie jest beznadziejne (frameworków też nie ma za fajnym IMO) – nie widzę powodów, by w nim pisać.

  26. Stary, to że nie lubisz Zenda i Symfony, to nie jest argument odnośnie ich „fajności”. PHP jeszcze trochę pociągnie właśnie dzięki takim rozwiązaniom.

  27. Hi there! Do you use Twitter? I'd like to follow you if that would be ok. I'm absolutely enjoying your blog and look forward to new posts.

  28. Why people still use to read news papers when in this technological globe all is existing on web?

  29. Hi, I do believe this is an excellent site. I stumbledupon it ;)
    I will come back yet again since i have saved as a favorite it.
    Money and freedom is the best way to change, may
    you be rich and continue to guide other people.

  30. Gday! I
    hope you do not mind but I decided to publish your weblog:
    http://blog.razorjack.net/2007/03/25/php-czytelnosc-kodu-i-skladnia-alternatywna/ to my online directory.
    I used, "PHP: Czytelność kodu i składnia alternatywna // rubedo -- alchemy_of :ruby, :rails" as your web site title.
    I hope this is fine with you. In
    case you'd like me to change the title or perhaps
    remove it completely, contact me at katherina.wilcox@imap-mail.com. Thank you so much.

  31. Hello to every one, it's in fact a pleasant for me to visit this web page, it consists of useful Information.

  32. I absolutely love your blog and find many of your post's to be exactly I'm looking for.
    Does one offer guest writers to write content in your case?

    I wouldn't mind creating a post or elaborating on some of the subjects you write with regards to here. Again, awesome web site!

  33. I truly love your website.. Excellent colors & theme.
    Did you create this amazing site yourself? Please reply back as I'm attempting to create my very own blog and want to know where you got this from or just what the theme is called. Many thanks!

  34. Hey there just wanted to give you a quick heads up.

    The text in your content seem to be running off the screen in Opera.
    I'm not sure if this is a format issue or something to do with browser compatibility but I figured I'd post to let you know.

    The layout look great though! Hope you get the issue fixed soon.
    Cheers

  35. Hi, yeah this piece of writing is really fastidious and
    I have learned lot of things from it concerning blogging.
    thanks.

  36. Do you have any video of that? I'd care to find out some additional information.

  37. I read this post fully on the topic of the comparison of most recent and
    previous technologies, it's awesome article.

  38. I simply couldn't leave your web site prior to suggesting that I really enjoyed the standard info an individual provide to your visitors? Is going to be again ceaselessly in order to investigate cross-check new posts

  39. Heya terrific website! Does running a blog similar to this require
    a great deal of work? I have virtually no knowledge of coding
    but I was hoping to start my own blog in the near future.
    Anyhow, if you have any recommendations or techniques for new blog owners please share.

    I know this is off topic but I just had to ask. Appreciate
    it!

  40. I have been browsing online more than 3 hours nowadays, but I never discovered any interesting article like yours.
    It is lovely price enough for me. Personally, if all site owners and
    bloggers made excellent content as you probably did, the internet will be a lot
    more helpful than ever before.

  41. When someone writes an piece of writing he/she maintains the image of a user in his/her mind that how a user can understand
    it. Therefore that's why this piece of writing is amazing. Thanks!

  42. Highly descriptive post, I loved that bit. Will there be a part 2?

  43. Please let me know if you're looking for a writer for your blog. You have some really great posts and I think I would be a good asset. If you ever want to take some of the load off, I'd love to write some articles for your blog
    in exchange for a link back to mine. Please blast me an e-mail if interested.
    Regards!

  44. dpqmwu

  45. uogxelui http://itsemq.com/

  46. Woah! I'm really digging the template/theme of this site. It's simple,
    yet effective. A lot of times it's tough to get that "perfect balance" between user friendliness and visual appearance. I must say you've done a fantastic job with this.
    Additionally, the blog loads extremely fast for me on Internet explorer.
    Excellent Blog!

  47. Amazing! Its truly awesome post, I have got much clear idea about from this
    article.

  48. oncuehf

  49. Thanks for your marvelous posting! I seriously enjoyed reading it, you
    are a great author. I will remember to bookmark your blog and definitely will
    come back from now on. I want to encourage one to continue your great job, have a nice
    holiday weekend!

  50. Hello I am so grateful I found your blog page, I really found you by
    mistake, while I was looking on Aol for something else, Nonetheless I am here now and would just like to say kudos for a marvelous
    post and a all round exciting blog (I also love the theme/design), I don't have time to browse it all at the minute but I have saved it and also added in your RSS feeds, so when I have time I will be back to read much more, Please do keep up the awesome work.

  51. I am actually pleased to glance at this blog posts which contains tons of helpful
    facts, thanks for providing these statistics.

  52. Usually I do not learn post on blogs, however I would like to say that
    this write-up very forced me to try and do it! Your writing taste has been amazed me.
    Thank you, quite nice article.

  53. I am sure this article has touched all the internet users, its really really pleasant piece of writing on building up new webpage.

  54. Hey! Do you know if they make any plugins to protect
    against hackers? I'm kinda paranoid about losing everything I've worked hard on.
    Any recommendations?

  55. Appreciate this post. Will try it out.

  56. fguikbn

  57. yeejpj

  58. tddgaa

  59. andepoak

  60. dzdclbps

  61. knetcxe

  62. It is actually a great and helpful piece of info.
    I'm satisfied that you shared this useful info with us. Please stay us up to date like this. Thanks for sharing.

  63. Great blog here! Also your site loads up fast! What web host are you using?
    Can I get your affiliate link to your host? I wish my site loaded up as fast as yours lol

  64. qxrqknnv

  65. dcrrvt

  66. igmjxs

  67. gcfxwpir

  68. It's wonderful that you are getting ideas from this paragraph as well as from our discussion made at this place.

  69. What a material of un-ambiguity and preserveness of precious familiarity about unpredicted emotions.

  70. cdsedbq

  71. eriqnq

  72. yixzudog

  73. sczpzrsp

  74. gceyub

  75. egbzzwk

  76. irvqqbc

  77. djddzrzs

  78. poiljoyj

  79. pmnlqunh

  80. wfqikdi

  81. gtrcjhn

  82. You really make it seem so easy with your presentation but I find this
    topic to be actually something that I think I would never understand.
    It seems too complex and extremely broad for me. I am looking
    forward for your next post, I will try to get the hang
    of it!

  83. ropsvolw

  84. I just like the helpful information you provide on your articles.

    I will bookmark your weblog and test again
    here regularly. I'm reasonably sure I will learn a lot of new stuff right right here! Good luck for the next!

  85. tfuali

  86. aossxwqy

  87. ilswsbm

  88. lclxnjsl

  89. borvgypc

  90. Terrific article! That is the type of information that should be shared across the web.
    Shame on Google for not positioning this put up upper!
    Come on over and seek advice from my website .

    Thanks =)

  91. I don't even know the way I ended up right here, however I thought this submit was great. I do not realize who you are but definitely you're
    going to a famous blogger if you happen to aren't already. Cheers!

  92. jbhuidv

  93. jujetdg

  94. wmhtsbs

  95. I am curious to find out what blog system you're working with?
    I'm having some minor security issues with my latest site and I would like to find
    something more secure. Do you have any suggestions?

  96. Hurrah, that's what I was seeking for, what a stuff! present here at this weblog, thanks admin of this web site.

  97. oqgqsdi

  98. uvdmcldl

  99. fcntclc

  100. gwzoiyb

  101. vdfnguh

  102. winpfa

  103. irpiubjs

  104. Howdy this is somewhat of off topic but I was wondering
    if blogs use WYSIWYG editors or if you have to
    manually code with HTML. I'm starting a blog soon but have no coding expertise
    so I wanted to get guidance from someone with experience.
    Any help would be greatly appreciated!

  105. Hmm it looks like your blog ate my first comment (it was extremely long) so I guess I'll just sum it up
    what I wrote and say, I'm thoroughly enjoying your blog.
    I too am an aspiring blog writer but I'm still new to the whole thing.
    Do you have any tips for rookie blog writers? I'd really appreciate it.

  106. Simply want to say your article is as astounding.
    The clearness in your post is just great and i can assume you are an
    expert on this subject. Well with your permission let me to grab your RSS feed
    to keep up to date with forthcoming post.
    Thanks a million and please continue the rewarding work.

  107. Excellent post. I will be dealing with a few of these issues as well..

  108. gxaqwhbw

  109. Another key to keep in mind is when you would like
    to generate your own personal electric to operate the system.
    Aquaponics gives a great experience of staying near nature inside the clustered and chaotic cities.

    Growing fish that can easily catch diseases and parasites might be disheartening.

  110. Unlike traditional agriculture that you needed plants to develop vegetables, with aquaponics you'll need water and fish as a way to have appropriate food choices on your table each
    day. Aquaponics is a combination of growing fish or aquaculture,
    and growing plants without soil or hydroponic. The sky in fact is
    the limit with the type of fish you'll be able to
    grow (provided you will find no bans on doing this).

  111. Exceptional post however , I was wondering if you could
    write a litte more on this subject? I'd be very thankful if you could elaborate a little bit further.
    Bless you!

  112. Set the coarse frequency of oscillators 1 and a pair of to -24.
    His dubs were performed by hand with no automation, no DSP, just an 8 track tape,
    a mixing desk, the mutes and solos plus some primitive effects units.
    There are plenty major music making software available like Propellerhead's Reason 5 nevertheless the biggest downside to
    them is that you simply need to have mad experience to create anything
    with them.

  113. Admiring the hard work you put into your website and in
    depth information you offer. It's nice to come across a
    blog every once in a while that isn't the same old rehashed material.
    Great read! I've bookmarked your site and I'm adding your RSS feeds to my Google account.

  114. Just wish to say your article is as surprising. The clarity to your publish is just spectacular and that i could think you're knowledgeable in this subject.
    Well together with your permission let me to grasp your RSS feed to
    keep updated with imminent post. Thank you a million and
    please continue the enjoyable work.

  115. Hi everyone, it's my first pay a quick visit at this web page, and paragraph
    is actually fruitful in favor of me, keep up posting these types of articles or
    reviews.

  116. So let's look at how to address the hazards and great things about weight loss:.
    As soon once we start running out of pants for in our closet and should not find any size tailored for
    our bulging midsections inside the ready-to-wear
    section from the department store, self-esteem requires a nosedive.

    No one will stop you from listening to your favorite
    music on your i-pod as well.

  117. Unquestionably imagine that that you said. Your favorite
    reason appeared to be on the web the easiest thing to bear in mind of.

    I say to you, I certainly get irked whilst folks think about issues that they plainly do not
    understand about. You managed to hit the nail upon
    the top and outlined out the whole thing with no need side-effects , folks can take a signal.
    Will likely be back to get more. Thanks

  118. You need to be a part of a contest for one of the finest sites online.
    I'm going to recommend this website!

  119. Nice blog here! Also your site loads up fast! What web host are you using?
    Can I get your affiliate link to your host? I wish my web site loaded up as fast as yours
    lol

  120. This website was... how do I say it? Relevant!!
    Finally I have found something that helped me. Thanks a
    lot!

  121. Hі! I've been reading youjr web site fօr a lօng
    time now and finally got tɦe bravery to go ahead and give yoou a
    shout oսt from Austin Tx! Just ԝanted tto ѕay kеep up the excellent job!

  122. Right here is the right website for anybody who really wants to
    find out about this topic. You understand a whole lot its almost hard to argue with
    you (not that I actually will need to…HaHa).
    You definitely put a new spin on a topic that has been
    discussed for many years. Great stuff, just great!

  123. Hello just wanted to give you a quick heads up. The words in your article seem to be running off
    the screen in Safari. I'm not sure if this is a format issue or something to
    do with browser compatibility but I thought I'd post to let you know.
    The design look great though! Hope you get the issue
    solved soon. Thanks

  124. Hi, I do think this is a great web site.
    I stumbledupon it ;) I may come back yet again since i
    have book marked it. Money and freedom is the best way
    to change, may you be rich and continue to help others.

  125. Howdy! Quick question that's totally off topic. Do you know how to
    make your site mobile friendly? My weblog looks weird when viewing
    from my iphone 4. I'm trying to find a template or plugin that
    might be able to correct this issue. If you have any suggestions, please share.
    Appreciate it!

  126. Greetings! I know this is kinda off topic however I'd
    figured I'd ask. Would you be interested in trading links
    or maybe guest authoring a blog post or vice-versa? My site goes
    over a lot of the same topics as yours and I feel we
    could greatly benefit from each other. If you are interested feel free to shoot me an e-mail.
    I look forward to hearing from you! Terrific blog by the way!

  127. I know this site presents quality based content and additional information, is there
    any other web page which presents these information in quality?

  128. Its not my first time to go to see this site, i am visiting this web site
    dailly and obtain pleasant facts from here everyday.

  129. Unlike other genres of music, this division of dance music is in fact very
    easily identified. There are many arguments for every, but ultimately its approximately you.
    It's generally not recommended to EQ after compression because aggressive EQ setting will cause peaks across the 0db threshold and you also want to ensure that the
    compressor is employed in full.

  130. It's an amazing piece of writing designed for all the online people;
    they will take benefit from it I am sure.

  131. I constantly emailed this blog post page to all my contacts, because if like to read
    it after that my friends will too.

  132. I do consider all the ideas you have offered to your post.
    They're very convincing and can definitely work.
    Nonetheless, the posts are too quick for novices. Could you please prolong them a bit from
    subsequent time? Thanks for the post.

Dodaj komentarz na temat

Zanim skomentujesz...

W komentarzach działają znaczniki Textile.
Zastrzegam sobie prawo do edycji Twojego komentarza tylko i wyłącznie w celach estetycznych (naprawienie źle wstawionego kodu, itp). Nie zmieniam ich treści, ortografii, interpunkcji. Jeśli odczuwasz potrzebę edycji swojego komentarza, skontaktuj się ze mną, a zdziałamy co trzeba.