Warung Bebas

Selasa, 30 April 2013

Dasar-dasar HTML ~ mengubah ukuran gambar,boder,dan tittle

Dasar-dasar HTML ~ Artikel ini membahas tentang beberapa perintah dasar HTML,diantaranya :


* Cara mengubah ukuran gambar
* Cara/penggunaan border
* Penggunaan Title

Bagi pemula,hal ini sangat bermanfaat untuk coding selanjutnya dan merupakan salah satu pondasi bagi programer web.
Untuk lebih jelasnya,kita akan membuat sebuah tampilan seperti dibawah ini :


Untuk menampilkan sebuah tampilan seperti diats,ketik perintah berikut ini :

<html>
<head>
<title>Tugas</title>
</head>
<body bgcolor="#0080FF">
<h1>TUGAS</h1>
<ol type="I">
<li><b>Mengubah Ukuran Gambar / Foto</b></p>
<img src="Image/Aq.jpg" width="200" height="250" />
<img src="Image/Aq.jpg" width="100" height="150" /></p></p>

<li><b>Alternatif Image</li></P>
<img src="Image/Untitled-1.jpg" width="200" height="250" title="Indonesiacoding.com" />
<img src="Image/Aq.jpg" width="200" height="250" title="adhye08agustus.blogspot.com"></p>
</body>
</html>

Penggunaan Border / bingkai foto
















untuk menampilkan tampilan diatas,tambahkan perintah berikut ini di antara <ol> pembukan dan </ol> penutup  :

<li><b>Image Border</b></li></p>
<img src="Image/adhye.JPG" width="150" height="200" border="5" />
<img src="Image/adhye.JPG" width="150" height="200" border="10" />



Semoga bermanfaat..

Fungsi dan kedudukan bahasa Indonesia

Pada artikel kali ini,penulis membahas sedikit tentang fungsi dan kedudukan bahasa indonesia.Dan penulis berharap agar bisa bermanfaat bagi para pembaca.

1. Fungsi Bahasa Indonesia
a. Sebagai alat untuk mengungkapkan Ekspresi diri
Bahasa, dalam hal ini yaitu Bahasa Indonesia dapat digunakan sebagai alat untuk mengungkapkan Ekspresi diri. Dengan bahasa, kita dapat mengungkapkan perasaan/ekspresi yang sedang kita rasakan atau hendak kita tunjukan kepada orang lain sehingga orang lain dapat
mengerti apa yang kita maksudkan.
b. Sebagai alat Komunikasi
Dalam berkomunikasi alat yang paling sering/lazim digunakan adalah Bahasa. Dengan adanya bahasa, setiap orang dapat saling berkomunikasi dan berinteraksi dengan orang lain. Komunikasi adalah kelanjutan dari ekspresi diri yang kita sampaikan kepada orang lain dan mendapatkan respon balik dari ekspresi yang kita sampaikan tersebut.
c. Sebagai Adaptasi & Integrasi
Dalam kehidupan kita sebagai makhluk sosial, selain berkomunikasi kita dituntut untuk dapat berbaur & menyesuaikan diri (beradaptasi) dengan lingkungan disekitar kita. Dengan adanya bahasa, kita akan dapat dengan mudah berbaur dan menyesuaikan diri dengan lingkungan disekitar kita atau lingkungan yang sedang kita datangi. Pada saat kita beradaptasi dengan lingkungan sosial tertentu, kita akan memilih dan menggunakan bahasa yang sesuai dengan situasi dan kondisi yang sedang kita hadapi.
d. Sebagai Kontrol Sosial
Bahasa sebagai Kontrol Sosial, dengan adanya bahasa dapat memberikan kontrol terhadap perilaku/tingkah laku/sikap yang dilakukan.
Misalnya:
Hati-hati jalan Licin!!.
Pemberitahuan tersebut dimaksudkan untuk dapat berhati-hati dalam melewati jalan tersebut karena kondisi jalan yang licin.

2. Kedudukan Bahasa Indonesia
Kedudukan Bahasa Indonesia terdiri dari :
1. Bahasa Indonesia sebagai Bahasa Nasional
Fungsi Bahasa Indonesia dalam kedudukannya sebagai bahasa nasional:
  1). Bahasa Indonesia berfungsi sebagai Lambang kebanggaan kebangsaan
Bahasa Indonesia mencerminkan nilai – nilai sosial budaya yang mendasari rasa kebangsaan kita. Atas dasar kebanggaan ini , Bahasa Indonesia harus kita pelihara dan kita kembangkan. Serta harus senantiasa kita bina rasa bangga dalam menggunakan Bahasa Indonesia.
  2). Bahasa Indonesia berfungsi sebagai lambang identitas nasional
Bahasa Indonesia dapat memiliki identitasnya apabila masyarakat pemakainya/yang menggunakannya membina dan mengembangkannya sehingga bersih dari unsur – unsur bahasa lain.
  3). Bahasa Indonesia berfungsi sebagai alat perhubungan antar warga, antar daerah, dan antar budaya
Dengan adanya Bahasa Indonesia kita dapat menggunakannya sebagai alat komunikasi dalam berinteraksi/berkomunikasi dengan masyarakat-masyarakat di daerah (sebagai bahasa penghubung antar warga, daerah, dan buadaya).
  4). Bahasa Indonesia berfungsi sebagai alat yang memungkinkan penyatuan berbagai – bagai suku bangsa dengan latar belakang sosial budaya dan bahasanya masing – masing kedalam kesatuan kebangsaan Indonesia.
Dengan bahasa Indonesia memungkinkan berbagai suku bangsa mencapai keserasian hidup sebagai bangsa yang bersatu dengan tidak perlu meninggalkan identitas kesukuan dan kesetiaan kepada nilai – nilai sosial budaya serta latar belakang bahasa daerah yang bersangkutan.

2. Bahasa Indonesia sebagai Bahasa Negara
Fungsi Bahasa Indonesia dalam kedudukannya sebagai bahasa Negara:
  1). Bahasa Indonesia berfungsi sebagai bahasa resmi kenegaraan
Sebagai bahasa resmi kenegaraan , bahasa Indonesia dipakai didalam segala upacara, peristiwa dan kegiatan kenegaraan baik dalam bentuk lisan maupun tulisan.
  2). Bahasa Indonesia berfungsi sebagai bahasa pengantar didalam dunia pendidikan
Bahasa Indonesia merupakan bahasa pengantar yang digunakan di lembaga – lembaga pendidikan mulai dari taman kanak – kanak sampai dengan perguruan tinggi diseluruh Indonesia.
 3). Bahasa Indonesia berfungsi sebagai alat perhubungan pada tingkat nasional untuk kepentingan perencanaan dan pelaksanaan pembangunan
Bahasa Indonesia dipakai bukan saja sebagai alat komunikasi timbal – balik antara pemerintah dan masyarakat luas, dan bukan saja sebagai alat perhubungan antar daerah dan antar suku , melainkan juga sebagai alat perhubungan didalam masyarakat yang sama latar belakang sosial budaya dan bahasanya.
  4). Bahasa Indonesia berfungsi sebagai alat pengembangan kebudayaan, ilmu pengetahuan dan teknologi.
Bahasa Indonesia adalah satu – satunya alat yang memungkinkan kita membina dan mengembangkan kebudayaan nasional sedemikian rupa sehingga ia memikili ciri – ciri dan identitasnya sendiri ,yang membedakannya dari kebudayaan daerah.

Semoga bermanfaat...


Keterampilan dalam membaca sastra

Keterampilan membaca sastra ~ nach untuk kali ini,artikel ini beda dengan artikel yang sebelum-sebelumnya yaitu mengenai materi komputer,materi pemrograman,dan artikel-artikel mengenai teknologi lainnya.Saya berfikir,membaca memang hampir semua manusia sudah tau'bahkan anak yang masih berumur 4 thn saja sudah bisa membaca.Tapi yang jadi masalah,bagi yang jurusan sastra perlu tau teknik mengenai keterampilan dalam membaca.Dalam membaca sastra.
Ada empat ketrampilan  yang mempunyai tujuan dan tingkat

kesulitan yang berbeda tanpa meniadakan satu dengan yang lain, yaitu 



1) membaca untuk mencari informasi, 
2) membaca untuk menginterpretasi, 
3) membaca untuk memberikan
pandangan kristis dan 

4) membaca kreatif dengan tujuan menulis ulang. 

Kesulitan umum yang sering dijumpai para mahasiswa adalah membedakan rambu-rambu dan kosa kata yang dipakai oleh ke-empat jenis pembacaan tadi tanpa menimbulkan kerancuan. Saya akan menguraikannya secara singkat sebagai berikut:

1. Informative Reading
Membaca karya sastra untuk mencari informasi berangkat dari tradisi kritik praktis (Practical Criticism) yang dirintis oleh I. A. Richards pada tahun 1920-an yang selanjutnya menjadi salah satu pendekatan sastra abad ke-20 yang cukup digemari. Menurut cara baca ini, teks dianggap nir-waktu dan maknanya tidak dipengaruhi oleh latar belakang penulis, konteks sejarah ataupun kondisi penciptaannya. Tugas pembaca adalah mencermati bentuk,isi, dan gaya sebuah teks untuk menilai secara obyektif pada apa yang tertulis. Yang saya amati, banyak mahasiswa yang kadang lupa bahwa tugas mereka adalah mencari informasi sebanyak-banyaknya tentang sebuah karya lewat ‘the words on the page’ dan membedakan dengan jelas apakah teks yang dibaca berupa puisi, cerita pendek, novel atau drama karena masing-masing genre harus diperlakukan berbeda. Ketrampilan ini nampaknya belum dikuasai sehingga mereka biasanya cukup puas jika bisa menjawab pertanyaan “What is the novel about?”, misalnya, dan dengan pola pertanyaan sama membicarakan berbagai jenis teks. Pertanyaan yang tidak tepat ini dijawab dengan tidak tepat pula karena Informative Reading pada hakekatnya menanyakan “What does a text say?”

2. Interpretative Reading
Setingkat lebih tinggi dari yang biasa disebut “close reading”, tahap pembacaan interpretatif tidak lagi menjawab “what happened” tetapi “what if it had happened to me”. Kata kunci Interpretative Reading adalah “life application” sastra untuk kehidupan sehari-hari. Pada tahap ini pembaca mengandaikan dirinya sebagai salah satu pelaku peristiwa dalam dunia sastra. Pembaca memasuki wilayah imajiner, misalnya ketika dia, dalam angannya, menaggapi suatu peristiwa atau berdialog dengan tokoh-tokoh lain. Terciptalah komunikasi antara teks dan pembaca. Pada prakteknya Interpretative Reading mirip dengan Practical Criticism yang dikembangkan oleh Leavis, yaitu mengajak pembaca mencari nilai-nilai moral dalam karya sastra. Walau bersifat subyektif, model pembacaan ini bermanfaat karena menempatkan pembaca pada posisi yang cukup terhormat; pembaca menjadi responsif dan mampu mengembangkan pemahaman dan penghargaannya terhadap cerita-cerita yang bagus melalui genre yang berbeda-beda. Interpretative Reading melatih pembaca merasakan beragam cita rasa ketika membaca novel dibanding dengan ketika membaca koran, atau puisi dengan iklan, misalnya. Apresiasi antar budaya lahir dari latihan membaca dengan cara ini.
Namun, kesalahan umum yang sering dilakukan beberapa mahasiswa saya adalah menjadi terlalu subyektif dan emosional sehingga tidak bisa menangkap pesan bahwa sastra adalah bagian dari budaya secara umum.

3. Critical Reading
Jika pada dua model sebelumnya tujuan membaca adalah untuk mengetahui apa yang dikatakan suatu teks kepada pembaca dan apa yang dilakukan teks kepada pembaca, maka ketrampilan membaca ke-3 ini bertujuan mencari makna teks – “what a text means”. Pembaca ingin mengetahui maksud pengarang; untuk siapa karyanya ditujukan; apakah ia mengesankan bias dalam penyampaiannya; ideologi apa yang menjadi jiwa tulisannya, dan pertanyaan-pertanyaan lain yang pada hakekatnya memberi penilaian obyektif terhadap
sebuah karya sastra.
Salah satu saran praktis dalam membaca kritis yaitu menempatkan diri menjadi target audience dengan mengenal latar belakang, karya dan kiprah pengarang di dunianya. Banyak tokoh dalam karya sastra merupakan skewed and disguised image dari pengarangnya. Sungguh menarik ketika kita tahu bahwa J. D. Salinger yang pemurung dan suka menyendiri itu juga berpindah-pindah dari satu sekolah ke sekolah lain seperti Holden Caulfield. Siapapun akan melihat bayangan Tennessee Williams dan ibundanya pada Tom
dan Amanda Wingfield dalam The Glass Menagerie. Pada Critical Reading, koherensi dan logika teks sangat penting. Kedua hal ini kadang tidak tertangkap oleh mahasiswa-mahasiswa S-1. Banyak mahasiswa saya yang tidak membaca dengan mata hati terbuka tetapi menuruti kemampuan dan kemauan mereka tanpa memberikan kesempatan kepada pengarang menyampaikan ide-idenya. Saya bukan penggemar Ayu Utami, tetapi saya sering merasa tidak nyaman jika pembaca Saman seakan-akan mengadili kehidupan pribadi (baca: seks) pengarangnya. Seorang pembaca novel yang kritis hanya bertugas menimba ilmu, bukan mencoba menulis novel lain seturut dengan kepribadian dan nilai-nilai yang diyakininya yang belum tentu sama dengan yang dimiliki oleh pengarang. Sekarang saya sampai pada kegagalan ke-2 dalam menerapkan model pembacaan kritis. Ketika mahasiswa-mahasiswa skripsi saya meminjam teori Feminisme, Marxisme,
Psikoanalisa, Poskolonialsme dan sebagainya untuk membedah karya sastra, mereka mencoba menunjukkan kelancaran mereka berbicara tentang berbagai disiplin ilmu dari sejarah, sosiologi sampai filsafat tanpa koherensi yang jelas. Critical Reading memang mengarah pada penerapan berbagai teori kajian sastra dan budaya. Tetapi yang saya amati pada sejumlah karya tulis mahasiswa saya, pelaksanaan proyek tersebut tidak selalu berjalan mulus karena biasanya mereka belum bisa menangkap central claim atau reasoning dari pengarang teks yang dikaji. Teori-teori mutakhir ini lalu dipajang sebagai pernak-pernik atau window dressing saja.

4. Creative Reading
Inilah tahap pemahaman membaca yang paling tinggi, yaitu mengakhiri sebuah perjalanan mencari jati diri (lewat membaca) dengan melahirkan kembali sebuah teks setelah pembaca mengalami transformasi. Bukankah kita sering mendengar bahwa karya sastra mempunyai kekuatan untuk informasi, reformasi dan transformasi? Bahkan pandangan yang ultra pragmatis menganggap karya sastra juga mempunyai kapasitas deformasi. Tujuan akhir yang sekaligus menjadi kata kunci Creative Reading adalah terapi penulisan (kembali) ilmu-ilmu humaniora. Membaca kreatif di sini bukan sekedar mencari pleasure dari kegiatan itu, tetapi sekaligus self-fulfillment yang pada gilirannya mampu memberikan sumbangan yang bermanfaat bagi dunia ilmu dan komunitas kecil maupun besar. Pada tahap ini pembacaan harus sampai pada kemampuan menghadirkan kembali karya yang dibaca lewat teks yang ditulis ulang semisal dengan memberikan alternative endings. Pembaca membuat pengakhiran alternatif untuk mengksplorasi rasa senang, haru, marah, dan berbagai emosi lain dalam tulisannya. Sebagai contoh, apa yang terjadi kalau Willy Loman tidak mati bunuh diri? Apakah Death of a Salesman yang ditulis lebih dari setengah abad yang lalu sebagai gugatan atas American Dream masih sesuai dengan paradigma kesuksesan masa kini yang juga diukur dengan penimbunan materi? Bagaimana analisa pribadi dan kritik terhadap diri sendiri ditanggapi? Pembaca kreatif ini lalu diharapkan menulis sebuah diskursi tandingan dengan atau tanpa menjadi seorang Arthur Miller lain. Dia bisa menulis wacana psikologi yang sastrawi, misalnya. Sunardi mencermati bahwa dunia sastra sekarang dikuasai oleh ‘orang-orang luar’ dengan mencontohkan hasil-hasil penelitian ilmu sosial yang dikemas menjadi karya sastra seperti Cultural Intimacy: Social Poetics in the Nation State (1997) oleh Michael Herzfeld atau An Intimate History of Humanity (1994) oleh Theodore Zeldin. Sebagai catatan, Creative Reading sebagai aktivitas personal yang berdampak komunal bisa dilihat akhir-akhir ini dengan munculnya kelompok-kelompok pembaca sastra. Di Inggris, menurut Debbie Hick dari the Reading Agency, pendanaan publik yang dulunya diberikan pada perpustakaan-perpustakan sekarang disisihkan juga untuk pembaca,penulis dan aktivitas membaca dan menulis, sehingga ‘book talk’ bermunculan Membutuhkan Membaca dan Membaca Membutuhkan Menulis Membaca Bebas dan Sengaja (MBS) Setelah mengawali buku yang mengungkapkan hasil-hasil risetnya tentang membaca dan menulis seperti itu, kemudian Dr. Krashen berbicara soal cara mengatasi problem atau tuntutan tersebut. Berikut uraian Dr. Krashen selanjutnya:
"Menurut hemat saya, penyembuhan dari krisis kemampuan baca-tulis ini terletak pada melakukan satu kegiatan, kegiatan yang jarang dilakukan dalam kehidupan banyak orang, yaitu membaca. Khususnya, saya menyarankan membaca buku dalam jenis tertentu -- Membaca secara Bebas dan Sengaja (disingkat MBS atau free voluntary reading [FVR]). MBS berarti Anda menjalankan kegiatan membaca karena Anda memang menginginkannya."
"Untuk anak usia sekolah, MBS berarti tidak ada pembuatan laporan tentang buku yang dibaca, tidak ada pertanyaan di akhir bab, dan tidak perlu mencari arti yang benar untuk setiap kosakata yang ditemukan. MBS berarti menyingkirkan buku yang tidak Anda sukai dan memilih yang lain yang bermanfaat dan disukai sebagai gantinya. Ini jenis membaca yang dilakukan secara obsesif oleh mereka yang sangat terpelajar di Amerika."
"Saya tidak akan mengatakan MBS sebagai jalan keluar sepenuhnya. Pembaca-bebas tidak dijamin bisa masuk Harvard. Yang disampaikan riset ini adalah bahwa jika anak-anak atau orang dewasa yang tidak begitu cakap mulai membaca untuk kesenangan, maka hal-hal baik akan terjadi. Pemahamannya terhadap bacaan akan membaik, dan mereka akan lebih mudah mengerti teks akademis yang sulit. Gaya tulisan mereka akan membaik, dan mereka akan mampu lebih baik menulis prosa dengan gaya yang diterima di sekolah, bisnis, dan masyarakat ilmiah. Kosakata mereka akan bertambah dalam kecepatan yang lebih baik dibanding jika mereka menjalani kursus peningkatan kosakata yang sering dijajakan oleh para pengiklan. Lagi pula, ejaan dan tata bahasa mereka pun akan membaik."
"Dengan kata lain, pembaca-bebas memiliki peluang. Dan riset juga menunjukkan bahwa mereka yang tidak memupuk kebiasaan membaca yang menyenangkan, ada kemungkinan tidak memiliki peluang untuk hidup lebih baik -- mereka akan menghadapi masa-masa sulit dalam hal baca- tulis pada tingkatan yang cukup tinggi dalam menghadapi tuntutan dunia kini." "Buku The Power of Reading, mempelajari riset terhadap MBS, cara penerapan MBS, dan hal-hal yang berkaitan dengan membaca, menulis, dan kemelekan huruf. Peluang yang ditawarkan oleh MBS terhadap pribadi dan masyarakat sungguh luar biasa. Tujuan buku ini adalah memperlihatkan kepada pembaca apa yang ditawarkan MBS."
Setelah menguraikan gagasan pokoknya secara selintas, Dr. Krashen kemudian menunjukkan bukti-bukti bermanfaatnya membaca dalam kaitannya dengan menulis dan hal-hal yang mengelilinginya. Di bawah ini adalah potongan-potongan gagasan Dr. Krashen yang disesuaikan dengan materi buku yang sedang Anda hadapi ini. Silakan menyimak secara relaks dan ambillah "makna-makna" penting yang tiba-tiba mencuat dari hasil riset Dr. Krashen.
Perlu ditambahkan di sini bahwa dalam menunjukkan hasil-hasil risetnya ini, Dr. Krashen juga mengutip pelbagai hasil penelitian lain yang mendukung penelitiannya. Nanti Anda akan menjumpai beberapa nama di dalam kurung yang diikuti oleh angka berupa tahun. Itu menunjukkan orang yang meneliti bidang tersebut dan kapan hasil penelitian tersebut dipublikasikan. Di sini tidak disajikan secara lengkap identitas itu demi mencapai keringkasan dan kepraktisan penyajian.
Mengapa pembaca yang baik tetap memiliki celah kekurangan? Apa yang menjadi kendala dalam kemahiran berbahasa tulis? Salah satu penjelasan adalah bahwa tidak semua yang tercetak harus diperhatikan; maksudnya, membaca dapat dianggap berhasil apabila pembaca dapat memahami yang dibaca. Dan untuk mencapai hal ini, pembaca tidak harus menggunakan sepenuhnya semua yang tertera di atas kertas.
Menurut sebuah penelitian (Goodman, 1982; Smith, 1988), pembaca fasih menciptakan hipotesis terhadap teks yang akan mereka baca didasarkan pada apa yang sudah mereka baca, pengetahuan mereka dalam bidang itu, dan pengetahuan mereka akan bahasa -- dan hanya menggunakan aspek tercetak yang mereka perlukan untuk menegaskan hipotesis mereka itu. Sebagai contoh, kebanyakan pembaca bisa menduga apa kata terakhir yang akan dipakai oleh sebuah kalimat. Pembaca yang baik tidak perlu memperhatikan dengan sepenuhnya dan dengan hati-hati kata "ini" di akhir kalimat untuk memahaminya; mereka hanya perlu melihat sekilas untuk memastikan bahwa kata itu tertera di sana.
Dengan demikian, pembaca yang cakap tidak memperhatikan detail kalimat di setiap halaman, dan mereka mungkin gagal melihat perbedaannya atau apakah kata-kata tertentu berakhiran "-lah" atau "-kah". Celah kecil ini, dalam pandangan saya, tidak terlalu perlu diperhatikan untuk menjalankan kegiatan membaca yang lancar dan efisien.
Tentang Menulis
Bahasan tentang tulis-menulis patut mendapat tempat lebih luas dibanding yang saya berikan di sini. Akan tetapi, tujuan saya bukan untuk memberikan survei menyeluruh tentang apa yang diketahui tentang penulisan dan bagaimana kemampuan menulis berkembang. Tujuan saya lebih untuk menyampaikan dua poin penting di bawah ini:
1. Gaya tulisan tidak didapat dari menulis, melainkan dari membaca. 
2. Menulis bisa membantu kita menyelesaikan masalah dan menjadikan kita semakin cerdas.
Gaya Tulisan Berasal dari Membaca
Riset dengan jelas menunjukkan bahwa kita belajar menulis lewat membaca. Untuk lebih tepatnya, kita memperoleh gaya tulisan, bahasa khusus penulisan, dengan membaca. Kita sudah melihat banyak bukti yang menegaskan hal ini: Anak-anak yang berpartisipasi dalam program membaca-bebas, menulis dengan lebih baik (misalnya, Elley dan Mangubhai, 1983; McNeil dalam Fader, 1976) dan mereka yang melaporkan bahwa semakin banyak mereka membaca semakin baik tulisannya (misalnya, Kimberling et al., 1988 sebagaimana dilaporkan dalam Krashen 1978, 1984; Applebee, 1978; Alexander, 1986; Salyer, 1987; Janopoulus, 1986; Kaplan dan Palhinda, 1981; Applebee et al., 1990).
Ada alasan lain untuk memperkirakan bahwa gaya penulisan berasal dari membaca. "Argumen kompleksitas" berlaku pula untuk penulisan: Semua cara di mana bahasa tertulis "resmi" berbeda dengan bahasa yang lebih informal terlalu rumit untuk dipelajari satu per satu. Bahkan walau pembaca mengenali tulisan yang baik, para peneliti tidak berhasil menjabarkan secara lengkap tentang apa persisnya yang membuat tulisan yang "bagus" itu bagus. Oleh karena itu, masuk akal untuk mengatakan gaya penulisan tidak dipelajari secara sadar, melainkan umumnya diserap, atau secara tidak sadar diperoleh, lewat membaca.
Hunting (1967) memaparkan riset untuk disertasi (tidak dipublikasikan) yang menunjukkan bahwa kuantitas tulisan tidak berkaitan dengan kualitas tulisan. Banyak sekali kajian yang menunjukkan bahwa meningkatnya kuantitas tulisan tidak mempengaruhi kualitas tulisan. Nah, tentang gaya tulisan berasal dari membaca bukan dari menulis, sejalan dengan yang diketahui tentang kemahiran berbahasa: Kemahiran berbahasa diperoleh melalui masukan (input), bukan keluaran (output), dari pemahaman, bukan hasil. Dengan demikian, jika Anda menulis satu halaman sehari, gaya tulisan Anda tidak akan meningkat. Akan tetapi, hal baik lain bisa dihasilkan dari tulisan Anda, sebagaimana yang akan kita lihat dalam pembahasan berikut.
Apa yang Dilakukan Tulisan
Kendati menulis tidak membantu kita mengembangkan gaya penulisan, menulis mempunyai keuntungan lain. Seperti yang dikemukakan Smith (1988), kita menulis setidaknya karena dua alasan. Pertama, dan paling nyata, kita menulis untuk berkomunikasi dengan orang lain. Namun mungkin yang lebih penting, kita menulis untuk diri kita sendiri, untuk memperjelas dan merangsang pikiran kita. Sebagian besar tulisan kita, bahkan kalaupun kita adalah penulis yang karyanya diterbitkan, adalah untuk diri kita sendiri.
Seperti yang diungkapkan Elbow (1973), sulit untuk mengendalikan lebih dari satu gagasan dalam pikiran sekaligus. Tatkala kita menuliskan gagasan kita, hal-hal samar dan abstrak menjadi jelas dan konkret. Saat semua pikiran tumpah di atas kertas, kita bisa melihat hubungan di antara mereka, dan bisa menciptakan pemikiran yang lebih baik. Menulis, dengan kata lain, bisa membuat kita lebih cerdas.
Menulis bisa membantu kita berpikir secara menyeluruh dan menyelesaikan masalah. Pembaca yang selalu menuliskan catatan harian atau jurnal tahu banyak tentang hal ini -- Anda menghadapi masalah, Anda menuliskannya, dan setidaknya 10 persen dari masalah itu raib. Terkadang, keseluruhan permasalahan itu hilang.
Mungkin, bukti eksperimental terjelas yang memperlihatkan bahwa menulis membantu pemikiran adalah serangkaian kajian yang dilakukan Langer dan Applebee (1987). Siswa-siswa sekolah menengah diminta membaca telaah sosial kemudian mempelajari informasi di dalamnya dengan menuliskan esai analitis tentang pertanyaan yang ditugaskan berkaitan dengan topik tersebut, atau dengan menggunakan teknik belajar lainnya (misalnya membuat catatan, menjawab pertanyaan tentang pemahaman, menuliskan ringkasan, teknik belajar "normal" tanpa menulis).
Lalu para siswa itu diberi pelbagai ujian mengenai materi bacaan. Langer dan Applebee melaporkan bahwa "secara umum, tanggapan tertulis apa pun mengarah pada kinerja yang lebih baik dibanding membaca tanpa menulis". Dalam kajian ketiga, mereka menunjukkan bahwa menulis esai tidak membuat informasi bertahan lama (di otak) jika materi bacaan yang diberikan mudah; namun apabila materi yang mereka baca sulit, penulis esai memberikan hasil yang jauh lebih baik dibanding siswa yang menggunakan teknik belajar lainnya. Hasil serupa tentang keefektifan penulisan esai dilaporkan oleh Newell (1984), Marshall (1987), serta Newell dan Winograd (1989).
Terkadang, sedikit saja menulis sudah bisa membuat perbedaan besar. Dalam kajian yang dilakukan Ganguli (1989), ditunjukkan bahwa mahasiswa matematika yang meluangkan tiga menit per periode untuk menjabarkan dalam bentuk tulisan konsep penting yang dikemukakan di kelas, lebih unggul dalam ujian akhir semester dibanding kelompok pembanding. Untuk ulasan mengenai riset tambahan yang mendukung hipotesis bahwa menulis "bisa membuat Anda lebih cerdas", lihat Applebee (1984) dan Krashen (1990).
Akhirnya, kesimpulan saya sederhana saja. Apabila anak-anak membaca untuk kesenangan, apabila mereka "terikat dengan buku", mereka memperoleh, secara tidak sengaja dan tanpa usaha yang dilakukan dengan sadar, hampir semua hal yang disebut "ketrampilan kebahasaan" yang sangat diperhatikan oleh banyak orang: Mereka akan menjadi pembaca handal, mendapatkan banyak kosakata, mengembangkan kemampuan untuk memahami dan menggunakan susunan kalimat majemuk, mengembangkan gaya penulisan yang bagus, dan menjadi pengeja yang hebat (walau bukan sempurna). Meskipun membaca dengan bebas dan dengan sengaja itu sendiri tidak akan memastikan didapatkannya kecakapan pada tingkatan tertinggi, setidaknya ia menjamin tingkatan yang dapat diterima. Tanpa hal itu, saya duga anak-anak tidak berpeluang.
Ketika kita membaca, kita betul-betul tidak punya pilihan kita harus melek huruf. Kita jarang menemukan orang yang membaca dengan baik menghadapi persoalan serius berkenaan dengan tata bahasa, ejaan, dan lain-lain. Mereka menulis cukup bagus karena mereka tidak bisa menahannya; mereka memiliki gaya tulisan yang tanpa sadar diperoleh, begitu pula aturan kepenulisan.
Orang yang membaca dengan baik, menulis dengan baik pula karena mereka secara tidak sadar mendapatkan gaya penulisan yang baik. Akan tetapi, saya bukan mengajukan program kebahasaan yang terdiri dari hanya membaca bebas. Saya juga sepakat dengan nilai membaca yang ditugaskan oleh guru dan direkomendasikan oleh guru, petugas perpustakaan, dan orangtua. Membaca yang ditugaskan serta membaca bebas dan disengaja akan saling membantu: lewat literatur, siswa akan tumbuh secara intelektual dan akan terpapar dengan aneka ragam buku, yang bisa merangsang untuk lebih banyak membaca bebas.

Pada artikel selanjutnya akan dilanjutkan dengan membahas berbagai artikel yang mengenai sastra,jadi silahkan update.
Salam....

Jumat, 26 April 2013

Using ARC with non iOS compiler - possible?

Did you ever have the situation with 2 lists sharing the same objects and possibly one or both had the OwnsObjects property set to true? Especially when using interfaced lists like in Spring4d or DSharp you want to make use of reference couting and automatic memory management. But what if some instances are shared between different lists or moved from one list to the other. You cannot use the Delete or Remove method and then add the object to the other list of vice versa if the first list has OwnsObjects true because it will destroy the instance when it gets removed. That is why there is the Extract method which removes the instance but does not destroy it. This can get complicated and possibly leading to memleaks or exceptions quickly.

Using interfaced objects for simple data storages might not be a very good idea. It requires you to write interfaces with the properties just for that purpose and if you use some kind of RTTI based binding you cannot do that as there is no RTTI for interface properties (which are just syntax sugar anyway).

So what would we give for some easy memory management in these cases. How about using the concept we know from interfaces and other types for objects?

Of course we could write some TRefCountObject and inherit our data classes from that base class and handle these in our Notify method inside the list when items get added or removed. But that would be to easy and not magic at all. ;) And more seriously it does not always work to change the base type due to several reasons.

So what do we need? Basically just a new field inside our object to keep track of the reference count. Keep in mind we cannot do a full ARC implementation because that would include assignments and parameter passing which would need compiler support. We just want it for when objects are put into lists.

The method that is responsible for allocating the memory of new instances is TObject.NewInstance. So we need to replace that:

procedure InitializeARC;
var
  Buffer: array[0..4] of Byte;
begin
  Buffer[0] := $E9
  // redirect TObject.NewInstance
  PInteger(@Buffer[1])^ := PByte(@NewInstance) - (PByte(@TObject.NewInstance) + 5);
  WriteMemory(@TObject.NewInstance, @Buffer, 5);
end;

What this code does is place a jump instruction at the very beginning of the TObject.NewInstance method that redirects it to our NewInstance routine which looks like this:

function NewInstance(Self: TClass): TObject;
begin
  // get additional memory for the RefCount field
  GetMem(Pointer(Result), Self.InstanceSize + SizeOf(Integer));
  Result := InitInstance(Self, Result);
end;

It does basically the same as the original except that it allocates 4 bytes more for our RefCount field and then calls our version of InitInstance (which is responsable for initializing the object):

function InitInstance(Self: TClass; Instance: Pointer): TObject;
const
  Buffer: Pointer = @BeforeDestruction;
begin
  Result := Self.InitInstance(Instance);

  // initialize the RefCount field
  GetRefCountFieldAddress(Instance)^ := 0;

  // replace TObject.BeforeDestruction
  if PPointer(NativeInt(Self) + vmtBeforeDestruction)^ = @TObject.BeforeDestruction then
    WriteMemory(PPointer(NativeInt(Self) + vmtBeforeDestruction), @Buffer, SizeOf(Pointer));
end;

Since TObject.InitInstance just zeroes the memory the RTL knows about (obtained by calling InstanceSize) we need to set our field which sits on the last 4 bytes in our instance:

function GetRefCountFieldAddress(Instance: TObject): PInteger; inline;
begin
  // the RefCount field was added last
  Result := PInteger(NativeInt(Instance) + Instance.InstanceSize);
end;

Along with the reference couting we want to make sure that the instance is not getting destroyed when it is still managed by the RefCount (because it sits in some list). That is why the BeforeDestruction method gets replaced. Why not detour like NewInstance? The implementation in TObject is empty so there are not 5 bytes of available that we can overwrite to jump to our implementation. But as it is virtual we can replace it in the classes VMT. Like its implementation in TInterfacedObject it will raise an error when the RefCount is not 0.

procedure BeforeDestruction(Self: TObject);
begin
  if GetRefCount(Self) <> 0 then
    System.Error(reInvalidPtr);
end;

Implementing the actual AddRef and Release routines is pretty easy aswell:

function __ObjAddRef(Instance: TObject): Integer;
begin
  Result := InterlockedIncrement(GetRefCountFieldAddress(Instance)^);
end;

function __ObjRelease(Instance: TObject): Integer;
begin
  Result := InterlockedDecrement(GetRefCountFieldAddress(Instance)^);
  if Result = 0 then
    Instance.Destroy;
end;

The most important thing: You need to add the unit which contains this as the very first unit in your project  (or after ShareMem) so the NewInstance method gets patched as soon as possible.

Time to test if it does what it should:

implementation

{$R *.dfm}

uses
  DSharp.Collections,
  DSharp.Core.ARC;

type
  TList<T: class> = class(DSharp.Collections.TList<T>)
  protected
    procedure Notify(const Value: T; const Action: TCollectionChangedAction); override;
  end;

procedure TList<T>.Notify(const Value: T;
  const Action: TCollectionChangedAction);
begin
  case Action of
    caAdd: __ObjAddRef(Value);
    caRemove: __ObjRelease(Value);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  list1, list2: IList<TObject>;
begin
  list1 := TList<TObject>.Create;
  list2 := TList<TObject>.Create;

  list1.Add(TObject.Create);
  list1.Add(TObject.Create);
  list2.AddRange(list1);
  list1.Delete(1);
end;

initialization
  ReportMemoryLeaksOnShutdown := True;

end.

When we click the button both objects get added to both lists and the last list containing an object will cause it to get destroyed when removed (which happens if the list gets destroyed aswell).

So far this is more of a proof of concept but I think this can make some code easier and less complicated especially when working a lot with lists and moving around objects without knowing what list at the end owns the objects.

You can find that code in the svn repository and as always your feedback is welcome.

Selasa, 23 April 2013

Why no extension methods in Delphi?

I have been wondering this for a long time now. Why does Delphi not have this great language feature? Sure, we have helpers but they are not the same. First they are still officially considered a feature you should not use when designing new code. However it opens up some interesting possibilities - some might call it hacks... but that is a topic for another day. Second they don't work on interfaces or generic types. And interestingly though that is what I want to talk about today.

But first - if you don't know it already - I suggest you read what an extension method is - really I could not explain it any better. Oh, and to all readers that want to jump the "stop the dotnetification of Delphi - keep these new language features away" wagon - this post is not for you, sorry.

Ever had a class or a set of classes you wanted to add some functionality to? Sure, there are ways to do so like the decorator pattern. But did you see the problem there if you have a type you cannot inherit from because either you cannot modify the code or it's not a class but an interface? Well, then create a new interface and add that functionality there, someone might say. How, if you cannot extend the given type? Use the adapter or bridge pattern? You can see where this is going. You might end having to change existing code or introduce lots of code to apply your additional functionality.

The most prominent example of extension methods (and not surprisingly the reason they were introduced in C# 3.0) are the extension methods for IEnumerable<T>. If you want to use the foreach (or for..in loop in Delphi) all you have to implement is the GetEnumerator method (and actually the only method that IEnumerable<T> got). So if you ever need to implement that in some of your classes you implement just one method and got access to almost any query operation you can imagine - not saying they all make sense in every context, but you get the idea.

Extension methods are great. You don't clutter your class with things that don't belong there directly but apply to an aspect of your class (in our case being enumerable). They follow good principles like the dependency inversion principle. The way you are using them is more natural and makes more sense than having static methods (or routines) where you pass in the instance you want to call the method on as first parameter.

Even without the fancy LINQ Syntax without question it is much more readable to write

for c in customers.Where(HasBillsToPay).OrderBy<string>(GetCompanyName) do
Writeln(c.CompanyName);

instead of

for c in EnumerableHelper.OrderBy<string>(
  EnumerableHelper.Where(customers, HasBillsToPay), GetCompanyName) do
Writeln(c.CompanyName);

And that statement has only two chained calls - imagine how that grows in length if you got a more complex query with grouping or something else. Also in that case it is the order on how the query gets processed - easier to read and to write.

But - you remember - no helpers for interfaces and generics! Well, we can implement these methods in our base TEnumerable<T> class and/or put it on our IEnumerable<T> interface, no? Yes, we can. And everything would be fine if there wasn't one tiny detail - how generics are implemented in Delphi and how the compiler handles them: it generates a type for every specialization. Which means the same code compiled for every possible T in your application, for TCustomer, TOrder, TCategory and so on. Only with a small set of methods implemented (and possible classes for more complex operations like GroupBy for example) this means you get hundreds of KB added for each TList<T> you will ever use - even if you never touch these methods. That is because the linker cannot remove any method inside an interface even if never called.

So how to work around that problem (which is what I have been doing in the Spring4D refactoring branch lately)? Let's take a look again on how extension methods are defined. Nothing prevents us from creating that syntax in Delphi, so a Where method could look like this:

type
  Enumerable = record
    class function Where<TSource>(source: IEnumerable<T>;
      predicate: TPredicate<TSource>): IEnumerable<T>;
  end;

Simple, isn't it? But how to call it? We need a little trick here, let's see:

type
  Enumerable<T> = record
  private
    fThis: IEnumerable<T>;
  public
    function GetEnumerator: IEnumerator<T>;

    function Where(predicate: TPredicate<TSource>): Enumerable<T>

    class operator Implicit(const value: IEnumerable<T>): Enumerable<T>;
  end;

As you can see we use a record type that wraps the interface we want to extend and add the method there. We can implement the "extension methods" there or direct the call to our extension method type if we want to keep it seperatly.

We now have a nice way to do our query just like we wrote it above if customers where from Enumerable<T>. Or we can perform a cast (since we have an implicit operator that will get used). Also notice how the result of the Where method is of the record type. That way we can chain the calls easily. And because we implemented GetEnumerator we can use it in a for..in loop just like any IEnumerable<T>.

What's also nice about the record type is that the linker can now be smart and remove any method that we never call and save us dozens of megabytes in our binary (not kidding).

So our life could be so much easier if we had extension methods (or call them helper) for interfaces and generic types. But as long as we don't have that, we have to find some clever workarounds.

If you are a Spring4D user, check out the changes in the refactoring branch and let me know what you think.

Jumat, 19 April 2013

Yaaa...Adsense Ane Kena Disable lagi...Oh ternyata karena ini...





JUST INFO...buat pengingat ane sendiri ^_^

Moga aja bisa jadi pelajaran buat blogger dan ane khususnya, hari ini ane dapat surat Cinta dari om Google, dengan judul,
"Your Adsense Account Has Been Disable" dan ini yang ke tiga kalinya...hahahaha.. ^_^
langsung buru buru ane periksa, takutnya akun utama ane yang di Banned ama om google, alhamdulillah ternyata akun adsense buat One-loading

Selasa, 02 April 2013

Operator Relasi C++ beserta contohnya



Operator Relasi C++ beserta contohnya ~ Lama tak jumpa shobat,nach pada kesempatan kali ini,blog ini akan memberikan sedikit penjelasan mengenai Operator Relasi beserta contoh programnya.
Operator relasi ini sangan sering kita dapatkan dalam membuat suatu program,contohnya pada C++ kali ini.
Berbicara tentang program,C++ in bukanlah satu-satunya bahasa pemrograman yang ada,tapi masih banyak bahasa pemrograman lainnya
di luar sana.Jadi Operator Relasi ini juga kita dapat gunakan dalam bahasa pemrograman lainnya.


Operator Relasi
Digunakan untuk membandingkan dua buah nilai. Hasil dari perbandingan operator ini
menghasilkan nilai numerik 1(true) atau 0 (false)

 

Contoh :


Nach apabila anda penasaran dengan hasil yang akan dikeluarkan,Silahkan tulis/ketil coding diatas,kemudian lihat hasilnya seperti apa.
Setidaknya anda mengerti tentang subjek pembahasan kita kali ini mengenai Operator Relasi.
Sekian artikel kali ini mengenai Oprator relasi,dan selamat bertemu kembali pada artikel selanjutnya.

Salam berbagi...!!!
 

Indah Hidup Copyright © 2012 Fast Loading -- Powered by Blogger